From 5f30c686764a5c6504a0fe1ec4b408381ef1c2f1 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Tue, 4 Nov 2025 14:20:48 +0000 Subject: [PATCH] Improve DCL product sorting logic to show active items first Update DCL product sorting in DatabaseStorage to prioritize active products (status 'valides', not out of stock, not processed) by assigning them a lower CASE value, and then sort by expiryDate. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 1e4433b5-47ab-464c-b663-fea2e53367dd Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: d092b7f6-df07-4bbf-8198-16c2b8bfdfa4 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/1e4433b5-47ab-464c-b663-fea2e53367dd/LXHtbOp --- server/storage.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/server/storage.ts b/server/storage.ts index f448ec8..ef00317 100644 --- a/server/storage.ts +++ b/server/storage.ts @@ -1948,7 +1948,18 @@ export class DatabaseStorage implements IStorage { query = query.where(and(...conditions)); } - const results = await query.orderBy(asc(dlcProducts.expiryDate)); + // Tri intelligent : produits actifs en premier, puis produits traités/validés en dernier + const results = await query.orderBy( + // Priorité 1 : Produits actifs d'abord (non validés, non traités, stock disponible) + sql`CASE + WHEN ${dlcProducts.status} = 'valides' THEN 3 + WHEN ${dlcProducts.stockEpuise} = true THEN 2 + WHEN ${dlcProducts.processedUntilExpiry} = true THEN 2 + ELSE 1 + END`, + // Priorité 2 : Date d'expiration (croissante) + asc(dlcProducts.expiryDate) + ); return results.map((row: any) => ({ ...row.dlcProduct,