diff --git a/URGENT-SYNC-GUIDE.md b/URGENT-SYNC-GUIDE.md new file mode 100644 index 0000000..bc586c7 --- /dev/null +++ b/URGENT-SYNC-GUIDE.md @@ -0,0 +1,38 @@ +# GUIDE URGENT : Synchronisation Commandes/Livraisons + +## Problème +La commande #CMD-55 et d'autres commandes liées à des livraisons "livrées" n'apparaissent pas grisées dans le calendrier car elles gardent le statut "planned" au lieu de "delivered". + +## Solution Immédiate (Production) + +### Option 1: Script SQL Direct ✅ RECOMMANDÉ +```bash +# Connectez-vous à votre base PostgreSQL et exécutez : +psql $DATABASE_URL -f fix-delivery-order-sync-immediate.sql +``` + +### Option 2: Via Interface Web (après déploiement) +1. Déployez le nouveau code sur votre serveur +2. Connectez-vous comme admin sur https://logiflow-logiflow-1.c-2.us-east-2.aws.neon.tech +3. Allez dans le calendrier +4. Cliquez sur le bouton "Sync Status" (à côté de "Nouveau") + +## Ce que fait le script + +1. **Diagnostic** : Affiche toutes les commandes avec des livraisons livrées mais statut incorrect +2. **Correction automatique** : Met à jour le statut des commandes vers "delivered" +3. **Dates de livraison** : Corrige les delivered_date manquantes +4. **Vérification finale** : Affiche les résultats et la commande CMD-55 spécifiquement + +## Résultat attendu +Après exécution du script : +- ✅ La commande #CMD-55 aura le statut "delivered" +- ✅ Elle apparaîtra grisée (bg-delivered) dans le calendrier +- ✅ Les dates de livraison seront affichées correctement +- ✅ Toutes les commandes similaires seront corrigées + +## Test +Après avoir exécuté le script, actualisez votre calendrier sur https://logiflow-logiflow-1.c-2.us-east-2.aws.neon.tech et vérifiez que la commande CMD-55 apparaît maintenant grisée. + +## Note Technique +Le bouton "Sync Status" dans l'interface n'est pas encore déployé sur votre serveur de production. Le script SQL est la solution immédiate. \ No newline at end of file diff --git a/attached_assets/Pasted-ions-Found-0-group-assignments-for-user-admin-local-Raw-query-result--1754944471521_1754944471521.txt b/attached_assets/Pasted-ions-Found-0-group-assignments-for-user-admin-local-Raw-query-result--1754944471521_1754944471521.txt new file mode 100644 index 0000000..33308f5 --- /dev/null +++ b/attached_assets/Pasted-ions-Found-0-group-assignments-for-user-admin-local-Raw-query-result--1754944471521_1754944471521.txt @@ -0,0 +1,208 @@ +ions + + + + +🔍 Found 0 group assignments for user admin_local + +🔍 Raw query result: [] + +✅ Processed 0 groups for user admin_local + +🔍 Found 0 group assignments for user admin_local + +🔍 Raw query result: [] + +✅ Processed 0 groups for user admin_local + +🔍 getUserWithGroups called for user: admin_local + +🔍 Querying user_groups for user: admin_local + +🔍 Found 0 group assignments for user admin_local + +🔍 Raw query result: [] + +✅ Processed 0 groups for user admin_local + +🔍 getUserWithGroups called for user: admin_local + +🔍 Querying user_groups for user: admin_local + +🔍 Found 0 group assignments for user admin_local + +🔍 Raw query result: [] + +✅ Processed 0 groups for user admin_local + +Deliveries API called with: { + + startDate: '2025-08-01', + + endDate: '2025-08-31', + + storeId: undefined, + + withBL: undefined, + + userRole: 'admin' + +} + +Admin filtering deliveries with groupIds: undefined + +Fetching deliveries by date range: 2025-08-01 to 2025-08-31 + +🔍 getUserWithGroups called for user: admin_local + +GET /api/user 304 in 67ms + +GET /api/stats/monthly 304 in 57ms + +Deliveries returned: 40 items + +GET /api/deliveries 304 in 64ms + +🔍 getUserWithGroups called for user: admin_local + +🔍 Querying user_groups for user: admin_local + +🔍 Found 0 group assignments for user admin_local + +🔍 Raw query result: [] + +✅ Processed 0 groups for user admin_local + +GET /api/user 304 in 5ms + +🔍 Querying user_groups for user: admin_local + +🔍 Found 0 group assignments for user admin_local + +🔍 Raw query result: [] + +✅ Processed 0 groups for user admin_local + +🔍 getUserWithGroups called for user: admin_local + +🔍 Querying user_groups for user: admin_local + +🔍 Found 0 group assignments for user admin_local + +🔍 Raw query result: [] + +✅ Processed 0 groups for user admin_local + +🔍 getUserWithGroups called for user: admin_local + +🔍 getUserWithGroups called for user: admin_local + +🔍 Querying user_groups for user: admin_local + +🔍 Found 0 group assignments for user admin_local + +🔍 Raw query result: [] + +✅ Processed 0 groups for user admin_local + +Orders API called with: { + + startDate: '2025-08-01', + + endDate: '2025-08-31', + + storeId: undefined, + + userRole: 'admin' + +} + +Admin filtering with groupIds: undefined + +Fetching orders by date range: 2025-08-01 to 2025-08-31 + +🔍 Querying user_groups for user: admin_local + +🔍 Found 0 group assignments for user admin_local + +🔍 Raw query result: [] + +✅ Processed 0 groups for user admin_local + +GET /api/user 304 in 13ms + +Orders returned: 15 items + +GET /api/orders 304 in 111ms + +🔍 getUserWithGroups called for user: admin_local + +🔍 Querying user_groups for user: admin_local + +🔍 Found 0 group assignments for user admin_local + +🔍 Raw query result: [] + +✅ Processed 0 groups for user admin_local + +GET /api/user 304 in 7ms + +🔍 getUserWithGroups called for user: admin_local + +🔍 Querying user_groups for user: admin_local + +🔍 Found 0 group assignments for user admin_local + +🔍 Raw query result: [] + +✅ Processed 0 groups for user admin_local + +🔍 getUserWithGroups called for user: admin_local + +🔍 Querying user_groups for user: admin_local + +🔍 Found 0 group assignments for user admin_local + +🔍 Raw query result: [] + +✅ Processed 0 groups for user admin_local + +🔍 getUserWithGroups called for user: admin_local + +🔍 Querying user_groups for user: admin_local + +🔍 Found 0 group assignments for user admin_local + +🔍 Raw query result: [] + +✅ Processed 0 groups for user admin_local + +GET /api/groups 304 in 10ms + +HEAD /api/health 200 in 1ms + +🔍 getUserWithGroups called for user: admin_local + +🔍 Querying user_groups for user: admin_local + +🔍 Found 0 group assignments for user admin_local + +🔍 Raw query result: [] + +✅ Processed 0 groups for user admin_local + +🔍 getUserWithGroups called for user: admin_local + +🔍 Querying user_groups for user: admin_local + +🔍 Found 0 group assignments for user admin_local + +🔍 Raw query result: [] + +✅ Processed 0 groups for user admin_local + +📄 SPA: Serving index.html for /[object%20Object] + + + + \ No newline at end of file diff --git a/attached_assets/image_1754944449064.png b/attached_assets/image_1754944449064.png new file mode 100644 index 0000000..559f93c Binary files /dev/null and b/attached_assets/image_1754944449064.png differ diff --git a/attached_assets/image_1754944537680.png b/attached_assets/image_1754944537680.png new file mode 100644 index 0000000..50a2944 Binary files /dev/null and b/attached_assets/image_1754944537680.png differ diff --git a/fix-delivery-order-sync-immediate.sql b/fix-delivery-order-sync-immediate.sql new file mode 100644 index 0000000..07a886a --- /dev/null +++ b/fix-delivery-order-sync-immediate.sql @@ -0,0 +1,74 @@ +-- Script de synchronisation immédiate des statuts commandes/livraisons +-- Exécuter directement sur la base de données de production + +-- Étape 1: Diagnostic - Afficher les commandes problématiques +SELECT + o.id as order_id, + o.status as order_status, + d.id as delivery_id, + d.status as delivery_status, + d.delivered_date, + o.supplier_id, + s.name as supplier_name +FROM orders o +JOIN deliveries d ON d.order_id = o.id +JOIN suppliers s ON o.supplier_id = s.id +WHERE d.status = 'delivered' AND o.status != 'delivered' +ORDER BY o.id; + +-- Étape 2: Mise à jour automatique des statuts +-- Marquer toutes les commandes comme "delivered" si au moins une de leurs livraisons est livrée +UPDATE orders +SET status = 'delivered' +WHERE id IN ( + SELECT DISTINCT o.id + FROM orders o + JOIN deliveries d ON d.order_id = o.id + WHERE d.status = 'delivered' AND o.status != 'delivered' +); + +-- Étape 3: Mise à jour des dates de livraison manquantes +-- Ajouter delivered_date aux livraisons qui ont le status 'delivered' mais pas de date +UPDATE deliveries +SET delivered_date = scheduled_date +WHERE status = 'delivered' + AND delivered_date IS NULL + AND scheduled_date IS NOT NULL; + +-- Étape 4: Pour les livraisons sans scheduled_date, utiliser la date de création + 1 jour +UPDATE deliveries +SET delivered_date = DATE(created_at) + INTERVAL '1 day' +WHERE status = 'delivered' + AND delivered_date IS NULL + AND scheduled_date IS NULL; + +-- Étape 5: Diagnostic final - Vérifier les résultats +SELECT + 'RÉSULTAT FINAL' as status, + COUNT(*) as total_orders, + SUM(CASE WHEN status = 'delivered' THEN 1 ELSE 0 END) as delivered_orders, + SUM(CASE WHEN status = 'planned' THEN 1 ELSE 0 END) as planned_orders +FROM orders; + +SELECT + 'LIVRAISONS MISES À JOUR' as status, + COUNT(*) as total_delivered_deliveries, + SUM(CASE WHEN delivered_date IS NOT NULL THEN 1 ELSE 0 END) as with_delivered_date, + SUM(CASE WHEN delivered_date IS NULL THEN 1 ELSE 0 END) as missing_delivered_date +FROM deliveries +WHERE status = 'delivered'; + +-- Afficher la commande CMD-55 spécifiquement +SELECT + 'COMMANDE CMD-55' as status, + o.id, + o.status as order_status, + o.planned_date, + d.status as delivery_status, + d.delivered_date, + d.scheduled_date, + s.name as supplier +FROM orders o +LEFT JOIN deliveries d ON d.order_id = o.id +JOIN suppliers s ON o.supplier_id = s.id +WHERE o.id = 55; \ No newline at end of file diff --git a/test-sync-production.js b/test-sync-production.js new file mode 100644 index 0000000..c565b21 --- /dev/null +++ b/test-sync-production.js @@ -0,0 +1,46 @@ +// Script pour tester la synchronisation directement en production +const https = require('https'); + +const data = JSON.stringify({}); + +const options = { + hostname: 'logiflow-logiflow-1.c-2.us-east-2.aws.neon.tech', + port: 443, + path: '/api/sync-order-delivery-status', + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Content-Length': Buffer.byteLength(data), + // Vous devez remplacer par votre cookie de session réel + 'Cookie': 'connect.sid=VOTRE_SESSION_COOKIE_ICI' + } +}; + +console.log('🔄 Testing production sync API...'); + +const req = https.request(options, (res) => { + console.log(`Status: ${res.statusCode}`); + console.log(`Headers:`, res.headers); + + let responseData = ''; + res.on('data', (chunk) => { + responseData += chunk; + }); + + res.on('end', () => { + console.log('Response:', responseData); + try { + const parsed = JSON.parse(responseData); + console.log('✅ Sync result:', JSON.stringify(parsed, null, 2)); + } catch (e) { + console.log('Raw response:', responseData); + } + }); +}); + +req.on('error', (error) => { + console.error('❌ Error:', error); +}); + +req.write(data); +req.end(); \ No newline at end of file