UserProNetMediaZaliczka.php 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  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. class Route_UrlAction_UserProNetMediaZaliczka extends RouteBase {// TODO: UrlActionBase @see Route_UrlAction
  11. public function handleAuth() {
  12. if (!User::logged()) {
  13. User::authByRequest();
  14. }
  15. }
  16. public function defaultAction() {
  17. UI::gora();
  18. UI::emptyTag('link', ['href'=>'static/zaliczka/main.css', 'rel'=>'stylesheet']);
  19. if (1 != V::get('_print', '', $_GET)) UI::menu();
  20. try {
  21. $data = array();
  22. $data['id_user'] = V::get('ID_PROJECT', User::getID(), $_REQUEST, 'int');
  23. $this->zaliczkaFormView($data);
  24. } catch (Exception $e) {
  25. UI::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
  26. }
  27. if (1 != V::get('_print', '', $_GET)) UI::dol();
  28. }
  29. public function zaliczkaFormView($data) {
  30. $idUser = V::get('id_user', User::getID(), $data);
  31. UI::tag('div', ['id'=>"zaliczka-app", 'data-dbg'=>V::get('DBG', '', $_GET), 'data-sync-js-function'=>"syncZaliczkaState", 'data-fetch-data-js-function'=>"zaliczkaFetchData"]);
  32. UI::emptyTag('br');
  33. $acl = Core_AclHelper::getAclByNamespace("default_db/ZALICZKA/Zaliczka");//User::getAcl()->getObjectAcl();
  34. $schema = $acl->getSimpleSchemaTree();
  35. $zaliczkaData = $this->fetchDataBySchema($schema, $idUser);
  36. ?>
  37. <script>
  38. function zaliczkaFetchData(query, fieldType, resultCallback) {
  39. console.warn('TODO: zaliczkaFetchData(query, fieldType, resultCallback) query('+query+') fieldType:', fieldType);
  40. // fieldType: Object {"@baseTypeName": "default_db:IN7_DZIENNIK_KORESP", id: "xsd:integer", title: "xsd:string", kategoriaKosztu: "xsd:string"}
  41. if ('object' === typeof fieldType) {
  42. if (!fieldType['@namespace']) {
  43. // TODO: log error
  44. console.error("BUG: Missing typeName in fieldType");
  45. return;
  46. }
  47. switch (fieldType['@namespace']) {
  48. case 'default_db/IN7_DZIENNIK_KORESP': {
  49. superagent
  50. .post('<?= Request::getPathUri(); ?>/index.php?_route=UrlAction_UserProNetMediaZaliczka&_task=fetchDataAjax')
  51. .type('json') // header ĺapplication/x-www-form-urlencoded' requires type('form');
  52. .send({
  53. schema: fieldType,
  54. query: query
  55. })
  56. .set('Accept', 'application/json')
  57. .end(function(err, res) {
  58. var payload;
  59. if (err || !res.ok || 'application/json' !== res.type) {
  60. payload = {type: 'warning', msg: (res.body && res.body.msg) ? res.body.msg : 'Request error', body: res.body};
  61. } else {
  62. payload = {type: 'success', msg: res.body.msg || '', body: res.body};
  63. }
  64. jQuery(document).trigger('DBG:notify', payload);
  65. resultCallback(payload.body);
  66. });
  67. console.warn("TODO: fetch by ajax default_db:IN7_DZIENNIK_KORESP");
  68. var options = [
  69. { id: 65432, title: 'testowa koresp 1', kategoriaKosztu: 'KOSZT1' },
  70. { id: 10008, title: 'testowa koresp 8', kategoriaKosztu: 'KOSZT8' },
  71. { id: 10009, title: 'testowa koresp 9', kategoriaKosztu: 'KOSZT9' },
  72. ]
  73. resultCallback(options);
  74. } break;
  75. case 'default_db/IN7_MK_BAZA_DYSTRYBUCJI': {
  76. console.warn("TODO: fetch by ajax default_db:IN7_MK_BAZA_DYSTRYBUCJI");
  77. var options = [
  78. { id: 100, nrBudowy: 'Budowa 100/2016' },
  79. { id: 101, nrBudowy: 'Budowa 101/2016' },
  80. { id: 102, nrBudowy: 'Budowa 102/2016' },
  81. ]
  82. resultCallback(options);
  83. } break;
  84. default: {
  85. console.log("BUG: Unsupported type namespace '" + fieldType['@baseTypeName'] + "'");
  86. }
  87. }
  88. } else {
  89. console.log("BUG: Unsupported type '" + fieldType + "'");
  90. return;
  91. }
  92. }
  93. function syncZaliczkaState(state, updates, stateSyncSyccessCallback, stateSyncErrorCallback) {
  94. // TODO: if ajax success then stateSyncSyccessCallback(Response.data)
  95. // TODO: if ajax fail then stateSyncErrorCallback(Response.data)
  96. console.log('====== TODO: syncZaliczkaState updates:', updates, 'state:', state);
  97. if (null === updates) {
  98. var data = {
  99. nierozliczonaKwota: 300,
  100. schema: {
  101. zaliczka: <?= json_encode($schema); ?>
  102. },
  103. zaliczka: <?= json_encode($zaliczkaData); ?>
  104. }
  105. setTimeout(function() {
  106. stateSyncSyccessCallback({data: data});// TODO: app state + updates from api Response
  107. }, 1000);
  108. } else {
  109. setTimeout(function() {
  110. stateSyncSyccessCallback({data: state});// TODO: app state + updates from api Response
  111. }, 1000);
  112. }
  113. }
  114. </script>
  115. <?php
  116. UI::tag('script', ['src'=>'static/zaliczka/main.js' . (V::get('DBG', '', $_GET) ? '?_ts=' . time() : ''), 'type'=>'text/javascript']);
  117. }
  118. public function fetchDataAjaxAction() {
  119. $reqBody = Request::getRequestBody();
  120. // var_dump($reqBody);
  121. die(json_encode([
  122. [ 'id' => 100, 'nrBudowy' => 'Budowa 100/2016' ],
  123. [ 'id' => 101, 'nrBudowy' => 'Budowa 101/2016' ],
  124. [ 'id' => 102, 'nrBudowy' => 'Budowa 102/2016' ],
  125. ]));
  126. }
  127. public function fetchDataBySchema($schema, $idUser, $primaryKey = null) {// if $primaryKey is null then search for last row
  128. return [// TODO: fetch data from DB
  129. 'id' => 123,
  130. 'created' => '2016-11-22', // data wydania zaliczki - data utworzenia rekordu
  131. 'worker' => [
  132. 'id' => 666,
  133. 'name' => 'Kowalski', // 'TODO' => get name from admin_users - imię i nazwisko pracownika pobierającego zaliczkę
  134. 'login' => 'kowalski'
  135. ],
  136. 'kwota' => 555.55, // kwota wypłaconej zaliczki
  137. 'pozycja' => [
  138. [ 'id' => 1,
  139. 'kwota' => 100.22,
  140. 'korespondencja' => [ 'id' => 65432, 'title' => 'testowa koresp 1', 'kategoriaKosztu' => 'KOSZT1' ],
  141. 'projekt' => [ 'nrBudowy' => 'Budowa/1' ]
  142. ],
  143. [ 'id' => 2,
  144. 'kwota' => 200.55,
  145. 'korespondencja' => [ 'id' => 76543, 'title' => 'testowa koresp 2', 'kategoriaKosztu' => 'KOSZT2' ],
  146. 'projekt' => [ 'nrBudowy' => 'Budowa/2' ]
  147. ]
  148. ]
  149. ];
  150. }
  151. public function getSchema() {
  152. return [// var zaliczkaFlatSchema
  153. '__baseTypeName' => 'default_db:ZALICZKA',
  154. 'id' => 'xsd:integer',
  155. 'created' => 'xsd:date',
  156. 'worker' => [// 'ref:worker',
  157. '__baseTypeName' => 'default_db:ADMIN_USERS',
  158. 'name' => 'xsd:string',
  159. 'login' => 'xsd:string'
  160. ],
  161. 'kwota' => 'xsd:decimal',
  162. 'pozycja' => [// 'ref:pozycja'
  163. '__baseTypeName' => 'default_db:ZALICZKA_POZYCJA',
  164. 'id' => 'xsd:integer',
  165. 'kwota' => 'xsd:decimal',
  166. 'korespondencja' => [// 'ref:korespondencja'
  167. '__baseTypeName' => 'default_db:IN7_DZIENNIK_KORESP',
  168. 'id' => 'xsd:integer',
  169. 'title' => 'xsd:string',
  170. 'kategoriaKosztu' => 'xsd:string'
  171. ],
  172. 'projekt' => [// 'ref:projekt'
  173. '__baseTypeName' => 'default_db:IN7_MK_BAZA_DYSTRYBUCJI',
  174. 'id' => 'xsd:integer',
  175. 'nrBudowy' => 'xsd:string'
  176. ]
  177. ]
  178. ];
  179. }
  180. }
  181. /* Akcje
  182. # dodanie pierwszej zaliczki - 500 zł
  183. $data = [ worker => [ login => 'Kowalski' ], kwota => 500.00 ]
  184. insert into `ZALICZKA` (`L_APPOITMENT_USER`, `KWOTA`) values('{$data['worker']['login']}', '{$data['kwota']}');
  185. -- return id = 123
  186. # rozliczenie częściowe pierwszej zaliczki np. 500 zł
  187. $data = [ id => 123, pozycja => [ [ kwota => 200.00, korespondencja => [ ... ], projekt => [ ... ] ] ] ]
  188. update `ZALICZKA__#REF__POZYCJA` set `A_STATUS` = 'DELETED' where `PRIMARY_KEY` = 123;
  189. */
  190. /* -- Struktura
  191. CREATE TABLE IF NOT EXISTS `ZALICZKA__#REF__POZYCJA` ( `PRIMARY_KEY` int(11), `REMOTE_PRIMARY_KEY` int(11), );
  192. CREATE TABLE IF NOT EXISTS `ZALICZKA` (
  193. `ID` int(11) NOT NULL AUTO_INCREMENT,
  194. `A_RECORD_CREATE_DATE` datetime DEFAULT NULL,
  195. `A_RECORD_CREATE_AUTHOR` varchar(20) DEFAULT NULL,
  196. `A_RECORD_UPDATE_DATE` datetime DEFAULT NULL,
  197. `A_RECORD_UPDATE_AUTHOR` varchar(20) NOT NULL DEFAULT '',
  198. `A_STATUS` enum('WAITING','NORMAL','MONITOR','WARNING','OFF_SOFT','OFF_HARD','DELETED') DEFAULT NULL,
  199. `A_ADM_COMPANY` varchar(100) NOT NULL DEFAULT '',
  200. `A_CLASSIFIED` varchar(100) NOT NULL DEFAULT '',
  201. `L_APPOITMENT_USER` varchar(100) NOT NULL DEFAULT '',
  202. `KWOTA` decimal(16,2) NOT NULL DEFAULT 0,
  203. `NIEROZLICZONA_KWOTA` decimal(16,2) NOT NULL DEFAULT 0,
  204. PRIMARY KEY (`ID`)
  205. KEY `ID_PROJECT` (`ID_PROJECT`)
  206. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  207. CREATE TABLE IF NOT EXISTS `ZALICZKA_HIST` (
  208. `ID` int(11) NOT NULL AUTO_INCREMENT,
  209. `ID_USERS2` int(11) NOT NULL,
  210. `A_RECORD_CREATE_DATE` varchar(20) NOT NULL DEFAULT 'N/S;',
  211. `A_RECORD_CREATE_AUTHOR` varchar(20) NOT NULL DEFAULT 'N/S;',
  212. `A_RECORD_UPDATE_DATE` varchar(20) NOT NULL DEFAULT 'N/S;',
  213. `A_RECORD_UPDATE_AUTHOR` varchar(20) NOT NULL DEFAULT 'N/S;',
  214. `A_STATUS` varchar(20) NOT NULL DEFAULT 'N/S;',
  215. `A_ADM_COMPANY` varchar(100) NOT NULL DEFAULT 'N/S;',
  216. `A_CLASSIFIED` varchar(100) NOT NULL DEFAULT 'N/S;',
  217. `L_APPOITMENT_USER` varchar(100) NOT NULL DEFAULT 'N/S;',
  218. `KWOTA` varchar(16) NOT NULL DEFAULT 'N/S;',
  219. `NIEROZLICZONA_KWOTA` varchar(16) NOT NULL DEFAULT 'N/S;',
  220. PRIMARY KEY (`ID`),
  221. KEY `ID_USERS2` (`ID_USERS2`)
  222. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  223. */