diff --git a/PRODUCTION-AUTO-SYNC-DEPLOY.md b/PRODUCTION-AUTO-SYNC-DEPLOY.md new file mode 100644 index 0000000..b2947f8 --- /dev/null +++ b/PRODUCTION-AUTO-SYNC-DEPLOY.md @@ -0,0 +1,119 @@ +# Déploiement de la Synchronisation Automatique - Production + +## Résumé des Modifications + +Le système de synchronisation automatique permet aux commandes de passer automatiquement en statut "delivered" quand leurs livraisons sont validées ou mises à jour vers "delivered". + +## Fichiers à Modifier en Production + +### 1. server/routes.ts + +#### Modification 1 : Route PUT `/api/deliveries/:id` +**Localiser la section (vers ligne 691-693) :** +```typescript +const data = insertDeliverySchema.partial().parse(req.body); +const updatedDelivery = await storage.updateDelivery(id, data); +res.json(updatedDelivery); +``` + +**Remplacer par :** +```typescript +const data = insertDeliverySchema.partial().parse(req.body); +const updatedDelivery = await storage.updateDelivery(id, data); + +// SYNCHRONISATION AUTOMATIQUE : Si livraison devient "delivered", marquer la commande associée comme "delivered" +if (data.status === 'delivered' && updatedDelivery.orderId) { + try { + console.log(`🔄 Auto-sync: Delivery #${id} marked as delivered, updating order #${updatedDelivery.orderId}`); + await storage.updateOrder(updatedDelivery.orderId, { status: 'delivered' }); + console.log(`✅ Auto-sync: Order #${updatedDelivery.orderId} automatically marked as delivered`); + } catch (error) { + console.error(`❌ Auto-sync failed for order #${updatedDelivery.orderId}:`, error); + } +} + +res.json(updatedDelivery); +``` + +#### Modification 2 : Route POST `/api/deliveries/:id/validate` +**Localiser la section (vers ligne 830-831) :** +```typescript +await storage.validateDelivery(id, blData); +res.json({ message: "Delivery validated successfully" }); +``` + +**Remplacer par :** +```typescript +await storage.validateDelivery(id, blData); + +// SYNCHRONISATION AUTOMATIQUE : Quand validation, marquer la commande associée comme "delivered" +if (delivery.orderId) { + try { + console.log(`🔄 Auto-sync: Delivery #${id} validated, updating order #${delivery.orderId} to delivered`); + await storage.updateOrder(delivery.orderId, { status: 'delivered' }); + console.log(`✅ Auto-sync: Order #${delivery.orderId} automatically marked as delivered`); + } catch (error) { + console.error(`❌ Auto-sync failed for order #${delivery.orderId}:`, error); + } +} + +res.json({ message: "Delivery validated successfully" }); +``` + +## Étapes de Déploiement + +### 1. Sauvegarde +```bash +cp server/routes.ts server/routes.ts.backup +``` + +### 2. Application des Modifications +Éditez le fichier `server/routes.ts` et appliquez les deux modifications ci-dessus. + +### 3. Redémarrage du Serveur +```bash +# Méthode selon votre setup de production +pm2 restart your-app-name +# ou +systemctl restart your-node-service +# ou +docker-compose restart +``` + +### 4. Vérification des Logs +Surveillez les logs pour voir les messages de synchronisation automatique : +```bash +tail -f /path/to/your/logs +``` + +## Test de Fonctionnement + +1. **Test Automatique** : Validez une livraison via l'interface - la commande associée devrait automatiquement passer en "delivered" + +2. **Correction des Anciennes Commandes** : Utilisez le bouton "Sync Status" dans le calendrier pour corriger CMD-55 et autres commandes similaires + +## Logs Attendus + +Quand une livraison est validée, vous devriez voir : +``` +🔄 Auto-sync: Delivery #123 validated, updating order #55 to delivered +✅ Auto-sync: Order #55 automatically marked as delivered +``` + +## Résolution de CMD-55 + +Une fois la synchronisation automatique déployée : +1. Cliquez sur "Sync Status" dans le calendrier +2. CMD-55 sera automatiquement corrigée car sa livraison est déjà validée +3. Elle apparaîtra en gris dans le calendrier + +## Rollback en Cas de Problème + +```bash +cp server/routes.ts.backup server/routes.ts +# Redémarrer le serveur +``` + +--- + +**Note** : La synchronisation automatique ne s'applique qu'aux nouvelles actions. Pour corriger les commandes existantes comme CMD-55, utilisez le bouton "Sync Status". \ No newline at end of file diff --git a/deploy-auto-sync.js b/deploy-auto-sync.js new file mode 100644 index 0000000..b487653 --- /dev/null +++ b/deploy-auto-sync.js @@ -0,0 +1,141 @@ +#!/usr/bin/env node + +/** + * Script de déploiement pour la synchronisation automatique ordre-livraison + * À exécuter sur le serveur de production pour appliquer les modifications + */ + +import fs from 'fs/promises'; +import path from 'path'; + +console.log('🚀 Déploiement de la synchronisation automatique...'); + +const PRODUCTION_ROUTES_PATH = '/path/to/production/server/routes.ts'; // À adapter selon votre structure + +// Modifications à appliquer au fichier routes.ts en production +const autoSyncModifications = { + // 1. Modification de la route PUT /api/deliveries/:id pour ajouter la sync auto + updateDeliveryRoute: { + search: ` const data = insertDeliverySchema.partial().parse(req.body); + const updatedDelivery = await storage.updateDelivery(id, data); + res.json(updatedDelivery);`, + replace: ` const data = insertDeliverySchema.partial().parse(req.body); + const updatedDelivery = await storage.updateDelivery(id, data); + + // SYNCHRONISATION AUTOMATIQUE : Si livraison devient "delivered", marquer la commande associée comme "delivered" + if (data.status === 'delivered' && updatedDelivery.orderId) { + try { + console.log(\`🔄 Auto-sync: Delivery #\${id} marked as delivered, updating order #\${updatedDelivery.orderId}\`); + await storage.updateOrder(updatedDelivery.orderId, { status: 'delivered' }); + console.log(\`✅ Auto-sync: Order #\${updatedDelivery.orderId} automatically marked as delivered\`); + } catch (error) { + console.error(\`❌ Auto-sync failed for order #\${updatedDelivery.orderId}:\`, error); + } + } + + res.json(updatedDelivery);` + }, + + // 2. Modification de la route POST /api/deliveries/:id/validate pour ajouter la sync auto + validateDeliveryRoute: { + search: ` await storage.validateDelivery(id, blData); + res.json({ message: "Delivery validated successfully" });`, + replace: ` await storage.validateDelivery(id, blData); + + // SYNCHRONISATION AUTOMATIQUE : Quand validation, marquer la commande associée comme "delivered" + if (delivery.orderId) { + try { + console.log(\`🔄 Auto-sync: Delivery #\${id} validated, updating order #\${delivery.orderId} to delivered\`); + await storage.updateOrder(delivery.orderId, { status: 'delivered' }); + console.log(\`✅ Auto-sync: Order #\${delivery.orderId} automatically marked as delivered\`); + } catch (error) { + console.error(\`❌ Auto-sync failed for order #\${delivery.orderId}:\`, error); + } + } + + res.json({ message: "Delivery validated successfully" });` + } +}; + +// Instructions de déploiement +console.log(` +📋 INSTRUCTIONS DE DÉPLOIEMENT PRODUCTION : + +1. 🔍 Localisez le fichier server/routes.ts sur votre serveur de production + +2. 🔧 Ajoutez la synchronisation automatique dans la route PUT /api/deliveries/:id : + + Remplacez : + ${autoSyncModifications.updateDeliveryRoute.search} + + Par : + ${autoSyncModifications.updateDeliveryRoute.replace} + +3. 🔧 Ajoutez la synchronisation automatique dans la route POST /api/deliveries/:id/validate : + + Remplacez : + ${autoSyncModifications.validateDeliveryRoute.search} + + Par : + ${autoSyncModifications.validateDeliveryRoute.replace} + +4. 🔄 Redémarrez votre serveur Node.js en production + +5. ✅ Testez en validant une livraison - la commande associée devrait automatiquement passer en "delivered" + +6. 🎯 Pour corriger CMD-55 spécifiquement, utilisez le bouton "Sync Status" dans le calendrier + +RÉSULTAT ATTENDU : +- Toutes les futures validations de livraisons synchroniseront automatiquement les commandes +- CMD-55 sera corrigée lors de la prochaine utilisation du bouton "Sync Status" +- Le calendrier affichera correctement les commandes livrées en gris +`); + +// Créer aussi un patch file pour faciliter l'application +const patchContent = ` +--- a/server/routes.ts ++++ b/server/routes.ts +@@ -691,6 +691,15 @@ + const data = insertDeliverySchema.partial().parse(req.body); + const updatedDelivery = await storage.updateDelivery(id, data); ++ ++ // SYNCHRONISATION AUTOMATIQUE : Si livraison devient "delivered", marquer la commande associée comme "delivered" ++ if (data.status === 'delivered' && updatedDelivery.orderId) { ++ try { ++ console.log(\`🔄 Auto-sync: Delivery #\${id} marked as delivered, updating order #\${updatedDelivery.orderId}\`); ++ await storage.updateOrder(updatedDelivery.orderId, { status: 'delivered' }); ++ console.log(\`✅ Auto-sync: Order #\${updatedDelivery.orderId} automatically marked as delivered\`); ++ } catch (error) { ++ console.error(\`❌ Auto-sync failed for order #\${updatedDelivery.orderId}:\`, error); ++ } ++ } + res.json(updatedDelivery); + } catch (error) { +@@ -830,6 +839,15 @@ + } + + await storage.validateDelivery(id, blData); ++ ++ // SYNCHRONISATION AUTOMATIQUE : Quand validation, marquer la commande associée comme "delivered" ++ if (delivery.orderId) { ++ try { ++ console.log(\`🔄 Auto-sync: Delivery #\${id} validated, updating order #\${delivery.orderId} to delivered\`); ++ await storage.updateOrder(delivery.orderId, { status: 'delivered' }); ++ console.log(\`✅ Auto-sync: Order #\${delivery.orderId} automatically marked as delivered\`); ++ } catch (error) { ++ console.error(\`❌ Auto-sync failed for order #\${delivery.orderId}:\`, error); ++ } ++ } + res.json({ message: "Delivery validated successfully" }); + } catch (error) { +`; + +console.log('💾 Sauvegarde du patch dans auto-sync.patch...'); +await fs.writeFile('auto-sync.patch', patchContent); + +console.log(` +🔧 Alternative : Vous pouvez aussi appliquer le patch automatiquement avec : + cd /path/to/production && patch -p1 < auto-sync.patch + +✅ Script de déploiement créé avec succès ! +`); \ No newline at end of file