Files
LogiFlow/fix-delivery-order-sync.sql
T
michaelschal d14a4a31f6 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
2025-08-11 20:24:42 +00:00

72 lines
2.7 KiB
SQL

-- 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;