ADB Rimo Impot: Added creation of Sbidi Preorders

This commit is contained in:
Frank Schubert
2025-03-11 14:04:50 +01:00
parent 39c5894c72
commit 154ff4283c
5 changed files with 495 additions and 21 deletions

View File

@@ -191,7 +191,11 @@ foreach ($clusters as $cluster_data) {
}
$option_create_preorder = false;
$preorder_only_oaid = false;
$option_import_sbidi_orders = false;
$option_import_sbidi_orders = $adb_netzgebiet->getOption("create_preorder");
$option_create_preorder = $adb_netzgebiet->getOption("create_preorder");
$preorder_only_oaid = $adb_netzgebiet->getOption("preorder_only_oaid");
$option_wo_ignore_status = $adb_netzgebiet->getOption("wo_ignore_status");
@@ -223,20 +227,7 @@ foreach ($clusters as $cluster_data) {
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") {
//echo $building->id.": ignoring Greenfield\n";
continue;
}*/
$hausnummer_count++;
//if($hausnummer_count < 300) continue;
/*
// ignore buildings without units
if(!$building->plannedTU) {
echo $building->id.": no planned TUs\n";
continue;
}*/
$rimo_building_id = $building->id;
@@ -659,8 +650,70 @@ foreach ($clusters as $cluster_data) {
}
/*
* get workorders
*/
* get SBIDI Orders, to create Preorders later
*/
if($option_import_sbidi_orders) {
$sbidi_orders_resp = \Sbidi_AnoApi::getOrders($cluster_rimo_id);
if(!$sbidi_orders_resp) {
echo "Error fetching SBIDI Orders\n";
} else {
if(!property_exists($sbidi_orders_resp, "orders") || !is_array($sbidi_orders_resp->orders) || !count($sbidi_orders_resp->orders)) {
echo "No Orders in SBIDI Orders response\n";
} else {
foreach($sbidi_orders_resp->orders as $order) {
if(!is_array($order->homes) || !count($order->homes)) continue;
foreach($order->homes as $home) {
if(!$home->home_id || !$home->work_order_id) continue;
$sorder = \SbidiOrder::getFirst(["home_rimo_id" => $home->home_id]);
if(!$sorder) {
$sorder = \SbidiOrder::getFirst(["workorder_rimo_id" => $home->work_order_id]);
}
if(!$sorder) {
// create SbidiOrder
$sorder = \SbidiOrder::create([
"building_rimo_id" => $order->building_id,
"home_rimo_id" => $home->home_id,
"workorder_rimo_id" => $home->work_order_id,
]);
}
$sorder->update([
"uid" => $order->customer->uid,
"firstname" => $order->customer->firstname,
"lastname" => $order->customer->lastname,
"address" => $order->customer->address,
"zip" => $order->customer->zip,
"city" => $order->customer->city,
"country" => $order->customer->country,
"email" => $order->customer->email,
"phone" => $order->customer->phone,
"order_date" => ($order->order_date) ? : null,
]);
$building_type = "sd";
foreach($order->lines as $line) {
if(strpos("MPH", $line->product_code) !== false) {
$building_type = "md";
break;
}
}
$sorder->building_type = $building_type;
$sorder->save();
}
}
}
}
}
/*
* get workorders
*/
$params = $baseParams;
$params["clusterId"] = $cluster_rimo_id;
@@ -684,11 +737,16 @@ foreach ($clusters as $cluster_data) {
if (is_object($workordersResponse) && property_exists($workordersResponse, "item") && is_array($workordersResponse->item) && count($workordersResponse->item)) {
foreach ($workordersResponse->item as $workorder) {
//$wo_building_external_id = $workorder->location->id;
$wo_home_external_id = $workorder->home->id;
$wo_home = false;
$wo_home_external_id = false;
if(is_object($workorder->home) && $workorder->home->id) {
$wo_home_external_id = $workorder->home->id;
}
$rimo_workorder_id = $workorder->id;
$rimo_workorder_name = $workorder->name;
$workorder_status = $workorder->state->userLabel;
$workorder_home_id = $workorder->home->id;
$team_id = (is_array($workorder->teams->item) && count($workorder->teams->item)) ? $workorder->teams->item[0]->id : null;
$team_name = (is_array($workorder->teams->item) && count($workorder->teams->item)) ? $workorder->teams->item[0]->name : null;
@@ -701,7 +759,7 @@ foreach ($clusters as $cluster_data) {
$addressErrors[] = "Wohneinheit für Workorder ".$wo->rimo_name." hat sich geändert von ".$wo->adb_wohneinheit_id." auf ".$wo_home->extref." (aber wurde nicht im Tool übernommen)";
}
} else {
$addressErrors[] = "Wohneinheit für Workorder ".$wo->name." ist jetzt leer";
$addressErrors[] = "Wohneinheit für Workorder ".$wo->rimo_name." ist jetzt leer";
}
//echo "Updating Workorder $rimo_workorder_id ($workorder_home_id)\n";
@@ -720,7 +778,10 @@ foreach ($clusters as $cluster_data) {
$wo->save();
}
} else {
$wo_home = \ADBWohneinheitModel::getFirst(["extref" => $workorder_home_id]);
if($workorder_status == "Deleted") continue;
if(!$wo_home_external_id) continue;
$wo_home = \ADBWohneinheitModel::getFirst(["extref" => $wo_home_external_id]);
if (!$wo_home) {
//echo "Home zu Workorder $rimo_workorder_id ($workorder_home_id) nicht gefunden\n";
@@ -741,7 +802,23 @@ foreach ($clusters as $cluster_data) {
"rimo_team_name" => $team_name
]);
if (!$wo->save()) {
echo "Fehler beim Erstellen der RimoWorkorder $rimo_workorder_id ($workorder_home_id)\n";
echo "Fehler beim Erstellen der RimoWorkorder $rimo_workorder_id ($wo_home_external_id)\n";
continue;
}
}
// create Preorder if requested
if($option_create_preorder && $wo_home) {
if(\PreorderModel::getFirst(["adb_wohneinheit_id" => $wo_home->id])) {
//echo "Preorder already exists for Workorder $rimo_workorder_id ($wo_home_external_id)\n";
continue;
}
$preorder = \PreorderModel::createFromRimoWorkorder($wo);
if(!$preorder) {
echo "Error creating Preorder for Workorder $rimo_workorder_id ($wo_home_external_id)\n";
} else {
//var_dump($preorder);
}
}
}