mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-12 01:37:40 +02:00
Merge pull request #50 from R0m1k3/1.1
Prioritize assigned user group for creating customer orders and DLCs
This commit is contained in:
5 files changed
+298
-20
No files matched your search
@@ -0,0 +1,67 @@
|
||||
# Fix Final Frontend - GroupId Production
|
||||
|
||||
## Problème Identifié en Production
|
||||
|
||||
Les logs production montrent clairement :
|
||||
- ✅ **Utilisateur assigné groupe #2** : `group_id: 2, group_name: 'Houdemont'`
|
||||
- ✅ **API DLC lit correctement** : `userGroups: [ { groupId: 2, groupName: 'Houdemont' } ]`
|
||||
- ❌ **Création utilise groupId: 1** au lieu du groupe assigné
|
||||
|
||||
## Cause Exacte
|
||||
|
||||
Le frontend ne priorise pas correctement le groupe assigné lors de la création. La logique donnait priorité à `selectedStoreId` (admin) avant le groupe assigné de l'utilisateur.
|
||||
|
||||
## Fix Appliqué
|
||||
|
||||
### 1. DLC Page - Nouvelle Priorité
|
||||
```javascript
|
||||
// AVANT (Problématique)
|
||||
if (user?.role === 'admin' && selectedStoreId) {
|
||||
groupId = selectedStoreId; // Admin prioritaire
|
||||
} else if (user?.userGroups?.[0]?.groupId) {
|
||||
groupId = user.userGroups[0].groupId; // Groupe utilisateur second
|
||||
}
|
||||
|
||||
// APRÈS (Corrigé)
|
||||
if (user?.userGroups?.[0]?.groupId) {
|
||||
// PRIORITÉ ABSOLUE: groupe assigné utilisateur
|
||||
groupId = user.userGroups[0].groupId;
|
||||
} else if (user?.role === 'admin' && selectedStoreId) {
|
||||
// Admin seulement si pas de groupe assigné
|
||||
groupId = selectedStoreId;
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Customer Order Form - Même Logique
|
||||
```javascript
|
||||
// Même priorité dans les deux endroits:
|
||||
// 1. user.userGroups[0].groupId (PRIORITÉ)
|
||||
// 2. admin selectedStoreId
|
||||
// 3. fallbacks...
|
||||
```
|
||||
|
||||
### 3. Formulaire Default Value Fix
|
||||
```javascript
|
||||
// AVANT
|
||||
groupId: order?.groupId || (user?.role === 'admin' && selectedStoreId ? selectedStoreId : user?.userGroups?.[0]?.groupId) || 1
|
||||
|
||||
// APRÈS
|
||||
groupId: order?.groupId || (user?.userGroups?.[0]?.groupId || (user?.role === 'admin' && selectedStoreId ? selectedStoreId : 1))
|
||||
```
|
||||
|
||||
## Logique de Priorité Unifiée
|
||||
|
||||
**PARTOUT DANS L'APPLICATION :**
|
||||
1. 🎯 **Groupe assigné utilisateur** (`user.userGroups[0].groupId`) - **PRIORITÉ ABSOLUE**
|
||||
2. 🏪 **Admin store selection** (`selectedStoreId`) - Si pas de groupe assigné
|
||||
3. 📋 **Premier groupe disponible** - Fallback admin
|
||||
4. 🚨 **groupId = 1** - Urgence
|
||||
|
||||
## Résultat Attendu Production
|
||||
|
||||
Employé assigné magasin #2 (Houdemont) :
|
||||
- ✅ **DLC création** → `groupId: 2` (groupe assigné prioritaire)
|
||||
- ✅ **Commande client** → `groupId: 2` (groupe assigné prioritaire)
|
||||
- ✅ **Cohérence** avec les autres modules qui fonctionnent déjà
|
||||
|
||||
**DÉPLOIEMENT PRODUCTION IMMÉDIAT REQUIS**
|
||||
+204
@@ -0,0 +1,204 @@
|
||||
nocodb_table_name: 'CommandeH',
|
||||
|
||||
invoice_column_name: 'RefFacture',
|
||||
|
||||
group_created_at: '2025-07-22 11:09:08.977622',
|
||||
|
||||
group_updated_at: '2025-08-12 09:39:32.989'
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
✅ Processed 1 groups for user _1753266816257
|
||||
|
||||
🔍 getUserWithGroups called for user: _1753266816257
|
||||
|
||||
🔍 Querying user_groups for user: _1753266816257
|
||||
|
||||
🔍 Found 1 group assignments for user _1753266816257
|
||||
|
||||
🔍 Raw query result: [
|
||||
|
||||
{
|
||||
|
||||
user_id: '_1753266816257',
|
||||
|
||||
group_id: 2,
|
||||
|
||||
group_id_ref: 2,
|
||||
|
||||
group_name: 'Houdemont',
|
||||
|
||||
group_color: '#455A64',
|
||||
|
||||
nocodb_config_id: 1,
|
||||
|
||||
nocodb_table_id: 'my7zunxprumahmm',
|
||||
|
||||
nocodb_table_name: 'CommandeH',
|
||||
|
||||
invoice_column_name: 'RefFacture',
|
||||
|
||||
group_created_at: '2025-07-22 11:09:08.977622',
|
||||
|
||||
group_updated_at: '2025-08-12 09:39:32.989'
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
✅ Processed 1 groups for user _1753266816257
|
||||
|
||||
🔍 DLC Products API called with: {
|
||||
|
||||
userId: '_1753266816257',
|
||||
|
||||
userRole: 'employee',
|
||||
|
||||
userGroups: [ { groupId: 2, groupName: 'Houdemont' } ],
|
||||
|
||||
groupIds: [ 2 ],
|
||||
|
||||
filters: {},
|
||||
|
||||
queryStoreId: undefined
|
||||
|
||||
}
|
||||
|
||||
📋 DLC Products returned: 133 items
|
||||
|
||||
📋 Sample DLC products groupIds: [
|
||||
|
||||
{ id: 178, name: 'Nesta grenier strawberry aloe vera', groupId: 2 },
|
||||
|
||||
{ id: 48, name: 'Gressins sésame', groupId: 2 },
|
||||
|
||||
{ id: 154, name: 'M&m’s crispy 240g', groupId: 2 }
|
||||
|
||||
]
|
||||
|
||||
🔍 getUserWithGroups called for user: _1753266816257
|
||||
|
||||
GET /api/dlc-products 304 in 34ms
|
||||
|
||||
🔍 Querying user_groups for user: _1753266816257
|
||||
|
||||
🔍 Found 1 group assignments for user _1753266816257
|
||||
|
||||
🔍 Raw query result: [
|
||||
|
||||
{
|
||||
|
||||
user_id: '_1753266816257',
|
||||
|
||||
group_id: 2,
|
||||
|
||||
group_id_ref: 2,
|
||||
|
||||
group_name: 'Houdemont',
|
||||
|
||||
group_color: '#455A64',
|
||||
|
||||
nocodb_config_id: 1,
|
||||
|
||||
nocodb_table_id: 'my7zunxprumahmm',
|
||||
|
||||
nocodb_table_name: 'CommandeH',
|
||||
|
||||
invoice_column_name: 'RefFacture',
|
||||
|
||||
group_created_at: '2025-07-22 11:09:08.977622',
|
||||
|
||||
group_updated_at: '2025-08-12 09:39:32.989'
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
✅ Processed 1 groups for user _1753266816257
|
||||
|
||||
🔍 getUserWithGroups called for user: _1753266816257
|
||||
|
||||
🔍 Querying user_groups for user: _1753266816257
|
||||
|
||||
🔍 Found 1 group assignments for user _1753266816257
|
||||
|
||||
🔍 Raw query result: [
|
||||
|
||||
{
|
||||
|
||||
user_id: '_1753266816257',
|
||||
|
||||
group_id: 2,
|
||||
|
||||
group_id_ref: 2,
|
||||
|
||||
group_name: 'Houdemont',
|
||||
|
||||
group_color: '#455A64',
|
||||
|
||||
nocodb_config_id: 1,
|
||||
|
||||
nocodb_table_id: 'my7zunxprumahmm',
|
||||
|
||||
nocodb_table_name: 'CommandeH',
|
||||
|
||||
invoice_column_name: 'RefFacture',
|
||||
|
||||
group_created_at: '2025-07-22 11:09:08.977622',
|
||||
|
||||
group_updated_at: '2025-08-12 09:39:32.989'
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
✅ Processed 1 groups for user _1753266816257
|
||||
|
||||
🔍 getUserWithGroups called for user: _1753266816257
|
||||
|
||||
🔍 Querying user_groups for user: _1753266816257
|
||||
|
||||
🔍 Found 1 group assignments for user _1753266816257
|
||||
|
||||
🔍 Raw query result: [
|
||||
|
||||
{
|
||||
|
||||
user_id: '_1753266816257',
|
||||
|
||||
group_id: 2,
|
||||
|
||||
group_id_ref: 2,
|
||||
|
||||
group_name: 'Houdemont',
|
||||
|
||||
group_color: '#455A64',
|
||||
|
||||
nocodb_config_id: 1,
|
||||
|
||||
nocodb_table_id: 'my7zunxprumahmm',
|
||||
|
||||
nocodb_table_name: 'CommandeH',
|
||||
|
||||
invoice_column_name: 'RefFacture',
|
||||
|
||||
group_created_at: '2025-07-22 11:09:08.977622',
|
||||
|
||||
group_updated_at: '2025-08-12 09:39:32.989'
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
✅ Processed 1 groups for user _1753266816257
|
||||
|
||||
GET /api/dlc-products/stats 304 in 45ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 472 KiB |
@@ -81,7 +81,7 @@ export function CustomerOrderForm({
|
||||
deposit: order?.deposit || 0,
|
||||
isPromotionalPrice: order?.isPromotionalPrice || false,
|
||||
customerNotified: order?.customerNotified || false,
|
||||
groupId: order?.groupId || (user?.role === 'admin' && selectedStoreId ? selectedStoreId : user?.userGroups?.[0]?.groupId) || 1, // Force assignment with fallback
|
||||
groupId: order?.groupId || (user?.userGroups?.[0]?.groupId || (user?.role === 'admin' && selectedStoreId ? selectedStoreId : 1)), // PRIORITÉ: groupe utilisateur assigné
|
||||
},
|
||||
});
|
||||
|
||||
@@ -107,27 +107,28 @@ export function CustomerOrderForm({
|
||||
availableGroups: groups.map(g => ({id: g.id, name: g.name}))
|
||||
});
|
||||
|
||||
// FORCE L'UTILISATION DU GROUPE ASSIGNÉ EN PREMIER - MÊME LOGIQUE QUE DLC
|
||||
if (!groupId) {
|
||||
if (user?.role === 'admin' && selectedStoreId) {
|
||||
// Admin has selected a specific store - use it
|
||||
groupId = selectedStoreId;
|
||||
console.log("🏪 Using admin selected store:", selectedStoreId);
|
||||
} else if (user?.userGroups?.[0]?.groupId) {
|
||||
// User has assigned groups - use first one
|
||||
if (user?.userGroups?.[0]?.groupId) {
|
||||
// Utilisateur avec groupe assigné : TOUJOURS utiliser ce groupe (PRIORITÉ)
|
||||
groupId = user.userGroups[0].groupId;
|
||||
console.log("👤 Using user group:", groupId);
|
||||
console.log("🎯 Customer Order Frontend: Using user's assigned group (PRIORITY):", groupId);
|
||||
} else if (user?.role === 'admin' && selectedStoreId) {
|
||||
// Admin avec magasin sélectionné ET pas de groupe assigné
|
||||
groupId = selectedStoreId;
|
||||
console.log("🎯 Customer Order Frontend: Using admin selected store:", groupId);
|
||||
} else if (user?.role === 'admin' && groups.length > 0) {
|
||||
// Admin in "tous magasins" mode - use first group
|
||||
// Admin sans sélection : premier groupe disponible
|
||||
groupId = groups[0].id;
|
||||
console.log("🏢 Admin fallback to first group:", groupId);
|
||||
console.log("🎯 Customer Order Frontend: Using first group for admin:", groupId);
|
||||
} else if (groups.length > 0) {
|
||||
// EMERGENCY FALLBACK: Force assignment to first available group
|
||||
groupId = groups[0].id;
|
||||
console.log("⚠️ EMERGENCY: Force assigning to first group:", groupId);
|
||||
console.log("⚠️ Customer Order Frontend: Emergency fallback to first group:", groupId);
|
||||
} else {
|
||||
// LAST RESORT: Hard-coded fallback
|
||||
groupId = 1;
|
||||
console.log("🚨 LAST RESORT: Using hard-coded groupId 1");
|
||||
console.log("🚨 Customer Order Frontend: Using hard-coded groupId 1");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -200,18 +200,24 @@ export default function DlcPage() {
|
||||
|
||||
// Déterminer le groupId correctement selon le rôle utilisateur
|
||||
let groupId;
|
||||
if (user?.role === 'admin' && selectedStoreId) {
|
||||
// Admin avec magasin sélectionné
|
||||
groupId = selectedStoreId;
|
||||
} else if (user?.userGroups?.[0]?.groupId) {
|
||||
// Utilisateur non-admin : utiliser son groupe assigné
|
||||
|
||||
// FORCE L'UTILISATION DU GROUPE ASSIGNÉ EN PREMIER
|
||||
if (user?.userGroups?.[0]?.groupId) {
|
||||
// Utilisateur avec groupe assigné : TOUJOURS utiliser ce groupe
|
||||
groupId = user.userGroups[0].groupId;
|
||||
} else if (user?.role === 'admin') {
|
||||
console.log("🎯 DLC Frontend: Using user's assigned group (PRIORITY):", groupId);
|
||||
} else if (user?.role === 'admin' && selectedStoreId) {
|
||||
// Admin avec magasin sélectionné ET pas de groupe assigné
|
||||
groupId = selectedStoreId;
|
||||
console.log("🎯 DLC Frontend: Using admin selected store:", groupId);
|
||||
} else if (user?.role === 'admin' && stores?.[0]?.id) {
|
||||
// Admin sans sélection : premier magasin disponible
|
||||
groupId = stores[0]?.id || 1;
|
||||
groupId = stores[0].id;
|
||||
console.log("🎯 DLC Frontend: Using first available store for admin:", groupId);
|
||||
} else {
|
||||
// Fallback par défaut
|
||||
// Fallback d'urgence
|
||||
groupId = 1;
|
||||
console.log("🚨 DLC Frontend: Using emergency fallback groupId:", groupId);
|
||||
}
|
||||
|
||||
console.log("🏪 DLC GroupId Selection DEBUG:", {
|
||||
|
||||
Reference in new issue
Block a user