settlementsdaterangeindex_unused.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. <?php
  2. /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
  3. * Copyright (C) 2004-2015 Laurent Destailleur <eldy@users.sourceforge.net>
  4. * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
  5. * Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 3 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program. If not, see <https://www.gnu.org/licenses/>.
  19. */
  20. /**
  21. * \file settlements/settlementsindex.php
  22. * \ingroup settlements
  23. * \brief Home page of settlements top menu
  24. */
  25. // Load Dolibarr environment
  26. $res = 0;
  27. // Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
  28. if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) {
  29. $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"] . "/main.inc.php";
  30. }
  31. // Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
  32. $tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME'];
  33. $tmp2 = realpath(__FILE__);
  34. $i = strlen($tmp) - 1;
  35. $j = strlen($tmp2) - 1;
  36. while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) {
  37. $i--;
  38. $j--;
  39. }
  40. if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1)) . "/main.inc.php")) {
  41. $res = @include substr($tmp, 0, ($i + 1)) . "/main.inc.php";
  42. }
  43. if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1))) . "/main.inc.php")) {
  44. $res = @include dirname(substr($tmp, 0, ($i + 1))) . "/main.inc.php";
  45. }
  46. // Try main.inc.php using relative path
  47. if (!$res && file_exists("../main.inc.php")) {
  48. $res = @include "../main.inc.php";
  49. }
  50. if (!$res && file_exists("../../main.inc.php")) {
  51. $res = @include "../../main.inc.php";
  52. }
  53. if (!$res && file_exists("../../../main.inc.php")) {
  54. $res = @include "../../../main.inc.php";
  55. }
  56. if (!$res) {
  57. die("Include of main fails");
  58. }
  59. use Luracast\Restler\RestException;
  60. require_once DOL_DOCUMENT_ROOT . '/core/class/html.formfile.class.php';
  61. require_once DOL_DOCUMENT_ROOT . '/user/class/usergroup.class.php';
  62. require_once DOL_DOCUMENT_ROOT . '/custom/settlements/class/groupusers.class.php';
  63. require_once DOL_DOCUMENT_ROOT . '/custom/settlements/class/helper.class.php';
  64. $helper = new Helper($db);
  65. function getAllUsers($db)
  66. {
  67. $sql = "SELECT * FROM llx_user as u WHERE rowid NOT IN (SELECT fk_user FROM llx_settlements_groupusers) ORDER BY u.lastname";
  68. $data = $db->query($sql);
  69. if (!$data) {
  70. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  71. }
  72. while ($row = pg_fetch_assoc($data)) {
  73. $allUsers[] = $row;
  74. }
  75. return $allUsers;
  76. }
  77. // Load translation files required by the page
  78. $langs->loadLangs(array("settlements@settlements"));
  79. $action = GETPOST('action', 'aZ09');
  80. $id = GETPOST('id', 'int');
  81. $idmenu = GETPOST('idmenu', 'int');
  82. $daterange = GETPOST('daterange', 'alpha');
  83. $datepicker = GETPOST('datepicker', 'alpha');
  84. $interval = GETPOST('interval', 'alpha');
  85. if($interval == 'on'){
  86. $_SESSION['interval'] = $interval;
  87. }
  88. // Security check
  89. // if (! $user->rights->settlements->myobject->read) {
  90. // accessforbidden();
  91. // }
  92. $socid = GETPOST('socid', 'int');
  93. if (isset($user->socid) && $user->socid > 0) {
  94. $action = '';
  95. $socid = $user->socid;
  96. }
  97. $form = new Form($db);
  98. $formfile = new FormFile($db);
  99. $groups = $helper->getAllGroupsFromGroupClass($db);
  100. if (empty($id)) {
  101. $keys = array_keys($groups);
  102. $id = $keys[0];
  103. }else{
  104. $daterange = isset($_SESSION['daterange']) ? $_SESSION['daterange'] : '';
  105. $datepicker = isset($_SESSION['datepicker']) ? $_SESSION['datepicker'] : '';
  106. }
  107. $bigRedDiv = '';
  108. $sumsHUFArray = [];
  109. $sumsEURArray = [];
  110. $dateforHiddenField = $datepicker != '' ? $datepicker : $daterange;
  111. if($datepicker != ''){
  112. $_SESSION['datepicker'] = $datepicker;
  113. unset($_SESSION['daterange']);
  114. //unset($_SESSION['interval']);
  115. $datesOfRange = $helper->createArray($datepicker);
  116. foreach ($datesOfRange as $date) {
  117. $usersOfGroups = $helper->getUsersByIdWithDate($db, $id, $date);
  118. $deletedUsersArray = $helper->getDeletedUsers($db, $id, $date);
  119. if (!empty($usersOfGroups)) {
  120. $sumsHUFArray[$date] = $helper->getSum($db, 'HUF', $id, $usersOfGroups, $date);
  121. $sumsEURArray[$date] = $helper->getSum($db, 'EUR', $id, $usersOfGroups, $date);
  122. }
  123. } $bigRedDiv = '<div style="width:100%; color: white; font-weight:bold ;background-color: #fa8072; height:30px; text-align: center; padding-top: 15px; border-radius: 10px;">' . $langs->trans('onedayfilter') . ' ' . $datepicker . '<br></div>';
  124. }
  125. if($daterange != ''){
  126. $_SESSION['daterange'] = $daterange;
  127. unset($_SESSION['datepicker']);
  128. $datesOfRange = $helper->createArray($daterange);
  129. foreach ($datesOfRange as $date) {
  130. $usersOfGroups = $helper->getUsersByIdWithDate($db, $id, $date);
  131. $deletedUsersArray = $helper->getDeletedUsers($db, $id, $date);
  132. if (!empty($usersOfGroups)) {
  133. $sumsHUFArray[$date] = $helper->getSum($db, 'HUF', $id, $usersOfGroups, $date);
  134. $sumsEURArray[$date] = $helper->getSum($db, 'EUR', $id, $usersOfGroups, $date);
  135. }
  136. }
  137. $bigRedDiv = '<div style="width:100%; color: white; font-weight:bold ;background-color: #fa8072; height:30px; text-align: center; padding-top: 15px; border-radius: 10px;">' . $langs->trans('moredayfilter') . ' ' . $daterange . '<br></div>';
  138. }else{
  139. unset($_SESSION['interval']);
  140. }
  141. llxHeader('', $title, $help_url, '', 0, 0, $morejs, $morecss, '', 'classforhorizontalscrolloftabs');
  142. //print_r($_REQUEST);
  143. $url = $_SERVER["PHP_SELF"] . '?idmenu=' . $idmenu . '&mainmenu=settlements&leftmenu=';
  144. if (isset($massaction) || isset($massactionadd)) {
  145. $url .= "&id={$id}";
  146. }
  147. print '<form method="POST" id="statementlists" action="' . $url . '">' . "\n";
  148. print '<input type="hidden" name="token" value="' . newToken() . '">';
  149. print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
  150. print '<input type="hidden" name="action" value="list">';
  151. print '<input type="hidden" name="sortfield" value="' . $sortfield . '">';
  152. print '<input type="hidden" name="sortorder" value="' . $sortorder . '">';
  153. print '<input type="hidden" name="page" value="' . $page . '">';
  154. print '<input type="hidden" name="contextpage" value="' . $contextpage . '">';
  155. //print '<input type="hidden" name="datepickerdata" value="' . $daterange . '">';
  156. print '<input type="hidden" name="datepickerdata" value="' . $dateforHiddenField . '">';
  157. //print '<input type="hidden" name="intervalchk" value="' . $interval . '">';
  158. print '<input type="hidden" name="intervalchk" value="' . $_SESSION['interval'] . '">';
  159. print load_fiche_titre($langs->trans("SettlementsRangeArea"), '', 'settlements.png@settlements');
  160. print $bigRedDiv;
  161. print '<input id="chkbdatepicker" class="flat checkforselect" type="checkbox" name="interval" onchange="checkStatus()">' . $langs->trans('intervall') . '';
  162. print '<div id="datepickerdiv" style="display:block;">';
  163. print '<input type="text" name="datepicker" id="datepicker" value="" />';
  164. print '<button type="submit">' . $langs->trans('select') . '</button>';
  165. print '</div>';
  166. print '<div id="daterangediv" style="display:none;">';
  167. print '<input type="text" name="daterange" id="daterange" value="" />';
  168. print '<button type="submit">' . $langs->trans('select') . '</button>';
  169. print '</div>';
  170. if ($daterange != '' || $datepicker != '') {
  171. # 1
  172. print '<div class=""><div class="" style="width:33%;float:left;">';
  173. print '<table style="width:100%;">';
  174. print '<tr style="width: 100%; height: 40px; text-align: center; background-color: lightgrey;"><td>' . $langs->trans("nameofgroup") . '</td></tr>';
  175. foreach ($groups as $key => $val) {
  176. $coloredLine = $id == $key ? ' background-color: #b0c4de' : '';
  177. print '<tr style="height:30px;' . $coloredLine . '"><td><a href="' . $_SERVER['PHP_SELF'] . '?id=' . $key . '"><span class="fa fa-group pictofixedwidth"></span> ' . $val . '</a></td></tr>';
  178. }
  179. print '</table>';
  180. print '</div>';
  181. # 2
  182. print '<div class="" style="width:33%;float:left;">';
  183. print '<table style="width:100%;">';
  184. print '<tr style="width: 100%; height: 40px; text-align: center; background-color: lightgrey;"><td colspan="2">'.$langs->trans("usersofgroup",$group[$id]).'</td></tr>';
  185. if (!empty($usersOfGroups)) {
  186. foreach ($usersOfGroups as $user) {
  187. print '<tr style="height:30px;">
  188. <td><span class="fa fa-user pictofixedwidth"></span> ' . $user['lastname'] . ' ' . $user['firstname'] . ' (' . $user['login'] . ') <font color="red">' . $deletedUsersArray[$user['user_id']] . '</font></td>
  189. </tr>';
  190. }
  191. } else {
  192. print '<tr style="height: 60px; text-align: center; color:red;"><td>' . $langs->trans('nouser') . '</td></tr>';
  193. }
  194. print '</table>';
  195. print '</div>';
  196. # 3
  197. print '<div class="" style="width:33%;float:left;">';
  198. print '<table style="width:100%;">';
  199. print '<tr style="width: 100%; height: 40px; text-align: center; background-color: lightgrey;"><td colspan="3">' . $langs->trans("settlements") . '</td></tr>';
  200. foreach ($datesOfRange as $date) {
  201. print '<tr style="width:100%; height:30px;"><td class="center" colspan="3"><div style="background-color:rgb(10, 20, 100); height:30px; border-radius: 10px 10px 0 0; padding-top: 10px; color:white;">' . $date . '</div></td></tr>';
  202. print '<tr style="height: 70px;">';
  203. /* print '
  204. <td>
  205. <div style="background-color:#98FB98; height:70px; padding:5px;">
  206. <div>Alap</div><div style="text-align:center; font-weight:bold; font-size:40px;">' . $helper->correctNumber($sumsHUFArray[$date][0]['total_ht']) . ' </div>
  207. </div>
  208. </td>'; */
  209. /* print '
  210. <td>
  211. <div style="background-color:#98FB98; height:70px; padding:5px;">
  212. <div>Adó</div><div style="text-align:center; font-weight:bold; font-size:40px;">' . $helper->correctNumber($sumsHUFArray[$date][0]['total_tva']) . ' </div>
  213. </div>
  214. </td>'; */
  215. print '
  216. <td colspan="3">
  217. <div style="background-color:#98FB98; height:70px; padding:5px;">
  218. <div style="text-align:center; font-weight:bold; font-size:40px;">' . $helper->correctNumber($sumsHUFArray[$date][0]['total_ttc']) . ' <sup style="font-size: 10px;"> HUF</sup></div>
  219. <!--<div>Teljes</div><div style="text-align:center; font-weight:bold; font-size:40px;">' . $helper->correctNumber($sumsHUFArray[$date][0]['total_ttc']) . ' </div>-->
  220. </div>
  221. </td>';
  222. print '</tr>';
  223. print '<tr style="height: 70px;">';
  224. /* print '
  225. <td>
  226. <div style="background-color:#98FB98; height:70px; border-radius: 0 0 0 10px; padding:5px;">
  227. <div>Alap</div><div style="text-align:center; font-weight:bold; font-size:40px;">' . $helper->correctNumber($sumsEURArray[$date][0]['total_ht']) . ' <sup style="font-size: 10px;"> EUR</sup></div>
  228. </div>
  229. </td>';
  230. print '
  231. <td>
  232. <div style="background-color:#98FB98; height:70px; padding:5px;">
  233. <div>Adó</div><div style="text-align:center; font-weight:bold; font-size:40px;">' . $helper->correctNumber($sumsEURArray[$date][0]['total_tva']) . ' <sup style="font-size: 10px;"> EUR</sup></div>
  234. </div>
  235. </td>'; */
  236. print '
  237. <td colspan="3">
  238. <div style="background-color:#98FB98; height:70px; border-radius: 0 0 10px 10px; padding:5px;">
  239. <div style="text-align:center; font-weight:bold; font-size:40px;">' . $helper->correctNumber($sumsEURArray[$date][0]['total_ttc']) . ' <sup style="font-size: 10px;"> EUR</sup></div>
  240. <!--<div>Teljes</div><div style="text-align:center; font-weight:bold; font-size:40px;">' . $helper->correctNumber($sumsEURArray[$date][0]['total_ttc']) . ' <sup style="font-size: 10px;"> EUR</sup></div>-->
  241. </div>
  242. </td>';
  243. print '</tr>';
  244. }
  245. print '</table>';
  246. }else{
  247. print '<div style="color: red;">' . $langs->trans('selectdate') . '</div>';
  248. }
  249. print '</div></div>';
  250. print '</form>' . "\n";
  251. // End of page
  252. llxFooter();
  253. $db->close();
  254. ?>
  255. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css">
  256. <script src="https://cdn.jsdelivr.net/npm/moment"></script>
  257. <script src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script>
  258. <script>
  259. var datepickerdata = document.querySelector('input[type="hidden"][name="datepickerdata"]');
  260. var interval = document.querySelector('input[type="hidden"][name="intervalchk"]');
  261. var checkbox = document.querySelector('input[type="checkbox"][name="interval"]');
  262. var datepickerinput = document.querySelector('input[type="text"][name="datepicker"]');
  263. var daterangeinput = document.querySelector('input[type="text"][name="daterange"]');
  264. if (interval.value == 'on') {
  265. checkbox.checked = true;
  266. checkStatus();
  267. daterangeinput.value = datepickerdata.value;
  268. }
  269. datepickerinput.value = datepickerdata.value;
  270. function checkStatus() {
  271. var checkbox = document.getElementById("chkbdatepicker");
  272. var isChecked = checkbox.checked;
  273. if (isChecked) {
  274. var datepickerdiv = document.getElementById("datepickerdiv");
  275. var daterangediv = document.getElementById("daterangediv");
  276. datepickerdiv.style.display = "none";
  277. daterangediv.style.display = "block";
  278. datepickerinput.value = '';
  279. daterangeinput.value = '';
  280. } else {
  281. datepickerinput.value = '';
  282. daterangeinput.value = '';
  283. var datepickerdiv = document.getElementById("datepickerdiv");
  284. var daterangediv = document.getElementById("daterangediv");
  285. datepickerdiv.style.display = "block";
  286. daterangediv.style.display = "none";
  287. }
  288. }
  289. var datepicker =
  290. $(function () {
  291. $('#daterange').daterangepicker({
  292. "showDropdowns": true,
  293. "autoUpdateInput": false,
  294. locale: {
  295. format: 'YYYY-MM-DD',
  296. cancelLabel: 'Mégse',
  297. applyLabel: 'OK',
  298. moLabel: 'OK',
  299. firstDay: 1,
  300. "daysOfWeek": [
  301. "Vas",
  302. "Hé",
  303. "Ke",
  304. "Sze",
  305. "Csü",
  306. "Pé",
  307. "Szo"
  308. ],
  309. "monthNames": [
  310. "Január",
  311. "Február",
  312. "Március",
  313. "Április",
  314. "Május",
  315. "Június",
  316. "Július",
  317. "Augsztus",
  318. "Szeptember",
  319. "Október",
  320. "November",
  321. "December"
  322. ],
  323. },
  324. });
  325. });
  326. $(function () {
  327. $('#datepicker').daterangepicker({
  328. "singleDatePicker": true,
  329. "showDropdowns": true,
  330. "autoUpdateInput": false,
  331. locale: {
  332. format: 'YYYY-MM-DD',
  333. cancelLabel: 'Mégse',
  334. applyLabel: 'OK',
  335. moLabel: 'OK',
  336. firstDay: 1,
  337. "daysOfWeek": [
  338. "Vas",
  339. "Hé",
  340. "Ke",
  341. "Sze",
  342. "Csü",
  343. "Pé",
  344. "Szo"
  345. ],
  346. "monthNames": [
  347. "Január",
  348. "Február",
  349. "Március",
  350. "Április",
  351. "Május",
  352. "Június",
  353. "Július",
  354. "Augsztus",
  355. "Szeptember",
  356. "Október",
  357. "November",
  358. "December"
  359. ],
  360. },
  361. });
  362. });
  363. $('input[name="datepicker"]').on('apply.daterangepicker', function (ev, picker) {
  364. $(this).val(picker.startDate.format('YYYY-MM-DD') + ' - ' + picker.endDate.format('YYYY-MM-DD'));
  365. });
  366. $('input[name="datepicker"]').on('cancel.daterangepicker', function (ev, picker) {
  367. $(this).val('');
  368. });
  369. $('input[name="daterange"]').on('apply.daterangepicker', function (ev, picker) {
  370. $(this).val(picker.startDate.format('YYYY-MM-DD') + ' - ' + picker.endDate.format('YYYY-MM-DD'));
  371. });
  372. $('input[name="daterange"]').on('cancel.daterangepicker', function (ev, picker) {
  373. $(this).val('');
  374. });
  375. </script>