diff --git a/scripts/adb-rimo-import/ADBAddressHelper/address_helper.php b/scripts/adb-rimo-import/ADBAddressHelper/address_helper.php index 6d8c7a71b..568ec453e 100644 --- a/scripts/adb-rimo-import/ADBAddressHelper/address_helper.php +++ b/scripts/adb-rimo-import/ADBAddressHelper/address_helper.php @@ -100,6 +100,10 @@ class AddressHelper { $lot_num = $building->address->lotNumber; $fcp_name = false; + if(!$hausnummer_name || !$gem_name || !$plz_name || !$ort_name || !$strasse_name) { + 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"; echo "$addr_dbg_str\n"; diff --git a/scripts/adb-rimo-import/rimo-import-test.php b/scripts/adb-rimo-import/rimo-import-test.php index 1a6cf03aa..60c45ee7c 100755 --- a/scripts/adb-rimo-import/rimo-import-test.php +++ b/scripts/adb-rimo-import/rimo-import-test.php @@ -33,6 +33,8 @@ $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")) { @@ -150,15 +152,18 @@ foreach($clustersResponse->item as $cluster) { } foreach($building->homes->item as $home) { - print_r($home);//exit; + //print_r($home);//exit; $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 { // find free home without rimo_id $unit = \ADBWohneinheitModel::getFirst(["hausnummer_id" => $hausnummer->id, "extref" => null]); + echo "-- Using free unit\n"; } if(!$unit) { @@ -168,8 +173,14 @@ foreach($clustersResponse->item as $cluster) { "extref" => $home_rimo_id, "num" => ++$last_unit_num ]); + echo "-- Creating new unit $home_rimo_id\n"; if(!$unit->save()) { - die("Error saving new unit\n".print_r($home, true)); + die("!!! Error saving new unit\n".print_r($home, true)); + } + } else { + if($unit->extref != $home_rimo_id) { + $unit->extref = $home_rimo_id; + $unit->save(); } } @@ -190,7 +201,7 @@ foreach($clustersResponse->item as $cluster) { } if(is_array($home->ftus->item) && $home->ftus->item[0]) { - echo "in ftu update\n"; + //echo "in ftu update\n"; $ftu_data = new \StdClass(); $ftu_data->id = $home->ftus->item[0]->id; $ftu_data->name = $home->ftus->item[0]->name; @@ -202,18 +213,18 @@ foreach($clustersResponse->item as $cluster) { $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)); + die("!!! Error saving unit extdata\n".print_f($unit)); } // check OAID - if($home->ftus->item[0]->oaidObject->name) { + if(is_object($home->ftus->item[0]->oaidObject) && $home->ftus->item[0]->oaidObject->name) { if($home->ftus->item[0]->oaidObject->name != $unit->oaid) { if(!$unit->oaid) { - // assign oad to home + // assign oaid to home $rimo_oaid = $home->ftus->item[0]->oaidObject->name; $oaid = \OpenAccessIdModel::getFirst(["oaid" => $rimo_oaid]); if(!$oaid) { - echo "Home hat fremde OAID: $rimo_oaid (Home ".$unit->id."\n"; + echo "!!! Home hat fremde OAID: $rimo_oaid (Home ".$unit->id."\n"; } else { $unit->oaid = $rimo_oaid; @@ -240,9 +251,10 @@ foreach($clustersResponse->item as $cluster) { $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(); + $oaid->save(); $unit->save(); } @@ -251,10 +263,128 @@ 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"; + exit; + } + + $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; + if(array_key_exists("SDICluster", $dn)) { + $cluster = $dn['SDICluster']; + } + $shelf = $dn['Shelf']; + $patchpanel = $dn['PatchPanel']; + $port = $dn['Port']; + + if($cluster) { + $unit->patch_cluster = $cluster; + $unit->save(); + } + if($shelf) { + $unit->patch_shelf = $shelf; + $unit->save(); + } + if($patchpanel) { + $unit->patch_module = $patchpanel; + $unit->save(); + } + if($port) { + $unit->patch_port = $port; + $unit->save(); + } + } + } + } + } + + + } + + // 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"; exit; } - + + $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, + "rimo_id" => $rimo_workorder_id, + "rimo_name" => $rimo_workorder_name, + "rimo_status" => $workorder_status + ]); + if(!$wo->save()) { + echo "Fehler beim Erstellen der RimoWorkorder $rimo_workorder_id ($workorder_home_id)\n"; + } + } + } + } + + //exit; } @@ -263,4 +393,57 @@ foreach($clustersResponse->item as $cluster) { } //echo $response; -echo "\n"; \ No newline at end of file +echo "\n"; + +function getServiceDnValues($dn) { + $dn = explode(":", $dn); + $fields = []; + + foreach($dn as $d) { + $m = []; + if(preg_match('/^([^{]+)\{([^}]+)\}$/',$d, $m)) { + if(!$m[1] || !$m[2]) { + continue; + } + $value = $m[1]; + $key = $m[2]; + + if(array_key_exists($key, $fields)) { + if(is_array($fields[$key])) { + $fields[$key][] = $value; + } else { + $tmp = $fields[$key]; + $fields[$key] = []; + $fields[$key][] = $tmp; + $fields[$key][] = $value; + } + } else { + $fields[$key] = $value; + } + } + } + + 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)) { + foreach([1,2] as $i) { + if(strlen($m[$i])) { + $letter = substr(strtoupper($m[$i]), 0, 1); + if($letter == "B") { + $fields['Shelf'] = $m[$i]; + } + if($letter == "M") { + $fields['PatchPanel'] = $m[$i]; + } + } + } + } + } + + return $fields; +} \ No newline at end of file