Fixed addon_service filter in Preorder/Index
This commit is contained in:
@@ -66,8 +66,7 @@
|
||||
<label class="form-label" for="filter_addon_services">Zusatzdienste</label>
|
||||
<select name="filter[addon_services]" id="filter_addon_services" class="form-control">
|
||||
<option></option>
|
||||
<option value="1" <?=($filter['addon_services'] == 1) ? "selected='selected'" : ""?>>Mit Zusatzdiensten</option>
|
||||
<option value="0" <?=($filter['addon_services'] === 0 || $filter['addon_services'] === "0") ? "selected='selected'" : ""?>>Keine Zusatzdienste</option>
|
||||
<option value="1" <?=($filter['addon_services'] == 1) ? "selected='selected'" : ""?>>Nur mit Zusatzdiensten</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -48,10 +48,17 @@ class PreorderController extends mfBaseController {
|
||||
}
|
||||
//var_dump($filter);exit;
|
||||
|
||||
$pagination['maxItems'] = PreorderModel::count($filter);
|
||||
$this->layout()->set("pagination", $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)) {
|
||||
|
||||
@@ -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'];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user