diff --git a/Layout/default/AddressDB/View.php b/Layout/default/AddressDB/View.php index 7ad39848b..c173e5bfb 100644 --- a/Layout/default/AddressDB/View.php +++ b/Layout/default/AddressDB/View.php @@ -125,7 +125,7 @@ Status Beschreibung Extref - Best. + Best. wohneinheiten as $unit): ?> @@ -143,7 +143,7 @@ status->code?> - status->name?> ".(string)$unit."" : ""?> extref) ? "[".$unit->extref."]" : ""?> - $unit->id, "deleted" => 0])?> + $unit->id])?> diff --git a/application/Api/v1/PreorderApicontroller.php b/application/Api/v1/PreorderApicontroller.php index deae40682..d5db00a6d 100644 --- a/application/Api/v1/PreorderApicontroller.php +++ b/application/Api/v1/PreorderApicontroller.php @@ -153,7 +153,7 @@ class PreorderApicontroller extends mfBaseApicontroller { $return = []; - foreach(PreorderModel::search($preorder_search) as $preorder) { + foreach(PreorderModel::searchActive($preorder_search) as $preorder) { $return[] = $preorder->getApiArray(); } @@ -216,14 +216,14 @@ class PreorderApicontroller extends mfBaseApicontroller { return mfResponse::NotFound(["message" => "Preorder not found"]); } - $preorder = PreorderModel::getFirst(['ucode' => strtoupper($code), 'partner_id' => $this->me->address_id, 'deleted' => 0, ' 800]); + $preorder = PreorderModel::getFirst(['ucode' => strtoupper($code), 'partner_id' => $this->me->address_id, 'deleted' => 0]); if(!$preorder) { // try oan id - $preorder = PreorderModel::getFirst(['oaid' => strtolower($code), 'partner_id' => $this->me->address_id, 'deleted' => 0, ' 800]); + $preorder = PreorderModel::getFirst(['oaid' => strtolower($code), 'partner_id' => $this->me->address_id, 'deleted' => 0]); } if(!$preorder) { // try as extref - $preorder = PreorderModel::getFirst(['extref' => $code, 'partner_id' => $this->me->address_id, 'deleted' => 0, ' 800]); + $preorder = PreorderModel::getFirst(['extref' => $code, 'partner_id' => $this->me->address_id, 'deleted' => 0]); } if(!$preorder) { return mfResponse::NotFound(["message" => "Preorder not found"]); @@ -242,17 +242,38 @@ class PreorderApicontroller extends mfBaseApicontroller { } } */ - if($preorder->deleted || $preorder->cancel_request) { + if($preorder->deleted || $preorder->cancel_request || $preorder->status->code >= 899) { return mfResponse::Forbidden(["message" => "Order already cancelled"]); } + if(array_key_exists("status", $this->get)) { + $status_code = $this->get["status"]; + if($status_code < 899 || $status_code > 999) { + return mfResponse::BadRequest(["message" => "Status code out of bounds"]); + } + + $status = PreorderstatusModel::getFirst(["code" => $status_code]); + if(!$status) { + return mfResponse::BadRequest(["message" => "Invalid Status code"]); + } + } else { + //910 - Cancelled (ohne weitere Begründung) + $status = PreorderstatusModel::getFirst(["code" => TT_PREORDER_DEFAULT_CANCEL_STATUSCODE]); + if(!$status) { + return mfResponse::InternalServerError(); + } + } + + + // set cancel_date and canceller - $preorder->cancel_request = date('U'); + /*$preorder->cancel_request = date('U'); $preorder->cancel_request_by = $this->me->id; $preorder->cancel_approved = $this->me->id; $preorder->deleted = date('U'); - $preorder->deleted_by = $this->me->id; - $preorder->status_id = 23; //910 - Cancelled (ohne weitere Begründung) + $preorder->deleted_by = $this->me->id;*/ + $preorder->status_id = $status->id; + $preorder->edit_by = $this->me->id; if(!$preorder->save()) { return mfResponse::InternalServerError(); } @@ -569,7 +590,7 @@ class PreorderApicontroller extends mfBaseApicontroller { $existing_preorder = false; while($unit = $this->db()->fetch_object($res)) { // check if there is an existing preorder - $existing_preorder = PreorderModel::getFirst(['adb_wohneinheit_id' => $unit->wohneinheit_id, 'deleted' => 0]); + $existing_preorder = PreorderModel::getFirstActive(['adb_wohneinheit_id' => $unit->wohneinheit_id]); if(!$existing_preorder) { break; } @@ -589,7 +610,7 @@ class PreorderApicontroller extends mfBaseApicontroller { */ if($unit && $unit->wohneinheit_id) { - $existing_preorder = PreorderModel::getFirst(['adb_wohneinheit_id' => $unit->wohneinheit_id, 'deleted' => 0]); + $existing_preorder = PreorderModel::getFirstActive(['adb_wohneinheit_id' => $unit->wohneinheit_id]); if($existing_preorder) { if($this->exist_is_error && !$is_additional_order) { return mfResponse::Forbidden(['message' => "Für diese Wohneinheit liegt bereits eine Bestellung vor"]); @@ -823,7 +844,7 @@ class PreorderApicontroller extends mfBaseApicontroller { } else { // else get available units with no unit data, so we can update it $exclude_wohneinheit_ids = []; - $preorders_in_hausnummer = PreorderModel::search(['adb_hausnummer_id' => $address->hausnummer_id, "deleted" => 0]); + $preorders_in_hausnummer = PreorderModel::searchActive(['adb_hausnummer_id' => $address->hausnummer_id]); if(count($preorders_in_hausnummer)) { foreach($preorders_in_hausnummer as $pih) { if($pih->adb_wohneinheit_id) { diff --git a/application/OpenAccessId/OpenAccessId.php b/application/OpenAccessId/OpenAccessId.php index e185a57cc..8ff44ad52 100644 --- a/application/OpenAccessId/OpenAccessId.php +++ b/application/OpenAccessId/OpenAccessId.php @@ -324,7 +324,6 @@ class OpenAccessId extends mfBaseModel { //var_dump($cat_data);exit; $cat_data->$key = $value; $exp_data->$cat = $cat_data; - var_dump($exp_data); $this->export_data = json_encode($exp_data); } diff --git a/application/Preorder/PreorderController.php b/application/Preorder/PreorderController.php index a7fc69701..076cdab90 100644 --- a/application/Preorder/PreorderController.php +++ b/application/Preorder/PreorderController.php @@ -150,8 +150,8 @@ class PreorderController extends mfBaseController { $pagination['maxItems'] = PreorderModel::countOrderedAddonservices($filter); $preorders = PreorderModel::searchOrderedAddonservices($filter, $pagination); } else { - $pagination['maxItems'] = PreorderModel::count($filter); - $preorders = PreorderModel::search($filter, $pagination); + $pagination['maxItems'] = PreorderModel::countActive($filter); + $preorders = PreorderModel::searchActive($filter, $pagination); } $this->layout()->set("pagination", $pagination); $this->layout()->set("preorders", $preorders); @@ -161,17 +161,17 @@ class PreorderController extends mfBaseController { private function getPreparedFilter($filter) { $new_filter = []; - if(array_key_exists("show_deleted", $filter)) { + /*if(array_key_exists("show_deleted", $filter)) { if($filter['show_deleted'] == "show") { $new_filter['deleted'] = null; } elseif($filter['show_deleted'] == "only") { $new_filter['deleted'] = 1; } else { - $new_filter['deleted'] = 0; + $new_filter['deleted'] = null; } } else { - $new_filter['deleted'] = 0; - } + $new_filter['deleted'] = null; + }*/ $new_filter['add-where'] = ""; @@ -796,11 +796,11 @@ class PreorderController extends mfBaseController { $preorder_filter["preordercampaign_id"] = $campaign_ids; } - $preorder_filter['layout()->setTemplate("Preorder/export.csv"); $this->layout()->set("res", $res); @@ -913,7 +913,7 @@ class PreorderController extends mfBaseController { if(!$filter['preordercampaign_id']) $filter['preordercampaign_id'] = 0; //var_dump($filter);exit; - $results = PreorderModel::search($filter); + $results = PreorderModel::searchActive($filter); foreach($results as $preorder) { //$this->log->debug("building status: ".print_r($building->status,true)); $data = clone($preorder->data); @@ -1003,11 +1003,12 @@ class PreorderController extends mfBaseController { } $preorder->status_id = $status_id; + $preorder->edit_by = $this->me->id; $preorder->save(); $update = []; - foreach(PreorderModel::search(["deleted" => 0, "adb_hausnummer_id" => $preorder->adb_hausnummer_id]) as $affected_preorder) { + foreach(PreorderModel::searchActive(["adb_hausnummer_id" => $preorder->adb_hausnummer_id]) as $affected_preorder) { $up = [ "id" => $affected_preorder->id, "sid" => $affected_preorder->status_id, diff --git a/application/Preorder/PreorderModel.php b/application/Preorder/PreorderModel.php index 2f189099b..f63475731 100644 --- a/application/Preorder/PreorderModel.php +++ b/application/Preorder/PreorderModel.php @@ -123,6 +123,21 @@ class PreorderModel { } + public static function getFirstActive($filter = [], $order = false) { + if(!is_array($filter)) return false; + + if(!array_key_exists("deleted", $filter)) { + $filter["deleted"] = null; + } + + if( !array_key_exists("status_code", $filter) && !array_key_exists("status_code", $filter) + && !array_key_exists("status_id", $filter) && !array_key_exists("status_id", $filter) ) { + $filter["status_code", $filter) && !array_key_exists("status_code", $filter)) { + $filter["status_code", $filter) && !array_key_exists("status_code", $filter)) { + $filter["status_code", $filter) && !array_key_exists("status_code", $filter) + && !array_key_exists("status_id", $filter) && !array_key_exists("status_id", $filter) ) { + $filter["status_code", $filter) && !array_key_exists("status_code", $filter) + && !array_key_exists("status_id", $filter) && !array_key_exists("status_id", $filter) ) { + $filter["active_preorders = PreorderModel::search(['preordercampaign_id' => $this->id, 'deleted' => 0]); + $this->active_preorders = PreorderModel::searchActive(['preordercampaign_id' => $this->id]); return $this->active_preorders; } diff --git a/application/Preordercampaign/PreordercampaignController.php b/application/Preordercampaign/PreordercampaignController.php index 430efddf4..f2ece6110 100644 --- a/application/Preordercampaign/PreordercampaignController.php +++ b/application/Preordercampaign/PreordercampaignController.php @@ -394,7 +394,7 @@ class PreordercampaignController extends mfBaseController { } $this->layout()->set("campaign", $campaign); - $preorders = PreorderModel::search(["preordercampaign_id" => $id, "add-where" => "AND JSON_LENGTH(addon_services) > 1"]); + $preorders = PreorderModel::searchActive(["preordercampaign_id" => $id, "add-where" => "AND JSON_LENGTH(addon_services) > 1"]); if(!count($preorders)) { $this->layout->setFlash("Keine Vorbestellungen mit bestellten Dienstleistungen gefunden."); @@ -495,7 +495,7 @@ class PreordercampaignController extends mfBaseController { $updated_units = 0; - foreach(PreorderModel::search(["preordercampaign_id" => $id, 'deleted' => 0]) as $preorder) { + foreach(PreorderModel::searchActive(["preordercampaign_id" => $id, 'deleted' => 0]) as $preorder) { if(!$preorder->adb_wohneinheit_id) continue; if(!$preorder->oaid) continue; $unit = $preorder->adb_wohneinheit; @@ -529,7 +529,7 @@ class PreordercampaignController extends mfBaseController { $assigned_oaids = 0; $multiple_unit = 0; - foreach(PreorderModel::search(["preordercampaign_id" => $id, "oaid" => null, "connection_count" => 1, 'deleted' => 0]) as $preorder) { + foreach(PreorderModel::searchActive(["preordercampaign_id" => $id, "oaid" => null, "connection_count" => 1]) as $preorder) { if($preorder->type == "interest") { continue; } @@ -553,7 +553,7 @@ class PreordercampaignController extends mfBaseController { continue; }*/ - $wohneinheit_count = PreorderModel::count(["deleted" => 0, "adb_wohneinheit_id" => $wohneinheit->id]); + $wohneinheit_count = PreorderModel::countActive(["adb_wohneinheit_id" => $wohneinheit->id]); if($wohneinheit_count > 1) { $this->log->error(__METHOD__.": Wohneinheit ".$wohneinheit->id." is assigned to multiple preorders!"); $multiple_unit++; @@ -608,7 +608,7 @@ class PreordercampaignController extends mfBaseController { $workorders_created = 0; $workorders_failed = 0; - foreach(PreorderModel::search(["preordercampaign_id" => $id, "rimo_workorder" => false, "connection_count" => 1, 'deleted' => 0]) as $preorder) { + foreach(PreorderModel::searchActive(["preordercampaign_id" => $id, "rimo_workorder" => false, "connection_count" => 1]) as $preorder) { if($preorder->workorder_export_date) { $this->log->warning(__METHOD__.": workorder_export_date not null"); } @@ -754,8 +754,7 @@ class PreordercampaignController extends mfBaseController { $missing_extrefs = 0; $missing_oaid = 0; - foreach(PreorderModel::search(["preordercampaign_id" => $id, "connection_count" => 1, 'deleted' => 0]) as $preorder) { - if($preorder->id != 997) continue; + foreach(PreorderModel::searchActive(["preordercampaign_id" => $id, "connection_count" => 1]) as $preorder) { if($preorder->type == "interest") { $this->log->debug(__METHOD__.": Ignoring Preorder ".$preorder->id.": is interest"); @@ -818,7 +817,7 @@ class PreordercampaignController extends mfBaseController { $oaid_updated = 0; - foreach(PreorderModel::search(["preordercampaign_id" => $id, "connection_count" => 1, 'deleted' => 0]) as $preorder) { + foreach(PreorderModel::searchActive(["preordercampaign_id" => $id, "connection_count" => 1]) as $preorder) { if($preorder->type == "interest") { $this->log->debug(__METHOD__.": Ignoring Preorder ".$preorder->id.": is interest"); continue; diff --git a/application/Preorderlogistics/PreorderlogisticsController.php b/application/Preorderlogistics/PreorderlogisticsController.php index 008fc9e26..08ff92390 100644 --- a/application/Preorderlogistics/PreorderlogisticsController.php +++ b/application/Preorderlogistics/PreorderlogisticsController.php @@ -78,6 +78,7 @@ class PreorderlogisticsController extends mfBaseController { $filter[">status_code"] = 139; $filter["preorder_filter, true); $preorder_filter['preordercampaign_id'] = $this->preordercampaign_id; - $preorder_filter['deleted'] = null; - $preorders = PreorderModel::search($preorder_filter); + $preorders = PreorderModel::searchActive($preorder_filter); return $preorders; } diff --git a/application/Preordernotification/PreordernotificationController.php b/application/Preordernotification/PreordernotificationController.php index bb67fdcbf..c3934c8e1 100644 --- a/application/Preordernotification/PreordernotificationController.php +++ b/application/Preordernotification/PreordernotificationController.php @@ -363,13 +363,12 @@ class PreordernotificationController extends mfBaseController { // get and save preorder count $preorder_filter = json_decode($notification->preorder_filter, true); $preorder_filter['preordercampaign_id'] = $notification->preordercampaign_id; - $preorder_filter['deleted'] = null; - $preorder_count = PreorderModel::count($preorder_filter); + $preorder_count = PreorderModel::countActive($preorder_filter); $notification->recipient_count = $preorder_count; $notification->save(); if($r->send_testmail && $r->testmail_to) { - $preorder = PreorderModel::getFirst($preorder_filter); + $preorder = PreorderModel::getFirstActive($preorder_filter); if(!$preorder) { $this->layout()->setFlash("Testmail konnte nicht versendet werden. Keine Empfänger gefunden", "warn"); $this->redirect("Preordernotification", "edit", ['id' => $new_id]); diff --git a/public/docs/preorder-api.yaml b/public/docs/preorder-api.yaml index 8b7d8c4f8..69883fe49 100644 --- a/public/docs/preorder-api.yaml +++ b/public/docs/preorder-api.yaml @@ -725,6 +725,20 @@ paths: required: true schema: type: string + - name: status + in: query + description: | + Kündigungsgund (**Default**: 910) + + | code | text | description | + |------|------|-------------| + | 899 | Cancelled | Storniert: Keine Leitungsrechte / Genehmigung | + | 900 | Cancelled | Storniert: Wirtschaftliche Umstände | + | 910 | Cancelled | Storniert: Keine Begründung | + | 920 | Cancelled | Gekündigt durch Kunde | + | 921 | Cancelled | Gekündigt durch ISP | + schema: + type: integer responses: '200': description: Successful operation diff --git a/scripts/preorder/preorders-split-multiple-connections.php b/scripts/preorder/preorders-split-multiple-connections.php index 23fb58bc1..708097fb9 100755 --- a/scripts/preorder/preorders-split-multiple-connections.php +++ b/scripts/preorder/preorders-split-multiple-connections.php @@ -53,7 +53,7 @@ $missing_doors = []; $total = 0; $c = 0; -foreach(PreorderModel::search(["deleted" => 0, "preordercampaign_id" => $selected_campaign, "connection_count" => 2]) as $preorder) { +foreach(PreorderModel::searchActive(["preordercampaign_id" => $selected_campaign, "connection_count" => 2]) as $preorder) { // check if we have enough units with extref $wohneinheiten = ADBWohneinheitModel::search(["hausnummer_id" => $preorder->adb_hausnummer_id]); $unit_count = count($wohneinheiten); diff --git a/scripts/preorder/test-export-preorders-rimo-workorders.php b/scripts/preorder/test-export-preorders-rimo-workorders.php index 7c42a568e..d4e8dd075 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::searchActive(["preordercampaign_id" => $campaign_prem_sued]) as $preorder) { if(in_array($preorder->id, $ignore_preorders)) continue; if($preorder->workorder_export_date) continue; diff --git a/scripts/preorder/update-preorder-add-unit.php b/scripts/preorder/update-preorder-add-unit.php index 959151b67..e6c96f012 100755 --- a/scripts/preorder/update-preorder-add-unit.php +++ b/scripts/preorder/update-preorder-add-unit.php @@ -50,7 +50,7 @@ echo "selected campaign: $selected_campaign - ".$argv[1]."\n"; $same_unit_count = 0; $i = 0; -foreach(PreorderModel::search(['preordercampaign_id' => $selected_campaign, 'adb_wohneinheit_id' => null, 'connection_count' => 1, "connection_type" => "single-dwelling", "deleted" => 0]) as $preorder) { +foreach(PreorderModel::searchActive(['preordercampaign_id' => $selected_campaign, 'adb_wohneinheit_id' => null, 'connection_count' => 1, "connection_type" => "single-dwelling"]) as $preorder) { if(in_array($preorder->id, $ignore_preorders)) continue; //if($preorder->connection_type != "single-dwelling") continue;