Synchronize order and delivery statuses and dates in the calendar view

Fixes an issue where orders linked to delivered deliveries were not displaying the correct delivery date or status in the calendar. This includes updating the OrderDetailModal to show the correct dates, automatically updating order statuses when deliveries are marked as delivered, and providing a SQL script to correct existing data inconsistencies.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: a8a78c07-e900-425c-a577-5b4c5894379d
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/a8a78c07-e900-425c-a577-5b4c5894379d/0tRkXvo
This commit is contained in:
michaelschal committed 2025-08-11 20:24:42 +00:00
1 parent 0e2f017305
commit d14a4a31f6
6 files changed
+128 -2

No files matched your search

+20
View File
@@ -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
Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

@@ -292,7 +292,12 @@ export default function OrderDetailModal({
<div>
<p className="font-medium text-gray-900">#LIV-{delivery.id}</p>
<p className="text-sm text-gray-600">
{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'
}
</p>
</div>
</div>
+72
View File
@@ -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;
+14 -1
View File
@@ -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
- **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
+16
View File
@@ -640,11 +640,27 @@ export class DatabaseStorage implements IStorage {
}
async updateDelivery(id: number, delivery: Partial<InsertDelivery>): Promise<Delivery> {
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;
}