New Preorder cancelling

This commit is contained in:
Frank Schubert
2024-02-15 20:44:04 +01:00
parent 0d62e07d3e
commit dfa8d7ca1d
14 changed files with 138 additions and 44 deletions

View File

@@ -125,7 +125,7 @@
<th>Status</th>
<th>Beschreibung</th>
<th>Extref</th>
<th>Best.</th>
<th title="Anzahl Bestellungen">Best.</th>
</tr>
<?php foreach($address->wohneinheiten as $unit): ?>
<tr>
@@ -143,7 +143,7 @@
<td class="text-monospace"><?=$unit->status->code?> - <?=$unit->status->name?></td>
<td><?=((string)$unit) ? "<strong>".(string)$unit."</strong>" : ""?></td>
<td><?=($unit->extref) ? "[".$unit->extref."]" : ""?></td>
<td title="Anzahl Bestellungen"><?=PreorderModel::count(["adb_wohneinheit_id" => $unit->id, "deleted" => 0])?></td>
<td title="Anzahl Bestellungen"><?=PreorderModel::countActive(["adb_wohneinheit_id" => $unit->id])?></td>
</tr>
<?php endforeach; ?>
</table>

View File

@@ -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, '<status_code' => 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, '<status_code' => 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, '<status_code' => 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) {

View File

@@ -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);
}

View File

@@ -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['<status_code'] = 800;
//$preorder_filter['<status_code'] = 800;
// Get mysqli resource from Model, so layout can output data as it's retrieved
// Works around lousy performance and horrendous memory usage
$res = PreorderModel::search($preorder_filter, [], true);
$res = PreorderModel::searchActive($preorder_filter, [], true);
$this->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,

View File

@@ -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_code", $filter)
&& !array_key_exists("<status_id", $filter) && !array_key_exists(">status_id", $filter) && !array_key_exists("status_id", $filter) ) {
$filter["<status_code"] = 899;
}
return self::getFirst($filter, $order);
}
public static function getFirst($filter = false, $order = false) {
$db = FronkDB::singleton();
@@ -232,9 +247,17 @@ class PreorderModel {
return $items;
}
public static function countOrderedAddonservices($filter) {
public static function countOrderedAddonservices($filter = []) {
$db = FronkDB::singleton();
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_code", $filter)) {
$filter["<status_code"] = 899;
}
$where = self::getSqlFilter($filter);
$sql = "SELECT COUNT(*) AS cnt FROM (
SELECT tt_preorder.* FROM`".FRONKDB_DBNAME."`.Preorder tt_preorder
@@ -263,10 +286,18 @@ class PreorderModel {
return 0;
}
public static function searchOrderedAddonservices($filter, $limit = false) {
public static function searchOrderedAddonservices($filter = [], $limit = false) {
$items = [];
$db = FronkDB::singleton();
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_code", $filter)) {
$filter["<status_code"] = 899;
}
$where = self::getSqlFilter($filter);
$sql = "SELECT tt_preorder.* FROM `".FRONKDB_DBNAME."`.Preorder tt_preorder
@@ -305,6 +336,36 @@ class PreorderModel {
return $items;
}
public static function countActive($filter = []) {
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_code", $filter)
&& !array_key_exists("<status_id", $filter) && !array_key_exists(">status_id", $filter) && !array_key_exists("status_id", $filter) ) {
$filter["<status_code"] = 899;
}
return self::count($filter);
}
public static function searchActive($filter = [], $limit = false, $returnDBRessource = 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_code", $filter)
&& !array_key_exists("<status_id", $filter) && !array_key_exists(">status_id", $filter) && !array_key_exists("status_id", $filter) ) {
$filter["<status_code"] = 899;
}
return self::search($filter, $limit, $returnDBRessource);
}
public static function count($filter) {
$db = FronkDB::singleton();
@@ -327,7 +388,7 @@ class PreorderModel {
return 0;
}
public static function search($filter, $limit = false, $returnDBRessource = false) {
public static function search($filter = [], $limit = false, $returnDBRessource = false) {
$items = [];
$db = FronkDB::singleton();

View File

@@ -124,7 +124,7 @@ class Preordercampaign extends mfBaseModel {
}
if($name == "active_preorders") {
$this->active_preorders = PreorderModel::search(['preordercampaign_id' => $this->id, 'deleted' => 0]);
$this->active_preorders = PreorderModel::searchActive(['preordercampaign_id' => $this->id]);
return $this->active_preorders;
}

View File

@@ -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;

View File

@@ -78,6 +78,7 @@ class PreorderlogisticsController extends mfBaseController {
$filter[">status_code"] = 139;
$filter["<status_code"] = 800;
$filter["deleted"] = 0;
$filter["connection_type"] = ["single-dwelling", "business"];
$pagination['maxItems'] = PreorderModel::countWithLogistics($filter);
$preorders = PreorderModel::searchWithLogistics($filter, $pagination);

View File

@@ -13,9 +13,8 @@ class Preordernotification extends mfBaseModel {
$preorder_filter = json_decode($this->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;
}

View File

@@ -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]);

View File

@@ -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

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;