diff --git a/attached_assets/Pasted--hasFormat-true-Password-comparison-result-true-POST-api-login-200-in-86ms-GE-1755291651004_1755291651005.txt b/attached_assets/Pasted--hasFormat-true-Password-comparison-result-true-POST-api-login-200-in-86ms-GE-1755291651004_1755291651005.txt
new file mode 100644
index 0000000..c793916
--- /dev/null
+++ b/attached_assets/Pasted--hasFormat-true-Password-comparison-result-true-POST-api-login-200-in-86ms-GE-1755291651004_1755291651005.txt
@@ -0,0 +1,200 @@
+
+ hasFormat: true
+
+}
+
+đ Password comparison result: true
+
+POST /api/login 200 in 86ms
+
+GET /api/user 200 in 12ms
+
+GET /api/user 304 in 20ms
+
+Customer Orders API called with: { groupIds: undefined, userRole: 'admin' }
+
+Customer Orders returned: 37 items
+
+GET /api/customer-orders 200 in 89ms
+
+đïž [DATE-CALC] Aujourd'hui: 2025-08-15 (Vendredi)
+
+đïž [DATE-CALC] AnnĂ©e prĂ©cĂ©dente: 2024-08-16 (Vendredi)
+
+đ Calcul statistiques mensuelles: {
+
+ year: 2025,
+
+ month: 8,
+
+ startDate: '2025-08-01',
+
+ endDate: '2025-09-01',
+
+ groupIds: undefined
+
+}
+
+Orders API called with: {
+
+ startDate: undefined,
+
+ endDate: undefined,
+
+ storeId: undefined,
+
+ userRole: 'admin'
+
+}
+
+Admin filtering with groupIds: undefined
+
+Fetching all orders
+
+đ€ïž [RESPONSE] Weather data prepared: {
+
+ hasCurrentYear: true,
+
+ hasPreviousYear: true,
+
+ location: 'Frouard, France'
+
+}
+
+GET /api/publicities 304 in 152ms
+
+GET /api/user 304 in 129ms
+
+GET /api/weather/current 304 in 177ms
+
+đ Tasks API called with: {
+
+ groupIds: undefined,
+
+ userRole: 'admin',
+
+ userId: 'admin_local',
+
+ requestedStoreId: undefined,
+
+ userGroups: 'all'
+
+}
+
+Deliveries API called with: {
+
+ startDate: undefined,
+
+ endDate: undefined,
+
+ storeId: undefined,
+
+ withBL: undefined,
+
+ userRole: 'admin'
+
+}
+
+Admin filtering deliveries with groupIds: undefined
+
+Fetching all deliveries
+
+đ Tasks returned: 55 items for user: admin_local
+
+GET /api/tasks 200 in 324ms
+
+GET /api/dlc-products/stats 200 in 332ms
+
+đ PRODUCTION: getDeliveries() rĂ©cupĂ©rĂ© 86 livraisons avec relations
+
+Deliveries returned: 86 items
+
+GET /api/deliveries 200 in 511ms
+
+đ PRODUCTION: getOrders() rĂ©cupĂ©rĂ© 51 commandes avec relations
+
+Orders returned: 51 items
+
+GET /api/orders 200 in 523ms
+
+Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
+
+GET /api/user 304 in 156ms
+
+Deliveries API called with: {
+
+ startDate: undefined,
+
+ endDate: undefined,
+
+ storeId: '1',
+
+ withBL: undefined,
+
+ userRole: 'admin'
+
+}
+
+Admin filtering deliveries with groupIds: [ 1 ]
+
+Fetching all deliveries
+
+Orders API called with: {
+
+ startDate: undefined,
+
+ endDate: undefined,
+
+ storeId: '1',
+
+ userRole: 'admin'
+
+}
+
+Admin filtering with groupIds: [ 1 ]
+
+Fetching all orders
+
+đ Statistiques calculĂ©es: {
+
+ ordersCount: 20,
+
+ deliveriesCount: 42,
+
+ pendingOrdersCount: 8,
+
+ averageDeliveryTime: 0.3611111111111111,
+
+ totalPalettes: 120,
+
+ totalPackages: 36
+
+}
+
+GET /api/stats/monthly 200 in 542ms
+
+GET /api/publicities 304 in 153ms
+
+Customer Orders returned: 9 items
+
+GET /api/customer-orders 304 in 136ms
+
+đ PRODUCTION: getDeliveries() rĂ©cupĂ©rĂ© 48 livraisons avec relations
+
+Deliveries returned: 48 items
+
+GET /api/deliveries 304 in 202ms
+
+đ PRODUCTION: getOrders() rĂ©cupĂ©rĂ© 33 commandes avec relations
+
+Orders returned: 33 items
+
+GET /api/orders 304 in 275ms
+
+GET /api/groups 200 in 74ms
+
+GET /api/user 304 in 10ms
+
+GET /api/suppliers 304 in 7ms
+
+GET /api/dlc-products 304 in 37ms
\ No newline at end of file
diff --git a/client/src/pages/DlcPage.tsx b/client/src/pages/DlcPage.tsx
index cea8b1b..bb07b47 100644
--- a/client/src/pages/DlcPage.tsx
+++ b/client/src/pages/DlcPage.tsx
@@ -282,7 +282,8 @@ export default function DlcPage() {
const daysUntilExpiry = Math.ceil((expiry.getTime() - today.getTime()) / (1000 * 60 * 60 * 24));
// Afficher le bouton si le produit expire dans 15 jours ou moins, ou est déjà expiré
- return (daysUntilExpiry <= 15 && product.status !== "valide");
+ // ET si le produit n'est pas déjà validé
+ return (daysUntilExpiry <= 15 && product.status !== "valides");
};
const getStatusBadge = (status: string, dlcDate: string | null) => {
@@ -791,7 +792,7 @@ export default function DlcPage() {
>
- {shouldShowValidateButton(product) && (user?.role === 'admin' || user?.role === 'manager') && (
+ {shouldShowValidateButton(product) && (user?.role === 'admin' || user?.role === 'manager' || user?.role === 'directeur') && (