settlementtoolssettingsindex.php 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726
  1. <?php
  2. $debugMode = false;
  3. /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
  4. * Copyright (C) 2004-2015 Laurent Destailleur <eldy@users.sourceforge.net>
  5. * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
  6. * Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation; either version 3 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program. If not, see <https://www.gnu.org/licenses/>.
  20. */
  21. /**
  22. * \file settlements/settlementsindex.php
  23. * \ingroup settlements
  24. * \brief Home page of settlements top menu
  25. */
  26. // Load Dolibarr environment
  27. $res = 0;
  28. // Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
  29. if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) {
  30. $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"] . "/main.inc.php";
  31. }
  32. // Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
  33. $tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME'];
  34. $tmp2 = realpath(__FILE__);
  35. $i = strlen($tmp) - 1;
  36. $j = strlen($tmp2) - 1;
  37. while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) {
  38. $i--;
  39. $j--;
  40. }
  41. if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1)) . "/main.inc.php")) {
  42. $res = @include substr($tmp, 0, ($i + 1)) . "/main.inc.php";
  43. }
  44. if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1))) . "/main.inc.php")) {
  45. $res = @include dirname(substr($tmp, 0, ($i + 1))) . "/main.inc.php";
  46. }
  47. // Try main.inc.php using relative path
  48. if (!$res && file_exists("../main.inc.php")) {
  49. $res = @include "../main.inc.php";
  50. }
  51. if (!$res && file_exists("../../main.inc.php")) {
  52. $res = @include "../../main.inc.php";
  53. }
  54. if (!$res && file_exists("../../../main.inc.php")) {
  55. $res = @include "../../../main.inc.php";
  56. }
  57. if (!$res) {
  58. die("Include of main fails");
  59. }
  60. use Luracast\Restler\RestException;
  61. require_once DOL_DOCUMENT_ROOT . '/core/class/html.formfile.class.php';
  62. require_once DOL_DOCUMENT_ROOT . '/user/class/usergroup.class.php';
  63. require_once DOL_DOCUMENT_ROOT . '/custom/settlements/class/groupusers.class.php';
  64. require_once DOL_DOCUMENT_ROOT . '/custom/settlements/class/usernaplo.class.php';
  65. require_once DOL_DOCUMENT_ROOT . '/custom/settlements/class/helper.class.php';
  66. require_once DOL_DOCUMENT_ROOT . '/custom/settlements/class/grouptoolstools.class.php';
  67. require_once DOL_DOCUMENT_ROOT . '/custom/settlements/class/toolnaplo.class.php';
  68. require_once DOL_DOCUMENT_ROOT . '/custom/settlements/class/package.class.php';
  69. require_once DOL_DOCUMENT_ROOT . '/custom/settlements/class/grouptoolspackages.class.php';
  70. require_once DOL_DOCUMENT_ROOT . '/custom/settlements/core/tpl/printPDF_szisz.php';
  71. // Include the main TCPDF library (search for installation path).
  72. require_once DOL_DOCUMENT_ROOT . '/includes/tecnickcom/tcpdf/examples/tcpdf_include.php';
  73. require_once DOL_DOCUMENT_ROOT . '/includes/tecnickcom/tcpdf/tcpdf.php';
  74. // create new PDF document
  75. // Load translation files required by the page
  76. $langs->loadLangs(array("settlements@settlements"));
  77. $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists)
  78. $massactionadd = GETPOST('massactionadd', 'alpha'); // The bulk action (combo box choice into lists)
  79. $action = GETPOST('action', 'aZ09');
  80. $cancel = GETPOST('cancel', 'int');
  81. $id = GETPOST('id', 'int');
  82. $idmenu = GETPOST('idmenu', 'int');
  83. $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list
  84. $toselectnewpackage = GETPOST('toselectnewpackage', 'array'); // Array of ids of elements selected into a list
  85. $search_package_name = GETPOST('search_package_name', 'alpha');
  86. $search_group_title = GETPOST('search_group_title', 'alpha');
  87. $confirmbutton = GETPOST('confirmbutton', 'int');
  88. $printbutton = GETPOST('printbutton', 'alpha');
  89. $confirm = GETPOST('confirm', 'alpha');
  90. $confirmtools = GETPOST('confirmtools', 'alpha');
  91. $delete = GETPOST('delete', 'int');
  92. $toolclearall = GETPOST('toolclearall', 'int');
  93. $confirmUserAndPackageAssignment = GETPOST('confirmUserAndPackageAssignment', 'int');
  94. $packageuser = GETPOST('packageuser', 'array');
  95. $nopackageuser = GETPOST('nopackageuser', 'int');
  96. $confirmUsersButton = GETPOST('confirmUsersButton', 'int');
  97. $groupuser_id = GETPOST('groupuser_id', 'int');
  98. if ($nopackageuser == 1) {
  99. $packageuser = [];
  100. }
  101. $socid = GETPOST('socid', 'int');
  102. if (isset($user->socid) && $user->socid > 0) {
  103. $action = '';
  104. $socid = $user->socid;
  105. }
  106. $max = 5;
  107. $now = dol_now();
  108. $form = new Form($db);
  109. $formfile = new FormFile($db);
  110. $toolNaplo = new ToolNaplo($db);
  111. $helper = new Helper($db);
  112. $entities = $helper->getAllEntities();
  113. $entitiesArray = [];
  114. $selectedEntities = '';
  115. //$entitiesArrayIsEmpty = true;
  116. # get all emtity_ variable
  117. foreach ($entities as $key => $value) {
  118. $val = GETPOST('entity_' . $key, 'int');
  119. $entitiesArray[$key] = $val;
  120. /* if ($val != '') {
  121. $entitiesArrayIsEmpty = false;
  122. } */
  123. }
  124. if (empty(array_filter($entitiesArray))) {
  125. $entitiesArray[1] = 1;
  126. }
  127. $selectedEntities = $helper->getEntities($entitiesArrayIsEmpty, $entities, $entitiesArray);
  128. //$groups = $helper->getGroupsFromGroupToolsClass($db, $selectedEntities);
  129. $groups = $helper->getFilteredpackageGroups($search_group_title, $selectedEntities);
  130. if (empty($id) || $id == 0) {
  131. foreach ($groups as $group) {
  132. $keys[] = $group['rowid'];
  133. }
  134. unset($_SESSION['package_array']);
  135. $id = $keys[0];
  136. }
  137. if ($delete == 1) {
  138. unset($_SESSION['package_array']);
  139. }
  140. #
  141. # Confirm
  142. #
  143. #
  144. # Massactions
  145. #
  146. if ($confirm == 'delete') {
  147. $grouptoolsPackages = new GroupToolsPackages($db);
  148. $PackageNaplo = new PackageNaplo($db);
  149. foreach ($toselect as $packageid) {
  150. $moredata = explode('_', $packageid);
  151. $grouptoolsPackages->deleteLine($user, $moredata[0]);
  152. $data = $helper->createDataToolArray($id, 0, $moredata[1]);
  153. $PackageNaplo->createNaplo($user, $data);
  154. dol_syslog("A {$moredata[1]} szamu csomag torlesre kerult.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  155. }
  156. $url = $_SERVER["PHP_SELF"] . '?id=' . $id;
  157. header("Location: " . $url);
  158. $confirm = '';
  159. }
  160. if ($massactionadd == 'add') {
  161. if ($helper->checkEquality($id)) {
  162. setEventMessage($langs->trans("equalNumbers"), 'warnings');
  163. unset($_SESSION['package_array']);
  164. $hideConfirmBoolean = true;
  165. } else {
  166. if ((!isset($toselectnewpackage) || empty($toselectnewpackage)) && isset($_SESSION['package_array'])) {
  167. $toselectnewpackage = array_filter($_SESSION['package_array'], function ($elem) {
  168. return !empty($elem);
  169. });
  170. }
  171. if (!empty($toselectnewpackage)) {
  172. $userCounter = $helper->getNumberOfUsers();
  173. if ((count($toselectnewpackage) > $userCounter[$id][0]) || $helper->checkSumAndUsers($toselectnewpackage, $id)) {
  174. setEventMessage($langs->trans("TooManyPackages"), 'warnings');
  175. unset($_SESSION['package_array']);
  176. } else {
  177. $assignedPackageObj = new Package($db);
  178. $grouptoolsPackages = new GroupToolsPackages($db);
  179. foreach ($_SESSION['package_array'] as $newtool) {
  180. $assignedPackageObj->fetch($newtool);
  181. $helper->savePackageData($grouptoolsPackages, $id, $newtool, $langs);
  182. }
  183. setEventMessage($langs->trans("tooladded"));
  184. unset($_SESSION['package_array']);
  185. }
  186. }
  187. }
  188. }
  189. if ($confirmtools == 'confirm') {
  190. foreach ($toselect as $selected) {
  191. $moredata = explode('_', $selected);
  192. $data = $helper->createDataToolArray($id, 'add', $moredata[1]);
  193. $toolNaplo->createToolsNaplo($user, $data);
  194. }
  195. $url = $_SERVER["PHP_SELF"] . '?id=' . $id;
  196. header("Location: " . $url);
  197. }
  198. if ($confirmUsersButton) {
  199. //print $confirmUsersButton;exit;
  200. $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?groupuser_id=' . $confirmUsersButton . '&id=' . $id, $langs->trans('UserConfirm'), $langs->trans('UserConfirmObject', $userString), 'confirm_users_settlement', '', 0, 1);
  201. }
  202. $assignementIsReady = $helper->checkPackageUserAssignement($id);
  203. $eztHasznalomAzosszerendelesekre = empty($assignementIsReady) ? $packageuser : $assignementIsReady;
  204. $newUserDetected = array_diff_assoc($eztHasznalomAzosszerendelesekre, $assignementIsReady);
  205. if (!empty($id)) {
  206. $PackagesOfGroups = $helper->getPackagesById($id);
  207. // The devices have to change packages
  208. $allPackages = $helper->getAllPackagesFromSelectedEntity($id, $selectedEntities);
  209. $confirmButtonDisplay = empty($helper->getToolsFromNaploToday($db, $id)) && !empty($PackagesOfGroups) ? "display:block;" : "display:none;";
  210. $PrintButtonDisplay = !empty($helper->getToolsFromNaploToday($db, $id)) && !empty($PackagesOfGroups) ? "display:block;" : "display:none;";
  211. $buttonContent = $helper->createButtonContent($db, $id, $PackagesOfGroups, $confirmButtonDisplay, $PrintButtonDisplay);
  212. }
  213. $permissiontoclearall = $user->hasRight('settlements', 'settlementsgroup', 'clearall');
  214. $title = '';
  215. $help_url = '';
  216. $morejs = '';
  217. $morecss = '';
  218. llxHeader('', $title, $help_url, '', 0, 0, $morejs, $morecss, '', 'classforhorizontalscrolloftabs');
  219. include DOL_DOCUMENT_ROOT . '/custom/settlements/core/actions_addupdatedelete.inc.php';
  220. //print_r($_REQUEST);
  221. $url = $_SERVER["PHP_SELF"] . '?idmenu=' . $idmenu . '&mainmenu=settlements&leftmenu=&id=' . $id;
  222. print '<form method="POST" id="AssociationFormList" action="' . $url . '" onkeyup="submitFormAjaxPackages()">' . "\n";
  223. print '<input type="hidden" name="token" value="' . newToken() . '">';
  224. print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
  225. print '<input type="hidden" name="action" value="list">';
  226. /*print '<input type="hidden" name="sortfield" value="' . $sortfield . '">';
  227. print '<input type="hidden" name="sortorder" value="' . $sortorder . '">';
  228. print '<input type="hidden" name="page" value="' . $page . '">';
  229. print '<input type="hidden" name="contextpage" value="' . $contextpage . '">';*/
  230. print '<input type="hidden" name="confirm" value="' . $confirm . '">';
  231. print '<input type="hidden" id ="groupid" name="groupid" value="' . $id . '">';
  232. print '<input type="hidden" id ="delete" name="delete" value="">';
  233. if ($permissiontoclearall) {
  234. if ($helper->packageGroupsAreEmpty()) {
  235. $clearAllButton = '<div style="text-align: center; color:red; margin-bottom: 30px;">' . $langs->trans('EmptyToolsGroup') . '</div>';
  236. } else {
  237. $clearAllButton = include DOL_DOCUMENT_ROOT . '/custom/settlements/core/tpl/packageclearall.tpl.php';
  238. }
  239. }
  240. print load_fiche_titre($langs->trans("AssociationGroupAndTools"), '', 'settlements.png@settlements');
  241. if ($confirmUsersButton) {
  242. print $formconfirm;
  243. }
  244. if ($massaction == 'delete') {
  245. $hideConfirmBoolean = true;
  246. print $helper->massactionDelete();
  247. }
  248. if ($confirmbutton) {
  249. print $helper->confirmButtonConfirmeText();
  250. }
  251. include DOL_DOCUMENT_ROOT . '/custom/settlements/core/tpl/packagecheckboxes.tpl.php';
  252. print '<div style="width:100%; padding-bottom: 50px;">';
  253. $columnWidth = 100 / count($entities);
  254. foreach ($entities as $key => $value) {
  255. if (!$entitiesArrayIsEmpty) {
  256. $checked = $entitiesArray[$key] == $key ? 'checked' : '';
  257. } else {
  258. $checked = 'checked';
  259. }
  260. print '<div class="entitiesChk" style="float:left; width:' . $columnWidth . '%; text-align:center;"><input type="checkbox" id="entity_' . $key . '" name="entity_' . $key . '" value="' . $key . '" ' . $checked . '><label for="' . $key . '">' . $value . '</label></div>';
  261. }
  262. print '</div>';
  263. print '<div style="clear:both;></div>';
  264. //---------------------------------------------
  265. # 1
  266. //---------------------------------------------
  267. print '<div class=""><div class="" style="width:33%;float:left;">';
  268. print '<table style="width:100%;">';
  269. print '<tr style="width: 100%; height: 45px; text-align: center; background-color: lightgrey;"><td colspan="2">' . $langs->trans("groupname") . '</td></tr>';
  270. print '<tr><td class="liste_titre"><input id="group_search" style="width:100%; height:30px;" type="text" class="" name="search_group_title" value="' . $search_group_title . '" placeholder="Search..."></td>
  271. <td id="delete_group_search" class="right"><div style="cursor: pointer;"><a href="' . $_SERVER["PHP_SELF"] . '?idmenu=' . $idmenu . '&mainmenu=settlements&leftmenu="><span class="fa fa-trash"></span></a></div>
  272. </td></tr>';
  273. if (!empty($groups)) {
  274. $stringLine .= '<table style="width: 100%; margin-bottom: 20px;"><tr><td style="width: 33%;"><hr></td><td style="width: 20%; text-align: center; color: grey;">Empty groups</td><td style="width: 33%;"><hr></td></tr></table>';
  275. $groupsString = '';
  276. $groupsStringEmpty = '';
  277. print '<tr><td colspan="3"><div id="searchedPackagesDiv"><table style="width:100%;">';
  278. $userCounter = $helper->getNumberOfUsers();
  279. foreach ($groups as $group) {
  280. $confirmedGroup = $helper->checkConfirmation($group['rowid']);
  281. $coloredLine = $id == $group['rowid'] ? ' background-color: #b0c4de' : '';
  282. $checker = $confirmedGroup ? '<span class="fa fa-check" style="color: green;"></span>' : '<span class="fa fa-exclamation" style="color: red;"></span>';
  283. $numberOfUsers = '';
  284. $usersArray = [];
  285. if (isset($userCounter[$group['rowid']][0])) {
  286. $peopleOrPerson = intval($userCounter[$group['rowid']][0]) > 1 ? $langs->trans('people') : $langs->trans('person');
  287. $numberOfUsers = '(' . $userCounter[$group['rowid']][0] . ' ' . $peopleOrPerson . ')';
  288. $usersArray = $helper->getUsersById($db, $userCounter[$group['rowid']][1]);
  289. }
  290. $popupBox = $helper->createPopoupBox($numberOfUsers, $usersArray, $group['rowid']);
  291. if (!empty($usersArray)) {
  292. $groupsString .= '<tr style="height:30px; cursor:pointer;' . $coloredLine . '"><td><div class="submitFormLink" data-value="' . $group['rowid'] . '"><span class="fa fa-group pictofixedwidth"></span> ' . $group['ref'] . '</div><div class="groupColumn2ndLine submitFormLink" data-value="' . $group['rowid'] . '" style="float:left;">' . $group['label'] . '</div>' . $popupBox . '</td>';
  293. //print '<tr style="height:30px; cursor:pointer;' . $coloredLine . '"><td><div class="submitFormLink" data-value="' . $group['rowid'] . '"><span class="fa fa-group pictofixedwidth"></span> ' . $group['ref'] . '</div><div class="groupColumn2ndLine submitFormLink" data-value="' . $group['rowid'] . '" style="float:left;">' . $group['label'] . '</div>' . $popupBox . '</td>';
  294. //print '<td>' . $checker . '</td>';
  295. $groupsString .= '</tr>';
  296. //print '</tr>';
  297. $groupsString .= '<tr id="users_' . $group['rowid'] . '" style="display:none; width:100%; background-color:lightgrey;"><td>';
  298. //print '<tr id="users_' . $group['rowid'] . '" style="display:none; width:100%; background-color:lightgrey;"><td>';
  299. foreach ($usersArray as $users) {
  300. $groupsString .= '&nbsp;<a href="/user/card.php?id=' . $users['fk_user'] . '&save_lastsearch_values=1"><span class="fas fa-user" style="color: #a69944; cursor: pointer;"></span>&nbsp;' . $users['lastname'] . ' ' . $users['firstname'] . ' (' . $users['login'] . ')</a><br>';
  301. //print '&nbsp;<a href="/user/card.php?id=' . $users['fk_user'] . '&save_lastsearch_values=1"><span class="fas fa-user" style="color: #a69944; cursor: pointer;"></span>&nbsp;' . $users['lastname'] . ' ' . $users['firstname'] . ' (' . $users['login'] . ')</a><br>';
  302. }
  303. $groupsString .= '</td></tr>';
  304. }else{
  305. $groupsStringEmpty .= '<tr style="height:30px; cursor:pointer;' . $coloredLine . '"><td><div class="submitFormLink" data-value="' . $group['rowid'] . '"><span class="fa fa-group pictofixedwidth"></span> ' . $group['ref'] . '</div><div class="groupColumn2ndLine submitFormLink" data-value="' . $group['rowid'] . '" style="float:left;">' . $group['label'] . '</div>' . $popupBox . '</td>';
  306. $groupsStringEmpty .= '</tr>';
  307. }
  308. }
  309. print $groupsString;
  310. print $stringLine;
  311. print $groupsStringEmpty;
  312. print '</table>';
  313. print '</div></td></tr>';
  314. } else {
  315. print '<tr style="height: 60px; text-align: center; color:red;"><td>' . $langs->trans('nogroup') . '</td></tr>';
  316. }
  317. print '</table>';
  318. //---------------------------------------------
  319. #2
  320. //---------------------------------------------
  321. $groupName = $helper->getGroupLabelById($id);
  322. $DeviceCounter = $helper->getNumberOfDevices();
  323. $group_id = $helper->getGroupIdBygroupToolId($id);
  324. print '</div><div class="" style="width:33%;float:left;">';
  325. print '<table style="width:100%;">';
  326. print '<tr style="width: 100%; height: 45px; text-align: center; background-color: lightgrey;">
  327. <td colspan="3">
  328. <div style="margin-left:10px;">
  329. <div style="float:left; margin-top:10px;"><a href="settlementsindex.php?idmenu=965&mainmenu=settlements&leftmenu=&id=' . $id . '"><span class="fa fa-arrow-left"></span> Groups</a></div>
  330. <div><a href="/custom/financialreport/settlementsstatementsindex.php?id=' . $group_id . '">' . $langs->trans("packagesofgroup", $groupName) . '</a></div>
  331. </div>
  332. </td>
  333. </tr>';
  334. if (!empty($PackagesOfGroups)) {
  335. print '<tr><td class="right" style="color:gray;" colspan="2">' . $langs->trans('selectAll') . '</td><td class="nowrap center"><input id="cb912" class="flat checkforallselect" type="checkbox"></td></tr>';
  336. $packageAssigned = false;
  337. foreach ($PackagesOfGroups as $package) {
  338. $popupBox2 = $helper->createPopupBox($package, $DeviceCounter);
  339. #--------------------
  340. # Checkbox
  341. #--------------------
  342. $selected = in_array($package['rowid'] . '_' . $package['fk_package'], $toselect) ? 'checked' : '';
  343. $chkCol2Disabled = "";
  344. $recordClosed = "";
  345. $assignementsOfThisPackage = $helper->getAssignementsOfThisPackage($id, $package['fk_package']);
  346. if (!empty($assignementsOfThisPackage)) {
  347. foreach ($assignementsOfThisPackage as $record) {
  348. if (!$record['status']) {
  349. $chkCol2Disabled = "disabled";
  350. }
  351. }
  352. }
  353. print '<tr style="height:30px; background-color:lightgrey">
  354. <td><span class="fa fa-toolbox pictofixedwidth"></span> <a href="/custom/settlements/settlementpackagetoolssettingsindex.php?idmenu=1592&mainmenu=settlements&leftmenu=&id=' . $package['fk_package'] . '">' . $package['ref'] . '</a></td><td>' . $popupBox2 . '</td>
  355. <td class="nowrap center"><input id="id_2_' . $package['rowid'] . '" class="flat checkforselect" type="checkbox" name="toselect[]" value="' . $package['rowid'] . '_' . $package['fk_package'] . '"' . $selected . ' ' . $chkCol2Disabled . '></td>
  356. </tr>';
  357. foreach ($assignementsOfThisPackage as $listRecord) {
  358. $packageHistoryId = $listRecord['rowid'];
  359. $sql = "SELECT * FROM " . MAIN_DB_PREFIX . "user WHERE rowid = {$listRecord['user_id']}";
  360. $userData = $db->query($sql);
  361. while ($row = $db->fetch_object($userData)) {
  362. $userObj = $row;
  363. }
  364. //$userObj = new User($db);
  365. //$userObj->fetch($listRecord['user_id']);
  366. if ($listRecord['status']) {
  367. $recordClosed = '<font color="red">Closed</font>';
  368. } else {
  369. $recordClosed = '';
  370. }
  371. print '<tr><td><a href="/custom/rollerstorage/packagehistory_card.php?id=' . $packageHistoryId . '&idmenu=' . $idmenu . '&fk_group_id=' . $id . '&changeback=1" class="AssignedPackageHistoryRecord">' . $langs->trans('PackageHistoryRecord') . '</a> ' . $recordClosed . ' </td>
  372. <td colspan="2"><a href="/user/card.php?id=' . $userObj->rowid . '&save_lastsearch_values=1">' . $userObj->firstname . ' ' . $userObj->lastname . '</td></tr>';
  373. }
  374. print '<tr><td><a href="/custom/rollerstorage/packagehistory_card.php?action=create&package_id=' . $package['fk_package'] . '&fk_group_id=' . $id . '&fk_groupuser_id=' . $userCounter[$id][1] . '&idmenu=' . $idmenu . '" class=""><span class="fa fa-plus createPackageHistoryRecord"></span></td></tr>';
  375. }
  376. //$confirmedGroup = $helper->checkConfirmation($id);
  377. $confirmedGroup = true;
  378. if (!$confirmedGroup) {
  379. if ($userCounter[$id][0] > 0) {
  380. print '<tr><td>&nbsp;</td></tr>';
  381. print '<tr><td colspan="3"><button type="submit" name="confirmUsersButton" value="' . $userCounter[$id][1] . '" class="confirmUsersButton">' . $langs->trans('ConfirmUsers') . '</button></td></tr>';
  382. }
  383. }
  384. } else {
  385. print '<tr style="height: 60px; text-align: center; color:red;"><td>' . $langs->trans('nopackageassigned') . '</td></tr>';
  386. }
  387. print '</table>';
  388. //---------------------------------------------
  389. #3
  390. //---------------------------------------------
  391. print '</div><div class="" style="width:33%;float:left;">';
  392. print '<table style="width:100%;">';
  393. print '<tr style="width: 100%; height: 45px; text-align: center; background-color: lightgrey;"><td colspan="3">' . $langs->trans("freepackages") . '</td></tr>';
  394. print '<tr><td class="liste_titre"><input id="package_search" style="width:100%; height:30px;" type="text" class="" name="search_package_name" value="' . $search_package_name . '" placeholder="' . $langs->trans("search") . '" ></td>
  395. <td id="delete_search" class="center" onclick="deleteFunction()"><div style="cursor: pointer;"><span class="fa fa-trash"></span></div>
  396. </td></tr>';
  397. if (is_array($allPackages)) {
  398. print '<td colspan="4"><div id="searchedPackageDiv">
  399. <table style="width:100%;">';
  400. $deviceCounter = $helper->getNumberOfDevices();
  401. if (!empty($allPackages['freePackages'])) {
  402. foreach ($allPackages['freePackages'] as $freePackage) {
  403. $numberOfDevices3 = '';
  404. $devicesArray3 = [];
  405. if (isset($DeviceCounter[$freePackage['rowid']])) {
  406. $numberOfDevices3 = '(' . $DeviceCounter[$freePackage['rowid']] . ' ' . $langs->trans('device') . ')';
  407. $devicesArray3 = $helper->getDevicesById($db, $freePackage['rowid']);
  408. }
  409. $popupBox3Text = $helper->createPopoupBoxForDeviceList($numberOfDevices3, $devicesArray3);
  410. $popupBox3 = $popupBox3Text != '' ? $popupBox3Text : '<font style="color:red;">' . $langs->trans('emptyPackage') . '</font>';
  411. print '<tr style="height:30px;">
  412. <td class="nowrap center"><input id="id_3_' . $freePackage['rowid'] . '" class="flat checkforselectadd" type="checkbox" onclick="submitFormAddPackage(event)" name="toselectnewpackage[]" value="' . $freePackage['rowid'] . '"></td>
  413. <td><span class="fa fa-toolbox pictofixedwidth"></span><a href="/custom/settlements/settlementpackagetoolssettingsindex.php?idmenu=1592&mainmenu=settlements&leftmenu=&id=' . $freePackage['rowid'] . '"> ' . $freePackage['ref'] . '</a></td>
  414. <td>' . $popupBox3 . '</td>
  415. </tr>';
  416. }
  417. }
  418. print '</table><table style="width:100%; color: red;"><tr><td>';
  419. if (is_array($allPackages['addedPackages'])) {
  420. $helper->addedPackageDiv($allPackages, $DeviceCounter);
  421. }
  422. print '</td></tr></table>';
  423. print '</div></td>';
  424. }
  425. print '</div></div>';
  426. print '</form>' . "\n";
  427. // End of page
  428. llxFooter();
  429. $db->close();
  430. ?>
  431. <style>
  432. .groupColumn2ndLine {
  433. color: grey !important;
  434. }
  435. .createPackageHistoryRecord {
  436. display: block;
  437. height: 25px;
  438. width: 40px;
  439. background-color: green;
  440. border-radius: 5px;
  441. text-decoration: none;
  442. color: white !important;
  443. text-align: center;
  444. padding-top: 10px;
  445. }
  446. .confirmUsersButton {
  447. display: block;
  448. height: 40px;
  449. width: 100%;
  450. border-radius: 5px;
  451. text-decoration: none;
  452. text-align: center;
  453. background-color: #98FB98;
  454. }
  455. .createPackageHistoryRecord:hover {
  456. text-decoration: none;
  457. }
  458. .cursorNotAllowed {
  459. cursor: not-allowed;
  460. }
  461. .clearAllButton {
  462. height: 20px;
  463. width: 70px;
  464. background-color: red;
  465. border: 1px red solid;
  466. border-radius: 5px;
  467. text-align: center;
  468. color: white !important;
  469. text-decoration: none;
  470. }
  471. .clearAllButton:hover {
  472. text-decoration: none;
  473. }
  474. </style>
  475. <script>
  476. $(document).ready(function () {
  477. // Az űrlap elküldése, ha a checkbox változik
  478. $('.entitiesChk').change(function () {
  479. $('#AssociationFormList').submit();
  480. });
  481. var elements = document.getElementsByClassName('submitFormLink');
  482. for (var i = 0; i < elements.length; i++) {
  483. //console.log(i);
  484. elements[i].addEventListener('click', function (event) {
  485. event.preventDefault();
  486. var form = document.getElementById('AssociationFormList');
  487. var actionValue = form.getAttribute('action');
  488. var clickedElementValue = this.getAttribute('data-value');
  489. lastIndex = actionValue.lastIndexOf('&');
  490. var trimmedQueryString = actionValue.substring(0, lastIndex);
  491. form.action = trimmedQueryString + '&id=' + clickedElementValue + '&nopackageuser=1';
  492. document.getElementById('AssociationFormList').submit();
  493. });
  494. }
  495. });
  496. function popupboxClick(id) {
  497. var opened = $('#users_' + id).css('display');
  498. if (opened == 'none') {
  499. $('#users_' + id).css('display', 'inline-block');
  500. } else {
  501. $('#users_' + id).css('display', 'none');
  502. }
  503. }
  504. function deleteSelectorsFunction() {
  505. $('.userSelectors').each(function () {
  506. $(this).val("-1");
  507. });
  508. document.getElementById("AssociationFormList").submit();
  509. }
  510. function submitSelect() {
  511. document.getElementById("AssociationFormList").submit();
  512. }
  513. function groupconfirm() {
  514. $('.checkforselect').prop('checked', true);
  515. }
  516. function deleteFunction() {
  517. $("#package_search").val('');
  518. $(".checkforselectadd").prop('checked', false);
  519. $("#delete").val(1);
  520. document.getElementById("AssociationFormList").submit();
  521. }
  522. function submitFormAjaxPackages() {
  523. var input = document.getElementById("package_search");
  524. var inputGroup = document.getElementById("group_search");
  525. var checkboxes = document.querySelectorAll('.checkforselectadd:checked');
  526. var values = Array.from(checkboxes).map(function (checkbox) {
  527. return checkbox.value;
  528. });
  529. //if (input.value != '') {
  530. var xhr = new XMLHttpRequest();
  531. xhr.open("GET", "ajaxPackage.php?search_package_name=" + input.value + "&toselectnewpackage=" + values + "&groupid=" + groupid.value, true);
  532. xhr.onreadystatechange = function () {
  533. if (xhr.readyState === 4 && xhr.status === 200) {
  534. $("#searchedPackageDiv").html(xhr.responseText);
  535. }
  536. };
  537. xhr.send();
  538. //}
  539. //if (inputGroup.value != '') {
  540. var xhrGroup = new XMLHttpRequest();
  541. var selectedCheckboxes = $('input[type="checkbox"][id*="entity_"]:checked');
  542. var checkboxValues = selectedCheckboxes.toArray().map(function (checkbox) {
  543. return $(checkbox).val();
  544. });
  545. xhrGroup.open("GET", "ajaxPackageName.php?search_group_title=" + inputGroup.value + '&selectedEntities=' + checkboxValues, true);
  546. xhrGroup.onreadystatechange = function () {
  547. if (xhrGroup.readyState === 4 && xhrGroup.status === 200) {
  548. $("#searchedPackagesDiv").html(xhrGroup.responseText);
  549. }
  550. };
  551. xhrGroup.send();
  552. //}
  553. }
  554. function submitFormAddPackage(event) {
  555. //alert('submitFormAddPackage');
  556. var checkbox = event.target;
  557. var groupid = document.getElementById("groupid");
  558. if (checkbox.checked) {
  559. var input = document.getElementById("package_search");
  560. var checkboxes = document.querySelectorAll('.checkforselectadd:checked');
  561. var values = Array.from(checkboxes).map(function (checkbox1) {
  562. return checkbox1.value;
  563. });
  564. var xhr = new XMLHttpRequest();
  565. xhr.open("GET", "ajaxPackage.php?search_package_name=" + input.value + "&toselectnewpackage=" + values + "&groupid=" + groupid.value, true);
  566. xhr.onreadystatechange = function () {
  567. if (xhr.readyState === 4 && xhr.status === 200) {
  568. $("#searchedPackageDiv").html(xhr.responseText);
  569. }
  570. };
  571. xhr.send();
  572. } else {
  573. var input = document.getElementById("package_search");
  574. var checkboxes = document.querySelectorAll('.checkforselectadd:checked');
  575. var values = Array.from(checkboxes).map(function (checkbox1) {
  576. return checkbox1.value;
  577. });
  578. var xhr = new XMLHttpRequest();
  579. xhr.open("GET", "ajaxPackage.php?search_package_name=" + input.value + "&reduction=" + values + "&groupid=" + groupid.value, true);
  580. xhr.onreadystatechange = function () {
  581. if (xhr.readyState === 4 && xhr.status === 200) {
  582. $("#searchedPackageDiv").html(xhr.responseText);
  583. }
  584. };
  585. xhr.send();
  586. }
  587. }
  588. $('.massactionaddconfirmed').click(function () {
  589. $("#package_search").val('');
  590. })
  591. $('.massactionconfirmed').click(function () {
  592. $("#package_search").val('');
  593. $("#deletechk").val(1);
  594. })
  595. $('.checkforallselect').click(function () {
  596. if ($(this).is(':checked')) {
  597. $('.checkforselect').prop('checked', true);
  598. $('#divDelete').css('display', 'inline-block');
  599. $('#massaction').css('display', 'inline-block');
  600. $('.massactionselect ').css('display', '');
  601. $('.massactionconfirmed ').css('display', '');
  602. } else {
  603. $('#divDelete').css('display', 'none');
  604. $('.checkforselect').prop('checked', false);
  605. $('#massaction').css('display', 'none');
  606. $('.massactionselect ').css('display', 'none');
  607. $('.massactionconfirmed ').css('display', 'none');
  608. }
  609. })
  610. $('.checkforselect').click(function () {
  611. if ($(this).is(':checked')) {
  612. $('#divDelete').css('display', 'inline-block');
  613. $('#massaction').css('display', 'inline-block');
  614. $('.massactionselect ').css('display', '');
  615. $('.massactionconfirmed ').css('display', '');
  616. } else {
  617. $('#massaction').css('display', 'none');
  618. $('#divDelete').css('display', 'none');
  619. $('.massactionselect ').css('display', 'none');
  620. $('.massactionconfirmed ').css('display', 'none');
  621. }
  622. })
  623. $('.checkforselectadd').click(function () {
  624. if ($(this).is(':checked')) {
  625. $('#divAdd').css('display', 'inline-block');
  626. $('#massactionadd').css('display', 'inline-block');
  627. $('.massactionaddselect ').css('display', '');
  628. $('.massactionaddconfirmed ').css('display', '');
  629. } else {
  630. $('#divAdd').css('display', 'none');
  631. $('#massactionadd').css('display', 'none');
  632. $('.massactionaddselect ').css('display', 'none');
  633. $('.massactionaddconfirmed ').css('display', 'none');
  634. }
  635. })
  636. var input = document.getElementById("package_search");
  637. input.focus();
  638. input.setSelectionRange(input.value.length, input.value.length);
  639. </script>