UserProNetMediaZaliczka.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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 = $this->getSchema();//$acl->getSimpleSchema();
  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['@baseTypeName']) {
  43. // TODO: log error
  44. console.error("BUG: Missing typeName in fieldType");
  45. return;
  46. }
  47. switch (fieldType['@baseTypeName']) {
  48. case 'default_db:IN7_DZIENNIK_KORESP': {
  49. console.warn("TODO: fetch by ajax default_db:IN7_DZIENNIK_KORESP");
  50. var options = [
  51. { id: 65432, title: 'testowa koresp 1', kategoriaKosztu: 'KOSZT1' },
  52. { id: 10008, title: 'testowa koresp 8', kategoriaKosztu: 'KOSZT8' },
  53. { id: 10009, title: 'testowa koresp 9', kategoriaKosztu: 'KOSZT9' },
  54. ]
  55. resultCallback(options);
  56. } break;
  57. case 'default_db:IN7_MK_BAZA_DYSTRYBUCJI': {
  58. console.warn("TODO: fetch by ajax default_db:IN7_MK_BAZA_DYSTRYBUCJI");
  59. var options = [
  60. { id: 100, nrBudowy: 'Budowa 100/2016' },
  61. { id: 101, nrBudowy: 'Budowa 101/2016' },
  62. { id: 102, nrBudowy: 'Budowa 102/2016' },
  63. ]
  64. resultCallback(options);
  65. } break;
  66. default: {
  67. console.log("BUG: Unsupported type namespace '" + fieldType['@baseTypeName'] + "'");
  68. }
  69. }
  70. } else {
  71. console.log("BUG: Unsupported type '" + fieldType + "'");
  72. return;
  73. }
  74. }
  75. function syncZaliczkaState(state, updates, stateSyncSyccessCallback, stateSyncErrorCallback) {
  76. // TODO: if ajax success then stateSyncSyccessCallback(Response.data)
  77. // TODO: if ajax fail then stateSyncErrorCallback(Response.data)
  78. console.log('====== TODO: syncZaliczkaState updates:', updates, 'state:', state);
  79. if (null === updates) {
  80. var data = {
  81. nierozliczonaKwota: 300,
  82. schema: {
  83. zaliczka: <?= json_encode($schema); ?>
  84. },
  85. zaliczka: <?= json_encode($zaliczkaData); ?>
  86. }
  87. setTimeout(function() {
  88. stateSyncSyccessCallback({data: data});// TODO: app state + updates from api Response
  89. }, 1000);
  90. } else {
  91. setTimeout(function() {
  92. stateSyncSyccessCallback({data: state});// TODO: app state + updates from api Response
  93. }, 1000);
  94. }
  95. }
  96. </script>
  97. <?php
  98. UI::tag('script', ['src'=>'static/zaliczka/main.js' . (V::get('DBG', '', $_GET) ? '?_ts=' . time() : ''), 'type'=>'text/javascript']);
  99. }
  100. public function fetchDataBySchema($schema, $idUser, $primaryKey = null) {// if $primaryKey is null then search for last row
  101. return [// TODO: fetch data from DB
  102. 'id' => 123,
  103. 'created' => '2016-11-22', // data wydania zaliczki - data utworzenia rekordu
  104. 'worker' => [
  105. 'id' => 666,
  106. 'name' => 'Kowalski', // 'TODO' => get name from admin_users - imię i nazwisko pracownika pobierającego zaliczkę
  107. 'login' => 'kowalski'
  108. ],
  109. 'kwota' => 555.55, // kwota wypłaconej zaliczki
  110. 'pozycja' => [
  111. [ 'id' => 1,
  112. 'kwota' => 100.22,
  113. 'korespondencja' => [ 'id' => 65432, 'title' => 'testowa koresp 1', 'kategoriaKosztu' => 'KOSZT1' ],
  114. 'projekt' => [ 'nrBudowy' => 'Budowa/1' ]
  115. ],
  116. [ 'id' => 2,
  117. 'kwota' => 200.55,
  118. 'korespondencja' => [ 'id' => 76543, 'title' => 'testowa koresp 2', 'kategoriaKosztu' => 'KOSZT2' ],
  119. 'projekt' => [ 'nrBudowy' => 'Budowa/2' ]
  120. ]
  121. ]
  122. ];
  123. }
  124. public function getSchema() {
  125. return [// var zaliczkaFlatSchema
  126. '__baseTypeName' => 'default_db:ZALICZKA',
  127. 'id' => 'xsd:integer',
  128. 'created' => 'xsd:date',
  129. 'worker' => [// 'ref:worker',
  130. '__baseTypeName' => 'default_db:ADMIN_USERS',
  131. 'name' => 'xsd:string',
  132. 'login' => 'xsd:string'
  133. ],
  134. 'kwota' => 'xsd:decimal',
  135. 'pozycja' => [// 'ref:pozycja'
  136. '__baseTypeName' => 'default_db:ZALICZKA_POZYCJA',
  137. 'id' => 'xsd:integer',
  138. 'kwota' => 'xsd:decimal',
  139. 'korespondencja' => [// 'ref:korespondencja'
  140. '__baseTypeName' => 'default_db:IN7_DZIENNIK_KORESP',
  141. 'id' => 'xsd:integer',
  142. 'title' => 'xsd:string',
  143. 'kategoriaKosztu' => 'xsd:string'
  144. ],
  145. 'projekt' => [// 'ref:projekt'
  146. '__baseTypeName' => 'default_db:IN7_MK_BAZA_DYSTRYBUCJI',
  147. 'id' => 'xsd:integer',
  148. 'nrBudowy' => 'xsd:string'
  149. ]
  150. ]
  151. ];
  152. }
  153. }
  154. /* Akcje
  155. # dodanie pierwszej zaliczki - 500 zł
  156. $data = [ worker => [ login => 'Kowalski' ], kwota => 500.00 ]
  157. insert into `ZALICZKA` (`L_APPOITMENT_USER`, `KWOTA`) values('{$data['worker']['login']}', '{$data['kwota']}');
  158. -- return id = 123
  159. # rozliczenie częściowe pierwszej zaliczki np. 500 zł
  160. $data = [ id => 123, pozycja => [ [ kwota => 200.00, korespondencja => [ ... ], projekt => [ ... ] ] ] ]
  161. update `ZALICZKA__#REF__POZYCJA` set `A_STATUS` = 'DELETED' where `PRIMARY_KEY` = 123;
  162. */
  163. /* -- Struktura
  164. CREATE TABLE IF NOT EXISTS `ZALICZKA__#REF__POZYCJA` ( `PRIMARY_KEY` int(11), `REMOTE_PRIMARY_KEY` int(11), );
  165. CREATE TABLE IF NOT EXISTS `ZALICZKA` (
  166. `ID` int(11) NOT NULL AUTO_INCREMENT,
  167. `A_RECORD_CREATE_DATE` datetime DEFAULT NULL,
  168. `A_RECORD_CREATE_AUTHOR` varchar(20) DEFAULT NULL,
  169. `A_RECORD_UPDATE_DATE` datetime DEFAULT NULL,
  170. `A_RECORD_UPDATE_AUTHOR` varchar(20) NOT NULL DEFAULT '',
  171. `A_STATUS` enum('WAITING','NORMAL','MONITOR','WARNING','OFF_SOFT','OFF_HARD','DELETED') DEFAULT NULL,
  172. `A_ADM_COMPANY` varchar(100) NOT NULL DEFAULT '',
  173. `A_CLASSIFIED` varchar(100) NOT NULL DEFAULT '',
  174. `L_APPOITMENT_USER` varchar(100) NOT NULL DEFAULT '',
  175. `KWOTA` decimal(16,2) NOT NULL DEFAULT 0,
  176. `NIEROZLICZONA_KWOTA` decimal(16,2) NOT NULL DEFAULT 0,
  177. PRIMARY KEY (`ID`)
  178. KEY `ID_PROJECT` (`ID_PROJECT`)
  179. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  180. CREATE TABLE IF NOT EXISTS `ZALICZKA_HIST` (
  181. `ID` int(11) NOT NULL AUTO_INCREMENT,
  182. `ID_USERS2` int(11) NOT NULL,
  183. `A_RECORD_CREATE_DATE` varchar(20) NOT NULL DEFAULT 'N/S;',
  184. `A_RECORD_CREATE_AUTHOR` varchar(20) NOT NULL DEFAULT 'N/S;',
  185. `A_RECORD_UPDATE_DATE` varchar(20) NOT NULL DEFAULT 'N/S;',
  186. `A_RECORD_UPDATE_AUTHOR` varchar(20) NOT NULL DEFAULT 'N/S;',
  187. `A_STATUS` varchar(20) NOT NULL DEFAULT 'N/S;',
  188. `A_ADM_COMPANY` varchar(100) NOT NULL DEFAULT 'N/S;',
  189. `A_CLASSIFIED` varchar(100) NOT NULL DEFAULT 'N/S;',
  190. `L_APPOITMENT_USER` varchar(100) NOT NULL DEFAULT 'N/S;',
  191. `KWOTA` varchar(16) NOT NULL DEFAULT 'N/S;',
  192. `NIEROZLICZONA_KWOTA` varchar(16) NOT NULL DEFAULT 'N/S;',
  193. PRIMARY KEY (`ID`),
  194. KEY `ID_USERS2` (`ID_USERS2`)
  195. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  196. */