Korrigiere Marktfilter und Detailabfrage

This commit is contained in:
gitea_admin committed 2026-09-19 09:26:32 +02:00
1 parent d0240ddfab
commit de61a3e515
1 file changed
+14 -11
+14 -11
View File
@@ -139,7 +139,8 @@ function market_management_search_markets(PDO $pdo, array $input): array
};
$where = [];
$params = [':limit' => $limit, ':offset' => $offset, ':include_archived' => $includeArchived];
$params = [':limit' => $limit, ':offset' => $offset];
$occurrenceArchivePredicate = $includeArchived ? 'TRUE' : 'o.archived_at IS NULL';
if (!$includeArchived) {
$where[] = 'm.archived_at IS NULL';
}
@@ -152,15 +153,15 @@ function market_management_search_markets(PDO $pdo, array $input): array
$params[':category_id'] = $categoryId;
}
if ($status !== null) {
$where[] = 'EXISTS (SELECT 1 FROM market_occurrence os WHERE os.market_definition_id = m.id AND os.status = :status AND (:include_archived OR os.archived_at IS NULL))';
$where[] = 'EXISTS (SELECT 1 FROM market_occurrence os WHERE os.market_definition_id = m.id AND os.status = :status AND ' . ($includeArchived ? 'TRUE' : 'os.archived_at IS NULL') . ')';
$params[':status'] = $status;
}
if ($place !== null) {
$where[] = 'EXISTS (SELECT 1 FROM market_occurrence op WHERE op.market_definition_id = m.id AND op.place ILIKE :place AND (:include_archived OR op.archived_at IS NULL))';
$where[] = 'EXISTS (SELECT 1 FROM market_occurrence op WHERE op.market_definition_id = m.id AND op.place ILIKE :place AND ' . ($includeArchived ? 'TRUE' : 'op.archived_at IS NULL') . ')';
$params[':place'] = '%' . $place . '%';
}
if ($municipalityId !== null) {
$where[] = 'EXISTS (SELECT 1 FROM market_occurrence om WHERE om.market_definition_id = m.id AND om.municipality_reference_id = :municipality_id AND (:include_archived OR om.archived_at IS NULL))';
$where[] = 'EXISTS (SELECT 1 FROM market_occurrence om WHERE om.market_definition_id = m.id AND om.municipality_reference_id = :municipality_id AND ' . ($includeArchived ? 'TRUE' : 'om.archived_at IS NULL') . ')';
$params[':municipality_id'] = $municipalityId;
}
if ($dateFrom !== null || $dateTo !== null) {
@@ -173,7 +174,7 @@ function market_management_search_markets(PDO $pdo, array $input): array
$dateConditions[] = 'od.date <= :date_to';
$params[':date_to'] = $dateTo;
}
$where[] = 'EXISTS (SELECT 1 FROM market_occurrence odate INNER JOIN market_occurrence_day od ON ' . implode(' AND ', $dateConditions) . ' WHERE odate.market_definition_id = m.id AND (:include_archived OR odate.archived_at IS NULL))';
$where[] = 'EXISTS (SELECT 1 FROM market_occurrence odate INNER JOIN market_occurrence_day od ON ' . implode(' AND ', $dateConditions) . ' WHERE odate.market_definition_id = m.id AND ' . ($includeArchived ? 'TRUE' : 'odate.archived_at IS NULL') . ')';
}
$stmt = $pdo->prepare(
@@ -183,10 +184,10 @@ function market_management_search_markets(PDO $pdo, array $input): array
COUNT(DISTINCT o.id) AS occurrence_count
FROM market_definition m
INNER JOIN market_category c ON c.id = m.category_id
LEFT JOIN market_occurrence o ON o.market_definition_id = m.id AND (:include_archived OR o.archived_at IS NULL)
LEFT JOIN market_occurrence o ON o.market_definition_id = m.id AND ' . $occurrenceArchivePredicate . '
LEFT JOIN market_occurrence_day d ON d.occurrence_id = o.id
WHERE ' . ($where === [] ? 'TRUE' : implode(' AND ', $where)) . '
GROUP BY m.id, c.code, c.name
GROUP BY m.id, m.category_id, c.code, c.name
ORDER BY ' . $sortColumn . ' ' . $sortDirection . ', m.id ASC
LIMIT :limit OFFSET :offset'
);
@@ -199,27 +200,29 @@ function market_management_search_markets(PDO $pdo, array $input): array
function market_management_get_market(PDO $pdo, int $marketId, bool $includeArchived = false): ?array
{
$marketArchivePredicate = $includeArchived ? 'TRUE' : 'm.archived_at IS NULL';
$stmt = $pdo->prepare(
'SELECT m.id, m.name, m.category_id, c.code AS category_code, c.name AS category_name,
m.archived_at, m.created_at, m.updated_at
FROM market_definition m
INNER JOIN market_category c ON c.id = m.category_id
WHERE m.id = :id AND (:include_archived OR m.archived_at IS NULL)'
WHERE m.id = :id AND ' . $marketArchivePredicate
);
$stmt->execute([':id' => $marketId, ':include_archived' => $includeArchived]);
$stmt->execute([':id' => $marketId]);
$market = $stmt->fetch();
if (!is_array($market)) {
return null;
}
$occurrenceArchivePredicate = $includeArchived ? 'TRUE' : 'archived_at IS NULL';
$occurrences = $pdo->prepare(
'SELECT *
FROM market_occurrence
WHERE market_definition_id = :market_id
AND (:include_archived OR archived_at IS NULL)
AND ' . $occurrenceArchivePredicate . '
ORDER BY id ASC'
);
$occurrences->execute([':market_id' => $marketId, ':include_archived' => $includeArchived]);
$occurrences->execute([':market_id' => $marketId]);
$market['occurrences'] = $occurrences->fetchAll();
foreach ($market['occurrences'] as &$occurrence) {
$occurrenceId = (int) $occurrence['id'];