Fixed addon_service filter in Preorder/Index

This commit is contained in:
Frank Schubert
2022-11-11 18:03:07 +01:00
parent e0c7a9cf54
commit 2d698160c0
3 changed files with 81 additions and 12 deletions
+1 -2
View File
@@ -66,8 +66,7 @@
<label class="form-label" for="filter_addon_services">Zusatzdienste</label> <label class="form-label" for="filter_addon_services">Zusatzdienste</label>
<select name="filter[addon_services]" id="filter_addon_services" class="form-control"> <select name="filter[addon_services]" id="filter_addon_services" class="form-control">
<option></option> <option></option>
<option value="1" <?=($filter['addon_services'] == 1) ? "selected='selected'" : ""?>>Mit Zusatzdiensten</option> <option value="1" <?=($filter['addon_services'] == 1) ? "selected='selected'" : ""?>>Nur mit Zusatzdiensten</option>
<option value="0" <?=($filter['addon_services'] === 0 || $filter['addon_services'] === "0") ? "selected='selected'" : ""?>>Keine Zusatzdienste</option>
</select> </select>
</div> </div>
+14 -10
View File
@@ -48,10 +48,17 @@ class PreorderController extends mfBaseController {
} }
//var_dump($filter);exit; //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); $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%')"; $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['addon_services'] = false;
$new_filter['add-where'] = " AND JSON_LENGTH(addon_services) > 0"; if(array_key_exists("addon_services", $filter) && $filter['addon_services'] == 1) {
} $new_filter['addon_services'] = true;
if($filter['addon_services'] === 0 || $filter['addon_services'] === "0") {
$new_filter['add-where'] = " AND (JSON_LENGTH(addon_services) = 0 OR addon_services IS NULL)";
}
} }
if(is_array($filter) && count($filter)) { if(is_array($filter) && count($filter)) {
+66
View File
@@ -110,6 +110,71 @@ class PreorderModel {
return null; 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) { public static function count($filter) {
$db = FronkDB::singleton(); $db = FronkDB::singleton();
@@ -253,6 +318,7 @@ class PreorderModel {
} }
} }
// custom where clause
if(array_key_exists("add-where", $filter)) { if(array_key_exists("add-where", $filter)) {
$where .= " ".$filter['add-where']; $where .= " ".$filter['add-where'];
} }