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") {
+
+ }
+ }
+}