From 108daed7ddcf8619766d4a212ef84aa39f258b15 Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Thu, 18 May 2023 14:35:15 +0200 Subject: [PATCH 1/2] WIP rimo workorders --- application/Preorder/PreorderModel.php | 7 ++ .../PreordercampaignController.php | 115 +++++++++++++++--- .../test-export-preorders-rimo-workorders.php | 2 +- 3 files changed, 105 insertions(+), 19 deletions(-) diff --git a/application/Preorder/PreorderModel.php b/application/Preorder/PreorderModel.php index 842cb3f8e..3f4a1be80 100644 --- a/application/Preorder/PreorderModel.php +++ b/application/Preorder/PreorderModel.php @@ -441,6 +441,13 @@ class PreorderModel { } } + if(array_key_exists("workorder_export_date", $filter)) { + $workorder_export_date = $filter['workorder_export_date']; + if($workorder_export_date === null || $workorder_export_date === false) { + $where .= " AND (tt_preorder.workorder_export_date IS NULL OR tt_preorder.workorder_export_date = 0)"; + } + } + if(array_key_exists("gemeinde", $filter)) { $gemeinde = FronkDB::singleton()->escape($filter['gemeinde']); if($gemeinde) { diff --git a/application/Preordercampaign/PreordercampaignController.php b/application/Preordercampaign/PreordercampaignController.php index 5c260a560..fa28ec787 100644 --- a/application/Preordercampaign/PreordercampaignController.php +++ b/application/Preordercampaign/PreordercampaignController.php @@ -130,24 +130,6 @@ class PreordercampaignController extends mfBaseController { return $owners; } - protected function adminAction() { - $this->layout()->setTemplate("Preordercampaign/Admin"); - - $id = $this->request->id; - if(!is_numeric($id) || !$id) { - $this->layout()->setFlash("Vorbestellkampagne nicht gefunden", "error"); - $this->redirect("Preordercampaign"); - } - - $campaign = new Preordercampaign($id); - if(!$campaign->id) { - $this->layout()->setFlash("Vorbestellkampagne nicht gefunden", "error"); - $this->redirect("Preordercampaign"); - } - - $this->layout()->set("campaign", $campaign); - } - protected function addAction() { if(!$this->me->is("Admin")) { $this->redirect("Preordercampaign"); @@ -425,4 +407,101 @@ class PreordercampaignController extends mfBaseController { } } + + protected function adminAction() { + $this->layout()->setTemplate("Preordercampaign/Admin"); + + $id = $this->request->id; + if(!is_numeric($id) || !$id) { + $this->layout()->setFlash("Vorbestellkampagne nicht gefunden", "error"); + $this->redirect("Preordercampaign"); + } + + $campaign = new Preordercampaign($id); + if(!$campaign->id) { + $this->layout()->setFlash("Vorbestellkampagne nicht gefunden", "error"); + $this->redirect("Preordercampaign"); + } + + $this->layout()->set("campaign", $campaign); + } + + + protected function createRimoWorkordersAction() { + $this->layout()->setTemplate("Preordercampaign/Admin"); + + $id = $this->request->id; + if(!is_numeric($id) || !$id) { + $this->layout()->setFlash("Vorbestellkampagne nicht gefunden", "error"); + $this->redirect("Preordercampaign"); + } + + $campaign = new Preordercampaign($id); + if(!$campaign->id) { + $this->layout()->setFlash("Vorbestellkampagne nicht gefunden", "error"); + $this->redirect("Preordercampaign"); + } + + + foreach(PreorderModel::search(["preordercampaign_id" => $id, "workorder_export_date" => null]) as $preorder) { + if($preorder->workorder_export_date) { + $this->log->warning(__METHOD__.": workorder_export_date not null"); + } + + if(!$preorder->adb_wohneinheit_id) { + //echo "Keine Wohneinheit in Preorder (".$preorder->id.") ".$preorder->ucode." ".$preorder->oaid."\n"; + $missing_units[] = $preorder; + continue; + } + $wohneinheit = new ADBWohneinheit($preorder->adb_wohneinheit_id); + if(!$wohneinheit->id) { + echo "Wohneinheit nicht gefunden (Preorder ".$preorder->id." ".$preorder->ucode." ".$preorder->oaid.")\n"; + continue; + } + + if(!$wohneinheit->extref) { + $missing_extrefs[] = $preorder; + continue; + } + + if(!$preorder->oaid) { + if(!$wohneinheit->oaid) { + $wohneinheit->oaid = $wohneinheit->getNewOAID(); + $wohneinheit->save(); + } + $preorder->oaid = $wohneinheit->oaid; + $preorder->save(); + } + + $params['apiKey'] = RIMO_API_JSON_APIKEY; + $params["homeId"] = $wohneinheit->extref; + $params["firstName"] = trim($preorder->firstname); + $params["lastName"] = trim($preorder->lastname); + $params["company"] = trim($preorder->company); + $params["phone"] = trim($preorder->phone); + $params["email"] = trim($preorder->email); + $params["orderId"] = $preorder->ucode; + $params["openAccessId"] = $preorder->oaid; + + $qs = http_build_query($params); + //echo $qs."\n"; + + $createOrderEp = RIMO_API_JSON_URL.RIMO_API_JSON_EP_CREATE_WORKORDER; + $post_url = $createOrderEp."?".$qs; + $ctx = stream_context_create($ctx_opts); + $response = file_get_contents($post_url, false, $ctx); + + if($response === false) { + echo "Fehler beim Exportieren der Workorder für Preorder ".$preorder->id." ".$preorder->ucode." ".$preorder->oaid."\n"; + continue; + } + $preorder->workorder_export_date = date('U'); + $preorder->workorder_export_data = $response; + $preorder->save(); + + //var_dump($preorder, $response); + //exit; + + } + } } \ No newline at end of file diff --git a/scripts/preorder/test-export-preorders-rimo-workorders.php b/scripts/preorder/test-export-preorders-rimo-workorders.php index 7569e9e83..7c42a568e 100755 --- a/scripts/preorder/test-export-preorders-rimo-workorders.php +++ b/scripts/preorder/test-export-preorders-rimo-workorders.php @@ -30,7 +30,7 @@ $ctx_opts = [ $missing_units = []; $missing_extrefs = []; -foreach(PreorderModel::search(["preordercampaign_id" => $campaign_prem_sued ]) as $preorder) { +foreach(PreorderModel::search(["preordercampaign_id" => $campaign_prem_sued]) as $preorder) { if(in_array($preorder->id, $ignore_preorders)) continue; if($preorder->workorder_export_date) continue; From de2b478c2fc22eb0e1f529e737990a00e35fd495 Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Thu, 18 May 2023 15:52:06 +0200 Subject: [PATCH 2/2] Added Preorder admin function Create Workorder --- Layout/default/Preordercampaign/Admin.php | 33 ++++++++-- .../PreordercampaignController.php | 61 ++++++++++++++++--- 2 files changed, 83 insertions(+), 11 deletions(-) diff --git a/Layout/default/Preordercampaign/Admin.php b/Layout/default/Preordercampaign/Admin.php index 14b520133..fc6bee7a5 100644 --- a/Layout/default/Preordercampaign/Admin.php +++ b/Layout/default/Preordercampaign/Admin.php @@ -25,12 +25,37 @@
- diff --git a/application/Preordercampaign/PreordercampaignController.php b/application/Preordercampaign/PreordercampaignController.php index fa28ec787..576804b1e 100644 --- a/application/Preordercampaign/PreordercampaignController.php +++ b/application/Preordercampaign/PreordercampaignController.php @@ -442,6 +442,10 @@ class PreordercampaignController extends mfBaseController { $this->redirect("Preordercampaign"); } + $missing_units = []; + $missing_extrefs = []; + $workorders_created = 0; + $workorders_failed = 0; foreach(PreorderModel::search(["preordercampaign_id" => $id, "workorder_export_date" => null]) as $preorder) { if($preorder->workorder_export_date) { @@ -455,7 +459,7 @@ class PreordercampaignController extends mfBaseController { } $wohneinheit = new ADBWohneinheit($preorder->adb_wohneinheit_id); if(!$wohneinheit->id) { - echo "Wohneinheit nicht gefunden (Preorder ".$preorder->id." ".$preorder->ucode." ".$preorder->oaid.")\n"; + $this->log->error(__METHOD__.": Wohneinheit nicht gefunden (Preorder ".$preorder->id." ".$preorder->ucode." ".$preorder->oaid.")"); continue; } @@ -481,7 +485,14 @@ class PreordercampaignController extends mfBaseController { $params["phone"] = trim($preorder->phone); $params["email"] = trim($preorder->email); $params["orderId"] = $preorder->ucode; - $params["openAccessId"] = $preorder->oaid; + //$params["openAccessId"] = $preorder->oaid; // TODO: flag in campaign to include OAID or not + + $ctx_opts = [ + 'http' => [ + 'method' => 'POST', + 'header' => 'accept: application/json' + ] + ]; $qs = http_build_query($params); //echo $qs."\n"; @@ -489,19 +500,55 @@ class PreordercampaignController extends mfBaseController { $createOrderEp = RIMO_API_JSON_URL.RIMO_API_JSON_EP_CREATE_WORKORDER; $post_url = $createOrderEp."?".$qs; $ctx = stream_context_create($ctx_opts); + $this->log->debug(__METHOD__.": Creating Workorder: $post_url"); + $response = file_get_contents($post_url, false, $ctx); - + if($response === false) { echo "Fehler beim Exportieren der Workorder für Preorder ".$preorder->id." ".$preorder->ucode." ".$preorder->oaid."\n"; + $workorders_failed++; continue; } $preorder->workorder_export_date = date('U'); $preorder->workorder_export_data = $response; $preorder->save(); - - //var_dump($preorder, $response); - //exit; - + $workorders_created++; + } + + $errors = []; + $warnings = []; + + if(count($missing_units)) { + $warnings[] = count($missing_units)." Vobestellungen ohne Wohneinheit"; + } + if(count($missing_extrefs)) { + $warnings[] = count($missing_extrefs)." Wohneinheiten ohne extref (SDIHome_)"; + } + + + if($workorders_failed) { + $errors[] = "$workorders_failed Workorders konnten nicht erstellt werden."; + } + + + if(count($errors)) { + $this->layout()->setFlash(implode("
\n", $errors), "error"); + } + if(count($warnings)) { + $this->layout()->setFlash(implode("
\n", $warnings), "warning"); + } + + if($workorders_created) { + $this->layout()->setFlash("$workorders_created Workorders erfolgreich erstellt", "success"); + } else { + $this->layout()->setFlash("Es konnten keine Workorders erstellt werden", "info"); + } + + + + + $this->redirect("Preordercampaign", "Admin", ["id" => $id]); + } } \ No newline at end of file