mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-11 17:27:31 +02:00
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:
1 parent
0e2f017305
commit
d14a4a31f6
6 files changed
+128
-2
No files matched your search
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user