kosztorys($idProject); } catch (Exception $e) { SE_Layout::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage()); } SE_Layout::dol(); } public function getArgsList() {// TODO: override UrlActionBase::getArgsList action $args = array(); $args[] = 'ID_PROJECT'; return $args; } public function reinstallAction() {// TODO: mv to UrlActionBase $jsonData = new stdClass(); $jsonData->type = 'success'; $jsonData->msg = 'Gotowe'; try { $this->reinstall(); } catch (Exception $e) { $jsonData->type = 'danger'; $jsonData->msg = $e->getMessage(); } echo json_encode($jsonData); } public function reinstall() {// TODO: mv to UrlActionBase /* required Zasoby tree structure - XML (parent rel in PARENT_ID field): */ /* required Zasoby tree structure: - required base structure [:ts_main_id] TYPESPECIALS [:action_id] URL_ACTION :url_action_name [:action_param_1_id] PARAM_IN :url_action_param_1_name - current function from schema [:main_db_id] (DATABASE_MYSQL, BAZA_DANYCH, DATABASE_POSTGRESQL) [:tbl_id] TABELA 'IN7_MK_BAZA_DYSTRYBUCJI' [:cell_id] KOMORKA 'ID' [:link_action_id] (ALIAS DO :action_id) URL_ACTION :url_action_name [:link_param_id] (ALIAS DO :cell_id) PARAM_IN :url_action_param_1_name :url_action_name = 'ProjektyKosztyWstepnychRobot' :url_action_param_1_name = 'ID_PROJECT' */ $flatConfig_main = array(); { $flatConfig_main[] = (object)array(// Zasob::assert(TYPESPECIALS) 'query' => " select z.ID from CRM_LISTA_ZASOBOW z where z.TYPE='TYPESPECIALS' and z.A_STATUS not in('DELETED') ", 'createTable' => 'CRM_LISTA_ZASOBOW', 'createArgs' => array('TYPE' => 'TYPESPECIALS', 'DESC' => 'Typespecials'), 'out' => array(':ts_main_id' => 'ID') ); $flatConfig_main[] = (object)array(// Zasob::assert(TYPESPECIALS/:url_action_name) 'query' => " select z.ID from CRM_LISTA_ZASOBOW z where z.PARENT_ID = :ts_main_id and z.TYPE = 'URL_ACTION' and z.DESC = :url_action_name and z.A_STATUS not in('DELETED') ", 'createTable' => 'CRM_LISTA_ZASOBOW', 'createArgs' => array('TYPE' => 'URL_ACTION', 'PARENT_ID' => ':ts_main_id', 'DESC' => ':url_action_name'), 'in' => array(':ts_main_id', ':url_action_name'), 'out' => array(':action_id' => 'ID') ); $flatConfig_main[] = (object)array(// Zasob::assert(TYPESPECIALS/:url_action_name/:url_action_param_1_name) 'query' => " select z.ID from CRM_LISTA_ZASOBOW z where z.PARENT_ID = :action_id and z.TYPE = 'PARAM_IN' and z.DESC = :url_action_param_1_name and z.A_STATUS not in('DELETED') ", 'createTable' => 'CRM_LISTA_ZASOBOW', 'createArgs' => array('TYPE' => 'PARAM_IN', 'PARENT_ID' => ':action_id', 'DESC' => ':url_action_param_1_name'), 'in' => array(':action_id', ':url_action_param_1_name'), 'out' => array(':action_param_1_id' => 'ID') ); } //DBG::_(true, true, "flatConfig_main", $flatConfig_main, __CLASS__, __FUNCTION__, __LINE__); $flatConfig_link_in_projekt = array(); { $flatConfig_link_in_projekt[] = (object)array(// Zasob::assert(default_db) 'query' => " select z.ID from CRM_LISTA_ZASOBOW z where z.ID = :main_db_id and z.TYPE in('DATABASE_MYSQL', 'BAZA_DANYCH', 'DATABASE_POSTGRESQL') and z.A_STATUS not in('DELETED') ", 'createTable' => 'CRM_LISTA_ZASOBOW', 'createArgs' => array('TYPE' => 'BAZA_DANYCH', 'DESC' => 'Baza danych'), 'in' => array(':main_db_id'), 'out' => array(':main_db_id' => 'ID') ); $flatConfig_link_in_projekt[] = (object)array(// Zasob::assert(default_db/IN7_MK_BAZA_DYSTRYBUCJI) 'query' => " select z.ID from CRM_LISTA_ZASOBOW z where z.PARENT_ID = :main_db_id and z.TYPE = 'TABELA' and z.DESC = 'IN7_MK_BAZA_DYSTRYBUCJI' and z.A_STATUS not in('DELETED') ", 'createTable' => 'CRM_LISTA_ZASOBOW', 'createArgs' => array('TYPE' => 'TABELA', 'PARENT_ID' => ':main_db_id', 'DESC' => 'IN7_MK_BAZA_DYSTRYBUCJI'), 'in' => array(':main_db_id'), 'out' => array(':tbl_id' => 'ID') ); $flatConfig_link_in_projekt[] = (object)array(// Zasob::assert(default_db/IN7_MK_BAZA_DYSTRYBUCJI/ID) 'query' => " select z.ID from CRM_LISTA_ZASOBOW z where z.PARENT_ID = :tbl_id and z.TYPE = 'KOMORKA' and z.DESC = 'ID' and z.A_STATUS not in('DELETED') ", 'createTable' => 'CRM_LISTA_ZASOBOW', 'createArgs' => array('TYPE' => 'KOMORKA', 'PARENT_ID' => ':tbl_id', 'DESC' => 'ID'), 'in' => array(':tbl_id'), 'out' => array(':cell_id' => 'ID') ); $flatConfig_link_in_projekt[] = (object)array(// Zasob::assert(default_db/IN7_MK_BAZA_DYSTRYBUCJI/:url_action_name) 'query' => " select z.ID from CRM_LISTA_ZASOBOW z where z.PARENT_ID = :tbl_id and z.ALIAS_ID = ':action_id' and z.TYPE = 'URL_ACTION' and z.DESC = ':url_action_name' and z.A_STATUS not in('DELETED') ", 'createTable' => 'CRM_LISTA_ZASOBOW', 'createArgs' => array('TYPE' => 'URL_ACTION', 'PARENT_ID' => ':tbl_id', 'ALIAS_ID' => ':action_id', 'DESC' => ':url_action_name'), 'in' => array(':tbl_id', ':action_id', ':url_action_name'), 'out' => array(':link_action_id' => 'ID') ); // [:link_param_id] (ALIAS DO :cell_id) PARAM_IN :url_action_param_1_name $flatConfig_link_in_projekt[] = (object)array(// Zasob::assert(default_db/IN7_MK_BAZA_DYSTRYBUCJI/:url_action_name/:url_action_param_1_name) 'query' => " select z.ID from CRM_LISTA_ZASOBOW z where z.PARENT_ID = :link_action_id and z.ALIAS_ID = ':cell_id' and z.TYPE = 'PARAM_IN' and z.DESC = ':url_action_param_1_name' and z.A_STATUS not in('DELETED') ", 'createTable' => 'CRM_LISTA_ZASOBOW', 'createArgs' => array('TYPE' => 'PARAM_IN', 'PARENT_ID' => ':link_action_id', 'ALIAS_ID' => ':cell_id', 'DESC' => ':url_action_param_1_name'), 'in' => array(':cell_id', ':link_action_id', ':url_action_param_1_name'), 'out' => array(':link_action_id' => 'ID') ); } //DBG::_(true, true, "flatConfig_link_in_projekt", $flatConfig_link_in_projekt, __CLASS__, __FUNCTION__, __LINE__); $flatConf = array_merge($flatConfig_main, $flatConfig_link_in_projekt); $knownArgs = array(); $knownArgs[':url_action_name'] = 'Test'; $knownArgs[':url_action_param_1_name'] = 'ID_PROJECT'; $knownArgs[':main_db_id'] = '36';// from DB::getDB()->getZasobId(); or DB::getPDO()->getZasobId(); $this->_debugFlatConfig($flatConf, $knownArgs); $pdo = DB::getPDO(); $args = $this->getArgsList(); $clsName = __CLASS__; $urlActionName = str_replace('Route_UrlAction_', '', $clsName); DBG::_(true, true, "reinstall class", __CLASS__, __CLASS__, __FUNCTION__, __LINE__); DBG::_(true, true, "reinstall funName", $urlActionName, __CLASS__, __FUNCTION__, __LINE__); DBG::_(true, true, "reinstall test", $args, __CLASS__, __FUNCTION__, __LINE__); $dbFunction = $this->fetchZasobInfo(); $usrLogin = User::getLogin(); {// check if URL_ACTION already exists if (!$dbFunction) throw new Exception("Brak id zasobu typu TYPESPECIALS - TODO: CREATE");// $this->createZasobTypespecials(); DBG::_(true, true, "dbFunction", $dbFunction, __CLASS__, __FUNCTION__, __LINE__); if ($dbFunction['action_id_is_null']) { $sth = $pdo->prepare(" insert into CRM_LISTA_ZASOBOW ( TYPE, PARENT_ID, `DESC`, A_RECORD_CREATE_AUTHOR, A_RECORD_CREATE_DATE ) values ( 'URL_ACTION', :ts_id, :url_action_name, 'system-by-{$usrLogin}', NOW() ) "); //$sth->bindValue('ts_id', $dbFunction['ts_id'], PDO::PARAM_INT); //$sth->bindValue('url_action_name', $urlActionName, PDO::PARAM_STR); $bindValues = array(); $bindValues['ts_id'] = array($dbFunction['ts_id'], PDO::PARAM_INT); $bindValues['url_action_name'] = $urlActionName; $pdo->bindValues($sth, $bindValues); DBG::_(true, true, "sql", $pdo->getRawSql($sth), __CLASS__, __FUNCTION__, __LINE__); $sth->execute(); $dbFunction = $this->fetchZasobInfo(); if (!$dbFunction || $dbFunction['action_id_is_null']) throw new Exception("Brak zasobu typu URL_ACTION, nie udało się go utworzyć!"); } } {// check params if (!empty($args)) { $todoArgs = array(); foreach ($args as $argName) { if (empty($dbFunction['url_params'])) { $todoArgs[$argName] = true; } else if (!array_key_exists($argName, $dbFunction['url_params'])) { $todoArgs[$argName] = true; } // OK PARAM_IN exists } $todoArgs = array_keys($todoArgs); DBG::_(true, true, "todoArgs", $todoArgs, __CLASS__, __FUNCTION__, __LINE__); if (!empty($todoArgs)) { $sqlValues = array(); foreach ($todoArgs as $argName) { $sqlValues[] = "( 'PARAM_IN', {$dbFunction['action_id']}, '{$argName}', 'system-by-{$usrLogin}', NOW() ) "; } $sqlValues = implode(", ", $sqlValues); $sth = $pdo->prepare(" insert into CRM_LISTA_ZASOBOW ( TYPE, PARENT_ID, `DESC`, A_RECORD_CREATE_AUTHOR, A_RECORD_CREATE_DATE ) values {$sqlValues} "); DBG::_(true, true, "sql", $pdo->getRawSql($sth), __CLASS__, __FUNCTION__, __LINE__); //$sth->execute(); $dbFunction = $this->fetchZasobInfo(); } if (empty($dbFunction['url_params'])) { throw new Exception("Brak zdefiniowanych parametrów, nie udało się ich utworzyć!"); } } } {// check links in tables // $info['links']['IN7_MK_BAZA_DYSTRYBUCJI'] = $linkInfo; if (empty($dbFunction['links']['IN7_MK_BAZA_DYSTRYBUCJI'])) throw new Exception("Brak poprawne wprowadzonej tabeli 'IN7_MK_BAZA_DYSTRYBUCJI' w drzewie zasobów!"); $projInfo = $dbFunction['links']['IN7_MK_BAZA_DYSTRYBUCJI']; /* [link_action_id] => [db_id] => 36 [tbl_id] => 636 [cell_id] => 763 [param1_id] => */ if (!$projInfo['link_action_id']) { $sth = $pdo->prepare(" insert into CRM_LISTA_ZASOBOW ( TYPE, PARENT_ID, ALIAS_ID, `DESC`, A_RECORD_CREATE_AUTHOR, A_RECORD_CREATE_DATE ) values ( 'URL_ACTION', {$projInfo['tbl_id']}, {$dbFunction['action_id']}, '{$urlActionName}', 'system-by-{$usrLogin}', NOW() ) "); //DBG::_(true, true, "sql", $pdo->getRawSql($sth), __CLASS__, __FUNCTION__, __LINE__); $sth->execute(); $dbFunction = $this->fetchZasobInfo(); $projInfo = $dbFunction['links']['IN7_MK_BAZA_DYSTRYBUCJI']; if (!$projInfo['link_action_id']) throw new Exception("Brak zainstalowanej akcji dla tabeli 'IN7_MK_BAZA_DYSTRYBUCJI' - nie udało się zainstalować"); } if (!$projInfo['param1_id']) {// TODO: get from params $sth = $pdo->prepare(" insert into CRM_LISTA_ZASOBOW ( TYPE, PARENT_ID, ALIAS_ID, `DESC`, A_RECORD_CREATE_AUTHOR, A_RECORD_CREATE_DATE ) values ( 'PARAM_IN', {$projInfo['link_action_id']}, {$projInfo['cell_id']}, 'ID_PROJECT', 'system-by-{$usrLogin}', NOW() ) "); $sth->execute(); $dbFunction = $this->fetchZasobInfo(); $projInfo = $dbFunction['links']['IN7_MK_BAZA_DYSTRYBUCJI']; if (!$projInfo['param1_id']) throw new Exception("Brak zainstalowanego parametru 1 w akcji dla tabeli 'IN7_MK_BAZA_DYSTRYBUCJI' - nie udało się zainstalować"); } } } public function _debugFlatConfig($flatConfig, $args = array()) { //DBG::_(true, true, "flatConfig", $flatConfig, __CLASS__, __FUNCTION__, __LINE__); echo '
';
		foreach ($flatConfig as $conf) {
			/*
				[query] => string
				[createTable] => srting - eg. CRM_LISTA_ZASOBOW
				[createArgs] => array - eg. [ TYPE: 'TYPESPECIALS', DESC: 'Typespecials' ]
				[in] => array - eg. [ ':ts_main_id', ':url_action_name' ]
				[out] => array - eg. [ ':ts_main_id': 'ID' ]
			*/
			echo "Zasob::assert({$conf->createTable}): " . json_encode($conf->createArgs) . " returns: " . json_encode($conf->out) . "\n";
		}
		echo '
'; echo '
';
		echo "DBG: Simulate iter loop:\n";
		$simulateGeneratedId = 1000;
		$i = 0; $limit = 10; $todoIdx = array(); $knownArgsMap = array();
		foreach ($flatConfig as $idx => $conf) $todoIdx[] = $idx;
		foreach ($args as $arg => $val) $knownArgsMap[$arg] = $val;
		for ($i = 0; $i < $limit; $i++) {
			echo ">> DBG loop({$i}):\n";
			$isExecuted = false;
			foreach ($todoIdx as $idx) {
				$conf = $flatConfig[$idx];
				/*
					[query] => string
					[createTable] => srting - eg. CRM_LISTA_ZASOBOW
					[createArgs] => array - eg. [ TYPE: 'TYPESPECIALS', DESC: 'Typespecials' ]
					[in] => array - eg. [ ':ts_main_id', ':url_action_name' ]
					[out] => array - eg. [ ':ts_main_id': 'ID' ]
				*/
				echo ">>>> Loop({$i}): idx({$idx}) Zasob::assert({$conf->createTable}): " . json_encode($conf->createArgs) . " returns: " . json_encode($conf->out) . "\n";
				$canExecute = true;
				foreach ($conf->in as $argName) {
					if (!array_key_exists($argName, $knownArgsMap)) {
						$canExecute = false;
					}
				}
				if ($canExecute) {
					// TODO: execute - $r = $this->_assertZasobConf($conf, $knownArgsMap);
					// fetch params out to $knownArgsMap
					foreach ($conf->out as $argName => $outFieldName) {
						$knownArgsMap[$argName] = $simulateGeneratedId++;// TODO: fetch from returned object ($r->{$outFieldName})
					}
					$todoIdx = array_diff($todoIdx, array($idx));// remove $idx from $todoIdx
					echo ">>>> Loop({$i}): knownArgsMap: " . json_encode($knownArgsMap) . " \n";
					$isExecuted = true;
				} else {
					echo ">>>> Loop({$i}): cannot execute conf [{$idx}] missing args: " . json_encode($conf->in) . " \n";
				}
			}
			if (!$isExecuted) {
				echo "DBG: Stop";
				if (empty($todoIdx)) {
					echo " - OK";
				} else {
					echo " - Error - TODO:\n";
					foreach ($todoIdx as $idx) {
						$conf = $flatConfig[$idx];
						echo "Zasob::assert({$conf->createTable}): " . json_encode($conf->createArgs) . " returns: " . json_encode($conf->out) . "\n";
					}
				}
				break;
			}
		}
		echo '
'; } public function fetchZasobInfo() { $pdo = DB::getPDO(); $args = $this->getArgsList(); $clsName = __CLASS__; $urlActionName = str_replace('Route_UrlAction_', '', $clsName); $sth = $pdo->prepare(" select zp.ID as ts_id , IF(z.ID is null, 1, 0) as action_id_is_null , z.ID as action_id , z.DESC as action_desc from CRM_LISTA_ZASOBOW zp left join CRM_LISTA_ZASOBOW z on(z.PARENT_ID = zp.ID and z.TYPE = 'URL_ACTION' and z.DESC = :url_action_name and z.A_STATUS not in('DELETED') ) where zp.TYPE = 'TYPESPECIALS' and zp.A_STATUS not in('DELETED') "); $sth->bindValue('url_action_name', $urlActionName); $sth->execute(); $info = $sth->fetch(); if (!$info) return $info; $info['url_params'] = array(); $info['links'] = array();// where action is installed - expected `IN7_MK_BAZA_DYSTRYBUCJI` if ($info['action_id'] > 0) { $sthParams = $pdo->prepare(" select z.ID as param_id , z.DESC as param_desc from CRM_LISTA_ZASOBOW z where z.TYPE = 'PARAM_IN' and z.A_STATUS not in('DELETED') and z.PARENT_ID = :url_action_id "); $sthParams->bindValue('url_action_id', $info['action_id']); $sthParams->execute(); $urlParams = array(); $rawUrlParams = $sthParams->fetchAll(); foreach ($rawUrlParams as $urlParam) { $urlParams[$urlParam['param_desc']] = $urlParam; } $info['url_params'] = $urlParams; } { $main_db_id = $pdo->getZasobId(); $sth_dbInfo = $pdo->prepare(" select za.id as link_action_id , zd.id as db_id , zt.id as tbl_id , zi.id as cell_id , zp1.id as param1_id -- for every param from CRM_LISTA_ZASOBOW zt join CRM_LISTA_ZASOBOW zd on(zd.ID = zt.PARENT_ID and zd.TYPE in('DATABASE_MYSQL', 'BAZA_DANYCH', 'DATABASE_POSTGRESQL') and zd.ID = {$main_db_id} ) join CRM_LISTA_ZASOBOW zi on(zi.PARENT_ID = zt.ID and zi.TYPE = 'KOMORKA' and zi.DESC = 'ID' ) left join CRM_LISTA_ZASOBOW za on(za.PARENT_ID = zt.ID and za.TYPE = 'URL_ACTION' and za.ALIAS_ID = {$info['action_id']} ) -- TODO: for every param: left join CRM_LISTA_ZASOBOW zp1 on(zp1.PARENT_ID = za.ID and zp1.TYPE = 'PARAM_IN' and zp1.ALIAS_ID = zi.id and zp1.DESC = 'ID_PROJECT' ) where zt.TYPE = 'TABELA' and zt.A_STATUS not in('DELETED') and zt.DESC = 'IN7_MK_BAZA_DYSTRYBUCJI' "); DBG::_(true, true, "dbInfo query", $pdo->getRawSql($sth_dbInfo), __CLASS__, __FUNCTION__, __LINE__); $sth_dbInfo->execute(); $linkInfo = $sth_dbInfo->fetch(); if ($linkInfo) { $info['links']['IN7_MK_BAZA_DYSTRYBUCJI'] = $linkInfo; } } return $info; } public function kosztorysXmlAction() { $idProject = 1921; $schema = $this->_getKosztorysSchema(); $data = $this->_fetchKosztorysData($idProject); //DBG::_(true, true, "XMLWriter", class_exists('XMLWriter'), __CLASS__, __FUNCTION__, __LINE__); //header('Content-type: application/xml; charset=utf-8'); header('Content-type: text/plain; charset=utf-8'); $xmlWriter = new XMLWriter(); $xmlWriter->openUri('php://output'); $xmlWriter->setIndent(true); if ($xmlWriter) { $xmlWriter->startDocument('1.0','UTF-8'); //$xmlWriter->startElementNS(null, 'kosztorysy', 'https://biuro.biall-net.pl/wfs');// adds @xmlns=... $xmlWriter->startElement('kosztorysy'); $xmlWriter->writeAttribute('targetNamespace', 'https://biuro.biall-net.pl/wfs'); $xmlWriter->writeAttributeNS('xmlns', 'p5', 'http://www.w3.org/2000/xmlns/', 'https://biuro.biall-net.pl/wfs'); for ($i = 1; $i <= 10; $i++) { $idProject += 1; $schema = $this->_getKosztorysSchema(); $data = $this->_fetchKosztorysData($idProject); $xmlWriter->startElement('kosztorys'); $xmlWriter->startElement('projekt'); $xmlWriter->writeAttribute('id', $idProject); $xmlWriter->startElement('projekt'); $xmlWriter->text("TODO L." . __LINE__); $xmlWriter->endElement(); $xmlWriter->endElement(); $xmlWriter->endElement(); } /* $memXmlWriter = new XMLWriter(); $memXmlWriter->openMemory(); $memXmlWriter->setIndent(true); for ($i = 1; $i <= 10; $i++) { $idProject += 1; $schema = $this->_getKosztorysSchema(); $data = $this->_fetchKosztorysData($idProject); $memXmlWriter->startElement('kosztorys'); $memXmlWriter->writeAttribute('id', $idProject); $memXmlWriter->writeAttributeNS('p5', 'typeName', 'https://biuro.biall-net.pl/wfs', 'Kosztorys'); $memXmlWriter->text('book_'.$i); $memXmlWriter->endElement(); if ($i % 5 == 0) { $batchXmlString = $memXmlWriter->outputMemory(true); $xmlWriter->writeRaw($batchXmlString); } } $memXmlWriter->flush(); unset($memXmlWriter); */ $xmlWriter->endElement(); $xmlWriter->endDocument(); } } public function kosztorys($idProject) { $schema = $this->_getKosztorysSchema(); $data = $this->_fetchKosztorysData($idProject); ?>

Kosztorys wstępnych robót telekomunikacyjnych

$layerConf) : ?>

:

$label) : ?> $label) : ?>
$label) : ?> $label) : ?>
0', "data", $data, __CLASS__, __FUNCTION__, __LINE__); DBG::_('DBG', '>0', "schema", $schema, __CLASS__, __FUNCTION__, __LINE__); } public function _getKosztorysSchema() { $schema['nr'] = "Nr projektu"; $schema['title'] = "Tytuł projektu"; $schema['owner_name'] = "Osoba prowadząca"; $schema['cost_total'] = "Szacowany koszt projektu [zł]"; $schema['sub_costs'] = array(); { $layerConf = array(); $layerConf['label'] = "Wykop"; $layerConf['_agr_fields_to_cols'] = array(); $layerConf['_agr_fields_to_cols']['ilosc'] = "ilość [m]"; $layerConf['_agr_fields_to_cols']['cena'] = "podstawowa cena [zł/m]"; $layerConf['_agr_fields_to_cols']['koszt'] = "koszt [zł]"; $schema['sub_costs']['Rozdzielcza_Wykop_przedmiar_na_mikrorurki'] = $layerConf; } { $layerConf = array(); $layerConf['label'] = "Mikrokanalizacja do klienta"; $layerConf['_agr_fields_to_cols'] = array(); $layerConf['_agr_fields_to_cols']['ilosc'] = "ilość [m]"; $layerConf['_agr_fields_to_cols']['cena'] = "podstawowa cena [zł/m]"; $layerConf['_agr_fields_to_cols']['koszt'] = "koszt [zł]"; $schema['sub_costs']['Rozdzielcza_Mikrokanalizacja_do_klienta'] = $layerConf; } { $layerConf = array(); $layerConf['label'] = "Przeciski"; $layerConf['_agr_fields_to_cols'] = array(); $layerConf['_agr_fields_to_cols']['ilosc'] = "ilość [m]"; $layerConf['_agr_fields_to_cols']['cena'] = "podstawowa cena [zł/m]"; $layerConf['_agr_fields_to_cols']['koszt'] = "koszt [zł]"; $schema['sub_costs']['Rozdzielcza_Przeciski_110mm'] = $layerConf; } { $layerConf = array(); $layerConf['label'] = "Zabruki"; $layerConf['_agr_fields_to_cols'] = array(); $layerConf['_agr_fields_to_cols']['ilosc'] = "ilość [m]"; $layerConf['_agr_fields_to_cols']['cena'] = "podstawowa cena [zł/m]"; $layerConf['_agr_fields_to_cols']['koszt'] = "koszt [zł]"; $schema['sub_costs']['Rozdzielcza_Zabruki'] = $layerConf; } { $layerConf = array(); $layerConf['label'] = "Światłowód"; $layerConf['_agr_fields_to_cols'] = array(); $layerConf['_agr_fields_to_cols']['ilosc'] = "ilość [m]"; $layerConf['_agr_fields_to_cols']['cena'] = "podstawowa cena [zł/m]"; $layerConf['_agr_fields_to_cols']['koszt'] = "koszt [zł]"; { $layerSubCostsConf = array(); $layerSubCostsConf['group_by_field'] = 'wlokien_j'; $layerSubCostsConf['sql_agr_func'] = array(); $layerSubCostsConf['sql_agr_func']['sum_dlugosc'] = array();//sum(Dlugosc) as sum_dlugosc $layerSubCostsConf['sql_agr_func']['sum_dlugosc']['func'] = 'sum'; $layerSubCostsConf['sql_agr_func']['sum_dlugosc']['field'] = 'Dlugosc'; $layerSubCostsConf['labels'] = array(); $layerSubCostsConf['labels']['cost_type'] = "rodzaj kosztu"; $layerSubCostsConf['labels']['sum_dlugosc'] = "suma długości"; $layerConf['sub_costs'] = $layerSubCostsConf; } $schema['sub_costs']['Rozdzielcza_Kabel_Swiatlowodowy_wsg84'] = $layerConf; } { $layerConf = array(); $layerConf['label'] = "Studnie - TODO (Lokalizacje)"; $layerConf['_agr_fields_to_cols'] = array(); $schema['sub_costs']['__STUDNIE__'] = $layerConf; } { $layerConf = array(); $layerConf['label'] = "Rury osłonowe - TODO"; $layerConf['_agr_fields_to_cols'] = array(); $schema['sub_costs']['Rura_oslonowa_rozdzielcza_magistralna'] = $layerConf; } { $layerConf = array(); $layerConf['label'] = "Pakiet mikrorurek - TODO"; $layerConf['_agr_fields_to_cols'] = array(); $schema['sub_costs']['__PAKIET_MIKRORUREK__'] = $layerConf; } { $layerConf = array(); $layerConf['label'] = "Koszty dodatkowe - TODO"; $layerConf['_agr_fields_to_cols'] = array(); $schema['sub_costs']['__KOSZTY_DODATKOWE__'] = $layerConf; } return $schema; } public function _fetchKosztorysData($idProject) { $project = array(); $schema = $this->_getKosztorysSchema(); if(0){// TEST join by ogc $exampleOgcJoin = << p/ID {$idProject} u/ADM_ACCOUNT p/L_APPOITMENT_USER OGC_JOIN; } $pdo = DB::getPDO(); { $sth = $pdo->prepare(" select p.ID, p.M_DIST_DESC, p.L_APPOITMENT_USER , p.koszt_wspolny , p.koszt_na_budynek , p.koszt_na_mieszkanie , p.Agr_Rozdzielcza_Wykop_przedmiar_na_mikrorurki_ilosc , p.Agr_Rozdzielcza_Wykop_przedmiar_na_mikrorurki_cena , p.Agr_Rozdzielcza_Wykop_przedmiar_na_mikrorurki_koszt , p.Agr_Rozdzielcza_Mikrokanalizacja_do_klienta_ilosc , p.Agr_Rozdzielcza_Mikrokanalizacja_do_klienta_cena , p.Agr_Rozdzielcza_Mikrokanalizacja_do_klienta_koszt , p.Agr_metrow_mikrorurek_5szt , p.Agr_metrow_mikrorurek_5szt_cena , p.Agr_Rozdzielcza_Przeciski_110mm_ilosc , p.Agr_Rozdzielcza_Przeciski_110mm_cena , p.Agr_Rozdzielcza_Przeciski_110mm_koszt , p.Agr_Rozdzielcza_Zabruki_ilosc , p.Agr_Rozdzielcza_Zabruki_cena , p.Agr_Rozdzielcza_Zabruki_koszt , p.Agr_Rozdzielcza_wezly_ilosc , p.Agr_Rozdzielcza_wezly_cena , p.Agr_Rozdzielcza_wezly_koszt , p.Agr_Rozdzielcza_koszty_dodatkowe_wsg84 , p.Agr_Rozdzielcza_rurociag_wsg84_ilosc , p.Agr_Rozdzielcza_rurociag_wsg84_cena , p.Agr_Rozdzielcza_rurociag_wsg84_koszt , p.Agr_Rozdzielcza_Kabel_Swiatlowodowy_wsg84_ilosc , p.Agr_Rozdzielcza_Kabel_Swiatlowodowy_wsg84_cena , p.Agr_Rozdzielcza_Kabel_Swiatlowodowy_wsg84_koszt , p.Agr_USERS2_MARKETING_ilosc , p.Agr_USERS2_MARKETING_cena , p.Agr_USERS2_MARKETING_koszt , p.Agr_BUILDINGS_ilosc from IN7_MK_BAZA_DYSTRYBUCJI p where p.ID = :ID_PROJECT -- TODO: check perms! "); $sth->bindValue('ID_PROJECT', $idProject, PDO::PARAM_INT); $sth->execute(); $projectList = $sth->fetchAll(); if (empty($projectList)) throw new Exception("404 - Project Not Found"); $projectRaw = reset($projectList); } { $project['nr'] = $projectRaw['ID']; $project['title'] = $projectRaw['M_DIST_DESC']; $project['owner_name'] = $this->fetchUserName($projectRaw['L_APPOITMENT_USER']); $project['cost_total'] = $projectRaw['koszt_wspolny']; foreach ($schema['sub_costs'] as $layerName => $layerConf) { $values = array(); foreach ($layerConf['_agr_fields_to_cols'] as $fldName => $label) { $values[$fldName] = V::get("Agr_{$layerName}_{$fldName}", '', $projectRaw); } $project['sub_costs'][$layerName] = $values; if (!empty($layerConf['sub_costs'])) { $sub_costs = array(); { $groupByField = $layerConf['sub_costs']['group_by_field']; $sqlFields = array(); foreach ($layerConf['sub_costs']['sql_agr_func'] as $fldName => $funcConf) { $sqlFuncName = $funcConf['func']; $sqlFuncField = $funcConf['field']; $sqlFields[] = "{$sqlFuncName}(l.{$sqlFuncField}) as {$fldName}"; } $sqlFields = implode(", ", $sqlFields); $sth = $pdo->prepare(" select l.{$groupByField} as cost_type , $sqlFields from Rozdzielcza_Kabel_Swiatlowodowy_wsg84 l where l.ID_PROJECT = :ID_PROJECT group by l.{$groupByField} "); $sth->bindValue('ID_PROJECT', $idProject, PDO::PARAM_INT); $sth->execute(); $sub_costs = $sth->fetchAll(); } $project['sub_costs'][$layerName]['sub_costs'] = $sub_costs; } } } $project['_raw'] = $projectRaw; return $project; } public function fetchUserName($userLogin) { $userName = $userLogin; // TODO: sql from ADMIN_USERS return $userName; } }