diff --git a/Layout/default/Preorder/include/preorder-detail.php b/Layout/default/Preorder/include/preorder-detail.php index 6593dbdd4..013b71be9 100644 --- a/Layout/default/Preorder/include/preorder-detail.php +++ b/Layout/default/Preorder/include/preorder-detail.php @@ -6,6 +6,9 @@
+ cancel_request): ?> +
+
+
+
+
+ +
Storno/Kündigung
+ +
+
+

Storno / Kündigung

+ + + + + + + + + + + + + + + +
Kündigungsdatumcancel_request_execution_date) ? (new DateTime($preorder->cancel_request_execution_date))->format("d.m.Y") : ""?>
Demontage abcancel_request_execution_date) ? (new DateTime($preorder->cancel_request_execution_date))->modify("+1 day")->format("d.m.Y") : ""?>
Kündigungsgrundcancel_request_status->code?> - cancel_request_status->name?>
Kündigung erstelltcancel_request)?> (cancel_request_creator->name?>)
+ + + + +
+
+
+
+
+
+
+ +
diff --git a/application/Preorder/Preorder.php b/application/Preorder/Preorder.php index 1652bebc1..acafb8603 100644 --- a/application/Preorder/Preorder.php +++ b/application/Preorder/Preorder.php @@ -24,6 +24,8 @@ class Preorder extends mfBaseModel { private $citycomoan; // ONT data private $ctags; // network-keyed array of Ctags private $statusjournals; + private $cancel_request_status; + private $cancel_request_creator; protected function beforeUpdate($data) { if(!array_key_exists("edit_by", $data)) { @@ -1573,19 +1575,6 @@ class Preorder extends mfBaseModel { } - if($name == "creator") { - $user = mfValuecache::singleton()->get("Worker-id-" . $this->create_by); - if($user) { - $this->creator = $user; - return $this->creator; - } - $this->creator = new User($this->create_by); - if($this->creator->id) { - mfValuecache::singleton()->set("Worker-id-" . $this->create_by, $this->creator); - } - return $this->creator; - } - if($name === 'fcp') { if(!$this->adb_hausnummer->fcp_id) return null; return ADBRimoFcp::get($this->adb_hausnummer->fcp_id); @@ -1605,8 +1594,69 @@ class Preorder extends mfBaseModel { return $this->ctags; } + if($name == "cancel_request_status") { + if(!$this->cancel_request_status_code) return null; + + $this->cancel_request_status = mfValuecache::singleton()->get("mfObjectmodel-Preorderstatus-code-" . $this->cancel_request_status_code); + if(!$this->cancel_request_status) { + $cancel_request_status = PreorderstatusModel::getFirst(["code" => $this->cancel_request_status_code]); + if($cancel_request_status) { + mfValuecache::singleton()->set("mfObjectmodel-Preorderstatus-code-" . $this->cancel_request_status_code, $cancel_request_status); + $this->cancel_request_status = $cancel_request_status; + } + } + return $this->cancel_request_status; + } + + if($name == "cancel_request_creator") { + $user = mfValuecache::singleton()->get("Worker-id-" . $this->cancel_request_by); + if($user) { + $this->cancel_request_creator = $user; + return $this->cancel_request_creator; + } + $this->cancel_request_creator = new User($this->cancel_request_by); + if($this->cancel_request_creator->id) { + mfValuecache::singleton()->set("Worker-id-" . $this->cancel_request_by, $this->cancel_request_creator); + } + return $this->cancel_request_creator; + } + + if($name == "cancel_approver") { + $user = mfValuecache::singleton()->get("Worker-id-" . $this->cancel_approved_by); + if($user) { + $this->cancel_approver = $user; + return $this->cancel_approver; + } + $this->cancel_approver = new User($this->cancel_approved_by); + if($this->cancel_approver->id) { + mfValuecache::singleton()->set("Worker-id-" . $this->cancel_approved_by, $this->cancel_approver); + } + return $this->editor; + } + + if($name == "creator") { + $user = mfValuecache::singleton()->get("Worker-id-" . $this->create_by); + if($user) { + $this->creator = $user; + return $this->creator; + } + $this->creator = new User($this->create_by); + if($this->creator->id) { + mfValuecache::singleton()->set("Worker-id-" . $this->create_by, $this->creator); + } + return $this->creator; + } + if($name == "editor") { + $user = mfValuecache::singleton()->get("Worker-id-" . $this->edit_by); + if($user) { + $this->editor = $user; + return $this->editor; + } $this->editor = new User($this->edit_by); + if($this->editor->id) { + mfValuecache::singleton()->set("Worker-id-" . $this->edit_by, $this->editor); + } return $this->editor; } diff --git a/application/Preorder/PreorderController.php b/application/Preorder/PreorderController.php index f7b1cb584..8ee9418c7 100644 --- a/application/Preorder/PreorderController.php +++ b/application/Preorder/PreorderController.php @@ -1090,6 +1090,12 @@ class PreorderController extends mfBaseController { case "saveStatusJournal": $return = $this->saveStatusJournalApi(); break; + case "approveCancelRequest": + $return = $this->approveCancelRequest(); + break; + case "denyCancelRequest": + $return = $this->denyCancelRequest(); + break; default: $return = false; } @@ -1108,6 +1114,49 @@ class PreorderController extends mfBaseController { } } + protected function approveCancelRequest() { + return true; // disabled + + $preorder_id = $this->request->pid; + + $preorder = new Preorder($preorder_id); + if(!$preorder->id) { + $this->log->debug(__METHOD__.": Preorder $preorder_id not found"); + return false; + } + + if(!$preorder->cancel_request) { + $this->log->debug(__METHOD__.": Preorder $preorder_id has no cancel request"); + return false; + } + } + + protected function denyCancelRequest() { + return true; // disabled + + $preorder_id = $this->request->pid; + + $preorder = new Preorder($preorder_id); + if(!$preorder->id) { + $this->log->debug(__METHOD__.": Preorder $preorder_id not found"); + return false; + } + + if(!$preorder->cancel_request) { + $this->log->debug(__METHOD__.": Preorder $preorder_id has no cancel request"); + return false; + } + + // empty all cancel request fields + $preorder->cancel_request = null; + $preorder->cancel_request_by = null; + $preorder->cancel_request_status_code = null; + $preorder->cancel_request_execution_date = null; + $preorder->save(); + + return ["message" => "Cancel request removed"]; + } + protected function saveStatusJournalApi() { $preorder_id = $this->request->preorder_id; $text = $this->request->text; diff --git a/db/migrations/20250911134343_preorder_add_cancel_request_status_code.php b/db/migrations/20250911134343_preorder_add_cancel_request_status_code.php new file mode 100644 index 000000000..3a268dfe4 --- /dev/null +++ b/db/migrations/20250911134343_preorder_add_cancel_request_status_code.php @@ -0,0 +1,32 @@ +getEnvironment() == "thetool") { + $table = $this->table("Preorder"); + $table->addColumn("cancel_request_status_code", "string", ["null" => true, "default" => null, "limit" => 64, "after" => "cancel_request_by"]); + $table->addColumn("cancel_request_execution_date", "date", ["null" => true, "default" => null, "limit" => 64, "after" => "cancel_request_status_code"]); + $table->update(); + } + + if($this->getEnvironment() == "addressdb") { + + } + } + + public function down(): void + { + if($this->getEnvironment() == "thetool") { + $this->table("Preorder")->removeColumn("cancel_request_status_code")->update(); + } + + if($this->getEnvironment() == "addressdb") { + + } + } +}