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
+88 -1
View File
@@ -110,9 +110,96 @@ class PreorderModel
}
public function createFromRimoWorkorder($workorder)
public static function createFromRimoWorkorder($workorder)
{
if(!is_object($workorder)) return false;
$log = mfLoghandler::singleton();
$wo_home_external_id = $workorder->adb_wohneinheit->extref;
$rimo_workorder_id = $workorder->rimo_id;
if(!$wo_home_external_id || !$rimo_workorder_id) {
$log->warn(__METHOD__.": Missing external_id or workorder_id for workorder: ".$workorder->id);
return false;
}
$home = \ADBWohneinheitModel::getFirst(["extref" => $wo_home_external_id]);
if(!$home) {
$log->warn(__METHOD__.": No home found with external_id: ".$wo_home_external_id);
return false;
}
$sbidi_order = SbidiOrder::getFirst(["workorder_rimo_id" => $rimo_workorder_id]);
if(!$sbidi_order) return false;
$network = \NetworkModel::getFirst(["adb_netzgebiet_id" => $home->hausnummer->netzgebiet_id]);
if(!$network) {
$log->warn(__METHOD__.": No network found for home: ".$home->id. " building: ".$home->hausnummer_id);
return false;
}
$campaign = PreordercampaignModel::getFirst(["network_id" => $network->id]);
if(!$campaign) {
$log->warn(__METHOD__.": No campaign found for network: ".$network->id);
return false;
}
try {
$order_date = new DateTime($sbidi_order->order_date);
$order_date->setTimezone(new DateTimeZone("Europe/Vienna"));
} catch(Exception $e) {
$log->error(__METHOD__.": Error parsing order_date in ".$sbidi_order->workorder_rimo_id." : ".$e->getMessage());
return false;
}
$preorder = self::create([
"preordercampaign_id" => $campaign->id,
"adb_hausnummer_id" => $home->hausnummer_id,
"adb_wohneinheit_id" => $home->id,
"extref" => $sbidi_order->order_name,
"connection_type" => ($sbidi_order->building_type == "md") ? "multi-dwelling" : "single-dwelling",
"type" => "provision",
"accept_agb" => 1,
"accept_dsgvo" => 1,
"accept_marketing" => 1,
"accept_withdrawal" => 1,
"accept_digging" => 1,
"contact_type" => "owner",
"uid" => $sbidi_order->uid,
"firstname" => $sbidi_order->firstname ?: "",
"lastname" => $sbidi_order->lastname ?: "",
"street" => $sbidi_order->address ?: "",
"zip" => $sbidi_order->zip ?: "",
"city" => $sbidi_order->city ?: "",
"phone" => $sbidi_order->phone ?: "",
"email" => $sbidi_order->email ?: "",
"submit_type" => "import",
"order_date" => $order_date->getTimestamp(),
]);
$preorder->createUcode();
$new_status = false;
if($preorder->adb_wohneinheit_id) {
$new_status = PreorderstatusModel::getFirst(["code" => $preorder->adb_wohneinheit->status->code]);
if($preorder->adb_hausnummer->status->code > $preorder->adb_wohneinheit->status->code) {
$new_status = PreorderstatusModel::getFirst(["code" => $preorder->adb_hausnummer->status->code]);
}
} elseif($preorder->adb_hausnummer_id) {
$new_status = PreorderstatusModel::getFirst(["code" => $preorder->adb_hausnummer->status->code]);
}
if($new_status) {
$preorder->status_id = $new_status->id;
} else {
$preorder->status_id = 1;
}
if(!$preorder->save()) {
return false;
}
return $preorder;
}
public static function getAll()