From f25170e3989573e0ae3d71c3d59a51b83764da31 Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Mon, 5 Feb 2024 12:39:40 +0100 Subject: [PATCH] Added RML Import & subcd --- Layout/default/AddressDB/Index.php | 2 +- Layout/default/AddressDB/View.php | 5 +- application/ADBHausnummer/ADBHausnummer.php | 2 +- .../ADBHausnummer/ADBHausnummerModel.php | 10 + application/AddressDB/AddressDB.php | 15 + .../20240202152709_hausnummer_add_subcd.php | 34 ++ .../Network/Network-60670-1-prem-sued.php | 4 +- .../Network/Network-60670-2-prem-nord.php | 45 +++ .../Network/Network-61105-kalwang.php | 4 +- .../Network-C03070-st-stefan-ob-stainz.php | 4 +- ...ork-P-J5B3Q-rml-irdning-donnersbachtal.php | 29 ++ .../ADBAddressHelper/address_helper.php | 148 +++++--- scripts/adb-rimo-import/rimo-import-test.php | 319 +++++++++--------- .../preorders-split-multiple-connections.php | 27 +- scripts/preorder/update-preorder-add-unit.php | 27 +- 15 files changed, 465 insertions(+), 210 deletions(-) create mode 100644 db/migrations/20240202152709_hausnummer_add_subcd.php create mode 100644 scripts/adb-rimo-import/ADBAddressHelper/Network/Network-60670-2-prem-nord.php create mode 100644 scripts/adb-rimo-import/ADBAddressHelper/Network/Network-P-J5B3Q-rml-irdning-donnersbachtal.php diff --git a/Layout/default/AddressDB/Index.php b/Layout/default/AddressDB/Index.php index 58c7f04a6..5780eb9a9 100644 --- a/Layout/default/AddressDB/Index.php +++ b/Layout/default/AddressDB/Index.php @@ -171,7 +171,7 @@ netzgebiet->name?> - adrcd?> + adrcd?>subcd) ? "-".$address->subcd : ""?> oaid?> extref?> plz->plz?> diff --git a/Layout/default/AddressDB/View.php b/Layout/default/AddressDB/View.php index 643b0adf6..7ad39848b 100644 --- a/Layout/default/AddressDB/View.php +++ b/Layout/default/AddressDB/View.php @@ -43,7 +43,7 @@ oaid?> ADRCD - adrcd?> + adrcd?>subcd) ? "-".$address->subcd : ""?> Extref extref?> @@ -76,6 +76,9 @@ Straße / Hausnummer strasse->name?> hausnummer?> + + Adresszusatz + zusatz?> PLZ / Ort plz->plz?> ortschaft->name?> diff --git a/application/ADBHausnummer/ADBHausnummer.php b/application/ADBHausnummer/ADBHausnummer.php index 5bde0b4d8..097e7a2a8 100644 --- a/application/ADBHausnummer/ADBHausnummer.php +++ b/application/ADBHausnummer/ADBHausnummer.php @@ -1,7 +1,7 @@ escape($filter['subcd']); + if($subcd === false || $subcd === null) { + $where .= " AND (Hausnummer.`subcd` IS NULL OR Hausnummer.`subcd` = 0)"; + } + if($subcd) { + $where .= " AND Hausnummer.`subcd` = $subcd"; + } + } if(array_key_exists("oaid", $filter)) { $oaid = FronkDB::singleton()->escape($filter['oaid']); diff --git a/application/AddressDB/AddressDB.php b/application/AddressDB/AddressDB.php index c955246e9..bbcd309b1 100644 --- a/application/AddressDB/AddressDB.php +++ b/application/AddressDB/AddressDB.php @@ -23,6 +23,7 @@ class AddressDB { `Hausnummer`.`id` AS `hausnummer_id`, `Hausnummer`.`oaid` AS `oaid`, `Hausnummer`.`adrcd` AS `adrcd`, + `Hausnummer`.`subcd` AS `subcd`, `Hausnummer`.`oaid` AS `hausnummer_oaid`, `Hausnummer`.`hausnummer` AS `hausnummer`, `Hausnummer`.`extref` AS `hausnummer_extref`, @@ -230,6 +231,20 @@ class AddressDB { $me = new User(); $me->loadMe(); + $adrcd = null; + $subcd = null; + + if(array_key_exists("adrcd", $data) && $data["adrcd"]) { + $adr = trim($data["adrcd"]); + $adr_parts = explode("-", $adr); + if(count($adr_parts)) { + $adrcd = $adr_parts[0]; + if(array_key_exists(1, $adr_parts)) { + $subcd = $adr_parts[1]; + } + } + } + // build hausnummer data //$hausnummer_data['oaid'] = (array_key_exists("oaid", $data) && $data['oaid']) ? $data['oaid'] : null; $hausnummer_data['adrcd'] = ($data['adrcd']) ? $data['adrcd'] : null; diff --git a/db/migrations/20240202152709_hausnummer_add_subcd.php b/db/migrations/20240202152709_hausnummer_add_subcd.php new file mode 100644 index 000000000..c65360069 --- /dev/null +++ b/db/migrations/20240202152709_hausnummer_add_subcd.php @@ -0,0 +1,34 @@ +getEnvironment() == "thetool") { + + } + + if($this->getEnvironment() == "addressdb") { + $table = $this->table("Hausnummer"); + $table->addColumn("subcd", "integer", ["null" => true, "default" => null, "after" => "adrcd"]); + $table->addIndex(["adrcd", "subcd"]); + $table->update(); + } + } + + public function down(): void + { + if($this->getEnvironment() == "thetool") { + + } + + if($this->getEnvironment() == "addressdb") { + $table = $this->table("Hausnummer"); + $table->removeIndex(["adrcd", "subcd"]); + $table("Hausnummer")->removeColumn("subcd"); + } + } +} diff --git a/scripts/adb-rimo-import/ADBAddressHelper/Network/Network-60670-1-prem-sued.php b/scripts/adb-rimo-import/ADBAddressHelper/Network/Network-60670-1-prem-sued.php index 684904748..37b9ee2d6 100644 --- a/scripts/adb-rimo-import/ADBAddressHelper/Network/Network-60670-1-prem-sued.php +++ b/scripts/adb-rimo-import/ADBAddressHelper/Network/Network-60670-1-prem-sued.php @@ -14,7 +14,7 @@ class Network_60670_1 { */ // dererence input array keys into copies - foreach(["strasse_name", "hausnummer_name", "addresszusatz", "gem_kz", "gem_name", "ort_name", "plz_name"] as $var) { + foreach(["name", "strasse_name", "hausnummer_name", "addresszusatz", "gem_kz", "gem_name", "ort_name", "plz_name"] as $var) { $$var = $data[$var]; } @@ -23,7 +23,7 @@ class Network_60670_1 { // put new values back into original pointer - foreach(["strasse_name", "hausnummer_name", "addresszusatz", "gem_kz", "gem_name", "ort_name", "plz_name"] as $var) { + foreach(["name", "strasse_name", "hausnummer_name", "addresszusatz", "gem_kz", "gem_name", "ort_name", "plz_name"] as $var) { $data[$var] = $$var; } diff --git a/scripts/adb-rimo-import/ADBAddressHelper/Network/Network-60670-2-prem-nord.php b/scripts/adb-rimo-import/ADBAddressHelper/Network/Network-60670-2-prem-nord.php new file mode 100644 index 000000000..1344e75cd --- /dev/null +++ b/scripts/adb-rimo-import/ADBAddressHelper/Network/Network-60670-2-prem-nord.php @@ -0,0 +1,45 @@ +name); - $strasse_hausnummer = trim($building->address->name); - [$strasse_name, $hausnummer_name, $addresszusatz] = $this->splitStreetHausnummer($strasse_hausnummer); - $strasse_name = $this->db->escape($strasse_name); - $hausnummer_name = $this->db->escape($hausnummer_name); - $addresszusatz = $this->db->escape($addresszusatz); + $split_result = $this->splitStreetHausnummer($strasse_hausnummer); + + if(!$split_result) { + echo "[EE] Hausnummer nicht gefunden in '$strasse_hausnummer' ($rimo_id)\n"; + return false; + } + + $strasse_name = $this->db->escape($split_result[0]); + $hausnummer_name = $this->db->escape( $split_result[1]); + $addresszusatz = $this->db->escape($split_result[2]); $gem_kz = $this->db->escape(trim($building->municipality->name)); $gem_name = $this->db->escape(trim($building->municipality->userLabel)); @@ -100,14 +115,27 @@ class AddressHelper { $lot_num = $building->address->lotNumber; $fcp_name = false; + $adrcd = false; + $subcd = false; + $adr = trim($building->foreignId2); + $adr_parts = explode("-", $adr); + if(count($adr_parts)) { + $adrcd = $adr_parts[0]; + if(array_key_exists(1, $adr_parts)) { + $subcd = $adr_parts[1]; + } + } + + $addr_dbg_str = "strasse_hausnummer: $strasse_hausnummer | zusatz: $addresszusatz | gemkz: $gem_kz | gem_name: $gem_name | ort_name: $ort_name | plz_name: $plz_name | adrcd: $adr | $rimo_id"; + if(!$hausnummer_name || !$gem_name || !$plz_name || !$ort_name || !$strasse_name) { + echo "[WW] Adressbestandteil fehlt ($addr_dbg_str)\n"; return false; } - $addr_dbg_str = "strasse: $strasse_name | hausnummer: $hausnummer_name | zusatz: $addresszusatz | gemkz: $gem_kz | gem_name: $gem_name | ort_name: $ort_name | plz_name: $plz_name | $rimo_id"; - // pass variables by ref, so they can be manipulated directly $continue = $this->NetworkHelper->checkAddress([ + "name" => &$name, "strasse_name" => &$strasse_name, "hausnummer_name" => &$hausnummer_name, "addresszusatz" => &$addresszusatz, @@ -118,25 +146,20 @@ class AddressHelper { ]); if(!$continue) { - echo "[WW] ($addr_dbg_str) Wurde aussortiert\n"; + echo "[II] ($addr_dbg_str) Wurde aussortiert\n"; return false; } $gemeinde = \ADBGemeindeModel::getFirst(["kennziffer" => $gem_kz]); if(!$gemeinde) { - $this->log->warning("[EE] ($addr_dbg_str) Gemeinde nicht gefunden (name: $gem_name, Kennzahl: $gem_kz"); - echo "[EE] ($addr_dbg_str) Gemeinde $gem_name $gem_kz nicht gefunden\n"; + //$this->log->warning("[EE] Gemeinde $gem_name $gem_kz nicht gefunden ($addr_dbg_str)"); + echo "[EE] Gemeinde '$gem_name' / '$gem_kz' nicht gefunden ($addr_dbg_str)\n"; return false; } $gemeinde_id = $gemeinde->id; - $adrcd = false; - $adr = trim($building->foreignId2); - $adr_parts = explode("-", $adr); - if(count($adr_parts)) { - $adrcd = $adr_parts[0]; - } + $hausnummer = \ADBHausnummerModel::getFirst(["rimo_id" => $rimo_id]); @@ -146,7 +169,14 @@ class AddressHelper { if($adrcd && !$hausnummer) { // get Hausnummer to update - $hausnummer = \ADBHausnummerModel::getFirst(['adrcd' => $adrcd]); + if($subcd > 1) { + $hausnummer = \ADBHausnummerModel::getFirst(['adrcd' => $adrcd, "subcd" => $subcd]); + } else { + $hausnummer = \ADBHausnummerModel::getFirst(['adrcd' => $adrcd, "subcd" => "1"]); + if(!$hausnummer) { + $hausnummer = \ADBHausnummerModel::getFirst(['adrcd' => $adrcd, "subcd" => null]); + } + } /*if(!$hausnummer) { //echo "Hausnummer adrcd $adrcd not found\n"; } else { @@ -160,31 +190,61 @@ class AddressHelper { if(!$hausnummer) { // hausnummer anlegen - $strasse = \ADBStrasseModel::getFirst(["gemeinde_id" => $gemeinde_id, "name" => $strasse_name]); - //if(!$strasse) die("Strasse $strasse_name (gemeinde_id $gemeinde_id; gem_kz $gem_kz) nicht gefunden\n"); - if(!$strasse) { - $strasse = $this->createStreet($gemeinde_id, $strasse_name); - if(!$strasse) { - echo "[EE] ($addr_dbg_str) Konnte Strasse $strasse_name in Gemeinde $gemeinde_id nicht anlegen\n"; - return false; - } - } - $plz = \ADBPlzModel::getFirst(["gemeinde_id" => $gemeinde_id, "plz" => $plz_name]); if(!$plz) { - echo "[EE] ($addr_dbg_str) PLZ $plz_name nicht gefunden\n"; + echo "[EE] PLZ '$plz_name' nicht gefunden ($addr_dbg_str)\n"; return false; } $ortschaft = \ADBOrtschaftModel::getFirst(["gemeinde_id" => $gemeinde_id, "name" => $ort_name]); if(!$ortschaft) { - echo "[EE] ($addr_dbg_str) Ortschaft $ort_name nicht gefunden\n"; + echo "[EE] Ortschaft '$ort_name' nicht gefunden ($addr_dbg_str) \n"; return false; } + + $strasse = \ADBStrasseModel::getFirst(["gemeinde_id" => $gemeinde_id, "name" => $strasse_name]); + if(!$strasse) { + // try finding strasse with ortschaft prefix + $prefix = ($ortschaft->name) ? $ortschaft->name : $gemeinde->name; + + /*if(!$prefix) { + echo "[EE] ----------- Kein Prefix\n"; // should not happen + return false; + }*/ + + if($prefix && strpos($strasse_name, "$prefix ") === 0) { + $strasse_name_sansprefix = substr($strasse_name, strlen($prefix)+1); + if(!$strasse_name_sansprefix) { + echo "[EE] Fehler beim prefix entfernen von strasse_name $strasse_name\n"; + return false; + } + + $strasse = \ADBStrasseModel::getFirst(["gemeinde_id" => $gemeinde_id, "name" => "$strasse_name_sansprefix"]); + /*if($strasse) { + echo "Found strasse '$strasse_name' without prefix '$prefix' (gemeinde_id => $gemeinde_id, name => $strasse_name_sansprefix) ($rimo_id)\n"; + }*/ + } + } + + if(!$strasse) { + echo "[EE] Straße '$strasse_name' nicht gefunden ($addr_dbg_str)\n"; + return false; + + echo "[II] Erstelle Strasse '$strasse_name' ($addr_dbg_str)\n"; + $strasse = $this->createStreet($gemeinde_id, $strasse_name); + if(!$strasse) { + echo "[EE] Konnte Strasse '$strasse_name' in Gemeinde '$gemeinde_id' nicht anlegen ($addr_dbg_str)\n"; + return false; + } + } + + + $hausnummer_data = [ "netzgebiet_id" => $this->netzgebiet->id, "adrcd" => ($adrcd) ? $adrcd : null, + "subcd" => ($subcd) ? $subcd : null, "extref" => $name, "ortschaft_id" => $ortschaft->id, "plz_id" => $plz->id, @@ -195,7 +255,7 @@ class AddressHelper { "gps_lat" => $lat, "gps_long" => $long, "unit_count" => ($unit_count) ? $unit_count : 1, - "freigabe" => $this->netzgebiet->default_freigabe, + "freigabe" => $this->netzgebiet->freigabe, "rimo_id" => $rimo_id, "rimo_fcp_name" => ($fcp_name) ? $fcp_name : null ]; @@ -204,26 +264,37 @@ class AddressHelper { //echo "----------------------\ncreating hausnummer:\n"; //print_r($hausnummer); $hausnummer->save(); + echo "[CC] Neues Gebäude erstellt ($addr_dbg_str)\n"; } } + + // update hausnummer if($hausnummer->netzgebiet_id != $this->netzgebiet->id) { $hausnummer->netzgebiet_id = $this->netzgebiet->id; - //$hausnummer->save(); + $hausnummer->save(); } if($hausnummer->extref != $name) { $hausnummer->extref = $name; - //$hausnummer->save(); + $hausnummer->save(); } if($lat && $long) { $hausnummer->gps_lat = (float)$lat; $hausnummer->gps_long = (float)$long; + $hausnummer->save(); + } + if($hausnummer->rimo_id != $rimo_id) { + $hausnummer->rimo_id = $rimo_id; + $hausnummer->save(); + } + + if($hausnummer->rimo_fcp_name != $fcp_name) { + $hausnummer->rimo_fcp_name = $fcp_name; + $hausnummer->save(); } - if($rimo_id) $hausnummer->rimo_id = $rimo_id; - if($fcp_name) $hausnummer->rimo_fcp_name = $fcp_name; //$hausnummer->freigabe = $this->netzgebiet->default_freigabe; - $hausnummer->save(); + //echo ">>>>>>>>>>>>>>>>>>>\nupdating hausnummer:"; //print_r($hausnummer);exit; return $hausnummer; @@ -266,6 +337,7 @@ class AddressHelper { // get Hausnummer to update //echo "Hausnummer per Suche gefunden\n"; $data = $this->db->fetch_object($res); + //echo "found by strasse/hausnummer/gemeinde\n"; return new \ADBHausnummer($data->hausnummer_id); } return false; diff --git a/scripts/adb-rimo-import/rimo-import-test.php b/scripts/adb-rimo-import/rimo-import-test.php index 2fc3da35a..81e406d9e 100755 --- a/scripts/adb-rimo-import/rimo-import-test.php +++ b/scripts/adb-rimo-import/rimo-import-test.php @@ -24,137 +24,157 @@ $mainlog = \mfLoghandler::singleton(); $log = new \mfLog_File(); $log->init(BASEDIR."/var/log/rimo-import.log"); -$apiOwner = "estmk"; -$apiEdition = "prod"; -$apiData = TT_RIMO_API_CREDS[$apiOwner][$apiEdition]; +$usage = "Usage: ".$argv[0]." [argument]\n\nAvailable arguments:\n\t--list-rimo-clusters\tLists Clusters returned by Rimo API, then exits\n\t--help\t\t\tLists available arguments\n\nRuns import when no argument is given\n\n"; +$command = false; -$apiUrl = $apiData["url"]; -$apiToken = $apiData["key"]; - -$epGetClusters = $apiUrl.RIMO_API_JSON_EP_GET_CLUSTERS; -$epGetBuildings = $apiUrl.RIMO_API_JSON_EP_GET_BUILDINGS; -$epGetWorkorders = $apiUrl.RIMO_API_JSON_EP_QUERY_WORKORDERS; -$epGetService = $apiUrl.RIMO_API_JSON_EP_QUERY_SERVICE; - -/* -if(!defined("RIMO_API_JSON_APIKEY_PROD")) { - die("rimo api token not defined!"); -}*/ - -$import_count = 0; - -$baseParams = ['apiKey' => $apiToken]; - -$ctxOptsPost = [ - 'http' => [ - 'method' => 'POST', - 'header' => 'accept: application/json' - ] -]; - -$ctxOptsGet = [ - 'http' => [ - 'method' => 'GET', - 'header' => 'accept: application/json' - ] -]; - -$adb = \FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); - - -/* - * Get RIMO Sales Clusters - */ - -$params = $baseParams; -$qs = http_build_query($params); - -$req_url = $epGetClusters."?".$qs; -$req_ctx = stream_context_create($ctxOptsGet); - -//echo $req_url."\n"; -$responseText = file_get_contents($req_url, false, $req_ctx); -if($responseText === false) { - echo "Error fetching clusters\n"; - exit; +if($argc > 1) { + if($argv[1] == "--list-rimo-clusters") { + $command = "list-rimo-clusters"; + } elseif($argv[1] == "--help") { + echo $usage; + exit(0); + } else { + die("Invalid argument.\n\n$usage"); + } } -$clustersResponse = json_decode($responseText); -//var_dump($clustersResponse); -//exit; -if(!is_object($clustersResponse) || !property_exists($clustersResponse, "item") || !is_array($clustersResponse->item) || !count($clustersResponse->item)) { - die("Invalid GetClusters Response\n"); -} -foreach($clustersResponse->item as $cluster) { - $cluster_rimo_id = $cluster->id; - //echo "##################################################\n"; - //echo "$cluster_rimo_id | name: ".$cluster->name."; label: ".$cluster->userLabel."\n"; - //continue; - $adb_netzgebiet = \ADBNetzgebietModel::getFirst(['rimo_id' => $cluster_rimo_id]); - if(!$adb_netzgebiet) { - //echo "Kein Netzgebiet für Salescluster $cluster_rimo_id (".$cluster->name.")\n"; - continue; +foreach(["estmk", "rml"] as $apiOwner) { + $apiEdition = "prod"; + $apiData = TT_RIMO_API_CREDS[$apiOwner][$apiEdition]; + + $apiUrl = $apiData["url"]; + $apiToken = $apiData["key"]; + + if(!$apiUrl || !$apiToken) { + echo "Api Daten für $apiOwner unvollständig\n"; } + $epGetClusters = $apiUrl.RIMO_API_JSON_EP_GET_CLUSTERS; + $epGetBuildings = $apiUrl.RIMO_API_JSON_EP_GET_BUILDINGS; + $epGetWorkorders = $apiUrl.RIMO_API_JSON_EP_QUERY_WORKORDERS; + $epGetService = $apiUrl.RIMO_API_JSON_EP_QUERY_SERVICE; - if($cluster_rimo_id != "SDISalesCluster_40295863041_1679040094") { - // st. stefan ob stainz - continue; - } + $import_count = 0; + + $baseParams = ['apiKey' => $apiToken]; + $ctxOptsPost = [ + 'http' => [ + 'method' => 'POST', + 'header' => 'accept: application/json' + ] + ]; + $ctxOptsGet = [ + 'http' => [ + 'method' => 'GET', + 'header' => 'accept: application/json' + ] + ]; + + $adb = \FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); - $AddressHelper = new ADBAddressHelper\AddressHelper(["log" => $log, "db" => $adb, "netzgebiet" => $adb_netzgebiet]); - /* - * Get Buildings per SalesCluster + * Get RIMO Sales Clusters */ + $params = $baseParams; - $params["clusterId"] = $cluster_rimo_id; $qs = http_build_query($params); - - $req_url = $epGetBuildings."?".$qs; + + $req_url = $epGetClusters."?".$qs; $req_ctx = stream_context_create($ctxOptsGet); - + //echo $req_url."\n"; $responseText = file_get_contents($req_url, false, $req_ctx); - if($responseText === false) { - echo "Error fetching Buildings in cluster $cluster_rimo_id (".$cluster->name.")\n"; + echo "($apiOwner) Error fetching clusters\n"; exit; } - - $buildingsResponse = json_decode($responseText); - $hausnummer_count = 0; - $hausnummer_found_count = 0; - $homes_count = 0; + $clustersResponse = json_decode($responseText); + //var_dump($clustersResponse); + //exit; + if(!is_object($clustersResponse) || !property_exists($clustersResponse, "item") || !is_array($clustersResponse->item) || !count($clustersResponse->item)) { + die("($apiOwner) Invalid GetClusters Response\n"); + } - if(is_object($buildingsResponse) && property_exists($buildingsResponse, "item") && is_array($buildingsResponse->item) && count($buildingsResponse->item)) { - foreach($buildingsResponse->item as $building) { - //var_dump($building); - if($building->buildingType && $building->buildingType->userLabel != "Greenfield") { + foreach($clustersResponse->item as $cluster) { + $cluster_rimo_id = $cluster->id; + $cluster_name = $cluster->name; + //echo "##################################################\n"; + + if($command == "list-rimo-clusters") { + echo "($apiOwner) $cluster_rimo_id | name: ".$cluster->name."; label: ".$cluster->userLabel."\n"; + continue; + } + $adb_netzgebiet = \ADBNetzgebietModel::getFirst(['rimo_id' => $cluster_rimo_id]); + if(!$adb_netzgebiet) { + //echo "Kein Netzgebiet für Salescluster $cluster_rimo_id (".$cluster->name.")\n"; + continue; + } + + + /*if($cluster_rimo_id != "SDISalesCluster_234854956801_1688569233") { + // rml irdning/donnersbachtal + continue; + }*/ + + $AddressHelper = new ADBAddressHelper\AddressHelper(["log" => $log, "db" => $adb, "netzgebiet" => $adb_netzgebiet]); + + /* + * Get Buildings per SalesCluster + */ + $params = $baseParams; + $params["clusterId"] = $cluster_rimo_id; + $qs = http_build_query($params); + + $req_url = $epGetBuildings."?".$qs; + $req_ctx = stream_context_create($ctxOptsGet); + + //echo $req_url."\n"; + $responseText = file_get_contents($req_url, false, $req_ctx); + + if($responseText === false) { + echo "Error fetching Buildings in cluster $cluster_rimo_id (".$cluster->name.")\n"; + exit; + } + + $buildingsResponse = json_decode($responseText); + + $hausnummer_count = 0; + $hausnummer_found_count = 0; + $homes_count = 0; + + if(is_object($buildingsResponse) && property_exists($buildingsResponse, "item") && is_array($buildingsResponse->item) && count($buildingsResponse->item)) { + foreach($buildingsResponse->item as $building) { //var_dump($building); - } else { - continue; - } - $hausnummer_count++; - // ignore buildings without units - if(!$building->plannedTU) { - continue; - } - if($building->buildingType && $building->buildingType->userLabel != "Greenfield" && $building->homesCount > 0 && property_exists($building->homes, "item") && is_array($building->homes->item) && count($building->homes->item)) { - //print_r($building);exit; + if($building->buildingType && $building->buildingType->userLabel == "Greenfield") { + //echo $building->id.": ignoring Greenfield\n"; + continue; + } + $hausnummer_count++; + + /* + // ignore buildings without units + if(!$building->plannedTU) { + echo $building->id.": no planned TUs\n"; + continue; + }*/ + $rimo_building_id = $building->id; $hausnummer = $AddressHelper->findUpdateAddressFromRimoBuilding($building); if(!$hausnummer) { - echo "Adresse nicht gefunden: $rimo_building_id\n"; + //echo "Adresse nicht gefunden: $rimo_building_id\n"; continue; } $hausnummer_found_count++; + if(!property_exists($building->homes, "item") || !is_array($building->homes->item) | !count($building->homes->item)) { + continue; + } + $rimo_home_count = count($building->homes->item); - + $last_unit_num = 0; $existing_units = []; foreach(\ADBWohneinheitModel::search(["hausnummer_id" => $hausnummer->id]) as $unit) { @@ -163,15 +183,15 @@ foreach($clustersResponse->item as $cluster) { $last_unit_num++; } } - + foreach($building->homes->item as $home) { //print_r($home);//exit; $homes_count++; $home_rimo_id = $home->id; $home_name = $home->name; - + //echo "$home_rimo_id\n"; - + if(array_key_exists($home_rimo_id, $existing_units)) { $unit = $existing_units[$home_rimo_id]; } else { @@ -179,7 +199,7 @@ foreach($clustersResponse->item as $cluster) { $unit = \ADBWohneinheitModel::getFirst(["hausnummer_id" => $hausnummer->id, "extref" => null]); //echo "-- Using free unit\n"; } - + if(!$unit) { // create unit $unit = \ADBWohneinheitModel::create([ @@ -191,30 +211,30 @@ foreach($clustersResponse->item as $cluster) { die("Error saving new unit\n".print_r($home, true)); } } - + if($unit->extref != $home_rimo_id) { $unit->extref = $home_rimo_id; if(!$unit->save()) { die("Error saving new extref on unit\n".print_r($home, true)); } } - + /* * TODO: Status based on execution-/operational-state */ - + /* * update FTU data */ $unit_extdata = new \StdClass(); if($unit->external_data) { $extdata = json_decode($unit->external_data); - + if(is_object($extdata)) { $unit_extdata = $extdata; } } - + if(is_array($home->ftus->item) && $home->ftus->item[0]) { //echo "in ftu update\n"; $ftu_data = new \StdClass(); @@ -224,13 +244,13 @@ foreach($clustersResponse->item as $cluster) { if(!isset($unit_extdata->rimo)) { $unit_extdata->rimo = new \StdClass(); } - + $unit_extdata->rimo->ftu = $ftu_data; $unit->external_data = json_encode($unit_extdata); if(!$unit->save()) { die("!!! Error saving unit extdata\n".print_f($unit)); } - + // check OAID if(property_exists($home->ftus->item[0], "oaidObject") && is_object($home->ftus->item[0]->oaidObject) && $home->ftus->item[0]->oaidObject->name) { if($home->ftus->item[0]->oaidObject->name != $unit->oaid) { @@ -242,7 +262,7 @@ foreach($clustersResponse->item as $cluster) { echo "!!! Home hat fremde OAID: $rimo_oaid (Home ".$unit->id."\n"; } else { $unit->oaid = $rimo_oaid; - + $oaid->assigned = date("U"); $oaid->adb_wohneinheit_id = $unit->id; $oaid->termination_id = null; @@ -251,7 +271,7 @@ foreach($clustersResponse->item as $cluster) { if(!$oaid->exported) { $oaid->exported = date("U"); } - + if($oaid->export_data) { $exp_data = json_decode($oaid->export_data); } else { @@ -265,14 +285,14 @@ foreach($clustersResponse->item as $cluster) { $exp_data->rimo->ftu_id = $ftu_data->id; $exp_data->rimo->ftu_name = $ftu_data->name; $exp_data->rimo->ftu_assigned_date = date("U"); - + $oaid->exported_to = "rmio"; $oaid->export_data = json_encode($exp_data); - + $oaid->save(); $unit->save(); } - + } else { // } @@ -280,46 +300,46 @@ foreach($clustersResponse->item as $cluster) { } } - + // get ports from service $params = $baseParams; $params["homeId"] = $home_rimo_id; $qs = http_build_query($params); - + $req_url = $epGetService."?".$qs; $req_ctx = stream_context_create($ctxOptsGet); - + //echo $req_url."\n"; $responseText = file_get_contents($req_url, false, $req_ctx); - + if($responseText === false) { //echo "Error fetching Service for Home $home_rimo_id\n"; continue; } - + $serviceResponse = json_decode($responseText); - + if(is_object($serviceResponse) && property_exists($serviceResponse, "item") && is_array($serviceResponse->item) && count($serviceResponse->item)) { foreach($serviceResponse->item as $service) { if($service->masterItem->name != "FTTx Service (red)") continue; if(!is_object($service->portA) || !$service->portA) continue; - + $fixedDN = $service->portA->fixEndDN; if($fixedDN) { //echo "fixedDn found: $fixedDN\n"; $dn = getServiceDnValues($fixedDN); if(array_key_exists("Shelf", $dn) && array_key_exists("PatchPanel", $dn) && array_key_exists("Port", $dn)) { - $cluster = null; + $sdicluster = null; if(array_key_exists("SDICluster", $dn)) { - $cluster = $dn['SDICluster']; + $sdicluster = $dn['SDICluster']; } $shelf = $dn['Shelf']; $patchpanel = $dn['PatchPanel']; $port = $dn['Port']; - if($cluster) { - $unit->patch_cluster = $cluster; + if($sdicluster) { + $unit->patch_cluster = $sdicluster; $unit->save(); } if($shelf) { @@ -338,53 +358,53 @@ foreach($clustersResponse->item as $cluster) { } } } - - + + } - + // get workorders $params = $baseParams; $params["buildingId"] = $rimo_building_id; $qs = http_build_query($params); - + $req_url = $epGetWorkorders."?".$qs; $req_ctx = stream_context_create($ctxOptsGet); - + //echo $req_url."\n"; $responseText = file_get_contents($req_url, false, $req_ctx); - + if($responseText === false) { //echo "Error fetching Workorders for building $rimo_building_id\n"; continue; } $workordersResponse = json_decode($responseText); - + //print_r($workordersResponse);exit; - + if(is_object($workordersResponse) && property_exists($workordersResponse, "item") && is_array($workordersResponse->item) && count($workordersResponse->item)) { foreach($workordersResponse->item as $workorder) { $rimo_workorder_id = $workorder->id; $rimo_workorder_name = $workorder->name; $workorder_status = $workorder->state->userLabel; $workorder_home_id = $workorder->home->id; - + $wo = \RimoWorkorderModel::getFirst(["rimo_id" => $rimo_workorder_id]); - + if($wo && $workorder_status != $wo->rimo_status) { //echo "Updating Workorder $rimo_workorder_id ($workorder_home_id)\n"; $wo->rimo_status = $workorder_status; $wo->save(); } - + if(!$wo) { $wo_home = \ADBWohneinheitModel::getFirst(["extref" => $workorder_home_id]); - + if(!$wo_home) { //echo "Home zu Workorder $rimo_workorder_id ($workorder_home_id) nicht gefunden\n"; continue; } - + //echo "Creating Workorder $rimo_workorder_id ($workorder_home_id)\n"; $wo = \RimoWorkorderModel::create([ "adb_wohneinheit_id" => $wo_home->id, @@ -398,13 +418,10 @@ foreach($clustersResponse->item as $cluster) { } } } - - - //exit; + } - + echo "Cluster $cluster_rimo_id ($cluster_name): $hausnummer_count Buildings; $hausnummer_found_count Buildings verarbeitet; $homes_count Homes verarbeitet.\n"; } - echo "Cluster $cluster->name: $hausnummer_count Buildings; $hausnummer_found_count Buildings verarbeitet; $homes_count Homes verarbeitet.\n"; } } @@ -414,7 +431,7 @@ echo "\n"; function getServiceDnValues($dn) { $dn = explode(":", $dn); $fields = []; - + foreach($dn as $d) { $m = []; if(preg_match('/^([^{]+)\{([^}]+)\}$/',$d, $m)) { @@ -423,7 +440,7 @@ function getServiceDnValues($dn) { } $value = $m[1]; $key = $m[2]; - + if(array_key_exists($key, $fields)) { if(is_array($fields[$key])) { $fields[$key][] = $value; @@ -438,12 +455,12 @@ function getServiceDnValues($dn) { } } } - + if(array_key_exists("Shelf", $fields) && is_array($fields['Shelf'])) { $shelf = implode(" ", $fields['Shelf']); $fields['Shelf'] = $shelf; } - + if(!array_key_exists("PatchPanel", $fields) && array_key_exists("Shelf", $fields)) { $m = []; if(preg_match('/^([MB]\d[^ ]*)\s+([MB]\d[^ ]*)/i', $fields['Shelf'], $m)) { @@ -460,6 +477,6 @@ function getServiceDnValues($dn) { } } } - + return $fields; } \ No newline at end of file diff --git a/scripts/preorder/preorders-split-multiple-connections.php b/scripts/preorder/preorders-split-multiple-connections.php index 9e7c58237..dfd483bdb 100755 --- a/scripts/preorder/preorders-split-multiple-connections.php +++ b/scripts/preorder/preorders-split-multiple-connections.php @@ -17,19 +17,34 @@ define("INTERNAL_USER_USERNAME", $me->username); $ignore_preorders = []; -$campaign_prem_nord = 5; -$campaign_prem_sued = 6; -$campaign_gross_st_florian = 7; -$campaign_kalwang = 41; -$cmapaign_st_stefan_stainz = 36; +$campaign_ids = []; +$campaign_ids["premnord"] = 5; +$campaign_ids["premsued"] = 6; +$campaign_ids["gsf"] = 7; +$campaign_ids["kalwang"] = 41; +$campaign_ids["st_stefan_stainz"] = 36; -$selected_campaign = $cmapaign_st_stefan_stainz; +if(!array_key_exists(1,$argv)) { + + echo "Bitte eines der folgenden Netzgebiete angeben:\n\n"; + echo implode("\n", array_keys($campaign_ids)); + echo "\n\n"; + exit(1); +} + +if(!array_key_exists($argv[1], $campaign_ids)) { + die("Ungültige Kampagne\n"); +} + +$selected_campaign = $campaign_ids[$argv[1]]; if(!$selected_campaign) { echo "Keine Kampagne ausgewählt.\n"; exit; } +echo "selected campaign: $selected_campaign - ".$argv[1]."\n"; + $same_unit_count = 0; $missing_units = []; $missing_doors = []; diff --git a/scripts/preorder/update-preorder-add-unit.php b/scripts/preorder/update-preorder-add-unit.php index 4fc1edfde..710f65f19 100755 --- a/scripts/preorder/update-preorder-add-unit.php +++ b/scripts/preorder/update-preorder-add-unit.php @@ -17,19 +17,34 @@ define("INTERNAL_USER_USERNAME", $me->username); $ignore_preorders = []; -$campaign_prem_nord = 5; -$campaign_prem_sued = 6; -$campaign_gross_st_florian = 7; -$campaign_kalwang = 41; -$cmapaign_st_stefan_stainz = 36; +$campaign_ids = []; +$campaign_ids["premnord"] = 5; +$campaign_ids["premsued"] = 6; +$campaign_ids["gsf"] = 7; +$campaign_ids["kalwang"] = 41; +$campaign_ids["st_stefan_stainz"] = 36; -$selected_campaign = $cmapaign_st_stefan_stainz; +if(!array_key_exists(1,$argv)) { + + echo "Bitte eines der folgenden Netzgebiete angeben:\n\n"; + echo implode("\n", array_keys($campaign_ids)); + echo "\n\n"; + exit(1); +} + +if(!array_key_exists($argv[1], $campaign_ids)) { + die("Ungültige Kampagne\n"); +} + +$selected_campaign = $campaign_ids[$argv[1]]; if(!$selected_campaign) { echo "Keine Kampagne ausgewählt.\n"; exit; } +echo "selected campaign: $selected_campaign - ".$argv[1]."\n"; + $same_unit_count = 0; $i = 0;