ProjectKosztorysSchema.php 5.7 KB

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