diff --git a/PRODUCTION-FIX-GUIDE.md b/PRODUCTION-FIX-GUIDE.md
index 088332d..bedd42e 100644
--- a/PRODUCTION-FIX-GUIDE.md
+++ b/PRODUCTION-FIX-GUIDE.md
@@ -68,6 +68,26 @@ Cette erreur survient lors de la **création** ou **édition** d'utilisateur qua
2. Redéployez l'application (le code a été corrigé pour utiliser `NULL` au lieu de `""` dans les routes de création ET d'édition)
+### Problème Synchronisation Commandes/Livraisons dans le Calendrier
+
+#### Symptômes observés :
+- Les livraisons marquées "Livré" affichent "Date non disponible"
+- Les commandes liées à des livraisons livrées ne passent pas en statut "delivered"
+- Problème d'affichage des dates dans le modal de détails de commande
+
+#### Corrections apportées :
+1. **Affichage des dates corrigé** : Le modal affiche maintenant la date de livraison réelle (`deliveredDate`) pour les livraisons livrées
+2. **Synchronisation automatique des statuts** : Les commandes sont automatiquement marquées "delivered" quand leurs livraisons associées sont livrées
+3. **Script de correction des données** : `fix-delivery-order-sync.sql` pour corriger les données existantes
+
+**Solution complète** :
+1. Exécutez le script de synchronisation :
+ ```bash
+ psql $DATABASE_URL -f fix-delivery-order-sync.sql
+ ```
+
+2. Redéployez l'application avec les corrections
+
#### Tests de Création
1. **Test Manuel** : Utilisez `test-create-user-production.js`
```bash
diff --git a/attached_assets/image_1754943664463.png b/attached_assets/image_1754943664463.png
new file mode 100644
index 0000000..061fc24
Binary files /dev/null and b/attached_assets/image_1754943664463.png differ
diff --git a/client/src/components/modals/OrderDetailModal.tsx b/client/src/components/modals/OrderDetailModal.tsx
index 4c4bc98..d0002c9 100644
--- a/client/src/components/modals/OrderDetailModal.tsx
+++ b/client/src/components/modals/OrderDetailModal.tsx
@@ -292,7 +292,12 @@ export default function OrderDetailModal({
#LIV-{delivery.id}
- {safeFormat(delivery.plannedDate, 'dd MMMM yyyy')}
+ {delivery.status === 'delivered' && delivery.deliveredDate
+ ? `Livré le ${safeFormat(delivery.deliveredDate, 'dd MMMM yyyy')}`
+ : delivery.scheduledDate
+ ? `Prévu le ${safeFormat(delivery.scheduledDate, 'dd MMMM yyyy')}`
+ : 'Date non disponible'
+ }
diff --git a/fix-delivery-order-sync.sql b/fix-delivery-order-sync.sql
new file mode 100644
index 0000000..d0d1c25
--- /dev/null
+++ b/fix-delivery-order-sync.sql
@@ -0,0 +1,72 @@
+-- Script pour diagnostiquer et corriger la synchronisation des statuts commandes/livraisons
+-- À exécuter en production pour résoudre les problèmes de dates et statuts
+
+-- 1. Diagnostiquer les livraisons avec statut "delivered" mais dates manquantes
+SELECT 'Livraisons livrées sans date de livraison:' as diagnostic,
+ COUNT(*) as count
+FROM deliveries
+WHERE status = 'delivered' AND delivered_date IS NULL;
+
+-- Afficher les détails
+SELECT d.id, d.status, d.scheduled_date, d.delivered_date, d.validated_at,
+ o.id as order_id, o.status as order_status
+FROM deliveries d
+LEFT JOIN orders o ON d.order_id = o.id
+WHERE d.status = 'delivered' AND d.delivered_date IS NULL
+LIMIT 10;
+
+-- 2. Diagnostiquer les commandes avec livraisons livrées mais statut incorrect
+SELECT 'Commandes avec livraisons livrées mais pas en statut delivered:' as diagnostic,
+ COUNT(*) as count
+FROM orders o
+WHERE EXISTS (
+ SELECT 1 FROM deliveries d
+ WHERE d.order_id = o.id AND d.status = 'delivered'
+) AND o.status != 'delivered';
+
+-- Afficher les détails
+SELECT o.id as order_id, o.status as order_status, o.planned_date,
+ COUNT(d.id) as total_deliveries,
+ SUM(CASE WHEN d.status = 'delivered' THEN 1 ELSE 0 END) as delivered_deliveries
+FROM orders o
+LEFT JOIN deliveries d ON d.order_id = o.id
+WHERE EXISTS (
+ SELECT 1 FROM deliveries d2
+ WHERE d2.order_id = o.id AND d2.status = 'delivered'
+) AND o.status != 'delivered'
+GROUP BY o.id, o.status, o.planned_date
+LIMIT 10;
+
+-- 3. Corriger les livraisons livrées sans date de livraison
+UPDATE deliveries
+SET delivered_date = COALESCE(validated_at, updated_at, created_at)
+WHERE status = 'delivered' AND delivered_date IS NULL;
+
+-- 4. Corriger les statuts des commandes liées aux livraisons livrées
+UPDATE orders
+SET status = 'delivered', updated_at = NOW()
+WHERE id IN (
+ SELECT DISTINCT d.order_id
+ FROM deliveries d
+ WHERE d.order_id IS NOT NULL
+ AND d.status = 'delivered'
+ AND d.order_id NOT IN (
+ SELECT o.id FROM orders o WHERE o.status = 'delivered'
+ )
+);
+
+-- 5. Vérification finale
+SELECT 'Vérification finale - Commandes avec statuts corrects:' as final_check,
+ COUNT(*) as count
+FROM orders o
+WHERE EXISTS (
+ SELECT 1 FROM deliveries d
+ WHERE d.order_id = o.id AND d.status = 'delivered'
+) AND o.status = 'delivered';
+
+-- Afficher un résumé des corrections
+SELECT
+ 'Résumé des corrections:' as summary,
+ (SELECT COUNT(*) FROM deliveries WHERE status = 'delivered') as total_delivered_deliveries,
+ (SELECT COUNT(*) FROM deliveries WHERE status = 'delivered' AND delivered_date IS NOT NULL) as deliveries_with_date,
+ (SELECT COUNT(*) FROM orders WHERE status = 'delivered') as total_delivered_orders;
\ No newline at end of file
diff --git a/replit.md b/replit.md
index 3331430..3ccbd29 100644
--- a/replit.md
+++ b/replit.md
@@ -149,4 +149,17 @@ Preferred communication style: Simple, everyday language.
- Enhanced validation schemas to accept `null` values for email fields
- Created `fix-duplicate-empty-email.sql` script to clean existing database records
- Improved error handling and logging for better production debugging
-- **Result**: Users can now be created and edited with optional email fields without constraint violations
\ No newline at end of file
+- **Result**: Users can now be created and edited with optional email fields without constraint violations
+
+#### Calendar Order-Delivery Synchronization Fix
+- **Issue**: Orders linked to delivered deliveries were not showing proper status and dates in calendar view
+- **Root Cause**: Three interconnected problems:
+ 1. OrderDetailModal was displaying non-existent `plannedDate` instead of `scheduledDate`/`deliveredDate`
+ 2. Order status was not automatically updated when delivery status changed via updateDelivery method
+ 3. Delivered deliveries had missing `deliveredDate` field causing "Date non disponible" display
+- **Solution Implemented**:
+ - Enhanced OrderDetailModal to display correct dates: `deliveredDate` for delivered items, `scheduledDate` for planned ones
+ - Added automatic order status synchronization in `updateDelivery` method when delivery marked as delivered
+ - Created `fix-delivery-order-sync.sql` script to correct existing production data inconsistencies
+ - Improved Calendar date initialization to show current month instead of hardcoded July 2025
+- **Result**: Calendar now properly displays delivery dates and automatically synchronizes order statuses when deliveries are completed
\ No newline at end of file
diff --git a/server/storage.ts b/server/storage.ts
index 5bbc53a..88f0c9c 100644
--- a/server/storage.ts
+++ b/server/storage.ts
@@ -640,11 +640,27 @@ export class DatabaseStorage implements IStorage {
}
async updateDelivery(id: number, delivery: Partial): Promise {
+ const currentDelivery = await this.getDelivery(id);
+ if (!currentDelivery) throw new Error("Delivery not found");
+
const [updatedDelivery] = await db
.update(deliveries)
.set({ ...delivery, updatedAt: new Date() })
.where(eq(deliveries.id, id))
.returning();
+
+ // Si la livraison est marquée comme livrée et qu'elle est liée à une commande
+ if (delivery.status === 'delivered' && currentDelivery.orderId) {
+ console.log('🔄 Delivery marked as delivered, updating linked order status');
+ await db
+ .update(orders)
+ .set({
+ status: 'delivered',
+ updatedAt: new Date()
+ })
+ .where(eq(orders.id, currentDelivery.orderId));
+ }
+
return updatedDelivery;
}