Added Port(Service) and Workorder import to rimo importer

This commit is contained in:
Frank Schubert
2024-01-29 11:33:57 +01:00
parent 2b224b55c0
commit 55c1edae3a
2 changed files with 197 additions and 10 deletions

View File

@@ -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";

View File

@@ -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";
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;
}