ProjectKosztorysSchema.php 5.6 KB

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