mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-22 22:48:15 +02:00
Correctly assigns the customer order's store based on the employee's assigned store, preventing orders from being misdirected. Replit-Commit-Author: Agent Replit-Commit-Session-Id: b163d4c0-de5e-4f4e-a9c0-aed4c7049718 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/b163d4c0-de5e-4f4e-a9c0-aed4c7049718/z5Nx2ao
102 lines
3.3 KiB
Markdown
102 lines
3.3 KiB
Markdown
# Fix Final Customer Orders - Employee Magasin #2 → Magasin #1
|
|
|
|
## Problème Identifié
|
|
|
|
**EXACT** : Employé magasin #2 crée commande client → apparaît dans magasin #1
|
|
|
|
## Cause Racine Trouvée
|
|
|
|
```javascript
|
|
// Erreur de validation backend:
|
|
{"message":"Invalid data","errors":[{"code":"invalid_type","expected":"number","received":"nan","path":["groupId"],"message":"Expected number, received nan"}]}
|
|
```
|
|
|
|
**CAUSE** : Frontend ne transmet pas `groupId` dans la requête → Backend validation échoue avec NaN
|
|
**CONSÉQUENCE** : Commande client pas créée OU créée avec mauvais groupId par défaut
|
|
|
|
## Solutions Appliquées
|
|
|
|
### 1. Fix Backend - Force GroupId Assignment
|
|
**Fichier:** `server/routes.ts` ligne 1956-1975
|
|
|
|
```javascript
|
|
// Fix groupId if missing - use user's assigned group or fallback
|
|
let finalGroupId = req.body.groupId;
|
|
if (!finalGroupId || finalGroupId === undefined || finalGroupId === null) {
|
|
if (user.userGroups?.[0]?.groupId) {
|
|
finalGroupId = user.userGroups[0].groupId;
|
|
console.log("🔧 Customer Order Backend Fix: Using user's assigned group:", finalGroupId);
|
|
} else {
|
|
finalGroupId = 1; // Emergency fallback
|
|
console.log("🚨 Customer Order Backend Fix: Using emergency fallback groupId:", finalGroupId);
|
|
}
|
|
}
|
|
|
|
const frontendData = insertCustomerOrderFrontendSchema.parse({
|
|
...req.body,
|
|
groupId: finalGroupId // Force valid groupId
|
|
});
|
|
```
|
|
|
|
### 2. Frontend Logic Déjà Corrigée
|
|
**Fichier:** `client/src/components/CustomerOrderForm.tsx` ligne 100-133
|
|
|
|
```javascript
|
|
// Ensure groupId is set - force assignment for ALL users
|
|
let groupId = data.groupId;
|
|
|
|
if (!groupId) {
|
|
if (user?.role === 'admin' && selectedStoreId) {
|
|
groupId = selectedStoreId;
|
|
} else if (user?.userGroups?.[0]?.groupId) {
|
|
// UTILISATEUR NON-ADMIN: utiliser son groupe assigné ✅
|
|
groupId = user.userGroups[0].groupId;
|
|
} else if (user?.role === 'admin' && groups.length > 0) {
|
|
groupId = groups[0].id;
|
|
} else if (groups.length > 0) {
|
|
groupId = groups[0].id; // EMERGENCY FALLBACK
|
|
} else {
|
|
groupId = 1; // LAST RESORT
|
|
}
|
|
}
|
|
```
|
|
|
|
### 3. Debug Logs Production
|
|
```javascript
|
|
console.log("🔍 Customer Order GroupId Debug:", {
|
|
userRole: user?.role,
|
|
selectedStoreId,
|
|
userGroups: user?.userGroups?.map(ug => ({groupId: ug.groupId, groupName: ug.group?.name})),
|
|
initialGroupId: groupId,
|
|
availableGroups: groups.map(g => ({id: g.id, name: g.name}))
|
|
});
|
|
```
|
|
|
|
## Priorité de Sélection GroupId
|
|
|
|
**BACKEND (Sécurité):**
|
|
1. `req.body.groupId` si fourni par frontend ET valide
|
|
2. `user.userGroups[0].groupId` si utilisateur assigné à un groupe ✅ **FIX PRINCIPAL**
|
|
3. `1` en fallback d'urgence
|
|
|
|
**FRONTEND (Logique UI):**
|
|
1. Admin avec magasin sélectionné → `selectedStoreId`
|
|
2. **Utilisateur avec groupe assigné → `user.userGroups[0].groupId`** ✅ **FIX PRINCIPAL**
|
|
3. Admin sans sélection → Premier magasin disponible
|
|
4. Fallback d'urgence → `1`
|
|
|
|
## Tests de Validation
|
|
|
|
✅ Backend force groupId si manquant ou NaN
|
|
✅ Frontend utilise groupe utilisateur assigné
|
|
✅ Validation robuste pour éviter NaN/undefined
|
|
✅ Logs debug détaillés pour traçabilité
|
|
|
|
## Résultat Attendu
|
|
|
|
Employé assigné au magasin #2 :
|
|
- Frontend calcule `groupId = 2` depuis `user.userGroups[0].groupId`
|
|
- Backend valide et crée commande avec `groupId = 2`
|
|
- Commande client apparaît dans magasin #2 ✅
|
|
|
|
**DÉPLOIEMENT PRODUCTION REQUIS** |