UserProNetMediaZaliczka.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. <?php
  2. Lib::loadClass('RouteBase');
  3. Lib::loadClass('Typespecial');
  4. Lib::loadClass('TypespecialVariable');
  5. Lib::loadClass('Request');
  6. Lib::loadClass('Response');
  7. Lib::loadClass('ProcesHelper');
  8. Lib::loadClass('Route_UrlAction');
  9. Lib::loadClass('UI');
  10. Lib::loadClass('Core_AclHelper');
  11. // - [ ] zaliczkaListaView:
  12. // - [ ] btn "Dodaj Zaliczkę" $acl->addItem($item); // @require only 'worker' => [ 'id', 'login', 'name' ]
  13. // - [ ] lista wszystkich zaliczek danego usera + btn "load more ..."
  14. // - [x] Rozlicz / Podgląd - tylko najnowsza Zaliczka
  15. // - [ ] Rozlicz / Podgląd - edytowć może tylko właściciel / grupa / user connected by REF ?
  16. class Route_UrlAction_UserProNetMediaZaliczka extends RouteBase {// TODO: UrlActionBase @see Route_UrlAction
  17. public function handleAuth() {
  18. if (!User::logged()) {
  19. User::authByRequest();
  20. }
  21. }
  22. public function defaultAction() {
  23. UI::gora();
  24. UI::emptyTag('link', ['href'=>'static/zaliczka/main.css', 'rel'=>'stylesheet']);
  25. if (1 != V::get('_print', '', $_GET)) UI::menu();
  26. try {
  27. $data = array();
  28. $data['idUser'] = V::get('idUser', User::getID(), $_REQUEST, 'int');
  29. $data['idZaliczka'] = V::get('idZaliczka', 0, $_REQUEST, 'int');// TODO: idZaliczka is always MAX(z.ID);
  30. if (!$data['idZaliczka']) {
  31. $this->zaliczkaListaView($data);
  32. } else {
  33. echo UI::h('div', ['class' => "container", 'style' => 'margin-top:12px; margin-bottom:6px; padding-bottom:6px; border-bottom:1px solid #ddd'], [
  34. UI::h('a', [
  35. 'href' => "index.php?_route=UrlAction_UserProNetMediaZaliczka&idUser={$data['idUser']}",
  36. 'class' => "btn btn-link pull-left"
  37. ], "<i class=\"glyphicon glyphicon-arrow-left\"></i> wróć"),
  38. UI::h('a', [
  39. 'href' => "index.php?_route=ViewTableAjax&typeName=p5_default_db:IN7_DZIENNIK_KORESP#CREATE",
  40. 'class' => "btn btn-sm btn-default pull-right"
  41. ], "<span class=\"glyphicon glyphicon-plus\"></span> Dodaj dokument <i>(Korespondencję)</i>")
  42. ]);
  43. $this->zaliczkaFormView($data);
  44. }
  45. } catch (Exception $e) {
  46. UI::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
  47. }
  48. if (1 != V::get('_print', '', $_GET)) UI::dol();
  49. }
  50. public function syncStataAjaxAction() {
  51. Response::sendTryCatchJson(array($this, 'syncStataAjaxReponseCallback'), $args = 'JSON_FROM_REQUEST_BODY');// try to read json from request body
  52. }
  53. public function syncStataAjaxReponseCallback($args) {
  54. if (empty($args) || !array_key_exists('updates', $args)) throw new HttpException("Error Parsing Request - missing args", 400);
  55. $args['idUser'] = V::get('idUser', 0, $_REQUEST, 'int');// (int)$args['idUser'];
  56. if ($args['idUser'] <= 0) throw new HttpException("Error Parsing Request - missing idUser", 400);
  57. $args['idZaliczka'] = V::get('idZaliczka', 0, $_REQUEST, 'int');// (int)$args['idZaliczka'];
  58. if ($args['idZaliczka'] <= 0) throw new HttpException("Error Parsing Request - missing idZaliczka", 400);
  59. $acl = ACL::getAclByNamespace("default_db/ZALICZKA/Zaliczka");
  60. $schema = $acl->getSimpleSchemaTree();
  61. if (!empty($args['updates'])) {
  62. $acl->updateItem($args['updates']);
  63. }
  64. $zaliczkaData = $acl->getItem($args['idZaliczka'], [
  65. 'cols' => [
  66. '@instance',
  67. 'id',
  68. 'created',
  69. 'kwota',
  70. 'nierozliczona_kwota',
  71. 'pozycja',
  72. 'worker',
  73. 'korespondencja',
  74. ]
  75. ]);// $this->fetchDataBySchema($schema, $args['idUser']);
  76. return [
  77. 'type' => 'success',
  78. 'nierozliczonaKwota' => V::get('nierozliczona_kwota', 0, $zaliczkaData),
  79. 'schema' => [
  80. 'zaliczka' => $schema,
  81. ],
  82. 'zaliczka' => $zaliczkaData,
  83. ];
  84. }
  85. public function fetchDataAjaxAction() {
  86. Response::sendTryCatchJson(array($this, 'fetchDataAjaxReponseCallback'), $args = 'JSON_FROM_REQUEST_BODY');// try to read json from request body
  87. }
  88. public function fetchDataAjaxReponseCallback($args) {
  89. DBG::log(['msg' => 'args', 'args' => $args]);
  90. if (empty($args)) throw new HttpException("Error Parsing Request - missing args", 400);
  91. if (empty($args['schema']['@namespace']) && empty($args['objectNamespace'])) throw new HttpException("Error Parsing Request - missing @namespace", 400);
  92. if (!empty($args['schema']['@namespace'])) {
  93. if ('default_db/IN7_DZIENNIK_KORESP/ZaliczkaKoresp' == $args['schema']['@namespace']) {
  94. return [
  95. 'type' => 'success',
  96. 'options' => array_values(Core_AclHelper::getAclByNamespace($args['schema']['@namespace'])->getItems([
  97. 'f_title' => V::get('query', '', $args)
  98. ]))
  99. ];
  100. } else {
  101. return [ 'type' => "error", 'msg' => "Unsupported @namespace" ];
  102. }
  103. } else if (!empty($args['objectNamespace'])) {
  104. // childName : "kategoria_kosztu"
  105. // objectNamespace : "default_db/ZALICZKA_POZYCJA/ZaliczkaPozycja"
  106. if (empty($args['childName'])) throw new Exception("Missing childName");
  107. $acl = Core_AclHelper::getAclByNamespace($args['objectNamespace']);
  108. return [
  109. 'type' => 'success',
  110. 'options' => $acl->getEnumValues($args['childName'])
  111. ];
  112. }
  113. return [ 'type' => "error", 'msg' => "Unsupported @namespace or xsdType" ];
  114. }
  115. public function fetchDataBySchema($schema, $idUser, $primaryKey = null) {// if $primaryKey is null then search for last row
  116. return [// TODO: fetch data from DB
  117. 'id' => 123,
  118. 'created' => '2016-11-22', // data wydania zaliczki - data utworzenia rekordu
  119. 'worker' => [
  120. 'id' => 666,
  121. 'name' => 'Kowalski', // 'TODO' => get name from admin_users - imię i nazwisko pracownika pobierającego zaliczkę
  122. 'login' => 'kowalski'
  123. ],
  124. 'kwota' => 555.55, // kwota wypłaconej zaliczki
  125. 'nierozliczona_kwota' => 123.56,
  126. 'pozycja' => [
  127. [ 'id' => 1,
  128. 'kwota' => 100.22,
  129. 'korespondencja' => [ 'id' => 65432, 'title' => 'testowa koresp 1', 'kategoriaKosztu' => 'KOSZT1' ],
  130. 'projekt' => [ 'nrBudowy' => 'Budowa/1' ]
  131. ],
  132. [ 'id' => 2,
  133. 'kwota' => 200.55,
  134. 'korespondencja' => [ 'id' => 76543, 'title' => 'testowa koresp 2', 'kategoriaKosztu' => 'KOSZT2' ],
  135. 'projekt' => [ 'id' => 123, 'nrBudowy' => 'Budowa/2' ]
  136. ]
  137. ]
  138. ];
  139. }
  140. public function zaliczkaListaView($data) {
  141. $idUser = V::get('idUser', User::getID(), $data);
  142. $ownerAcl = Core_AclHelper::getAclByNamespace("default_objects/AccessOwner");
  143. $user = $ownerAcl->getItem($idUser);// [id, login, name]
  144. if (!$user) throw new Exception("Nie znaleziono pracownika o nr '{$idUser}'");
  145. $acl = Core_AclHelper::getAclByNamespace("default_db/ZALICZKA/Zaliczka");
  146. UI::startContainer(['style' => "padding-top:20px"]);
  147. UI::setTitle("Zaliczka");
  148. UI::table([
  149. 'caption' => "Zaliczki pracownika {$user['name']} " . '<br>' . UI::hButtonPost("Dodaj nową zaliczkę", [
  150. 'data' => [
  151. '_route' => "UrlAction_UserProNetMediaZaliczka",
  152. '_task' => "add",
  153. 'idUser' => $idUser,
  154. ],
  155. 'fields' => [
  156. [ 'name' => "kwota", 'type' => 'text', 'class' => 'form-control input-sm', 'style' => "width:200px", 'placeholder' => "kwota" ]
  157. ],
  158. 'class' => 'btn-sm btn-primary',
  159. 'form.style' => 'display:block; margin-top:4px'
  160. ]),
  161. 'rows' => array_map(
  162. function ($row) use ($idUser) {
  163. $instance = DB::getPDO()->fetchValue("select INSTANCE_NAME from `ZALICZKA__#INSTANCE` where PRIMARY_KEY = {$row['id']}");
  164. $editLink = Request::getPathUri() . "index.php?_route=UrlAction_UserProNetMediaZaliczka&idUser={$idUser}&idZaliczka={$row['id']}";
  165. $editLabel = ('ZaliczkaAktywna' == $instance) ? "Rozlicz / Podgląd" : "Podgląd";
  166. $histLink = Request::getPathUri() . "index.php?_route=UrlAction_UserProNetMediaZaliczka&_task=hist&idUser={$idUser}&idZaliczka={$row['id']}";
  167. return [
  168. 'Nr' => $row['id'],
  169. 'Typ' => $instance,
  170. 'Pracownik' => $row['L_APPOITMENT_USER'],
  171. 'Kwota' => $row['kwota'],
  172. 'Nierozliczona kwota' => $row['nierozliczona_kwota'],
  173. '#' => '<a href="' . $editLink . '">' . $editLabel . '</a>' . (V::get('DBG', '', $_GET)
  174. ? '<a href="' . $histLink . '">' . "DBG HIST" . '</a>'
  175. : ''
  176. ),
  177. ];
  178. },
  179. $acl->getItems([
  180. '#refFrom' => [
  181. 'namespace' => 'default_db__x3A__ADMIN_USERS/Worker',
  182. 'primaryKey' => $idUser
  183. ]
  184. ])
  185. ),
  186. 'empty_msg' => "Brak",
  187. 'disable_lp' => true,
  188. ]);
  189. UI::endContainer();
  190. }
  191. public function addAction() {
  192. $idUser = V::get('idUser', User::getID(), $_REQUEST);
  193. $kwota = V::get('kwota', 0, $_REQUEST, 'price');
  194. try {
  195. $acl = Core_AclHelper::getAclByNamespace("default_db/ZALICZKA/Zaliczka");
  196. $id = $acl->addItem([
  197. 'kwota' => $kwota,
  198. 'worker' => [
  199. 'id' => $idUser
  200. ]
  201. ]);
  202. if (!$id) throw new Exception("Nie udało się utworzyć zaliczki");
  203. } catch (Exception $e) {
  204. UI::gora();
  205. UI::startContainer();
  206. UI::alert('danger', $e->getMessage() . UI::h('p', [], [
  207. UI::h('a', [ 'href' => "index.php?_route=UrlAction_UserProNetMediaZaliczka&idUser={$idUser}" ], [
  208. '<i class="glyphicon glyphicon-arrow-left"></i>',
  209. " wróć",
  210. ])
  211. ]));
  212. UI::endContainer();
  213. UI::dol();
  214. DBG::log($e);
  215. exit;
  216. }
  217. $redirectUrl = Request::getPathUri() . "index.php?_route=UrlAction_UserProNetMediaZaliczka&idUser={$idUser}&idZaliczka={$id}";
  218. if (!headers_sent()) {
  219. header("Location: {$redirectUrl}");
  220. } else {
  221. echo'<script type="text/javascript">'."
  222. window.location.href='{$redirectUrl}';
  223. ".'</script>';
  224. echo "\n".'<noscript>';
  225. echo "\n".'<meta http-equiv="refresh" content="0;url='.$redirectUrl.'" />';
  226. echo "\n".'</noscript>';
  227. echo'<p>'.'<a href="'.$redirectUrl.'">'."dalej".'</a>'.'</p>';
  228. }
  229. }
  230. public function reinstallAction() {
  231. UI::gora();
  232. try {
  233. Core_AclHelper::getAclByNamespace("default_db/ZALICZKA/Zaliczka")->reinstall();
  234. UI::startContainer();
  235. UI::alert('success', "Structure for 'default_db/ZALICZKA/Zaliczka' created in a database");
  236. $backUrl = Request::getPathUri() . "index.php?_route=UrlAction_UserProNetMediaZaliczka";
  237. UI::tag('a', ['href'=>$backUrl, 'class'=>"btn btn-primary"], "wróć");
  238. $databaseName = DB::getPDO()->getDatabaseName();
  239. UI::table([
  240. 'caption' => "Zaliczka",
  241. 'rows' => DB::getPDO()->fetchAll("
  242. select t.TABLE_NAME, t.COLUMN_NAME, t.DATA_TYPE, t.COLUMN_TYPE
  243. from `information_schema`.`COLUMNS` t
  244. where t.TABLE_SCHEMA = '{$databaseName}'
  245. and (t.TABLE_NAME like 'ZALICZKA'
  246. or t.TABLE_NAME like 'ZALICZKA\_\_%'
  247. or t.TABLE_NAME like 'ZALICZKA_HIST'
  248. or t.TABLE_NAME like 'Zaliczka\_\_%'
  249. )
  250. order by t.TABLE_NAME asc, t.COLUMN_NAME asc
  251. ")
  252. ]);
  253. UI::table([
  254. 'caption' => "Zaliczka Pozycja",
  255. 'rows' => DB::getPDO()->fetchAll("
  256. select t.TABLE_NAME, t.COLUMN_NAME, t.DATA_TYPE, t.COLUMN_TYPE
  257. from `information_schema`.`COLUMNS` t
  258. where t.TABLE_SCHEMA = '{$databaseName}'
  259. and (t.TABLE_NAME like 'ZALICZKA_POZYCJA'
  260. or t.TABLE_NAME like 'ZALICZKA_POZYCJA\_\_%'
  261. or t.TABLE_NAME like 'ZALICZKA_POZYCJA_HIST'
  262. or t.TABLE_NAME like 'ZaliczkaPozycja\_\_%'
  263. )
  264. order by t.TABLE_NAME asc, t.COLUMN_NAME asc
  265. ")
  266. ]);
  267. $tableList = array_map(
  268. function($item) {
  269. return $item['TABLE_NAME'];
  270. }
  271. , DB::getPDO()->fetchAll("
  272. select t.TABLE_NAME
  273. from `information_schema`.`COLUMNS` t
  274. where t.TABLE_SCHEMA = '{$databaseName}'
  275. and (t.TABLE_NAME like 'ZALICZKA'
  276. or t.TABLE_NAME like 'ZALICZKA\_\_%'
  277. or t.TABLE_NAME like 'ZALICZKA_HIST'
  278. or t.TABLE_NAME like 'Zaliczka\_\_%'
  279. or t.TABLE_NAME like 'ZALICZKA_POZYCJA'
  280. or t.TABLE_NAME like 'ZALICZKA_POZYCJA\_\_%'
  281. or t.TABLE_NAME like 'ZALICZKA_POZYCJA_HIST'
  282. or t.TABLE_NAME like 'ZaliczkaPozycja\_\_%'
  283. )
  284. group by t.TABLE_NAME
  285. ")
  286. );
  287. foreach ($tableList as $tableName) {
  288. UI::startTag('div', ['style'=>"margin:10px 0; max-width:100%; overflow:scroll; border:1px solid #ccc"]);
  289. UI::table([
  290. 'caption' => "Tabela '{$tableName}'",
  291. 'rows' => DB::getPDO()->fetchAll("
  292. select t.*
  293. from `{$tableName}` t
  294. ")
  295. ]);
  296. UI::endTag('div');
  297. }
  298. if ('1' == V::get('_clear', '', $_GET)) {
  299. foreach ($tableList as $tableName) {
  300. DB::getPDO()->exec("TRUNCATE `{$tableName}`");
  301. }
  302. UI::tag('a', ['class'=>"btn btn-primary", 'href'=>"index.php?_route=UrlAction_UserProNetMediaZaliczka&_task=reinstall"], "Dane usunięte - odśwież stronę");
  303. } else {
  304. UI::tag('a', ['class'=>"btn btn-danger", 'href'=>"index.php?_route=UrlAction_UserProNetMediaZaliczka&_task=reinstall&_clear=1"], "Wyczyść tabele");
  305. }
  306. UI::startTag('pre');
  307. foreach ($tableList as $tableName) {
  308. echo "DROP TABLE `{$tableName}`;\n";
  309. }
  310. UI::endTag('pre');
  311. ACL::getRefTable('default_db/ZALICZKA/Zaliczka', 'worker');
  312. ACL::getRefTable('default_db/ZALICZKA/Zaliczka', 'pozycja');
  313. ACL::getRefTable('default_db/ZALICZKA/Zaliczka', 'korespondencja');
  314. $refZaliczkaTables = DB::getPDO()->fetchAll("
  315. select t.*
  316. from `CRM_REF_CONFIG` t
  317. where t.ROOT_OBJECT_NS like 'default_db/ZALICZKA%'
  318. ");
  319. UI::startTag('div', ['style'=>"margin:10px 0; max-width:100%; overflow:scroll; border:1px solid #ccc"]);
  320. UI::table([
  321. 'caption' => "Tabela 'CRM_REF_CONFIG'",
  322. 'rows' => $refZaliczkaTables
  323. ]);
  324. UI::endTag('div');
  325. foreach ($refZaliczkaTables as $refInfo) {
  326. $tableName = "CRM__#REF_TABLE__" . $refInfo['ID'];
  327. UI::startTag('div', ['style'=>"margin:10px 0; max-width:100%; overflow:scroll; border:1px solid #ccc"]);
  328. UI::table([
  329. 'caption' => "Tabela REF '{$tableName}' - <small><i>{$refInfo['ROOT_OBJECT_NS']} REF {$refInfo['CHILD_NAME']} ({$refInfo['CHILD_NS']})</i></small>",
  330. 'rows' => DB::getPDO()->fetchAll("
  331. select t.*
  332. from `{$tableName}` t
  333. ")
  334. ]);
  335. UI::endTag('div');
  336. }
  337. if ('1' == V::get('_clear', '', $_GET)) {
  338. foreach ($refZaliczkaTables as $refInfo) {
  339. $tableName = "CRM__#REF_TABLE__" . $refInfo['ID'];
  340. DB::getPDO()->exec("TRUNCATE `{$tableName}`");
  341. }
  342. UI::tag('a', ['class'=>"btn btn-primary", 'href'=>"index.php?_route=UrlAction_UserProNetMediaZaliczka&_task=reinstall"], "Dane usunięte - odśwież stronę");
  343. }
  344. {// view grouped info
  345. $refTableWorker = ACL::getRefTable('default_db/ZALICZKA/Zaliczka', 'worker');
  346. $refTablePozycja = ACL::getRefTable('default_db/ZALICZKA/Zaliczka', 'pozycja');
  347. DB::getPDO()->execSql("
  348. CREATE OR REPLACE VIEW `ZALICZKA_INFO_VIEW` AS
  349. select t.ID
  350. , t.A_STATUS
  351. , t.L_APPOITMENT_USER
  352. , t.KWOTA
  353. , t.NIEROZLICZONA_KWOTA
  354. , sum(COALESCE(p.kwota, 0)) as rozliczona_kwota
  355. from ZALICZKA t
  356. left join `{$refTablePozycja}` refPoz on(refPoz.PRIMARY_KEY = t.ID and refPoz.A_STATUS != 'DELETED')
  357. left join ZALICZKA_POZYCJA p on(p.ID = refPoz.REMOTE_PRIMARY_KEY and (p.A_STATUS not in ('DELETED')))
  358. where t.A_STATUS not in ('DELETED')
  359. group by t.ID
  360. ");
  361. DB::getPDO()->execSql("
  362. CREATE OR REPLACE VIEW `ZALICZKA_USER_SALDO_VIEW` AS
  363. select u.ID, u.ADM_ACCOUNT, u.ADM_NAME
  364. , (
  365. select (v.KWOTA + v.NIEROZLICZONA_KWOTA - v.rozliczona_kwota) as saldo
  366. from ZALICZKA_INFO_VIEW v
  367. where v.L_APPOITMENT_USER = u.ADM_ACCOUNT
  368. order by v.ID desc
  369. limit 1
  370. ) as saldo
  371. , sum(t.KWOTA) as suma_zaliczek
  372. from ZALICZKA t
  373. join ADMIN_USERS u on(u.ADM_ACCOUNT = t.L_APPOITMENT_USER)
  374. where t.A_STATUS not in ('DELETED')
  375. group by u.ADM_ACCOUNT
  376. ");
  377. UI::table([
  378. 'caption' => "Table `ZALICZKA_USER_SALDO_VIEW`",
  379. 'rows' => DB::getPDO()->fetchAll(" select * from `ZALICZKA_USER_SALDO_VIEW` ")
  380. ]);
  381. UI::table([
  382. 'caption' => "Table `ZALICZKA_INFO_VIEW`",
  383. 'rows' => DB::getPDO()->fetchAll(" select * from `ZALICZKA_INFO_VIEW` ")
  384. ]);
  385. UI::table([
  386. 'caption' => "Table `ZALICZKA_INFO_VIEW` - debug (with deleted)",
  387. 'rows' => DB::getPDO()->fetchAll("
  388. select t.ID
  389. , t.A_STATUS
  390. , t.L_APPOITMENT_USER
  391. , t.KWOTA
  392. , t.NIEROZLICZONA_KWOTA
  393. , IF(p.ID is null, 'NULL', p.ID) as p__ID
  394. , p.A_STATUS as p__A_STATUS
  395. , p.L_APPOITMENT_USER as p__L_APPOITMENT_USER
  396. , p.nr_faktury as p__nr_faktury
  397. , p.kwota as p__kwota
  398. , p.kwota_netto as p__kwota_netto
  399. , p.vat as p__vat
  400. , p.kategoria_kosztu as p__kategoria_kosztu
  401. from ZALICZKA t
  402. left join `{$refTablePozycja}` refPoz on(refPoz.PRIMARY_KEY = t.ID)
  403. left join ZALICZKA_POZYCJA p on(p.ID = refPoz.REMOTE_PRIMARY_KEY)
  404. ")
  405. ]);
  406. }
  407. UI::endContainer();
  408. } catch (Exception $e) {
  409. UI::alert('danger', $e->getMessage());
  410. DBG::log($e);
  411. }
  412. UI::dol();
  413. }
  414. public function zaliczkaFormView($data) {
  415. $idUser = V::get('idUser', User::getID(), $data);
  416. $idZaliczka = V::get('idZaliczka', 0, $data);
  417. UI::tag('div', ['id'=>"zaliczka-app", 'data-dbg'=>V::get('DBG', '', $_GET), 'data-sync-js-function'=>"syncZaliczkaState", 'data-fetch-data-js-function'=>"zaliczkaFetchData"]);
  418. UI::emptyTag('br');
  419. $acl = Core_AclHelper::getAclByNamespace("default_db/ZALICZKA/Zaliczka");
  420. $schema = $acl->getSimpleSchemaTree();
  421. // DBG::nicePrint($schema, '$schema');
  422. UI::inlineJS(__FILE__ . '.fetchData.js', [
  423. 'SYNC_URL' => Request::getPathUri() . "index.php?_route=UrlAction_UserProNetMediaZaliczka&_task=fetchDataAjax&idUser={$idUser}&idZaliczka={$idZaliczka}",
  424. 'DBG' => (DBG::isActive())
  425. ]);
  426. UI::inlineJS(__FILE__ . '.syncState.js', [
  427. 'SYNC_URL' => Request::getPathUri() . "index.php?_route=UrlAction_UserProNetMediaZaliczka&_task=syncStataAjax&idUser={$idUser}&idZaliczka={$idZaliczka}",
  428. 'DBG' => (DBG::isActive())
  429. ]);
  430. UI::tag('script', ['src'=>'static/vendor.js' . (V::get('DBG', '', $_GET) ? '?_ts=' . time() : ''), 'type'=>'text/javascript']);
  431. UI::tag('script', ['src'=>'static/zaliczka/main.js' . (V::get('DBG', '', $_GET) ? '?_ts=' . time() : ''), 'type'=>'text/javascript']);
  432. }
  433. public function histAction() {
  434. UI::gora();
  435. // UI::menu();
  436. try {
  437. $idZaliczka = V::get('idZaliczka', 0, $_GET, 'int');
  438. if ($idZaliczka <= 0) throw new Exception("Missing idZaliczka");
  439. $acl = Core_AclHelper::getAclByNamespace("default_db/ZALICZKA/Zaliczka");
  440. $zaliczka = $acl->getItem($idZaliczka);
  441. if (!$zaliczka) throw new Exception("Zaliczka not found!");
  442. DBG::nicePrint($zaliczka, '$zaliczka');
  443. } catch (Exception $e) {
  444. UI::alert('danger', $e->getMessage());
  445. }
  446. UI::dol();
  447. }
  448. }
  449. /* Akcje
  450. # dodanie pierwszej zaliczki - 500 zł
  451. $data = [ worker => [ login => 'Kowalski' ], kwota => 500.00 ]
  452. insert into `ZALICZKA` (`L_APPOITMENT_USER`, `KWOTA`) values('{$data['worker']['login']}', '{$data['kwota']}');
  453. -- return id = 123
  454. # rozliczenie częściowe pierwszej zaliczki np. 500 zł
  455. $data = [ id => 123, pozycja => [ [ kwota => 200.00, korespondencja => [ ... ], projekt => [ ... ] ] ] ]
  456. update `ZALICZKA__#REF__POZYCJA` set `A_STATUS` = 'DELETED' where `PRIMARY_KEY` = 123;
  457. */