Improve product filtering by adding dynamic status options for expiry dates

Update the server-side storage logic in `server/storage.ts` to correctly filter DLC products based on various expiry date statuses ('expires_soon', 'expires', 'en_cours', 'valides'), addressing an issue where certain products were not being displayed in empty lists.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: f2b9c241-9fdd-4abd-9041-720afc8b27d6
Replit-Commit-Checkpoint-Type: full_checkpoint
This commit is contained in:
michaelschal committed 2025-09-02 08:38:52 +00:00
1 parent ad7bd07670
commit e0bcfcdb13
2 files changed
+38 -2

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

+38 -2
View File
@@ -1508,9 +1508,45 @@ export class DatabaseStorage implements IStorage {
}
if (filters) {
if (filters.status) {
conditions.push(eq(dlcProducts.status, filters.status));
// Handle dynamic status filtering based on expiry date calculation
if (filters.status && filters.status !== 'all') {
const today = new Date();
if (filters.status === 'expires_soon') {
// Products expiring within 15 days but not expired yet
const in15Days = new Date();
in15Days.setDate(today.getDate() + 15);
conditions.push(
and(
sql`${dlcProducts.expiryDate} > ${today}`,
sql`${dlcProducts.expiryDate} <= ${in15Days}`,
ne(dlcProducts.status, 'valides')
)
);
} else if (filters.status === 'expires') {
// Products already expired
conditions.push(
and(
sql`${dlcProducts.expiryDate} <= ${today}`,
ne(dlcProducts.status, 'valides')
)
);
} else if (filters.status === 'en_cours') {
// Products active (more than 15 days until expiry)
const in15Days = new Date();
in15Days.setDate(today.getDate() + 15);
conditions.push(
and(
sql`${dlcProducts.expiryDate} > ${in15Days}`,
ne(dlcProducts.status, 'valides')
)
);
} else if (filters.status === 'valides') {
// Products that are validated regardless of date
conditions.push(eq(dlcProducts.status, 'valides'));
}
}
if (filters.supplierId) {
conditions.push(eq(dlcProducts.supplierId, filters.supplierId));
}