ProjektyOdbiorKosztorys.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. <?php
  2. Lib::loadClass('RouteBase');
  3. Lib::loadClass('ProjectKosztorysSchema');
  4. Lib::loadClass('ProjectKosztorysModel');
  5. Lib::loadClass('ProjectKosztorysCennik');
  6. Lib::loadClass('UI');
  7. Lib::loadClass('Response');
  8. Lib::loadClass('Route_ProjektyKosztorysBase');
  9. class Route_UrlAction_ProjektyOdbiorKosztorys extends Route_ProjektyKosztorysBase {
  10. public $_model = array();
  11. public $_ID_ZASOB_ZAMOWIENIE = 24121;
  12. public function defaultAction() {
  13. // TODO: check if user is allowed to run this action
  14. UI::gora();
  15. if (1 != V::get('_print', '', $_GET)) UI::menu();
  16. try {
  17. $idProject = V::get('ID_PROJECT', 0, $_REQUEST, 'int');
  18. if (!$idProject) throw new Exception("Wrong param in 'ID_PROJECT' - expected integer!");
  19. $this->panel($idProject);
  20. $this->execPostTasks();
  21. $this->odbior($idProject);
  22. } catch (Exception $e) {
  23. UI::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
  24. }
  25. UI::dol();
  26. }
  27. public function odbior($idProject) {
  28. $idProject = (int)$idProject;
  29. if ($idProject <= 0) throw new Exception("Error Processing Request - wrong param id project");
  30. $idOrder = V::get('ID_ORDER', 0, $_REQUEST, 'int');
  31. $sqlTableZlecenia = "IN7_DZIENNIK_KORESP";
  32. // $sqlTableZlecenia = (DBG::isActive()) ? "IN7_DZIENNIK_KORESP__TEST_ZLECENIA" : "IN7_DZIENNIK_KORESP";
  33. // if (DBG::isActive()) {
  34. // UI::startContainer();
  35. // UI::alert('warning', "<b>Uwaga:</b> Zlecenie z testowej tabeli Koresp (IN7_DZIENNIK_KORESP__TEST_ZLECENIA)");
  36. // UI::endContainer();
  37. /*
  38. DROP TABLE IF EXISTS IN7_DZIENNIK_KORESP__TEST_ZLECENIA;
  39. CREATE TABLE IN7_DZIENNIK_KORESP__TEST_ZLECENIA
  40. select k.ID
  41. , k.ID_PROJECT
  42. , k.A_STATUS
  43. , k.K_DATA_OTRZYM_KORESP
  44. , k.K_DATA_OTRZYMANEJ_KORESP
  45. , k.K_OD_KOGO
  46. , k.OD_KOGO_ADRES
  47. , k.K_ZAWARTOS
  48. , k.CRM_LISTA_ZASOBOW_ID
  49. , k.K_TYP_KORESP
  50. from IN7_DZIENNIK_KORESP k
  51. where k.CRM_LISTA_ZASOBOW_ID = 24121
  52. and k.K_TYP_KORESP in('OUT','WEW') ;
  53. ALTER TABLE `IN7_DZIENNIK_KORESP__TEST_ZLECENIA` ADD PRIMARY KEY ( `ID` ) ;
  54. */
  55. // }
  56. $ordersRaw = DB::getPDO()->fetchAllByKey("
  57. select k.ID
  58. , k.ID_PROJECT
  59. , k.A_STATUS
  60. , k.K_DATA_OTRZYM_KORESP
  61. , k.K_DATA_OTRZYMANEJ_KORESP
  62. , k.K_OD_KOGO
  63. , k.OD_KOGO_ADRES
  64. , k.K_ZAWARTOS
  65. from {$sqlTableZlecenia} k
  66. where k.CRM_LISTA_ZASOBOW_ID = {$this->_ID_ZASOB_ZAMOWIENIE}
  67. and k.ID_PROJECT = {$idProject}
  68. and k.K_TYP_KORESP in('OUT','WEW')
  69. ", $key = 'ID');
  70. $orders = array();
  71. foreach ($ordersRaw as $r) {
  72. $item = array();
  73. $chkd = ($r['ID'] == $idOrder) ? ' checked="checked"' : '';
  74. $item['ID'] = '<label style="white-space:nowrap"><input style="margin:0" type="radio" onClick="this.form.submit()" name="ID_ORDER" value="'.$r['ID'].'" '.$chkd.'> '.$r['ID'].'</label>';
  75. $item['Projekt'] = $r['ID_PROJECT'];
  76. $item['Status'] = $r['A_STATUS'];
  77. $item['K_DATA_OTRZYM_KORESP'] = $r['K_DATA_OTRZYM_KORESP'];
  78. $item['K_DATA_OTRZYMANEJ_KORESP'] = $r['K_DATA_OTRZYMANEJ_KORESP'];
  79. $item['K_OD_KOGO'] = $r['K_OD_KOGO'];
  80. $item['OD_KOGO_ADRES'] = $r['OD_KOGO_ADRES'];
  81. $item['K_ZAWARTOS'] = $r['K_ZAWARTOS'];
  82. $orders[] = $item;
  83. }
  84. $order = ($idOrder > 0 && array_key_exists($idOrder, $ordersRaw)) ? $ordersRaw[$idOrder] : null;
  85. UI::startContainer();
  86. if (1 != V::get('_print', '', $_GET)) {
  87. UI::startTag('form', ['action'=>'', 'method'=>'get']);
  88. UI::tag('input', ['type'=>'hidden', 'name'=>'_route', 'value'=>'UrlAction_ProjektyOdbiorKosztorys']);
  89. UI::tag('input', ['type'=>'hidden', 'name'=>'ID_PROJECT', 'value'=>$idProject]);
  90. if (empty($orders)) UI::alert('info', "Brak zamówień w korespondencji dotyczących projektu {$idProject}");
  91. else UI::table(['caption'=>"Wybierz zamówienie", 'rows'=>$orders]);
  92. UI::endTag('form');
  93. UI::tag('hr');
  94. if (null != $order) {
  95. $printLink = Request::getPathUri() . "index.php?_route=UrlAction_ProjektyOdbiorKosztorys";
  96. $printLink .= "&ID_PROJECT={$idProject}";
  97. $printLink .= "&ID_ORDER={$order['ID']}";
  98. $printLink .= "&_print=1";
  99. UI::startTag('div', ['style'=>'text-align:right']);
  100. UI::tag('a', ['_target'=>'blank', 'href'=>$printLink], '<i class="glyphicon glyphicon-print"></i>'. "Drukuj zamówienie");
  101. UI::endTag('div');
  102. }
  103. }
  104. if (null !== $order) {
  105. $schema = ProjectKosztorysSchema::getSchema();// OK only 'config'
  106. $model = $this->getModel($idProject);
  107. $data = $this->getKosztorysData($idProject, $korespType = 'PROTOK_ODB', $idKoresp = $order['ID']);
  108. {
  109. $idCompany = null;
  110. $admin = false;
  111. $companyAdmin = null;
  112. $projCosts = null;
  113. $hidePrices = false;
  114. $model = $this->getModel($idProject);
  115. //DBG::table("subProjectList", $model->subProjectList, __CLASS__, __FUNCTION__, __LINE__);
  116. $schema = ProjectKosztorysSchema::getSchema();
  117. // $projCosts = $this->getProjectCostByCennik($idProject, $idCompany);
  118. //DBG::_(true, true, "projCosts", $projCosts, __CLASS__, __FUNCTION__, __LINE__);
  119. $viewLayerDataArgs = compact('idProject', 'idCompany', 'admin', 'companyAdmin', 'projCosts', 'hidePrices');
  120. UI::startTag('h1', ['style'=>'margin-bottom:1em']);
  121. echo "Protokół odbioru nr {$order['ID']}";
  122. UI::tag('small', ['style'=>"display:block"], $order['K_ZAWARTOS']);
  123. UI::endTag('h1');
  124. UI::setTitleJsTag("Protokół odbioru nr {$order['ID']} (Kosztorys projektu [{$idProject}])");
  125. UI::startTag('table', ['class'=>'table']);
  126. UI::startTag('tr');
  127. UI::tag('th', null, "Nr zamówienia");
  128. UI::tag('th', null, $schema['nr']);
  129. UI::tag('th', null, $schema['title']);
  130. UI::tag('th', null, $schema['ownerName']);
  131. // UI::tag('th', ['style'=>'text-align:right'], $schema['cost_total']);
  132. UI::endTag('tr');
  133. UI::startTag('tr');
  134. UI::tag('td', null, $order['ID']);
  135. UI::tag('td', null, $model->idProject);
  136. UI::tag('td', null, $model->title);
  137. UI::tag('td', null, $model->ownerName);
  138. // UI::tag('td', ['style'=>'text-align:right'], number_format($projCosts['cost_total'], 2, ',', ' '));
  139. UI::endTag('tr');
  140. UI::endTag('table');
  141. $this->viewLayersData($viewLayerDataArgs);
  142. }
  143. if (DBG::isActive()) DBG::nicePrint($data, '$data');
  144. // if (DBG::isActive()) DBG::nicePrint($schema, '$schema');
  145. // if (DBG::isActive()) DBG::nicePrint($model, '$model');
  146. }
  147. if (DBG::isActive()) UI::tag('hr');
  148. if (DBG::isActive()) $this->checkDBData();
  149. UI::endContainer();
  150. }
  151. public function checkDBData() {
  152. $schema = ProjectKosztorysSchema::getSchema();// OK only 'config'
  153. foreach ($schema['config']['layer'] as $idLayer => $layer) {
  154. // <div class="panel panel-default">
  155. // <div class="panel-heading">Panel heading without title</div>
  156. // <div class="panel-body">
  157. // Panel content
  158. // </div>
  159. // </div>
  160. UI::startTag('div', ['class'=>'panel panel-default']);
  161. UI::startTag('div', ['class'=>'panel-heading']);
  162. echo "Warstwa: {$layer['label']}";
  163. UI::endTag('div');// .panel-heading
  164. UI::startTag('div', ['class'=>'panel-body']);
  165. try {
  166. $rowsByIdOrder = DB::getPDO()->fetchAllByKey("
  167. select g.ID_KORESP_PROTOK_ODB, g.cnt
  168. -- , k.ID
  169. , k.A_STATUS
  170. , k.K_DATA_OTRZYM_KORESP
  171. , k.K_DATA_OTRZYMANEJ_KORESP
  172. , k.K_OD_KOGO
  173. , k.OD_KOGO_ADRES
  174. , k.K_ZAWARTOS
  175. , k.CRM_LISTA_ZASOBOW_ID
  176. , k.ID_PROJECT
  177. , k.K_TYP_KORESP
  178. from (
  179. select t.ID_KORESP_PROTOK_ODB, count(1) as cnt
  180. from {$layer['tabela_name']} t
  181. where t.ID_KORESP_PROTOK_ODB is not null and t.ID_KORESP_PROTOK_ODB > 0
  182. group by t.ID_KORESP_PROTOK_ODB
  183. ) g
  184. left join IN7_DZIENNIK_KORESP k on(k.ID = g.ID_KORESP_PROTOK_ODB)
  185. ", $key = 'ID_KORESP_PROTOK_ODB');
  186. } catch (Exception $e) {
  187. if ("SQLSTATE[42S22]: Column not found: 1054 Unknown column 't.ID_KORESP_PROTOK_ODB' in 'field list'" == $e->getMessage()) {
  188. UI::alert('danger', "Brak komórki `ID_KORESP_PROTOK_ODB` w tabeli `{$layer['tabela_name']}`");
  189. } else UI::alert('danger', $e->getMessage());
  190. }
  191. if (empty($rowsByIdOrder)) UI::tag('span', ['class'=>'text-warning'], "Brak wypełnionego pola ID_KORESP_PROTOK_ODB w tej warstwie");
  192. else {
  193. $rowsByIdOrder = array_map(function($r) {
  194. $item = [];
  195. $item['id'] = $r['ID_KORESP_PROTOK_ODB'];
  196. $item['ile'] = $r['cnt'];
  197. $item['K_OD_KOGO'] = $r['K_OD_KOGO'];
  198. $item['OD_KOGO_ADRES'] = $r['OD_KOGO_ADRES'];
  199. $item['K_ZAWARTOS'] = $r['K_ZAWARTOS'];
  200. $item['Zasób?'] = (int)$r['CRM_LISTA_ZASOBOW_ID'];
  201. $item['id Proj.'] = (int)$r['ID_PROJECT'];
  202. $item['typ'] = $r['K_TYP_KORESP'];
  203. $item['daty'] = "{$r['K_DATA_OTRZYM_KORESP']}<br>{$r['K_DATA_OTRZYMANEJ_KORESP']}";
  204. if ($item['Zasób?'] <= 0) $item['Zasób?'] .= '<br><span class="label label-danger" title="Brak numeru zasobu - powinien być 24121">Brak</span>';
  205. else if (24121 != $item['Zasób?']) $item['Zasób?'] .= '<br><span class="label label-danger" title="Błędny numer zasobu - powinien być 24121">Błąd</span>';
  206. if ($item['id Proj.'] <= 0) $item['id Proj.'] .= '<br><span class="label label-danger" title="Brak id projektu">Brak</span>';
  207. if ('OUT' != $item['typ']) $item['typ'] .= '<br><span class="label label-danger" title="Błędny typ korespondencji - powinien być OUT">Błąd</span>';
  208. return $item;
  209. }, $rowsByIdOrder);
  210. UI::table(['caption'=>"Pole ID_KORESP_PROTOK_ODB", 'rows'=>$rowsByIdOrder]);
  211. }
  212. UI::endTag('div');// .panel-body
  213. UI::endTag('div');
  214. }
  215. }
  216. }