diff --git a/modules/market_management/service.php b/modules/market_management/service.php index 699b694..675a332 100644 --- a/modules/market_management/service.php +++ b/modules/market_management/service.php @@ -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'];