feat: clean up and optimize FCP filter and highlighting logic

This commit is contained in:
2026-02-27 12:36:01 +01:00
parent ad8c6eaeca
commit be9e6ae4e5
3 changed files with 7 additions and 8 deletions

View File

@@ -2524,11 +2524,9 @@ $pagination_entity_name = "Vorbestellungen";
fcpData.sort((a, b) => { fcpData.sort((a, b) => {
if (a.id === "") return -1; if (a.id === "") return -1;
if (b.id === "") return 1; if (b.id === "") return 1;
// Sort by preorder_count descending
if ((b.preorder_count || 0) !== (a.preorder_count || 0)) { if ((b.preorder_count || 0) !== (a.preorder_count || 0)) {
return (b.preorder_count || 0) - (a.preorder_count || 0); return (b.preorder_count || 0) - (a.preorder_count || 0);
} }
// Fallback to name-based numeric/alpha sort
const aN = a.id.replace(/\D/g, ""), bN = b.id.replace(/\D/g, ""); const aN = a.id.replace(/\D/g, ""), bN = b.id.replace(/\D/g, "");
return aN && bN ? parseInt(aN, 10) - parseInt(bN, 10) : a.id.localeCompare(b.id); return aN && bN ? parseInt(aN, 10) - parseInt(bN, 10) : a.id.localeCompare(b.id);
}); });

View File

@@ -1452,11 +1452,11 @@ class PreorderController extends mfBaseController {
if (empty($fcps)) return []; if (empty($fcps)) return [];
$filter = $this->request->filter ?? []; $filter = $this->request->filter ?? [];
// We want to count preorders matching ALL other filters, but ignoring the current FCP filter
if (isset($filter['fcp'])) { if (isset($filter['fcp'])) {
unset($filter['fcp']); unset($filter['fcp']);
} }
$filter = $this->getPreparedFilter($filter);
$statsMap = PreorderModel::countActiveGroupedByFcp($filter); $statsMap = PreorderModel::countActiveGroupedByFcp($filter);
$result = array_map( $result = array_map(
@@ -1466,7 +1466,7 @@ class PreorderController extends mfBaseController {
"text" => $fcp->name ?? null, "text" => $fcp->name ?? null,
'lat' => $fcp->gps_lat ?? null, 'lat' => $fcp->gps_lat ?? null,
'lng' => $fcp->gps_long ?? null, 'lng' => $fcp->gps_long ?? null,
'preorder_count' => $statsMap[$fcp->id] ?? 0 'preorder_count' => $statsMap[$fcp->name] ?? 0
], ],
$fcps $fcps
); );

View File

@@ -498,19 +498,20 @@ class PreorderModel
$db = FronkDB::singleton(); $db = FronkDB::singleton();
$where = self::getSqlFilter($filter); $where = self::getSqlFilter($filter);
$sql = "SELECT adb_hausnummer.fcp_id, COUNT(*) as cnt FROM `" . FRONKDB_DBNAME . "`.Preorder tt_preorder $sql = "SELECT hn.rimo_fcp_name, COUNT(*) as cnt FROM `" . FRONKDB_DBNAME . "`.Preorder tt_preorder
LEFT JOIN `" . FRONKDB_DBNAME . "`.Preorderstatus tt_preorderstatus ON (tt_preorder.status_id = tt_preorderstatus.id) LEFT JOIN `" . FRONKDB_DBNAME . "`.Preorderstatus tt_preorderstatus ON (tt_preorder.status_id = tt_preorderstatus.id)
LEFT JOIN `" . ADDRESSDB_DBNAME . "`.view_hausnummer as adb_hausnummer ON (tt_preorder.adb_hausnummer_id = adb_hausnummer.hausnummer_id) LEFT JOIN `" . ADDRESSDB_DBNAME . "`.view_hausnummer as adb_hausnummer ON (tt_preorder.adb_hausnummer_id = adb_hausnummer.hausnummer_id)
LEFT JOIN `" . ADDRESSDB_DBNAME . "`.Hausnummer as hn ON (adb_hausnummer.hausnummer_id = hn.id)
LEFT JOIN `" . ADDRESSDB_DBNAME . "`.Wohneinheit as adb_wohneinheit ON (tt_preorder.adb_wohneinheit_id = adb_wohneinheit.id) LEFT JOIN `" . ADDRESSDB_DBNAME . "`.Wohneinheit as adb_wohneinheit ON (tt_preorder.adb_wohneinheit_id = adb_wohneinheit.id)
WHERE $where AND adb_hausnummer.fcp_id IS NOT NULL WHERE $where AND hn.rimo_fcp_name IS NOT NULL
GROUP BY adb_hausnummer.fcp_id GROUP BY hn.rimo_fcp_name
"; ";
$res = $db->query($sql); $res = $db->query($sql);
$counts = []; $counts = [];
if ($db->num_rows($res)) { if ($db->num_rows($res)) {
while ($row = $db->fetch_object($res)) { while ($row = $db->fetch_object($res)) {
$counts[$row->fcp_id] = (int)$row->cnt; $counts[$row->rimo_fcp_name] = (int)$row->cnt;
} }
} }
return $counts; return $counts;