helper.class.php 117 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540
  1. <?php
  2. require_once DOL_DOCUMENT_ROOT . '/product/inventory/class/inventory.class.php';
  3. require_once DOL_DOCUMENT_ROOT . '/custom/bbus/class/logoutchangenaplo.class.php';
  4. require_once DOL_DOCUMENT_ROOT . '/custom/settlements/class/packagenaplo.class.php';
  5. require_once DOL_DOCUMENT_ROOT . '/custom/settlements/class/package.class.php';
  6. require_once DOL_DOCUMENT_ROOT . '/custom/settlements/class/grouptools.class.php';
  7. require_once DOL_DOCUMENT_ROOT . '/custom/settlements/class/group.class.php';
  8. require_once DOL_DOCUMENT_ROOT . '/custom/settlements/class/package_additionals.class.php';
  9. require_once DOL_DOCUMENT_ROOT . '/custom/financialreport/class/userinvoice.class.php';
  10. require_once DOL_DOCUMENT_ROOT . '/custom/rollerstorage/class/packagehistory.class.php';
  11. require_once DOL_DOCUMENT_ROOT . '/custom/rollerstorage/class/statuses.class.php';
  12. class Helper
  13. {
  14. public $db;
  15. public $langs;
  16. public function __construct(DoliDB $db)
  17. {
  18. global $langs;
  19. $this->db = $db;
  20. $this->langs = $langs;
  21. }
  22. function getNumberOfUsers()
  23. {
  24. $userCounter = [];
  25. $sql = "SELECT su.fk_group_tools_id, su.fk_groupid, count(sgu.rowid) as usercount FROM " . MAIN_DB_PREFIX . "settlements_usergrouptoolgroup AS su
  26. INNER JOIN " . MAIN_DB_PREFIX . "settlements_groupusers AS sgu ON sgu.fk_settlements_group = su.fk_groupid
  27. GROUP BY su.fk_groupid, su.fk_group_tools_id";
  28. $data = $this->db->query($sql);
  29. if (!$data) {
  30. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  31. setEventMessage($this->langs->trans('queryFail', '(Function $helper->getNumberOfUsers()) llx_settlements_usergrouptoolgroup'), 'errors');
  32. return $userCounter;
  33. }
  34. while ($row = pg_fetch_assoc($data)) {
  35. $userCounter[$row['fk_group_tools_id']] = [$row['usercount'], $row['fk_groupid']];
  36. }
  37. return $userCounter;
  38. }
  39. function getNumberOfDevices()
  40. {
  41. $deviceCounter = [];
  42. $sql = "SELECT pt.package_id, count(pt.device_id) FROM " . MAIN_DB_PREFIX . "settlements_packagetool AS pt group by pt.package_id";
  43. //print $sql;
  44. $data = $this->db->query($sql);
  45. if (!$data) {
  46. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  47. setEventMessage($this->langs->trans('queryFail', '($helper->getNumberOfDevices()) queryFailpackagetool'), 'errors');
  48. return $deviceCounter;
  49. }
  50. while ($row = pg_fetch_assoc($data)) {
  51. $deviceCounter[$row['package_id']] = $row['count'];
  52. }
  53. return $deviceCounter;
  54. }
  55. function createPopoupBox($numberOfUsers, $usersArray, $id)
  56. {
  57. $popoupBox = '<div style="float:right; padding-bottom: 10px;" title="';
  58. foreach ($usersArray as $users) {
  59. $popoupBox .= '<span class=&quot;fas fa-user em080&quot; style=&quot; color: #a69944;&quot; cursor: pointer;></span>
  60. <u class=&quot;paddingrightonly&quot;>' . $users['lastname'] . ' ' . $users['firstname'] . ' (' . $users['login'] . ')</u><br>';
  61. }
  62. $popoupBox .= '" class="classfortooltip"><div onclick="popupboxClick(' . $id . ')" class="groupColumn2ndLine">' . $numberOfUsers . '</div>';
  63. return $popoupBox;
  64. }
  65. function createPopoupBoxForDeviceList($number, $array)
  66. {
  67. $popupBox = '';
  68. $not115 = false;
  69. $statusesObj = new Statuses($this->db);
  70. $result = $statusesObj->getStatusIds($this->db);
  71. if ($number != '') {
  72. $popupBox = '<div style="float:right; cursor:pointer;" title="';
  73. foreach ($array as $record) {
  74. if ($record['status'] != 115) {
  75. $not115 = true;
  76. }
  77. $statusdisplay = '<span class=&quot;badge badge-status' . $record['status'] . ' badge-status&quot; title=&quot;' . $result[$record['status']] . '&quot;>' . $result[$record['status']] . '</span>';
  78. $popupBox .= '<span class=&quot;fas fa-warehouse em080&quot; style=&quot; color: #a69944;&quot; cursor: pointer;></span>
  79. <u class=&quot;paddingrightonly&quot; style=&quot;text-decoration: none;&quot;>' . $record['ref'] . ' (' . $record['title'] . ') - ' . $statusdisplay . '</u><br>';
  80. }
  81. $popupBox .= '" class="classfortooltip">' . $number . '</div>';
  82. if ($not115) {
  83. $popupBox .= '<div style=text-align:right;>&nbsp;<span class="fas fa-exclamation" style="color: red;" cursor: pointer;></span>&nbsp;</div>';
  84. }
  85. }
  86. return $popupBox;
  87. }
  88. function getGroupsFromGroupToolsClass($db, $selectedEntities)
  89. {
  90. $groups = [];
  91. $sql = "SELECT sgt.rowid, sgt.ref, e.label FROM " . MAIN_DB_PREFIX . "settlements_grouptools AS sgt
  92. INNER JOIN " . MAIN_DB_PREFIX . "entity as e ON e.rowid=sgt.fk_entity";
  93. if ($selectedEntities != '') {
  94. $sql .= " AND sgt.fk_entity IN ({$selectedEntities})";
  95. }
  96. $sql .= " AND sgt.rowid NOT IN (SELECT ugtg.fk_group_tools_id FROM " . MAIN_DB_PREFIX . "settlements_usergrouptoolgroup as ugtg INNER JOIN " . MAIN_DB_PREFIX . "settlements_group as g ON g.rowid = ugtg.fk_groupid WHERE g.hotelgroup is true)
  97. ORDER BY sgt.ref ASC";
  98. $data = $db->query($sql);
  99. if (!$data) {
  100. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  101. setEventMessage($this->langs->trans('queryFail', '($helper->getGroupsFromGroupToolsClass()) llx_settlements_grouptools'), 'errors');
  102. return $groups;
  103. }
  104. while ($row = pg_fetch_assoc($data)) {
  105. //$groups[$row['rowid']] = $row['ref'];
  106. $groups[] = $row;
  107. }
  108. return $groups;
  109. }
  110. function getFilteredpackageGroups($string, $selectedEntities)
  111. {
  112. global $db;
  113. $groups = [];
  114. $sql = "SELECT sgt.rowid, sgt.ref, e.label FROM " . MAIN_DB_PREFIX . "settlements_grouptools AS sgt
  115. INNER JOIN " . MAIN_DB_PREFIX . "entity as e ON e.rowid=sgt.fk_entity WHERE sgt.ref LIKE '%{$string}%'";
  116. if ($selectedEntities != '') {
  117. $sql .= " AND sgt.fk_entity IN ({$selectedEntities})";
  118. }
  119. $sql .= " AND sgt.rowid NOT IN (SELECT ugtg.fk_group_tools_id FROM " . MAIN_DB_PREFIX . "settlements_usergrouptoolgroup as ugtg INNER JOIN " . MAIN_DB_PREFIX . "settlements_group as g ON g.rowid = ugtg.fk_groupid WHERE g.hotelgroup is true)
  120. ORDER BY sgt.ref ASC";
  121. //print $sql;exit;
  122. $data = $db->query($sql);
  123. if (!$data) {
  124. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  125. setEventMessage($this->langs->trans('queryFail', '($helper->getFilteredpackageGroups()) llx_settlements_grouptools'), 'errors');
  126. return $groups;
  127. }
  128. while ($row = pg_fetch_assoc($data)) {
  129. $groups[] = $row;
  130. }
  131. return $groups;
  132. }
  133. function getPackagesFromPackageClass($db, $selectedEntities)
  134. {
  135. $groups = [];
  136. $sql = "SELECT pac.rowid, pac.ref, e.label as entity FROM " . MAIN_DB_PREFIX . "settlements_package AS pac
  137. INNER JOIN " . MAIN_DB_PREFIX . "entity as e ON e.rowid=pac.fk_entity";
  138. if ($selectedEntities != '') {
  139. $sql .= " AND pac.fk_entity IN ({$selectedEntities})";
  140. }
  141. $sql .= " ORDER BY pac.ref ASC";
  142. //print $sql;
  143. $data = $db->query($sql);
  144. if (!$data) {
  145. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  146. setEventMessage($this->langs->trans('($helper->getPackagesFromPackageClass()) llx_settlements_package'), 'errors');
  147. return $groups;
  148. }
  149. while ($row = pg_fetch_assoc($data)) {
  150. //$groups[$row['rowid']] = $row['ref'];
  151. $groups[] = $row;
  152. }
  153. return $groups;
  154. }
  155. function getAllGroupsFromGroupClass($db)
  156. {
  157. $groups = [];
  158. $sql = "SELECT rowid, ref FROM " . MAIN_DB_PREFIX . "settlements_group ORDER BY ref ASC";
  159. $data = $db->query($sql);
  160. if (!$data) {
  161. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  162. setEventMessage($this->langs->trans('($helper->getAllGroupsFromGroupClass()) llx_settlements_group'), 'errors');
  163. return $groups;
  164. }
  165. while ($row = pg_fetch_assoc($data)) {
  166. $groups[$row['rowid']] = $row['ref'];
  167. }
  168. return $groups;
  169. }
  170. function getGroupsFromGroupClass($db, $selectedEntities)
  171. {
  172. $groups = [];
  173. $sql = "SELECT sg.rowid, sg.ref, e.label FROM " . MAIN_DB_PREFIX . "settlements_group AS sg
  174. INNER JOIN " . MAIN_DB_PREFIX . "entity as e ON e.rowid=sg.fk_entity WHERE sg.single_user_group is null AND sg.hotelgroup is null";
  175. if ($selectedEntities != '') {
  176. $sql .= " AND sg.fk_entity IN ({$selectedEntities})";
  177. }
  178. $sql .= " ORDER BY sg.ref ASC";
  179. //print $sql;
  180. $data = $db->query($sql);
  181. if (!$data) {
  182. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  183. setEventMessage($this->langs->trans('($helper->getGroupsFromGroupClass()) llx_settlements_group'), 'errors');
  184. return $groups;
  185. }
  186. while ($row = pg_fetch_assoc($data)) {
  187. //$groups[$row['rowid']] = $row['ref'];
  188. $groups[] = $row;
  189. }
  190. return $groups;
  191. }
  192. public function getGroupRefByID($id)
  193. {
  194. global $db;
  195. if (isset($id)) {
  196. $sql = "SELECT ref FROM " . MAIN_DB_PREFIX . "settlements_group WHERE rowid = {$id}";
  197. $data = $db->query($sql);
  198. if (!$data) {
  199. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  200. }
  201. if (pg_num_rows($data) > 0) {
  202. while ($row = pg_fetch_assoc($data)) {
  203. return $row['ref'];
  204. }
  205. }
  206. }
  207. return '';
  208. }
  209. function getFilteredGroups($string, $selectedEntities)
  210. {
  211. global $db;
  212. $string = strtoupper($string);
  213. $filteredGroups = [];
  214. $sql = "SELECT sg.rowid, sg.ref, e.label FROM " . MAIN_DB_PREFIX . "settlements_group AS sg
  215. INNER JOIN " . MAIN_DB_PREFIX . "entity as e ON e.rowid=sg.fk_entity WHERE sg.single_user_group is null AND sg.hotelgroup is null
  216. AND sg.ref LIKE '%{$string}%'";
  217. if ($selectedEntities != '') {
  218. $sql .= " AND sg.fk_entity IN ({$selectedEntities})";
  219. }
  220. $sql .= " ORDER BY sg.ref ASC";
  221. //print $sql;
  222. $data = $db->query($sql);
  223. if (!$data) {
  224. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  225. }
  226. while ($row = pg_fetch_assoc($data)) {
  227. $filteredGroups[] = $row;
  228. }
  229. return $filteredGroups;
  230. }
  231. function getHotelGroupsFromGroupClass($db, $selectedEntities)
  232. {
  233. $groups = [];
  234. $sql = "SELECT sg.rowid, sg.ref, e.label FROM " . MAIN_DB_PREFIX . "settlements_group AS sg
  235. INNER JOIN " . MAIN_DB_PREFIX . "entity as e ON e.rowid=sg.fk_entity";
  236. if ($selectedEntities != '') {
  237. $sql .= " AND fk_entity IN ({$selectedEntities})";
  238. }
  239. $sql .= " WHERE sg.hotelgroup is NOT null ORDER BY sg.ref ASC";
  240. $data = $db->query($sql);
  241. if (!$data) {
  242. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  243. setEventMessage($this->langs->trans('($helper->getHotelGroupsFromGroupClass()) llx_settlements_group'), 'errors');
  244. return $groups;
  245. }
  246. while ($row = pg_fetch_assoc($data)) {
  247. $groups[$row['rowid']] = $row['ref'];
  248. //$groups[] = $row;
  249. }
  250. return $groups;
  251. }
  252. function getSingleUserGroupsFromGroupClass($db)
  253. {
  254. $groups = [];
  255. $sql = "SELECT rowid, ref FROM " . MAIN_DB_PREFIX . "settlements_group WHERE single_user_group is not null ORDER BY ref ASC";
  256. $data = $db->query($sql);
  257. if (!$data) {
  258. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  259. setEventMessage($this->langs->trans('($helper->getSingleUserGroupsFromGroupClass()) llx_settlements_group'), 'errors');
  260. return $groups;
  261. }
  262. while ($row = pg_fetch_assoc($data)) {
  263. $groups[$row['rowid']] = $row['ref'];
  264. }
  265. return $groups;
  266. }
  267. function getAllTools($db)
  268. {
  269. $allTools = [];
  270. $sql = "SELECT i.rowid, i.ref, i.title FROM " . MAIN_DB_PREFIX . "inventory as i WHERE rowid NOT IN (SELECT fk_inventory FROM " . MAIN_DB_PREFIX . "settlements_grouptoolstools) ORDER BY i.ref";
  271. $data = $db->query($sql);
  272. if (!$data) {
  273. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  274. setEventMessage($this->langs->trans('($helper->getAllTools()) llx_inventory'), 'errors');
  275. return $allTools;
  276. }
  277. while ($row = pg_fetch_assoc($data)) {
  278. $allTools[] = $row;
  279. }
  280. return $allTools;
  281. }
  282. function getAllToolsFromSelectedEntity($db, $id)
  283. {
  284. $entity_id = $this->getEntityIdFromPackage($id);
  285. $allTools = [];
  286. $sql = "SELECT i.rowid, i.ref, i.title, ie.device_type, ie2.fk_object, i.status, i.fk_warehouse
  287. FROM " . MAIN_DB_PREFIX . "inventory as i
  288. INNER JOIN " . MAIN_DB_PREFIX . "inventory_extrafields as ie ON ie.fk_object = i.rowid
  289. LEFT JOIN " . MAIN_DB_PREFIX . "inventory_extrafields AS ie2 ON ie2.assigned_device::integer = i.rowid
  290. WHERE i.rowid NOT IN (SELECT device_id FROM " . MAIN_DB_PREFIX . "settlements_packagetool) AND ie.device_type::integer NOT IN (3,4) AND ie.fk_entity::integer = {$entity_id} ORDER BY i.rowid";
  291. //print $sql;
  292. $data = $db->query($sql);
  293. if (!$data) {
  294. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  295. setEventMessage($this->langs->trans('($helper->getAllToolsFromSelectedEntity()) llx_inventory'), 'errors');
  296. return $allTools;
  297. }
  298. while ($row = pg_fetch_assoc($data)) {
  299. $allTools['freeTools'][$row['rowid']] = $row;
  300. if (isset($row['fk_object'])) {
  301. $inventoryObj = new Inventory($db);
  302. $inventoryObj->fetch($row['fk_object']);
  303. $assigned_device_data = ['rowid' => $inventoryObj->id, 'title' => $inventoryObj->title, 'ref' => $inventoryObj->ref, 'device_type' => $inventoryObj->array_options['options_device_type'], 'status' => $inventoryObj->status, 'warehouse' => $inventoryObj->fk_warehouse];
  304. $allTools['freeTools'][$row['rowid']]['assigned_device_data'] = $assigned_device_data;
  305. }
  306. }
  307. $sql = "SELECT i.rowid, i.ref, i.title, ie.device_type, ie2.fk_object, i.status, (SELECT ref FROM " . MAIN_DB_PREFIX . "settlements_package as package WHERE package.rowid = pt.package_id) as package_ref, pt.package_id as packageid, i.fk_warehouse
  308. FROM " . MAIN_DB_PREFIX . "inventory as i
  309. INNER JOIN " . MAIN_DB_PREFIX . "inventory_extrafields as ie ON ie.fk_object = i.rowid
  310. INNER JOIN " . MAIN_DB_PREFIX . "settlements_packagetool AS pt ON pt.device_id=i.rowid
  311. LEFT JOIN " . MAIN_DB_PREFIX . "inventory_extrafields AS ie2 ON ie2.assigned_device::integer = i.rowid
  312. WHERE i.rowid IN (SELECT device_id FROM " . MAIN_DB_PREFIX . "settlements_packagetool) AND ie.device_type::integer NOT IN (3,4) AND ie.fk_entity::integer = {$entity_id} ORDER BY i.rowid";
  313. //print $sql;
  314. $data = $db->query($sql);
  315. if (!$data) {
  316. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  317. setEventMessage($this->langs->trans('($helper->getAllToolsFromSelectedEntity()) llx_inventory'), 'errors');
  318. return $allTools;
  319. }
  320. while ($row = pg_fetch_assoc($data)) {
  321. $allTools['addedTools'][$row['packageid']][$row['rowid']] = $row;
  322. if (isset($row['fk_object'])) {
  323. $inventoryObj = new Inventory($db);
  324. $inventoryObj->fetch($row['fk_object']);
  325. $assigned_device_data = ['rowid' => $inventoryObj->id, 'title' => $inventoryObj->title, 'ref' => $inventoryObj->ref, 'device_type' => $inventoryObj->array_options['options_device_type'], 'status' => $inventoryObj->status, 'warehouse' => $inventoryObj->fk_warehouse];
  326. $allTools['addedTools'][$row['packageid']][$row['rowid']]['assigned_device_data'] = $assigned_device_data;
  327. }
  328. $allTools['addedPackages'][$row['packageid']] = $row['package_ref'];
  329. }
  330. return $allTools;
  331. }
  332. function getAllPackagesFromSelectedEntity($id, $selectedEntities = '')
  333. {
  334. $entity_id = $this->getEntityIdFromgoupTools($id);
  335. $allPackages = [];
  336. $sql = "SELECT pa.rowid, pa.ref, pa.label
  337. FROM " . MAIN_DB_PREFIX . "settlements_package as pa
  338. WHERE pa.rowid NOT IN (SELECT fk_package FROM " . MAIN_DB_PREFIX . "settlements_grouptoolspackages)";
  339. if ($selectedEntities != '') {
  340. $sql .= " AND pa.fk_entity IN ({$selectedEntities})";
  341. }
  342. $sql .= " AND pa.fk_entity = '{$entity_id}' ORDER BY pa.ref";
  343. //print $sql;
  344. //exit;
  345. $data = $this->db->query($sql);
  346. if (!$data) {
  347. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  348. setEventMessage($this->langs->trans('($helper->getAllPackagesFromSelectedEntity()) llx_settlements_package'), 'errors');
  349. return $allPackages;
  350. }
  351. while ($row = pg_fetch_assoc($data)) {
  352. $allPackages['freePackages'][$row['rowid']] = $row;
  353. }
  354. $sqlAddedPackages = "SELECT pa.rowid, pa.ref, pa.label, gp.rowid as gprowid, gp.ref as gpref, gp.label as gplabel FROM " . MAIN_DB_PREFIX . "settlements_grouptoolspackages as gpp
  355. INNER JOIN " . MAIN_DB_PREFIX . "settlements_package as pa ON pa.rowid = gpp.fk_package
  356. INNER JOIN " . MAIN_DB_PREFIX . "settlements_grouptools as gp ON gp.rowid = gpp.fk_group";
  357. $data2 = $this->db->query($sqlAddedPackages);
  358. if (!$data2) {
  359. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  360. setEventMessage($this->langs->trans('($helper->getAllPackagesFromSelectedEntity()) settlements_grouptoolspackages'), 'errors');
  361. return $allPackages;
  362. }
  363. while ($row = pg_fetch_assoc($data2)) {
  364. $allPackages['addedPackages'][] = $row;
  365. }
  366. return $allPackages;
  367. }
  368. function getEntityIdFromgoupTools($id)
  369. {
  370. $entity = [];
  371. $sql = "SELECT fk_entity FROM " . MAIN_DB_PREFIX . "settlements_grouptools WHERE rowid = {$id}";
  372. //print $sql;
  373. $data = $this->db->query($sql);
  374. if (!$data) {
  375. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  376. setEventMessage($this->langs->trans('($helper->getEntityIdFromgoupTools()) llx_settlements_grouptools'), 'errors');
  377. return $entity;
  378. }
  379. while ($row = pg_fetch_array($data)) {
  380. $entity[] = $row['fk_entity'];
  381. }
  382. return $entity[0];
  383. }
  384. function getEntityIdFromPackage($id)
  385. {
  386. $entity = [];
  387. $sql = "SELECT fk_entity FROM " . MAIN_DB_PREFIX . "settlements_package WHERE rowid = {$id}";
  388. $data = $this->db->query($sql);
  389. if (!$data) {
  390. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  391. setEventMessage($this->langs->trans('($helper->getEntityIdFromPackage()) llx_settlements_package'), 'errors');
  392. return $entity;
  393. }
  394. while ($row = pg_fetch_array($data)) {
  395. $entity[] = $row['fk_entity'];
  396. }
  397. return $entity[0];
  398. }
  399. function getAllUsers($db)
  400. {
  401. $allUsers = [];
  402. $sql = "SELECT u.rowid, u.login, u.firstname, u.lastname, ue.nickname, ue.user_category FROM " . MAIN_DB_PREFIX . "user as u
  403. INNER JOIN " . MAIN_DB_PREFIX . "user_extrafields AS ue ON ue.fk_object = u.rowid
  404. WHERE ue.user_category = '1' AND u.rowid NOT IN (SELECT fk_user FROM " . MAIN_DB_PREFIX . "settlements_groupusers)
  405. ORDER BY ue.nickname";
  406. $data = $db->query($sql);
  407. //print $sql;
  408. if (!$data) {
  409. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  410. setEventMessage($this->langs->trans('($helper->getAllUsers()) llx_user'), 'errors');
  411. return $allUsers;
  412. }
  413. while ($row = pg_fetch_assoc($data)) {
  414. $row['openDailyClosing'] = 0;
  415. $dailyclosingSql = "SELECT * FROM llx_rollerstorage_packagehistory WHERE user_id = {$row['rowid']} AND status = 0 ORDER BY rowid DESC LIMIT 1";
  416. $dailyclosingData = $db->query($dailyclosingSql);
  417. if ($db->num_rows($dailyclosingData) > 0) {
  418. $dCRow = $db->fetch_object($dailyclosingData);
  419. $row['openDailyClosing'] = $dCRow->rowid;
  420. }
  421. $allUsers['freeUsers'][] = $row;
  422. }
  423. $sqlAddedUsers = "SELECT gu.fk_user, u.firstname, u.lastname, u.login, ue.nickname, sg.ref as groupref, sg.rowid as groupid
  424. FROM " . MAIN_DB_PREFIX . "settlements_groupusers as gu
  425. INNER JOIN " . MAIN_DB_PREFIX . "user as u ON u.rowid = gu.fk_user
  426. INNER JOIN " . MAIN_DB_PREFIX . "user_extrafields as ue ON gu.fk_user = ue.fk_object
  427. INNER JOIN " . MAIN_DB_PREFIX . "settlements_group as sg ON sg.rowid = gu.fk_settlements_group
  428. ORDER BY ue.nickname";
  429. //print $sql;
  430. $dataAddedUser = $db->query($sqlAddedUsers);
  431. if (!$dataAddedUser) {
  432. return $allUsers;
  433. }
  434. while ($rowAddedUser = pg_fetch_assoc($dataAddedUser)) {
  435. $allUsers['addedUsers'][] = $rowAddedUser;
  436. }
  437. //print_r($allUsers);exit;
  438. return $allUsers;
  439. }
  440. function getAllUsersForEdit($user_id)
  441. {
  442. global $db;
  443. $allUsers = [];
  444. //$sql = "SELECT u.rowid, u.login, u.firstname, u.lastname FROM " . MAIN_DB_PREFIX . "user as u ORDER BY u.lastname";
  445. $sql = "SELECT u.rowid, u.login, u.firstname, u.lastname, ue.nickname, ue.user_category FROM " . MAIN_DB_PREFIX . "user as u
  446. INNER JOIN " . MAIN_DB_PREFIX . "user_extrafields AS ue ON ue.fk_object = u.rowid
  447. WHERE ue.user_category = '1'";
  448. if ($user_id) {
  449. $sql .= " AND u.rowid NOT IN (SELECT fk_user FROM " . MAIN_DB_PREFIX . "settlements_groupusers WHERE fk_user != $user_id)";
  450. }
  451. $sql .= " ORDER BY u.lastname";
  452. $data = $db->query($sql);
  453. if (!$data) {
  454. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  455. setEventMessage($this->langs->trans('($helper->getAllUsersForEdit()) llx_user'), 'errors');
  456. return $allUsers;
  457. }
  458. while ($row = pg_fetch_assoc($data)) {
  459. $allUsers['freeUsers'][] = $row;
  460. }
  461. return $allUsers;
  462. }
  463. function getAllHotelsForEdit($hotel_id)
  464. {
  465. global $db;
  466. $allHotels = [];
  467. $sql = "SELECT rowid, label FROM " . MAIN_DB_PREFIX . "settlements_hotel
  468. WHERE status = 1
  469. ORDER BY label ASC";
  470. $data = $db->query($sql);
  471. if (!$data) {
  472. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  473. setEventMessage($this->langs->trans('($helper->getAllHotelsForEdit()) llx_user'), 'errors');
  474. return $allHotels;
  475. }
  476. while ($row = pg_fetch_assoc($data)) {
  477. $allHotels['freeHotels'][] = $row;
  478. }
  479. return $allHotels;
  480. }
  481. function getFilteredUsers($db, $string)
  482. {
  483. $allUsers = [];
  484. $sql = "SELECT * FROM " . MAIN_DB_PREFIX . "user as u WHERE rowid NOT IN (SELECT fk_user FROM " . MAIN_DB_PREFIX . "settlements_groupusers) AND (u.lastname LIKE '%{$string}%' OR u.firstname LIKE '%{$string}%') ORDER BY u.lastname";
  485. $data = $db->query($sql);
  486. if (!$data) {
  487. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  488. return $allUsers;
  489. }
  490. while ($row = pg_fetch_assoc($data)) {
  491. $allUsers[] = $row;
  492. }
  493. return $allUsers;
  494. }
  495. function getFilteredTools($db, $string)
  496. {
  497. $allUsers = [];
  498. $sql = "SELECT * FROM " . MAIN_DB_PREFIX . "inventory as i WHERE rowid NOT IN (SELECT fk_inventory FROM " . MAIN_DB_PREFIX . "settlements_grouptools) AND i.ref LIKE '%{$string}%' ORDER BY i.ref";
  499. $data = $db->query($sql);
  500. if (!$data) {
  501. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  502. return $allUsers;
  503. }
  504. while ($row = pg_fetch_assoc($data)) {
  505. $allUsers[] = $row;
  506. }
  507. return $allUsers;
  508. }
  509. function getToolsById($db, $id)
  510. {
  511. $array = [];
  512. $sql = "SELECT gtt.rowid, i.ref, i.title, iextra.unique_identifier, iextra.device_type, gtt.device_id, ie2.fk_object, i.status, i.fk_warehouse
  513. FROM " . MAIN_DB_PREFIX . "settlements_packagetool as gtt
  514. INNER JOIN " . MAIN_DB_PREFIX . "inventory as i ON i.rowid = gtt.device_id
  515. LEFT JOIN " . MAIN_DB_PREFIX . "inventory_extrafields AS iextra ON iextra.fk_object = i.rowid
  516. LEFT JOIN " . MAIN_DB_PREFIX . "inventory_extrafields AS ie2 ON ie2.assigned_device::integer = i.rowid
  517. WHERE package_id = {$id} ORDER BY i.ref ASC";
  518. //print $sql;
  519. $data = $db->query($sql);
  520. if (!$data) {
  521. dol_syslog("No data found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  522. setEventMessage($this->langs->trans('($helper->getToolsById()) llx_settlements_packagetool'), 'errors');
  523. return $array;
  524. }
  525. while ($row = pg_fetch_assoc($data)) {
  526. if (isset($row['fk_object'])) {
  527. $inventoryObj = new Inventory($db);
  528. $inventoryObj->fetch($row['fk_object']);
  529. $assigned_device_data = ['rowid' => $inventoryObj->id, 'title' => $inventoryObj->title, 'ref' => $inventoryObj->ref, 'device_type' => $inventoryObj->array_options['options_device_type'], 'status' => $inventoryObj->status, 'warehouse' => $inventoryObj->fk_warehouse];
  530. }
  531. $array[$row['rowid']] = $row;
  532. $array[$row['rowid']]['assigned_device_data'] = $assigned_device_data;
  533. //$array[] = $row;
  534. }
  535. return $array;
  536. }
  537. function getPackagesById($id)
  538. {
  539. global $db;
  540. $array = [];
  541. $sql = "SELECT gtp.rowid, gtp.fk_package, pa.ref FROM " . MAIN_DB_PREFIX . "settlements_grouptoolspackages as gtp
  542. INNER JOIN " . MAIN_DB_PREFIX . "settlements_package as pa ON pa.rowid = gtp.fk_package
  543. WHERE gtp.fk_group = {$id} ORDER BY pa.ref ASC";
  544. //print $sql;exit;
  545. $data = $db->query($sql);
  546. if (!$data) {
  547. dol_syslog("No data found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  548. setEventMessage($this->langs->trans('($helper->getPackagesById()) llx_settlements_grouptoolspackages'), 'errors');
  549. return $array;
  550. }
  551. while ($row = pg_fetch_assoc($data)) {
  552. $array[] = $row;
  553. }
  554. return $array;
  555. }
  556. function getGroupIdBygroupToolId($id)
  557. {
  558. global $db;
  559. $array = [];
  560. if (isset($id)) {
  561. $sql = "SELECT fk_groupid
  562. FROM " . MAIN_DB_PREFIX . "settlements_usergrouptoolgroup
  563. WHERE fk_group_tools_id = {$id}";
  564. $data = $db->query($sql);
  565. if (!$data) {
  566. dol_syslog("No data found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  567. setEventMessage($this->langs->trans('($helper->getGroupIdBygroupToolId()) llx_settlements_usergrouptoolgroup'), 'errors');
  568. return $array;
  569. }
  570. $array = pg_fetch_assoc($data);
  571. return $array['fk_groupid'];
  572. }
  573. return $array;
  574. }
  575. function getUsersById($db, $id)
  576. {
  577. $usersOfGroup = [];
  578. $sql = "SELECT sug.rowid, u.login, u.lastname, u.firstname, sug.fk_user, u.api_key FROM " . MAIN_DB_PREFIX . "settlements_groupusers as sug
  579. INNER JOIN " . MAIN_DB_PREFIX . "user as u ON u.rowid = sug.fk_user
  580. WHERE fk_settlements_group = {$id}
  581. ORDER BY u.lastname ASC";
  582. $data = $db->query($sql);
  583. if (!$data) {
  584. dol_syslog("No data found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  585. //setEventMessage($this->langs->trans('($helper->getUsersById()) llx_settlements_groupusers'), 'errors');
  586. return $usersOfGroup;
  587. }
  588. while ($row = pg_fetch_assoc($data)) {
  589. $usersOfGroup[] = $row;
  590. }
  591. return $usersOfGroup;
  592. }
  593. function getDevicesById($db, $id)
  594. {
  595. $devicesOfGroup = [];
  596. $sql = "SELECT pt.rowid, pt.device_id, i.title, i.ref, i.status FROM " . MAIN_DB_PREFIX . "settlements_packagetool AS pt
  597. INNER JOIN " . MAIN_DB_PREFIX . "inventory as i ON i.rowid = pt.device_id
  598. WHERE pt.package_id = {$id}";
  599. //print $sql;
  600. $data = $db->query($sql);
  601. if (!$data) {
  602. dol_syslog("No data found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  603. setEventMessage('A csoporthoz rendelt felhasználók lekérdezésébe valami hiba csúszott.', 'errors');
  604. return $devicesOfGroup;
  605. }
  606. while ($row = pg_fetch_assoc($data)) {
  607. $devicesOfGroup[] = $row;
  608. }
  609. return $devicesOfGroup;
  610. }
  611. function getUsersByIdWithDate($db, $id, $date)
  612. {
  613. $usersOfGroup = [];
  614. $sql = "SELECT un.user_id, u.firstname as firstname, u.lastname as lastname, u.login as login FROM " . MAIN_DB_PREFIX . "settlements_usernaplo AS un
  615. INNER JOIN " . MAIN_DB_PREFIX . "user as u ON u.rowid = un.user_id
  616. WHERE un.group_user_id = {$id} AND un.date_creation BETWEEN '{$date} 00:00:00' AND '{$date} 23:59:59' AND un.status = 1
  617. GROUP BY un.user_id, u.firstname, u.lastname, u.login ORDER BY u.lastname";
  618. $data = $db->query($sql);
  619. if (!$data) {
  620. dol_syslog("No data found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  621. setEventMessage('A csoporthoz rendelt felhasználók naplózási lekérdezésébe valami hiba csúszott.', 'errors');
  622. return $usersOfGroup;
  623. }
  624. while ($row = pg_fetch_assoc($data)) {
  625. $usersOfGroup[] = $row;
  626. }
  627. return $usersOfGroup;
  628. }
  629. function getUsersOfGroupsFromNaploToday($db, $id)
  630. {
  631. $users = [];
  632. $now = date('Y-m-d', dol_now());
  633. $nowDatetime = date('Y-m-d H:i:s', dol_now());
  634. $sql = "SELECT user_id FROM " . MAIN_DB_PREFIX . "settlements_usernaplo WHERE group_user_id = {$id} AND status = 1 AND date_creation BETWEEN '{$now} 05:00:00' AND '{$now} 23:59:59' GROUP BY user_id";
  635. //$sql = "SELECT user_id FROM " . MAIN_DB_PREFIX . "settlements_usernaplo WHERE group_user_id = {$id} AND status = 1 AND date_creation < '{$nowDatetime}' GROUP BY user_id";
  636. $data = $db->query($sql);
  637. if (!$data) {
  638. dol_syslog("No users found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  639. //setEventMessage('A csoporthoz rendelt felhasználók naplózási lekérdezésébe valami hiba csúszott.', 'errors');
  640. return $users;
  641. }
  642. while ($row = pg_fetch_assoc($data)) {
  643. $users[] = $row['user_id'];
  644. }
  645. return $users;
  646. }
  647. function getToolsFromNaploToday($db, $id)
  648. {
  649. $tools = [];
  650. $now = date('Y-m-d', dol_now());
  651. $sql = "SELECT tool_id FROM " . MAIN_DB_PREFIX . "settlements_toolnaplo WHERE group_tool_id = {$id} AND status = 1 AND date_creation BETWEEN '{$now} 00:00:00' AND '{$now} 23:59:59' GROUP BY tool_id";
  652. $data = $db->query($sql);
  653. if (!$data) {
  654. dol_syslog("No tool found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  655. setEventMessage('A csoporthoz rendelt eszközök naplózási lekérdezésébe valami hiba csúszott.', 'errors');
  656. return $tools;
  657. }
  658. while ($row = pg_fetch_assoc($data)) {
  659. $tools[] = $row['user_id'];
  660. }
  661. return $tools;
  662. }
  663. function confirmButtonCheck($array1, $array2)
  664. {
  665. return empty(array_diff($array1, $array2));
  666. }
  667. function getSum($db, $currency, $id, $users, $date = null)
  668. {
  669. $sum = [];
  670. foreach ($users as $user) {
  671. $usersArray[] = $user['user_id'];
  672. }
  673. $usersString = implode(',', $usersArray);
  674. $sql = "SELECT SUM(total_ht) as total_ht, SUM(total_tva) as total_tva, SUM(total_ttc) as total_ttc
  675. FROM " . MAIN_DB_PREFIX . "facture
  676. WHERE fk_user_closing IN({$usersString})
  677. AND fk_statut = 2
  678. AND multicurrency_code = '{$currency}'
  679. AND date_closing BETWEEN '{$date} 00:00:00' AND '{$date} 23:59:59'";
  680. $data = $db->query($sql);
  681. if (!$data) {
  682. dol_syslog("No data found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  683. setEventMessage('A számlák összesítésének számításába valami hiba csúszott.', 'errors');
  684. return $sum;
  685. }
  686. $dataArray = pg_fetch_all($data);
  687. foreach ($dataArray as $row) {
  688. $sum[] = $row;
  689. }
  690. return $sum;
  691. }
  692. function getDeletedUsers($db, $id, $date)
  693. {
  694. $deletedUsersArray = [];
  695. $sql = "SELECT user_id, MAX(date_creation) as date FROM " . MAIN_DB_PREFIX . "settlements_usernaplo WHERE group_user_id = {$id} and date_creation BETWEEN '{$date} 00:00:00' AND '{$date} 23:59:59' AND status = 0 GROUP BY user_id ";
  696. $data = $db->query($sql);
  697. $dataArray = pg_fetch_all($data);
  698. if (empty($dataArray)) {
  699. dol_syslog("No data found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  700. return $deletedUsersArray;
  701. }
  702. foreach ($dataArray as $row) {
  703. $deletedUsersArray[$row['user_id']] = $row['date'];
  704. }
  705. return $deletedUsersArray;
  706. }
  707. function correctNumber($number)
  708. {
  709. $integerPart = floor($number);
  710. $formattedNumber = number_format($integerPart, 0, '.', ' ');
  711. return $formattedNumber;
  712. }
  713. function createArray($daterange)
  714. {
  715. $dates = explode(" - ", $daterange);
  716. $startDate = new DateTime($dates[0]);
  717. $endDate = new DateTime($dates[1]);
  718. $dateArray = array();
  719. $currentDate = clone $startDate;
  720. while ($currentDate <= $endDate) {
  721. $dateArray[] = $currentDate->format('Y-m-d');
  722. $currentDate->modify('+1 day');
  723. }
  724. return $dateArray;
  725. }
  726. function createDataArray($id, $action, $userId)
  727. {
  728. $data['id'] = $id;
  729. $data['action'] = $action;
  730. $data['userid'] = $userId;
  731. return $data;
  732. }
  733. function createDataToolArray($id, $action, $toolid)
  734. {
  735. $data['id'] = $id;
  736. $data['action'] = $action;
  737. $data['toolid'] = $toolid;
  738. return $data;
  739. }
  740. function getAllEntities()
  741. {
  742. $entitiesArray = [];
  743. $sql = "SELECT rowid, label FROM " . MAIN_DB_PREFIX . "entity ORDER BY label ASC";
  744. $data = $this->db->query($sql);
  745. while ($row = pg_fetch_assoc($data)) {
  746. $entitiesArray[$row['rowid']] = $row['label'];
  747. }
  748. return $entitiesArray;
  749. }
  750. function getEntityDataById($id)
  751. {
  752. $entity_id = $this->getEntityIdFromPackage($id);
  753. $entitiArray = [];
  754. $sql = "SELECT name, value FROM " . MAIN_DB_PREFIX . "const
  755. WHERE entity = {$entity_id}
  756. AND name IN('MAIN_INFO_SOCIETE_ZIP', 'MAIN_INFO_SOCIETE_TOWN', 'MAIN_INFO_SOCIETE_ADDRESS', 'MAIN_INFO_SOCIETE_NOM', 'MAIN_INFO_TVAINTRA')
  757. ORDER BY rowid DESC";
  758. $data = $this->db->query($sql);
  759. if (!$data) {
  760. dol_syslog("No tool found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  761. setEventMessage('Nincs ilyen cég.', 'errors');
  762. return $entitiArray;
  763. }
  764. while ($row = pg_fetch_assoc($data)) {
  765. $entitiArray[$row['name']] = $row['value'];
  766. }
  767. return $entitiArray;
  768. }
  769. function createHTML($id)
  770. {
  771. $printbuttonData = explode('_', $id);
  772. $bpcard = $printbuttonData[2];
  773. $dandc = $printbuttonData[3];
  774. $riverride = $printbuttonData[4];
  775. global $user;
  776. global $conf;
  777. global $db;
  778. global $langs;
  779. $entity = $this->getEntityDataById($printbuttonData[0]);
  780. $devicesArray = $this->getDevicesById($db, $printbuttonData[0]);
  781. $userDataObj = $this->getUserData($printbuttonData[1]);
  782. $address = $userDataObj->town != '' ? $userDataObj->zip . ' ' . $userDataObj->town . ', ' . $userDataObj->address : '';
  783. $result = '<table style="width:100%;"><tr><td style="width:50%;"><b>' . $langs->trans('transferingUserData') . '</b></td><td style="width:50%; text-align: right;"><b>' . $langs->trans('receivingUserData') . '</b></td></tr>';
  784. $result .= '<tr><td>' . $user->firstname . ' ' . $user->lastname . '</td><td style="text-align: right;">' . $userDataObj->firstname . ' ' . $userDataObj->lastname . '</td></tr>';
  785. $result .= '<tr><td>' . $entity['MAIN_INFO_SOCIETE_NOM'] . '</td><td style="text-align: right;"></td></tr>';
  786. $result .= '<tr><td>' . $entity['MAIN_INFO_TVAINTRA'] . '</td><td style="text-align: right;">' . $userDataObj->array_options['options_tax_identification_number'] . '</td></tr>';
  787. $result .= '<tr><td>' . $entity['MAIN_INFO_SOCIETE_ZIP'] . ', ' . $entity['MAIN_INFO_SOCIETE_TOWN'] . '</td><td style="text-align: right;">' . $address . '</td></tr>';
  788. $result .= '<tr><td>' . $entity['MAIN_INFO_SOCIETE_ADDRESS'] . '</td><td style="text-align: right;"></td></tr>';
  789. $result .= '</table>';
  790. $result .= '<div style="width:100%; text-align: center;">' . date('Y.m.d H:i:s') . '</div>';
  791. $result .= '<table style="width:100%; text-align:right;">';
  792. $count = 1;
  793. foreach ($devicesArray as $device) {
  794. $result .= '<tr><td style="width: 5%;">' . $count . '</td><td style="text-align: left; width: 30%;">' . $device['ref'] . '</td><td style="text-align: left; width: 55%;"> (' . $device['title'] . ')</td><td style="width:15%;">1 ' . $langs->trans('Pieces') . '</td></tr>';
  795. $result .= '<tr><td style="width: 5%;">&nbsp;</td><td colspan="2" style="text-align: center; width: 100%;"> ' . $device['unique_identifier'] . '</td></tr>';
  796. $count++;
  797. }
  798. $changes = $this->getChanges();
  799. if ($changes) {
  800. foreach ($changes as $change) {
  801. $tmpArray = explode('_', $change['ref']);
  802. $result .= '<tr><td style="width: 5%;">' . $count . '</td><td style="text-align: left; width: 30%;">' . str_replace("_", " ", $change['ref']) . '</td><td style="text-align: left; width: 60%;"> ' . $this->correctNumber($change['title']) . ' ' . $tmpArray[1] . '</td><td style="width:10%;"></td></tr>';
  803. $result .= '<tr><td style="width: 5%;">&nbsp;</td><td colspan="2" style="text-align: center; width: 100%;">&nbsp;</td></tr>';
  804. $count++;
  805. }
  806. }
  807. $result .= '<tr><td style="width: 5%;">' . $count . '</td><td style="text-align: left; width: 30%;">Budapest Card</td><td style="text-align: left; width: 60%;"> ' . $bpcard . '</td><td style="width:10%;">' . $langs->trans('Pieces') . '</td></tr>';
  808. $result .= '<tr><td style="width: 5%;">&nbsp;</td><td colspan="2" style="text-align: center; width: 100%;">&nbsp;</td></tr>';
  809. $count++;
  810. $result .= '<tr><td style="width: 5%;">' . $count . '</td><td style="text-align: left; width: 30%;">Dinner & Cruise</td><td style="text-align: left; width: 60%;"> ' . $dandc . '</td><td style="width:10%;"></td></tr>';
  811. $result .= '<tr><td style="width: 5%;">&nbsp;</td><td colspan="2" style="text-align: center; width: 100%;">&nbsp;</td></tr>';
  812. $count++;
  813. $result .= '<tr><td style="width: 5%;">' . $count . '</td><td style="text-align: left; width: 30%;">RiverRide</td><td style="text-align: left; width: 60%;"> ' . $riverride . '</td><td style="width:10%;"></td></tr>';
  814. $result .= '<tr><td style="width: 5%;">&nbsp;</td><td colspan="2" style="text-align: center; width: 100%;">&nbsp;</td></tr>';
  815. $result .= '</table>';
  816. $result .= '<div style="width:100%; text-align: left;">' . date('Y.m.d H:i:s') . '</div>';
  817. $result .= '<div style="padding-top: 100px; height: 100px;">&nbsp;</div>';
  818. $result .=
  819. '<table style="width:100%;">
  820. <tr>
  821. <td style="width:50%; text-align:left;">_________________________________</td>
  822. <td style="width:50%; text-align:right;">_________________________________</td>
  823. </tr>
  824. <tr>
  825. <td style="width:50%; text-align: center;">' . $langs->trans('transferingUser') . '</td>
  826. <td style="width:50%; text-align: center;">' . $langs->trans('receivingUser') . '</td>
  827. </tr>
  828. </table>';
  829. return $result;
  830. }
  831. function createHTMLIncome($id, $BLock3rdData, $withholdingArray, $additionals)
  832. {
  833. //print_r($withholdingArray);
  834. $witholdings = $this->createWitholdings($withholdingArray);
  835. $printbuttonData = explode('_', $id);
  836. global $user, $langs, $conf, $db;
  837. $entity = $this->getEntityDataById($printbuttonData[0]);
  838. $devicesArray = $this->getDevicesById($db, $printbuttonData[0]);
  839. $userDataObj = $this->getUserData($printbuttonData[1]);
  840. $address = $userDataObj->town != '' ? $userDataObj->zip . ' ' . $userDataObj->town . ', ' . $userDataObj->address : '';
  841. #
  842. # Fejléc
  843. #
  844. $result = '<table style="width:100%; border-collapse: collapse; border: 1px solid #000;"><tr><td style="width:50%; padding-left: 20px;"><b>' . $langs->trans('transferingUserData') . '</b></td><td style="width:50%; text-align: right; padding-right: 20px;"><b>' . $langs->trans('receivingUserData') . '</b></td></tr>';
  845. $result .= '<tr><td style="padding-left: 20px;">' . $userDataObj->firstname . ' ' . $userDataObj->lastname . '</td><td style="text-align: right; padding-right: 20px;">' . $user->firstname . ' ' . $user->lastname . '</td></tr>';
  846. $result .= '<tr><td></td><td style="text-align: right; padding-right: 20px;">' . $entity['MAIN_INFO_SOCIETE_NOM'] . '</td></tr>';
  847. $result .= '<tr><td style="padding-left: 20px;">' . $userDataObj->array_options['options_tax_identification_number'] . '</td><td style="text-align: right; padding-right: 20px;">' . $entity['MAIN_INFO_TVAINTRA'] . '</td></tr>';
  848. $result .= '<tr><td style="padding-left: 20px;">' . $address . '</td><td style="text-align: right; padding-right: 20px;">' . $entity['MAIN_INFO_SOCIETE_ZIP'] . ', ' . $entity['MAIN_INFO_SOCIETE_TOWN'] . '</td></tr>';
  849. $result .= '<tr><td></td><td style="text-align: right; padding-right: 20px;">' . $entity['MAIN_INFO_SOCIETE_ADDRESS'] . '</td></tr>';
  850. $result .= '</table>';
  851. $result .= '<div style="width:100%; text-align: center;">' . date('Y.m.d H:i:s') . '</div>';
  852. $result .= '<table style="width:100%; text-align:right;">';
  853. $result .= '<tr><td colspan="3" style="text-align: center; font-weight:bold;">' . $langs->trans('Devices') . '</td></tr>';
  854. #
  855. # Tartalom
  856. #
  857. $count = 1;
  858. foreach ($devicesArray as $device) {
  859. $withholding1 = $witholdings[$device['device_id']] == '' ? '' : $langs->trans('withhold') . ' ' . $witholdings[$device['device_id']] . ' HUF';
  860. $result .= '<tr><td style="width: 5%; text-align: left;">' . $count . '</td><td style="text-align: left; width: 30%;">' . $device['ref'] . '</td><td style="text-align: left; width: 55%;"> (' . $device['title'] . ')</td><td style="width:10%;">1 ' . $langs->trans('pcs') . '</td></tr>';
  861. $result .= '<tr><td style="width: 5%;">&nbsp;</td><td style="width: 30%;">&nbsp;</td><td style="text-align: left;">' . $withholding1 . '</td></tr>';
  862. $count++;
  863. }
  864. //print_r($additionals);exit;
  865. $withholding1 = $witholdings['bp_card'] == '' ? '' : $langs->trans('withhold') . ' ' . $witholdings['bp_card'] . ' HUF';
  866. $result .= '<tr><td style="width: 5%; text-align: left;">' . $count . '</td><td style="text-align: left; width: 30%;">' . $this->getAdditionalTitle('bp_card') . '</td><td style="text-align: left; width: 55%;"> ' . $additionals['bp_card']['pieces'] . '</td><td style="width:10%;">&nbsp;</td></tr>';
  867. $result .= '<tr><td style="width: 5%;">&nbsp;</td><td style="width: 30%;">&nbsp;</td><td style="text-align: left; background-color: grey;">' . $withholding1 . '</td></tr>';
  868. $count++;
  869. $withholding1 = $witholdings['dnc_ticket'] == '' ? '' : $langs->trans('withhold') . ' ' . $witholdings['dnc_ticket'] . ' HUF';
  870. $result .= '<tr><td style="width: 5%; text-align: left;">' . $count . '</td><td style="text-align: left; width: 30%;">' . $this->getAdditionalTitle('dnc_ticket') . '</td><td style="text-align: left; width: 55%;"> ' . $additionals['dnc_ticket']['pieces'] . '</td><td style="width:10%;">&nbsp;</td></tr>';
  871. $result .= '<tr><td style="width: 5%;">&nbsp;</td><td style="width: 30%;">&nbsp;</td><td style="text-align: left; background-color: grey;">' . $withholding1 . '</td></tr>';
  872. $count++;
  873. $withholding1 = $witholdings['rr_ticket'] == '' ? '' : $langs->trans('withhold') . ' ' . $witholdings['rr_ticket'] . ' HUF';
  874. $result .= '<tr><td style="width: 5%; text-align: left;">' . $count . '</td><td style="text-align: left; width: 30%;">' . $this->getAdditionalTitle('rr_ticket') . '</td><td style="text-align: left; width: 55%;"> ' . $additionals['rr_ticket']['pieces'] . '</td><td style="width:10%;">&nbsp;</td></tr>';
  875. $result .= '<tr><td style="width: 5%;">&nbsp;</td><td style="width: 30%;">&nbsp;</td><td style="text-align: left; background-color: grey;">' . $withholding1 . '</td></tr>';
  876. $count++;
  877. $result .= '<tr><td colspan="3" style="text-align: center; font-weight:bold;">' . $langs->trans('Changes') . '</td></tr>';
  878. $changes = $this->getChanges();
  879. if ($changes) {
  880. foreach ($changes as $change) {
  881. $tmpArray = explode('_', $change['ref']);
  882. $result .= '<tr><td style="width: 5%; text-align: left;">' . $count . '</td><td style="text-align: left; width: 30%;">' . str_replace("_", " ", $change['ref']) . '</td><td style="text-align: left; width: 55%;"> ' . $this->correctNumber($change['title']) . ' ' . $tmpArray[1] . '</td><td style="width:10%;"></td></tr>';
  883. $result .= '<tr><td style="width: 5%;">&nbsp;</td><td style="width: 30%;">&nbsp;</td><td style="text-align: left;">&nbsp;</td></tr>';
  884. $count++;
  885. }
  886. }
  887. $result .= '<tr><td colspan="3" style="text-align: center; font-weight:bold;">' . $langs->trans('Incomes') . '</td></tr>';
  888. //print_r($BLock3rdData);exit;
  889. foreach ($BLock3rdData as $key => $value) {
  890. $withholding2 = $witholdings['daily_' . $key] == '' ? '' : $langs->trans('withhold') . ' ' . $witholdings['daily_' . $key] . ' HUF';
  891. $keyIncomes = $this->getIncomesKey($key);
  892. $keyValue = $this->getValueKey($key);
  893. $result .= '<tr><td style="width: 5%; text-align: left;">' . $count . '</td><td style="text-align: left; width: 30%;">' . $langs->trans('todaysIncomes') . ' (' . $langs->trans($keyIncomes) . ')</td><td style="text-align: left; width: 55%;">' . $this->correctNumber($value) . ' ' . $keyValue . '</td><td style="width:10%;"></td></tr>';
  894. if ($keyIncomes == 'Cash') {
  895. $result .= '<tr><td style="width: 5%;">&nbsp;</td><td style="width: 30%;">&nbsp;</td><td style="text-align: left; background-color: grey;">' . $withholding2 . '</td></tr>';
  896. } else {
  897. $result .= '<tr><td style="width: 5%;">&nbsp;</td><td style="width: 30%;">&nbsp;</td><td style="text-align: left;">&nbsp;</td></tr>';
  898. }
  899. $count++;
  900. }
  901. $result .= '</table>';
  902. $result .= '<div style="height: 20px;">&nbsp;</div>';
  903. $result .= '<div style="width:100%; text-align: left;">' . date('Y.m.d H:i:s') . '</div>';
  904. $result .= '<div style="padding-top: 50px; height: 20px;">&nbsp;</div>';
  905. $result .=
  906. '<table style="width:100%;">
  907. <tr>
  908. <td style="width:50%; text-align:left;">_________________________________</td>
  909. <td style="width:50%; text-align:right;">_________________________________</td>
  910. </tr>
  911. <tr>
  912. <td style="width:50%; text-align: center;">' . $langs->trans('transferingUser') . '</td>
  913. <td style="width:50%; text-align: center;">' . $langs->trans('receivingUser') . '</td>
  914. </tr>
  915. </table>';
  916. return $result;
  917. }
  918. private function createWitholdings($withholdingArray)
  919. {
  920. foreach ($withholdingArray as $whkey => $whvalue) {
  921. if ($whkey !== 'daily_HUF' && $whkey !== 'daily_EUR') {
  922. $witholdings[$this->getDeviceIdFromString($whkey)] = $whvalue;
  923. } else {
  924. $witholdings[$whkey] = $whvalue;
  925. }
  926. }
  927. return $witholdings;
  928. }
  929. function getValueKey($key)
  930. {
  931. return strpos($key, 'HUF') !== false ? 'HUF' : 'EUR';
  932. }
  933. function getIncomesKey($key)
  934. {
  935. return strpos($key, 'cash') !== false ? 'Cash' : 'Card';
  936. }
  937. function getUserData($user_id)
  938. {
  939. global $db;
  940. $userObj = new User($db);
  941. $result = $userObj->fetch($user_id);
  942. return $userObj;
  943. }
  944. function getUserName($id)
  945. {
  946. $db = $this->db;
  947. $sql = "SELECT u.lastname, u.firstname, u.login FROM " . MAIN_DB_PREFIX . "settlements_groupusers AS sg
  948. INNER JOIN " . MAIN_DB_PREFIX . "user AS u ON u.rowid = sg.fk_user
  949. WHERE sg.fk_settlements_group = {$id} ORDER BY sg.rowid LIMIT 1";
  950. $data = $db->query($sql);
  951. $dataArray = pg_fetch_all($data);
  952. $name = $dataArray[0]['lastname'] . ' ' . $dataArray[0]['firstname'] . ' (' . $dataArray[0]['login'] . ')';
  953. return $name;
  954. }
  955. function getHotelName($id)
  956. {
  957. $db = $this->db;
  958. $sql = "SELECT h.label FROM " . MAIN_DB_PREFIX . "settlements_grouphotels AS sgh
  959. INNER JOIN " . MAIN_DB_PREFIX . "settlements_hotel AS h ON h.rowid = sgh.fk_hotel_id
  960. WHERE sgh.fk_group_id = {$id} ORDER BY sgh.rowid DESC LIMIT 1";
  961. $data = $db->query($sql);
  962. $dataArray = pg_fetch_all($data);
  963. $name = $dataArray[0]['label'];
  964. return $name;
  965. }
  966. function getSelectedUserId($id)
  967. {
  968. $db = $this->db;
  969. $sql = "SELECT u.rowid FROM " . MAIN_DB_PREFIX . "settlements_groupusers AS sg
  970. INNER JOIN " . MAIN_DB_PREFIX . "user AS u ON u.rowid = sg.fk_user
  971. WHERE sg.fk_settlements_group = {$id} ORDER BY sg.rowid LIMIT 1";
  972. $data = $db->query($sql);
  973. $dataArray = pg_fetch_all($data);
  974. return $dataArray[0]['rowid'];
  975. }
  976. function getSelectedHotelId($id)
  977. {
  978. $db = $this->db;
  979. $sql = "SELECT h.rowid FROM " . MAIN_DB_PREFIX . "settlements_grouphotels AS sgh
  980. INNER JOIN " . MAIN_DB_PREFIX . "settlements_hotel AS h ON h.rowid = sgh.fk_hotel_id
  981. WHERE sgh.fk_group_id = {$id} ORDER BY sgh.rowid DESC LIMIT 1";
  982. $data = $db->query($sql);
  983. $dataArray = pg_fetch_all($data);
  984. return $dataArray[0]['rowid'];
  985. }
  986. function getGroupuserId($id)
  987. {
  988. $db = $this->db;
  989. $sql = "SELECT rowid FROM " . MAIN_DB_PREFIX . "settlements_groupusers WHERE fk_settlements_group = {$id} ORDER BY rowid DESC LIMIT 1";
  990. $data = $db->query($sql);
  991. $dataArray = pg_fetch_all($data);
  992. return $dataArray[0]['rowid'];
  993. }
  994. function getGrouphotelsId($id)
  995. {
  996. $db = $this->db;
  997. $sql = "SELECT rowid FROM " . MAIN_DB_PREFIX . "settlements_grouphotels WHERE fk_group_id = {$id} ORDER BY rowid DESC LIMIT 1";
  998. $data = $db->query($sql);
  999. $dataArray = pg_fetch_all($data);
  1000. return $dataArray[0]['rowid'];
  1001. }
  1002. function getGroupuserIdByUserId($id)
  1003. {
  1004. $db = $this->db;
  1005. $sql = "SELECT fk_settlements_group FROM " . MAIN_DB_PREFIX . "settlements_groupusers WHERE fk_user = {$id} ORDER BY rowid DESC LIMIT 1";
  1006. $data = $db->query($sql);
  1007. $dataArray = pg_fetch_all($data);
  1008. return $dataArray[0]['fk_settlements_group'];
  1009. }
  1010. /**
  1011. * Output the buttons to submit a creation/edit form
  1012. *
  1013. * @param string $save_label Alternative label for save button
  1014. * @param string $cancel_label Alternative label for cancel button
  1015. * @param array $morebuttons Add additional buttons between save and cancel
  1016. * @param bool $withoutdiv Option to remove enclosing centered div
  1017. * @param string $morecss More CSS
  1018. * @param string $dol_openinpopup If the button are shown in a context of a page shown inside a popup, we put here the string name of popup.
  1019. * @return string Html code with the buttons
  1020. */
  1021. public function buttonsSaveCancel($save_label = 'Save', $cancel_label = 'Cancel', $cancelURL = '', $morebuttons = array(), $withoutdiv = 0, $morecss = '', $dol_openinpopup = '')
  1022. {
  1023. global $langs;
  1024. $buttons = array();
  1025. $save = array(
  1026. 'name' => 'save',
  1027. 'label_key' => $save_label,
  1028. );
  1029. if ($save_label == 'Create' || $save_label == 'Add') {
  1030. $save['name'] = 'add';
  1031. } elseif ($save_label == 'Modify') {
  1032. $save['name'] = 'edit';
  1033. }
  1034. $cancel = array(
  1035. 'name' => 'cancel',
  1036. 'label_key' => 'Cancel',
  1037. );
  1038. !empty($save_label) ? $buttons[] = $save : '';
  1039. if (!empty($morebuttons)) {
  1040. $buttons[] = $morebuttons;
  1041. }
  1042. $retstring = $withoutdiv ? '' : '<div class="center">';
  1043. foreach ($buttons as $button) {
  1044. $addclass = empty($button['addclass']) ? '' : $button['addclass'];
  1045. $retstring .= '<input type="submit" class="button button-' . $button['name'] . ($morecss ? ' ' . $morecss : '') . ' ' . $addclass . '" name="' . $button['name'] . '" value="' . dol_escape_htmltag($langs->trans($button['label_key'])) . '">';
  1046. }
  1047. if ($cancel_label == "Cancel") {
  1048. $retstring .= '<a class="button button-' . $cancel['name'] . '" href="' . dol_buildpath($cancelURL, 1) . /*'?restore_lastsearch_values=1' .*/ (!empty($socid) ? '&socid=' . $socid : '') . '">' . $langs->trans($cancel['label_key']) . '</a>';
  1049. }
  1050. $retstring .= $withoutdiv ? '' : '</div>';
  1051. if ($dol_openinpopup) {
  1052. $retstring .= '<!-- buttons are shown into a $dol_openinpopup=' . $dol_openinpopup . ' context, so we enable the close of dialog on cancel -->' . "\n";
  1053. $retstring .= '<script>';
  1054. $retstring .= 'jQuery(".button-cancel").click(function(e) {
  1055. e.preventDefault(); console.log(\'We click on cancel in iframe popup ' . $dol_openinpopup . '\');
  1056. window.parent.jQuery(\'#idfordialog' . $dol_openinpopup . '\').dialog(\'close\');
  1057. });';
  1058. $retstring .= '</script>';
  1059. }
  1060. return $retstring;
  1061. }
  1062. function createButtonContent($db, $id, $toolsOfGroups, $confirmButtonDisplay, $PrintButtonDisplay)
  1063. {
  1064. global $langs;
  1065. if (empty($this->getToolsFromNaploToday($db, $id)) && !empty($toolsOfGroups)) {
  1066. return '<tr style="width=100%; height:40px;"><td colspan="3" class="center"><button class="btn" name="confirmbutton" value="1" onclick="groupconfirm()"
  1067. style="width:100%; height:45px; cursor:pointer; background-color: #98FB98; ' . $confirmButtonDisplay . '">' . $langs->trans('Confirm') . '</button></td></tr>';
  1068. }
  1069. if (!empty($toolsOfGroups)) {
  1070. return '<tr style="width=100%; height:40px;"><td colspan="3" class="center"><button class="btn" name="printbutton" value="1" onclick=""
  1071. style="width:100%; height:45px; cursor:pointer; background-color: yellow; ' . $PrintButtonDisplay . '">' . $langs->trans('Print') . '</button></td></tr>';
  1072. }
  1073. }
  1074. function massactionDelete()
  1075. {
  1076. global $langs;
  1077. return '
  1078. <table class="valid centpercent">
  1079. <tbody><tr class="validtitre"><td class="validtitre" colspan="2"><span class="fas fa-question" style=""></span> ' . $langs->trans('MassDeleteConfirm') . '</td></tr>
  1080. <tr class="valid"><td class="valid" colspan="2">
  1081. <tr class="valid"><td class="valid">' . $langs->trans('MassDeletConfirmContent') . '</td><td class="valid center"><select class="flat width75 marginleftonly marginrightonly" id="confirm" name="confirm">
  1082. <option value="delete">' . $langs->trans('Yes') . '</option>
  1083. <option value="no" selected="">' . $langs->trans('No') . '</option>
  1084. </select>
  1085. <input class="button valignmiddle confirmvalidatebutton small" type="submit" value="' . $langs->trans('Confirm') . '"></td></tr>
  1086. </tbody></table>
  1087. ';
  1088. }
  1089. function confirmButtonConfirmeText()
  1090. {
  1091. global $langs;
  1092. return '
  1093. <table class="valid centpercent">
  1094. <tbody><tr class="validtitre"><td class="validtitre" colspan="2"><span class="fas fa-question" style=""></span>' . $langs->trans('MassConfirm') . '</td></tr>
  1095. <tr class="valid"><td class="valid" colspan="2">
  1096. <tr class="valid"><td class="valid">' . $langs->trans('MassConfirmContent') . '</td><td class="valid center"><select class="flat width75 marginleftonly marginrightonly" id="confirmtools" name="confirmtools">
  1097. <option value="confirm">' . $langs->trans('Yes') . '</option>
  1098. <option value="no" selected="">' . $langs->trans('No') . '</option>
  1099. </select>
  1100. <input class="button valignmiddle confirmvalidatebutton small" type="submit" value="' . $langs->trans('Confirm') . '"></td></tr>
  1101. </tbody></table>
  1102. ';
  1103. }
  1104. function saveToolsData($object, $package_id, $device_id, $langs, $massactionadd)
  1105. {
  1106. global $user;
  1107. $toolNaplo = new ToolNaplo($this->db);
  1108. $object->package_id = $package_id;
  1109. $object->device_id = $device_id;
  1110. $result = $object->create($user);
  1111. if (!$result) {
  1112. $error = pg_last_error($this->db);
  1113. dol_syslog("Nem sikerult a packagetools tabla mentese.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  1114. setEventMessage($langs->trans("error"), 'errors');
  1115. } else {
  1116. $data = $this->createDataToolArray($package_id, $massactionadd, $device_id);
  1117. $toolNaplo->createToolsNaplo($user, $data);
  1118. }
  1119. }
  1120. function savePackageData($grouptoolsPackages, $fk_group, $fk_package, $langs)
  1121. {
  1122. global $user;
  1123. $packageNaplo = new PackageNaplo($this->db);
  1124. $grouptoolsPackages->fk_group = $fk_group;
  1125. $grouptoolsPackages->fk_package = $fk_package;
  1126. $result = $grouptoolsPackages->create($user);
  1127. if (!$result) {
  1128. $error = pg_last_error($this->db);
  1129. dol_syslog("Nem sikerult a grouptoolsPackages tabla mentese.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  1130. setEventMessage($langs->trans("duplicate"), 'errors');
  1131. } else {
  1132. $data = $this->createDataToolArray($fk_group, 1, $fk_package);
  1133. $packageNaplo->createNaplo($user, $data);
  1134. }
  1135. }
  1136. function getListOfUsersRowid($data)
  1137. {
  1138. $rowidArray = [];
  1139. while ($row = pg_fetch_assoc($data)) {
  1140. $rowidArray[$row['rowid']]['fk_settlements_group'] = $row['fk_settlements_group'];
  1141. $rowidArray[$row['rowid']]['fk_user'] = $row['fk_user'];
  1142. }
  1143. return !empty($rowidArray) ? $rowidArray : '';
  1144. }
  1145. function getListOfToolsRowid($data)
  1146. {
  1147. $rowidArray = [];
  1148. foreach ($data as $tool) {
  1149. $rowidArray[$tool->id]['fk_group'] = $tool->fk_group;
  1150. $rowidArray[$tool->id]['fk_inventory'] = $tool->fk_inventory;
  1151. }
  1152. return $rowidArray;
  1153. }
  1154. function getListOfPackagesRowid($data)
  1155. {
  1156. $rowidArray = [];
  1157. foreach ($data as $tool) {
  1158. $rowidArray[$tool->id]['fk_group'] = $tool->fk_group;
  1159. $rowidArray[$tool->id]['fk_package'] = $tool->fk_package;
  1160. }
  1161. return $rowidArray;
  1162. }
  1163. function getListOfUsersFromTheGroups()
  1164. {
  1165. $sql = "SELECT rowid, fk_settlements_group, fk_user FROM " . MAIN_DB_PREFIX . "settlements_groupusers
  1166. WHERE fk_settlements_group NOT IN(SELECT rowid FROM " . MAIN_DB_PREFIX . "settlements_group WHERE single_user_group IS NOT NULL OR hotelgroup IS NOT NULL)
  1167. ORDER BY rowid ASC";
  1168. //print $sql;exit;
  1169. $data = $this->db->query($sql);
  1170. return $data;
  1171. }
  1172. function getListOfUsersFromTheGroupTable()
  1173. {
  1174. $data = $this->getListOfUsersFromTheGroups();
  1175. if (pg_num_rows($data) > 0) {
  1176. $rows = pg_fetch_all($data);
  1177. return $rows;
  1178. }
  1179. return [];
  1180. }
  1181. function userGroupsAreEmpty()
  1182. {
  1183. $data = $this->getListOfUsersFromTheGroups();
  1184. return pg_num_rows($data) == 0;
  1185. }
  1186. function getListOfToolsFromTheGroups()
  1187. {
  1188. $allObj = new PackageTool($this->db);
  1189. $result = $allObj->fetchAll();
  1190. return $result;
  1191. }
  1192. function getListOfPackagesFromTheGroups()
  1193. {
  1194. $allObj = new GrouptoolsPackages($this->db);
  1195. $result = $allObj->fetchAll();
  1196. return $result;
  1197. }
  1198. function toolGroupsAreEmpty()
  1199. {
  1200. $data = $this->getListOfToolsFromTheGroups();
  1201. return count($data) == 0;
  1202. }
  1203. function packageGroupsAreEmpty()
  1204. {
  1205. $data = $this->getListOfPackagesFromTheGroups();
  1206. return $data > 0 ? count($data) == 0 : true;
  1207. }
  1208. function createUserNaplo($record)
  1209. {
  1210. global $user;
  1211. $userNaploObj = new UserNaplo($this->db);
  1212. $userNaploObj->user_id = $record->fk_user;
  1213. $userNaploObj->group_user_id = $record->fk_settlements_group;
  1214. $userNaploObj->status = 0;
  1215. $insertResult = $userNaploObj->create($user);
  1216. return $insertResult;
  1217. }
  1218. function createToolNaplo($record)
  1219. {
  1220. global $user;
  1221. $toolNaploObj = new ToolNaplo($this->db);
  1222. $toolNaploObj->tool_id = $record->device_id;
  1223. $toolNaploObj->group_tool_id = $record->package_id;
  1224. $toolNaploObj->status = 0;
  1225. return $toolNaploObj->create($user);
  1226. }
  1227. function createPackageNaplo($record)
  1228. {
  1229. global $user;
  1230. $packageNaploObj = new PackageNaplo($this->db);
  1231. $packageNaploObj->package_id = $record->fk_package;
  1232. $packageNaploObj->group_tool_id = $record->fk_group;
  1233. $packageNaploObj->status = 0;
  1234. return $packageNaploObj->create($user);
  1235. }
  1236. function deleteLine($object, $key)
  1237. {
  1238. global $user;
  1239. return $object->deleteline($user, $key);
  1240. }
  1241. function returnWindowLocation($url, $id, $idmenu)
  1242. {
  1243. echo '<script type="text/javascript">window.location.href="' . $url . '?id=' . $id . '&idmenu=' . $idmenu . '";</script>';
  1244. }
  1245. function returnDailyClosingWindowLocation($url, $id, $user_id, $idmenu)
  1246. {
  1247. echo '<script type="text/javascript">window.location.href="' . $url . '?id=' . $id . '&user_id=' . $user_id . '&idmenu=' . $idmenu . '";</script>';
  1248. }
  1249. function returnDailyClosingHistoryWindowLocation($url, $id, $user_id, $idmenu)
  1250. {
  1251. echo '<script type="text/javascript">window.location.href="' . $url . '?id=' . $id . '&user_id=' . $user_id . '&idmenu=' . $idmenu . '";</script>';
  1252. }
  1253. function getAllSalesWithSQL($userObj, $sql)
  1254. {
  1255. $salesUsers = [];
  1256. $result = $this->db->query($sql);
  1257. while ($row = pg_fetch_assoc($result)) {
  1258. $salesUsers[] = $row;
  1259. }
  1260. return $salesUsers;
  1261. }
  1262. function tableDrawer($allSalesUsers, $db, $idmenu)
  1263. {
  1264. $rownum = 0;
  1265. foreach ($allSalesUsers as $user) {
  1266. $url = '/custom/settlements/userloginnaplo_list.php?user_id=' . $user['rowid'] . '&idmenu=' . $idmenu . '&mainmenu=settlements&leftmenu=';
  1267. $bgcolor = $this->setRowColor($rownum);
  1268. print '<tr style="height:30px; background-color: ' . $bgcolor . '">
  1269. <td><a style="display: block; width: 100%; height: 100%;" href="' . $url . '">' . $user['lastname'] . ' ' . $user['firstname'] . '</a></td>';
  1270. print '<td style="text-align: center;">' . $user['nickname'] . '</td>';
  1271. print '<td style="text-align: center;">' . $user['login'] . '</td>';
  1272. print '</tr>';
  1273. $rownum++;
  1274. }
  1275. }
  1276. private function setRowColor($rownum)
  1277. {
  1278. return $rownum % 2 == 0 ? '#b0c4de' : 'white';
  1279. }
  1280. public function getChangedDateRecord($id)
  1281. {
  1282. global $db;
  1283. $changedRecord = [];
  1284. $logoutChangeNaploObj = new LogoutChangeNaplo($db);
  1285. $result = $logoutChangeNaploObj->fetchAll('DESC', 'rowid', 1, 0, array('fk_logout' => $id));
  1286. if (!empty($result)) {
  1287. foreach ($result as $record) {
  1288. $changedRecord['id'] = $record->id;
  1289. $changedRecord['corrected_date'] = $record->corrected_date;
  1290. return $changedRecord;
  1291. }
  1292. }
  1293. return false;
  1294. }
  1295. public function getEntities($entitiesArrayIsEmpty = false, $entities, $entitiesArray)
  1296. {
  1297. if ($entitiesArrayIsEmpty) {
  1298. $array = [];
  1299. foreach ($entities as $key => $value) {
  1300. $array[] = $key;
  1301. }
  1302. $selectedEntities = implode(', ', $array);
  1303. } else {
  1304. $array = [];
  1305. foreach ($entitiesArray as $entity) {
  1306. if ($entity)
  1307. $array[] = $entity;
  1308. }
  1309. $selectedEntities = implode(', ', $array);
  1310. }
  1311. return $selectedEntities;
  1312. }
  1313. function getTheUsersOfGroup($id, $nemkell)
  1314. {
  1315. global $db;
  1316. $sql = "SELECT ugtg.fk_groupid, gu.fk_user, u. lastname, u.firstname, u.login, ue.nickname
  1317. FROM " . MAIN_DB_PREFIX . "settlements_usergrouptoolgroup as ugtg
  1318. INNER JOIN " . MAIN_DB_PREFIX . "settlements_groupusers as gu ON gu.fk_settlements_group = ugtg.fk_groupid
  1319. INNER JOIN " . MAIN_DB_PREFIX . "user as u ON u.rowid = gu.fk_user
  1320. INNER JOIN " . MAIN_DB_PREFIX . "user_extrafields as ue ON ue.fk_object = gu.fk_user
  1321. WHERE ugtg.fk_group_tools_id = {$id}
  1322. AND ugtg.fk_groupid NOT IN (SELECT gu2.fk_settlements_group FROM " . MAIN_DB_PREFIX . "settlements_groupusers as gu2 WHERE date_creation < DATE_TRUNC('day', CURRENT_DATE) GROUP BY gu2.fk_settlements_group)";
  1323. if ($nemkell != '') {
  1324. $sql .= " AND gu.fk_user NOT IN({$nemkell})";
  1325. }
  1326. //print $sql . '<br>';
  1327. $data = $this->db->query($sql);
  1328. $dataArray = pg_fetch_all($data);
  1329. return $dataArray;
  1330. }
  1331. function savePackageUserAssignement($packageuser, $id)
  1332. {
  1333. global $db;
  1334. global $user;
  1335. global $langs;
  1336. $packageHistoryObj = new PackageHistory($db);
  1337. foreach ($packageuser as $key => $value) {
  1338. $groupuser_id = $this->getGroupuserIdByUserId($value);
  1339. $printbutton = $key . '_' . $value;
  1340. $html = $this->createHTML($printbutton);
  1341. $pdf = new SettlementsPDFPrint($html);
  1342. $fullPath = $pdf->generateSettlementsPDF();
  1343. $package_entity = $this->getEntityOfPackage($key);
  1344. $packageHistoryObj->package_manager_user = $user->id;
  1345. $packageHistoryObj->package_id = $key;
  1346. $packageHistoryObj->user_id = $value;
  1347. $packageHistoryObj->status = 0;
  1348. $packageHistoryObj->package_entity = $package_entity;
  1349. $packageHistoryObj->fk_group_id = $id;
  1350. $packageHistoryObj->fk_groupuser_id = $groupuser_id;
  1351. $packageHistoryObj->delivery_pdf = $fullPath;
  1352. //print_r($packageHistoryObj);exit;
  1353. $result = $packageHistoryObj->create($user);
  1354. if ($result < 0) {
  1355. return -1;
  1356. }
  1357. //sleep(1);
  1358. }
  1359. return 0;
  1360. }
  1361. function saveDailyClosing($jsonArray, $user_id, $package_id, $fk_group_id)
  1362. {
  1363. global $db;
  1364. global $user;
  1365. global $langs;
  1366. $packageHistoryObj = new PackageHistory($db);
  1367. $fullPath = '';
  1368. $package_entity = $this->getEntityOfPackage($package_id);
  1369. $packageHistoryObj->package_manager_user = $user->id;
  1370. $packageHistoryObj->package_id = $package_id;
  1371. $packageHistoryObj->user_id = $user_id;
  1372. $packageHistoryObj->status = 1;
  1373. $packageHistoryObj->package_entity = $package_entity;
  1374. $packageHistoryObj->fk_group_id = $fk_group_id;
  1375. $packageHistoryObj->income_pdf = $fullPath;
  1376. $packageHistoryObj->note_public = $jsonArray;
  1377. $result = $packageHistoryObj->create($user);
  1378. if ($result < 0) {
  1379. return -1;
  1380. }
  1381. return $result;
  1382. }
  1383. public function getEntityOfPackage($package_id)
  1384. {
  1385. global $db;
  1386. $packageObj = new Package($db);
  1387. $result = $packageObj->fetch($package_id);
  1388. if ($result <= 0) {
  1389. dol_syslog("No Entity found. (settlements->helper->getEntityOfPackage())", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  1390. setEventMessage('No Entity found. (settlements->helper->getEntityOfPackage())', 'errors');
  1391. }
  1392. return $packageObj->fk_entity;
  1393. }
  1394. function checkPackageUserAssignement($id)
  1395. {
  1396. $array = [];
  1397. if (isset($id)) {
  1398. global $db;
  1399. $packageHistoryObj = new PackageHistory($db);
  1400. $now = dol_now();
  1401. $from = date('Y-m-d H:i:s', strtotime("-2 day", strtotime(date('Y-m-d', $now))));
  1402. $to = date('Y-m-d H:i:s', $now);
  1403. $result = $packageHistoryObj->fetchAll('DESC', 'rowid', 0, 0, ["customsql" => "fk_group_id = {$id} AND date_creation BETWEEN '{$from}' AND '{$to}'"]);
  1404. if($result > 0){
  1405. foreach ($result as $key => $value) {
  1406. $array[][$value->package_id] = $value->user_id;
  1407. }
  1408. }
  1409. }
  1410. return $array;
  1411. }
  1412. function getAssignementsOfThisPackage($id, $package_id)
  1413. {
  1414. $dataArray = [];
  1415. global $db;
  1416. $packageHistoryObj = new PackageHistory($db);
  1417. $now = dol_now();
  1418. $from = date('Y-m-d H:i:s', strtotime("-2 day", strtotime(date('Y-m-d', $now))));
  1419. $to = date('Y-m-d H:i:s', $now);
  1420. $sql = "SELECT rowid, package_id, fk_group_id, user_id, status FROM " . MAIN_DB_PREFIX . $packageHistoryObj->table_element . " WHERE fk_group_id = {$id} AND package_id = {$package_id} AND date_creation BETWEEN '{$from}' AND '{$to}'";
  1421. //print $sql . '<br>';
  1422. $result = $db->query($sql);
  1423. if (pg_num_rows($result) > 0) {
  1424. return pg_fetch_all($result);
  1425. }
  1426. return $dataArray;
  1427. }
  1428. function checkCLoasedPackageUserAssignement($id)
  1429. {
  1430. $array = [];
  1431. global $db;
  1432. $packageHistoryObj = new PackageHistory($db);
  1433. $now = date("Y-m-d", dol_now());
  1434. $from = $now . ' 00:00:00';
  1435. $to = $now . ' 23:59:59';
  1436. $result = $packageHistoryObj->fetchAll('DESC', 'rowid', 0, 0, ["customsql" => "fk_group_id = {$id} AND status = 1 AND date_creation BETWEEN '{$from}' AND '{$to}'"]);
  1437. foreach ($result as $key => $value) {
  1438. $array[$value->package_id] = $value->user_id;
  1439. }
  1440. return $array;
  1441. }
  1442. function getDailyClosingId($user_id)
  1443. {
  1444. global $db;
  1445. $now = dol_now();
  1446. $from = date('Y-m-d ', strtotime("-3 day", strtotime(date('Y-m-d', $now))));
  1447. //$from = date('Y-m-d', $now) . ' 00:00:00';
  1448. $to = date('Y-m-d H:i:s', $now);
  1449. $sql = "SELECT ph.rowid FROM " . MAIN_DB_PREFIX . "rollerstorage_packagehistory as ph
  1450. WHERE ph.user_id = {$user_id} AND ph.status = 0
  1451. --AND ph.date_creation BETWEEN '{$from} 00:00:00' AND '{$to}'
  1452. ORDER BY ph.rowid DESC LIMIT 1";
  1453. //print $sql;
  1454. $data = $this->db->query($sql);
  1455. $dataArray = pg_fetch_object($data);
  1456. return $dataArray->rowid;
  1457. }
  1458. function get1stBlockData($user_id)
  1459. {
  1460. global $db;
  1461. $now = dol_now();
  1462. $from = date('Y-m-d ', strtotime("-2 day", strtotime(date('Y-m-d', $now))));
  1463. //$from = date('Y-m-d', $now) . ' 00:00:00';
  1464. $to = date('Y-m-d H:i:s', $now);
  1465. $sql = "SELECT pack.label as packetlabel, gt.label as grouptool, ph.fk_group_id, ph.user_id, ph.package_id, ph.rowid/*, gu.fk_settlements_group, gr.ref as usergroup*/ FROM " . MAIN_DB_PREFIX . "rollerstorage_packagehistory as ph
  1466. INNER JOIN " . MAIN_DB_PREFIX . "settlements_package as pack ON pack.rowid=ph.package_id
  1467. INNER JOIN " . MAIN_DB_PREFIX . "settlements_grouptools as gt ON gt.rowid = ph.fk_group_id
  1468. --INNER JOIN " . MAIN_DB_PREFIX . "settlements_groupusers as gu ON gu.fk_user = ph.user_id
  1469. --INNER JOIN " . MAIN_DB_PREFIX . "settlements_group as gr ON gr.rowid=gu.fk_settlements_group
  1470. WHERE ph.user_id = {$user_id} AND ph.status = 0
  1471. AND ph.date_creation BETWEEN '{$from} 00:00:00' AND '{$to}'
  1472. ORDER BY ph.rowid DESC LIMIT 1";
  1473. //print $sql;
  1474. $data = $this->db->query($sql);
  1475. $dataArray = pg_fetch_object($data);
  1476. return $dataArray;
  1477. }
  1478. function get2ndBlockData($package_id)
  1479. {
  1480. $sql = "SELECT pt.package_id, pt.device_id, inv.ref, inv.title, inve.device_type FROM " . MAIN_DB_PREFIX . "settlements_packagetool AS pt
  1481. INNER JOIN " . MAIN_DB_PREFIX . "inventory as inv ON inv.rowid=pt.device_id
  1482. INNER JOIN " . MAIN_DB_PREFIX . "inventory_extrafields as inve ON inve.fk_object = inv.rowid
  1483. WHERE pt.package_id = {$package_id}
  1484. ORDER BY inv.ref ASC ";
  1485. //print $sql;
  1486. $data = $this->db->query($sql);
  1487. $dataArray = pg_fetch_all($data);
  1488. return $dataArray;
  1489. }
  1490. function get3rdBlockData($packageHistoryRecordObj, $user_id)
  1491. {
  1492. $commmissionhandler = new CommissionHandler();
  1493. $now = dol_now();
  1494. $from = date("Y-m-d H:i:s", $packageHistoryRecordObj->date_creation);
  1495. $to = date("Y-m-d H:i:s", $now);
  1496. $allComissionInvoicesOfUserInTheGroupFromUserInvoice = '';
  1497. $commissionHUFCash = $commmissionhandler->getCashCommisonByUserId($user_id, 'HUF', $from, $to, $allComissionInvoicesOfUserInTheGroupFromUserInvoice, $packageHistoryRecordObj->package_entity, 'LIQ');
  1498. $commissionEURCash = $commmissionhandler->getCashCommisonByUserId($user_id, 'EUR', $from, $to, $allComissionInvoicesOfUserInTheGroupFromUserInvoice, $packageHistoryRecordObj->package_entity, 'LIQ');
  1499. $commissionHUFCard = $commmissionhandler->getCashCommisonByUserId($user_id, 'HUF', $from, $to, $allComissionInvoicesOfUserInTheGroupFromUserInvoice, $packageHistoryRecordObj->package_entity, 'CB');
  1500. $commissionEURCard = $commmissionhandler->getCashCommisonByUserId($user_id, 'EUR', $from, $to, $allComissionInvoicesOfUserInTheGroupFromUserInvoice, $packageHistoryRecordObj->package_entity, 'CB');
  1501. $array = $this->GiveMeAllCommissionsArray($commissionHUFCash, $commissionEURCash, $commissionHUFCard, $commissionEURCard);
  1502. return $array;
  1503. }
  1504. function get3rdBlockDataHistory($entity, $user_id, $id = null)
  1505. {
  1506. $commmissionhandler = new CommissionHandler();
  1507. $allComissionInvoicesOfUserInTheGroupFromUserInvoice = '';
  1508. $commissionHUFCash = $commmissionhandler->getCashCommisonByUserIdHistory($user_id, 'HUF', $allComissionInvoicesOfUserInTheGroupFromUserInvoice, $id, $entity, 'LIQ');
  1509. $commissionEURCash = $commmissionhandler->getCashCommisonByUserIdHistory($user_id, 'EUR', $allComissionInvoicesOfUserInTheGroupFromUserInvoice, $id, $entity, 'LIQ');
  1510. $commissionHUFCard = $commmissionhandler->getCashCommisonByUserIdHistory($user_id, 'HUF', $allComissionInvoicesOfUserInTheGroupFromUserInvoice, $id, $entity, 'CB');
  1511. $commissionEURCard = $commmissionhandler->getCashCommisonByUserIdHistory($user_id, 'EUR', $allComissionInvoicesOfUserInTheGroupFromUserInvoice, $id, $entity, 'CB');
  1512. $array = $this->GiveMeAllCommissionsArray($commissionHUFCash, $commissionEURCash, $commissionHUFCard, $commissionEURCard);
  1513. return $array;
  1514. }
  1515. function GiveMeAllCommissionsArray($commissionHUFCash, $commissionEURCash, $commissionHUFCard, $commissionEURCard)
  1516. {
  1517. $array['HUFcash'] = $commissionHUFCash;
  1518. $array['EURcash'] = $commissionEURCash;
  1519. $array['HUFcard'] = $commissionHUFCard;
  1520. $array['EURcard'] = $commissionEURCard;
  1521. return $array;
  1522. }
  1523. function getAllFactures($packageHistoryRecordObj, $user_id)
  1524. {
  1525. $array = [];
  1526. $commissionHandler = new CommissionHandler();
  1527. $from = $commissionHandler->calculateFromDate($packageHistoryRecordObj->id);
  1528. $to = $commissionHandler->calculateToDate($user_id, $from);
  1529. $sql = "SELECT f.rowid, f.ref, f.date_closing, f.multicurrency_code, f.multicurrency_total_ttc, fe.marked_for_storno, p.libelle, fe.commission_deduction FROM " . MAIN_DB_PREFIX . "facture as f
  1530. INNER JOIN " . MAIN_DB_PREFIX . "facture_extrafields as fe ON fe.fk_object = f.rowid
  1531. INNER JOIN " . MAIN_DB_PREFIX . "c_paiement as p ON p.id = f.fk_mode_reglement
  1532. WHERE f.fk_user_closing = {$user_id} AND f.entity = {$packageHistoryRecordObj->package_entity} AND f.date_closing BETWEEN '{$from}' AND '{$to}' AND f.fk_statut = 2
  1533. ORDER BY f.ref DESC";
  1534. //print $sql;
  1535. $data = $this->db->query($sql);
  1536. if (pg_num_rows($data) > 0) {
  1537. while ($row = pg_fetch_assoc($data)) {
  1538. $array[] = $row;
  1539. }
  1540. }
  1541. return $array;
  1542. }
  1543. function getAddititonalDevices($rowid)
  1544. {
  1545. global $db;
  1546. $dataArray = [];
  1547. $sql = "SELECT bp_card, dnc_ticket, rr_ticket FROM " . MAIN_DB_PREFIX . "settlements_package_additionals WHERE fk_package_history_id = {$rowid}";
  1548. $data = $this->db->query($sql);
  1549. if ($data) {
  1550. $dataArray = pg_fetch_assoc($data);
  1551. }
  1552. return $dataArray;
  1553. }
  1554. function getAddititonalChangesDevices($rowid)
  1555. {
  1556. global $db;
  1557. $dataArray = [];
  1558. $sql = "SELECT change_huf, change_eur FROM " . MAIN_DB_PREFIX . "settlements_package_additionals WHERE fk_package_history_id = {$rowid}";
  1559. $data = $this->db->query($sql);
  1560. if ($data) {
  1561. $dataArray = pg_fetch_assoc($data);
  1562. }
  1563. return $dataArray;
  1564. }
  1565. function getPDFName($package_id, $user_id)
  1566. {
  1567. global $db;
  1568. if (isset($user_id)) {
  1569. $packageHistoryObj = new PackageHistory($db);
  1570. $now = dol_now();
  1571. $from = date('Y-m-d', $now) . ' 00:00:00';
  1572. $to = date('Y-m-d H:i:s', $now);
  1573. $result = $packageHistoryObj->fetchAll('DESC', 'date_creation', 1, 0, ['customsql' => "package_id = {$package_id} AND user_id = {$user_id} AND date_creation BETWEEN '$from' AND '$to' AND status = 0"]);
  1574. foreach ($result as $doc) {
  1575. return basename($doc->delivery_pdf);
  1576. }
  1577. }
  1578. }
  1579. function getPDFName2($user_id, $package_id, $group_id)
  1580. {
  1581. //print $group_id.'<br>'; print $package_id.'<br>'; print $user_id.'<br>';
  1582. global $db;
  1583. if (isset($user_id)) {
  1584. $packageHistoryObj = new PackageHistory($db);
  1585. $now = dol_now();
  1586. $from = date('Y-m-d', $now) . ' 00:00:00';
  1587. $to = date('Y-m-d H:i:s', $now);
  1588. $result = $packageHistoryObj->fetchAll('DESC', 'rowid', 1, 0, ["customsql" => "fk_group_id = {$group_id} AND package_id = {$package_id} AND user_id = {$user_id} AND status = 0 AND date_creation BETWEEN '{$from}' AND '{$to}'"]);
  1589. foreach ($result as $doc) {
  1590. return basename($doc->delivery_pdf);
  1591. }
  1592. }
  1593. }
  1594. function checkStatus($package_id, $user_id)
  1595. {
  1596. global $db;
  1597. $packageHistoryObj = new PackageHistory($db);
  1598. $now = dol_now();
  1599. $from = date('Y-m-d', $now) . ' 00:00:00';
  1600. $to = date('Y-m-d H:i:s', $now);
  1601. $result = $packageHistoryObj->fetchAll('DESC', 'date_creation', 1, 0, ['customsql' => "package_id = {$package_id} AND user_id = {$user_id}"]);
  1602. foreach ($result as $doc) {
  1603. return $doc->status;
  1604. }
  1605. //return true;
  1606. }
  1607. function checkStatusToUsergroups($user, $id)
  1608. {
  1609. global $db;
  1610. /* kikeresem a llx_settlements_groupusers táblából a date_creation értékét
  1611. Ha van ilyen rekord (jelenleg benne van a csoportban), akkor ezt a dátumot használom FROM-nak
  1612. A FROM és a jelenlegi idő között, group_id, user_id segítségével megnézem a rollerstorage_packagehistory táblában van-e nyitott státuszú rekord
  1613. */
  1614. $now = dol_now();
  1615. $from = date("Y-m-d H:i:s", $now);
  1616. $sqlGroupUser = "SELECT date_creation FROM " . MAIN_DB_PREFIX . "settlements_groupusers WHERE fk_Settlements_group = {$id} AND fk_user = {$user['fk_user']}";
  1617. $data = $db->query($sqlGroupUser);
  1618. if (pg_num_rows($data) > 0) {
  1619. $dataArray = pg_fetch_assoc($data);
  1620. $from = $dataArray['date_creation'];
  1621. }
  1622. $to = date("Y-m-d H:i:s", $now);
  1623. // kikeresem az eszközcsoport számát, a usercsoport alapján amiben a user van (" . MAIN_DB_PREFIX . "settlements_usergrouptoolgroup)
  1624. $sql = "SELECT rowid, status, fk_group_id FROM " . MAIN_DB_PREFIX . "rollerstorage_packagehistory
  1625. WHERE user_id = {$user['fk_user']} AND fk_group_id = (SELECT fk_group_tools_id FROM " . MAIN_DB_PREFIX . "settlements_usergrouptoolgroup WHERE fk_groupid = {$id})
  1626. AND date_creation BETWEEN '{$from}' AND '{$to}'";
  1627. //print $sql;
  1628. $data = $db->query($sql);
  1629. $dataArray = pg_fetch_assoc($data);
  1630. if (isset($dataArray['status'])) {
  1631. return $dataArray;
  1632. }
  1633. return [];
  1634. }
  1635. function getPDFNameIncome($package_id, $user_id)
  1636. {
  1637. global $db;
  1638. $packageHistoryObj = new PackageHistory($db);
  1639. $now = dol_now();
  1640. $from = date('Y-m-d', $now) . ' 00:00:00';
  1641. $to = date('Y-m-d H:i:s', $now);
  1642. $result = $packageHistoryObj->fetchAll('DESC', 'date_creation', 1, 0, ['customsql' => "package_id = {$package_id} AND user_id = {$user_id} AND date_creation BETWEEN '$from' AND '$to'"]);
  1643. foreach ($result as $doc) {
  1644. return basename($doc->income_pdf);
  1645. }
  1646. }
  1647. public function searchAndFetchDailyClosingRow($Block1stData, $user_id, $status)
  1648. {
  1649. global $db;
  1650. $PackageHistory = new PackageHistory($db);
  1651. /*$now = dol_now();
  1652. $from = date('Y-m-d', strtotime("-3 day", strtotime(date('Y-m-d', $now))));
  1653. $checkFrom = $from . ' 00:00:00';
  1654. $checkTo = date('Y-m-d H:i:s', $now);*/
  1655. $checkHistory = $PackageHistory->fetchAll('DESC', 'rowid', 1, 0, [
  1656. "customsql" => "
  1657. package_id={$Block1stData->package_id}
  1658. AND fk_group_id = {$Block1stData->fk_group_id}
  1659. AND user_id = {$user_id}
  1660. AND status = {$status}"
  1661. ]);
  1662. //AND date_creation BETWEEN '$checkFrom' AND '$checkTo'"
  1663. if (!empty($checkHistory) && $checkHistory > -1) {
  1664. foreach ($checkHistory as $record) {
  1665. $theRowid = $record->id;
  1666. }
  1667. $PackageHistory->fetch($theRowid);
  1668. return $PackageHistory;
  1669. }
  1670. return -1;
  1671. }
  1672. public function checkForm($deviceArray, $amountArray)
  1673. {
  1674. if (!empty($deviceArray)) {
  1675. foreach ($deviceArray as $dkey => $dvalue) {
  1676. if ($dvalue == 'x') {
  1677. if ($amountArray[$dkey . '_amount'] == '') {
  1678. return true;
  1679. }
  1680. }
  1681. }
  1682. } else {
  1683. return true;
  1684. }
  1685. }
  1686. public function updatePackageHistory($packageHistoryObj, $BLock3rdData)
  1687. {
  1688. global $db, $user;
  1689. $error = $this->commonUpdatePackageHistory($packageHistoryObj, $BLock3rdData);
  1690. if ($error) {
  1691. $db->rollback();
  1692. return -1;
  1693. }
  1694. $db->commit();
  1695. return 1;
  1696. }
  1697. public function updatePackageHistoryFromHistory($id, $BLock3rdData)
  1698. {
  1699. global $db, $user;
  1700. $packageHistoryObj = new PackageHistory($db);
  1701. $packageHistoryObj->fetch($id);
  1702. $error = $this->commonUpdatePackageHistory($packageHistoryObj, $BLock3rdData);
  1703. if ($error) {
  1704. $db->rollback();
  1705. return -1;
  1706. }
  1707. $db->commit();
  1708. return 1;
  1709. }
  1710. private function commonUpdatePackageHistory($packageHistoryObj, $BLock3rdData)
  1711. {
  1712. global $db, $user;
  1713. $error = 0;
  1714. $dailyClosing = new DailyClosing();
  1715. $withholdingArray = $this->createWitholdingsArray();
  1716. $withholdingRecords = $dailyClosing->getWithholdingRecords($withholdingArray);
  1717. $packageName = $this->getPackageLabelById($packageHistoryObj->package_id); //package name
  1718. $groupName = $this->getGroupLabelById($packageHistoryObj->fk_group_id); // grouptool name
  1719. $usergroupName = $this->getUserGroupRefById($packageHistoryObj->fk_groupuser_id); // usergroup name
  1720. # 1stBlock
  1721. $block1stArray = ["package_name" => $packageName, "grouptool_name" => $groupName, "groupuser_name" => $usergroupName]; // groups
  1722. # 2ndBlock
  1723. $devicesArray = $this->getDevicesById($db, $packageHistoryObj->package_id);
  1724. $block2ndArray = $dailyClosing->getDevicesList($devicesArray, $withholdingRecords); // devices list
  1725. $additionals =
  1726. [
  1727. 'bp_card' => ["pieces" => $this->getDataFromPackageAdditionals($packageHistoryObj->id, 'bp_card'), "withholding" => $withholdingRecords['bp_card']],
  1728. 'dnc_ticket' => ["pieces" => $this->getDataFromPackageAdditionals($packageHistoryObj->id, 'dnc_ticket'), "withholding" => $withholdingRecords['dnc_ticket']],
  1729. 'rr_ticket' => ["pieces" => $this->getDataFromPackageAdditionals($packageHistoryObj->id, 'rr_ticket'), "withholding" => $withholdingRecords['rr_ticket']]
  1730. ];
  1731. # 3rdBlock
  1732. $changes = $this->getChanges();
  1733. $block3rdArray = $dailyClosing->getDailyIncomes($changes); //Daily incomes
  1734. # 4thBlock
  1735. $block4thArray = $BLock3rdData; //total incomes
  1736. if (isset($withholdingRecords['daily_HUFcash'])) {
  1737. $block4thArray['WHHUFcash'] = $withholdingRecords['daily_HUFcash'];
  1738. }
  1739. if (isset($withholdingRecords['daily_EURcash'])) {
  1740. $block4thArray['WHEURcash'] = $withholdingRecords['daily_EURcash'];
  1741. }
  1742. $fullBlockForJSON = ["block1" => $block1stArray, "block2" => $block2ndArray, "additionals" => $additionals, "block3" => $block3rdArray, "block4" => $block4thArray];
  1743. $savedDataJSON = json_encode($fullBlockForJSON);
  1744. $fullPath = $this->getFullPath($packageHistoryObj, $BLock3rdData, $withholdingArray, $additionals);
  1745. $jsonArray = $dailyClosing->getJSONArray($_REQUEST['withholding']);
  1746. $db->begin();
  1747. $packageHistoryObj->note_public = json_encode($jsonArray);
  1748. $packageHistoryObj->status = 1;
  1749. $packageHistoryObj->income_pdf = $fullPath;
  1750. $packageHistoryObj->date_closing = time();
  1751. $packageHistoryObj->dailyclosing_json = $savedDataJSON;
  1752. $result = $packageHistoryObj->update($user);
  1753. if (!$result) {
  1754. $error++;
  1755. }
  1756. # WithHolding
  1757. foreach ($withholdingArray as $key => $value) {
  1758. $now = dol_now();
  1759. $deviceName = $this->getDeviceNameFromInventoryById($this->getDeviceIdFromString($key));
  1760. $withholdingObj = new UserInvoice($db);
  1761. $withholdingObj->ref = $this->generateRefForWithold();
  1762. $withholdingObj->label = 'Visszatartás / Withold ' . date("Y-m-d", $now);
  1763. $withholdingObj->description = $this->createDescriptionToWithold($key, $value, $now, $packageName, $groupName, $deviceName);
  1764. $withholdingObj->user_id = $packageHistoryObj->user_id;
  1765. $withholdingObj->payment_type = 1;
  1766. $withholdingObj->amount = $value;
  1767. $saved = $withholdingObj->create($user);
  1768. if (!$saved) {
  1769. $error++;
  1770. }
  1771. }
  1772. # Kick off from UsersGroup
  1773. $groupUsersObj = new GroupUsers($db);
  1774. $sql = "SELECT rowid, date_creation FROM " . MAIN_DB_PREFIX . $groupUsersObj->table_element . " WHERE fk_user = {$packageHistoryObj->user_id}";
  1775. $data = $db->query($sql);
  1776. $dataArray = pg_fetch_assoc($data);
  1777. $selectedGroupId = $dataArray['rowid'];
  1778. $selectedGroupDateCreation = $dataArray['date_creation'];
  1779. if (isset($selectedGroupId)) {
  1780. $resultKickOff = $groupUsersObj->deleteLine($user, $selectedGroupId);
  1781. if (!$resultKickOff) {
  1782. $error++;
  1783. }
  1784. }
  1785. # Set Usernaplo
  1786. if (isset($selectedGroupId)) {
  1787. $userLogedOut = $this->checkUsernaploLogout($packageHistoryObj->user_id, $packageHistoryObj->fk_groupuser_id, $selectedGroupDateCreation);
  1788. if (!$userLogedOut) {
  1789. $userNaploObj = new UserNaplo($db);
  1790. $userNaploObj->user_id = $packageHistoryObj->user_id;
  1791. $userNaploObj->group_user_id = $packageHistoryObj->fk_groupuser_id;
  1792. $userNaploObj->status = 0;
  1793. $resultSetUserNaplo = $userNaploObj->create($user);
  1794. if (!$resultSetUserNaplo) {
  1795. $error++;
  1796. }
  1797. }
  1798. }
  1799. return $error;
  1800. }
  1801. public function checkUsernaploLogout($user_id, $group_id, $date_creation)
  1802. {
  1803. global $db;
  1804. $sql = "SELECT date_creation, status FROM llx_settlements_usernaplo
  1805. WHERE group_user_id = {$group_id}
  1806. AND user_id = {$user_id}
  1807. AND date_creation > '{$date_creation}'
  1808. AND status = 0
  1809. ORDER BY date_creation DESC LIMIT 1";
  1810. //print $sql;exit;
  1811. $data = $db->query($sql);
  1812. while ($row = pg_fetch_assoc($data)) {
  1813. return true;
  1814. }
  1815. return false;
  1816. }
  1817. public function getDeviceNameFromInventoryById($id)
  1818. {
  1819. global $db;
  1820. $inventoryObj = new Inventory($db);
  1821. $result = $inventoryObj->fetch($id);
  1822. return $inventoryObj->ref;
  1823. }
  1824. private function getDeviceIdFromString($key)
  1825. {
  1826. return substr($key, 1);
  1827. }
  1828. public function getPackageLabelById($id)
  1829. {
  1830. global $db;
  1831. $packageObj = new Package($db);
  1832. $packageObj->fetch($id);
  1833. return $packageObj->label;
  1834. }
  1835. public function getGroupLabelById($id)
  1836. {
  1837. global $db;
  1838. $groupToolsObj = new Grouptools($db);
  1839. $groupToolsObj->fetch($id);
  1840. return $groupToolsObj->label;
  1841. }
  1842. public function getUserGroupRefById($id)
  1843. {
  1844. global $db;
  1845. $groupObj = new Group($db);
  1846. $groupObj->fetch($id);
  1847. return $groupObj->ref;
  1848. }
  1849. private function createDescriptionToWithold($key, $value, $now, $packageName, $groupName, $deviceName)
  1850. {
  1851. $string = 'Date: ' . date("Y-m-d H:i:s", $now);
  1852. $string .= 'Összeg / Amount: ' . $value;
  1853. $string .= 'Csomag / Package: ' . $packageName;
  1854. $string .= 'Csoport / Group: ' . $groupName;
  1855. $string .= 'Eszköz / Device name: ' . $deviceName;
  1856. return $string;
  1857. }
  1858. function generateRefForWithold()
  1859. {
  1860. return 'withhold_' . dol_now() . '_' . rand(1000000, 9999999);
  1861. }
  1862. private function createWitholdingsArray()
  1863. {
  1864. $withholdinArray = [];
  1865. foreach ($_REQUEST['withholding']['withholdingAmount'] as $key => $value) {
  1866. if ($value != '') {
  1867. $newkey = str_replace('_amount', '', $key);
  1868. $withholdinArray[$newkey] = $value;
  1869. }
  1870. }
  1871. return $withholdinArray;
  1872. }
  1873. private function getFullPath($PackageHistoryOpen, $BLock3rdData, $withholdingArray, $additionals)
  1874. {
  1875. $data = $PackageHistoryOpen->package_id . '_' . $PackageHistoryOpen->user_id;
  1876. $html = $this->createHTMLIncome($data, $BLock3rdData, $withholdingArray, $additionals);
  1877. $pdf = new SettlementsPDFPrint($html);
  1878. return $pdf->generateSettlementsPDF();
  1879. }
  1880. public function updateUserEntityInUser($userId, $groupEntity)
  1881. {
  1882. global $user, $db;
  1883. $userId = intval($userId);
  1884. $sql = "UPDATE " . MAIN_DB_PREFIX . "user SET entity = {$groupEntity} WHERE rowid = {$userId};";
  1885. $result = $db->query($sql);
  1886. return $result;
  1887. }
  1888. public function getPackageName($packages, $id)
  1889. {
  1890. foreach ($packages as $package) {
  1891. if ($package['rowid'] == $id) {
  1892. return $package['ref'];
  1893. }
  1894. }
  1895. }
  1896. public function isClosed($package_id)
  1897. {
  1898. $packageHistoryObj = new PackageHistory($this->db);
  1899. $result = $packageHistoryObj->fetchAll('DESC', 'rowid', 1, 0, ["customsql" => "package_id = {$package_id}"]);
  1900. if (!empty($result)) {
  1901. foreach ($result as $record) {
  1902. //print $record->status;
  1903. return $record->status;
  1904. }
  1905. } else {
  1906. return true;
  1907. }
  1908. }
  1909. public function assignedUserFromPackageHistory($package_id)
  1910. {
  1911. global $db, $langs;
  1912. $sql = "SELECT u.firstname, u.lastname, u.login FROM " . MAIN_DB_PREFIX . "rollerstorage_packagehistory ph
  1913. INNER JOIN " . MAIN_DB_PREFIX . "user as u ON u.rowid = ph.user_id
  1914. WHERE ph.package_id = {$package_id}
  1915. ORDER BY ph.rowid DESC LIMIT 1";
  1916. $data = $db->query($sql);
  1917. $dataArray = pg_fetch_assoc($data);
  1918. $name = $dataArray['lastname'] . ' ' . $dataArray['firstname'] . ' (' . $dataArray['login'] . ')';
  1919. $name = '<tr style="background-color:rgb(163,0,51); color: white; height: 30px;"><td colspan="3" style="text-align:center;">' . $name . '</td></tr>';
  1920. $noUser = '<tr style="color: red; height: 30px;"><td colspan="3" style="text-align:center;">' . $langs->trans('NoAssignedUser') . '</td></tr>';
  1921. return $dataArray['login'] != '' ? $name : $noUser;
  1922. }
  1923. public function getChanges()
  1924. {
  1925. global $db;
  1926. $sql = "SELECT ref, title FROM llx_inventory AS i INNER JOIN llx_inventory_extrafields as ie ON ie.fk_object = i.rowid WHERE ie.device_type::integer IN(3,4)";
  1927. $data = $db->query($sql);
  1928. $dataArray = pg_fetch_all($data);
  1929. return $dataArray;
  1930. }
  1931. public function getUsersArrayOfSelector($eztHasznalomAzosszerendelesekre, $package)
  1932. {
  1933. $usersArrayOfSelector = [];
  1934. foreach ($eztHasznalomAzosszerendelesekre as $package1 => $userOfPackage) {
  1935. if ($userOfPackage > -1 && $package1 != $package['fk_package']) {
  1936. $usersArrayOfSelector[] = $userOfPackage;
  1937. }
  1938. }
  1939. return implode(',', $usersArrayOfSelector);
  1940. }
  1941. public function getUserSelector($eztHasznalomAzosszerendelesekre, $package, $guser)
  1942. {
  1943. if ($eztHasznalomAzosszerendelesekre[$package['fk_package']] == $guser['fk_user']) {
  1944. return 'selected';
  1945. } else {
  1946. return '';
  1947. }
  1948. }
  1949. public function isRecordClosed($user_id, $package_id, $group_id)
  1950. {
  1951. global $db;
  1952. $packageHistoryObj = new PackageHistory($db);
  1953. $now = date("Y-m-d", dol_now());
  1954. $from = $now . ' 00:00:00';
  1955. $to = $now . ' 23:59:59';
  1956. $result = $packageHistoryObj->fetchAll('DESC', 'rowid', 1, 0, ["customsql" => "fk_group_id = {$group_id} AND package_id = {$package_id} AND user_id = {$user_id} AND status = 1 AND date_creation BETWEEN '{$from}' AND '{$to}'"]);
  1957. if ($result == -1) {
  1958. return false;
  1959. }
  1960. foreach ($result as $record) {
  1961. return $record->status;
  1962. }
  1963. }
  1964. public function checkEquality($id)
  1965. {
  1966. global $db;
  1967. if (isset($id)) {
  1968. $userCounter = $this->getNumberOfUsers();
  1969. $usersCount = $userCounter[$id][0];
  1970. $assignedPackagesCount = count($this->getPackagesById($id));
  1971. return $usersCount == $assignedPackagesCount;
  1972. }
  1973. return true;
  1974. }
  1975. public function checkSumAndUsers($toselectnewpackage, $id)
  1976. {
  1977. global $db;
  1978. $userCounter = $this->getNumberOfUsers();
  1979. $userCounter[$id][0];
  1980. $sum = count($this->getPackagesById($id)) + count($toselectnewpackage);
  1981. $users = $userCounter[$id][0];
  1982. return $sum > $users;
  1983. }
  1984. public function userSelectorOptions($usersOfThisGroup, $package, $eztHasznalomAzosszerendelesekre, $id)
  1985. {
  1986. $pdfArray = [];
  1987. if (!empty($usersOfThisGroup)) {
  1988. foreach ($usersOfThisGroup as $guser) {
  1989. $pdfArray[$guser['fk_user']] = $this->getPDFName2($guser['fk_user'], $package['fk_package'], $id);
  1990. $selectedUserInSelector = $this->getUserSelector($eztHasznalomAzosszerendelesekre, $package, $guser);
  1991. $nickname = isset($guser['nickname']) ? $guser['nickname'] . ', ' : '';
  1992. $userSelector .= '<option value="' . $guser['fk_user'] . '" ' . $selectedUserInSelector . '>' . $nickname . $guser['firstname'] . ' ' . $guser['lastname'] . '</option>';
  1993. }
  1994. }
  1995. return [$userSelector, $pdfArray];
  1996. }
  1997. public function createPopupBox($package, $DeviceCounter)
  1998. {
  1999. global $db, $langs;
  2000. $numberOfDevices = '';
  2001. $devicesArray = [];
  2002. if (isset($DeviceCounter[$package['fk_package']])) {
  2003. $numberOfDevices = '(' . $DeviceCounter[$package['fk_package']] . ' ' . $langs->trans('device') . ')';
  2004. $devicesArray = $this->getDevicesById($db, $package['fk_package']);
  2005. }
  2006. $popupBox2 = $this->createPopoupBoxForDeviceList($numberOfDevices, $devicesArray);
  2007. if ($popupBox2 == '') {
  2008. $popupBox2 = '<div style="color:red;">' . $langs->trans('emptyPackage') . '</div>';
  2009. }
  2010. return $popupBox2;
  2011. }
  2012. public function getSelectableUsers($fk_group_id)
  2013. {
  2014. global $db;
  2015. $userArray = [];
  2016. $sql = "SELECT t.rowid, t.lastname,t.firstname, t.login FROM " . MAIN_DB_PREFIX . "user as t WHERE
  2017. rowid IN(SELECT gu.fk_user
  2018. FROM " . MAIN_DB_PREFIX . "settlements_usergrouptoolgroup AS ugtg
  2019. INNER JOIN " . MAIN_DB_PREFIX . "settlements_groupusers as gu ON gu.fk_settlements_group = ugtg.fk_groupid
  2020. WHERE fk_group_tools_id = {$fk_group_id} /*AND date_trunc('day', gu.date_creation) = CURRENT_DATE*/ AND gu.fk_user NOT IN(SELECT ph.user_id FROM " . MAIN_DB_PREFIX . "rollerstorage_packagehistory AS ph
  2021. WHERE ph.fk_group_id = {$fk_group_id} AND ph.status in (0) AND date_trunc('day', ph.date_creation) = CURRENT_DATE
  2022. ORDER BY rowid DESC))
  2023. ORDER BY t.lastname ASC, t.firstname ASC";
  2024. //print $sql;
  2025. $data = $db->query($sql);
  2026. $dataArray = pg_fetch_all($data);
  2027. if (is_array($dataArray)) {
  2028. foreach ($dataArray as $row) {
  2029. $userArray[$row['rowid']] = $row['firstname'] . ' ' . $row['lastname'] . ' (' . $row['login'] . ')';
  2030. }
  2031. }
  2032. return $userArray;
  2033. }
  2034. public function getPackageHistoryId($package_id, $fk_group_id, $user_id)
  2035. {
  2036. global $db;
  2037. $packageHistoryObj = new PackageHistory($db);
  2038. $result = $packageHistoryObj->fetchAll('DESC', 'rowid', 1, 0, ["customsql" => "package_id = {$package_id} AND fk_group_id = {$fk_group_id} AND user_id = {$user_id}"]);
  2039. foreach ($result as $row) {
  2040. return $row->id;
  2041. }
  2042. }
  2043. public function getAdditionalTitle($key)
  2044. {
  2045. switch ($key) {
  2046. case 'bp_card':
  2047. return 'Budapest Card';
  2048. break;
  2049. case 'dnc_ticket':
  2050. return 'Dinner & Cruise';
  2051. break;
  2052. case 'rr_ticket':
  2053. return 'RiverRide';
  2054. break;
  2055. case 'change_huf':
  2056. return 'Change HUF';
  2057. break;
  2058. case 'change_eur':
  2059. return 'Change EUR';
  2060. break;
  2061. default:
  2062. # code...
  2063. break;
  2064. }
  2065. }
  2066. private function getDataFromPackageAdditionals($id, $name)
  2067. {
  2068. global $db;
  2069. $packageAdditionalsObj = new Package_additionals($db);
  2070. $result = $packageAdditionalsObj->fetchAll('', '', 0, 0, ["customsql" => "fk_package_history_id = {$id}"]);
  2071. if ($result > 0) {
  2072. foreach ($result as $row) {
  2073. return ($row->$name);
  2074. }
  2075. }
  2076. return '';
  2077. }
  2078. public function checkClose($id)
  2079. {
  2080. global $db;
  2081. $packageHistoryObj = new PackageHistory($db);
  2082. $packageHistoryObj->fetch($id);
  2083. return $packageHistoryObj->status;
  2084. }
  2085. public function getJSON($id, $record)
  2086. {
  2087. global $db;
  2088. $packageHistoryObj = new PackageHistory($db);
  2089. $packageHistoryObj->fetch($id);
  2090. return $packageHistoryObj->$record;
  2091. }
  2092. public function generateDeliveryJSON($object, $bpcard = '', $dandc = '', $riverride = '')
  2093. {
  2094. global $db;
  2095. $dailyClosing = new DailyClosing();
  2096. $withholdingRecords = [];
  2097. $additionals = ["bp_card" => $bpcard, "dnc_ticket" => $dandc, "rr_ticket" => $riverride];
  2098. $packageName = $this->getPackageLabelById($object->package_id); //package name
  2099. $groupName = $this->getGroupLabelById($object->fk_group_id); // grouptool name
  2100. $usergroupName = $this->getUserGroupRefById($object->fk_groupuser_id); // usergroup name
  2101. $block1stArray = ["package_name" => $packageName, "grouptool_name" => $groupName, "groupuser_name" => $usergroupName]; // groups
  2102. # 2ndBlock
  2103. $devicesArray = $this->getDevicesById($db, $object->package_id);
  2104. $block2ndArray = $dailyClosing->getDevicesList($devicesArray, $withholdingRecords); // devices list
  2105. $fullBlockForJSON = ["block1" => $block1stArray, "block2" => $block2ndArray, "additionals" => $additionals, "changes" => $this->getChanges()];
  2106. return $fullBlockForJSON;
  2107. }
  2108. public function packageClosed($id)
  2109. {
  2110. $packageHistoryObj = new PackageHistory($this->db);
  2111. $packageHistoryObj->fetch($id);
  2112. return $packageHistoryObj->status;
  2113. }
  2114. public function checkConfirmation($id)
  2115. {
  2116. global $db;
  2117. $sql = "SELECT * FROM " . MAIN_DB_PREFIX . "settlements_groupusers
  2118. WHERE date_trunc('day', date_creation) = CURRENT_DATE
  2119. AND fk_settlements_group = (SELECT fk_groupid FROM " . MAIN_DB_PREFIX . "settlements_usergrouptoolgroup WHERE fk_group_tools_id = {$id})
  2120. ORDER BY rowid DESC";
  2121. $data = $db->query($sql);
  2122. $dataArray = pg_fetch_all($data);
  2123. if (is_array($dataArray)) {
  2124. return true;
  2125. }
  2126. return false;
  2127. }
  2128. public function groupList($groups, $id)
  2129. {
  2130. global $langs, $db;
  2131. $string = '';
  2132. $string .= '<table style="width:100%;">';
  2133. $stringEmpty = '';
  2134. $stringEmpty .= '<table style="width:100%;">';
  2135. foreach ($groups as $group) {
  2136. $usersOfGroups = $this->getUsersById($db, $group['rowid']);
  2137. if (count($usersOfGroups) > 0) {
  2138. $peopleOrPerson = count($usersOfGroups) > 1 ? $langs->trans('people') : $langs->trans('person');
  2139. $headcount = count($usersOfGroups) > 0 ? count($usersOfGroups) . ' ' . $peopleOrPerson : '&nbsp;';
  2140. $coloredLine = $id == $group['rowid'] ? ' background-color: #b0c4de;' : '';
  2141. $string .= '<tr class="submitFormLink" data-value="' . $group['rowid'] . '" style="height:30px;' . $coloredLine . ' cursor:pointer;"><td colspan="2"><div><span class="fa fa-group pictofixedwidth"></span> ' . $group['ref'] . '</div>
  2142. <p style="margin-left: 20px; margin-top:0px; margin-bottom:5px; font-size:15px;"><div style="float:left; color: grey;">' . $group['label'] . '</div><div style="text-align: right;">' . $headcount . '</div></p></td>';
  2143. } else {
  2144. $peopleOrPerson = count($usersOfGroups) > 1 ? $langs->trans('people') : $langs->trans('person');
  2145. $headcount = count($usersOfGroups) > 0 ? count($usersOfGroups) . ' ' . $peopleOrPerson : '&nbsp;';
  2146. $coloredLine = $id == $group['rowid'] ? ' background-color: #b0c4de;' : '';
  2147. $stringEmpty .= '<tr class="submitFormLink" data-value="' . $group['rowid'] . '" style="height:30px;' . $coloredLine . ' cursor:pointer;"><td colspan="2"><div><span class="fa fa-group pictofixedwidth"></span> ' . $group['ref'] . '</div>
  2148. <p style="margin-left: 20px; margin-top:0px; margin-bottom:5px; font-size:15px;"><div style="float:left; color: grey;">' . $group['label'] . '</div><div style="text-align: right;">' . $headcount . '</div></p></td>';
  2149. }
  2150. }
  2151. $string .= '</table>';
  2152. $string .= '<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>';
  2153. $stringEmpty .= '</table>';
  2154. return $string . $stringEmpty;
  2155. }
  2156. function getFilteredPackages($string, $groupid)
  2157. {
  2158. global $db;
  2159. $allPackages = [];
  2160. $entity_id = $this->getEntityIdFromgoupTools($groupid);
  2161. $sql = "SELECT pa.rowid, pa.ref, pa.label
  2162. FROM " . MAIN_DB_PREFIX . "settlements_package as pa
  2163. WHERE pa.rowid NOT IN (SELECT fk_package FROM " . MAIN_DB_PREFIX . "settlements_grouptoolspackages)";
  2164. $sql .= " AND pa.fk_entity = '{$entity_id}' AND pa.ref LIKE '%{$string}%' ORDER BY pa.ref";
  2165. //print $sql;
  2166. $data = $db->query($sql);
  2167. if (!$data) {
  2168. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  2169. return $allPackages;
  2170. }
  2171. while ($row = pg_fetch_assoc($data)) {
  2172. $allPackages['freePackages'][$row['rowid']] = $row;
  2173. if (isset($row['fk_object'])) {
  2174. $inventoryObj = new Inventory($db);
  2175. $inventoryObj->fetch($row['fk_object']);
  2176. $assigned_device_data = ['rowid' => $inventoryObj->id, 'title' => $inventoryObj->title, 'ref' => $inventoryObj->ref, 'device_type' => $inventoryObj->array_options['options_device_type']];
  2177. $allPackages['freePackages'][$row['rowid']]['assigned_device_data'] = $assigned_device_data;
  2178. }
  2179. }
  2180. $sqlAddedPackages = "SELECT pa.rowid, pa.ref, pa.label, gp.rowid as gprowid, gp.ref as gpref, gp.label as gplabel FROM " . MAIN_DB_PREFIX . "settlements_grouptoolspackages as gpp
  2181. INNER JOIN " . MAIN_DB_PREFIX . "settlements_package as pa ON pa.rowid = gpp.fk_package
  2182. INNER JOIN " . MAIN_DB_PREFIX . "settlements_grouptools as gp ON gp.rowid = gpp.fk_group";
  2183. $data2 = $this->db->query($sqlAddedPackages);
  2184. if (!$data2) {
  2185. dol_syslog("No group found.", LOG_DEBUG | LOG_INFO | LOG_WARNING | LOG_ERR);
  2186. setEventMessage($this->langs->trans('($helper->getAllPackagesFromSelectedEntity()) settlements_grouptoolspackages'), 'errors');
  2187. return $allPackages;
  2188. }
  2189. while ($row = pg_fetch_assoc($data2)) {
  2190. $allPackages['addedPackages'][] = $row;
  2191. }
  2192. return $allPackages;
  2193. }
  2194. public function getGTAndGUArray()
  2195. {
  2196. global $db;
  2197. $sql = "SELECT fk_groupid, fk_group_tools_id FROM " . MAIN_DB_PREFIX . "settlements_usergrouptoolgroup";
  2198. $result = $db->query($sql);
  2199. if (pg_num_rows($result) > 0) {
  2200. while ($row = pg_fetch_assoc($result)) {
  2201. $array[$row['fk_groupid']] = $row['fk_group_tools_id'];
  2202. }
  2203. return $array;
  2204. }
  2205. return [];
  2206. }
  2207. public function freeToolsDiv($allTools)
  2208. {
  2209. $string = '';
  2210. global $langs;
  2211. $string .= '<table style="width:100%;">';
  2212. foreach ($allTools['freeTools'] as $freeTool) {
  2213. $status3 = $freeTool['status'] != 115 ? '<span class="fa fa-exclamation pictofixedwidth" style="color:red;"></span>' : '';
  2214. $url_3 = '/custom/rollerstorage/card.php?id=' . $freeTool['rowid'] . '&inventory_id=' . $freeTool['fk_warehouse'] . '&backtopage=/custom/rollerstorage/rollerstorageinventoryindex.php?inventory_id=' . $freeTool['fk_warehouse'] . '&idmenu=1599&leftmenu=';
  2215. if ($freeTool['device_type'] == 1) {
  2216. $disabled = !isset($freeTool['assigned_device_data']) ? 'disabled' : '';
  2217. $string .= '
  2218. <tr style="height:30px; background-color: lightgrey;">
  2219. <td><span class="fa fa-mobile pictofixedwidth"></span> <a href="' . $url_3 . '">' . $freeTool['ref'] . '</a> - ' . $freeTool['title'] . ' ' . $status3 . '</td>
  2220. <td class="nowrap center"><input id="id_3_' . $freeTool['rowid'] . '" class="flat checkforselectadd" type="checkbox" onclick="submitFormAddTool(event)" name="toselectnewtool[]" value="' . $freeTool['rowid'] . '" ' . $disabled . '></td>
  2221. </tr>';
  2222. $statusAssigned3 = $freeTool['assigned_device_data']['status'] != 115 ? '<span class="fa fa-exclamation pictofixedwidth" style="color:red;"></span>' : '';
  2223. $string .= '<tr style="height:30px; background-color: lightgrey;">';
  2224. if (!isset($freeTool['assigned_device_data'])) {
  2225. $string .= '<td style="color: red;">&nbsp;&nbsp;&nbsp;&nbsp;<span class="fa fa-credit-card pictofixedwidth"></span>' . $langs->trans('NoCardreadder') . '</td>';
  2226. } else {
  2227. $string .= '<td>&nbsp;&nbsp;&nbsp;&nbsp;<span class="fa fa-credit-card pictofixedwidth"></span><a href="' . $url_3 . '"> ' . $freeTool['assigned_device_data']['ref'] . '</a> - ' . $freeTool['assigned_device_data']['title'] . ' ' . $statusAssigned3 . '</td>';
  2228. }
  2229. $string .= '<td class="nowrap center"></td>
  2230. </tr>';
  2231. } elseif ($freeTool['device_type'] == 0 || $freeTool['device_type'] == 3 || $freeTool['device_type'] == 4 || $freeTool['device_type'] == 5) {
  2232. $string .= '
  2233. <tr style="height:30px;">
  2234. <td><span class="fa fa-toolbox pictofixedwidth"></span> <a href="' . $url_3 . '">' . $freeTool['ref'] . '</a> - ' . $freeTool['title'] . ' ' . $status3 . '</td>
  2235. <td class="nowrap center"><input id="id_3_' . $freeTool['rowid'] . '" class="flat checkforselectadd" type="checkbox" onclick="submitFormAddTool(event)" name="toselectnewtool[]" value="' . $freeTool['rowid'] . '"></td>
  2236. </tr>';
  2237. }
  2238. }
  2239. $string .= '</table>';
  2240. return $string;
  2241. }
  2242. public function addedToolsDiv($allTools)
  2243. {
  2244. global $langs;
  2245. $string = '';
  2246. $string .= '<table style="width:100%; color: red;"><tr><td>';
  2247. if ($allTools['addedTools']) {
  2248. foreach ($allTools['addedTools'] as $addedKey => $addedValue) {
  2249. $string .= '<table style="width: 100%; margin-bottom: 20px; border-collapse: separate; border: 2px solid #ccc; border-radius: 10px;"><tr style="height:30px; text-align:center;"><td><span class="fa fa-link pictofixedwidth"></span><a href="/custom/settlements/settlementpackagetoolssettingsindex.php?idmenu=1592&mainmenu=settlements&leftmenu=&id=' . $addedKey . '">' . $allTools['addedPackages'][$addedKey] . '</a><td></tr>';
  2250. foreach ($addedValue as $record) {
  2251. $statusAddedTool = $record['status'] != 115 ? '<span class="fa fa-exclamation pictofixedwidth" style="color:red;"></span>' : '';
  2252. if ($record['device_type'] == 1) {
  2253. $url_added = '/custom/rollerstorage/card.php?id=' . $record['rowid'] . '&inventory_id=' . $record['fk_warehouse'] . '&backtopage=/custom/rollerstorage/rollerstorageinventoryindex.php?inventory_id=' . $record['fk_warehouse'] . '&idmenu=1599&leftmenu=';
  2254. $string .= '
  2255. <tr style="height:30px;">
  2256. <td><span class="fa fa-mobile pictofixedwidth"></span> <a href="' . $url_added . '"> ' . $record['ref'] . '</a> - ' . $record['title'] . '</td>
  2257. </tr>';
  2258. $statusAssigned3 = $record['assigned_device_data']['status'] != 115 ? '<span class="fa fa-exclamation pictofixedwidth" style="color:red;"></span>' : '';
  2259. $url_added = '/custom/rollerstorage/card.php?id=' . $record['assigned_device_data']['rowid'] . '&inventory_id=' . $record['fk_warehouse'] . '&backtopage=/custom/rollerstorage/rollerstorageinventoryindex.php?inventory_id=' . $record['fk_warehouse'] . '&idmenu=1599&leftmenu=';
  2260. $string .= '<tr style="height:30px;">';
  2261. if (!isset($record['assigned_device_data'])) {
  2262. $string .= '<td><span class="fa fa-credit-card pictofixedwidth"></span>' . $langs->trans('NoCardreadder') . '</td>';
  2263. } else {
  2264. $string .= '<td><span class="fa fa-credit-card pictofixedwidth"></span><a href="' . $url_added . '"> ' . $record['assigned_device_data']['ref'] . '</a> - ' . $record['assigned_device_data']['title'] . ' ' . $statusAssigned3 . '</td>';
  2265. }
  2266. $string .= '</tr>';
  2267. } elseif ($record['device_type'] == 0 || $record['device_type'] == 3 || $record['device_type'] == 4 || $record['device_type'] == 5) {
  2268. $url_added = '/custom/rollerstorage/card.php?id=' . $record['rowid'] . '&inventory_id=' . $record['fk_warehouse'] . '&backtopage=/custom/rollerstorage/rollerstorageinventoryindex.php?inventory_id=' . $record['fk_warehouse'] . '&idmenu=1599&leftmenu=';
  2269. $string .= '
  2270. <tr style="height:30px;">
  2271. <td><span class="fa fa-toolbox pictofixedwidth"></span><a href="' . $url_added . '"> ' . $record['ref'] . '</a> - ' . $record['title'] . ' ' . $statusAddedTool . '</td>
  2272. </tr>';
  2273. }
  2274. }
  2275. }
  2276. }
  2277. $string .= '</table></td></tr></table>';
  2278. return $string;
  2279. }
  2280. public function addedPackageDiv($allPackages, $DeviceCounter)
  2281. {
  2282. global $langs, $db;
  2283. $string = '';
  2284. foreach ($allPackages['addedPackages'] as $addedPackage) {
  2285. $numberOfDevices4 = '';
  2286. $devicesArray4 = [];
  2287. if (isset($DeviceCounter[$addedPackage['gprowid']])) {
  2288. $numberOfDevices4 = '(' . $DeviceCounter[$addedPackage['gprowid']] . ' ' . $langs->trans('device') . ')';
  2289. $devicesArray4 = $this->getDevicesById($db, $addedPackage['rowid']);
  2290. }
  2291. $popupBox4Text = $this->createPopoupBoxForDeviceList($numberOfDevices4, $devicesArray4);
  2292. $popupBox4 = $popupBox4Text != '' ? $popupBox4Text : '<font style="color:red;">' . $langs->trans('emptyPackage') . '</font>';
  2293. print '
  2294. <table style="width:100%; border: 1px solid lightgrey; border-radius: 10px; margin-bottom: 20px;">
  2295. <tr>
  2296. <td colspan="2" style="text-align: center; width: 100%;"><a href="settlementtoolssettingsindex.php?idmenu=926&mainmenu=settlements&leftmenu=&id=' . $addedPackage['gprowid'] . '&nopackageuser=1">' . $addedPackage['gplabel'] . '</td>
  2297. </tr>
  2298. <tr style="height:30px;">
  2299. <td style="width:60%;"><span class="fa fa-toolbox pictofixedwidth"></span><a href="/custom/settlements/settlementpackagetoolssettingsindex.php?idmenu=1592&mainmenu=settlements&leftmenu=&id=' . $addedPackage['rowid'] . '"> ' . $addedPackage['ref'] . '</a></td>
  2300. <td style="width:40%;">' . $popupBox4 . '</td>
  2301. </tr>
  2302. </table>';
  2303. }
  2304. }
  2305. }