ProjectKosztorysSchema.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. Lib::loadClass('UI');
  3. class ProjectKosztorysSchema {
  4. static $ID_ZASOB_KOSZTORYS_CONFIG = 22444;
  5. public static function getSchema($showErrors = false) {
  6. static $_schema = null;
  7. if (null !== $_schema) return $_schema;
  8. /*
  9. 22444 INNE Kosztorys - zasoby
  10. 22445 INNE Kabel 2J do wdmuchiwania w mikrorurce 7/4 mm z wdmuchiwaniem
  11. 22446 INNE Kabel 4J do wdmuchiwania w mikrorurce 7/4 mm z wdmuchiwaniem
  12. ... Labels for order form
  13. 22460 TABELA Światłowód (Alias do [20225] TABELA default_db/Rozdzielcza_Kabel_Swiatlowodowy_wsg84)
  14. 22461 20299 KOMORKA ZASOB (Alias do [20299] KOMORKA OznKabla)
  15. 22462 20292 KOMORKA JEDNOSTKA_METR ilość [m] (Alias do [20292] KOMORKA Dlugosc)
  16. ... where to search for data
  17. */
  18. {
  19. $pdo = DB::getPDO();
  20. $idZasobConf = self::$ID_ZASOB_KOSZTORYS_CONFIG;
  21. $sth = $pdo->prepare("
  22. select z.ID, z.TYPE, z.DESC, z.ALIAS_ID
  23. , c.ID as c_ID, c.TYPE as c_TYPE, c.DESC as c_DESC, c.ALIAS_ID as c_ALIAS_ID
  24. , a.ID as a_ID, a.TYPE as a_TYPE, a.DESC as a_DESC, a.ALIAS_ID as a_ALIAS_ID
  25. , za.ID as za_ID, za.TYPE as za_TYPE, za.DESC as za_DESC, za.ALIAS_ID as za_ALIAS_ID
  26. from CRM_LISTA_ZASOBOW z
  27. left join CRM_LISTA_ZASOBOW c on(c.PARENT_ID = z.ID)
  28. left join CRM_LISTA_ZASOBOW a on(a.ID = z.ALIAS_ID and z.ALIAS_ID > 0)
  29. left join CRM_LISTA_ZASOBOW za on(za.ID = c.ALIAS_ID and c.ALIAS_ID > 0)
  30. where z.PARENT_ID = {$idZasobConf} -- TODO how to find ID, Typespecial with link (maybe Child of table IN7_MK_BAZA_DYSTRYBUCJI)
  31. ");
  32. $sth->execute();
  33. $rawConf = $sth->fetchAll();
  34. $conf = array();
  35. $conf['type'] = array();
  36. $conf['layer'] = array();
  37. foreach ($rawConf as $z) {
  38. if (('INNE' == $z['TYPE']) or ('TYP_KOSZTU' == $z['TYPE']) ) {
  39. // if (!array_key_exists($z['ID'], $conf['type'])) {
  40. $conf['type'][$z['ID']] = $z['DESC']; //? TODO to nie psuje przypadkiem, jak ten sam typ jest uzyty dla paru tabel?
  41. // }
  42. }
  43. }
  44. foreach ($rawConf as $z) {
  45. if ('TABELA' == $z['TYPE']) {
  46. if (!array_key_exists($z['ID'], $conf['layer'])) {
  47. $layer = array();
  48. $layer['label'] = $z['DESC'];
  49. $layer['tabela_id'] = $z['a_ID'];
  50. $layer['tabela_name'] = $z['a_DESC'];
  51. $layer['jednostka'] = '';
  52. $layer['jednostka_zasob_id'] = array();
  53. $layer['zasob_type'] = '';
  54. $layer['zasob_field'] = '';
  55. $layer['zasob_id'] = '';
  56. $layer['ilosc_field'] = '';
  57. $layer['type'] = array();
  58. $conf['layer'][$z['ID']] = $layer;
  59. }
  60. if ($z['c_ID'] > 0) {
  61. if ('JEDNOSTKA_' == substr($z['c_DESC'], 0, 10)) {
  62. $layer = $conf['layer'][$z['ID']];
  63. $layer['jednostka'] = substr($z['c_DESC'], 10);
  64. $layer['ilosc_field'] = $z['za_DESC'];
  65. $layer['zasob_id'] = $z['za_ID'];
  66. $conf['layer'][$z['ID']] = $layer;
  67. }
  68. /*
  69. [za_ID] => 20299
  70. [za_TYPE] => KOMORKA
  71. [za_DESC] => OznKabla
  72. [za_ALIAS_ID] => 0
  73. */
  74. switch ($z['c_DESC']) {
  75. case 'ZASOB': { // TODO: to remove - replace with 'ID_ZASOB'
  76. if ($z['za_ID'] > 0) {
  77. $layer = $conf['layer'][$z['ID']];
  78. $layer['zasob_type'] = $z['c_DESC'];
  79. $layer['zasob_field'] = $z['za_DESC'];
  80. $layer['zasob_id'] = $z['za_ID'];
  81. $conf['layer'][$z['ID']] = $layer;
  82. }
  83. } break;
  84. case 'ZASOB_ID': {
  85. if ($z['za_ID'] > 0) {
  86. $layer = $conf['layer'][$z['ID']];
  87. $layer['zasob_type'] = $z['c_DESC'];
  88. $layer['zasob_id'] = $z['za_ID'];
  89. $layer['zasob_label'] = $z['za_DESC'];
  90. $conf['layer'][$z['ID']] = $layer;
  91. $conf['layer'][$z['ID']]['type'][$z['za_ID']] = $z['za_DESC'];
  92. }
  93. } break;
  94. case 'ID_ZASOB': { // pole na ID zasobu - opis wg drzewa zasobów - mapa wartosći [ ID => nazwa z drzewa ]
  95. if ($z['za_ID'] > 0) {
  96. $layer = $conf['layer'][$z['ID']];
  97. $layer['zasob_type'] = $z['c_DESC'];
  98. $layer['zasob_id'] = $z['za_ID'];
  99. $layer['zasob_field'] = $z['za_DESC'];
  100. $conf['layer'][$z['ID']] = $layer;
  101. $conf['layer'][$z['ID']]['type'][$z['za_ID']] = $z['za_DESC'];
  102. }
  103. } break;
  104. case 'TYPE': {
  105. //DBG::_(true, true, "z", $z, __CLASS__, __FUNCTION__, __LINE__);
  106. if (empty($z['c_ALIAS_ID'])) throw new Exception("Schema error - brak ALIAS_ID dla typu");
  107. if (empty($conf['type'][$z['za_ID']])) ;// TODO: throw Exception("Brak typu w conf['type']")
  108. $conf['layer'][$z['ID']]['type'][$z['za_ID']] = $z['za_DESC'];
  109. } break;
  110. case 'TYPE_SZTUKA': {
  111. //DBG::_(true, true, "z", $z, __CLASS__, __FUNCTION__, __LINE__);
  112. if (empty($z['c_ALIAS_ID'])) throw new Exception("Schema error - brak ALIAS_ID dla typu");
  113. if (empty($conf['type'][$z['za_ID']])) ;// TODO: throw Exception("Brak typu w conf['type']")
  114. $conf['layer'][$z['ID']]['jednostka_zasob_id'][$z['za_ID']] = 'SZTUKA';
  115. } break;
  116. }
  117. }
  118. }
  119. }
  120. foreach ($rawConf as $z) {
  121. if (('INNE' == $z['TYPE']) or ('TYP_KOSZTU' == $z['TYPE'])) {
  122. } else if ('TABELA' == $z['TYPE']) {
  123. } else {
  124. if ($showErrors) UI::alert('warnig', "BUG: unimplemented type '{$z['TYPE']}' for zasob nr: {$z['ID']}");
  125. }
  126. }
  127. DBG::_('DBG', '>1', "config", $conf, __CLASS__, __FUNCTION__, __LINE__);
  128. if ($showErrors) {// validate schema - show warnings
  129. foreach ($conf['layer'] as $layer) {
  130. try {
  131. if (empty($layer['tabela_id'])) throw new Exception("brak zdefiniowanego aliasa do tabeli dla warstwy {$layer['label']}");
  132. if (empty($layer['jednostka'])) throw new Exception("brak jednostki dla warstwy [{$layer['tabela_id']}] {$layer['label']}");
  133. switch ($layer['jednostka']) {
  134. case 'METR': break;
  135. case 'SZTUKA': break;
  136. default: throw new Exception("Nieznana jednostka '{$layer['jednostka']}' dla warstwy [{$layer['tabela_id']}] {$layer['label']}");
  137. }
  138. } catch (Exception $e) {
  139. UI::alert('warning', $e->getMessage());
  140. }
  141. }
  142. }
  143. DBG::_('DBG', '>2', "rawConf", $rawConf, __CLASS__, __FUNCTION__, __LINE__);
  144. $_schema['config'] = $conf;
  145. }
  146. $_schema['nr'] = "Nr projektu";
  147. $_schema['title'] = "Tytuł projektu";
  148. $_schema['ownerName'] = "Osoba prowadząca";
  149. $_schema['cost_total'] = "Szacowany koszt projektu [zł]";
  150. return $_schema;
  151. }
  152. public static function getLayerJednostka($idLayer) {
  153. $schema = self::getSchema();
  154. if (empty($schema['config']['layer'][$idLayer])) return null;// TODO: throw exception?
  155. return $schema['config']['layer'][$idLayer]['jednostka'];
  156. }
  157. }