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']; }