Korrigiere Marktfilter und Detailabfrage
This commit is contained in:
1 parent
d0240ddfab
commit
de61a3e515
1 file changed
+14
-11
@@ -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'];
|
||||
|
||||
Reference in new issue
Block a user