Piotr Labudda 9 роки тому
батько
коміт
428d88b919

+ 17 - 0
SE/schema/gui/company/biuro_pro_netmedia_pl/default_db.crm_lista_zasobow_orders.php

@@ -0,0 +1,17 @@
+<?php
+
+class Schema__biuro_pro_netmedia_pl__default_db__crm_lista_zasobow_orders extends Schema__Core__default_db__crm_lista_zasobow_orders {
+
+	public function initTypes() {
+		parent::initTypes();
+		$this->_types['NETTO'] = 'p5:alias';
+		$this->_params['NETTO'] = [
+			'type' => 'sql_table_alias',
+			'local_join_key' => 'ID',
+			'remote_table_name' => 'CRM_LISTA_ZASOBOW_ORDERS_summary_view',
+			'remote_join_key' => 'ID',
+			'remote_column_value' => 'SUM_POS',
+		];
+	}
+
+}

+ 5 - 0
SE/schema/gui/core/default_db.crm_lista_zasobow_orders.php

@@ -0,0 +1,5 @@
+<?php
+
+class Schema__Core__default_db__crm_lista_zasobow_orders extends Schema_TableBase {
+
+}

+ 48 - 39
SE/se-lib/Route/UrlAction/ProjektyProNetMediaZamZlec.php

@@ -118,6 +118,54 @@ class Route_UrlAction_ProjektyProNetMediaZamZlec extends RouteBase {// TODO: Url
 			}
 			}
 		}
 		}
 
 
+		try {
+			DB::getPDO()->execSql("
+				CREATE OR REPLACE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `CRM_LISTA_ZASOBOW_ORDERS_summary_view` AS
+					SELECT o.ID
+						, SUM( COALESCE(f.OFFER_QUANTITY, 0) * COALESCE(f.OFFER_PRICE_PER_UNIT, 0) ) as SUM_POS
+						, COUNT(1) as COUNT_POS
+						, o.`ID_COMPANIES`
+						, IF(o.`ID_COMPANIES` > 0,
+								(select c.P_NAME from COMPANIES c where c.ID = o.ID_COMPANIES limit 1)
+								, '') as Kontrahent
+						, o.`ID_PROJECT`
+						, o.`ID_PROJECT_path`
+						, o.`A_RECORD_CREATE_DATE`
+						, o.`A_RECORD_CREATE_AUTHOR`
+						, o.`SYNC_SQIX_STATUS`
+						, o.`A_RECORD_UPDATE_DATE`
+						, o.`A_RECORD_UPDATE_AUTHOR`
+						, o.`L_APPOITMENT_DATE`
+						, o.`L_APPOITMENT_USER`
+						, o.`L_APPOITMENT_PERIOD`
+						, o.`L_APPOITMENT_INFO`
+						, o.`L_APPOITMENT_TYPE`
+						, o.`A_STATUS`
+						, o.`A_STATUS_INFO`
+						, o.`A_ADM_COMPANY`
+						, o.`A_CLASSIFIED`
+				--		, o.`NR`
+						, o.`COMPANY_NIP`
+						, o.`COMPANY_NAME`
+						, o.`COMPANY_ADDRESS`
+						, o.`OFFER_DATE`
+						, o.`OFFER_NR`
+						, o.`ORDER_TYPE`
+						, o.`DELIVERY_DATE`
+						, o.`EXECUTION_START_DATE`
+						, o.`EXECUTION_END_DATE`
+						, o.`CASH_PENALTY`
+						, o.`LOCATION`
+						, o.`NOTES`
+					FROM `CRM_LISTA_ZASOBOW_ORDERS` o
+						LEFT JOIN `CRM_LISTA_ZASOBOW_OFFERS` f on(f.ID_ORDER = o.ID and (f.A_STATUS is null or f.A_STATUS != 'DELETED'))
+					GROUP BY o.`ID`
+			");
+		} catch (Exception $e) {
+			UI::alert('danger', $e->getMessage());
+			DBG::log($e);
+		}
+
 		UI::alert('info', "Koniec");
 		UI::alert('info', "Koniec");
 		UI::dol();
 		UI::dol();
 	}
 	}
@@ -1707,45 +1755,6 @@ CREATE TABLE IF NOT EXISTS `CRM_LISTA_ZASOBOW_ORDERS_HIST` (
   KEY `ID_USERS2` (`ID_USERS2`)
   KEY `ID_USERS2` (`ID_USERS2`)
 ) ENGINE=MyISAM  DEFAULT CHARSET=latin2;
 ) ENGINE=MyISAM  DEFAULT CHARSET=latin2;
 
 
-CREATE VIEW `CRM_LISTA_ZASOBOW_ORDERS_summary_view` AS
-	SELECT o.`ID`
-		, o.`ID_COMPANIES`
-		, o.`ID_PROJECT`
-		, o.`ID_PROJECT_path`
-		, o.`A_RECORD_CREATE_DATE`
-		, o.`A_RECORD_CREATE_AUTHOR`
-		, o.`SYNC_SQIX_STATUS`
-		, o.`A_RECORD_UPDATE_DATE`
-		, o.`A_RECORD_UPDATE_AUTHOR`
-		, o.`L_APPOITMENT_DATE`
-		, o.`L_APPOITMENT_USER`
-		, o.`L_APPOITMENT_PERIOD`
-		, o.`L_APPOITMENT_INFO`
-		, o.`L_APPOITMENT_TYPE`
-		, o.`A_STATUS`
-		, o.`A_STATUS_INFO`
-		, o.`A_ADM_COMPANY`
-		, o.`A_CLASSIFIED`
-		, o.`NR`
-		, o.`COMPANY_NIP`
-		, o.`COMPANY_NAME`
-		, o.`COMPANY_ADDRESS`
-		, o.`OFFER_DATE`
-		, o.`OFFER_NR`
-		, o.`ORDER_TYPE`
-		, o.`DELIVERY_DATE`
-		, o.`EXECUTION_START_DATE`
-		, o.`EXECUTION_END_DATE`
-		, o.`CASH_PENALTY`
-		, o.`LOCATION`
-		, o.`NOTES`
-		, SUM(NETTO_VALUE_TO_PAY) as SUM_POS
-		, COUNT(1) as COUNT_POS
-	FROM `CRM_LISTA_ZASOBOW_ORDERS` o
-		LEFT JOIN `CRM_LISTA_ZASOBOW_OFFERS` f on(f.ID_ORDER = o.ID)
-	GROUP BY o.`ID`
-;
-
 -- ADD ORDER_NR to KORESP
 -- ADD ORDER_NR to KORESP
 ALTER TABLE `IN7_DZIENNIK_KORESP_HIST` ADD `ORDER_NR` VARCHAR(32) NOT NULL DEFAULT 'N/S;';
 ALTER TABLE `IN7_DZIENNIK_KORESP_HIST` ADD `ORDER_NR` VARCHAR(32) NOT NULL DEFAULT 'N/S;';
 ALTER TABLE `IN7_DZIENNIK_KORESP` ADD `ORDER_NR` VARCHAR(32) NOT NULL DEFAULT '';
 ALTER TABLE `IN7_DZIENNIK_KORESP` ADD `ORDER_NR` VARCHAR(32) NOT NULL DEFAULT '';

+ 67 - 0
SE/se-lib/TableAjax.php

@@ -6105,6 +6105,73 @@ jQuery(document).ready(function(){
 				}
 				}
 			}
 			}
 		}
 		}
+		{
+			if(V::get('DBG', '', $_GET)){$jsonData->__DBG__ = [];}
+			$p5Alias = [];
+			foreach ((array)$jsonData->cols as $fieldName => $conf) {
+				if ('p5:alias' == V::get('xsdType', '', $conf)) {
+					if(V::get('DBG', '', $_GET)){$jsonData->__DBG__[$fieldName] = $conf;}
+					$aliasType = $acl->getXsdFieldParam($fieldName, 'type');// 'type' => 'sql_table_alias',
+					if ('sql_table_alias' == $aliasType) {
+						$p5Alias[$fieldName] = (array)$conf;
+						$p5Alias[$fieldName]['local_join_key'] = $acl->getXsdFieldParam($fieldName, 'local_join_key');// 'local_join_key' => 'ID',
+						$p5Alias[$fieldName]['remote_table_name'] = $acl->getXsdFieldParam($fieldName, 'remote_table_name');// 'remote_table_name' => 'CRM_LISTA_ZASOBOW_ORDERS_summary_view',
+						$p5Alias[$fieldName]['remote_join_key'] = $acl->getXsdFieldParam($fieldName, 'remote_join_key');// 'remote_join_key' => 'ID',
+						$p5Alias[$fieldName]['remote_column_value'] = $acl->getXsdFieldParam($fieldName, 'remote_column_value');// 'remote_column_value' => 'SUM_POS',
+					}
+				}
+			}
+			if(V::get('DBG', '', $_GET)){$jsonData->__DBG__['$p5Alias'] = $p5Alias;}
+			if(V::get('DBG', '', $_GET)){$jsonData->__DBG__['$aliasValuesRaw'] = [];}
+			if ($p5Alias) {
+				$sqlLocalTableName = $acl->getRootTableName();
+				$primaryKeyField = $acl->getPrimaryKeyField();
+				foreach ($p5Alias as $fieldName => $conf) {
+					$localKeys = [];
+					$localKeyName = V::get('local_join_key', '', $conf);
+					if ($localKeyName) {
+						if (!array_key_exists($localKeyName, $localKeys)) {
+							$localKeys[$localKeyName] = [];
+							foreach ($items as $item) {
+								$keyLocal = V::get($localKeyName, 0, $item);
+								if ($keyLocal) $localKeys[$localKeyName][] = DB::getPDO()->quote($keyLocal, PDO::PARAM_STR);
+							}
+						}
+						if(V::get('DBG', '', $_GET)){$jsonData->__DBG__['$localKeys'] = $localKeys;}
+						if (!empty($localKeys[$localKeyName])) {
+							$sqlRemoteTable = V::get('remote_table_name', '', $conf);
+							$sqlRemoteValueFieldName = V::get('remote_column_value', '', $conf);
+							$sqlRemoteKeyName = V::get('remote_join_key', '', $conf);
+							$sqlLocalKeyName = $acl->getSqlFieldName($localKeyName);
+							$aliasValuesRaw = DB::getPDO()->fetchAllByKey("
+								select r.{$sqlRemoteKeyName} as {$sqlLocalKeyName}, r.{$sqlRemoteValueFieldName} as remote_value
+								from {$sqlRemoteTable} r
+								where r.{$sqlRemoteKeyName} in(" . implode(",", $localKeys[$localKeyName]) . ")
+							", $sqlLocalKeyName);
+							if(V::get('DBG', '', $_GET)){$jsonData->__DBG__['SQL__$aliasValuesRaw'][$fieldName] = "
+								select r.{$sqlRemoteKeyName} as {$sqlLocalKeyName}, r.{$sqlRemoteValueFieldName} as remote_value
+								from {$sqlRemoteTable} r
+								where r.{$sqlRemoteKeyName} in(" . implode(",", $localKeys[$localKeyName]) . ")
+							";}
+							if(V::get('DBG', '', $_GET)){$jsonData->__DBG__['$aliasValuesRaw'][$fieldName] = $aliasValuesRaw;}
+							if (!empty($aliasValuesRaw)) {
+								if(V::get('DBG_P5', '', $_GET)){echo '{ "$aliasValuesRaw": '.json_encode($aliasValuesRaw).', "dbg": [' . "\n";}
+								array_walk($items, function (&$item) use ($fieldName, $sqlLocalKeyName, $aliasValuesRaw) {
+									$sqlValue = V::get($sqlLocalKeyName, null, $item);
+									if(V::get('DBG_P5', '', $_GET)){echo '{ "sqlValue": "'.$sqlValue.'", "remote_value": "'.$aliasValuesRaw[$sqlValue]['remote_value'].'", "item": '.json_encode($item) . '},' . "\n";}
+									if ($sqlValue !== null && array_key_exists($sqlValue, $aliasValuesRaw)) {
+										if(V::get('DBG_P5', '', $_GET)){echo '{ "TODO_update_value": "'.$aliasValuesRaw[$sqlValue]['remote_value'].'"},' . "\n";}
+										$item[$fieldName] = $aliasValuesRaw[$sqlValue]['remote_value'];
+										if(V::get('DBG_P5', '', $_GET)){echo '{ "TODO_updated_value": "'.$item[$fieldName].'"},' . "\n";}
+									}
+								});
+								if(V::get('DBG_P5', '', $_GET)){echo "\n".'{}]}';die();}
+							}
+						}
+					}
+				}
+			}
+		}
 		foreach ($items as $item) {
 		foreach ($items as $item) {
 			// TODO: hide items without 'R'
 			// TODO: hide items without 'R'
 			foreach ($visibleCols as $fieldName) {
 			foreach ($visibleCols as $fieldName) {