Files
LogiFlow/debug-employee-customer-orders.js
T
michaelschal 7239b97c8c Fix order creation for employees and improve permission handling
Remove specific permission checks from route handlers in `server/routes.ts` and adjust the `delete` operation to use the shared permission system. Add a new debugging script `debug-employee-customer-orders.js` to diagnose issues with employee roles creating customer orders.

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/rppGAOc
2025-08-12 13:49:10 +00:00

192 lines
6.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env node
/**
* Script de diagnostic pour le problème de création de commandes client
* avec le rôle employé en production
*/
const fetch = require('node-fetch');
// Configuration de votre serveur de production
const PRODUCTION_URL = process.env.PRODUCTION_URL || 'https://votre-serveur-production.com';
const EMPLOYEE_USERNAME = process.env.EMPLOYEE_USERNAME || 'votre-employee-username';
const EMPLOYEE_PASSWORD = process.env.EMPLOYEE_PASSWORD || 'votre-employee-password';
async function testEmployeeCustomerOrders() {
console.log('🔍 Test de diagnostic des commandes client pour employé');
console.log('URL de production:', PRODUCTION_URL);
try {
// 1. Test d'authentification employé
console.log('\n1. Test d\'authentification employé...');
const loginResponse = await fetch(`${PRODUCTION_URL}/api/login`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: EMPLOYEE_USERNAME,
password: EMPLOYEE_PASSWORD
})
});
if (!loginResponse.ok) {
console.error('❌ Échec de l\'authentification employé:', loginResponse.status);
return;
}
const cookies = loginResponse.headers.get('set-cookie');
console.log('✅ Authentification employé réussie');
// 2. Vérifier le profil utilisateur
console.log('\n2. Vérification du profil employé...');
const userResponse = await fetch(`${PRODUCTION_URL}/api/user`, {
headers: {
'Cookie': cookies
}
});
if (!userResponse.ok) {
console.error('❌ Impossible de récupérer le profil employé:', userResponse.status);
return;
}
const user = await userResponse.json();
console.log('✅ Profil employé:', {
role: user.role,
id: user.id,
groupsCount: user.userGroups?.length || 0,
groups: user.userGroups?.map(ug => ug.group?.name || ug.groupId) || []
});
if (user.role !== 'employee') {
console.error('❌ L\'utilisateur n\'est pas un employé, rôle actuel:', user.role);
return;
}
// 3. Test de récupération des commandes client (GET)
console.log('\n3. Test API GET /api/customer-orders...');
const getOrdersResponse = await fetch(`${PRODUCTION_URL}/api/customer-orders`, {
headers: {
'Cookie': cookies
}
});
console.log('Status GET customer-orders:', getOrdersResponse.status);
if (getOrdersResponse.ok) {
const orders = await getOrdersResponse.json();
console.log('✅ API GET customer-orders fonctionne, nombre:', orders.length);
} else {
const errorText = await getOrdersResponse.text();
console.error('❌ Erreur API GET customer-orders:', errorText);
}
// 4. Test de création d'une commande client (POST)
console.log('\n4. Test API POST /api/customer-orders...');
// Utiliser le premier groupe de l'employé
const groupId = user.userGroups?.[0]?.groupId;
if (!groupId) {
console.error('❌ Employé n\'est assigné à aucun groupe');
return;
}
const testOrder = {
customerName: 'Test Client Diagnostic',
contactNumber: '0123456789',
productName: 'Test Produit',
productDescription: 'Description test',
quantity: 1,
groupId: groupId,
isPickup: false,
notes: 'Commande test pour diagnostic'
};
console.log('📦 Données de test:', testOrder);
const createOrderResponse = await fetch(`${PRODUCTION_URL}/api/customer-orders`, {
method: 'POST',
headers: {
'Cookie': cookies,
'Content-Type': 'application/json'
},
body: JSON.stringify(testOrder)
});
console.log('Status POST customer-orders:', createOrderResponse.status);
if (createOrderResponse.ok) {
const createdOrder = await createOrderResponse.json();
console.log('✅ Commande client créée avec succès:', {
id: createdOrder.id,
customerName: createdOrder.customerName,
status: createdOrder.status
});
// 5. Nettoyer - supprimer la commande test (si l'employé a permission)
console.log('\n5. Test de suppression de la commande test...');
const deleteResponse = await fetch(`${PRODUCTION_URL}/api/customer-orders/${createdOrder.id}`, {
method: 'DELETE',
headers: {
'Cookie': cookies
}
});
if (deleteResponse.ok) {
console.log('✅ Commande test supprimée');
} else {
console.log('ℹ️ Commande test conservée (employé n\'a pas permission de supprimer)');
}
} else {
const errorText = await createOrderResponse.text();
console.error('❌ Erreur API POST customer-orders:', errorText);
// Analyser les erreurs courantes
if (createOrderResponse.status === 403) {
console.log('💡 Problème de permissions - vérifiez le système de permissions côté serveur');
} else if (createOrderResponse.status === 400) {
console.log('💡 Problème de validation - vérifiez les données envoyées');
} else if (createOrderResponse.status === 500) {
console.log('💡 Erreur serveur - vérifiez les logs serveur');
}
}
// 6. Test des permissions spécifiques
console.log('\n6. Test des permissions employé...');
console.log('Permissions attendues pour customer-orders:');
console.log('- view: ✅ (employé doit pouvoir voir)');
console.log('- create: ✅ (employé doit pouvoir créer)');
console.log('- edit: ❌ (employé ne doit pas pouvoir modifier)');
console.log('- delete: ❌ (employé ne doit pas pouvoir supprimer)');
} catch (error) {
console.error('❌ Erreur de diagnostic:', error.message);
if (error.code === 'ECONNREFUSED') {
console.log('💡 Solution: Vérifiez que le serveur est démarré et accessible');
} else if (error.code === 'ETIMEDOUT') {
console.log('💡 Solution: Problème de timeout réseau');
} else if (error.message.includes('ENOTFOUND')) {
console.log('💡 Solution: URL du serveur incorrecte');
}
}
}
// Instructions d'utilisation
console.log(`
🚀 INSTRUCTIONS D'UTILISATION:
1. Configurez les variables d'environnement:
export PRODUCTION_URL="https://votre-serveur-production.com"
export EMPLOYEE_USERNAME="votre-employee-username"
export EMPLOYEE_PASSWORD="votre-employee-password"
2. Exécutez le script:
node debug-employee-customer-orders.js --run
3. Analysez les résultats pour identifier le problème
`);
if (process.argv.includes('--run')) {
testEmployeeCustomerOrders();
}