Merge pull request #514 from R0m1k3/1.1

1.1
This commit is contained in:
LogiFlow authored and GitHub committed 2025-11-04 15:21:37 +01:00
commit c776f4c5e3
4 files changed
+23 -2

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

+11 -1
View File
@@ -705,8 +705,18 @@ export default function BLReconciliation() {
description: "Livraison supprimée avec succès",
});
queryClient.invalidateQueries({ queryKey: ['/api/deliveries/bl'] });
// Mise à jour optimiste du cache local pour disparition immédiate
queryClient.setQueryData(['/api/deliveries/bl', selectedStoreId], (oldData: any) => {
if (!oldData) return oldData;
return oldData.filter((d: any) => d.id !== deliveryId);
});
// Force refetch pour synchroniser avec le serveur
queryClient.refetchQueries({ queryKey: ['/api/deliveries/bl'] });
queryClient.refetchQueries({ queryKey: ['/api/deliveries'] });
} catch (error) {
// En cas d'erreur, refetch pour annuler la mise à jour optimiste
queryClient.refetchQueries({ queryKey: ['/api/deliveries/bl'] });
toast({
title: "Erreur",
description: "Impossible de supprimer la livraison",
+12 -1
View File
@@ -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,