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 = [];
|
$where = [];
|
||||||
$params = [':limit' => $limit, ':offset' => $offset, ':include_archived' => $includeArchived];
|
$params = [':limit' => $limit, ':offset' => $offset];
|
||||||
|
$occurrenceArchivePredicate = $includeArchived ? 'TRUE' : 'o.archived_at IS NULL';
|
||||||
if (!$includeArchived) {
|
if (!$includeArchived) {
|
||||||
$where[] = 'm.archived_at IS NULL';
|
$where[] = 'm.archived_at IS NULL';
|
||||||
}
|
}
|
||||||
@@ -152,15 +153,15 @@ function market_management_search_markets(PDO $pdo, array $input): array
|
|||||||
$params[':category_id'] = $categoryId;
|
$params[':category_id'] = $categoryId;
|
||||||
}
|
}
|
||||||
if ($status !== null) {
|
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;
|
$params[':status'] = $status;
|
||||||
}
|
}
|
||||||
if ($place !== null) {
|
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 . '%';
|
$params[':place'] = '%' . $place . '%';
|
||||||
}
|
}
|
||||||
if ($municipalityId !== null) {
|
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;
|
$params[':municipality_id'] = $municipalityId;
|
||||||
}
|
}
|
||||||
if ($dateFrom !== null || $dateTo !== null) {
|
if ($dateFrom !== null || $dateTo !== null) {
|
||||||
@@ -173,7 +174,7 @@ function market_management_search_markets(PDO $pdo, array $input): array
|
|||||||
$dateConditions[] = 'od.date <= :date_to';
|
$dateConditions[] = 'od.date <= :date_to';
|
||||||
$params[':date_to'] = $dateTo;
|
$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(
|
$stmt = $pdo->prepare(
|
||||||
@@ -183,10 +184,10 @@ function market_management_search_markets(PDO $pdo, array $input): array
|
|||||||
COUNT(DISTINCT o.id) AS occurrence_count
|
COUNT(DISTINCT o.id) AS occurrence_count
|
||||||
FROM market_definition m
|
FROM market_definition m
|
||||||
INNER JOIN market_category c ON c.id = m.category_id
|
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
|
LEFT JOIN market_occurrence_day d ON d.occurrence_id = o.id
|
||||||
WHERE ' . ($where === [] ? 'TRUE' : implode(' AND ', $where)) . '
|
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
|
ORDER BY ' . $sortColumn . ' ' . $sortDirection . ', m.id ASC
|
||||||
LIMIT :limit OFFSET :offset'
|
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
|
function market_management_get_market(PDO $pdo, int $marketId, bool $includeArchived = false): ?array
|
||||||
{
|
{
|
||||||
|
$marketArchivePredicate = $includeArchived ? 'TRUE' : 'm.archived_at IS NULL';
|
||||||
$stmt = $pdo->prepare(
|
$stmt = $pdo->prepare(
|
||||||
'SELECT m.id, m.name, m.category_id, c.code AS category_code, c.name AS category_name,
|
'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
|
m.archived_at, m.created_at, m.updated_at
|
||||||
FROM market_definition m
|
FROM market_definition m
|
||||||
INNER JOIN market_category c ON c.id = m.category_id
|
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();
|
$market = $stmt->fetch();
|
||||||
if (!is_array($market)) {
|
if (!is_array($market)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$occurrenceArchivePredicate = $includeArchived ? 'TRUE' : 'archived_at IS NULL';
|
||||||
$occurrences = $pdo->prepare(
|
$occurrences = $pdo->prepare(
|
||||||
'SELECT *
|
'SELECT *
|
||||||
FROM market_occurrence
|
FROM market_occurrence
|
||||||
WHERE market_definition_id = :market_id
|
WHERE market_definition_id = :market_id
|
||||||
AND (:include_archived OR archived_at IS NULL)
|
AND ' . $occurrenceArchivePredicate . '
|
||||||
ORDER BY id ASC'
|
ORDER BY id ASC'
|
||||||
);
|
);
|
||||||
$occurrences->execute([':market_id' => $marketId, ':include_archived' => $includeArchived]);
|
$occurrences->execute([':market_id' => $marketId]);
|
||||||
$market['occurrences'] = $occurrences->fetchAll();
|
$market['occurrences'] = $occurrences->fetchAll();
|
||||||
foreach ($market['occurrences'] as &$occurrence) {
|
foreach ($market['occurrences'] as &$occurrence) {
|
||||||
$occurrenceId = (int) $occurrence['id'];
|
$occurrenceId = (int) $occurrence['id'];
|
||||||
|
|||||||
Reference in new issue
Block a user