diff --git a/Layout/default/Preorder/Index.php b/Layout/default/Preorder/Index.php
index cf535ecff..0a435c382 100644
--- a/Layout/default/Preorder/Index.php
+++ b/Layout/default/Preorder/Index.php
@@ -66,8 +66,7 @@
diff --git a/application/Preorder/PreorderController.php b/application/Preorder/PreorderController.php
index ec3f9edf1..8710edd7a 100644
--- a/application/Preorder/PreorderController.php
+++ b/application/Preorder/PreorderController.php
@@ -48,10 +48,17 @@ class PreorderController extends mfBaseController {
}
//var_dump($filter);exit;
- $pagination['maxItems'] = PreorderModel::count($filter);
- $this->layout()->set("pagination", $pagination);
- $preorders = PreorderModel::search($filter, $pagination);
+
+
+ if($filter['addon_services']) {
+ $pagination['maxItems'] = PreorderModel::countOrderedAddonservices($filter);
+ $preorders = PreorderModel::searchOrderedAddonservices($filter, $pagination);
+ } else {
+ $pagination['maxItems'] = PreorderModel::count($filter);
+ $preorders = PreorderModel::search($filter, $pagination);
+ }
+ $this->layout()->set("pagination", $pagination);
$this->layout()->set("preorders", $preorders);
}
@@ -83,13 +90,10 @@ class PreorderController extends mfBaseController {
$new_filter['add-where'] = " AND (firstname like '%$kunde%' OR lastname like '%$kunde%' OR street like '%$kunde%' OR zip like '%$kunde%' OR city like '%$kunde%')";
}
- if(array_key_exists("addon_services", $filter)) {
- if($filter['addon_services'] == 1) {
- $new_filter['add-where'] = " AND JSON_LENGTH(addon_services) > 0";
- }
- if($filter['addon_services'] === 0 || $filter['addon_services'] === "0") {
- $new_filter['add-where'] = " AND (JSON_LENGTH(addon_services) = 0 OR addon_services IS NULL)";
- }
+
+ $new_filter['addon_services'] = false;
+ if(array_key_exists("addon_services", $filter) && $filter['addon_services'] == 1) {
+ $new_filter['addon_services'] = true;
}
if(is_array($filter) && count($filter)) {
diff --git a/application/Preorder/PreorderModel.php b/application/Preorder/PreorderModel.php
index f9c966c82..0d6335fcb 100644
--- a/application/Preorder/PreorderModel.php
+++ b/application/Preorder/PreorderModel.php
@@ -110,6 +110,71 @@ class PreorderModel {
return null;
}
+ public static function countOrderedAddonservices($filter) {
+ $db = FronkDB::singleton();
+
+ $where = self::getSqlFilter($filter);
+ $sql = "SELECT COUNT(*) AS cnt FROM `".FRONKDB_DBNAME."`.Preorder tt_preorder
+ LEFT JOIN `".ADDRESSDB_DBNAME."`.view_hausnummer as adb_hausnummer ON (tt_preorder.adb_hausnummer_id = adb_hausnummer.hausnummer_id),
+ JSON_TABLE(addon_services,
+ '$[*]' COLUMNS (
+ ordered VARCHAR(64) PATH '$.ordered'
+ )
+ ) a_services
+ WHERE $where
+ AND addon_services IS NOT NULL AND (a_services.ordered = 'true' OR a_services.ordered=1)
+ GROUP BY tt_preorder.id
+ ";
+
+ mfLoghandler::singleton()->debug($sql);
+
+ $res = $db->query($sql);
+ if($db->num_rows($res)) {
+ $data = $db->fetch_object($res);
+ return $data->cnt;
+ }
+ return 0;
+ }
+
+ public static function searchOrderedAddonservices($filter, $limit = false) {
+ $items = [];
+ $db = FronkDB::singleton();
+
+ $where = self::getSqlFilter($filter);
+
+ $sql = "SELECT tt_preorder.* FROM `".FRONKDB_DBNAME."`.Preorder tt_preorder
+ LEFT JOIN `".ADDRESSDB_DBNAME."`.view_hausnummer as adb_hausnummer ON (tt_preorder.adb_hausnummer_id = adb_hausnummer.hausnummer_id),
+ JSON_TABLE(addon_services,
+ '$[*]' COLUMNS (
+ ordered VARCHAR(64) PATH '$.ordered'
+ )
+ ) a_services
+ WHERE $where
+ AND addon_services IS NOT NULL AND (a_services.ordered = 'true' OR a_services.ordered=1)
+ GROUP BY tt_preorder.id
+ ORDER BY lastname, firstname
+
+ ";
+
+ if(is_array($limit) && count($limit)) {
+ if(is_numeric($limit['start']) && is_numeric($limit['count'])) {
+ $sql .= " LIMIT ".$limit['start'].", ".$limit['count'];
+ } elseif(is_numeric($count)) {
+ $sql .= " LIMIT ".$limit['count'];
+ }
+ }
+
+ mfLoghandler::singleton()->debug($sql);
+
+ $res = $db->query($sql);
+ if($db->num_rows($res)) {
+ while($data = $db->fetch_object($res)) {
+ $items[] = new Preorder($data);
+ }
+ }
+ return $items;
+ }
+
public static function count($filter) {
$db = FronkDB::singleton();
@@ -253,6 +318,7 @@ class PreorderModel {
}
}
+ // custom where clause
if(array_key_exists("add-where", $filter)) {
$where .= " ".$filter['add-where'];
}