From 40940db8f8631def7cbd8c1ba3925201566ba4ab Mon Sep 17 00:00:00 2001 From: Luca Haid Date: Mon, 20 Oct 2025 12:56:44 +0200 Subject: [PATCH] preorderlogistcs fix fcp filter and fix multiple campaigns --- application/Preorder/PreorderModel.php | 1 - .../PreorderlogisticsController.php | 30 ++++++++++++------- .../PreorderLogistics/PreorderLogistics.css | 4 +++ .../PreorderLogistics/PreorderLogistics.js | 18 ++++++++++- 4 files changed, 41 insertions(+), 12 deletions(-) diff --git a/application/Preorder/PreorderModel.php b/application/Preorder/PreorderModel.php index 664e64e07..a4a5bf6b8 100644 --- a/application/Preorder/PreorderModel.php +++ b/application/Preorder/PreorderModel.php @@ -756,7 +756,6 @@ class PreorderModel } } - if (array_key_exists("preordercampaign_id", $filter)) { $preordercampaign_id = $filter['preordercampaign_id']; if (is_numeric($preordercampaign_id)) { diff --git a/application/Preorderlogistics/PreorderlogisticsController.php b/application/Preorderlogistics/PreorderlogisticsController.php index d5be88b99..978e2a161 100644 --- a/application/Preorderlogistics/PreorderlogisticsController.php +++ b/application/Preorderlogistics/PreorderlogisticsController.php @@ -55,8 +55,11 @@ class PreorderlogisticsController extends mfBaseController { if (empty($filter['preordercampaign_id'])) { $filter['preordercampaign_id'] = $my_campaign_ids; } else { - // Ensure the filtered campaign is one the user has access to - if (!in_array($filter['preordercampaign_id'], $my_campaign_ids)) { + // Ensure the filtered campaign is one the user has access to are arrays and if not allowed dont push it to the filter + $preordercampaign_ids = is_array($filter['preordercampaign_id']) ? $filter['preordercampaign_id'] : [$filter['preordercampaign_id']]; + + $new_allowed_ids = array_intersect($preordercampaign_ids, $my_campaign_ids); + if (empty($new_allowed_ids)) { self::returnJson(['rows' => [], 'pagination' => ['total_rows' => 0]]); return; } @@ -100,15 +103,22 @@ class PreorderlogisticsController extends mfBaseController { return; } - $apiUrl = self::getUrl("Preorder", "Api"); - $response = mf::get_url_content($apiUrl . "?do=getFCPsForCampaign&campaign_id=" . intval($this->request->campaign_id)); - $data = json_decode($response, true); - - if (isset($data['status']) && $data['status'] == 'OK' && is_array($data['result'])) { - self::returnJson($data['result']); - } else { - self::returnJson([]); + if (is_array($this->request->campaign_id)) { + if (count($this->request->campaign_id) !== 1) { + self::returnJson([]); + return; + } + $this->request->campaign_id = $this->request->campaign_id[0]; } + + + $campaign = new Preordercampaign($this->request->campaign_id); + if (!$campaign->id) self::sendError("Kampagne nicht gefunden"); + + self::returnJson(array_map( + fn($fcp) => ["real_id" => $fcp->id, "id" => $fcp->name ?? null, "text" => $fcp->name ?? null, 'lat' => $fcp->gps_lat ?? null, 'lng' => $fcp->gps_long ?? null], + ADBRimoFcp::getAll(["netzgebiet_id" => intval($campaign->network->adb_netzgebiet_id)]) ?? [] + )); } protected function saveSentAction() { diff --git a/public/js/pages/PreorderLogistics/PreorderLogistics.css b/public/js/pages/PreorderLogistics/PreorderLogistics.css index 965d81d64..6678ffa59 100644 --- a/public/js/pages/PreorderLogistics/PreorderLogistics.css +++ b/public/js/pages/PreorderLogistics/PreorderLogistics.css @@ -6,4 +6,8 @@ .sent-checkbox-wrapper .fa-check { font-size: 1.2rem; +} + +.col-form-label { + padding-top: 0 !important } \ No newline at end of file diff --git a/public/js/pages/PreorderLogistics/PreorderLogistics.js b/public/js/pages/PreorderLogistics/PreorderLogistics.js index 3eadd4cd6..7bda1d003 100644 --- a/public/js/pages/PreorderLogistics/PreorderLogistics.js +++ b/public/js/pages/PreorderLogistics/PreorderLogistics.js @@ -6,7 +6,7 @@ Vue.component('preorder-logistics', {

Filter

- +
@@ -76,6 +76,7 @@ Vue.component('preorder-logistics', { isPrinting: false, isExporting: false, isExportingAndMarking: false, + lastFcpInfoTime: null, campaigns: [{value: '', text: 'Alle'}], fcps: [], sentStatusOptions: [ @@ -123,6 +124,21 @@ Vue.component('preorder-logistics', { this.filters.fcp = []; return; } + + if (Array.isArray(this.filters.preordercampaign_id) && this.filters.preordercampaign_id.length !== 1) { + this.fcps = []; + this.filters.fcp = []; + const now = new Date().getTime(); + if (!this.lastFcpInfoTime || now - this.lastFcpInfoTime > 7000) { + this.lastFcpInfoTime = now; + } else { + return; + } + + window.notify('info', 'Bitte wählen Sie genau eine Kampagne aus, um die FCPs zu laden.'); + return; + } + try { const response = await axios.get(`${window.TT_CONFIG.BASE_PATH}/Preorderlogistics/getFCPsForCampaign`, { params: {campaign_id: this.filters.preordercampaign_id}