mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-11 17:27:31 +02:00
343 files changed
+523
-20170
No files matched your search
@@ -1,45 +0,0 @@
|
||||
# CORRECTION URGENTE CALENDRIER PRODUCTION
|
||||
|
||||
## PROBLÈME IDENTIFIÉ
|
||||
Votre serveur de production utilise une version différente du calendrier qui n'a pas les améliorations récentes.
|
||||
|
||||
## SOLUTION IMMÉDIATE
|
||||
|
||||
### 1. Remplacer complètement le fichier CalendarGrid.tsx en production
|
||||
|
||||
Le fichier actuel de développement `client/src/components/CalendarGrid.tsx` doit être copié INTÉGRALEMENT vers votre serveur de production.
|
||||
|
||||
### 2. Vérifications à faire après la copie
|
||||
|
||||
1. **Redémarrer le serveur de production**
|
||||
2. **Vider le cache du navigateur** (Ctrl+F5)
|
||||
3. **Vérifier que les boutons "+X autres" apparaissent**
|
||||
|
||||
### 3. Si le problème persiste
|
||||
|
||||
Il faudra vérifier que votre production a bien les dépendances suivantes dans package.json :
|
||||
|
||||
```json
|
||||
{
|
||||
"@/components/ui/dialog": "présent",
|
||||
"lucide-react": "présent"
|
||||
}
|
||||
```
|
||||
|
||||
### 4. Test de validation
|
||||
|
||||
Sur un jour avec plus de 4 éléments :
|
||||
- ✅ Maximum 4 éléments visibles directement
|
||||
- ✅ Bouton "+X autres" visible et cliquable
|
||||
- ✅ Modal s'ouvre avec tous les éléments
|
||||
- ✅ Couleurs pastels appliquées
|
||||
|
||||
## FICHIERS À SYNCHRONISER
|
||||
|
||||
1. `client/src/components/CalendarGrid.tsx` (PRIORITÉ 1)
|
||||
2. Vérifier `client/src/components/ui/dialog.tsx` existe
|
||||
3. Vérifier les imports Lucide React
|
||||
|
||||
---
|
||||
|
||||
**IMPORTANT :** Votre version de production est obsolète. Le fichier de développement contient tous les correctifs nécessaires.
|
||||
@@ -1,67 +0,0 @@
|
||||
# COMMANDES PRODUCTION - Solution Immédiate
|
||||
|
||||
## SOLUTION URGENTE (2 minutes)
|
||||
|
||||
### Commande 1: Appliquer la migration DLC
|
||||
```bash
|
||||
docker-compose exec logiflow-db psql -U logiflow_admin -d logiflow_db -f - << 'EOF'
|
||||
ALTER TABLE dlc_products
|
||||
ADD COLUMN IF NOT EXISTS stock_epuise boolean DEFAULT false NOT NULL,
|
||||
ADD COLUMN IF NOT EXISTS stock_epuise_by varchar(255),
|
||||
ADD COLUMN IF NOT EXISTS stock_epuise_at timestamp;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_dlc_products_stock_epuise ON dlc_products(stock_epuise);
|
||||
|
||||
UPDATE dlc_products SET stock_epuise = false WHERE stock_epuise IS NULL;
|
||||
|
||||
SELECT 'Migration DLC terminée' as status;
|
||||
EOF
|
||||
```
|
||||
|
||||
### Commande 2: Redémarrer l'application
|
||||
```bash
|
||||
docker-compose restart logiflow
|
||||
```
|
||||
|
||||
### Alternative si la première ne marche pas:
|
||||
```bash
|
||||
# Option A: Via fichier SQL
|
||||
docker cp MIGRATION_PRODUCTION_URGENTE.sql [CONTAINER_NAME]:/tmp/migration.sql
|
||||
docker-compose exec logiflow-db psql -U logiflow_admin -d logiflow_db -f /tmp/migration.sql
|
||||
|
||||
# Option B: Connexion directe
|
||||
docker-compose exec logiflow-db psql -U logiflow_admin -d logiflow_db
|
||||
|
||||
# Dans psql, coller:
|
||||
ALTER TABLE dlc_products
|
||||
ADD COLUMN IF NOT EXISTS stock_epuise boolean DEFAULT false NOT NULL,
|
||||
ADD COLUMN IF NOT EXISTS stock_epuise_by varchar(255),
|
||||
ADD COLUMN IF NOT EXISTS stock_epuise_at timestamp;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_dlc_products_stock_epuise ON dlc_products(stock_epuise);
|
||||
```
|
||||
|
||||
## Vérification
|
||||
```bash
|
||||
# Vérifier que les colonnes existent
|
||||
docker-compose exec logiflow-db psql -U logiflow_admin -d logiflow_db -c "
|
||||
SELECT column_name, data_type
|
||||
FROM information_schema.columns
|
||||
WHERE table_name='dlc_products'
|
||||
AND column_name LIKE '%stock_epuise%';
|
||||
"
|
||||
|
||||
# Vérifier les logs de l'application
|
||||
docker-compose logs logiflow | tail -20
|
||||
```
|
||||
|
||||
## Résultat attendu
|
||||
```
|
||||
column_name | data_type
|
||||
--------------------+-------------------
|
||||
stock_epuise | boolean
|
||||
stock_epuise_at | timestamp without time zone
|
||||
stock_epuise_by | character varying
|
||||
```
|
||||
|
||||
L'erreur "column does not exist" disparaîtra immédiatement.
|
||||
@@ -1,128 +0,0 @@
|
||||
# CORRECTION FINALE - Erreur 500 Annonces Production
|
||||
|
||||
## Problème identifié
|
||||
```
|
||||
TypeError: announcementStorage.getAnnouncement is not a function
|
||||
```
|
||||
|
||||
La méthode `getAnnouncement` (singulier) manque dans `server/announcementStorage.ts`.
|
||||
|
||||
## Solution complète à appliquer
|
||||
|
||||
### 1. Fichier `server/announcementStorage.ts`
|
||||
|
||||
**AJOUTEZ cette méthode dans la classe `AnnouncementDatabaseStorage` (après la méthode `getAnnouncements`) :**
|
||||
|
||||
```javascript
|
||||
async getAnnouncement(id: number): Promise<AnnouncementWithRelations | null> {
|
||||
console.log('🔍 [DB] Getting single announcement:', id);
|
||||
|
||||
const result = await db
|
||||
.select({
|
||||
id: dashboardMessages.id,
|
||||
title: dashboardMessages.title,
|
||||
content: dashboardMessages.content,
|
||||
type: dashboardMessages.type,
|
||||
storeId: dashboardMessages.storeId,
|
||||
createdBy: dashboardMessages.createdBy,
|
||||
createdAt: dashboardMessages.createdAt,
|
||||
author: {
|
||||
id: users.id,
|
||||
firstName: users.firstName,
|
||||
lastName: users.lastName,
|
||||
username: users.username,
|
||||
},
|
||||
group: {
|
||||
id: groups.id,
|
||||
name: groups.name,
|
||||
},
|
||||
})
|
||||
.from(dashboardMessages)
|
||||
.leftJoin(users, eq(dashboardMessages.createdBy, users.username))
|
||||
.leftJoin(groups, eq(dashboardMessages.storeId, groups.id))
|
||||
.where(eq(dashboardMessages.id, id))
|
||||
.limit(1);
|
||||
|
||||
if (result.length === 0) {
|
||||
console.log('❌ [DB] Announcement not found:', id);
|
||||
return null;
|
||||
}
|
||||
|
||||
const announcement = result[0];
|
||||
console.log('✅ [DB] Found announcement:', announcement.id, announcement.title);
|
||||
|
||||
return {
|
||||
id: announcement.id,
|
||||
title: announcement.title,
|
||||
content: announcement.content,
|
||||
type: announcement.type,
|
||||
storeId: announcement.storeId,
|
||||
createdBy: announcement.createdBy,
|
||||
createdAt: announcement.createdAt,
|
||||
author: announcement.author as User,
|
||||
group: announcement.group as Group | undefined,
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
**MODIFIEZ l'interface `IAnnouncementStorage` (vers le haut du fichier) :**
|
||||
|
||||
```javascript
|
||||
interface IAnnouncementStorage {
|
||||
getAnnouncements(groupIds?: number[]): Promise<AnnouncementWithRelations[]>;
|
||||
getAnnouncement(id: number): Promise<AnnouncementWithRelations | null>; // ← AJOUTEZ CETTE LIGNE
|
||||
createAnnouncement(announcement: InsertAnnouncement): Promise<DashboardMessage>;
|
||||
updateAnnouncement(id: number, announcement: Partial<InsertAnnouncement>): Promise<DashboardMessage>;
|
||||
deleteAnnouncement(id: number): Promise<void>;
|
||||
}
|
||||
```
|
||||
|
||||
**AJOUTEZ aussi cette méthode dans la classe `AnnouncementMemoryStorage` (après `initializeTestData`) :**
|
||||
|
||||
```javascript
|
||||
async getAnnouncement(id: number): Promise<AnnouncementWithRelations | null> {
|
||||
const announcement = this.announcements.get(id);
|
||||
if (!announcement) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Ajouter les relations
|
||||
const users = await this.usersGetter();
|
||||
const groups = await this.groupsGetter();
|
||||
|
||||
const author = users.find(u => u.id === announcement.createdBy || u.username === announcement.createdBy);
|
||||
const group = announcement.storeId ? groups.find(g => g.id === announcement.storeId) : undefined;
|
||||
|
||||
return {
|
||||
...announcement,
|
||||
author: author || { id: announcement.createdBy, firstName: 'Utilisateur', lastName: 'Inconnu', username: announcement.createdBy } as User,
|
||||
group,
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### 2. VÉRIFICATIONS après correction
|
||||
|
||||
1. **Redémarrez votre serveur**
|
||||
2. **Testez la modification d'une annonce**
|
||||
3. **Vérifiez les logs**, vous devriez voir :
|
||||
```
|
||||
🔍 [DB] Getting single announcement: 16
|
||||
✅ [DB] Found announcement: 16 Titre...
|
||||
🔍 [DB] Updating announcement with data: {...}
|
||||
✅ [DB] Updated announcement: {...}
|
||||
```
|
||||
|
||||
## Causes des erreurs précédentes
|
||||
|
||||
1. ❌ **Méthode `getAnnouncement` manquante** → Interface incomplète
|
||||
2. ❌ **Jointure incorrecte** → `users.id` au lieu de `users.username`
|
||||
3. ❌ **Imports incorrects** → `nocodbConfigs` au lieu de `nocodbConfig`
|
||||
|
||||
## Test final
|
||||
|
||||
Après application, la modification d'annonce devrait réussir sans erreur 500.
|
||||
|
||||
---
|
||||
|
||||
**Cette correction résout définitivement le problème.**
|
||||
@@ -1,56 +0,0 @@
|
||||
# CORRECTION URGENTE - Erreurs 500 Modification Annonces Production
|
||||
|
||||
## Problème
|
||||
Erreurs 500 lors de la modification des annonces en production dues à une jointure PostgreSQL incorrecte.
|
||||
|
||||
## Solution - Modifications à appliquer sur votre serveur
|
||||
|
||||
### 1. Fichier `server/routes.ts` - Ligne 44
|
||||
**AVANT :**
|
||||
```javascript
|
||||
customerOrders, nocodbConfigs, dlcProducts, tasks, invoiceVerifications, dashboardMessages
|
||||
```
|
||||
|
||||
**APRÈS :**
|
||||
```javascript
|
||||
customerOrders, nocodbConfig, dlcProducts, tasks, invoiceVerificationCache, dashboardMessages
|
||||
```
|
||||
|
||||
### 2. Fichier `server/announcementStorage.ts` - Ligne 46
|
||||
**AVANT :**
|
||||
```javascript
|
||||
.leftJoin(users, eq(dashboardMessages.createdBy, users.id))
|
||||
```
|
||||
|
||||
**APRÈS :**
|
||||
```javascript
|
||||
.leftJoin(users, eq(dashboardMessages.createdBy, users.username))
|
||||
```
|
||||
|
||||
### 3. Fichier `server/announcementStorage.ts` - Lignes 70-76
|
||||
**REMPLACER la méthode updateAnnouncement par :**
|
||||
```javascript
|
||||
async updateAnnouncement(id: number, announcement: Partial<InsertAnnouncement>): Promise<DashboardMessage> {
|
||||
console.log('📝 [DB] Updating announcement with data:', announcement);
|
||||
|
||||
const [updated] = await db
|
||||
.update(dashboardMessages)
|
||||
.set(announcement)
|
||||
.where(eq(dashboardMessages.id, id))
|
||||
.returning();
|
||||
|
||||
console.log('📝 [DB] Updated announcement:', updated);
|
||||
|
||||
if (!updated) {
|
||||
throw new Error(`Announcement with id ${id} not found`);
|
||||
}
|
||||
|
||||
return updated;
|
||||
}
|
||||
```
|
||||
|
||||
## Cause du problème
|
||||
La jointure PostgreSQL utilisait `users.id` au lieu de `users.username` pour la relation avec le champ `createdBy`, qui contient des usernames en production.
|
||||
|
||||
## Test après correction
|
||||
Après application des modifications, redémarrez votre serveur et testez la modification d'une annonce.
|
||||
@@ -1,48 +0,0 @@
|
||||
# CORRECTION PRODUCTION - MODULE TÂCHES (19 Août 2025)
|
||||
|
||||
## PROBLÈME IDENTIFIÉ
|
||||
L'implémentation des dates de départ a causé des erreurs JavaScript en production qui empêchent le module tâches de se charger.
|
||||
|
||||
## CORRECTION IMMÉDIATE
|
||||
|
||||
### 1. Backend - Robustesse des données
|
||||
|
||||
Le backend doit retourner des données sécurisées :
|
||||
- Filtrage des tâches nulles
|
||||
- Gestion sécurisée des dates
|
||||
- Validation des propriétés
|
||||
|
||||
### 2. Frontend - Gestion d'erreur
|
||||
|
||||
Le frontend doit gérer les cas d'erreur :
|
||||
- Validation des données reçues
|
||||
- Protection contre les propriétés undefined
|
||||
- Fallback pour les erreurs de parsing de dates
|
||||
|
||||
### 3. Fichiers à copier en production
|
||||
|
||||
**Priorité CRITIQUE :** Copier ces fichiers dans l'ordre :
|
||||
|
||||
1. `server/storage.ts` - Méthode getTasks corrigée
|
||||
2. `client/src/pages/Tasks.tsx` - Gestion d'erreur renforcée
|
||||
3. `client/src/components/tasks/NewTaskForm.tsx` - Validation des données
|
||||
4. `shared/schema.ts` - Types mis à jour
|
||||
|
||||
## TEST DE VALIDATION
|
||||
|
||||
Après copie des fichiers :
|
||||
1. Redémarrer le serveur Docker
|
||||
2. Tester l'accès au module tâches
|
||||
3. Vérifier la création d'une nouvelle tâche
|
||||
4. Confirmer l'affichage correct des dates
|
||||
|
||||
## ROLLBACK SI PROBLÈME
|
||||
|
||||
Si les erreurs persistent, remplacer uniquement `client/src/components/tasks/TaskForm.tsx` par :
|
||||
|
||||
```typescript
|
||||
// Version simplifiée sans dates de départ
|
||||
export { default } from "./SimpleTaskForm";
|
||||
```
|
||||
|
||||
Et créer un SimpleTaskForm.tsx basique sans les nouvelles fonctionnalités.
|
||||
@@ -1,149 +0,0 @@
|
||||
# DIAGNOSTIC PRODUCTION - Erreurs 500 Annonces
|
||||
|
||||
## Script de test à exécuter sur votre serveur
|
||||
|
||||
### 1. Test de connexion PostgreSQL
|
||||
|
||||
```javascript
|
||||
// Ajoutez temporairement dans server/routes.ts après la ligne 50
|
||||
app.get('/api/debug/db-connection', async (req, res) => {
|
||||
try {
|
||||
console.log('🔍 Testing PostgreSQL connection...');
|
||||
const result = await db.select().from(dashboardMessages).limit(1);
|
||||
console.log('✅ DB Connection OK, sample result:', result);
|
||||
res.json({ status: 'ok', connection: 'success', sampleData: result });
|
||||
} catch (error) {
|
||||
console.error('❌ DB Connection Error:', error);
|
||||
res.status(500).json({ status: 'error', error: error.message });
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
### 2. Test de mise à jour avec logs détaillés
|
||||
|
||||
```javascript
|
||||
// Remplacez temporairement la route PUT /api/announcements/:id par ceci
|
||||
app.put('/api/announcements/:id', isAuthenticated, async (req: any, res) => {
|
||||
console.log('🔍 [DEBUG] Starting announcement update process');
|
||||
console.log('🔍 [DEBUG] Request params:', req.params);
|
||||
console.log('🔍 [DEBUG] Request body:', req.body);
|
||||
console.log('🔍 [DEBUG] User:', req.user);
|
||||
|
||||
try {
|
||||
const userId = req.user.claims ? req.user.claims.sub : req.user.id;
|
||||
console.log('🔍 [DEBUG] Extracted userId:', userId);
|
||||
|
||||
const user = await storage.getUserWithGroups(userId);
|
||||
console.log('🔍 [DEBUG] User found:', user ? 'YES' : 'NO');
|
||||
if (user) {
|
||||
console.log('🔍 [DEBUG] User details:', { id: user.id, username: user.username, role: user.role });
|
||||
}
|
||||
|
||||
if (!user) {
|
||||
console.error('❌ [DEBUG] User not found');
|
||||
return res.status(404).json({ message: "User not found" });
|
||||
}
|
||||
|
||||
if (user.role !== 'admin') {
|
||||
console.error('❌ [DEBUG] Access denied - user role:', user.role);
|
||||
return res.status(403).json({ message: "Only administrators can edit announcements" });
|
||||
}
|
||||
|
||||
const id = parseInt(req.params.id);
|
||||
console.log('🔍 [DEBUG] Announcement ID to update:', id);
|
||||
|
||||
// Test if announcement exists
|
||||
console.log('🔍 [DEBUG] Checking if announcement exists...');
|
||||
const existingAnnouncement = await storage.getAnnouncement(id);
|
||||
console.log('🔍 [DEBUG] Existing announcement:', existingAnnouncement ? 'FOUND' : 'NOT FOUND');
|
||||
if (existingAnnouncement) {
|
||||
console.log('🔍 [DEBUG] Existing announcement details:', {
|
||||
id: existingAnnouncement.id,
|
||||
title: existingAnnouncement.title,
|
||||
createdBy: existingAnnouncement.createdBy
|
||||
});
|
||||
}
|
||||
|
||||
if (!existingAnnouncement) {
|
||||
console.error('❌ [DEBUG] Announcement not found:', id);
|
||||
return res.status(404).json({ message: "Announcement not found" });
|
||||
}
|
||||
|
||||
console.log('🔍 [DEBUG] Validating request data...');
|
||||
const announcementData = insertAnnouncementSchema.partial().parse(req.body);
|
||||
console.log('🔍 [DEBUG] Validated data:', announcementData);
|
||||
|
||||
console.log('🔍 [DEBUG] Calling storage.updateAnnouncement...');
|
||||
const updatedAnnouncement = await storage.updateAnnouncement(id, announcementData);
|
||||
console.log('✅ [DEBUG] Update successful:', updatedAnnouncement);
|
||||
|
||||
res.json(updatedAnnouncement);
|
||||
} catch (error) {
|
||||
console.error('❌ [DEBUG] Error in update process:', error);
|
||||
console.error('❌ [DEBUG] Error stack:', error.stack);
|
||||
|
||||
if (error instanceof z.ZodError) {
|
||||
console.error('❌ [DEBUG] Validation errors:', error.errors);
|
||||
return res.status(400).json({ message: "Validation error", errors: error.errors });
|
||||
}
|
||||
|
||||
res.status(500).json({
|
||||
message: "Failed to update announcement",
|
||||
error: error.message,
|
||||
debug: true
|
||||
});
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
### 3. Test de la méthode updateAnnouncement directement
|
||||
|
||||
```javascript
|
||||
// Ajoutez cette route de test
|
||||
app.post('/api/debug/test-update', isAuthenticated, async (req: any, res) => {
|
||||
try {
|
||||
console.log('🔍 [DEBUG] Direct update test');
|
||||
|
||||
// Test direct sur la base de données
|
||||
const testResult = await db
|
||||
.update(dashboardMessages)
|
||||
.set({ title: 'Test Update ' + new Date().toISOString() })
|
||||
.where(eq(dashboardMessages.id, 1))
|
||||
.returning();
|
||||
|
||||
console.log('✅ [DEBUG] Direct DB update result:', testResult);
|
||||
res.json({ status: 'success', result: testResult });
|
||||
} catch (error) {
|
||||
console.error('❌ [DEBUG] Direct update error:', error);
|
||||
res.status(500).json({ status: 'error', error: error.message });
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
## Instructions d'utilisation
|
||||
|
||||
1. **Ajoutez ces routes de debug** à votre serveur de production
|
||||
2. **Redémarrez le serveur**
|
||||
3. **Testez dans l'ordre** :
|
||||
- GET `/api/debug/db-connection`
|
||||
- POST `/api/debug/test-update`
|
||||
- PUT `/api/announcements/1` avec les nouveaux logs
|
||||
4. **Envoyez-moi les logs complets** de ces tests
|
||||
|
||||
## Vérifications supplémentaires
|
||||
|
||||
### Vérifiez que les tables existent :
|
||||
```sql
|
||||
SELECT table_name FROM information_schema.tables
|
||||
WHERE table_schema = 'public' AND table_name = 'dashboard_messages';
|
||||
|
||||
SELECT column_name, data_type FROM information_schema.columns
|
||||
WHERE table_name = 'dashboard_messages';
|
||||
```
|
||||
|
||||
### Vérifiez les données :
|
||||
```sql
|
||||
SELECT id, title, created_by FROM dashboard_messages LIMIT 3;
|
||||
```
|
||||
|
||||
Ces tests nous diront exactement où est le problème dans votre environnement de production.
|
||||
@@ -1,39 +0,0 @@
|
||||
# FIX FINAL PRODUCTION - ERREUR CN (19 Août 2025)
|
||||
|
||||
## 🚫 PROBLÈME PERSISTANT
|
||||
L'erreur `ReferenceError: cn is not defined` persiste malgré les corrections précédentes.
|
||||
|
||||
## ✅ SOLUTION FINALE
|
||||
|
||||
### Nouveau fichier créé : `TaskFormProduction.tsx`
|
||||
- ✅ **ZÉRO utilisation de la fonction `cn`**
|
||||
- ✅ Classes CSS écrites directement avec conditions ternaires
|
||||
- ✅ Toutes les fonctionnalités conservées (dates de début + échéance)
|
||||
- ✅ Validation robuste des dates
|
||||
- ✅ Interface complète avec icônes
|
||||
|
||||
### Modification de `TaskForm.tsx`
|
||||
- ✅ Export maintenant vers `TaskFormProduction` au lieu de `SimpleTaskForm`
|
||||
- ✅ Garantit que le module tâches utilise la version sans cn
|
||||
|
||||
## 📁 FICHIERS À COPIER EN PRODUCTION
|
||||
1. `client/src/components/tasks/TaskForm.tsx` (modifié)
|
||||
2. `client/src/components/tasks/TaskFormProduction.tsx` (nouveau)
|
||||
|
||||
## 🎯 AVANTAGES
|
||||
- **100% sans dépendance cn** : Aucune utilisation de la fonction problématique
|
||||
- **Classes directes** : `className={field.value ? "classe1" : "classe2"}`
|
||||
- **Même interface** : Toutes les fonctionnalités préservées
|
||||
- **Production ready** : Conçu spécifiquement pour éviter les erreurs
|
||||
|
||||
## ⚡ DÉPLOIEMENT
|
||||
```bash
|
||||
# Copier les 2 fichiers sur votre serveur
|
||||
# Redémarrer
|
||||
docker-compose restart
|
||||
```
|
||||
|
||||
## ✅ RÉSULTAT ATTENDU
|
||||
- ✅ Module tâches se charge sans erreur
|
||||
- ✅ Formulaire avec dates de début et d'échéance
|
||||
- ✅ Plus jamais d'erreur `cn is not defined`
|
||||
@@ -1,55 +0,0 @@
|
||||
# INSTRUCTIONS FINALES - CALENDRIER PRODUCTION
|
||||
|
||||
## PROBLÈME IDENTIFIÉ
|
||||
Votre serveur de production utilise une version différente de CalendarGrid.tsx qui limite encore l'affichage à 2 éléments.
|
||||
|
||||
## SOLUTION DÉFINITIVE
|
||||
|
||||
### 1. Fichier de remplacement créé
|
||||
Le fichier `CalendarGrid.PRODUCTION.tsx` contient la version finale optimisée pour votre production avec :
|
||||
|
||||
- ✅ **MAX_VISIBLE_ITEMS = 4** (fixé et forcé)
|
||||
- ✅ **Bouton "+X autres" en blanc/gris** (fini l'orange)
|
||||
- ✅ **Hauteur cellules = h-36** (plus d'espace)
|
||||
- ✅ **Styles inline forcés** pour éviter les conflits CSS
|
||||
- ✅ **Modal Dialog** pour voir tous les éléments
|
||||
|
||||
### 2. Étapes de déploiement sur votre serveur
|
||||
|
||||
1. **Sauvegarder votre fichier actuel :**
|
||||
```bash
|
||||
cp client/src/components/CalendarGrid.tsx client/src/components/CalendarGrid.tsx.backup
|
||||
```
|
||||
|
||||
2. **Remplacer par la nouvelle version :**
|
||||
```bash
|
||||
cp CalendarGrid.PRODUCTION.tsx client/src/components/CalendarGrid.tsx
|
||||
```
|
||||
|
||||
3. **Redémarrer votre application :**
|
||||
```bash
|
||||
npm run build
|
||||
pm2 restart all
|
||||
# ou votre méthode de redémarrage
|
||||
```
|
||||
|
||||
4. **Vider le cache navigateur :** Ctrl+F5
|
||||
|
||||
### 3. Vérifications post-déploiement
|
||||
|
||||
- [ ] Maximum 4 éléments visibles par jour
|
||||
- [ ] Bouton "+X autres" blanc/gris visible
|
||||
- [ ] Modal s'ouvre en cliquant sur "+X autres"
|
||||
- [ ] Toutes les commandes/livraisons affichées dans le modal
|
||||
- [ ] Pas de problèmes d'affichage ou de CSS
|
||||
|
||||
### 4. En cas de problème
|
||||
|
||||
Si ça ne fonctionne toujours pas :
|
||||
1. Vérifiez que le bon fichier a été copié
|
||||
2. Vérifiez les logs de votre serveur
|
||||
3. Essayez un redémarrage complet
|
||||
4. Contactez-moi avec les logs d'erreur
|
||||
|
||||
---
|
||||
**IMPORTANT :** Ce fichier CalendarGrid.PRODUCTION.tsx est spécialement optimisé pour résoudre vos problèmes de production.
|
||||
@@ -1,108 +0,0 @@
|
||||
# 🚀 Instructions de Déploiement avec Migration Automatique
|
||||
|
||||
## Vue d'ensemble
|
||||
Le système est maintenant configuré pour exécuter automatiquement les migrations de base de données lors de chaque mise à jour Docker, garantissant que toutes les tables nécessaires sont créées.
|
||||
|
||||
## 🔧 Configuration Automatique
|
||||
|
||||
### Scripts créés
|
||||
1. **`scripts/auto-migrate-production.sh`** - Migration automatique au démarrage
|
||||
2. **`scripts/docker-entrypoint.sh`** - Point d'entrée avec migration
|
||||
3. **`scripts/manual-migrate.sh`** - Migration manuelle si nécessaire
|
||||
|
||||
### Dockerfile modifié
|
||||
- Copie automatique des scripts de migration
|
||||
- Point d'entrée personnalisé avec migration
|
||||
- Permissions configurées automatiquement
|
||||
|
||||
## 🚀 Déploiement
|
||||
|
||||
### Option 1: Reconstruction complète (Recommandée)
|
||||
```bash
|
||||
# Arrêter le conteneur actuel
|
||||
docker-compose down
|
||||
|
||||
# Reconstruire avec les nouveaux scripts
|
||||
docker-compose up --build -d
|
||||
|
||||
# Vérifier les logs de migration
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
### Option 2: Mise à jour sans reconstruction
|
||||
```bash
|
||||
# Copier les scripts dans le conteneur existant
|
||||
docker cp scripts/ logiflow-logiflow-1:/app/
|
||||
|
||||
# Exécuter la migration manuellement
|
||||
docker exec logiflow-logiflow-1 chmod +x /app/scripts/auto-migrate-production.sh
|
||||
docker exec logiflow-logiflow-1 /app/scripts/auto-migrate-production.sh
|
||||
|
||||
# Redémarrer l'application
|
||||
docker-compose restart
|
||||
```
|
||||
|
||||
## 🔍 Vérification
|
||||
|
||||
### Logs de migration
|
||||
```bash
|
||||
# Voir les logs de migration au démarrage
|
||||
docker-compose logs | grep "AUTO-MIGRATE"
|
||||
```
|
||||
|
||||
### État des tables
|
||||
```bash
|
||||
# Vérifier que toutes les tables existent
|
||||
docker exec logiflow-logiflow-1 psql $DATABASE_URL -c "
|
||||
SELECT tablename
|
||||
FROM pg_tables
|
||||
WHERE schemaname = 'public'
|
||||
ORDER BY tablename;
|
||||
"
|
||||
```
|
||||
|
||||
### Test du système d'annonces
|
||||
```bash
|
||||
# Vérifier la table announcements spécifiquement
|
||||
docker exec logiflow-logiflow-1 psql $DATABASE_URL -c "
|
||||
SELECT 'announcements' as table_name, count(*) as columns
|
||||
FROM information_schema.columns
|
||||
WHERE table_name = 'announcements';
|
||||
"
|
||||
```
|
||||
|
||||
## 🛠️ Dépannage
|
||||
|
||||
### Migration manuelle forcée
|
||||
```bash
|
||||
# Si la migration automatique échoue
|
||||
docker exec logiflow-logiflow-1 /app/scripts/manual-migrate.sh
|
||||
```
|
||||
|
||||
### Vérification des permissions
|
||||
```bash
|
||||
# Vérifier que les scripts sont exécutables
|
||||
docker exec logiflow-logiflow-1 ls -la /app/scripts/
|
||||
```
|
||||
|
||||
### Logs détaillés
|
||||
```bash
|
||||
# Activer le debug des migrations
|
||||
docker-compose up -d --env DEBUG_MIGRATIONS=true
|
||||
```
|
||||
|
||||
## 📋 Table créée automatiquement
|
||||
|
||||
✅ **announcements** - Système d'informations
|
||||
|
||||
Le script vérifie et crée **UNIQUEMENT** la table `announcements` si elle n'existe pas. Toutes les autres tables existent déjà en production et ne sont pas touchées.
|
||||
|
||||
## 🔄 Futures mises à jour
|
||||
|
||||
Désormais, chaque fois que vous mettez à jour votre application Docker :
|
||||
1. Le conteneur démarre
|
||||
2. La migration automatique s'exécute
|
||||
3. Toutes les nouvelles tables sont créées
|
||||
4. L'application démarre normalement
|
||||
|
||||
**Plus besoin d'intervention manuelle !**
|
||||
@@ -1,38 +0,0 @@
|
||||
# Instructions pour corriger la production
|
||||
|
||||
## Problème identifié
|
||||
La table `announcements` n'existe pas dans votre base de données de production.
|
||||
|
||||
## Solution rapide
|
||||
|
||||
### Étape 1: Accédez à votre conteneur
|
||||
```bash
|
||||
# Accédez au conteneur de votre application
|
||||
docker exec -it logiflow-logiflow-1 /bin/bash
|
||||
```
|
||||
|
||||
### Étape 2: Exécutez le script SQL
|
||||
```bash
|
||||
# Dans le conteneur, exécutez le script de correction
|
||||
psql $DATABASE_URL -f fix_production_announcements.sql
|
||||
```
|
||||
|
||||
### Alternative: Depuis l'extérieur du conteneur
|
||||
```bash
|
||||
# Copiez le fichier dans le conteneur
|
||||
docker cp fix_production_announcements.sql logiflow-logiflow-1:/app/
|
||||
|
||||
# Exécutez le script
|
||||
docker exec logiflow-logiflow-1 psql $DATABASE_URL -f /app/fix_production_announcements.sql
|
||||
```
|
||||
|
||||
## Vérification
|
||||
Après l'exécution, vous devriez voir :
|
||||
```
|
||||
Table announcements créée avec succès!
|
||||
```
|
||||
|
||||
Le système d'annonces fonctionnera immédiatement après cette correction.
|
||||
|
||||
## Prévention future
|
||||
Pour éviter ce problème lors des futures mises à jour, utilisez le fichier `init.sql` pour les nouvelles installations.
|
||||
@@ -1,47 +0,0 @@
|
||||
# Instructions de Mise à Jour du Calendrier en Production
|
||||
|
||||
## Problème Identifié
|
||||
Le calendrier en production affiche seulement 2 éléments par jour au lieu de 4, et les boutons "+X autres" n'apparaissent pas malgré la logique fonctionnelle (visible dans les logs de la console).
|
||||
|
||||
## Solution
|
||||
Copier le fichier CalendarGrid.tsx mis à jour vers votre serveur de production.
|
||||
|
||||
## Fichier à Copier
|
||||
```
|
||||
client/src/components/CalendarGrid.tsx
|
||||
```
|
||||
|
||||
## Changements Principaux
|
||||
|
||||
### 1. Limite d'affichage augmentée
|
||||
```javascript
|
||||
const MAX_VISIBLE_ITEMS = 4; // Était 2 avant
|
||||
```
|
||||
|
||||
### 2. Modal remplace le popover
|
||||
- Import `Dialog` au lieu de `Popover`
|
||||
- Interface modal moderne pour voir tous les éléments
|
||||
- Bouton orange visible : `bg-orange-200 hover:bg-orange-300`
|
||||
|
||||
### 3. Couleurs pastels appliquées
|
||||
- Commandes : `bg-blue-300 text-gray-800`
|
||||
- Livraisons : `bg-green-300 text-gray-800`
|
||||
- Planifiées : `bg-yellow-300 text-gray-800`
|
||||
- Livrées : `bg-gray-400 text-white`
|
||||
|
||||
## Vérification Après Copie
|
||||
|
||||
1. **Teste sur un jour avec plus de 4 éléments**
|
||||
2. **Le bouton orange "+X autres" doit apparaître**
|
||||
3. **Clic sur le bouton ouvre le modal avec tous les éléments**
|
||||
4. **Couleurs pastels visibles partout**
|
||||
|
||||
## Logs à Vérifier
|
||||
Dans la console du navigateur, vous devriez voir :
|
||||
```
|
||||
✅ Button "+X autres" should appear: [nombre]
|
||||
🔍 DayItemsContainer: { shouldShowButton: true }
|
||||
```
|
||||
|
||||
---
|
||||
**Note importante :** Cette mise à jour corrige définitivement le problème d'affichage limité à 2 éléments en production.
|
||||
@@ -1,161 +0,0 @@
|
||||
# 🐛 DEBUG PRODUCTION - Module Avoirs
|
||||
|
||||
## ⚠️ Problème identifié
|
||||
D'après votre capture d'écran, l'erreur "Failed to create avoir" indique un problème côté serveur.
|
||||
|
||||
## 🔍 ÉTAPES DE DÉBOGAGE
|
||||
|
||||
### 1️⃣ **Vérifier que la table `avoirs` existe**
|
||||
|
||||
```bash
|
||||
# Connectez-vous à votre base PostgreSQL
|
||||
psql -d votre_database_name
|
||||
|
||||
# Vérifiez si la table existe
|
||||
\dt avoirs
|
||||
|
||||
# Si elle n'existe pas, vous verrez "Did not find any relation named avoirs"
|
||||
```
|
||||
|
||||
### 2️⃣ **Créer la table manquante**
|
||||
|
||||
Si la table n'existe pas, exécutez le script SQL fourni :
|
||||
|
||||
```bash
|
||||
# Depuis votre serveur, exécutez :
|
||||
psql -d votre_database_name -f sql/create_avoirs_table.sql
|
||||
|
||||
# Ou copiez-collez le contenu du fichier directement :
|
||||
```
|
||||
|
||||
```sql
|
||||
-- Script de création de la table avoirs pour la production
|
||||
CREATE TABLE IF NOT EXISTS avoirs (
|
||||
id SERIAL PRIMARY KEY,
|
||||
supplier_id INTEGER NOT NULL REFERENCES suppliers(id) ON DELETE CASCADE,
|
||||
group_id INTEGER NOT NULL REFERENCES groups(id) ON DELETE CASCADE,
|
||||
invoice_reference VARCHAR(255),
|
||||
amount DECIMAL(10,2),
|
||||
comment TEXT,
|
||||
commercial_processed BOOLEAN DEFAULT FALSE,
|
||||
status VARCHAR(50) DEFAULT 'En attente de demande' CHECK (status IN ('En attente de demande', 'Demandé', 'Reçu')),
|
||||
webhook_sent BOOLEAN DEFAULT FALSE,
|
||||
nocodb_verified BOOLEAN DEFAULT FALSE,
|
||||
nocodb_verified_at TIMESTAMP,
|
||||
processed_at TIMESTAMP,
|
||||
created_by VARCHAR(255) NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- Index pour améliorer les performances
|
||||
CREATE INDEX IF NOT EXISTS idx_avoirs_supplier_id ON avoirs(supplier_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_avoirs_group_id ON avoirs(group_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_avoirs_created_by ON avoirs(created_by);
|
||||
CREATE INDEX IF NOT EXISTS idx_avoirs_status ON avoirs(status);
|
||||
CREATE INDEX IF NOT EXISTS idx_avoirs_created_at ON avoirs(created_at DESC);
|
||||
|
||||
-- Trigger pour mettre à jour automatically updated_at
|
||||
CREATE OR REPLACE FUNCTION update_avoirs_updated_at()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.updated_at = CURRENT_TIMESTAMP;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ language 'plpgsql';
|
||||
|
||||
DROP TRIGGER IF EXISTS update_avoirs_updated_at_trigger ON avoirs;
|
||||
CREATE TRIGGER update_avoirs_updated_at_trigger
|
||||
BEFORE UPDATE ON avoirs
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_avoirs_updated_at();
|
||||
```
|
||||
|
||||
### 3️⃣ **Vérifier les logs serveur**
|
||||
|
||||
```bash
|
||||
# Sur votre serveur, surveillez les logs :
|
||||
tail -f /var/log/your_app.log
|
||||
|
||||
# Ou si vous utilisez PM2 :
|
||||
pm2 logs your_app_name
|
||||
|
||||
# Ou Docker :
|
||||
docker logs your_container_name -f
|
||||
```
|
||||
|
||||
### 4️⃣ **Tester manuellement l'API**
|
||||
|
||||
```bash
|
||||
# Test avec curl pour vérifier l'API
|
||||
curl -X POST http://votre-serveur.com/api/avoirs \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Cookie: connect.sid=your_session_cookie" \
|
||||
-d '{
|
||||
"supplierId": 1,
|
||||
"groupId": 1,
|
||||
"invoiceReference": "TEST123",
|
||||
"amount": 100.00,
|
||||
"comment": "Test avoir",
|
||||
"commercialProcessed": false
|
||||
}'
|
||||
```
|
||||
|
||||
### 5️⃣ **Vérifier les permissions de base**
|
||||
|
||||
```sql
|
||||
-- Vérifiez que votre utilisateur de base de données a les bonnes permissions
|
||||
GRANT ALL PRIVILEGES ON TABLE avoirs TO your_db_user;
|
||||
GRANT USAGE, SELECT ON SEQUENCE avoirs_id_seq TO your_db_user;
|
||||
```
|
||||
|
||||
## 🛠️ SOLUTIONS COMMUNES
|
||||
|
||||
### **Erreur : Table 'avoirs' doesn't exist**
|
||||
➡️ Exécutez le script SQL ci-dessus
|
||||
|
||||
### **Erreur : Permission denied**
|
||||
➡️ Vérifiez les droits sur la table et la séquence
|
||||
|
||||
### **Erreur : Foreign key constraint fails**
|
||||
➡️ Vérifiez que les IDs `supplierId` et `groupId` existent dans leurs tables respectives
|
||||
|
||||
### **Erreur : Webhook timeout**
|
||||
➡️ Le webhook n'est pas bloquant, l'avoir sera créé même si le webhook échoue
|
||||
|
||||
## 🔧 COMMANDES DE DIAGNOSTIC
|
||||
|
||||
```sql
|
||||
-- Vérifier la structure de la table
|
||||
\d avoirs
|
||||
|
||||
-- Voir les contraintes
|
||||
SELECT conname, contype FROM pg_constraint WHERE conrelid = 'avoirs'::regclass;
|
||||
|
||||
-- Compter les enregistrements
|
||||
SELECT COUNT(*) FROM avoirs;
|
||||
|
||||
-- Tester une insertion basique
|
||||
INSERT INTO avoirs (supplier_id, group_id, invoice_reference, amount, created_by)
|
||||
VALUES (1, 1, 'TEST-001', 50.00, 'admin')
|
||||
RETURNING id;
|
||||
```
|
||||
|
||||
## ⚡ RESTART RAPIDE
|
||||
|
||||
Si tout semble correct mais ça ne marche toujours pas :
|
||||
|
||||
```bash
|
||||
# Redémarrez votre application
|
||||
pm2 restart your_app_name
|
||||
|
||||
# Ou Docker
|
||||
docker restart your_container_name
|
||||
|
||||
# Ou service systemd
|
||||
sudo systemctl restart your_app_service
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
💡 **Une fois la table créée et les permissions correctes, l'interface devrait fonctionner immédiatement !**
|
||||
@@ -1,92 +0,0 @@
|
||||
# Mise à jour Production - Fonctionnalité Stock Épuisé DLC
|
||||
|
||||
## Nouveaux champs ajoutés au module DLC
|
||||
|
||||
Cette mise à jour ajoute la fonctionnalité de gestion du stock épuisé pour les produits DLC, permettant de distinguer les produits périmés des produits en rupture de stock.
|
||||
|
||||
### Changements de base de données
|
||||
|
||||
**Nouveaux champs dans la table `dlc_products` :**
|
||||
- `stock_epuise` (boolean) - Indique si le produit est épuisé en stock
|
||||
- `stock_epuise_by` (varchar) - Utilisateur qui a marqué le produit comme épuisé
|
||||
- `stock_epuise_at` (timestamp) - Date de marquage comme épuisé
|
||||
|
||||
### Scripts de migration
|
||||
|
||||
#### Pour une nouvelle installation
|
||||
Les nouveaux champs sont inclus dans `init.sql` (lignes 188-190)
|
||||
|
||||
#### Pour une base de données existante
|
||||
Exécuter le script : `migrations/add_stock_epuise_fields.sql`
|
||||
|
||||
```sql
|
||||
ALTER TABLE dlc_products
|
||||
ADD COLUMN IF NOT EXISTS stock_epuise boolean DEFAULT false NOT NULL,
|
||||
ADD COLUMN IF NOT EXISTS stock_epuise_by varchar(255),
|
||||
ADD COLUMN IF NOT EXISTS stock_epuise_at timestamp;
|
||||
```
|
||||
|
||||
### Nouvelles routes API
|
||||
|
||||
#### Route pour marquer un produit comme stock épuisé
|
||||
- **Endpoint:** `PUT /api/dlc-products/:id/stock-epuise`
|
||||
- **Permissions:** Accessible à tous les utilisateurs authentifiés
|
||||
- **Fonction:** Marque un produit comme épuisé en stock (avec suivi utilisateur et date)
|
||||
|
||||
#### Route pour restaurer le stock d'un produit
|
||||
- **Endpoint:** `PUT /api/dlc-products/:id/restore-stock`
|
||||
- **Permissions:** Réservé aux admin, directeur et manager
|
||||
- **Fonction:** Remet le produit en stock disponible
|
||||
|
||||
### Interface utilisateur
|
||||
|
||||
#### Nouveaux boutons
|
||||
- **Bouton "Stock épuisé"** (icône PackageX) : Visible sur tous les produits non épuisés et non validés
|
||||
- **Bouton "Restaurer stock"** (icône RotateCcw) : Visible uniquement pour les utilisateurs privilégiés sur les produits épuisés
|
||||
|
||||
#### Styles visuels
|
||||
- **Produits épuisés** : Fond jaune avec badge "Stock épuisé" (jaune)
|
||||
- **Produits validés** : Fond gris avec badge "Validé" (gris)
|
||||
- **Produits normaux** : Fond blanc
|
||||
|
||||
### Déploiement
|
||||
|
||||
1. **Mise à jour Docker :**
|
||||
```bash
|
||||
docker-compose down
|
||||
docker-compose build
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
2. **Migration base de données :**
|
||||
```bash
|
||||
# Se connecter au conteneur PostgreSQL
|
||||
docker exec -it [postgres_container] psql -U [username] -d [database]
|
||||
|
||||
# Exécuter le script de migration
|
||||
\i migrations/add_stock_epuise_fields.sql
|
||||
```
|
||||
|
||||
3. **Vérification :**
|
||||
- Tester les nouveaux boutons dans l'interface DLC
|
||||
- Vérifier les permissions (admin/directeur/manager pour restauration)
|
||||
- Contrôler l'affichage des badges et couleurs
|
||||
|
||||
### Notes importantes
|
||||
|
||||
- Les nouveaux champs ont des valeurs par défaut pour éviter les erreurs sur les données existantes
|
||||
- La fonctionnalité est rétrocompatible avec les produits DLC existants
|
||||
- Les permissions suivent la logique existante du système
|
||||
- Aucun impact sur les fonctionnalités existantes de validation DLC
|
||||
|
||||
### Support
|
||||
|
||||
En cas de problème :
|
||||
1. Vérifier que la migration a été appliquée : `\d dlc_products`
|
||||
2. Contrôler les logs de l'application pour les erreurs API
|
||||
3. Vérifier les permissions utilisateur dans l'interface admin
|
||||
|
||||
---
|
||||
**Date de création :** $(date)
|
||||
**Version :** 1.0.0
|
||||
**Auteur :** Système de gestion DLC
|
||||
@@ -1,37 +0,0 @@
|
||||
# FIX PRODUCTION COMPLET - MODULE TÂCHES (19 Août 2025)
|
||||
|
||||
## ✅ PROBLÈME RÉSOLU
|
||||
Le module tâches fonctionne maintenant en production avec les dates de début.
|
||||
|
||||
## 📁 FICHIERS CORRIGÉS
|
||||
|
||||
### 1. `client/src/components/tasks/TaskForm.tsx`
|
||||
- ✅ Export corrigé vers SimpleTaskForm
|
||||
- ✅ Commentaire mis à jour
|
||||
|
||||
### 2. `client/src/components/tasks/SimpleTaskForm.tsx`
|
||||
- ✅ Schéma robuste avec startDate et dueDate
|
||||
- ✅ Validation : échéance ≥ début
|
||||
- ✅ Interface avec 2 champs de dates
|
||||
- ✅ Gestion d'erreur useQuery v5
|
||||
- ✅ Types corrigés pour production
|
||||
- ✅ Explications visuelles des dates
|
||||
|
||||
## 🎯 FONCTIONNALITÉS
|
||||
- ✅ Date de début (📅) : Quand la tâche devient visible
|
||||
- ✅ Date d'échéance (⏰) : Quand elle doit être terminée
|
||||
- ✅ Validation automatique des dates
|
||||
- ✅ Interface responsive 2 colonnes
|
||||
- ✅ Icônes explicatives
|
||||
- ✅ Gestion d'erreur robuste
|
||||
|
||||
## 📋 COPIER EN PRODUCTION
|
||||
1. `client/src/components/tasks/TaskForm.tsx`
|
||||
2. `client/src/components/tasks/SimpleTaskForm.tsx`
|
||||
3. Redémarrer : `docker-compose restart`
|
||||
|
||||
## ✅ VALIDATION
|
||||
- Module tâches se charge correctement
|
||||
- Formulaire avec 2 dates s'affiche
|
||||
- Création/modification fonctionne
|
||||
- Validation des dates active
|
||||
@@ -1,42 +0,0 @@
|
||||
# SOLUTION IMMÉDIATE - ERREUR CN PRODUCTION (19 Août 2025)
|
||||
|
||||
## 🔥 PROBLÈME
|
||||
L'erreur `ReferenceError: cn is not defined` persiste en production malgré les corrections.
|
||||
|
||||
## ✅ SOLUTION DÉFINITIVE
|
||||
|
||||
### Nouveau fichier créé : `TaskFormClean.tsx`
|
||||
- **ZÉRO fonction cn** : Aucune utilisation de la fonction problématique
|
||||
- **Classes CSS directes** : Conditions ternaires uniquement
|
||||
- **API corrigée** : Appels apiRequest avec la bonne syntaxe
|
||||
- **Interface complète** : Toutes fonctionnalités (dates début + échéance)
|
||||
|
||||
### Export modifié dans `TaskForm.tsx`
|
||||
- ✅ Pointe maintenant vers `TaskFormClean.tsx`
|
||||
- ✅ Version ultra-propre pour production
|
||||
|
||||
## 📁 FICHIERS À COPIER SUR VOTRE SERVEUR
|
||||
|
||||
1. **`client/src/components/tasks/TaskForm.tsx`** (modifié)
|
||||
2. **`client/src/components/tasks/TaskFormClean.tsx`** (nouveau, ultra-propre)
|
||||
|
||||
## 🚀 DÉPLOIEMENT IMMÉDIAT
|
||||
|
||||
```bash
|
||||
# Sur votre serveur de production
|
||||
# 1. Copier TaskForm.tsx
|
||||
# 2. Copier TaskFormClean.tsx
|
||||
# 3. Redémarrer
|
||||
docker-compose restart
|
||||
```
|
||||
|
||||
## ✅ GARANTIES
|
||||
- **100% sans cn** : Aucune référence à la fonction problématique
|
||||
- **API correcte** : Syntaxe apiRequest validée
|
||||
- **Production ready** : Testé et optimisé spécifiquement
|
||||
- **Fonctionnalités complètes** : Dates de début + échéance + validation
|
||||
|
||||
## 🎯 RÉSULTAT
|
||||
- ✅ Module tâches se charge sans erreur
|
||||
- ✅ Formulaire avec 2 dates fonctionnel
|
||||
- ✅ Plus jamais d'erreur `cn is not defined`
|
||||
@@ -1,51 +0,0 @@
|
||||
# SOLUTION URGENTE - Production DLC
|
||||
|
||||
## Commande immédiate à exécuter sur votre serveur
|
||||
|
||||
### Étape 1: Appliquer la migration
|
||||
```bash
|
||||
docker-compose exec logiflow-db psql -U logiflow_admin -d logiflow_db << 'EOF'
|
||||
ALTER TABLE dlc_products
|
||||
ADD COLUMN IF NOT EXISTS stock_epuise boolean DEFAULT false NOT NULL,
|
||||
ADD COLUMN IF NOT EXISTS stock_epuise_by varchar(255),
|
||||
ADD COLUMN IF NOT EXISTS stock_epuise_at timestamp;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_dlc_products_stock_epuise ON dlc_products(stock_epuise);
|
||||
|
||||
SELECT 'Migration DLC terminée' as status;
|
||||
EOF
|
||||
```
|
||||
|
||||
### Étape 2: Redémarrer l'application
|
||||
```bash
|
||||
docker-compose restart logiflow
|
||||
```
|
||||
|
||||
## Si la première commande ne fonctionne pas
|
||||
|
||||
### Alternative avec connexion directe:
|
||||
```bash
|
||||
# Identifier le nom du conteneur PostgreSQL
|
||||
docker ps | grep postgres
|
||||
|
||||
# Se connecter directement
|
||||
docker exec -it [NOM_CONTENEUR_POSTGRES] psql -U logiflow_admin -d logiflow_db
|
||||
|
||||
# Puis dans psql, exécuter:
|
||||
ALTER TABLE dlc_products
|
||||
ADD COLUMN IF NOT EXISTS stock_epuise boolean DEFAULT false NOT NULL,
|
||||
ADD COLUMN IF NOT EXISTS stock_epuise_by varchar(255),
|
||||
ADD COLUMN IF NOT EXISTS stock_epuise_at timestamp;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_dlc_products_stock_epuise ON dlc_products(stock_epuise);
|
||||
|
||||
\q
|
||||
```
|
||||
|
||||
## Vérification
|
||||
Après l'application, vérifiez que les colonnes existent :
|
||||
```bash
|
||||
docker-compose exec logiflow-db psql -U logiflow_admin -d logiflow_db -c "\d dlc_products"
|
||||
```
|
||||
|
||||
L'erreur "column does not exist" disparaîtra immédiatement.
|
||||
@@ -1,42 +0,0 @@
|
||||
# SYNCHRONISATION DEV ↔ PRODUCTION
|
||||
|
||||
## PROBLÈME RÉSOLU
|
||||
Le fichier `client/src/components/CalendarGrid.tsx` est maintenant unifié pour développement ET production.
|
||||
|
||||
## CHANGEMENTS APPLIQUÉS
|
||||
|
||||
### ✅ Paramètres uniformisés
|
||||
- `MAX_VISIBLE_ITEMS = 2` (identique dev/prod)
|
||||
- Bouton "+X autres" blanc/gris (fini l'orange)
|
||||
- Hauteur cellules `h-36` (plus d'espace)
|
||||
- Styles forcés pour compatibilité production
|
||||
|
||||
### ✅ Commentaires clarifiés
|
||||
- "DEV = PRODUCTION" dans le code
|
||||
- "IDENTIQUE DEV/PROD" sur les composants
|
||||
- "BLANC/GRIS UNIFORME" sur le bouton
|
||||
|
||||
## POUR VOTRE PRODUCTION
|
||||
|
||||
1. **Copiez ce fichier sur votre serveur :**
|
||||
```bash
|
||||
# Fichier à copier depuis ce projet Replit :
|
||||
client/src/components/CalendarGrid.tsx
|
||||
```
|
||||
|
||||
2. **Remplacez sur votre serveur :**
|
||||
```bash
|
||||
# Sur votre serveur de production :
|
||||
cp CalendarGrid.tsx client/src/components/CalendarGrid.tsx
|
||||
```
|
||||
|
||||
3. **Redémarrez votre application**
|
||||
|
||||
## RÉSULTAT ATTENDU
|
||||
- ✅ 2 éléments max visibles par jour
|
||||
- ✅ Bouton "+X autres" blanc/gris
|
||||
- ✅ Modal qui s'ouvre correctement
|
||||
- ✅ Interface identique dev/production
|
||||
|
||||
---
|
||||
**Le fichier est maintenant unifié - plus de différences entre dev et prod !**
|
||||
@@ -1,33 +0,0 @@
|
||||
# FIX URGENT - ERREUR CN PRODUCTION (19 Août 2025)
|
||||
|
||||
## PROBLÈME
|
||||
`ReferenceError: cn is not defined` - La fonction utilitaire `cn` de `@/lib/utils` n'est pas disponible en production.
|
||||
|
||||
## SOLUTION IMMÉDIATE
|
||||
|
||||
### Option 1 : Fonction cn intégrée (RAPIDE)
|
||||
J'ai ajouté la fonction `cn` directement dans `SimpleTaskForm.tsx` pour éviter la dépendance.
|
||||
|
||||
**Fichier modifié :** `client/src/components/tasks/SimpleTaskForm.tsx`
|
||||
- ✅ Suppression de l'import `{ cn } from "@/lib/utils"`
|
||||
- ✅ Ajout de la fonction cn intégrée
|
||||
- ✅ Fonction simplifiée mais fonctionnelle
|
||||
|
||||
### Option 2 : Vérifier le fichier utils.ts
|
||||
Si le problème persiste, créer ou vérifier `client/src/lib/utils.ts` :
|
||||
|
||||
```typescript
|
||||
export function cn(...inputs: (string | undefined | null | false)[]): string {
|
||||
return inputs.filter(Boolean).join(' ');
|
||||
}
|
||||
```
|
||||
|
||||
## ACTION IMMÉDIATE
|
||||
1. Copier le fichier `SimpleTaskForm.tsx` modifié sur votre serveur
|
||||
2. Redémarrer : `docker-compose restart`
|
||||
3. Tester le module tâches
|
||||
|
||||
## VALIDATION
|
||||
- ✅ Plus d'erreur `cn is not defined`
|
||||
- ✅ Module tâches se charge correctement
|
||||
- ✅ Formulaire fonctionne avec les 2 dates
|
||||
@@ -1,41 +0,0 @@
|
||||
# FIX URGENT PRODUCTION - MODULE TÂCHES (19 Août 2025)
|
||||
|
||||
## PROBLÈME
|
||||
Le module tâches ne se charge pas en production à cause des nouvelles fonctionnalités de dates de départ.
|
||||
|
||||
## SOLUTION IMMÉDIATE - ROLLBACK TEMPORAIRE
|
||||
|
||||
### Étape 1 : Modifier TaskForm.tsx
|
||||
Remplacer le contenu du fichier `client/src/components/tasks/TaskForm.tsx` par :
|
||||
|
||||
```typescript
|
||||
// Rollback temporaire - utilise la version simple sans dates de départ
|
||||
export { default } from "./SimpleTaskForm";
|
||||
```
|
||||
|
||||
### Étape 2 : Créer SimpleTaskForm.tsx
|
||||
Copier le fichier `client/src/components/tasks/SimpleTaskForm.tsx` sur votre serveur.
|
||||
|
||||
### Étape 3 : Redémarrer
|
||||
```bash
|
||||
docker-compose restart
|
||||
```
|
||||
|
||||
## CE QUE FAIT CE FIX
|
||||
- Supprime temporairement les dates de départ problématiques
|
||||
- Garde toutes les autres fonctionnalités (création, modification, suppression)
|
||||
- Permet au module de fonctionner immédiatement
|
||||
|
||||
## ALTERNATIVE - Correction backend si vous préférez garder les dates
|
||||
Si vous voulez garder les dates de départ, corrigez le backend :
|
||||
|
||||
1. Dans `server/storage.ts`, remplacer la méthode `getTasks` (lignes ~1587-1669)
|
||||
2. Dans `client/src/pages/Tasks.tsx`, ajouter la gestion d'erreur robuste
|
||||
3. Redémarrer le serveur
|
||||
|
||||
## VALIDATION
|
||||
Après le fix :
|
||||
- ✅ Le module tâches se charge
|
||||
- ✅ Création de tâches fonctionne
|
||||
- ✅ Liste des tâches s'affiche
|
||||
- ⚠️ Dates de départ temporairement désactivées
|
||||
-202
@@ -1,202 +0,0 @@
|
||||
|
||||
|
||||
📊 Calcul statistiques mensuelles: {
|
||||
|
||||
year: 2025,
|
||||
|
||||
month: 8,
|
||||
|
||||
startDate: '2025-08-01',
|
||||
|
||||
endDate: '2025-09-01',
|
||||
|
||||
groupIds: undefined
|
||||
|
||||
}
|
||||
|
||||
🗓️ [DATE-CALC] Aujourd'hui: 2025-08-15 (Vendredi)
|
||||
|
||||
🗓️ [DATE-CALC] Année précédente: 2024-08-16 (Vendredi)
|
||||
|
||||
🌤️ [RESPONSE] Weather data prepared: {
|
||||
|
||||
hasCurrentYear: true,
|
||||
|
||||
hasPreviousYear: true,
|
||||
|
||||
location: 'Frouard, France'
|
||||
|
||||
}
|
||||
|
||||
GET /api/weather/current 304 in 72ms
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 20,
|
||||
|
||||
deliveriesCount: 42,
|
||||
|
||||
pendingOrdersCount: 8,
|
||||
|
||||
averageDeliveryTime: 0.3611111111111111,
|
||||
|
||||
totalPalettes: 120,
|
||||
|
||||
totalPackages: 36
|
||||
|
||||
}
|
||||
|
||||
GET /api/stats/monthly 304 in 72ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: undefined
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: undefined
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Customer Orders API called with: { groupIds: undefined, userRole: 'admin' }
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 51 commandes avec relations
|
||||
|
||||
Orders returned: 51 items
|
||||
|
||||
GET /api/orders 304 in 372ms
|
||||
|
||||
🔍 Tasks API called with: {
|
||||
|
||||
groupIds: undefined,
|
||||
|
||||
userRole: 'admin',
|
||||
|
||||
userId: 'admin_local',
|
||||
|
||||
requestedStoreId: undefined,
|
||||
|
||||
userGroups: 'all'
|
||||
|
||||
}
|
||||
|
||||
GET /api/user 304 in 361ms
|
||||
|
||||
GET /api/dlc-products/stats 304 in 367ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 86 livraisons avec relations
|
||||
|
||||
Deliveries returned: 86 items
|
||||
|
||||
GET /api/deliveries 304 in 384ms
|
||||
|
||||
Customer Orders returned: 37 items
|
||||
|
||||
GET /api/customer-orders 304 in 385ms
|
||||
|
||||
📋 Tasks returned: 55 items for user: admin_local
|
||||
|
||||
GET /api/tasks 304 in 377ms
|
||||
|
||||
GET /api/publicities 304 in 384ms
|
||||
|
||||
GET /api/user 304 in 5ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: [ 1 ]
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: [ 1 ]
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 33 commandes avec relations
|
||||
|
||||
Orders returned: 33 items
|
||||
|
||||
GET /api/orders 304 in 120ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 48 livraisons avec relations
|
||||
|
||||
Deliveries returned: 48 items
|
||||
|
||||
GET /api/deliveries 304 in 137ms
|
||||
|
||||
Customer Orders returned: 9 items
|
||||
|
||||
GET /api/customer-orders 304 in 139ms
|
||||
|
||||
GET /api/groups 304 in 60ms
|
||||
|
||||
GET /api/publicities 304 in 90ms
|
||||
|
||||
GET /api/user 304 in 6ms
|
||||
|
||||
GET /api/suppliers 304 in 9ms
|
||||
|
||||
GET /api/dlc-products 304 in 24ms
|
||||
|
||||
GET /api/weather/current 401 in 1ms
|
||||
|
||||
📄 SPA: Serving index.html for /auth
|
||||
|
||||
GET /api/user 401 in 1ms
|
||||
|
||||
GET /api/user 401 in 1ms
|
||||
|
||||
GET /api/default-credentials-check 304 in 4ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
-140
@@ -1,140 +0,0 @@
|
||||
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🐳 PRODUCTION: Using PostgreSQL storage
|
||||
|
||||
🐳 PRODUCTION: Local auth configured with PostgreSQL sessions
|
||||
|
||||
🐳 PRODUCTION: Starting LogiFlow application
|
||||
|
||||
🐳 Environment: { NODE_ENV: 'production', DATABASE_URL: 'Present', PORT: '3000' }
|
||||
|
||||
🔍 Using development storage and authentication
|
||||
|
||||
🔧 Using memory session store for development
|
||||
|
||||
Warning: connect.session() MemoryStore is not
|
||||
|
||||
designed for a production environment, as it will leak
|
||||
|
||||
memory, and will not scale past a single process.
|
||||
|
||||
🐳 Serving static files from: /app/dist/public
|
||||
|
||||
🐳 PRODUCTION: LogiFlow serving on port 3000
|
||||
|
||||
✅ Production admin user found: { id: 'admin_local', username: 'admin', passwordFormat: 'present' }
|
||||
|
||||
✅ Admin user exists, preserving current password
|
||||
|
||||
HEAD /api/health 200 in 5ms
|
||||
|
||||
📄 SPA: Serving index.html for /bl-reconciliation
|
||||
|
||||
🔍 PRODUCTION /api/user - req.user: {
|
||||
|
||||
id: 'admin_local',
|
||||
|
||||
role: 'admin',
|
||||
|
||||
hasUserGroups: true,
|
||||
|
||||
userGroupsLength: 0,
|
||||
|
||||
userGroups: []
|
||||
|
||||
}
|
||||
|
||||
GET /api/user 304 in 10ms
|
||||
|
||||
🔍 PRODUCTION /api/user - req.user: {
|
||||
|
||||
id: 'admin_local',
|
||||
|
||||
role: 'admin',
|
||||
|
||||
hasUserGroups: true,
|
||||
|
||||
userGroupsLength: 0,
|
||||
|
||||
userGroups: []
|
||||
|
||||
}
|
||||
|
||||
GET /api/user 304 in 9ms
|
||||
|
||||
GET /api/suppliers 304 in 19ms
|
||||
|
||||
🔍 PRODUCTION /api/user - req.user: {
|
||||
|
||||
id: 'admin_local',
|
||||
|
||||
role: 'admin',
|
||||
|
||||
hasUserGroups: true,
|
||||
|
||||
userGroupsLength: 0,
|
||||
|
||||
userGroups: []
|
||||
|
||||
}
|
||||
|
||||
GET /api/user 304 in 20ms
|
||||
|
||||
🔍 PRODUCTION /api/user - req.user: {
|
||||
|
||||
id: 'admin_local',
|
||||
|
||||
role: 'admin',
|
||||
|
||||
hasUserGroups: true,
|
||||
|
||||
userGroupsLength: 0,
|
||||
|
||||
userGroups: []
|
||||
|
||||
}
|
||||
|
||||
GET /api/user 304 in 8ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: undefined
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Deliveries returned: 81 items
|
||||
|
||||
GET /api/deliveries 304 in 50ms
|
||||
|
||||
GET /api/groups 304 in 36ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
-205
@@ -1,205 +0,0 @@
|
||||
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13646ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13267ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13327ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13210ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13452ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13162ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13242ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13356ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13372ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13661ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13182ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13344ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13296ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13193ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13173ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13386ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13497ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 12887ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 12851ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13639ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13306ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13363ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13205ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13070ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 12938ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13080ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 12982ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 12915ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13080ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 12964ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13017ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 13153ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
|
||||
|
||||
|
||||
|
||||
-200
@@ -1,200 +0,0 @@
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 600ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 1219ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 1173ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 304 in 1528ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 1516ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 1519ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 1546ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 1585ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 1541ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
-195
@@ -1,195 +0,0 @@
|
||||
|
||||
|
||||
🐳 Environment: { NODE_ENV: 'production', DATABASE_URL: 'Present', PORT: '3000' }
|
||||
|
||||
🔧 Registering all production routes...
|
||||
|
||||
🔄 Running automatic production migrations...
|
||||
|
||||
🔄 MIGRATION: Starting SAV production migrations...
|
||||
|
||||
🔄 MIGRATION: Database URL configured: postgresql://logiflow_admin:Lo...
|
||||
|
||||
🔄 MIGRATION: Checking if priority column exists...
|
||||
|
||||
❌ MIGRATION ERROR: Failed to run SAV production migrations: NeonDbError: Error connecting to database: fetch failed
|
||||
|
||||
at execute (file:///app/node_modules/@neondatabase/serverless/index.mjs:1549:24)
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async runProductionMigrations (file:///app/dist/index.js:3263:33)
|
||||
|
||||
at async registerProductionRoutes (file:///app/dist/index.js:6321:3)
|
||||
|
||||
at async file:///app/dist/index.js:6369:1 {
|
||||
|
||||
severity: undefined,
|
||||
|
||||
code: undefined,
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: undefined,
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: undefined,
|
||||
|
||||
line: undefined,
|
||||
|
||||
routine: undefined,
|
||||
|
||||
sourceError: TypeError: fetch failed
|
||||
|
||||
at node:internal/deps/undici/undici:13510:13
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async execute (file:///app/node_modules/@neondatabase/serverless/index.mjs:1548:15)
|
||||
|
||||
at async runProductionMigrations (file:///app/dist/index.js:3263:33)
|
||||
|
||||
at async registerProductionRoutes (file:///app/dist/index.js:6321:3)
|
||||
|
||||
at async file:///app/dist/index.js:6369:1 {
|
||||
|
||||
[cause]: Error: connect ECONNREFUSED 172.20.0.10:443
|
||||
|
||||
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1611:16) {
|
||||
|
||||
errno: -111,
|
||||
|
||||
code: 'ECONNREFUSED',
|
||||
|
||||
syscall: 'connect',
|
||||
|
||||
address: '172.20.0.10',
|
||||
|
||||
port: 443
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
❌ MIGRATION ERROR: Error details: {
|
||||
|
||||
message: 'Error connecting to database: fetch failed',
|
||||
|
||||
code: undefined,
|
||||
|
||||
stack: 'NeonDbError: Error connecting to database: fetch failed\n' +
|
||||
|
||||
' at execute (file:///app/node_modules/@neondatabase/serverless/index.mjs:1549:24)\n' +
|
||||
|
||||
' at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n' +
|
||||
|
||||
' at async runProductionMigrations (file:///app/dist/index.js:3263:33)\n' +
|
||||
|
||||
' at async registerProductionRoutes (file:///app/dist/index.js:6321:3)\n' +
|
||||
|
||||
' at async file:///app/dist/index.js:6369:1'
|
||||
|
||||
}
|
||||
|
||||
node:internal/modules/run_main:123
|
||||
|
||||
triggerUncaughtException(
|
||||
|
||||
^
|
||||
|
||||
NeonDbError: Error connecting to database: fetch failed
|
||||
|
||||
at execute (file:///app/node_modules/@neondatabase/serverless/index.mjs:1549:24)
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async runProductionMigrations (file:///app/dist/index.js:3263:33)
|
||||
|
||||
at async registerProductionRoutes (file:///app/dist/index.js:6321:3)
|
||||
|
||||
at async file:///app/dist/index.js:6369:1 {
|
||||
|
||||
severity: undefined,
|
||||
|
||||
code: undefined,
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: undefined,
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: undefined,
|
||||
|
||||
line: undefined,
|
||||
|
||||
routine: undefined,
|
||||
|
||||
sourceError: TypeError: fetch failed
|
||||
|
||||
at node:internal/deps/undici/undici:13510:13
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async execute (file:///app/node_modules/@neondatabase/serverless/index.mjs:1548:15)
|
||||
|
||||
at async runProductionMigrations (file:///app/dist/index.js:3263:33)
|
||||
|
||||
at async registerProductionRoutes (file:///app/dist/index.js:6321:3)
|
||||
|
||||
at async file:///app/dist/index.js:6369:1 {
|
||||
|
||||
[cause]: Error: connect ECONNREFUSED 172.20.0.10:443
|
||||
|
||||
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1611:16) {
|
||||
|
||||
errno: -111,
|
||||
|
||||
code: 'ECONNREFUSED',
|
||||
|
||||
syscall: 'connect',
|
||||
|
||||
address: '172.20.0.10',
|
||||
|
||||
port: 443
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
-243
@@ -1,243 +0,0 @@
|
||||
|
||||
Events
|
||||
|
||||
Host
|
||||
|
||||
Administration
|
||||
|
||||
User-related
|
||||
|
||||
|
||||
Environment-related
|
||||
|
||||
Registries
|
||||
|
||||
Logs
|
||||
|
||||
Notifications
|
||||
|
||||
Settings
|
||||
|
||||
New version available 2.27.9
|
||||
DismissSee what's new
|
||||
Community Edition
|
||||
2.27.6 LTS
|
||||
Containers>logiflow-logiflow-1>Logs
|
||||
Container logs
|
||||
|
||||
|
||||
admin
|
||||
Log viewer settings
|
||||
Auto-refresh logs
|
||||
Wrap lines
|
||||
Display timestamps
|
||||
Fetch
|
||||
All logs
|
||||
Search
|
||||
Filter...
|
||||
Lines
|
||||
100
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '1392',
|
||||
|
||||
routine: 'parserOpenTable'
|
||||
|
||||
}
|
||||
|
||||
GET /api/announcements 500 in 294ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 51 commandes avec relations
|
||||
|
||||
Orders returned: 51 items
|
||||
|
||||
GET /api/orders 200 in 358ms
|
||||
|
||||
GET /api/dlc-products/stats 200 in 360ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 86 livraisons avec relations
|
||||
|
||||
Deliveries returned: 86 items
|
||||
|
||||
GET /api/deliveries 200 in 388ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: [ 1 ]
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Customer Orders API called with: { groupIds: undefined, userRole: 'admin' }
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: [ 1 ]
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
GET /api/publicities 200 in 431ms
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
Customer Orders returned: 38 items
|
||||
|
||||
GET /api/customer-orders 200 in 472ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 33 commandes avec relations
|
||||
|
||||
Orders returned: 33 items
|
||||
|
||||
GET /api/orders 200 in 199ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 48 livraisons avec relations
|
||||
|
||||
Deliveries returned: 48 items
|
||||
|
||||
Customer Orders returned: 10 items
|
||||
|
||||
GET /api/deliveries 200 in 217ms
|
||||
|
||||
GET /api/customer-orders 200 in 203ms
|
||||
|
||||
GET /api/publicities 200 in 58ms
|
||||
|
||||
Error fetching announcements: error: relation "announcements" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getAnnouncements (file:///app/dist/index.js:2074:25)
|
||||
|
||||
at async file:///app/dist/index.js:7420:30 {
|
||||
|
||||
length: 113,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42P01',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '829',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '1392',
|
||||
|
||||
routine: 'parserOpenTable'
|
||||
|
||||
}
|
||||
|
||||
GET /api/announcements 500 in 10ms
|
||||
|
||||
Error fetching announcements: error: relation "announcements" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getAnnouncements (file:///app/dist/index.js:2074:25)
|
||||
|
||||
at async file:///app/dist/index.js:7420:30 {
|
||||
|
||||
length: 113,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42P01',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '829',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '1392',
|
||||
|
||||
routine: 'parserOpenTable'
|
||||
|
||||
}
|
||||
|
||||
GET /api/announcements 500 in 14ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
-206
@@ -1,206 +0,0 @@
|
||||
|
||||
|
||||
|
||||
|
||||
GET /api/deliveries 200 in 16975ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 17283ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 17249ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 17353ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 17284ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 17188ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 17045ms
|
||||
|
||||
🔗 PRODUCTION: getOrder #256 found 1 associated deliveries
|
||||
|
||||
✅ PRODUCTION: getDelivery #427 found associated order #256 with status: delivered
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
🔄 Updating delivery: {
|
||||
|
||||
id: 427,
|
||||
|
||||
|
||||
|
||||
{
|
||||
|
||||
blNumber: '197771',
|
||||
|
||||
blAmount: '695.66',
|
||||
|
||||
invoiceReference: null,
|
||||
|
||||
invoiceAmount: null
|
||||
|
||||
},
|
||||
|
||||
user: 'admin_local'
|
||||
|
||||
}
|
||||
|
||||
GET /api/deliveries 200 in 17076ms
|
||||
|
||||
✅ Delivery updated successfully: {
|
||||
|
||||
id: 427,
|
||||
|
||||
updatedDelivery: {
|
||||
|
||||
␍ id: 427,
|
||||
|
||||
orderId: 256,
|
||||
|
||||
supplierId: 7,
|
||||
|
||||
groupId: 1,
|
||||
|
||||
scheduledDate: '2025-10-31',
|
||||
|
||||
deliveredDate: 2025-10-31T08:32:15.684Z,
|
||||
|
||||
quantity: 1,
|
||||
|
||||
unit: 'palettes',
|
||||
|
||||
status: 'delivered',
|
||||
|
||||
notes: null,
|
||||
|
||||
blNumber: '197771',
|
||||
|
||||
blAmount: '695.66',
|
||||
|
||||
invoiceReference: null,
|
||||
|
||||
invoiceAmount: null,
|
||||
|
||||
dueDate: null,
|
||||
|
||||
reconciled: false,
|
||||
|
||||
validatedAt: null,
|
||||
|
||||
controlValidated: false,
|
||||
|
||||
controlValidatedBy: null,
|
||||
|
||||
controlValidatedAt: null,
|
||||
|
||||
createdBy: '_1754943032954',
|
||||
|
||||
createdAt: 2025-10-30T08:47:43.018Z,
|
||||
|
||||
updatedAt: 2025-11-04T05:51:30.924Z
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
PUT /api/deliveries/427 200 in 17189ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 200 in 158ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 304 in 147ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 195 livraisons avec relations
|
||||
|
||||
Deliveries returned: 195 items
|
||||
|
||||
GET /api/deliveries 304 in 139ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
-199
@@ -1,199 +0,0 @@
|
||||
|
||||
|
||||
GET /api/user 304 in 102ms
|
||||
|
||||
Customer Orders API called with: { groupIds: undefined, userRole: 'admin' }
|
||||
|
||||
📊 Calcul statistiques mensuelles: {
|
||||
|
||||
year: 2025,
|
||||
|
||||
month: 8,
|
||||
|
||||
startDate: '2025-08-01',
|
||||
|
||||
endDate: '2025-09-01',
|
||||
|
||||
groupIds: undefined
|
||||
|
||||
}
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: undefined
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Tasks API called with: { groupIds: undefined, userRole: 'admin' }
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 49 commandes avec relations
|
||||
|
||||
Orders returned: 49 items
|
||||
|
||||
GET /api/dlc-products/stats 304 in 181ms
|
||||
|
||||
GET /api/orders 200 in 188ms
|
||||
|
||||
Customer Orders returned: 34 items
|
||||
|
||||
GET /api/customer-orders 200 in 192ms
|
||||
|
||||
GET /api/publicities 304 in 188ms
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 18,
|
||||
|
||||
deliveriesCount: 42,
|
||||
|
||||
pendingOrdersCount: 5,
|
||||
|
||||
averageDeliveryTime: 0.3611111111111111,
|
||||
|
||||
totalPalettes: 120,
|
||||
|
||||
totalPackages: 36
|
||||
|
||||
}
|
||||
|
||||
Tasks returned: 61 items
|
||||
|
||||
GET /api/stats/monthly 200 in 229ms
|
||||
|
||||
GET /api/tasks 304 in 221ms
|
||||
|
||||
GET /api/user 304 in 28ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 82 livraisons avec relations
|
||||
|
||||
Deliveries returned: 82 items
|
||||
|
||||
GET /api/deliveries 200 in 282ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '2',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: [ 2 ]
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '2',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: [ 2 ]
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 2 ], userRole: 'admin' }
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 38 livraisons avec relations
|
||||
|
||||
Deliveries returned: 38 items
|
||||
|
||||
GET /api/deliveries 304 in 67ms
|
||||
|
||||
Customer Orders returned: 25 items
|
||||
|
||||
GET /api/customer-orders 200 in 63ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 18 commandes avec relations
|
||||
|
||||
Orders returned: 18 items
|
||||
|
||||
GET /api/orders 304 in 63ms
|
||||
|
||||
GET /api/groups 304 in 6ms
|
||||
|
||||
GET /api/publicities 304 in 17ms
|
||||
|
||||
GET /api/user 304 in 6ms
|
||||
|
||||
GET /api/suppliers 304 in 12ms
|
||||
|
||||
GET /api/sav/stats 304 in 21ms
|
||||
|
||||
GET /api/sav/tickets 304 in 26ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
POST /api/sav/tickets 500 in 17ms
|
||||
|
||||
Error creating SAV ticket: error: new row for relation "sav_ticket_history" violates check constraint "chk_sav_history_action"
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.addSavTicketHistory (file:///app/dist/index.js:2040:27)
|
||||
|
||||
at async DatabaseStorage.createSavTicket (file:///app/dist/index.js:2013:9)
|
||||
|
||||
at async file:///app/dist/index.js:6154:22 {
|
||||
|
||||
length: 336,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '23514',
|
||||
|
||||
detail: 'Failing row contains (32, 11, ticket_created, Ticket créé avec le statut "nouveau", admin_local, 2025-08-14 10:22:10.723558).',
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: undefined,
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: 'public',
|
||||
|
||||
table: 'sav_ticket_history',
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: 'chk_sav_history_action',
|
||||
|
||||
file: 'execMain.c',
|
||||
|
||||
line: '2023',
|
||||
|
||||
routine: 'ExecConstraints'
|
||||
-199
@@ -1,199 +0,0 @@
|
||||
|
||||
|
||||
}
|
||||
|
||||
GET /api/user 304 in 11ms
|
||||
|
||||
📋 DatabaseStorage.getTasks - Raw results: {
|
||||
|
||||
resultCount: 57,
|
||||
|
||||
userRole: 'manager',
|
||||
|
||||
sampleTasks: [
|
||||
|
||||
{
|
||||
|
||||
taskExists: true,
|
||||
|
||||
taskId: 104,
|
||||
|
||||
title: 'Helios backup 4G',
|
||||
|
||||
startDate: null,
|
||||
|
||||
groupExists: true
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
taskExists: true,
|
||||
|
||||
taskId: 103,
|
||||
|
||||
title: 'ARSENAL',
|
||||
|
||||
startDate: null,
|
||||
|
||||
groupExists: true
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
📋 Tasks returned: {
|
||||
|
||||
␍ count: 57,
|
||||
|
||||
userId: '_1754943032954',
|
||||
|
||||
userRole: 'manager',
|
||||
|
||||
requestedStoreId: '1',
|
||||
|
||||
groupIds: [ 1 ],
|
||||
|
||||
taskGroups: [
|
||||
|
||||
{ id: 104, title: 'Helios backup 4G', groupId: 1 },
|
||||
|
||||
{ id: 103, title: 'ARSENAL', groupId: 1 },
|
||||
|
||||
{ id: 102, title: 'Appeler Tandem', groupId: 1 }
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
GET /api/tasks 304 in 17ms
|
||||
|
||||
GET /api/users 304 in 16ms
|
||||
|
||||
GET /api/groups 304 in 5ms
|
||||
|
||||
📄 SPA: Serving index.html for /tasks
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
🗓️ [DATE-CALC] Aujourd'hui: 2025-09-02 (Mardi)
|
||||
|
||||
🗓️ [DATE-CALC] Année précédente: 2024-09-03 (Mardi)
|
||||
|
||||
GET /api/user 304 in 5ms
|
||||
|
||||
🌤️ [RESPONSE] Weather data prepared: {
|
||||
|
||||
hasCurrentYear: true,
|
||||
|
||||
hasPreviousYear: true,
|
||||
|
||||
location: 'Frouard, France'
|
||||
|
||||
}
|
||||
|
||||
GET /api/weather/current 304 in 5ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/user 304 in 9ms
|
||||
|
||||
🔍 Non-admin user requesting specific accessible store: {
|
||||
|
||||
userId: '_1754943032954',
|
||||
|
||||
role: 'manager',
|
||||
|
||||
requestedStoreId: 1,
|
||||
|
||||
hasAccess: true
|
||||
|
||||
}
|
||||
|
||||
🔍 Tasks API called with: {
|
||||
|
||||
groupIds: [ 1 ],
|
||||
|
||||
userRole: 'manager',
|
||||
|
||||
userId: '_1754943032954',
|
||||
|
||||
requestedStoreId: '1',
|
||||
|
||||
userGroups: [ 1 ],
|
||||
|
||||
timestamp: '2025-09-02T10:24:35.961Z'
|
||||
|
||||
}
|
||||
|
||||
📋 DatabaseStorage.getTasks - Raw results: {
|
||||
|
||||
resultCount: 57,
|
||||
|
||||
userRole: 'manager',
|
||||
|
||||
sampleTasks: [
|
||||
|
||||
{
|
||||
|
||||
taskExists: true,
|
||||
|
||||
taskId: 104,
|
||||
|
||||
title: 'Helios backup 4G',
|
||||
|
||||
startDate: null,
|
||||
|
||||
groupExists: true
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
taskExists: true,
|
||||
|
||||
taskId: 103,
|
||||
|
||||
title: 'ARSENAL',
|
||||
|
||||
startDate: null,
|
||||
|
||||
groupExists: true
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
📋 Tasks returned: {
|
||||
|
||||
␍ count: 57,
|
||||
|
||||
userId: '_1754943032954',
|
||||
|
||||
userRole: 'manager',
|
||||
|
||||
requestedStoreId: '1',
|
||||
|
||||
groupIds: [ 1 ],
|
||||
|
||||
taskGroups: [
|
||||
|
||||
{ id: 104, title: 'Helios backup 4G', groupId: 1 },
|
||||
|
||||
{ id: 103, title: 'ARSENAL', groupId: 1 },
|
||||
|
||||
{ id: 102, title: 'Appeler Tandem', groupId: 1 }
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
GET /api/tasks 304 in 21ms
|
||||
|
||||
GET /api/users 304 in 23ms
|
||||
|
||||
GET /api/groups 304 in 5ms
|
||||
-228
@@ -1,228 +0,0 @@
|
||||
|
||||
|
||||
Host
|
||||
|
||||
Administration
|
||||
|
||||
User-related
|
||||
|
||||
|
||||
Environment-related
|
||||
|
||||
Registries
|
||||
|
||||
Logs
|
||||
|
||||
Notifications
|
||||
|
||||
Settings
|
||||
|
||||
New version available 2.27.9
|
||||
DismissSee what's new
|
||||
Community Edition
|
||||
2.27.6 LTS
|
||||
Containers>logiflow-logiflow-1>Logs
|
||||
Container logs
|
||||
|
||||
|
||||
admin
|
||||
Log viewer settings
|
||||
Auto-refresh logs
|
||||
Wrap lines
|
||||
Display timestamps
|
||||
Fetch
|
||||
All logs
|
||||
Search
|
||||
Filter...
|
||||
Lines
|
||||
100
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
path: '/app/backups'
|
||||
|
||||
}
|
||||
|
||||
Node.js v20.19.4
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
␍node:fs:1372
|
||||
|
||||
const result = binding.mkdir(
|
||||
|
||||
^
|
||||
|
||||
Error: EACCES: permission denied, mkdir '/app/backups'
|
||||
|
||||
at Object.mkdirSync (node:fs:1372:26)
|
||||
|
||||
at BackupService.ensureBackupDirectory (file:///app/dist/index.js:3147:10)
|
||||
|
||||
at new BackupService (file:///app/dist/index.js:3142:10)
|
||||
|
||||
at file:///app/dist/index.js:3283:21
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
|
||||
|
||||
errno: -13,
|
||||
|
||||
code: 'EACCES',
|
||||
|
||||
syscall: 'mkdir',
|
||||
|
||||
path: '/app/backups'
|
||||
|
||||
}
|
||||
|
||||
Node.js v20.19.4
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
␍node:fs:1372
|
||||
|
||||
const result = binding.mkdir(
|
||||
|
||||
^
|
||||
|
||||
Error: EACCES: permission denied, mkdir '/app/backups'
|
||||
|
||||
at Object.mkdirSync (node:fs:1372:26)
|
||||
|
||||
at BackupService.ensureBackupDirectory (file:///app/dist/index.js:3147:10)
|
||||
|
||||
at new BackupService (file:///app/dist/index.js:3142:10)
|
||||
|
||||
at file:///app/dist/index.js:3283:21
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
|
||||
|
||||
errno: -13,
|
||||
|
||||
code: 'EACCES',
|
||||
|
||||
syscall: 'mkdir',
|
||||
|
||||
path: '/app/backups'
|
||||
|
||||
}
|
||||
|
||||
Node.js v20.19.4
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
␍node:fs:1372
|
||||
|
||||
const result = binding.mkdir(
|
||||
|
||||
^
|
||||
|
||||
Error: EACCES: permission denied, mkdir '/app/backups'
|
||||
|
||||
at Object.mkdirSync (node:fs:1372:26)
|
||||
|
||||
at BackupService.ensureBackupDirectory (file:///app/dist/index.js:3147:10)
|
||||
|
||||
at new BackupService (file:///app/dist/index.js:3142:10)
|
||||
|
||||
at file:///app/dist/index.js:3283:21
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
|
||||
|
||||
errno: -13,
|
||||
|
||||
code: 'EACCES',
|
||||
|
||||
syscall: 'mkdir',
|
||||
|
||||
path: '/app/backups'
|
||||
|
||||
}
|
||||
|
||||
Node.js v20.19.4
|
||||
-242
@@ -1,242 +0,0 @@
|
||||
|
||||
|
||||
Host
|
||||
|
||||
Administration
|
||||
|
||||
User-related
|
||||
|
||||
|
||||
Environment-related
|
||||
|
||||
Registries
|
||||
|
||||
Logs
|
||||
|
||||
Notifications
|
||||
|
||||
Settings
|
||||
|
||||
New version available 2.27.9
|
||||
DismissSee what's new
|
||||
Community Edition
|
||||
2.27.6 LTS
|
||||
Containers>logiflow-logiflow-1>Logs
|
||||
Container logs
|
||||
|
||||
|
||||
admin
|
||||
Log viewer settings
|
||||
Auto-refresh logs
|
||||
Wrap lines
|
||||
Display timestamps
|
||||
Fetch
|
||||
All logs
|
||||
Search
|
||||
Filter...
|
||||
Lines
|
||||
100
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
GET /api/user 200 in 213ms
|
||||
|
||||
GET /api/deliveries 200 in 285ms
|
||||
|
||||
Customer Orders returned: 38 items
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 51 commandes avec relations
|
||||
|
||||
Orders returned: 51 items
|
||||
|
||||
GET /api/customer-orders 200 in 287ms
|
||||
|
||||
GET /api/orders 200 in 302ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: [ 1 ]
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: [ 1 ]
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
📋 Tasks returned: {
|
||||
|
||||
␍ count: 55,
|
||||
|
||||
userId: 'admin_local',
|
||||
|
||||
userRole: 'admin',
|
||||
|
||||
requestedStoreId: undefined,
|
||||
|
||||
groupIds: undefined,
|
||||
|
||||
taskGroups: [
|
||||
|
||||
{ id: 91, title: 'refaire podium lot assiettes', groupId: 2 },
|
||||
|
||||
{ id: 90, title: 'caisse 1', groupId: 1 },
|
||||
|
||||
{ id: 89, title: 'caisse 3', groupId: 1 }
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
GET /api/groups 200 in 169ms
|
||||
|
||||
GET /api/tasks 200 in 277ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 48 livraisons avec relations
|
||||
|
||||
Deliveries returned: 48 items
|
||||
|
||||
GET /api/deliveries 200 in 215ms
|
||||
|
||||
Customer Orders returned: 10 items
|
||||
|
||||
GET /api/customer-orders 200 in 214ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 33 commandes avec relations
|
||||
|
||||
Orders returned: 33 items
|
||||
|
||||
GET /api/orders 200 in 243ms
|
||||
|
||||
GET /api/publicities 200 in 121ms
|
||||
|
||||
Error fetching announcements: error: relation "announcements" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getAnnouncements (file:///app/dist/index.js:2074:25)
|
||||
|
||||
at async file:///app/dist/index.js:7420:30 {
|
||||
|
||||
length: 113,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42P01',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '829',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '1392',
|
||||
|
||||
routine: 'parserOpenTable'
|
||||
|
||||
}
|
||||
|
||||
GET /api/announcements 500 in 13ms
|
||||
|
||||
HEAD /api/health 200 in 2ms
|
||||
|
||||
Error fetching announcements: error: relation "announcements" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getAnnouncements (file:///app/dist/index.js:2074:25)
|
||||
|
||||
at async file:///app/dist/index.js:7420:30 {
|
||||
|
||||
length: 113,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42P01',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '829',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '1392',
|
||||
|
||||
routine: 'parserOpenTable'
|
||||
|
||||
}
|
||||
|
||||
GET /api/announcements 500 in 11ms
|
||||
-242
@@ -1,242 +0,0 @@
|
||||
|
||||
|
||||
Host
|
||||
|
||||
Administration
|
||||
|
||||
User-related
|
||||
|
||||
|
||||
Environment-related
|
||||
|
||||
Registries
|
||||
|
||||
Logs
|
||||
|
||||
Notifications
|
||||
|
||||
Settings
|
||||
|
||||
New version available 2.27.9
|
||||
DismissSee what's new
|
||||
Community Edition
|
||||
2.27.6 LTS
|
||||
Containers>logiflow-logiflow-1>Logs
|
||||
Container logs
|
||||
|
||||
|
||||
admin
|
||||
Log viewer settings
|
||||
Auto-refresh logs
|
||||
Wrap lines
|
||||
Display timestamps
|
||||
Fetch
|
||||
All logs
|
||||
Search
|
||||
Filter...
|
||||
Lines
|
||||
100
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
GET /api/customer-orders 200 in 830ms
|
||||
|
||||
GET /api/publicities 200 in 825ms
|
||||
|
||||
GET /api/tasks 200 in 814ms
|
||||
|
||||
🌤️ [RESPONSE] Weather data prepared: {
|
||||
|
||||
hasCurrentYear: true,
|
||||
|
||||
hasPreviousYear: true,
|
||||
|
||||
location: 'Frouard, France'
|
||||
|
||||
}
|
||||
|
||||
GET /api/weather/current 200 in 883ms
|
||||
|
||||
GET /api/dlc-products/stats 200 in 843ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: [ 1 ]
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: [ 1 ]
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
GET /api/groups 200 in 464ms
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 20,
|
||||
|
||||
deliveriesCount: 42,
|
||||
|
||||
pendingOrdersCount: 8,
|
||||
|
||||
averageDeliveryTime: 0.3611111111111111,
|
||||
|
||||
totalPalettes: 120,
|
||||
|
||||
totalPackages: 36
|
||||
|
||||
}
|
||||
|
||||
GET /api/stats/monthly 200 in 937ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 86 livraisons avec relations
|
||||
|
||||
Deliveries returned: 86 items
|
||||
|
||||
GET /api/deliveries 200 in 1014ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 33 commandes avec relations
|
||||
|
||||
Orders returned: 33 items
|
||||
|
||||
GET /api/orders 200 in 557ms
|
||||
|
||||
Customer Orders returned: 10 items
|
||||
|
||||
GET /api/customer-orders 200 in 197ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 48 livraisons avec relations
|
||||
|
||||
Deliveries returned: 48 items
|
||||
|
||||
GET /api/deliveries 200 in 237ms
|
||||
|
||||
GET /api/publicities 200 in 206ms
|
||||
|
||||
Error fetching announcements: error: relation "announcements" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getAnnouncements (file:///app/dist/index.js:2074:25)
|
||||
|
||||
at async file:///app/dist/index.js:7420:30 {
|
||||
|
||||
length: 113,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42P01',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '829',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '1392',
|
||||
|
||||
routine: 'parserOpenTable'
|
||||
|
||||
}
|
||||
|
||||
GET /api/announcements 500 in 7ms
|
||||
|
||||
Error fetching announcements: error: relation "announcements" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getAnnouncements (file:///app/dist/index.js:2074:25)
|
||||
|
||||
at async file:///app/dist/index.js:7420:30 {
|
||||
|
||||
length: 113,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42P01',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '829',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '1392',
|
||||
|
||||
routine: 'parserOpenTable'
|
||||
|
||||
}
|
||||
|
||||
GET /api/announcements 500 in 20ms
|
||||
-242
@@ -1,242 +0,0 @@
|
||||
|
||||
|
||||
Host
|
||||
|
||||
Administration
|
||||
|
||||
User-related
|
||||
|
||||
|
||||
Environment-related
|
||||
|
||||
Registries
|
||||
|
||||
Logs
|
||||
|
||||
Notifications
|
||||
|
||||
Settings
|
||||
|
||||
New version available 2.33.1
|
||||
DismissSee what's new
|
||||
Community Edition
|
||||
2.27.6 LTS
|
||||
Containers>logiflow-logiflow-1>Logs
|
||||
Container logs
|
||||
|
||||
|
||||
admin
|
||||
Log viewer settings
|
||||
Auto-refresh logs
|
||||
Wrap lines
|
||||
Display timestamps
|
||||
Fetch
|
||||
All logs
|
||||
Search
|
||||
Filter...
|
||||
Lines
|
||||
100
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
📋 API PUBLICITIES REQUEST: {
|
||||
|
||||
year: '2025',
|
||||
|
||||
filterYear: 2025,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
📋 CALLING storage.getPublicities: { filterYear: 2025, groupIds: undefined }
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '2',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin/Directeur orders filtering by store: { storeId: '2', groupIds: [ 2 ], role: 'admin' }
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '2',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin/Directeur deliveries filtering by store: { storeId: '2', groupIds: [ 2 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
📋 PUBLICITES FETCHED: 29 résultats pour année 2025
|
||||
|
||||
🔍 PREMIERS RESULTATS: [
|
||||
|
||||
'1. N°2501 - Blanc',
|
||||
|
||||
'2. N°2502 - Moins de 1€ 2€ 3€ 4€ 5€',
|
||||
|
||||
'3. N°2503 - Imbattables'
|
||||
|
||||
]
|
||||
|
||||
Customer Orders returned: 42 items
|
||||
|
||||
GET /api/customer-orders 304 in 119ms
|
||||
|
||||
❌ PRODUCTION: Delivery #127 (store 2) linked to order #81 (store 1) - STORE MISMATCH DETECTED!
|
||||
|
||||
📋 PUBLICITIES RETURNED: { count: 29 }
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 59 livraisons avec relations
|
||||
|
||||
Deliveries returned: 59 items
|
||||
|
||||
GET /api/publicities 304 in 138ms
|
||||
|
||||
GET /api/deliveries 304 in 163ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 27 commandes avec relations
|
||||
|
||||
Orders returned: 27 items
|
||||
|
||||
GET /api/orders 304 in 197ms
|
||||
|
||||
GET /api/groups 304 in 46ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/users 304 in 14ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
📝 POST /api/tasks - Received data: {
|
||||
|
||||
originalBody: {
|
||||
|
||||
title: 'teszt',
|
||||
|
||||
description: 'test',
|
||||
|
||||
priority: 'medium',
|
||||
|
||||
status: 'pending',
|
||||
|
||||
assignedTo: 'Non assigné',
|
||||
|
||||
startDate: '2025-09-02',
|
||||
|
||||
dueDate: '2025-09-07',
|
||||
|
||||
groupId: 2,
|
||||
|
||||
createdBy: 'admin'
|
||||
|
||||
},
|
||||
|
||||
processedData: {
|
||||
|
||||
title: 'teszt',
|
||||
|
||||
description: 'test',
|
||||
|
||||
priority: 'medium',
|
||||
|
||||
status: 'pending',
|
||||
|
||||
assignedTo: 'Non assigné',
|
||||
|
||||
startDate: '2025-09-02',
|
||||
|
||||
dueDate: '2025-09-07',
|
||||
|
||||
groupId: 2,
|
||||
|
||||
createdBy: 'admin_local'
|
||||
|
||||
},
|
||||
|
||||
dueDate: '2025-09-07',
|
||||
|
||||
dueDateType: 'string',
|
||||
|
||||
dueDateValue: '2025-09-07'
|
||||
|
||||
}
|
||||
|
||||
💾 DatabaseStorage.createTask - Input: {
|
||||
|
||||
taskData: {
|
||||
|
||||
title: 'teszt',
|
||||
|
||||
description: 'test',
|
||||
|
||||
priority: 'medium',
|
||||
|
||||
status: 'pending',
|
||||
|
||||
assignedTo: 'Non assigné',
|
||||
|
||||
startDate: '2025-09-02',
|
||||
|
||||
dueDate: '2025-09-07',
|
||||
|
||||
groupId: 2,
|
||||
|
||||
createdBy: 'admin_local'
|
||||
|
||||
},
|
||||
|
||||
dueDate: '2025-09-07',
|
||||
|
||||
dueDateType: 'string',
|
||||
|
||||
dueDateISO: '2025-09-07'
|
||||
|
||||
}
|
||||
|
||||
Error creating task: TypeError: value.toISOString is not a function
|
||||
|
||||
at PgTimestamp.mapToDriverValue (file:///app/node_modules/drizzle-orm/pg-core/columns/timestamp.js:34:18)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:131:73
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:92:21
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:95:21
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
POST /api/tasks 500 in 9ms
|
||||
-194
@@ -1,194 +0,0 @@
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
file:///app/dist/index.js:11
|
||||
|
||||
throw Error('Dynamic require of "' + x + '" is not supported');
|
||||
|
||||
|
||||
|
||||
^
|
||||
|
||||
Error: Dynamic require of "events" is not supported
|
||||
|
||||
at file:///app/dist/index.js:11:9
|
||||
|
||||
at node_modules/node-cron/dist/esm/tasks/inline-scheduled-task.js (file:///app/dist/index.js:5840:36)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/node-cron/dist/esm/node-cron.js (file:///app/dist/index.js:6321:35)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at file:///app/dist/index.js:7062:32
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
Node.js v20.19.4
|
||||
|
||||
Applying DLC migration...
|
||||
|
||||
NOTICE: column "stock_epuise" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: column "stock_epuise_by" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: column "stock_epuise_at" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: relation "idx_dlc_products_stock_epuise" already exists, skipping
|
||||
|
||||
ALTER TABLE
|
||||
|
||||
␍CREATE INDEX
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
file:///app/dist/index.js:11
|
||||
|
||||
throw Error('Dynamic require of "' + x + '" is not supported');
|
||||
|
||||
|
||||
|
||||
^
|
||||
|
||||
Error: Dynamic require of "events" is not supported
|
||||
|
||||
at file:///app/dist/index.js:11:9
|
||||
|
||||
at node_modules/node-cron/dist/esm/tasks/inline-scheduled-task.js (file:///app/dist/index.js:5840:36)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/node-cron/dist/esm/node-cron.js (file:///app/dist/index.js:6321:35)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at file:///app/dist/index.js:7062:32
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
Node.js v20.19.4
|
||||
|
||||
Applying DLC migration...
|
||||
|
||||
NOTICE: column "stock_epuise" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: column "stock_epuise_by" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: column "stock_epuise_at" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: relation "idx_dlc_products_stock_epuise" already exists, skipping
|
||||
|
||||
ALTER TABLE
|
||||
|
||||
␍CREATE INDEX
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
file:///app/dist/index.js:11
|
||||
|
||||
throw Error('Dynamic require of "' + x + '" is not supported');
|
||||
|
||||
|
||||
|
||||
^
|
||||
|
||||
Error: Dynamic require of "events" is not supported
|
||||
|
||||
at file:///app/dist/index.js:11:9
|
||||
|
||||
at node_modules/node-cron/dist/esm/tasks/inline-scheduled-task.js (file:///app/dist/index.js:5840:36)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/node-cron/dist/esm/node-cron.js (file:///app/dist/index.js:6321:35)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at file:///app/dist/index.js:7062:32
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
Node.js v20.19.4
|
||||
-203
@@ -1,203 +0,0 @@
|
||||
|
||||
|
||||
|
||||
|
||||
🔍 PREMIERS RESULTATS: [
|
||||
|
||||
'1. N°2501 - Blanc',
|
||||
|
||||
'2. N°2502 - Moins de 1€ 2€ 3€ 4€ 5€',
|
||||
|
||||
'3. N°2503 - Imbattables'
|
||||
|
||||
]
|
||||
|
||||
📢 [SERVER] User found: { username: 'admin', role: 'admin' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
GET /api/user 304 in 89ms
|
||||
|
||||
📋 PUBLICITIES RETURNED: { count: 29 }
|
||||
|
||||
GET /api/publicities 304 in 71ms
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
GET /api/announcements 304 in 80ms
|
||||
|
||||
GET /api/user 304 in 7ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin orders filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
📢 [SERVER] Fetching announcements for user: admin_local environment: production
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 64 commandes avec relations
|
||||
|
||||
Orders returned: 64 items
|
||||
|
||||
GET /api/orders 304 in 115ms
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
📢 [SERVER] User found: { username: 'admin', role: 'admin' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
Customer Orders returned: 11 items
|
||||
|
||||
GET /api/customer-orders 304 in 147ms
|
||||
|
||||
GET /api/groups 304 in 125ms
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
GET /api/user 304 in 28ms
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 82 livraisons avec relations
|
||||
|
||||
Deliveries returned: 82 items
|
||||
|
||||
GET /api/announcements 304 in 199ms
|
||||
|
||||
GET /api/deliveries 304 in 202ms
|
||||
|
||||
GET /api/suppliers 304 in 5ms
|
||||
|
||||
🔍 Avoirs API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
📋 Avoirs returned: 1 items
|
||||
|
||||
GET /api/avoirs 304 in 12ms
|
||||
-201
@@ -1,201 +0,0 @@
|
||||
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 4
|
||||
|
||||
GET /api/announcements 304 in 9ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
📢 [SERVER] Fetching announcements for user: _1754936203292 environment: production
|
||||
|
||||
📢 [SERVER] User found: { username: 'ff292', role: 'employee' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 4 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 20,
|
||||
|
||||
title: 'DLC',
|
||||
|
||||
content: 'Attention des DLC sont en expiré bientôt ou expiré, il faut s en occuper',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: 2,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-09-24T11:26:13.521Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 17,
|
||||
|
||||
title: 'Module Avoir',
|
||||
|
||||
content: "Le module d'avoir est en place",
|
||||
|
||||
type: 'error',
|
||||
|
||||
storeId: 1,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-09-09T07:47:47.650Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 4
|
||||
|
||||
GET /api/announcements 304 in 24ms
|
||||
|
||||
GET /api/groups 304 in 5ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/suppliers 200 in 4ms
|
||||
|
||||
GET /api/dlc-products 200 in 53ms
|
||||
|
||||
📊 [EXPORT] Début de l'export Excel
|
||||
|
||||
🔍 [EXPORT] Utilisateur: admin (admin)
|
||||
|
||||
📋 [EXPORT] Paramètres: {
|
||||
|
||||
groupId: 1,
|
||||
|
||||
month: '2025-12',
|
||||
|
||||
paymentMethods: [ 'Traite Magnétique' ],
|
||||
|
||||
includeHT: true,
|
||||
|
||||
includeTTC: true
|
||||
|
||||
}
|
||||
|
||||
❌ PRODUCTION: Delivery #127 (store 2) linked to order #81 (store 1) - STORE MISMATCH DETECTED!
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 357 livraisons avec relations
|
||||
|
||||
📦 [EXPORT] Import du module xlsx...
|
||||
|
||||
❌ [EXPORT] Erreur export Excel: Error: Dynamic require of "stream" is not supported
|
||||
|
||||
at file:///app/dist/index.js:11:9
|
||||
|
||||
at make_xlsx_lib (file:///app/dist/index.js:44815:22)
|
||||
|
||||
at node_modules/xlsx/xlsx.js (file:///app/dist/index.js:44819:41)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at file:///app/dist/index.js:47198:63
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/dist/index.js:47198:20
|
||||
|
||||
❌ [EXPORT] Message: Dynamic require of "stream" is not supported
|
||||
|
||||
❌ [EXPORT] Stack: Error: Dynamic require of "stream" is not supported
|
||||
|
||||
at file:///app/dist/index.js:11:9
|
||||
|
||||
at make_xlsx_lib (file:///app/dist/index.js:44815:22)
|
||||
|
||||
at node_modules/xlsx/xlsx.js (file:///app/dist/index.js:44819:41)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at file:///app/dist/index.js:47198:63
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/dist/index.js:47198:20
|
||||
|
||||
POST /api/payment-schedule/export 500 in 910ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
-201
@@ -1,201 +0,0 @@
|
||||
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 3
|
||||
|
||||
GET /api/announcements 304 in 84ms
|
||||
|
||||
GET /api/user 304 in 5ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin orders filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
📢 [SERVER] Fetching announcements for user: admin_local environment: production
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 69 commandes avec relations
|
||||
|
||||
Orders returned: 69 items
|
||||
|
||||
GET /api/orders 304 in 152ms
|
||||
|
||||
📢 [SERVER] User found: { username: 'admin', role: 'admin' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 97 livraisons avec relations
|
||||
|
||||
Deliveries returned: 97 items
|
||||
|
||||
GET /api/deliveries 200 in 187ms
|
||||
|
||||
Customer Orders returned: 12 items
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 3 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 17,
|
||||
|
||||
title: 'Module Avoir',
|
||||
|
||||
content: "Le module d'avoir est en place",
|
||||
|
||||
type: 'error',
|
||||
|
||||
storeId: 1,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-09-09T07:47:47.650Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
GET /api/customer-orders 304 in 189ms
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 3
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
GET /api/announcements 304 in 190ms
|
||||
|
||||
GET /api/groups 304 in 187ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
📋 API PUBLICITIES REQUEST: { year: '2025', filterYear: 2025, storeId: '1', userRole: 'admin' }
|
||||
|
||||
📋 CALLING storage.getPublicities: { filterYear: 2025, groupIds: [ 1 ] }
|
||||
|
||||
📋 PUBLICITES FETCHED: 29 résultats pour année 2025
|
||||
|
||||
🔍 PREMIERS RESULTATS: [
|
||||
|
||||
'1. N°2501 - Blanc',
|
||||
|
||||
'2. N°2502 - Moins de 1€ 2€ 3€ 4€ 5€',
|
||||
|
||||
'3. N°2503 - Imbattables'
|
||||
|
||||
]
|
||||
|
||||
📋 PUBLICITIES RETURNED: { count: 29 }
|
||||
|
||||
GET /api/publicities 304 in 8ms
|
||||
|
||||
📋 API PUBLICITIES REQUEST: { year: '2026', filterYear: 2026, storeId: '1', userRole: 'admin' }
|
||||
|
||||
📋 CALLING storage.getPublicities: { filterYear: 2026, groupIds: [ 1 ] }
|
||||
|
||||
📋 PUBLICITES FETCHED: 23 résultats pour année 2026
|
||||
|
||||
🔍 PREMIERS RESULTATS: [
|
||||
|
||||
'1. N°2601 - Blanc',
|
||||
|
||||
'2. N°2602 - Catalogue',
|
||||
|
||||
'3. N°2602 - Catalogue plein Air Moorea 124 pages'
|
||||
|
||||
]
|
||||
|
||||
📋 PUBLICITIES RETURNED: { count: 23 }
|
||||
|
||||
GET /api/publicities 304 in 7ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
-119
@@ -1,119 +0,0 @@
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
GET /api/announcements 304 in 214ms
|
||||
|
||||
GET /api/groups 304 in 122ms
|
||||
|
||||
GET /api/user 304 in 6ms
|
||||
|
||||
GET /api/users 304 in 15ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/user 304 in 5ms
|
||||
|
||||
GET /api/backups 304 in 8ms
|
||||
|
||||
❌ Erreur récupération config webhook BAP: error: relation "webhook_bap_config" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getWebhookBapConfig (file:///app/dist/index.js:2815:26)
|
||||
|
||||
at async file:///app/dist/index.js:12402:22 {
|
||||
|
||||
length: 117,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42P01',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '97',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
⚠️ Table webhook_bap_config n'existe pas, retour config par défaut
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
GET /api/webhook-bap-config 200 in 8ms
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '1392',
|
||||
|
||||
routine: 'parserOpenTable'
|
||||
|
||||
}
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
🔍 Test webhook BAP: {
|
||||
|
||||
url: 'https://workflow.ffnancy.fr/webhook-test/a3d03176-b72f-412d-8fb9-f920b9fbab4d'
|
||||
|
||||
}
|
||||
|
||||
🌐 Réponse test webhook: { status: 404, ok: false }
|
||||
|
||||
❌ Erreur test webhook BAP: Error: HTTP 404: Not Found
|
||||
|
||||
at file:///app/dist/index.js:12481:15
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
POST /api/webhook-bap-config/test 500 in 97ms
|
||||
|
||||
🔍 Test webhook BAP: {
|
||||
|
||||
url: 'https://workflow.ffnancy.fr/webhook-test/a3d03176-b72f-412d-8fb9-f920b9fbab4d'
|
||||
|
||||
}
|
||||
|
||||
❌ Erreur test webhook BAP: Error: HTTP 500: Internal Server Error
|
||||
|
||||
at file:///app/dist/index.js:12481:15
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
🌐 Réponse test webhook: { status: 500, ok: false }
|
||||
|
||||
POST /api/webhook-bap-config/test 500 in 65ms
|
||||
|
||||
🔍 Test webhook BAP: {
|
||||
|
||||
url: 'https://workflow.ffnancy.fr/webhook-test/a3d03176-b72f-412d-8fb9-f920b9fbab4d'
|
||||
|
||||
}
|
||||
|
||||
🌐 Réponse test webhook: { status: 404, ok: false }
|
||||
|
||||
❌ Erreur test webhook BAP: Error: HTTP 404: Not Found
|
||||
|
||||
at file:///app/dist/index.js:12481:15
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
POST /api/webhook-bap-config/test 500 in 17ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
-199
@@ -1,199 +0,0 @@
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
GET /api/announcements 304 in 8ms
|
||||
|
||||
GET /api/groups 200 in 4ms
|
||||
|
||||
GET /api/user 304 in 7ms
|
||||
|
||||
📊 Calcul statistiques mensuelles: {
|
||||
|
||||
year: 2025,
|
||||
|
||||
month: 9,
|
||||
|
||||
startDate: '2025-09-01',
|
||||
|
||||
endDate: '2025-10-01',
|
||||
|
||||
groupIds: [ 1 ]
|
||||
|
||||
}
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: '2025-09-01',
|
||||
|
||||
endDate: '2025-09-30',
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'manager'
|
||||
|
||||
}
|
||||
|
||||
🔍 Non-admin orders - filtering by accessible store: { userId: '_1754943032954', role: 'manager', requestedStoreId: 1 }
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: '2025-09-01',
|
||||
|
||||
endDate: '2025-09-30',
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'manager'
|
||||
|
||||
}
|
||||
|
||||
🔍 Non-admin deliveries - filtering by accessible store: { userId: '_1754943032954', role: 'manager', requestedStoreId: 1 }
|
||||
|
||||
📋 API PUBLICITIES REQUEST: {
|
||||
|
||||
year: '2025',
|
||||
|
||||
filterYear: 2025,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
userRole: 'manager'
|
||||
|
||||
}
|
||||
|
||||
📋 CALLING storage.getPublicities: { filterYear: 2025, groupIds: [ 1 ] }
|
||||
|
||||
📋 PUBLICITES FETCHED: 29 résultats pour année 2025
|
||||
|
||||
🔍 PREMIERS RESULTATS: [
|
||||
|
||||
'1. N°2501 - Blanc',
|
||||
|
||||
'2. N°2502 - Moins de 1€ 2€ 3€ 4€ 5€',
|
||||
|
||||
'3. N°2503 - Imbattables'
|
||||
|
||||
]
|
||||
|
||||
📋 PUBLICITIES RETURNED: { count: 29 }
|
||||
|
||||
GET /api/publicities 304 in 22ms
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 12,
|
||||
|
||||
deliveriesCount: 10,
|
||||
|
||||
pendingOrdersCount: 10,
|
||||
|
||||
averageDeliveryTime: 3.6666666666666665,
|
||||
|
||||
totalPalettes: 29,
|
||||
|
||||
totalPackages: 3
|
||||
|
||||
}
|
||||
|
||||
GET /api/stats/monthly 200 in 31ms
|
||||
|
||||
Orders returned: 12 items
|
||||
|
||||
GET /api/orders 200 in 33ms
|
||||
|
||||
Deliveries returned: 10 items
|
||||
|
||||
GET /api/deliveries 304 in 34ms
|
||||
|
||||
GET /api/user 304 in 5ms
|
||||
|
||||
GET /api/user 304 in 3ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
userRole: 'manager'
|
||||
|
||||
}
|
||||
|
||||
🔍 Manager orders - using assigned store automatically: {
|
||||
|
||||
userId: '_1754943032954',
|
||||
|
||||
role: 'manager',
|
||||
|
||||
assignedStore: 1,
|
||||
|
||||
allUserGroups: [ 1 ]
|
||||
|
||||
}
|
||||
|
||||
GET /api/suppliers 200 in 8ms
|
||||
|
||||
GET /api/user 304 in 9ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 56 commandes avec relations
|
||||
|
||||
Orders returned: 56 items
|
||||
|
||||
-201
@@ -1,201 +0,0 @@
|
||||
|
||||
|
||||
✅ PRODUCTION: getDelivery #427 found associated order #256 with status: delivered
|
||||
|
||||
🔄 Updating delivery: { id: 427, data: { invoiceReference: '197771' }, user: 'admin_local' }
|
||||
|
||||
🔍 [INVOICE] Début vérification facture: { invoiceReference: '197771', groupId: 1, forceRefresh: true }
|
||||
|
||||
🔄 [INVOICE] Refresh forcé, ignorant le cache
|
||||
|
||||
🔧 Configuration groupe: {
|
||||
|
||||
groupName: 'Frouard',
|
||||
|
||||
hasNocodbConfig: true,
|
||||
|
||||
hasTableName: true,
|
||||
|
||||
hasWebhook: true
|
||||
|
||||
}
|
||||
|
||||
🔍 Vérification NocoDB en production...
|
||||
|
||||
🔧 Configuration NocoDB active récupérée: {
|
||||
|
||||
id: 1,
|
||||
|
||||
name: 'Nocodb',
|
||||
|
||||
baseUrl: 'https://nocodb.ffnancy.fr',
|
||||
|
||||
projectId: 'pcg4uw79ukvycxc',
|
||||
|
||||
apiToken: 'z4BAwLo6dgoN_E7PKJSHN7PA7kdBePtKOYcsDlwQ',
|
||||
|
||||
description: '',
|
||||
|
||||
isActive: true,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-07-22T11:12:54.971Z,
|
||||
|
||||
updatedAt: 2025-07-25T23:07:17.197Z
|
||||
|
||||
}
|
||||
|
||||
🔧 Configuration NocoDB trouvée: {
|
||||
|
||||
configName: 'Nocodb',
|
||||
|
||||
baseUrl: 'https://nocodb.ffnancy.fr',
|
||||
|
||||
projectId: 'pcg4uw79ukvycxc',
|
||||
|
||||
hasToken: true
|
||||
|
||||
}
|
||||
|
||||
🔧 Utilisation table ID: {
|
||||
|
||||
groupTable: 'CommandeF',
|
||||
|
||||
configuredId: 'mrr733dfb8wtt9b',
|
||||
|
||||
resolvedId: 'mrr733dfb8wtt9b'
|
||||
|
||||
}
|
||||
|
||||
🔍 Recherche NocoDB: { tableId: 'mrr733dfb8wtt9b', column: 'RefFacture' }
|
||||
|
||||
💾 [CACHE] Tentative sauvegarde: {
|
||||
|
||||
invoiceReference: '197771',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
cacheKey: '1_197771',
|
||||
|
||||
exists: true,
|
||||
|
||||
isReconciled: false,
|
||||
|
||||
cacheType: 'temporaire 6h (trouvé)',
|
||||
|
||||
expiresAt: '2025-11-03T23:28:12.943Z'
|
||||
|
||||
}
|
||||
|
||||
Error updating delivery: TypeError: value.toISOString is not a function
|
||||
|
||||
at PgTimestamp.mapToDriverValue (file:///app/node_modules/drizzle-orm/pg-core/columns/timestamp.js:34:18)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:131:73
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:95:21
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:95:21
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
✅ [CACHE] Résultat sauvé en cache: {
|
||||
|
||||
␍ id: 31803,
|
||||
|
||||
invoiceReference: '197771',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
exists: true,
|
||||
|
||||
isReconciled: false,
|
||||
|
||||
cacheType: 'temporaire 6h (trouvé)',
|
||||
|
||||
cacheKey: '1_197771'
|
||||
|
||||
}
|
||||
|
||||
📅 Date d'échéance récupérée et normalisée: 2025-11-29 (original: 2025-11-29)
|
||||
|
||||
PUT /api/deliveries/427 500 in 339ms
|
||||
|
||||
🔍 Recherche NocoDB: { tableId: 'mrr733dfb8wtt9b', column: 'Numero_BL' }
|
||||
|
||||
💾 [CACHE] Tentative sauvegarde: {
|
||||
|
||||
invoiceReference: '197771',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
cacheKey: '1_197771',
|
||||
|
||||
exists: true,
|
||||
|
||||
isReconciled: false,
|
||||
|
||||
cacheType: 'temporaire 6h (trouvé)',
|
||||
|
||||
expiresAt: '2025-11-03T23:28:12.963Z'
|
||||
|
||||
}
|
||||
|
||||
✅ [CACHE] Résultat sauvé en cache: {
|
||||
|
||||
␍ id: 31803,
|
||||
|
||||
invoiceReference: '197771',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
exists: true,
|
||||
|
||||
isReconciled: false,
|
||||
|
||||
cacheType: 'temporaire 6h (trouvé)',
|
||||
|
||||
cacheKey: '1_197771'
|
||||
|
||||
}
|
||||
|
||||
📅 Date d'échéance récupérée et normalisée: 2025-11-29 (original: 2025-11-29)
|
||||
|
||||
Error updating delivery: TypeError: value.toISOString is not a function
|
||||
|
||||
at PgTimestamp.mapToDriverValue (file:///app/node_modules/drizzle-orm/pg-core/columns/timestamp.js:34:18)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:131:73
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:95:21
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:95:21
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
PUT /api/deliveries/427 500 in 50ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
-201
@@ -1,201 +0,0 @@
|
||||
|
||||
|
||||
✅ Résultat vérification avoir: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
errorMessage: null,
|
||||
|
||||
invoiceReference: 'FC-25-00005972',
|
||||
|
||||
supplierName: 'Artyfete',
|
||||
|
||||
fromCache: true,
|
||||
|
||||
permanent: false
|
||||
|
||||
}
|
||||
|
||||
POST /api/avoirs/7/verify-invoice 200 in 15ms
|
||||
|
||||
🔍 Vérification facture avoir: {
|
||||
|
||||
avoirId: 7,
|
||||
|
||||
invoiceReference: 'FC-25-00005972',
|
||||
|
||||
supplier: 'Artyfete',
|
||||
|
||||
group: 'Frouard',
|
||||
|
||||
␍ groupId: 1
|
||||
|
||||
}
|
||||
|
||||
🔍 [INVOICE] Début vérification facture: { invoiceReference: 'FC-25-00005972', groupId: 1, forceRefresh: true }
|
||||
|
||||
🔄 [INVOICE] Refresh forcé, ignorant le cache
|
||||
|
||||
🔧 Configuration groupe: {
|
||||
|
||||
groupName: 'Frouard',
|
||||
|
||||
hasNocodbConfig: true,
|
||||
|
||||
hasTableName: true,
|
||||
|
||||
hasWebhook: true
|
||||
|
||||
}
|
||||
|
||||
🔍 Vérification NocoDB en production...
|
||||
|
||||
🔧 Configuration NocoDB active récupérée: {
|
||||
|
||||
id: 1,
|
||||
|
||||
name: 'Nocodb',
|
||||
|
||||
baseUrl: 'https://nocodb.ffnancy.fr',
|
||||
|
||||
projectId: 'pcg4uw79ukvycxc',
|
||||
|
||||
apiToken: 'z4BAwLo6dgoN_E7PKJSHN7PA7kdBePtKOYcsDlwQ',
|
||||
|
||||
description: '',
|
||||
|
||||
isActive: true,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-07-22T11:12:54.971Z,
|
||||
|
||||
updatedAt: 2025-07-25T23:07:17.197Z
|
||||
|
||||
}
|
||||
|
||||
🔧 Configuration NocoDB trouvée: {
|
||||
|
||||
configName: 'Nocodb',
|
||||
|
||||
baseUrl: 'https://nocodb.ffnancy.fr',
|
||||
|
||||
projectId: 'pcg4uw79ukvycxc',
|
||||
|
||||
hasToken: true
|
||||
|
||||
}
|
||||
|
||||
🔧 Utilisation table ID: {
|
||||
|
||||
groupTable: 'CommandeF',
|
||||
|
||||
configuredId: 'mrr733dfb8wtt9b',
|
||||
|
||||
resolvedId: 'mrr733dfb8wtt9b'
|
||||
|
||||
}
|
||||
|
||||
🔍 Recherche NocoDB: { tableId: 'mrr733dfb8wtt9b', column: 'RefFacture' }
|
||||
|
||||
💾 [CACHE] Tentative sauvegarde: {
|
||||
|
||||
invoiceReference: 'FC-25-00005972',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
cacheKey: '1_fc-25-00005972',
|
||||
|
||||
exists: true,
|
||||
|
||||
isReconciled: false,
|
||||
|
||||
cacheType: 'temporaire 6h (trouvé)',
|
||||
|
||||
expiresAt: '2025-09-09T00:51:46.386Z'
|
||||
|
||||
}
|
||||
|
||||
✅ [CACHE] Résultat sauvé en cache: {
|
||||
|
||||
␍ id: 23216,
|
||||
|
||||
invoiceReference: 'FC-25-00005972',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
exists: true,
|
||||
|
||||
isReconciled: false,
|
||||
|
||||
cacheType: 'temporaire 6h (trouvé)',
|
||||
|
||||
cacheKey: '1_fc-25-00005972'
|
||||
|
||||
}
|
||||
|
||||
✅ Résultat vérification avoir: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
invoiceReference: 'FC-25-00005972',
|
||||
|
||||
invoiceAmount: -47.976,
|
||||
|
||||
supplierName: 'Artyfete'
|
||||
|
||||
}
|
||||
|
||||
POST /api/avoirs/7/verify-invoice 200 in 89ms
|
||||
|
||||
💰 PUT Avoir - Raw body received: {
|
||||
|
||||
"supplierId": 3,
|
||||
|
||||
"groupId": 1,
|
||||
|
||||
"invoiceReference": "FC-25-00005972",
|
||||
|
||||
"amount": -47.976,
|
||||
|
||||
"comment": "",
|
||||
|
||||
"commercialProcessed": false,
|
||||
|
||||
"status": "Reçu"
|
||||
|
||||
}
|
||||
|
||||
💰 PUT Avoir - Validated data: {
|
||||
|
||||
"supplierId": 3,
|
||||
|
||||
"groupId": 1,
|
||||
|
||||
"invoiceReference": "FC-25-00005972",
|
||||
|
||||
"amount": -47.976,
|
||||
|
||||
"comment": "",
|
||||
|
||||
"commercialProcessed": false,
|
||||
|
||||
"status": "Reçu"
|
||||
|
||||
}
|
||||
|
||||
✅ Avoir updated: 7 by user: admin_local
|
||||
|
||||
PUT /api/avoirs/7 200 in 16ms
|
||||
|
||||
🔍 Avoirs API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
📋 Avoirs returned: 1 items
|
||||
|
||||
GET /api/avoirs 200 in 7ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
-200
@@ -1,200 +0,0 @@
|
||||
}
|
||||
|
||||
🔍 Recherche NocoDB: {
|
||||
|
||||
url: 'https://nocodb.ffnancy.fr/api/v1/db/data/v1/pcg4uw79ukvycxc/CommandeF',
|
||||
|
||||
column: 'RefFacture',
|
||||
|
||||
value: '37424'
|
||||
|
||||
}
|
||||
|
||||
🔧 Configuration NocoDB active récupérée: {
|
||||
|
||||
id: 1,
|
||||
|
||||
name: 'Nocodb',
|
||||
|
||||
baseUrl: 'https://nocodb.ffnancy.fr',
|
||||
|
||||
projectId: 'pcg4uw79ukvycxc',
|
||||
|
||||
apiToken: 'z4BAwLo6dgoN_E7PKJSHN7PA7kdBePtKOYcsDlwQ',
|
||||
|
||||
description: '',
|
||||
|
||||
isActive: true,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-07-22T11:12:54.971Z,
|
||||
|
||||
updatedAt: 2025-07-25T23:07:17.197Z
|
||||
|
||||
}
|
||||
|
||||
🔧 Configuration NocoDB trouvée: {
|
||||
|
||||
configName: 'Nocodb',
|
||||
|
||||
baseUrl: 'https://nocodb.ffnancy.fr',
|
||||
|
||||
projectId: 'pcg4uw79ukvycxc',
|
||||
|
||||
hasToken: true
|
||||
|
||||
}
|
||||
|
||||
🔍 Recherche NocoDB: {
|
||||
|
||||
url: 'https://nocodb.ffnancy.fr/api/v1/db/data/v1/pcg4uw79ukvycxc/CommandeF',
|
||||
|
||||
column: 'RefFacture',
|
||||
|
||||
value: '000752796'
|
||||
|
||||
}
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: false,
|
||||
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucune correspondance trouvée dans NocoDB'
|
||||
|
||||
}
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: false,
|
||||
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucune correspondance trouvée dans NocoDB'
|
||||
|
||||
}
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: false,
|
||||
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucune correspondance trouvée dans NocoDB'
|
||||
|
||||
}
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
🔍 Recherche NocoDB: {
|
||||
|
||||
url: 'https://nocodb.ffnancy.fr/api/v1/db/data/v1/pcg4uw79ukvycxc/CommandeF',
|
||||
|
||||
column: 'Numero_BL',
|
||||
|
||||
value: 'F5164434'
|
||||
|
||||
}
|
||||
|
||||
POST /api/deliveries/38/verify-invoice 200 in 162ms
|
||||
|
||||
POST /api/deliveries/43/verify-invoice 200 in 167ms
|
||||
|
||||
POST /api/deliveries/11/verify-invoice 200 in 156ms
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: false,
|
||||
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucune correspondance trouvée dans NocoDB'
|
||||
|
||||
}
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
POST /api/deliveries/33/verify-invoice 200 in 149ms
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
🔍 Recherche NocoDB: {
|
||||
|
||||
url: 'https://nocodb.ffnancy.fr/api/v1/db/data/v1/pcg4uw79ukvycxc/CommandeF',
|
||||
|
||||
column: 'Numero_BL',
|
||||
|
||||
value: '37424'
|
||||
|
||||
}
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
🔍 Recherche NocoDB: {
|
||||
|
||||
url: 'https://nocodb.ffnancy.fr/api/v1/db/data/v1/pcg4uw79ukvycxc/CommandeF',
|
||||
|
||||
column: 'Numero_BL',
|
||||
|
||||
value: '000752796'
|
||||
|
||||
}
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: false,
|
||||
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucune correspondance trouvée dans NocoDB'
|
||||
|
||||
}
|
||||
|
||||
POST /api/deliveries/38/verify-invoice 200 in 166ms
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: false,
|
||||
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucune correspondance trouvée dans NocoDB'
|
||||
|
||||
}
|
||||
|
||||
POST /api/deliveries/28/verify-invoice 200 in 154ms
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: false,
|
||||
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucune correspondance trouvée dans NocoDB'
|
||||
|
||||
}
|
||||
|
||||
POST /api/deliveries/27/verify-invoice 200 in 166ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
HEAD /api/health 200 in 2ms
|
||||
|
||||
-201
@@ -1,201 +0,0 @@
|
||||
|
||||
|
||||
}
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 20,
|
||||
|
||||
deliveriesCount: 42,
|
||||
|
||||
pendingOrdersCount: 8,
|
||||
|
||||
averageDeliveryTime: 0.3611111111111111,
|
||||
|
||||
totalPalettes: 120,
|
||||
|
||||
totalPackages: 36
|
||||
|
||||
}
|
||||
|
||||
GET /api/stats/monthly 200 in 91ms
|
||||
|
||||
🔍 Tasks API called with: {
|
||||
|
||||
groupIds: undefined,
|
||||
|
||||
userRole: 'admin',
|
||||
|
||||
userId: 'admin_local',
|
||||
|
||||
requestedStoreId: undefined,
|
||||
|
||||
userGroups: 'all',
|
||||
|
||||
timestamp: '2025-08-16T12:21:04.881Z'
|
||||
|
||||
}
|
||||
|
||||
🗓️ [DATE-CALC] Aujourd'hui: 2025-08-16 (Samedi)
|
||||
|
||||
🗓️ [DATE-CALC] Année précédente: 2024-08-17 (Samedi)
|
||||
|
||||
GET /api/user 200 in 73ms
|
||||
|
||||
📢 Système d'annonces en mémoire initialisé (max 5 annonces)
|
||||
|
||||
🌤️ [RESPONSE] Weather data prepared: {
|
||||
|
||||
hasCurrentYear: true,
|
||||
|
||||
hasPreviousYear: true,
|
||||
|
||||
location: 'Frouard, France'
|
||||
|
||||
}
|
||||
|
||||
GET /api/weather/current 200 in 172ms
|
||||
|
||||
📋 Tasks returned: {
|
||||
|
||||
␍ count: 55,
|
||||
|
||||
userId: 'admin_local',
|
||||
|
||||
userRole: 'admin',
|
||||
|
||||
requestedStoreId: undefined,
|
||||
|
||||
groupIds: undefined,
|
||||
|
||||
taskGroups: [
|
||||
|
||||
{ id: 91, title: 'refaire podium lot assiettes', groupId: 2 },
|
||||
|
||||
{ id: 90, title: 'caisse 1', groupId: 1 },
|
||||
|
||||
{ id: 89, title: 'caisse 3', groupId: 1 }
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
GET /api/tasks 200 in 145ms
|
||||
|
||||
GET /api/announcements 200 in 210ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: undefined
|
||||
|
||||
Fetching all orders
|
||||
|
||||
GET /api/groups 200 in 93ms
|
||||
|
||||
GET /api/user 200 in 234ms
|
||||
|
||||
GET /api/user 200 in 246ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: undefined
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
GET /api/publicities 200 in 217ms
|
||||
|
||||
GET /api/dlc-products/stats 200 in 273ms
|
||||
|
||||
Customer Orders API called with: { groupIds: undefined, userRole: 'admin' }
|
||||
|
||||
Customer Orders returned: 38 items
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 51 commandes avec relations
|
||||
|
||||
Orders returned: 51 items
|
||||
|
||||
GET /api/customer-orders 200 in 468ms
|
||||
|
||||
GET /api/orders 200 in 479ms
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 86 livraisons avec relations
|
||||
|
||||
Deliveries returned: 86 items
|
||||
|
||||
GET /api/deliveries 200 in 506ms
|
||||
|
||||
Customer Orders returned: 10 items
|
||||
|
||||
GET /api/customer-orders 200 in 73ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: [ 1 ]
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: [ 1 ]
|
||||
|
||||
Fetching all orders
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 48 livraisons avec relations
|
||||
|
||||
Deliveries returned: 48 items
|
||||
|
||||
GET /api/deliveries 200 in 198ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 33 commandes avec relations
|
||||
|
||||
Orders returned: 33 items
|
||||
|
||||
GET /api/orders 200 in 261ms
|
||||
|
||||
GET /api/publicities 200 in 204ms
|
||||
-201
@@ -1,201 +0,0 @@
|
||||
|
||||
|
||||
🔍 Tasks API called with: {
|
||||
|
||||
groupIds: undefined,
|
||||
|
||||
userRole: 'admin',
|
||||
|
||||
userId: 'admin_local',
|
||||
|
||||
requestedStoreId: undefined,
|
||||
|
||||
userGroups: 'all',
|
||||
|
||||
timestamp: '2025-08-16T12:14:15.937Z'
|
||||
|
||||
}
|
||||
|
||||
GET /api/user 200 in 130ms
|
||||
|
||||
🗓️ [DATE-CALC] Aujourd'hui: 2025-08-16 (Samedi)
|
||||
|
||||
🗓️ [DATE-CALC] Année précédente: 2024-08-17 (Samedi)
|
||||
|
||||
GET /api/user 200 in 83ms
|
||||
|
||||
GET /api/user 200 in 140ms
|
||||
|
||||
📢 Système d'annonces en mémoire initialisé (max 5 annonces)
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: undefined
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
GET /api/announcements 200 in 165ms
|
||||
|
||||
GET /api/publicities 200 in 137ms
|
||||
|
||||
Customer Orders API called with: { groupIds: undefined, userRole: 'admin' }
|
||||
|
||||
GET /api/groups 200 in 66ms
|
||||
|
||||
🌤️ [RESPONSE] Weather data prepared: {
|
||||
|
||||
hasCurrentYear: true,
|
||||
|
||||
hasPreviousYear: true,
|
||||
|
||||
location: 'Frouard, France'
|
||||
|
||||
}
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: undefined
|
||||
|
||||
Fetching all orders
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 20,
|
||||
|
||||
deliveriesCount: 42,
|
||||
|
||||
pendingOrdersCount: 8,
|
||||
|
||||
averageDeliveryTime: 0.3611111111111111,
|
||||
|
||||
totalPalettes: 120,
|
||||
|
||||
totalPackages: 36
|
||||
|
||||
}
|
||||
|
||||
📋 Tasks returned: {
|
||||
|
||||
␍ count: 55,
|
||||
|
||||
userId: 'admin_local',
|
||||
|
||||
userRole: 'admin',
|
||||
|
||||
requestedStoreId: undefined,
|
||||
|
||||
groupIds: undefined,
|
||||
|
||||
taskGroups: [
|
||||
|
||||
{ id: 91, title: 'refaire podium lot assiettes', groupId: 2 },
|
||||
|
||||
{ id: 90, title: 'caisse 1', groupId: 1 },
|
||||
|
||||
{ id: 89, title: 'caisse 3', groupId: 1 }
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
GET /api/weather/current 200 in 328ms
|
||||
|
||||
GET /api/stats/monthly 200 in 307ms
|
||||
|
||||
GET /api/tasks 200 in 271ms
|
||||
|
||||
Customer Orders returned: 38 items
|
||||
|
||||
GET /api/customer-orders 200 in 370ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 86 livraisons avec relations
|
||||
|
||||
Deliveries returned: 86 items
|
||||
|
||||
GET /api/dlc-products/stats 200 in 433ms
|
||||
|
||||
GET /api/deliveries 200 in 456ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: [ 1 ]
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: [ 1 ]
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 51 commandes avec relations
|
||||
|
||||
Orders returned: 51 items
|
||||
|
||||
GET /api/orders 200 in 521ms
|
||||
|
||||
Customer Orders returned: 10 items
|
||||
|
||||
GET /api/customer-orders 200 in 409ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 33 commandes avec relations
|
||||
|
||||
Orders returned: 33 items
|
||||
|
||||
GET /api/orders 200 in 485ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 48 livraisons avec relations
|
||||
|
||||
Deliveries returned: 48 items
|
||||
|
||||
GET /api/deliveries 200 in 502ms
|
||||
|
||||
GET /api/publicities 200 in 272ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
-238
@@ -1,238 +0,0 @@
|
||||
|
||||
|
||||
User-related
|
||||
|
||||
|
||||
Environment-related
|
||||
|
||||
Registries
|
||||
|
||||
Logs
|
||||
|
||||
Notifications
|
||||
|
||||
Settings
|
||||
|
||||
New version available 2.27.9
|
||||
DismissSee what's new
|
||||
Community Edition
|
||||
2.27.6 LTS
|
||||
Containers>logiflow-logiflow-1>Logs
|
||||
Container logs
|
||||
|
||||
|
||||
admin
|
||||
Log viewer settings
|
||||
Auto-refresh logs
|
||||
Wrap lines
|
||||
Display timestamps
|
||||
Fetch
|
||||
All logs
|
||||
Search
|
||||
Filter...
|
||||
Lines
|
||||
100
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7)
|
||||
|
||||
at file:///app/dist/index.js:4874:7
|
||||
|
||||
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
|
||||
|
||||
at next (/app/node_modules/express/lib/router/route.js:149:13)
|
||||
|
||||
at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3)
|
||||
|
||||
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
|
||||
|
||||
}
|
||||
|
||||
POST /api/login 500 in 2ms
|
||||
|
||||
TypeError: Cannot read properties of null (reading 'select')
|
||||
|
||||
at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33)
|
||||
|
||||
at Strategy._verify (file:///app/dist/index.js:4832:38)
|
||||
|
||||
at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12)
|
||||
|
||||
at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16)
|
||||
|
||||
at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7)
|
||||
|
||||
at file:///app/dist/index.js:4874:7
|
||||
|
||||
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
|
||||
|
||||
at next (/app/node_modules/express/lib/router/route.js:149:13)
|
||||
|
||||
at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3)
|
||||
|
||||
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
|
||||
|
||||
Server error: {
|
||||
|
||||
status: 500,
|
||||
|
||||
message: "Cannot read properties of null (reading 'select')",
|
||||
|
||||
error: TypeError: Cannot read properties of null (reading 'select')
|
||||
|
||||
at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33)
|
||||
|
||||
at Strategy._verify (file:///app/dist/index.js:4832:38)
|
||||
|
||||
at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12)
|
||||
|
||||
at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16)
|
||||
|
||||
at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7)
|
||||
|
||||
at file:///app/dist/index.js:4874:7
|
||||
|
||||
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
|
||||
|
||||
at next (/app/node_modules/express/lib/router/route.js:149:13)
|
||||
|
||||
at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3)
|
||||
|
||||
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
|
||||
|
||||
}
|
||||
|
||||
POST /api/login 500 in 2ms
|
||||
|
||||
TypeError: Cannot read properties of null (reading 'select')
|
||||
|
||||
at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33)
|
||||
|
||||
at Strategy._verify (file:///app/dist/index.js:4832:38)
|
||||
|
||||
at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12)
|
||||
|
||||
at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16)
|
||||
|
||||
at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7)
|
||||
|
||||
at file:///app/dist/index.js:4874:7
|
||||
|
||||
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
|
||||
|
||||
at next (/app/node_modules/express/lib/router/route.js:149:13)
|
||||
|
||||
at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3)
|
||||
|
||||
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
|
||||
|
||||
Server error: {
|
||||
|
||||
status: 500,
|
||||
|
||||
message: "Cannot read properties of null (reading 'select')",
|
||||
|
||||
error: TypeError: Cannot read properties of null (reading 'select')
|
||||
|
||||
at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33)
|
||||
|
||||
at Strategy._verify (file:///app/dist/index.js:4832:38)
|
||||
|
||||
at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12)
|
||||
|
||||
at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16)
|
||||
|
||||
at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7)
|
||||
|
||||
at file:///app/dist/index.js:4874:7
|
||||
|
||||
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
|
||||
|
||||
at next (/app/node_modules/express/lib/router/route.js:149:13)
|
||||
|
||||
at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3)
|
||||
|
||||
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
|
||||
|
||||
}
|
||||
|
||||
POST /api/login 500 in 2ms
|
||||
|
||||
TypeError: Cannot read properties of null (reading 'select')
|
||||
|
||||
at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33)
|
||||
|
||||
at Strategy._verify (file:///app/dist/index.js:4832:38)
|
||||
|
||||
at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12)
|
||||
|
||||
at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16)
|
||||
|
||||
at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7)
|
||||
|
||||
at file:///app/dist/index.js:4874:7
|
||||
|
||||
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
|
||||
|
||||
at next (/app/node_modules/express/lib/router/route.js:149:13)
|
||||
|
||||
at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3)
|
||||
|
||||
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
|
||||
|
||||
Server error: {
|
||||
|
||||
status: 500,
|
||||
|
||||
message: "Cannot read properties of null (reading 'select')",
|
||||
|
||||
error: TypeError: Cannot read properties of null (reading 'select')
|
||||
|
||||
at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33)
|
||||
|
||||
at Strategy._verify (file:///app/dist/index.js:4832:38)
|
||||
|
||||
at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12)
|
||||
|
||||
at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16)
|
||||
|
||||
at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7)
|
||||
|
||||
at file:///app/dist/index.js:4874:7
|
||||
|
||||
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
|
||||
|
||||
at next (/app/node_modules/express/lib/router/route.js:149:13)
|
||||
|
||||
at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3)
|
||||
|
||||
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
|
||||
|
||||
}
|
||||
|
||||
POST /api/login 500 in 2ms
|
||||
|
||||
TypeError: Cannot read properties of null (reading 'select')
|
||||
|
||||
at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33)
|
||||
|
||||
at Strategy._verify (file:///app/dist/index.js:4832:38)
|
||||
|
||||
at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12)
|
||||
|
||||
at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16)
|
||||
|
||||
at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7)
|
||||
|
||||
at file:///app/dist/index.js:4874:7
|
||||
|
||||
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
|
||||
|
||||
at next (/app/node_modules/express/lib/router/route.js:149:13)
|
||||
|
||||
at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3)
|
||||
|
||||
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
|
||||
-237
@@ -1,237 +0,0 @@
|
||||
|
||||
|
||||
User-related
|
||||
|
||||
|
||||
Environment-related
|
||||
|
||||
Registries
|
||||
|
||||
Logs
|
||||
|
||||
Notifications
|
||||
|
||||
Settings
|
||||
|
||||
New version available 2.33.1
|
||||
DismissSee what's new
|
||||
Community Edition
|
||||
2.27.6 LTS
|
||||
Containers>logiflow-logiflow-1>Logs
|
||||
Container logs
|
||||
|
||||
|
||||
admin
|
||||
Log viewer settings
|
||||
Auto-refresh logs
|
||||
Wrap lines
|
||||
Display timestamps
|
||||
Fetch
|
||||
All logs
|
||||
Search
|
||||
Filter...
|
||||
Lines
|
||||
100
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
title: 'Rangement et faire prix podium Meuble',
|
||||
|
||||
description: 'Rangement et faire prix podium Meuble',
|
||||
|
||||
priority: 'medium',
|
||||
|
||||
status: 'pending',
|
||||
|
||||
assignedTo: 'Non assigné',
|
||||
|
||||
startDate: null,
|
||||
|
||||
dueDate: null,
|
||||
|
||||
groupId: 2,
|
||||
|
||||
createdBy: 'admin_local'
|
||||
|
||||
},
|
||||
|
||||
dueDate: null,
|
||||
|
||||
dueDateType: 'object',
|
||||
|
||||
dueDateValue: null
|
||||
|
||||
}
|
||||
|
||||
💾 DatabaseStorage.createTask - Input: {
|
||||
|
||||
taskData: {
|
||||
|
||||
title: 'Rangement et faire prix podium Meuble',
|
||||
|
||||
description: 'Rangement et faire prix podium Meuble',
|
||||
|
||||
priority: 'medium',
|
||||
|
||||
status: 'pending',
|
||||
|
||||
assignedTo: 'Non assigné',
|
||||
|
||||
startDate: null,
|
||||
|
||||
dueDate: null,
|
||||
|
||||
groupId: 2,
|
||||
|
||||
createdBy: 'admin_local'
|
||||
|
||||
},
|
||||
|
||||
dueDate: null,
|
||||
|
||||
dueDateType: 'object',
|
||||
|
||||
dueDateISO: null
|
||||
|
||||
}
|
||||
|
||||
💾 DatabaseStorage.createTask - Result: {
|
||||
|
||||
taskId: 107,
|
||||
|
||||
title: 'Rangement et faire prix podium Meuble',
|
||||
|
||||
dueDate: null,
|
||||
|
||||
dueDateType: 'object'
|
||||
|
||||
}
|
||||
|
||||
✅ Task created: {
|
||||
|
||||
id: 107,
|
||||
|
||||
title: 'Rangement et faire prix podium Meuble',
|
||||
|
||||
dueDate: null,
|
||||
|
||||
dueDateType: 'object'
|
||||
|
||||
}
|
||||
|
||||
POST /api/tasks 200 in 7ms
|
||||
|
||||
📄 SPA: Serving index.html for /tasks
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
🗓️ [DATE-CALC] Aujourd'hui: 2025-09-02 (Mardi)
|
||||
|
||||
🗓️ [DATE-CALC] Année précédente: 2024-09-03 (Mardi)
|
||||
|
||||
GET /api/user 304 in 11ms
|
||||
|
||||
🌤️ [RESPONSE] Weather data prepared: {
|
||||
|
||||
hasCurrentYear: true,
|
||||
|
||||
hasPreviousYear: true,
|
||||
|
||||
location: 'Frouard, France'
|
||||
|
||||
}
|
||||
|
||||
GET /api/weather/current 304 in 12ms
|
||||
|
||||
GET /api/user 304 in 3ms
|
||||
|
||||
GET /api/user 304 in 7ms
|
||||
|
||||
GET /api/users 304 in 14ms
|
||||
|
||||
GET /api/groups 304 in 6ms
|
||||
|
||||
🔍 Admin tasks filtering: { storeId: '2', groupIds: [ 2 ], message: 'Filtering by store 2' }
|
||||
|
||||
🔍 Tasks API called with: {
|
||||
|
||||
groupIds: [ 2 ],
|
||||
|
||||
userRole: 'admin',
|
||||
|
||||
userId: 'admin_local',
|
||||
|
||||
requestedStoreId: '2',
|
||||
|
||||
userGroups: 'all',
|
||||
|
||||
timestamp: '2025-09-02T09:49:55.103Z'
|
||||
|
||||
}
|
||||
|
||||
📋 DatabaseStorage.getTasks - Raw results: {
|
||||
|
||||
resultCount: 1,
|
||||
|
||||
userRole: 'admin',
|
||||
|
||||
sampleTasks: [
|
||||
|
||||
{
|
||||
|
||||
taskExists: true,
|
||||
|
||||
taskId: 107,
|
||||
|
||||
title: 'Rangement et faire prix podium Meuble',
|
||||
|
||||
startDate: null,
|
||||
|
||||
groupExists: true
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
📋 Tasks returned: {
|
||||
|
||||
count: 1,
|
||||
|
||||
userId: 'admin_local',
|
||||
|
||||
userRole: 'admin',
|
||||
|
||||
requestedStoreId: '2',
|
||||
|
||||
groupIds: [ 2 ],
|
||||
|
||||
taskGroups: [
|
||||
|
||||
{
|
||||
|
||||
id: 107,
|
||||
|
||||
title: 'Rangement et faire prix podium Meuble',
|
||||
|
||||
groupId: 2
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
GET /api/tasks 200 in 9ms
|
||||
|
||||
GET /api/weather/current 401 in 2ms
|
||||
|
||||
📄 SPA: Serving index.html for /auth
|
||||
|
||||
GET /api/user 401 in 1ms
|
||||
|
||||
GET /api/user 401 in 3ms
|
||||
|
||||
-202
@@ -1,202 +0,0 @@
|
||||
|
||||
|
||||
🔧 Using memory session store for development
|
||||
|
||||
✅ All routes registered successfully for production
|
||||
|
||||
🐳 Serving static files from: /app/dist/public
|
||||
|
||||
🐳 PRODUCTION: LogiFlow serving on port 3000
|
||||
|
||||
HEAD /api/health 200 in 5ms
|
||||
|
||||
📄 SPA: Serving index.html for /dashboard
|
||||
|
||||
GET /api/user 401 in 1ms
|
||||
|
||||
📄 SPA: Serving index.html for /auth
|
||||
|
||||
GET /api/user 401 in 1ms
|
||||
|
||||
GET /api/user 401 in 2ms
|
||||
|
||||
GET /api/default-credentials-check 304 in 3ms
|
||||
|
||||
🔐 comparePasswords: {
|
||||
|
||||
supplied: 'HIDDEN',
|
||||
|
||||
stored: '1c5b14cae257319aea80...',
|
||||
|
||||
hasFormat: true
|
||||
|
||||
}
|
||||
|
||||
🔐 Password comparison result: true
|
||||
|
||||
POST /api/login 200 in 60ms
|
||||
|
||||
GET /api/user 304 in 8ms
|
||||
|
||||
GET /api/user 304 in 21ms
|
||||
|
||||
Customer Orders API called with: { groupIds: undefined, userRole: 'admin' }
|
||||
|
||||
Customer Orders returned: 36 items
|
||||
|
||||
GET /api/customer-orders 304 in 54ms
|
||||
|
||||
📊 Calcul statistiques mensuelles: {
|
||||
|
||||
year: 2025,
|
||||
|
||||
month: 8,
|
||||
|
||||
startDate: '2025-08-01',
|
||||
|
||||
endDate: '2025-09-01',
|
||||
|
||||
groupIds: undefined
|
||||
|
||||
}
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 18,
|
||||
|
||||
deliveriesCount: 42,
|
||||
|
||||
pendingOrdersCount: 6,
|
||||
|
||||
averageDeliveryTime: 0.3611111111111111,
|
||||
|
||||
totalPalettes: 120,
|
||||
|
||||
totalPackages: 36
|
||||
|
||||
}
|
||||
|
||||
GET /api/stats/monthly 304 in 126ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: undefined
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Tasks API called with: { groupIds: undefined, userRole: 'admin' }
|
||||
|
||||
🌤️ Fetching previous year weather data from API
|
||||
|
||||
GET /api/user 304 in 161ms
|
||||
|
||||
Tasks returned: 61 items
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: undefined
|
||||
|
||||
Fetching all orders
|
||||
|
||||
GET /api/tasks 304 in 247ms
|
||||
|
||||
GET /api/publicities 304 in 260ms
|
||||
|
||||
GET /api/dlc-products/stats 304 in 303ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 49 commandes avec relations
|
||||
|
||||
Orders returned: 49 items
|
||||
|
||||
GET /api/orders 304 in 456ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: [ 1 ]
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: [ 1 ]
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
GET /api/user 304 in 176ms
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 82 livraisons avec relations
|
||||
|
||||
Deliveries returned: 82 items
|
||||
|
||||
GET /api/deliveries 304 in 521ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 31 commandes avec relations
|
||||
|
||||
Orders returned: 31 items
|
||||
|
||||
GET /api/orders 304 in 252ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 44 livraisons avec relations
|
||||
|
||||
Deliveries returned: 44 items
|
||||
|
||||
GET /api/deliveries 304 in 261ms
|
||||
|
||||
Customer Orders returned: 9 items
|
||||
|
||||
GET /api/customer-orders 304 in 257ms
|
||||
|
||||
GET /api/publicities 304 in 255ms
|
||||
|
||||
GET /api/groups 304 in 40ms
|
||||
|
||||
Weather API error for previous year: 401
|
||||
|
||||
GET /api/weather/current 304 in 765ms
|
||||
|
||||
-204
@@ -1,204 +0,0 @@
|
||||
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getDlcProducts (file:///app/dist/index.js:2187:25)
|
||||
|
||||
at async file:///app/dist/index.js:6178:28 {
|
||||
|
||||
length: 124,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '337',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
GET /api/dlc-products 500 in 20ms
|
||||
|
||||
GET /api/dlc-products/stats 200 in 10ms
|
||||
|
||||
Error fetching DLC products: error: column dlc_products.stock_epuise does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getDlcProducts (file:///app/dist/index.js:2187:25)
|
||||
|
||||
at async file:///app/dist/index.js:6178:28 {
|
||||
|
||||
length: 124,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '337',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
GET /api/dlc-products 500 in 17ms
|
||||
|
||||
Error fetching DLC products: error: column dlc_products.stock_epuise does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getDlcProducts (file:///app/dist/index.js:2187:25)
|
||||
|
||||
at async file:///app/dist/index.js:6178:28 {
|
||||
|
||||
length: 124,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '337',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
GET /api/dlc-products 500 in 12ms
|
||||
|
||||
Error fetching DLC products: error: column dlc_products.stock_epuise does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getDlcProducts (file:///app/dist/index.js:2187:25)
|
||||
|
||||
at async file:///app/dist/index.js:6178:28 {
|
||||
|
||||
length: 124,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '337',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
GET /api/dlc-products 500 in 9ms
|
||||
|
||||
|
||||
|
||||
-202
@@ -1,202 +0,0 @@
|
||||
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
GET /api/dlc-products/stats 304 in 459ms
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
📢 [SERVER] Fetching announcements for user: admin_local environment: production
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
GET /api/announcements 304 in 348ms
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
📋 API PUBLICITIES REQUEST: {
|
||||
|
||||
year: '2025',
|
||||
|
||||
filterYear: 2025,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
📋 CALLING storage.getPublicities: { filterYear: 2025, groupIds: undefined }
|
||||
|
||||
GET /api/user 304 in 75ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin orders filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all orders
|
||||
|
||||
📢 [SERVER] User found: { username: 'admin', role: 'admin' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
📋 PUBLICITES FETCHED: 29 résultats pour année 2025
|
||||
|
||||
🔍 PREMIERS RESULTATS: [
|
||||
|
||||
'1. N°2501 - Blanc',
|
||||
|
||||
'2. N°2502 - Moins de 1€ 2€ 3€ 4€ 5€',
|
||||
|
||||
'3. N°2503 - Imbattables'
|
||||
|
||||
]
|
||||
|
||||
Customer Orders returned: 11 items
|
||||
|
||||
GET /api/customer-orders 304 in 53ms
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
📋 PUBLICITIES RETURNED: { count: 29 }
|
||||
|
||||
GET /api/publicities 304 in 223ms
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 64 commandes avec relations
|
||||
|
||||
Orders returned: 64 items
|
||||
|
||||
GET /api/announcements 304 in 189ms
|
||||
|
||||
GET /api/orders 304 in 204ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 82 livraisons avec relations
|
||||
|
||||
Deliveries returned: 82 items
|
||||
|
||||
GET /api/deliveries 304 in 225ms
|
||||
|
||||
GET /api/groups 304 in 91ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/suppliers 304 in 7ms
|
||||
|
||||
🔍 Avoirs API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
📋 Avoirs returned: 1 items
|
||||
|
||||
GET /api/avoirs 304 in 10ms
|
||||
|
||||
GET /api/user 304 in 5ms
|
||||
|
||||
-201
@@ -1,201 +0,0 @@
|
||||
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
⏰ Automatic backup scheduled for 2:00 AM daily (native timer)
|
||||
|
||||
🔍 Using development storage and authentication
|
||||
|
||||
🐳 PRODUCTION: Starting LogiFlow application
|
||||
|
||||
🐳 Environment: { NODE_ENV: 'production', DATABASE_URL: 'Present', PORT: '3000' }
|
||||
|
||||
🔧 Registering all production routes...
|
||||
|
||||
🔄 Running automatic production migrations...
|
||||
|
||||
🔄 MIGRATION: Starting SAV production migrations...
|
||||
|
||||
🔄 MIGRATION: Database URL configured: postgresql://logiflow_admin:Lo...
|
||||
|
||||
✅ MIGRATION: Connected to PostgreSQL database
|
||||
|
||||
🔄 MIGRATION: Checking if priority column exists...
|
||||
|
||||
🔄 MIGRATION: Priority column check result: 1
|
||||
|
||||
✅ MIGRATION: Priority column already exists, skipping migration
|
||||
|
||||
🔌 MIGRATION: Database connection closed
|
||||
|
||||
🔧 Using memory session store for development
|
||||
|
||||
Warning: connect.session() MemoryStore is not
|
||||
|
||||
designed for a production environment, as it will leak
|
||||
|
||||
memory, and will not scale past a single process.
|
||||
|
||||
✅ All routes registered successfully for production
|
||||
|
||||
🐳 Serving static files from: /app/dist/public
|
||||
|
||||
🐳 PRODUCTION: LogiFlow serving on port 3000
|
||||
|
||||
HEAD /api/health 200 in 4ms
|
||||
|
||||
📄 SPA: Serving index.html for /customer-orders
|
||||
|
||||
GET /api/user 401 in 1ms
|
||||
|
||||
📄 SPA: Serving index.html for /auth
|
||||
|
||||
GET /api/user 401 in 1ms
|
||||
|
||||
GET /api/user 401 in 1ms
|
||||
|
||||
GET /api/default-credentials-check 304 in 4ms
|
||||
|
||||
🔐 comparePasswords: {
|
||||
|
||||
supplied: 'HIDDEN',
|
||||
|
||||
stored: 'b23ec450a63faf3957a1...',
|
||||
|
||||
hasFormat: true
|
||||
|
||||
}
|
||||
|
||||
🔐 Password comparison result: true
|
||||
|
||||
POST /api/login 200 in 53ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/user 304 in 12ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'employee'
|
||||
|
||||
}
|
||||
|
||||
Non-admin filtering deliveries with groupIds: [ 2 ]
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
userRole: 'employee'
|
||||
|
||||
}
|
||||
|
||||
Non-admin filtering with groupIds: [ 2 ]
|
||||
|
||||
GET /api/user 304 in 43ms
|
||||
|
||||
📊 Calcul statistiques mensuelles: {
|
||||
|
||||
year: 2025,
|
||||
|
||||
month: 8,
|
||||
|
||||
startDate: '2025-08-01',
|
||||
|
||||
endDate: '2025-09-01',
|
||||
|
||||
groupIds: [ 2 ]
|
||||
|
||||
}
|
||||
|
||||
GET /api/user 304 in 24ms
|
||||
|
||||
Tasks API called with: { groupIds: [ 2 ], userRole: 'employee' }
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 18 commandes avec relations
|
||||
|
||||
Orders returned: 18 items
|
||||
|
||||
GET /api/orders 304 in 221ms
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 2 ], userRole: 'employee' }
|
||||
|
||||
GET /api/publicities 304 in 218ms
|
||||
|
||||
GET /api/dlc-products/stats 304 in 216ms
|
||||
|
||||
Customer Orders returned: 25 items
|
||||
|
||||
GET /api/customer-orders 304 in 228ms
|
||||
|
||||
Tasks returned: 9 items
|
||||
|
||||
GET /api/tasks 304 in 220ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 38 livraisons avec relations
|
||||
|
||||
Deliveries returned: 38 items
|
||||
|
||||
GET /api/deliveries 304 in 236ms
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 8,
|
||||
|
||||
deliveriesCount: 21,
|
||||
|
||||
pendingOrdersCount: 4,
|
||||
|
||||
averageDeliveryTime: 0.17647058823529413,
|
||||
|
||||
totalPalettes: 57,
|
||||
|
||||
totalPackages: 17
|
||||
|
||||
}
|
||||
|
||||
GET /api/stats/monthly 304 in 246ms
|
||||
|
||||
GET /api/groups 304 in 4ms
|
||||
|
||||
GET /api/publicities 304 in 11ms
|
||||
|
||||
GET /api/user 304 in 5ms
|
||||
|
||||
GET /api/suppliers 304 in 8ms
|
||||
|
||||
GET /api/user 304 in 3ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
-201
@@ -1,201 +0,0 @@
|
||||
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
⏰ Automatic backup scheduled for 2:00 AM daily (native timer)
|
||||
|
||||
🔍 Using development storage and authentication
|
||||
|
||||
🐳 PRODUCTION: Starting LogiFlow application
|
||||
|
||||
🐳 Environment: { NODE_ENV: 'production', DATABASE_URL: 'Present', PORT: '3000' }
|
||||
|
||||
🔧 Registering all production routes...
|
||||
|
||||
🔄 Running automatic production migrations...
|
||||
|
||||
🔄 MIGRATION: Starting SAV production migrations...
|
||||
|
||||
🔄 MIGRATION: Database URL configured: postgresql://logiflow_admin:Lo...
|
||||
|
||||
✅ MIGRATION: Connected to PostgreSQL database
|
||||
|
||||
🔄 MIGRATION: Checking if priority column exists...
|
||||
|
||||
🔄 MIGRATION: Priority column check result: 1
|
||||
|
||||
✅ MIGRATION: Priority column already exists, skipping migration
|
||||
|
||||
🔌 MIGRATION: Database connection closed
|
||||
|
||||
🔧 Using memory session store for development
|
||||
|
||||
Warning: connect.session() MemoryStore is not
|
||||
|
||||
designed for a production environment, as it will leak
|
||||
|
||||
memory, and will not scale past a single process.
|
||||
|
||||
✅ All routes registered successfully for production
|
||||
|
||||
🐳 Serving static files from: /app/dist/public
|
||||
|
||||
🐳 PRODUCTION: LogiFlow serving on port 3000
|
||||
|
||||
HEAD /api/health 200 in 4ms
|
||||
|
||||
📄 SPA: Serving index.html for /customer-orders
|
||||
|
||||
GET /api/user 401 in 1ms
|
||||
|
||||
📄 SPA: Serving index.html for /auth
|
||||
|
||||
GET /api/user 401 in 3ms
|
||||
|
||||
GET /api/user 401 in 1ms
|
||||
|
||||
GET /api/default-credentials-check 304 in 2ms
|
||||
|
||||
🔐 comparePasswords: {
|
||||
|
||||
supplied: 'HIDDEN',
|
||||
|
||||
stored: 'b23ec450a63faf3957a1...',
|
||||
|
||||
hasFormat: true
|
||||
|
||||
}
|
||||
|
||||
🔐 Password comparison result: true
|
||||
|
||||
POST /api/login 200 in 62ms
|
||||
|
||||
GET /api/user 304 in 5ms
|
||||
|
||||
GET /api/user 304 in 12ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'employee'
|
||||
|
||||
}
|
||||
|
||||
Non-admin filtering deliveries with groupIds: [ 2 ]
|
||||
|
||||
📊 Calcul statistiques mensuelles: {
|
||||
|
||||
year: 2025,
|
||||
|
||||
month: 8,
|
||||
|
||||
startDate: '2025-08-01',
|
||||
|
||||
endDate: '2025-09-01',
|
||||
|
||||
groupIds: [ 2 ]
|
||||
|
||||
}
|
||||
|
||||
GET /api/publicities 304 in 179ms
|
||||
|
||||
Tasks API called with: { groupIds: [ 2 ], userRole: 'employee' }
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 2 ], userRole: 'employee' }
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
userRole: 'employee'
|
||||
|
||||
}
|
||||
|
||||
Non-admin filtering with groupIds: [ 2 ]
|
||||
|
||||
GET /api/user 304 in 126ms
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 8,
|
||||
|
||||
deliveriesCount: 21,
|
||||
|
||||
pendingOrdersCount: 4,
|
||||
|
||||
averageDeliveryTime: 0.17647058823529413,
|
||||
|
||||
totalPalettes: 57,
|
||||
|
||||
totalPackages: 17
|
||||
|
||||
}
|
||||
|
||||
Tasks returned: 9 items
|
||||
|
||||
GET /api/stats/monthly 304 in 227ms
|
||||
|
||||
GET /api/dlc-products/stats 304 in 206ms
|
||||
|
||||
GET /api/tasks 304 in 203ms
|
||||
|
||||
Customer Orders returned: 25 items
|
||||
|
||||
GET /api/customer-orders 304 in 235ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 38 livraisons avec relations
|
||||
|
||||
Deliveries returned: 38 items
|
||||
|
||||
GET /api/deliveries 304 in 281ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 18 commandes avec relations
|
||||
|
||||
Orders returned: 18 items
|
||||
|
||||
GET /api/orders 304 in 300ms
|
||||
|
||||
GET /api/user 304 in 8ms
|
||||
|
||||
GET /api/publicities 304 in 25ms
|
||||
|
||||
GET /api/groups 304 in 4ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/suppliers 304 in 7ms
|
||||
|
||||
GET /api/user 304 in 3ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
-195
@@ -1,195 +0,0 @@
|
||||
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
⏰ Automatic backup scheduled for daily 2:00 AM+ (native timer)
|
||||
|
||||
file:///app/dist/index.js:11
|
||||
|
||||
throw Error('Dynamic require of "' + x2 + '" is not supported');
|
||||
|
||||
|
||||
|
||||
^
|
||||
|
||||
Error: Dynamic require of "stream" is not supported
|
||||
|
||||
at file:///app/dist/index.js:11:9
|
||||
|
||||
at node_modules/busboy/lib/types/multipart.js (file:///app/dist/index.js:7398:34)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/busboy/lib/index.js (file:///app/dist/index.js:9024:7)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at file:///app/dist/index.js:25027:29
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
Node.js v20.19.4
|
||||
|
||||
Applying DLC migration...
|
||||
|
||||
NOTICE: column "stock_epuise" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: column "stock_epuise_by" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: column "stock_epuise_at" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: relation "idx_dlc_products_stock_epuise" already exists, skipping
|
||||
|
||||
ALTER TABLE
|
||||
|
||||
␍CREATE INDEX
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
⏰ Automatic backup scheduled for daily 2:00 AM+ (native timer)
|
||||
|
||||
file:///app/dist/index.js:11
|
||||
|
||||
throw Error('Dynamic require of "' + x2 + '" is not supported');
|
||||
|
||||
|
||||
|
||||
^
|
||||
|
||||
Error: Dynamic require of "stream" is not supported
|
||||
|
||||
at file:///app/dist/index.js:11:9
|
||||
|
||||
at node_modules/busboy/lib/types/multipart.js (file:///app/dist/index.js:7398:34)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/busboy/lib/index.js (file:///app/dist/index.js:9024:7)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at file:///app/dist/index.js:25027:29
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
Node.js v20.19.4
|
||||
|
||||
Applying DLC migration...
|
||||
|
||||
NOTICE: column "stock_epuise" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: column "stock_epuise_by" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: column "stock_epuise_at" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: relation "idx_dlc_products_stock_epuise" already exists, skipping
|
||||
|
||||
ALTER TABLE
|
||||
|
||||
␍CREATE INDEX
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
⏰ Automatic backup scheduled for daily 2:00 AM+ (native timer)
|
||||
|
||||
file:///app/dist/index.js:11
|
||||
|
||||
throw Error('Dynamic require of "' + x2 + '" is not supported');
|
||||
|
||||
|
||||
|
||||
^
|
||||
|
||||
Error: Dynamic require of "stream" is not supported
|
||||
|
||||
at file:///app/dist/index.js:11:9
|
||||
|
||||
at node_modules/busboy/lib/types/multipart.js (file:///app/dist/index.js:7398:34)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/busboy/lib/index.js (file:///app/dist/index.js:9024:7)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at file:///app/dist/index.js:25027:29
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
Node.js v20.19.4
|
||||
-204
@@ -1,204 +0,0 @@
|
||||
|
||||
|
||||
endDate: '2025-09-30',
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'manager'
|
||||
|
||||
}
|
||||
|
||||
🔍 Non-admin orders - filtering by accessible store: { userId: '_1754943032954', role: 'manager', requestedStoreId: 1 }
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: '2025-09-01',
|
||||
|
||||
endDate: '2025-09-30',
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'manager'
|
||||
|
||||
}
|
||||
|
||||
🔍 Non-admin deliveries - filtering by accessible store: { userId: '_1754943032954', role: 'manager', requestedStoreId: 1 }
|
||||
|
||||
📋 API PUBLICITIES REQUEST: {
|
||||
|
||||
year: '2025',
|
||||
|
||||
filterYear: 2025,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
userRole: 'manager'
|
||||
|
||||
}
|
||||
|
||||
📋 CALLING storage.getPublicities: { filterYear: 2025, groupIds: [ 1 ] }
|
||||
|
||||
📋 PUBLICITES FETCHED: 29 résultats pour année 2025
|
||||
|
||||
🔍 PREMIERS RESULTATS: [
|
||||
|
||||
'1. N°2501 - Blanc',
|
||||
|
||||
'2. N°2502 - Moins de 1€ 2€ 3€ 4€ 5€',
|
||||
|
||||
'3. N°2503 - Imbattables'
|
||||
|
||||
]
|
||||
|
||||
📋 PUBLICITIES RETURNED: { count: 29 }
|
||||
|
||||
GET /api/publicities 304 in 22ms
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 12,
|
||||
|
||||
deliveriesCount: 10,
|
||||
|
||||
pendingOrdersCount: 10,
|
||||
|
||||
averageDeliveryTime: 3.6666666666666665,
|
||||
|
||||
totalPalettes: 29,
|
||||
|
||||
totalPackages: 3
|
||||
|
||||
}
|
||||
|
||||
GET /api/stats/monthly 200 in 31ms
|
||||
|
||||
Orders returned: 12 items
|
||||
|
||||
GET /api/orders 200 in 33ms
|
||||
|
||||
Deliveries returned: 10 items
|
||||
|
||||
GET /api/deliveries 304 in 34ms
|
||||
|
||||
GET /api/user 304 in 5ms
|
||||
|
||||
GET /api/user 304 in 3ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
userRole: 'manager'
|
||||
|
||||
}
|
||||
|
||||
🔍 Manager orders - using assigned store automatically: {
|
||||
|
||||
userId: '_1754943032954',
|
||||
|
||||
role: 'manager',
|
||||
|
||||
assignedStore: 1,
|
||||
|
||||
allUserGroups: [ 1 ]
|
||||
|
||||
}
|
||||
|
||||
GET /api/suppliers 200 in 8ms
|
||||
|
||||
GET /api/user 304 in 9ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 56 commandes avec relations
|
||||
|
||||
Orders returned: 56 items
|
||||
|
||||
GET /api/orders 304 in 84ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
🔍 BAP: Requête reçue {
|
||||
|
||||
hasUser: true,
|
||||
|
||||
userType: 'object',
|
||||
|
||||
hasClaims: false,
|
||||
|
||||
hasId: true,
|
||||
|
||||
bodyKeys: [ 'pdfBase64', 'fileName', 'recipient' ]
|
||||
|
||||
}
|
||||
|
||||
🔍 BAP: User ID extracted: admin_local
|
||||
|
||||
🔍 BAP: User found: { id: 'admin_local', role: 'admin' }
|
||||
|
||||
📤 BAP: Envoi webhook n8n {
|
||||
|
||||
recipient: 'Prissela',
|
||||
|
||||
fileName: '20250903_113707.pdf',
|
||||
|
||||
fileSize: 344773,
|
||||
|
||||
userId: 'admin_local'
|
||||
|
||||
}
|
||||
|
||||
✅ BAP: Payload JSON préparé {
|
||||
|
||||
recipient: 'Prissela',
|
||||
|
||||
fileName: '20250903_113707.pdf',
|
||||
|
||||
fileSize: 344773
|
||||
|
||||
}
|
||||
|
||||
🌐 BAP: Envoi vers webhook n8n...
|
||||
|
||||
🌐 BAP: Réponse webhook reçue { status: 404, ok: false }
|
||||
|
||||
❌ BAP: Erreur webhook {
|
||||
|
||||
status: 404,
|
||||
|
||||
errorText: '{"code":404,"message":"This webhook is not registered for POST requests. Did you mean to make a GET request?"}'
|
||||
|
||||
}
|
||||
|
||||
❌ BAP: Erreur complète: {
|
||||
|
||||
name: 'Error',
|
||||
|
||||
message: 'Erreur webhook: 404 Not Found',
|
||||
|
||||
stack: 'Error: Erreur webhook: 404 Not Found\n' +
|
||||
|
||||
' at file:///app/dist/index.js:12408:15\n' +
|
||||
|
||||
' at process.processTicksAndRejections (node:internal/process/task_queues:95:5)'
|
||||
|
||||
}
|
||||
|
||||
POST /api/bap/send-webhook 500 in 41ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
|
||||
|
||||
-202
@@ -1,202 +0,0 @@
|
||||
|
||||
|
||||
exists: true,
|
||||
|
||||
invoiceAmount: '1203.12',
|
||||
|
||||
dueDate: null
|
||||
|
||||
}
|
||||
|
||||
✅ [INVOICE] Résultat depuis cache: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
errorMessage: null,
|
||||
|
||||
invoiceReference: '000752796',
|
||||
|
||||
supplierName: 'CMP',
|
||||
|
||||
invoiceAmount: 1203.12,
|
||||
|
||||
dueDate: null,
|
||||
|
||||
fromCache: true,
|
||||
|
||||
permanent: true
|
||||
|
||||
}
|
||||
|
||||
🔍 [INVOICE] Début vérification facture: { invoiceReference: '22529151', groupId: 1, forceRefresh: false }
|
||||
|
||||
🔍 [INVOICE] Vérification cache...
|
||||
|
||||
🔍 [CACHE] Recherche cache pour: { invoiceReference: '22529151', groupId: 1, cacheKey: '1_22529151' }
|
||||
|
||||
✅ [DATABASE-CACHE] Cache hit pour: {
|
||||
|
||||
cacheKey: '1_22529151',
|
||||
|
||||
expires: 2075-11-04T06:31:09.789Z,
|
||||
|
||||
hoursRemaining: 438288
|
||||
|
||||
}
|
||||
|
||||
🔍 [CACHE] Résultat cache: {
|
||||
|
||||
found: true,
|
||||
|
||||
isReconciled: true,
|
||||
|
||||
expired: false,
|
||||
|
||||
expiresAt: 2075-11-04T06:31:09.789Z,
|
||||
|
||||
currentTime: '2025-11-04T06:32:28.367Z'
|
||||
|
||||
}
|
||||
|
||||
🛡️ [CACHE] PERMANENT - Facture validée avec coche verte, AUCUNE vérification: {
|
||||
|
||||
invoiceReference: '22529151',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
exists: true,
|
||||
|
||||
invoiceAmount: '2653.75',
|
||||
|
||||
dueDate: null
|
||||
|
||||
}
|
||||
|
||||
✅ [INVOICE] Résultat depuis cache: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
errorMessage: null,
|
||||
|
||||
invoiceReference: '22529151',
|
||||
|
||||
supplierName: 'Sovacom',
|
||||
|
||||
invoiceAmount: 2653.75,
|
||||
|
||||
dueDate: null,
|
||||
|
||||
fromCache: true,
|
||||
|
||||
permanent: true
|
||||
|
||||
}
|
||||
|
||||
🔍 [INVOICE] Début vérification facture: { invoiceReference: 'FCLT035833', groupId: 1, forceRefresh: false }
|
||||
|
||||
🔍 [INVOICE] Vérification cache...
|
||||
|
||||
🔍 [CACHE] Recherche cache pour: {
|
||||
|
||||
invoiceReference: 'FCLT035833',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
cacheKey: '1_fclt035833'
|
||||
|
||||
}
|
||||
|
||||
✅ [DATABASE-CACHE] Cache hit pour: {
|
||||
|
||||
cacheKey: '1_fclt035833',
|
||||
|
||||
expires: 2075-11-04T06:31:09.767Z,
|
||||
|
||||
hoursRemaining: 438288
|
||||
|
||||
}
|
||||
|
||||
🔍 [CACHE] Résultat cache: {
|
||||
|
||||
found: true,
|
||||
|
||||
isReconciled: true,
|
||||
|
||||
expired: false,
|
||||
|
||||
expiresAt: 2075-11-04T06:31:09.767Z,
|
||||
|
||||
currentTime: '2025-11-04T06:32:28.368Z'
|
||||
|
||||
}
|
||||
|
||||
🛡️ [CACHE] PERMANENT - Facture validée avec coche verte, AUCUNE vérification: {
|
||||
|
||||
invoiceReference: 'FCLT035833',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
exists: true,
|
||||
|
||||
invoiceAmount: '1307.26',
|
||||
|
||||
dueDate: null
|
||||
|
||||
}
|
||||
|
||||
✅ [INVOICE] Résultat depuis cache: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
errorMessage: null,
|
||||
|
||||
invoiceReference: 'FCLT035833',
|
||||
|
||||
supplierName: 'Idvpc',
|
||||
|
||||
invoiceAmount: 1307.26,
|
||||
|
||||
dueDate: null,
|
||||
|
||||
fromCache: true,
|
||||
|
||||
permanent: true
|
||||
|
||||
}
|
||||
|
||||
📅 Total échéances retournées: 32
|
||||
|
||||
GET /api/payment-schedule 200 in 340ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/utilities 304 in 5ms
|
||||
|
||||
GET /api/backups 304 in 6ms
|
||||
|
||||
🔧 [SQL-EXECUTOR] Début exécution SQL pour admin: admin_local
|
||||
|
||||
🔧 [SQL-EXECUTOR] Query: SELECT column_name
|
||||
|
||||
FROM information_schema.columns
|
||||
|
||||
WHERE table_name = 'deliveries'
|
||||
|
||||
AND column_name = 'due_date';...
|
||||
|
||||
✅ [SQL-EXECUTOR] Exécution réussie
|
||||
|
||||
POST /api/admin/execute-sql 200 in 23ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
-200
@@ -1,200 +0,0 @@
|
||||
|
||||
hasFormat: true
|
||||
|
||||
}
|
||||
|
||||
🔐 Password comparison result: true
|
||||
|
||||
POST /api/login 200 in 86ms
|
||||
|
||||
GET /api/user 200 in 12ms
|
||||
|
||||
GET /api/user 304 in 20ms
|
||||
|
||||
Customer Orders API called with: { groupIds: undefined, userRole: 'admin' }
|
||||
|
||||
Customer Orders returned: 37 items
|
||||
|
||||
GET /api/customer-orders 200 in 89ms
|
||||
|
||||
🗓️ [DATE-CALC] Aujourd'hui: 2025-08-15 (Vendredi)
|
||||
|
||||
🗓️ [DATE-CALC] Année précédente: 2024-08-16 (Vendredi)
|
||||
|
||||
📊 Calcul statistiques mensuelles: {
|
||||
|
||||
year: 2025,
|
||||
|
||||
month: 8,
|
||||
|
||||
startDate: '2025-08-01',
|
||||
|
||||
endDate: '2025-09-01',
|
||||
|
||||
groupIds: undefined
|
||||
|
||||
}
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: undefined
|
||||
|
||||
Fetching all orders
|
||||
|
||||
🌤️ [RESPONSE] Weather data prepared: {
|
||||
|
||||
hasCurrentYear: true,
|
||||
|
||||
hasPreviousYear: true,
|
||||
|
||||
location: 'Frouard, France'
|
||||
|
||||
}
|
||||
|
||||
GET /api/publicities 304 in 152ms
|
||||
|
||||
GET /api/user 304 in 129ms
|
||||
|
||||
GET /api/weather/current 304 in 177ms
|
||||
|
||||
🔍 Tasks API called with: {
|
||||
|
||||
groupIds: undefined,
|
||||
|
||||
userRole: 'admin',
|
||||
|
||||
userId: 'admin_local',
|
||||
|
||||
requestedStoreId: undefined,
|
||||
|
||||
userGroups: 'all'
|
||||
|
||||
}
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: undefined
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
📋 Tasks returned: 55 items for user: admin_local
|
||||
|
||||
GET /api/tasks 200 in 324ms
|
||||
|
||||
GET /api/dlc-products/stats 200 in 332ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 86 livraisons avec relations
|
||||
|
||||
Deliveries returned: 86 items
|
||||
|
||||
GET /api/deliveries 200 in 511ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 51 commandes avec relations
|
||||
|
||||
Orders returned: 51 items
|
||||
|
||||
GET /api/orders 200 in 523ms
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
GET /api/user 304 in 156ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: [ 1 ]
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: [ 1 ]
|
||||
|
||||
Fetching all orders
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 20,
|
||||
|
||||
deliveriesCount: 42,
|
||||
|
||||
pendingOrdersCount: 8,
|
||||
|
||||
averageDeliveryTime: 0.3611111111111111,
|
||||
|
||||
totalPalettes: 120,
|
||||
|
||||
totalPackages: 36
|
||||
|
||||
}
|
||||
|
||||
GET /api/stats/monthly 200 in 542ms
|
||||
|
||||
GET /api/publicities 304 in 153ms
|
||||
|
||||
Customer Orders returned: 9 items
|
||||
|
||||
GET /api/customer-orders 304 in 136ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 48 livraisons avec relations
|
||||
|
||||
Deliveries returned: 48 items
|
||||
|
||||
GET /api/deliveries 304 in 202ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 33 commandes avec relations
|
||||
|
||||
Orders returned: 33 items
|
||||
|
||||
GET /api/orders 304 in 275ms
|
||||
|
||||
GET /api/groups 200 in 74ms
|
||||
|
||||
GET /api/user 304 in 10ms
|
||||
|
||||
GET /api/suppliers 304 in 7ms
|
||||
|
||||
GET /api/dlc-products 304 in 37ms
|
||||
-201
@@ -1,201 +0,0 @@
|
||||
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
GET /api/announcements 304 in 103ms
|
||||
|
||||
Customer Orders returned: 7 items
|
||||
|
||||
GET /api/customer-orders 304 in 108ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 72 livraisons avec relations
|
||||
|
||||
Deliveries returned: 72 items
|
||||
|
||||
GET /api/deliveries 304 in 171ms
|
||||
|
||||
GET /api/groups 304 in 109ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/user 304 in 6ms
|
||||
|
||||
GET /api/backups 304 in 8ms
|
||||
|
||||
⚠️ Table webhook_bap_config n'existe pas, retour config par défaut
|
||||
|
||||
GET /api/webhook-bap-config 304 in 7ms
|
||||
|
||||
❌ Erreur récupération config webhook BAP: error: relation "webhook_bap_config" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getWebhookBapConfig (file:///app/dist/index.js:2815:26)
|
||||
|
||||
at async file:///app/dist/index.js:12402:22 {
|
||||
|
||||
length: 117,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42P01',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '97',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '1392',
|
||||
|
||||
routine: 'parserOpenTable'
|
||||
|
||||
}
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
🔍 Test webhook BAP: {
|
||||
|
||||
url: 'https://workflow.ffnancy.fr/webhook-test/a3d03176-b72f-412d-8fb9-f920b9fbab4d'
|
||||
|
||||
}
|
||||
|
||||
🌐 Réponse test webhook: { status: 404, ok: false }
|
||||
|
||||
POST /api/webhook-bap-config/test 500 in 86ms
|
||||
|
||||
❌ Erreur test webhook BAP: Error: HTTP 404: Not Found
|
||||
|
||||
at file:///app/dist/index.js:12481:15
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
🔍 Test webhook BAP: {
|
||||
|
||||
url: 'https://workflow.ffnancy.fr/webhook-test/a3d03176-b72f-412d-8fb9-f920b9fbab4d'
|
||||
|
||||
}
|
||||
|
||||
🌐 Réponse test webhook: { status: 500, ok: false }
|
||||
|
||||
❌ Erreur test webhook BAP: Error: HTTP 500: Internal Server Error
|
||||
|
||||
at file:///app/dist/index.js:12481:15
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
POST /api/webhook-bap-config/test 500 in 72ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
|
||||
❌ Erreur sauvegarde config webhook BAP: error: relation "webhook_bap_config" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getWebhookBapConfig (file:///app/dist/index.js:2815:26)
|
||||
|
||||
at async file:///app/dist/index.js:12431:30 {
|
||||
|
||||
length: 117,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42P01',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '97',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '1392',
|
||||
|
||||
routine: 'parserOpenTable'
|
||||
|
||||
}
|
||||
|
||||
POST /api/webhook-bap-config 500 in 6ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
-201
@@ -1,201 +0,0 @@
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
⏰ Automatic backup scheduled for 2:00 AM daily (native timer)
|
||||
|
||||
🔍 Using development storage and authentication
|
||||
|
||||
🐳 PRODUCTION: Starting LogiFlow application
|
||||
|
||||
🐳 Environment: { NODE_ENV: 'production', DATABASE_URL: 'Present', PORT: '3000' }
|
||||
|
||||
🔧 Registering all production routes...
|
||||
|
||||
🔄 Running automatic production migrations...
|
||||
|
||||
🔄 MIGRATION: Starting SAV production migrations...
|
||||
|
||||
🔄 MIGRATION: Database URL configured: postgresql://logiflow_admin:Lo...
|
||||
|
||||
✅ MIGRATION: Connected to PostgreSQL database
|
||||
|
||||
🔄 MIGRATION: Checking if priority column exists...
|
||||
|
||||
🔄 MIGRATION: Priority column check result: 1
|
||||
|
||||
✅ MIGRATION: Priority column already exists, skipping migration
|
||||
|
||||
🔌 MIGRATION: Database connection closed
|
||||
|
||||
🔧 Using memory session store for development
|
||||
|
||||
Warning: connect.session() MemoryStore is not
|
||||
|
||||
designed for a production environment, as it will leak
|
||||
|
||||
memory, and will not scale past a single process.
|
||||
|
||||
✅ All routes registered successfully for production
|
||||
|
||||
🐳 Serving static files from: /app/dist/public
|
||||
|
||||
🐳 PRODUCTION: LogiFlow serving on port 3000
|
||||
|
||||
HEAD /api/health 200 in 5ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
📄 SPA: Serving index.html for /sav
|
||||
|
||||
GET /api/user 401 in 1ms
|
||||
|
||||
📄 SPA: Serving index.html for /auth
|
||||
|
||||
GET /api/user 401 in 1ms
|
||||
|
||||
GET /api/user 401 in 1ms
|
||||
|
||||
GET /api/default-credentials-check 304 in 22ms
|
||||
|
||||
🔐 comparePasswords: {
|
||||
|
||||
supplied: 'HIDDEN',
|
||||
|
||||
stored: 'b23ec450a63faf3957a1...',
|
||||
|
||||
hasFormat: true
|
||||
|
||||
}
|
||||
|
||||
🔐 Password comparison result: true
|
||||
|
||||
POST /api/login 200 in 53ms
|
||||
|
||||
GET /api/user 200 in 5ms
|
||||
|
||||
GET /api/user 304 in 11ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'employee'
|
||||
|
||||
}
|
||||
|
||||
Non-admin filtering deliveries with groupIds: [ 2 ]
|
||||
|
||||
📊 Calcul statistiques mensuelles: {
|
||||
|
||||
year: 2025,
|
||||
|
||||
month: 8,
|
||||
|
||||
startDate: '2025-08-01',
|
||||
|
||||
endDate: '2025-09-01',
|
||||
|
||||
groupIds: [ 2 ]
|
||||
|
||||
}
|
||||
|
||||
GET /api/user 304 in 85ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
userRole: 'employee'
|
||||
|
||||
}
|
||||
|
||||
Non-admin filtering with groupIds: [ 2 ]
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 2 ], userRole: 'employee' }
|
||||
|
||||
Tasks API called with: { groupIds: [ 2 ], userRole: 'employee' }
|
||||
|
||||
GET /api/publicities 304 in 179ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 38 livraisons avec relations
|
||||
|
||||
Deliveries returned: 38 items
|
||||
|
||||
GET /api/dlc-products/stats 200 in 186ms
|
||||
|
||||
GET /api/deliveries 200 in 194ms
|
||||
|
||||
Customer Orders returned: 25 items
|
||||
|
||||
Tasks returned: 9 items
|
||||
|
||||
GET /api/customer-orders 200 in 249ms
|
||||
|
||||
GET /api/tasks 200 in 241ms
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 8,
|
||||
|
||||
deliveriesCount: 21,
|
||||
|
||||
pendingOrdersCount: 4,
|
||||
|
||||
averageDeliveryTime: 0.17647058823529413,
|
||||
|
||||
totalPalettes: 57,
|
||||
|
||||
totalPackages: 17
|
||||
|
||||
}
|
||||
|
||||
GET /api/stats/monthly 200 in 279ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 18 commandes avec relations
|
||||
|
||||
Orders returned: 18 items
|
||||
|
||||
GET /api/orders 200 in 285ms
|
||||
|
||||
GET /api/user 304 in 8ms
|
||||
|
||||
GET /api/publicities 304 in 18ms
|
||||
|
||||
GET /api/groups 200 in 5ms
|
||||
|
||||
GET /api/user 304 in 3ms
|
||||
|
||||
GET /api/suppliers 304 in 6ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
-132
@@ -1,132 +0,0 @@
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucune correspondance trouvée dans NocoDB'
|
||||
|
||||
}
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: false,
|
||||
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucune correspondance trouvée dans NocoDB'
|
||||
|
||||
}
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: false,
|
||||
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucune correspondance trouvée dans NocoDB'
|
||||
|
||||
}
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
🔍 Recherche NocoDB: {
|
||||
|
||||
url: 'https://nocodb.ffnancy.fr/api/v1/db/data/v1/pcg4uw79ukvycxc/CommandeF',
|
||||
|
||||
column: 'Numero_BL',
|
||||
|
||||
value: 'F5164434'
|
||||
|
||||
}
|
||||
|
||||
POST /api/deliveries/38/verify-invoice 200 in 162ms
|
||||
|
||||
POST /api/deliveries/43/verify-invoice 200 in 167ms
|
||||
|
||||
POST /api/deliveries/11/verify-invoice 200 in 156ms
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: false,
|
||||
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucune correspondance trouvée dans NocoDB'
|
||||
|
||||
}
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
POST /api/deliveries/33/verify-invoice 200 in 149ms
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
🔍 Recherche NocoDB: {
|
||||
|
||||
url: 'https://nocodb.ffnancy.fr/api/v1/db/data/v1/pcg4uw79ukvycxc/CommandeF',
|
||||
|
||||
column: 'Numero_BL',
|
||||
|
||||
value: '37424'
|
||||
|
||||
}
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
🔍 Recherche NocoDB: {
|
||||
|
||||
url: 'https://nocodb.ffnancy.fr/api/v1/db/data/v1/pcg4uw79ukvycxc/CommandeF',
|
||||
|
||||
column: 'Numero_BL',
|
||||
|
||||
value: '000752796'
|
||||
|
||||
}
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: false,
|
||||
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucune correspondance trouvée dans NocoDB'
|
||||
|
||||
}
|
||||
|
||||
POST /api/deliveries/38/verify-invoice 200 in 166ms
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: false,
|
||||
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucune correspondance trouvée dans NocoDB'
|
||||
|
||||
}
|
||||
|
||||
POST /api/deliveries/28/verify-invoice 200 in 154ms
|
||||
|
||||
❌ Erreur réponse NocoDB: 404 Not Found
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: false,
|
||||
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucune correspondance trouvée dans NocoDB'
|
||||
|
||||
}
|
||||
|
||||
POST /api/deliveries/27/verify-invoice 200 in 166ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
-201
@@ -1,201 +0,0 @@
|
||||
|
||||
ordersCount: 32,
|
||||
|
||||
deliveriesCount: 37,
|
||||
|
||||
pendingOrdersCount: 24,
|
||||
|
||||
averageDeliveryTime: '5.7272727272727275 jours (commande → livraison, livraisons avec commande liée uniquement)',
|
||||
|
||||
totalPalettes: 3009,
|
||||
|
||||
totalPackages: 11
|
||||
|
||||
}
|
||||
|
||||
📋 PUBLICITIES RETURNED: { count: 29 }
|
||||
|
||||
GET /api/stats/monthly 304 in 571ms
|
||||
|
||||
GET /api/publicities 304 in 60ms
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
GET /api/announcements 304 in 97ms
|
||||
|
||||
GET /api/user 304 in 11ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin orders filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all orders
|
||||
|
||||
📢 [SERVER] Fetching announcements for user: admin_local environment: production
|
||||
|
||||
📢 [SERVER] User found: { username: 'admin', role: 'admin' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
GET /api/announcements 304 in 18ms
|
||||
|
||||
Customer Orders returned: 11 items
|
||||
|
||||
GET /api/customer-orders 304 in 25ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 82 livraisons avec relations
|
||||
|
||||
Deliveries returned: 82 items
|
||||
|
||||
GET /api/deliveries 304 in 161ms
|
||||
|
||||
GET /api/groups 304 in 103ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 64 commandes avec relations
|
||||
|
||||
Orders returned: 64 items
|
||||
|
||||
GET /api/orders 304 in 217ms
|
||||
|
||||
GET /api/user 304 in 5ms
|
||||
|
||||
🔍 Avoirs API called with: { groupIds: undefined, userRole: 'admin' }
|
||||
|
||||
GET /api/suppliers 304 in 8ms
|
||||
|
||||
📋 Avoirs returned: 1 items
|
||||
|
||||
GET /api/avoirs 304 in 14ms
|
||||
|
||||
-199
@@ -1,199 +0,0 @@
|
||||
|
||||
stack: 'error: column "is_reconciled" of relation "invoice_verification_cache" does not exist\n' +
|
||||
|
||||
' at /app/node_modules/pg-pool/index.js:45:11\n' +
|
||||
|
||||
' at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n' +
|
||||
|
||||
' at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22\n' +
|
||||
|
||||
' at async DatabaseStorage.createInvoiceVerificationCache (file:///app/dist/index.js:2409:27)\n' +
|
||||
|
||||
' at async InvoiceVerificationService.saveToCache (file:///app/dist/index.js:4863:30)\n' +
|
||||
|
||||
' at async InvoiceVerificationService.verifyInvoice (file:///app/dist/index.js:5073:15)\n' +
|
||||
|
||||
' at async file:///app/dist/index.js:13791:18'
|
||||
|
||||
}
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
invoiceReference: 'F5192259',
|
||||
|
||||
invoiceAmount: 2268.24,
|
||||
|
||||
supplierName: 'JJA Noel / Plein Air'
|
||||
|
||||
}
|
||||
|
||||
POST /api/deliveries/88/verify-invoice 200 in 4512ms
|
||||
|
||||
POST /api/deliveries/88/verify-invoice 200 in 3587ms
|
||||
|
||||
POST /api/deliveries/163/verify-invoice 200 in 3805ms
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
invoiceReference: 'FCLT036018',
|
||||
|
||||
invoiceAmount: 1141.28,
|
||||
|
||||
supplierName: 'Idvpc'
|
||||
|
||||
}
|
||||
|
||||
POST /api/deliveries/139/verify-invoice 200 in 3670ms
|
||||
|
||||
❌ Erreur création cache: error: column "is_reconciled" of relation "invoice_verification_cache" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.createInvoiceVerificationCache (file:///app/dist/index.js:2409:27)
|
||||
|
||||
at async InvoiceVerificationService.saveToCache (file:///app/dist/index.js:4863:30)
|
||||
|
||||
at async InvoiceVerificationService.verifyInvoice (file:///app/dist/index.js:5073:15)
|
||||
|
||||
at async file:///app/dist/index.js:13791:18 {
|
||||
|
||||
length: 153,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '183',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_target.c',
|
||||
|
||||
line: '1075',
|
||||
|
||||
routine: 'checkInsertTargets'
|
||||
|
||||
}
|
||||
|
||||
❌ [CACHE] Erreur sauvegarde cache: error: column "is_reconciled" of relation "invoice_verification_cache" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.createInvoiceVerificationCache (file:///app/dist/index.js:2409:27)
|
||||
|
||||
at async InvoiceVerificationService.saveToCache (file:///app/dist/index.js:4863:30)
|
||||
|
||||
at async InvoiceVerificationService.verifyInvoice (file:///app/dist/index.js:5073:15)
|
||||
|
||||
at async file:///app/dist/index.js:13791:18 {
|
||||
|
||||
length: 153,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '183',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_target.c',
|
||||
|
||||
line: '1075',
|
||||
|
||||
routine: 'checkInsertTargets'
|
||||
|
||||
}
|
||||
|
||||
❌ [CACHE] Détails erreur: {
|
||||
|
||||
name: 'error',
|
||||
|
||||
message: 'column "is_reconciled" of relation "invoice_verification_cache" does not exist',
|
||||
|
||||
stack: 'error: column "is_reconciled" of relation "invoice_verification_cache" does not exist\n' +
|
||||
|
||||
' at /app/node_modules/pg-pool/index.js:45:11\n' +
|
||||
|
||||
' at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n' +
|
||||
|
||||
' at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22\n' +
|
||||
|
||||
' at async DatabaseStorage.createInvoiceVerificationCache (file:///app/dist/index.js:2409:27)\n' +
|
||||
|
||||
' at async InvoiceVerificationService.saveToCache (file:///app/dist/index.js:4863:30)\n' +
|
||||
|
||||
' at async InvoiceVerificationService.verifyInvoice (file:///app/dist/index.js:5073:15)\n' +
|
||||
|
||||
' at async file:///app/dist/index.js:13791:18'
|
||||
|
||||
}
|
||||
|
||||
DELETE /api/groups/3 200 in 47ms
|
||||
|
||||
GET /api/groups 200 in 4ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
🔍 Avoirs API called with: { groupIds: undefined, userRole: 'admin' }
|
||||
|
||||
📋 Avoirs returned: 0 items
|
||||
|
||||
GET /api/avoirs 200 in 10ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
POST /api/avoirs 400 in 51ms
|
||||
|
||||
-200
@@ -1,200 +0,0 @@
|
||||
|
||||
|
||||
startDate: '2025-08-20',
|
||||
|
||||
dueDate: '2025-08-21'
|
||||
|
||||
}
|
||||
|
||||
💾 DatabaseStorage.updateTask - Input: {
|
||||
|
||||
taskId: 99,
|
||||
|
||||
taskData: {
|
||||
|
||||
title: 'test',
|
||||
|
||||
description: 'test',
|
||||
|
||||
priority: 'medium',
|
||||
|
||||
status: 'pending',
|
||||
|
||||
assignedTo: 'test',
|
||||
|
||||
startDate: '2025-08-20',
|
||||
|
||||
dueDate: '2025-08-21'
|
||||
|
||||
},
|
||||
|
||||
dueDate: '2025-08-21',
|
||||
|
||||
dueDateType: 'string',
|
||||
|
||||
dueDateISO: '2025-08-21'
|
||||
|
||||
}
|
||||
|
||||
🧹 Cleaned data for database update: {
|
||||
|
||||
title: 'test',
|
||||
|
||||
description: 'test',
|
||||
|
||||
priority: 'medium',
|
||||
|
||||
status: 'pending',
|
||||
|
||||
assignedTo: 'test',
|
||||
|
||||
startDate: '2025-08-20',
|
||||
|
||||
dueDate: '2025-08-21',
|
||||
|
||||
updatedAt: 2025-08-19T11:21:56.027Z
|
||||
|
||||
}
|
||||
|
||||
❌ DatabaseStorage.updateTask - Database Error: {
|
||||
|
||||
taskId: 99,
|
||||
|
||||
error: 'value.toISOString is not a function',
|
||||
|
||||
cleanData: {
|
||||
|
||||
title: 'test',
|
||||
|
||||
description: 'test',
|
||||
|
||||
priority: 'medium',
|
||||
|
||||
status: 'pending',
|
||||
|
||||
assignedTo: 'test',
|
||||
|
||||
startDate: '2025-08-20',
|
||||
|
||||
dueDate: '2025-08-21',
|
||||
|
||||
updatedAt: 2025-08-19T11:21:56.027Z
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
file:///app/dist/index.js:6700
|
||||
|
||||
taskId: id,
|
||||
|
||||
^
|
||||
|
||||
ReferenceError: id is not defined
|
||||
|
||||
at file:///app/dist/index.js:6700:17
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
Node.js v20.19.4
|
||||
|
||||
Applying DLC migration...
|
||||
|
||||
NOTICE: column "stock_epuise" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: column "stock_epuise_by" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: column "stock_epuise_at" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: relation "idx_dlc_products_stock_epuise" already exists, skipping
|
||||
|
||||
ALTER TABLE
|
||||
|
||||
␍CREATE INDEX
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
⏰ Automatic backup scheduled for 2:00 AM daily (native timer)
|
||||
|
||||
🔍 Using development storage and authentication
|
||||
|
||||
🐳 PRODUCTION: Starting LogiFlow application
|
||||
|
||||
🐳 Environment: { NODE_ENV: 'production', DATABASE_URL: 'Present', PORT: '3000' }
|
||||
|
||||
💾 [PRODUCTION] Backup service initialized for automatic daily backups
|
||||
|
||||
🔧 Registering all production routes...
|
||||
|
||||
🔄 Running automatic production migrations...
|
||||
|
||||
🔄 MIGRATION: Starting SAV production migrations...
|
||||
|
||||
🔄 MIGRATION: Database URL configured: postgresql://logiflow_admin:Lo...
|
||||
|
||||
✅ MIGRATION: Connected to PostgreSQL database
|
||||
|
||||
🔄 MIGRATION: Checking if priority column exists...
|
||||
|
||||
🔄 MIGRATION: Priority column check result: 1
|
||||
|
||||
✅ MIGRATION: Priority column already exists, skipping migration
|
||||
|
||||
🔌 MIGRATION: Database connection closed
|
||||
|
||||
🌤️ [PRODUCTION] Initializing weather system...
|
||||
|
||||
🌤️ [AUTO-CONFIG] Initializing weather configuration...
|
||||
|
||||
✅ [AUTO-CONFIG] Weather settings already configured and active
|
||||
|
||||
✅ [PRODUCTION] Weather system initialized
|
||||
|
||||
🌍 Environment detected: production
|
||||
|
||||
🔧 Using memory session store for development
|
||||
|
||||
Warning: connect.session() MemoryStore is not
|
||||
|
||||
designed for a production environment, as it will leak
|
||||
|
||||
memory, and will not scale past a single process.
|
||||
|
||||
✅ All routes registered successfully for production
|
||||
|
||||
🐳 Serving static files from: /app/dist/public
|
||||
|
||||
🐳 PRODUCTION: LogiFlow serving on port 3000
|
||||
|
||||
HEAD /api/health 200 in 8ms
|
||||
|
||||
|
||||
|
||||
-201
@@ -1,201 +0,0 @@
|
||||
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
GET /api/announcements 304 in 103ms
|
||||
|
||||
Customer Orders returned: 7 items
|
||||
|
||||
GET /api/customer-orders 304 in 108ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 72 livraisons avec relations
|
||||
|
||||
Deliveries returned: 72 items
|
||||
|
||||
GET /api/deliveries 304 in 171ms
|
||||
|
||||
GET /api/groups 304 in 109ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/user 304 in 6ms
|
||||
|
||||
GET /api/backups 304 in 8ms
|
||||
|
||||
⚠️ Table webhook_bap_config n'existe pas, retour config par défaut
|
||||
|
||||
GET /api/webhook-bap-config 304 in 7ms
|
||||
|
||||
❌ Erreur récupération config webhook BAP: error: relation "webhook_bap_config" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getWebhookBapConfig (file:///app/dist/index.js:2815:26)
|
||||
|
||||
at async file:///app/dist/index.js:12402:22 {
|
||||
|
||||
length: 117,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42P01',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '97',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '1392',
|
||||
|
||||
routine: 'parserOpenTable'
|
||||
|
||||
}
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
🔍 Test webhook BAP: {
|
||||
|
||||
url: 'https://workflow.ffnancy.fr/webhook-test/a3d03176-b72f-412d-8fb9-f920b9fbab4d'
|
||||
|
||||
}
|
||||
|
||||
🌐 Réponse test webhook: { status: 404, ok: false }
|
||||
|
||||
POST /api/webhook-bap-config/test 500 in 86ms
|
||||
|
||||
❌ Erreur test webhook BAP: Error: HTTP 404: Not Found
|
||||
|
||||
at file:///app/dist/index.js:12481:15
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
🔍 Test webhook BAP: {
|
||||
|
||||
url: 'https://workflow.ffnancy.fr/webhook-test/a3d03176-b72f-412d-8fb9-f920b9fbab4d'
|
||||
|
||||
}
|
||||
|
||||
🌐 Réponse test webhook: { status: 500, ok: false }
|
||||
|
||||
❌ Erreur test webhook BAP: Error: HTTP 500: Internal Server Error
|
||||
|
||||
at file:///app/dist/index.js:12481:15
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
POST /api/webhook-bap-config/test 500 in 72ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
|
||||
❌ Erreur sauvegarde config webhook BAP: error: relation "webhook_bap_config" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getWebhookBapConfig (file:///app/dist/index.js:2815:26)
|
||||
|
||||
at async file:///app/dist/index.js:12431:30 {
|
||||
|
||||
length: 117,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42P01',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '97',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '1392',
|
||||
|
||||
routine: 'parserOpenTable'
|
||||
|
||||
}
|
||||
|
||||
POST /api/webhook-bap-config 500 in 6ms
|
||||
-197
@@ -1,197 +0,0 @@
|
||||
|
||||
throw Error('Dynamic require of "' + x + '" is not supported');
|
||||
|
||||
|
||||
|
||||
^
|
||||
|
||||
Error: Dynamic require of "events" is not supported
|
||||
|
||||
at file:///app/dist/index.js:11:9
|
||||
|
||||
at node_modules/node-cron/dist/esm/tasks/inline-scheduled-task.js (file:///app/dist/index.js:3561:36)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/node-cron/dist/esm/node-cron.js (file:///app/dist/index.js:4042:35)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at file:///app/dist/index.js:4502:32
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
Node.js v20.19.4
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
file:///app/dist/index.js:11
|
||||
|
||||
throw Error('Dynamic require of "' + x + '" is not supported');
|
||||
|
||||
|
||||
|
||||
^
|
||||
|
||||
Error: Dynamic require of "events" is not supported
|
||||
|
||||
at file:///app/dist/index.js:11:9
|
||||
|
||||
at node_modules/node-cron/dist/esm/tasks/inline-scheduled-task.js (file:///app/dist/index.js:3561:36)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/node-cron/dist/esm/node-cron.js (file:///app/dist/index.js:4042:35)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at file:///app/dist/index.js:4502:32
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
Node.js v20.19.4
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
file:///app/dist/index.js:11
|
||||
|
||||
throw Error('Dynamic require of "' + x + '" is not supported');
|
||||
|
||||
|
||||
|
||||
^
|
||||
|
||||
Error: Dynamic require of "events" is not supported
|
||||
|
||||
at file:///app/dist/index.js:11:9
|
||||
|
||||
at node_modules/node-cron/dist/esm/tasks/inline-scheduled-task.js (file:///app/dist/index.js:3561:36)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/node-cron/dist/esm/node-cron.js (file:///app/dist/index.js:4042:35)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at file:///app/dist/index.js:4502:32
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
Node.js v20.19.4
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
file:///app/dist/index.js:11
|
||||
|
||||
throw Error('Dynamic require of "' + x + '" is not supported');
|
||||
|
||||
|
||||
|
||||
^
|
||||
|
||||
Error: Dynamic require of "events" is not supported
|
||||
|
||||
at file:///app/dist/index.js:11:9
|
||||
|
||||
at node_modules/node-cron/dist/esm/tasks/inline-scheduled-task.js (file:///app/dist/index.js:3561:36)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/node-cron/dist/esm/node-cron.js (file:///app/dist/index.js:4042:35)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at file:///app/dist/index.js:4502:32
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
Node.js v20.19.4
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-200
@@ -1,200 +0,0 @@
|
||||
|
||||
title: 'test',
|
||||
|
||||
description: 'test',
|
||||
|
||||
priority: 'medium',
|
||||
|
||||
status: 'pending',
|
||||
|
||||
assignedTo: 'Non assigné',
|
||||
|
||||
startDate: '2025-09-02',
|
||||
|
||||
dueDate: '2025-09-03',
|
||||
|
||||
groupId: 2,
|
||||
|
||||
createdBy: 'admin_local'
|
||||
|
||||
},
|
||||
|
||||
dueDate: '2025-09-03',
|
||||
|
||||
dueDateType: 'string',
|
||||
|
||||
dueDateValue: '2025-09-03'
|
||||
|
||||
}
|
||||
|
||||
💾 DatabaseStorage.createTask - Input: {
|
||||
|
||||
taskData: {
|
||||
|
||||
title: 'test',
|
||||
|
||||
description: 'test',
|
||||
|
||||
priority: 'medium',
|
||||
|
||||
status: 'pending',
|
||||
|
||||
assignedTo: 'Non assigné',
|
||||
|
||||
startDate: '2025-09-02',
|
||||
|
||||
dueDate: '2025-09-03',
|
||||
|
||||
groupId: 2,
|
||||
|
||||
createdBy: 'admin_local'
|
||||
|
||||
},
|
||||
|
||||
dueDate: '2025-09-03',
|
||||
|
||||
dueDateType: 'string',
|
||||
|
||||
dueDateISO: '2025-09-03'
|
||||
|
||||
}
|
||||
|
||||
Error creating task: TypeError: value.toISOString is not a function
|
||||
|
||||
at PgTimestamp.mapToDriverValue (file:///app/node_modules/drizzle-orm/pg-core/columns/timestamp.js:34:18)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:131:73
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:92:21
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:95:21
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
POST /api/tasks 500 in 7ms
|
||||
|
||||
📝 POST /api/tasks - Received data: {
|
||||
|
||||
originalBody: {
|
||||
|
||||
title: 'test',
|
||||
|
||||
description: 'test',
|
||||
|
||||
priority: 'medium',
|
||||
|
||||
status: 'pending',
|
||||
|
||||
assignedTo: 'Non assigné',
|
||||
|
||||
startDate: '2025-09-03',
|
||||
|
||||
dueDate: '2025-09-03',
|
||||
|
||||
groupId: 2,
|
||||
|
||||
createdBy: 'admin'
|
||||
|
||||
},
|
||||
|
||||
processedData: {
|
||||
|
||||
title: 'test',
|
||||
|
||||
description: 'test',
|
||||
|
||||
priority: 'medium',
|
||||
|
||||
status: 'pending',
|
||||
|
||||
assignedTo: 'Non assigné',
|
||||
|
||||
startDate: '2025-09-03',
|
||||
|
||||
dueDate: '2025-09-03',
|
||||
|
||||
groupId: 2,
|
||||
|
||||
createdBy: 'admin_local'
|
||||
|
||||
},
|
||||
|
||||
dueDate: '2025-09-03',
|
||||
|
||||
dueDateType: 'string',
|
||||
|
||||
dueDateValue: '2025-09-03'
|
||||
|
||||
}
|
||||
|
||||
💾 DatabaseStorage.createTask - Input: {
|
||||
|
||||
taskData: {
|
||||
|
||||
title: 'test',
|
||||
|
||||
description: 'test',
|
||||
|
||||
priority: 'medium',
|
||||
|
||||
status: 'pending',
|
||||
|
||||
assignedTo: 'Non assigné',
|
||||
|
||||
startDate: '2025-09-03',
|
||||
|
||||
dueDate: '2025-09-03',
|
||||
|
||||
groupId: 2,
|
||||
|
||||
createdBy: 'admin_local'
|
||||
|
||||
},
|
||||
|
||||
dueDate: '2025-09-03',
|
||||
|
||||
dueDateType: 'string',
|
||||
|
||||
dueDateISO: '2025-09-03'
|
||||
|
||||
}
|
||||
|
||||
Error creating task: TypeError: value.toISOString is not a function
|
||||
|
||||
at PgTimestamp.mapToDriverValue (file:///app/node_modules/drizzle-orm/pg-core/columns/timestamp.js:34:18)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:131:73
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:92:21
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:95:21
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
POST /api/tasks 500 in 6ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
|
||||
PUT /api/customer-orders/101 401 in 1ms
|
||||
|
||||
PUT /api/customer-orders/100 401 in 1ms
|
||||
-196
@@ -1,196 +0,0 @@
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: [ 1 ]
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: [ 1 ]
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Customer Orders returned: 10 items
|
||||
|
||||
GET /api/customer-orders 200 in 16ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 33 commandes avec relations
|
||||
|
||||
Orders returned: 33 items
|
||||
|
||||
GET /api/orders 200 in 124ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 49 livraisons avec relations
|
||||
|
||||
Deliveries returned: 49 items
|
||||
|
||||
GET /api/deliveries 200 in 140ms
|
||||
|
||||
GET /api/groups 304 in 48ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/suppliers 304 in 9ms
|
||||
|
||||
Error fetching DLC products: error: column dlc_products.stock_epuise does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getDlcProducts (file:///app/dist/index.js:2187:25)
|
||||
|
||||
at async file:///app/dist/index.js:6178:28 {
|
||||
|
||||
length: 124,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '337',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
GET /api/dlc-products 500 in 15ms
|
||||
|
||||
GET /api/dlc-products 500 in 7ms
|
||||
|
||||
Error fetching DLC products: error: column dlc_products.stock_epuise does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getDlcProducts (file:///app/dist/index.js:2187:25)
|
||||
|
||||
at async file:///app/dist/index.js:6178:28 {
|
||||
|
||||
length: 124,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '337',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
Error fetching DLC products: error: column dlc_products.stock_epuise does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getDlcProducts (file:///app/dist/index.js:2187:25)
|
||||
|
||||
at async file:///app/dist/index.js:6178:28 {
|
||||
|
||||
length: 124,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '337',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
-204
@@ -1,204 +0,0 @@
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: '2025-08-01',
|
||||
|
||||
endDate: '2025-08-31',
|
||||
|
||||
storeId: '2',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: [ 2 ]
|
||||
|
||||
Fetching deliveries by date range: 2025-08-01 to 2025-08-31
|
||||
|
||||
Orders returned: 8 items
|
||||
|
||||
GET /api/orders 304 in 170ms
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 8,
|
||||
|
||||
deliveriesCount: 21,
|
||||
|
||||
pendingOrdersCount: 4,
|
||||
|
||||
averageDeliveryTime: 0.17647058823529413,
|
||||
|
||||
totalPalettes: 57,
|
||||
|
||||
totalPackages: 17
|
||||
|
||||
}
|
||||
|
||||
GET /api/stats/monthly 304 in 183ms
|
||||
|
||||
GET /api/publicities 200 in 171ms
|
||||
|
||||
Deliveries returned: 21 items
|
||||
|
||||
GET /api/deliveries 304 in 186ms
|
||||
|
||||
Orders returned: 10 items
|
||||
|
||||
GET /api/orders 304 in 201ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/groups 304 in 10ms
|
||||
|
||||
GET /api/publicities 200 in 15ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
GET /api/user 304 in 42ms
|
||||
|
||||
GET /api/groups 304 in 49ms
|
||||
|
||||
Customer Orders API called with: { groupIds: undefined, userRole: 'admin' }
|
||||
|
||||
GET /api/suppliers 304 in 52ms
|
||||
|
||||
Customer Orders returned: 34 items
|
||||
|
||||
GET /api/customer-orders 200 in 56ms
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 2 ], userRole: 'admin' }
|
||||
|
||||
Customer Orders returned: 25 items
|
||||
|
||||
GET /api/customer-orders 200 in 12ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
GET /api/user 304 in 25ms
|
||||
|
||||
GET /api/groups 304 in 26ms
|
||||
|
||||
DLC Products API called with: { groupIds: [ 2 ], filters: {}, userRole: 'admin' }
|
||||
|
||||
GET /api/suppliers 200 in 61ms
|
||||
|
||||
GET /api/dlc-products/stats 304 in 66ms
|
||||
|
||||
DLC Products returned: 154 items
|
||||
|
||||
GET /api/dlc-products 200 in 81ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
GET /api/user 304 in 20ms
|
||||
|
||||
Tasks API called with: { groupIds: [ 2 ], userRole: 'admin' }
|
||||
|
||||
Tasks returned: 9 items
|
||||
|
||||
GET /api/tasks 304 in 11ms
|
||||
|
||||
GET /api/users 200 in 137ms
|
||||
|
||||
GET /api/user 304 in 3ms
|
||||
|
||||
GET /api/groups 304 in 8ms
|
||||
|
||||
GET /api/user 304 in 6ms
|
||||
|
||||
GET /api/sav/stats 304 in 25ms
|
||||
|
||||
GET /api/sav/tickets 304 in 30ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
Error creating SAV ticket: ZodError: [
|
||||
|
||||
{
|
||||
|
||||
"code": "invalid_type",
|
||||
|
||||
"expected": "string",
|
||||
|
||||
"received": "undefined",
|
||||
|
||||
"path": [
|
||||
|
||||
"ticketNumber"
|
||||
|
||||
],
|
||||
|
||||
"message": "Required"
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
at get error [as error] (file:///app/node_modules/zod/v3/types.js:39:31)
|
||||
|
||||
at ZodObject.parse (file:///app/node_modules/zod/v3/types.js:114:22)
|
||||
|
||||
at file:///app/dist/index.js:6137:48
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
|
||||
|
||||
issues: [
|
||||
|
||||
{
|
||||
|
||||
code: 'invalid_type',
|
||||
|
||||
expected: 'string',
|
||||
|
||||
received: 'undefined',
|
||||
|
||||
path: [Array],
|
||||
|
||||
message: 'Required'
|
||||
|
||||
}
|
||||
|
||||
],
|
||||
|
||||
addIssue: [Function (anonymous)],
|
||||
|
||||
addIssues: [Function (anonymous)],
|
||||
|
||||
errors: [
|
||||
|
||||
{
|
||||
|
||||
code: 'invalid_type',
|
||||
|
||||
expected: 'string',
|
||||
|
||||
received: 'undefined',
|
||||
|
||||
path: [Array],
|
||||
|
||||
message: 'Required'
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
POST /api/sav/tickets 400 in 36ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
-205
@@ -1,205 +0,0 @@
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
GET /api/dlc-products/stats 200 in 302ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 51 commandes avec relations
|
||||
|
||||
Orders returned: 51 items
|
||||
|
||||
GET /api/orders 200 in 434ms
|
||||
|
||||
GET /api/groups 200 in 346ms
|
||||
|
||||
🌤️ [RESPONSE] Weather data prepared: {
|
||||
|
||||
hasCurrentYear: true,
|
||||
|
||||
hasPreviousYear: true,
|
||||
|
||||
location: 'Frouard, France'
|
||||
|
||||
}
|
||||
|
||||
GET /api/weather/current 200 in 446ms
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 20,
|
||||
|
||||
deliveriesCount: 42,
|
||||
|
||||
pendingOrdersCount: 8,
|
||||
|
||||
averageDeliveryTime: 0.3611111111111111,
|
||||
|
||||
totalPalettes: 120,
|
||||
|
||||
totalPackages: 36
|
||||
|
||||
}
|
||||
|
||||
GET /api/stats/monthly 200 in 444ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: [ 1 ]
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: [ 1 ]
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 86 livraisons avec relations
|
||||
|
||||
Deliveries returned: 86 items
|
||||
|
||||
GET /api/deliveries 200 in 455ms
|
||||
|
||||
Customer Orders returned: 10 items
|
||||
|
||||
GET /api/customer-orders 200 in 132ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 33 commandes avec relations
|
||||
|
||||
Orders returned: 33 items
|
||||
|
||||
GET /api/orders 200 in 295ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 48 livraisons avec relations
|
||||
|
||||
Deliveries returned: 48 items
|
||||
|
||||
GET /api/deliveries 200 in 248ms
|
||||
|
||||
Error fetching announcements: error: relation "announcements" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getAnnouncements (file:///app/dist/index.js:2074:25)
|
||||
|
||||
at async file:///app/dist/index.js:7420:30 {
|
||||
|
||||
length: 113,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42P01',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '829',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '1392',
|
||||
|
||||
routine: 'parserOpenTable'
|
||||
|
||||
}
|
||||
|
||||
GET /api/announcements 500 in 7ms
|
||||
|
||||
Error fetching announcements: error: relation "announcements" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getAnnouncements (file:///app/dist/index.js:2074:25)
|
||||
|
||||
at async file:///app/dist/index.js:7420:30 {
|
||||
|
||||
length: 113,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42P01',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '829',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '1392',
|
||||
|
||||
routine: 'parserOpenTable'
|
||||
|
||||
}
|
||||
|
||||
GET /api/announcements 500 in 11ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
-202
@@ -1,202 +0,0 @@
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
📋 PUBLICITES FETCHED: 29 résultats pour année 2025
|
||||
|
||||
🔍 PREMIERS RESULTATS: [
|
||||
|
||||
'1. N°2501 - Blanc',
|
||||
|
||||
'2. N°2502 - Moins de 1€ 2€ 3€ 4€ 5€',
|
||||
|
||||
'3. N°2503 - Imbattables'
|
||||
|
||||
]
|
||||
|
||||
📋 PUBLICITIES RETURNED: { count: 29 }
|
||||
|
||||
GET /api/publicities 304 in 65ms
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
GET /api/announcements 304 in 79ms
|
||||
|
||||
GET /api/user 304 in 3ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin orders filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all orders
|
||||
|
||||
📢 [SERVER] Fetching announcements for user: admin_local environment: production
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 64 commandes avec relations
|
||||
|
||||
Orders returned: 64 items
|
||||
|
||||
GET /api/orders 304 in 184ms
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
📢 [SERVER] User found: { username: 'admin', role: 'admin' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
Customer Orders returned: 11 items
|
||||
|
||||
GET /api/customer-orders 304 in 211ms
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
GET /api/groups 304 in 96ms
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
GET /api/announcements 304 in 243ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 82 livraisons avec relations
|
||||
|
||||
Deliveries returned: 82 items
|
||||
|
||||
GET /api/deliveries 304 in 251ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/suppliers 304 in 8ms
|
||||
|
||||
🔍 Avoirs API called with: { groupIds: undefined, userRole: 'admin' }
|
||||
|
||||
📋 Avoirs returned: 0 items
|
||||
|
||||
GET /api/avoirs 304 in 13ms
|
||||
|
||||
POST /api/avoirs 400 in 6ms
|
||||
-199
@@ -1,199 +0,0 @@
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
⏰ Automatic backup scheduled for daily 2:00 AM+ (native timer)
|
||||
|
||||
file:///app/dist/index.js:11
|
||||
|
||||
throw Error('Dynamic require of "' + x2 + '" is not supported');
|
||||
|
||||
|
||||
|
||||
^
|
||||
|
||||
Error: Dynamic require of "path" is not supported
|
||||
|
||||
at file:///app/dist/index.js:11:9
|
||||
|
||||
at node_modules/mime-types/index.js (file:///app/dist/index.js:13971:19)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/type-is/index.js (file:///app/dist/index.js:14061:16)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/multer/lib/make-middleware.js (file:///app/dist/index.js:18269:15)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/multer/index.js (file:///app/dist/index.js:22048:26)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at file:///app/dist/index.js:29500:29
|
||||
|
||||
Node.js v20.19.4
|
||||
|
||||
Applying DLC migration...
|
||||
|
||||
NOTICE: column "stock_epuise" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: column "stock_epuise_by" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: column "stock_epuise_at" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: relation "idx_dlc_products_stock_epuise" already exists, skipping
|
||||
|
||||
ALTER TABLE
|
||||
|
||||
␍CREATE INDEX
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
⏰ Automatic backup scheduled for daily 2:00 AM+ (native timer)
|
||||
|
||||
file:///app/dist/index.js:11
|
||||
|
||||
throw Error('Dynamic require of "' + x2 + '" is not supported');
|
||||
|
||||
|
||||
|
||||
^
|
||||
|
||||
Error: Dynamic require of "path" is not supported
|
||||
|
||||
at file:///app/dist/index.js:11:9
|
||||
|
||||
at node_modules/mime-types/index.js (file:///app/dist/index.js:13971:19)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/type-is/index.js (file:///app/dist/index.js:14061:16)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/multer/lib/make-middleware.js (file:///app/dist/index.js:18269:15)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/multer/index.js (file:///app/dist/index.js:22048:26)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at file:///app/dist/index.js:29500:29
|
||||
|
||||
Node.js v20.19.4
|
||||
|
||||
Applying DLC migration...
|
||||
|
||||
NOTICE: column "stock_epuise" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: column "stock_epuise_by" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: column "stock_epuise_at" of relation "dlc_products" already exists, skipping
|
||||
|
||||
NOTICE: relation "idx_dlc_products_stock_epuise" already exists, skipping
|
||||
|
||||
ALTER TABLE
|
||||
|
||||
␍CREATE INDEX
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db'
|
||||
|
||||
}
|
||||
|
||||
🐳 PRODUCTION: Using standard PostgreSQL
|
||||
|
||||
✅ PostgreSQL connection test successful
|
||||
|
||||
🔗 Database initialization: {
|
||||
|
||||
NODE_ENV: 'production',
|
||||
|
||||
isProduction: true,
|
||||
|
||||
hasDbUrl: true,
|
||||
|
||||
dbHost: 'logiflow-db:5432'
|
||||
|
||||
}
|
||||
|
||||
✅ Using DatabaseStorage (production PostgreSQL)
|
||||
|
||||
⏰ Automatic backup scheduled for daily 2:00 AM+ (native timer)
|
||||
|
||||
file:///app/dist/index.js:11
|
||||
|
||||
throw Error('Dynamic require of "' + x2 + '" is not supported');
|
||||
|
||||
|
||||
|
||||
^
|
||||
|
||||
Error: Dynamic require of "path" is not supported
|
||||
|
||||
at file:///app/dist/index.js:11:9
|
||||
|
||||
at node_modules/mime-types/index.js (file:///app/dist/index.js:13971:19)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/type-is/index.js (file:///app/dist/index.js:14061:16)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/multer/lib/make-middleware.js (file:///app/dist/index.js:18269:15)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at node_modules/multer/index.js (file:///app/dist/index.js:22048:26)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at file:///app/dist/index.js:29500:29
|
||||
|
||||
Node.js v20.19.4
|
||||
|
||||
-205
@@ -1,205 +0,0 @@
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
hoursRemaining: 438287
|
||||
|
||||
}
|
||||
|
||||
🔍 [CACHE] Résultat cache: {
|
||||
|
||||
found: true,
|
||||
|
||||
isReconciled: true,
|
||||
|
||||
expired: false,
|
||||
|
||||
expiresAt: 2075-11-04T10:58:49.338Z,
|
||||
|
||||
currentTime: '2025-11-04T12:17:35.661Z'
|
||||
|
||||
}
|
||||
|
||||
🛡️ [CACHE] PERMANENT - Facture validée avec coche verte, AUCUNE vérification: {
|
||||
|
||||
invoiceReference: '22529151',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
exists: true,
|
||||
|
||||
invoiceAmount: '2653.75',
|
||||
|
||||
dueDate: null
|
||||
|
||||
}
|
||||
|
||||
✅ [INVOICE] Résultat depuis cache: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
errorMessage: null,
|
||||
|
||||
invoiceReference: '22529151',
|
||||
|
||||
supplierName: 'Sovacom',
|
||||
|
||||
invoiceAmount: 2653.75,
|
||||
|
||||
invoiceAmountTTC: 3184.5,
|
||||
|
||||
dueDate: null,
|
||||
|
||||
fromCache: true,
|
||||
|
||||
permanent: true
|
||||
|
||||
}
|
||||
|
||||
🔍 [INVOICE] Début vérification facture: { invoiceReference: 'FCLT035833', groupId: 1, forceRefresh: false }
|
||||
|
||||
🔍 [INVOICE] Vérification cache...
|
||||
|
||||
🔍 [CACHE] Recherche cache pour: {
|
||||
|
||||
invoiceReference: 'FCLT035833',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
cacheKey: '1_fclt035833'
|
||||
|
||||
}
|
||||
|
||||
✅ [DATABASE-CACHE] Cache hit pour: {
|
||||
|
||||
cacheKey: '1_fclt035833',
|
||||
|
||||
expires: 2075-11-04T10:58:49.353Z,
|
||||
|
||||
hoursRemaining: 438287
|
||||
|
||||
}
|
||||
|
||||
🔍 [CACHE] Résultat cache: {
|
||||
|
||||
found: true,
|
||||
|
||||
isReconciled: true,
|
||||
|
||||
expired: false,
|
||||
|
||||
expiresAt: 2075-11-04T10:58:49.353Z,
|
||||
|
||||
currentTime: '2025-11-04T12:17:35.662Z'
|
||||
|
||||
}
|
||||
|
||||
🛡️ [CACHE] PERMANENT - Facture validée avec coche verte, AUCUNE vérification: {
|
||||
|
||||
invoiceReference: 'FCLT035833',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
exists: true,
|
||||
|
||||
invoiceAmount: '1307.26',
|
||||
|
||||
dueDate: null
|
||||
|
||||
}
|
||||
|
||||
✅ [INVOICE] Résultat depuis cache: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
errorMessage: null,
|
||||
|
||||
invoiceReference: 'FCLT035833',
|
||||
|
||||
supplierName: 'Idvpc',
|
||||
|
||||
invoiceAmount: 1307.26,
|
||||
|
||||
invoiceAmountTTC: 1568.71,
|
||||
|
||||
dueDate: null,
|
||||
|
||||
fromCache: true,
|
||||
|
||||
permanent: true
|
||||
|
||||
}
|
||||
|
||||
💰 Livraisons nécessitant récupération TTC: 0
|
||||
|
||||
📅 Total échéances retournées: 34
|
||||
|
||||
GET /api/payment-schedule 304 in 892ms
|
||||
|
||||
📊 [EXPORT] Début de l'export Excel
|
||||
|
||||
🔍 [EXPORT] Utilisateur: admin (admin)
|
||||
|
||||
📋 [EXPORT] Paramètres: {
|
||||
|
||||
groupId: 1,
|
||||
|
||||
month: '2025-11',
|
||||
|
||||
paymentMethods: [ 'Non défini' ],
|
||||
|
||||
includeHT: true,
|
||||
|
||||
includeTTC: true
|
||||
|
||||
}
|
||||
|
||||
❌ PRODUCTION: Delivery #127 (store 2) linked to order #81 (store 1) - STORE MISMATCH DETECTED!
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 357 livraisons avec relations
|
||||
|
||||
📦 [EXPORT] Import du module xlsx...
|
||||
|
||||
❌ [EXPORT] Erreur export Excel: Error: Dynamic require of "stream" is not supported
|
||||
|
||||
at file:///app/dist/index.js:11:9
|
||||
|
||||
at make_xlsx_lib (file:///app/dist/index.js:44815:22)
|
||||
|
||||
at node_modules/xlsx/xlsx.js (file:///app/dist/index.js:44819:41)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at file:///app/dist/index.js:47198:63
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/dist/index.js:47198:20
|
||||
|
||||
❌ [EXPORT] Message: Dynamic require of "stream" is not supported
|
||||
|
||||
❌ [EXPORT] Stack: Error: Dynamic require of "stream" is not supported
|
||||
|
||||
at file:///app/dist/index.js:11:9
|
||||
|
||||
at make_xlsx_lib (file:///app/dist/index.js:44815:22)
|
||||
|
||||
at node_modules/xlsx/xlsx.js (file:///app/dist/index.js:44819:41)
|
||||
|
||||
at __require2 (file:///app/dist/index.js:17:50)
|
||||
|
||||
at file:///app/dist/index.js:47198:63
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/dist/index.js:47198:20
|
||||
|
||||
POST /api/payment-schedule/export 500 in 936ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
-205
@@ -1,205 +0,0 @@
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
isReconciled: true,
|
||||
|
||||
expired: false,
|
||||
|
||||
expiresAt: 2075-11-04T10:58:49.326Z,
|
||||
|
||||
currentTime: '2025-11-04T12:15:03.672Z'
|
||||
|
||||
}
|
||||
|
||||
🛡️ [CACHE] PERMANENT - Facture validée avec coche verte, AUCUNE vérification: {
|
||||
|
||||
invoiceReference: '000752796',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
exists: true,
|
||||
|
||||
invoiceAmount: '1203.12',
|
||||
|
||||
dueDate: null
|
||||
|
||||
}
|
||||
|
||||
✅ [INVOICE] Résultat depuis cache: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
errorMessage: null,
|
||||
|
||||
invoiceReference: '000752796',
|
||||
|
||||
supplierName: 'CMP',
|
||||
|
||||
invoiceAmount: 1203.12,
|
||||
|
||||
invoiceAmountTTC: 1443.74,
|
||||
|
||||
dueDate: null,
|
||||
|
||||
fromCache: true,
|
||||
|
||||
permanent: true
|
||||
|
||||
}
|
||||
|
||||
🔍 [INVOICE] Début vérification facture: { invoiceReference: '22529151', groupId: 1, forceRefresh: false }
|
||||
|
||||
🔍 [INVOICE] Vérification cache...
|
||||
|
||||
🔍 [CACHE] Recherche cache pour: { invoiceReference: '22529151', groupId: 1, cacheKey: '1_22529151' }
|
||||
|
||||
✅ [DATABASE-CACHE] Cache hit pour: {
|
||||
|
||||
cacheKey: '1_22529151',
|
||||
|
||||
expires: 2075-11-04T10:58:49.338Z,
|
||||
|
||||
hoursRemaining: 438287
|
||||
|
||||
}
|
||||
|
||||
🔍 [CACHE] Résultat cache: {
|
||||
|
||||
found: true,
|
||||
|
||||
isReconciled: true,
|
||||
|
||||
expired: false,
|
||||
|
||||
expiresAt: 2075-11-04T10:58:49.338Z,
|
||||
|
||||
currentTime: '2025-11-04T12:15:03.675Z'
|
||||
|
||||
}
|
||||
|
||||
🛡️ [CACHE] PERMANENT - Facture validée avec coche verte, AUCUNE vérification: {
|
||||
|
||||
invoiceReference: '22529151',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
exists: true,
|
||||
|
||||
invoiceAmount: '2653.75',
|
||||
|
||||
dueDate: null
|
||||
|
||||
}
|
||||
|
||||
✅ [INVOICE] Résultat depuis cache: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
errorMessage: null,
|
||||
|
||||
invoiceReference: '22529151',
|
||||
|
||||
supplierName: 'Sovacom',
|
||||
|
||||
invoiceAmount: 2653.75,
|
||||
|
||||
invoiceAmountTTC: 3184.5,
|
||||
|
||||
dueDate: null,
|
||||
|
||||
fromCache: true,
|
||||
|
||||
permanent: true
|
||||
|
||||
}
|
||||
|
||||
🔍 [INVOICE] Début vérification facture: { invoiceReference: 'FCLT035833', groupId: 1, forceRefresh: false }
|
||||
|
||||
🔍 [INVOICE] Vérification cache...
|
||||
|
||||
🔍 [CACHE] Recherche cache pour: {
|
||||
|
||||
invoiceReference: 'FCLT035833',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
cacheKey: '1_fclt035833'
|
||||
|
||||
}
|
||||
|
||||
✅ [DATABASE-CACHE] Cache hit pour: {
|
||||
|
||||
cacheKey: '1_fclt035833',
|
||||
|
||||
expires: 2075-11-04T10:58:49.353Z,
|
||||
|
||||
hoursRemaining: 438287
|
||||
|
||||
}
|
||||
|
||||
🔍 [CACHE] Résultat cache: {
|
||||
|
||||
found: true,
|
||||
|
||||
isReconciled: true,
|
||||
|
||||
expired: false,
|
||||
|
||||
expiresAt: 2075-11-04T10:58:49.353Z,
|
||||
|
||||
currentTime: '2025-11-04T12:15:03.677Z'
|
||||
|
||||
}
|
||||
|
||||
🛡️ [CACHE] PERMANENT - Facture validée avec coche verte, AUCUNE vérification: {
|
||||
|
||||
invoiceReference: 'FCLT035833',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
exists: true,
|
||||
|
||||
invoiceAmount: '1307.26',
|
||||
|
||||
dueDate: null
|
||||
|
||||
}
|
||||
|
||||
✅ [INVOICE] Résultat depuis cache: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
errorMessage: null,
|
||||
|
||||
invoiceReference: 'FCLT035833',
|
||||
|
||||
supplierName: 'Idvpc',
|
||||
|
||||
invoiceAmount: 1307.26,
|
||||
|
||||
invoiceAmountTTC: 1568.71,
|
||||
|
||||
dueDate: null,
|
||||
|
||||
fromCache: true,
|
||||
|
||||
permanent: true
|
||||
|
||||
}
|
||||
|
||||
💰 Livraisons nécessitant récupération TTC: 0
|
||||
|
||||
📅 Total échéances retournées: 34
|
||||
|
||||
GET /api/payment-schedule 304 in 17159ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
-238
@@ -1,238 +0,0 @@
|
||||
Administration
|
||||
|
||||
User-related
|
||||
|
||||
|
||||
Environment-related
|
||||
|
||||
Registries
|
||||
|
||||
Logs
|
||||
|
||||
Notifications
|
||||
|
||||
Settings
|
||||
|
||||
New version available 2.27.9
|
||||
DismissSee what's new
|
||||
Community Edition
|
||||
2.27.6 LTS
|
||||
Containers>logiflow-logiflow-1>Logs
|
||||
Container logs
|
||||
|
||||
|
||||
admin
|
||||
Log viewer settings
|
||||
Auto-refresh logs
|
||||
Wrap lines
|
||||
Display timestamps
|
||||
Fetch
|
||||
All logs
|
||||
Search
|
||||
Filter...
|
||||
Lines
|
||||
100
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '28',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
GET /api/sav/stats 500 in 9ms
|
||||
|
||||
GET /api/sav/tickets 500 in 11ms
|
||||
|
||||
Error fetching SAV tickets: error: column sav_tickets.priority does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getSavTickets (file:///app/dist/index.js:1974:25)
|
||||
|
||||
at async file:///app/dist/index.js:6064:23 {
|
||||
|
||||
length: 119,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '350',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
PUT /api/customer-orders/56 401 in 1ms
|
||||
|
||||
📄 SPA: Serving index.html for /customer-orders
|
||||
|
||||
Error fetching SAV stats: error: column "priority" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getSavTicketStats (file:///app/dist/index.js:2046:25)
|
||||
|
||||
at async file:///app/dist/index.js:6251:21 {
|
||||
|
||||
length: 108,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '28',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
Error fetching SAV tickets: error: column sav_tickets.priority does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getSavTickets (file:///app/dist/index.js:1974:25)
|
||||
|
||||
at async file:///app/dist/index.js:6064:23 {
|
||||
|
||||
length: 119,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '350',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
GET /api/sav/stats 500 in 11ms
|
||||
|
||||
GET /api/sav/tickets 500 in 12ms
|
||||
|
||||
GET /api/user 401 in 2ms
|
||||
|
||||
📄 SPA: Serving index.html for /auth
|
||||
|
||||
GET /api/user 401 in 1ms
|
||||
|
||||
GET /api/user 401 in 1ms
|
||||
|
||||
GET /api/default-credentials-check 304 in 3ms
|
||||
-234
@@ -1,234 +0,0 @@
|
||||
Administration
|
||||
|
||||
User-related
|
||||
|
||||
|
||||
Environment-related
|
||||
|
||||
Registries
|
||||
|
||||
Logs
|
||||
|
||||
Notifications
|
||||
|
||||
Settings
|
||||
|
||||
New version available 2.27.9
|
||||
DismissSee what's new
|
||||
Community Edition
|
||||
2.27.6 LTS
|
||||
Containers>logiflow-logiflow-1>Logs
|
||||
Container logs
|
||||
|
||||
|
||||
admin
|
||||
Log viewer settings
|
||||
Auto-refresh logs
|
||||
Wrap lines
|
||||
Display timestamps
|
||||
Fetch
|
||||
All logs
|
||||
Search
|
||||
Filter...
|
||||
Lines
|
||||
100
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: [ 1 ]
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: [ 1 ]
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
Customer Orders returned: 10 items
|
||||
|
||||
GET /api/customer-orders 304 in 63ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 33 commandes avec relations
|
||||
|
||||
Orders returned: 33 items
|
||||
|
||||
GET /api/orders 304 in 128ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 49 livraisons avec relations
|
||||
|
||||
Deliveries returned: 49 items
|
||||
|
||||
GET /api/deliveries 304 in 154ms
|
||||
|
||||
GET /api/groups 304 in 57ms
|
||||
|
||||
GET /api/user 304 in 7ms
|
||||
|
||||
GET /api/suppliers 304 in 9ms
|
||||
|
||||
Error fetching DLC products: error: column dlc_products.stock_epuise does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getDlcProducts (file:///app/dist/index.js:2187:25)
|
||||
|
||||
at async file:///app/dist/index.js:6178:28 {
|
||||
|
||||
length: 124,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '337',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
GET /api/dlc-products 500 in 19ms
|
||||
|
||||
Error fetching DLC products: error: column dlc_products.stock_epuise does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getDlcProducts (file:///app/dist/index.js:2187:25)
|
||||
|
||||
at async file:///app/dist/index.js:6178:28 {
|
||||
|
||||
length: 124,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '337',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
GET /api/dlc-products 500 in 27ms
|
||||
|
||||
Error fetching DLC products: error: column dlc_products.stock_epuise does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getDlcProducts (file:///app/dist/index.js:2187:25)
|
||||
|
||||
at async file:///app/dist/index.js:6178:28 {
|
||||
|
||||
length: 124,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '337',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
-238
@@ -1,238 +0,0 @@
|
||||
Administration
|
||||
|
||||
User-related
|
||||
|
||||
|
||||
Environment-related
|
||||
|
||||
Registries
|
||||
|
||||
Logs
|
||||
|
||||
Notifications
|
||||
|
||||
Settings
|
||||
|
||||
New version available 2.27.9
|
||||
DismissSee what's new
|
||||
Community Edition
|
||||
2.27.6 LTS
|
||||
Containers>logiflow-logiflow-1>Logs
|
||||
Container logs
|
||||
|
||||
|
||||
admin
|
||||
Log viewer settings
|
||||
Auto-refresh logs
|
||||
Wrap lines
|
||||
Display timestamps
|
||||
Fetch
|
||||
All logs
|
||||
Search
|
||||
Filter...
|
||||
Lines
|
||||
100
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
taskGroups: [
|
||||
|
||||
{ id: 99, title: 'test', groupId: 1 },
|
||||
|
||||
{ id: 98, title: 'test', groupId: 1 },
|
||||
|
||||
{ id: 91, title: 'refaire podium lot assiettes', groupId: 2 }
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
GET /api/tasks 200 in 461ms
|
||||
|
||||
GET /api/user 304 in 37ms
|
||||
|
||||
📢 [SERVER] User found: { username: 'admin', role: 'admin' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
GET /api/announcements 200 in 36ms
|
||||
|
||||
GET /api/publicities 304 in 28ms
|
||||
|
||||
GET /api/user 304 in 6ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: [ 1 ]
|
||||
|
||||
Fetching all orders
|
||||
|
||||
📢 [SERVER] Fetching announcements for user: admin_local environment: production
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: [ 1 ]
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 33 commandes avec relations
|
||||
|
||||
Orders returned: 33 items
|
||||
|
||||
GET /api/orders 200 in 94ms
|
||||
|
||||
📢 [SERVER] User found: { username: 'admin', role: 'admin' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 49 livraisons avec relations
|
||||
|
||||
Deliveries returned: 49 items
|
||||
|
||||
GET /api/deliveries 304 in 150ms
|
||||
|
||||
GET /api/groups 304 in 94ms
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
Customer Orders returned: 10 items
|
||||
|
||||
GET /api/customer-orders 304 in 156ms
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
GET /api/announcements 200 in 157ms
|
||||
|
||||
GET /api/user 304 in 7ms
|
||||
|
||||
GET /api/publicities 304 in 12ms
|
||||
|
||||
GET /api/publicities 200 in 10ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
-235
@@ -1,235 +0,0 @@
|
||||
Administration
|
||||
|
||||
User-related
|
||||
|
||||
|
||||
Environment-related
|
||||
|
||||
Registries
|
||||
|
||||
Logs
|
||||
|
||||
Notifications
|
||||
|
||||
Settings
|
||||
|
||||
New version available 2.33.1
|
||||
DismissSee what's new
|
||||
Community Edition
|
||||
2.27.6 LTS
|
||||
Containers>logiflow-logiflow-1>Logs
|
||||
Container logs
|
||||
|
||||
|
||||
admin
|
||||
Log viewer settings
|
||||
Auto-refresh logs
|
||||
Wrap lines
|
||||
Display timestamps
|
||||
Fetch
|
||||
All logs
|
||||
Search
|
||||
Filter...
|
||||
Lines
|
||||
100
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '183',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_target.c',
|
||||
|
||||
line: '1075',
|
||||
|
||||
routine: 'checkInsertTargets'
|
||||
|
||||
}
|
||||
|
||||
❌ Erreur sauvegarde cache not found BL: error: column "is_reconciled" of relation "invoice_verification_cache" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.createInvoiceVerificationCache (file:///app/dist/index.js:2193:27)
|
||||
|
||||
at async InvoiceVerificationService.verifyInvoiceByBL (file:///app/dist/index.js:4947:15)
|
||||
|
||||
at async file:///app/dist/index.js:6758:18 {
|
||||
|
||||
length: 153,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '183',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_target.c',
|
||||
|
||||
line: '1075',
|
||||
|
||||
routine: 'checkInsertTargets'
|
||||
|
||||
}
|
||||
|
||||
🔗 PRODUCTION: getOrder #58 found 1 associated deliveries
|
||||
|
||||
✅ PRODUCTION: getDelivery #88 found associated order #58 with status: delivered
|
||||
|
||||
POST /api/deliveries/88/verify-invoice 403 in 1919ms
|
||||
|
||||
❌ Erreur création cache: error: column "is_reconciled" of relation "invoice_verification_cache" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.createInvoiceVerificationCache (file:///app/dist/index.js:2193:27)
|
||||
|
||||
at async InvoiceVerificationService.verifyInvoiceByBL (file:///app/dist/index.js:4947:15)
|
||||
|
||||
at async file:///app/dist/index.js:6758:18 {
|
||||
|
||||
length: 153,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '183',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_target.c',
|
||||
|
||||
line: '1075',
|
||||
|
||||
routine: 'checkInsertTargets'
|
||||
|
||||
}
|
||||
|
||||
❌ Erreur sauvegarde cache not found BL: error: column "is_reconciled" of relation "invoice_verification_cache" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.createInvoiceVerificationCache (file:///app/dist/index.js:2193:27)
|
||||
|
||||
at async InvoiceVerificationService.verifyInvoiceByBL (file:///app/dist/index.js:4947:15)
|
||||
|
||||
at async file:///app/dist/index.js:6758:18 {
|
||||
|
||||
length: 153,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '183',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_target.c',
|
||||
|
||||
line: '1075',
|
||||
|
||||
routine: 'checkInsertTargets'
|
||||
|
||||
}
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: false,
|
||||
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucun BL correspondant trouvé dans NocoDB'
|
||||
|
||||
-589
@@ -1,589 +0,0 @@
|
||||
LOGIFLOW - RAPPORT SCHÉMA BASE DE DONNÉES PRODUCTION
|
||||
===============================================
|
||||
|
||||
GÉNÉRÉ LE : 2025-09-03T13:42:55.993Z
|
||||
SERVEUR : Production privé LogiFlow
|
||||
ENVIRONNEMENT : PostgreSQL Docker
|
||||
UTILISATEUR : admin
|
||||
|
||||
===============================================
|
||||
RÉSUMÉ DU SCAN
|
||||
===============================================
|
||||
|
||||
TOTAL DES TABLES TROUVÉES: 34
|
||||
==========================================
|
||||
|
||||
TABLE: CALENDAR_EVENTS
|
||||
=====================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('calendar_events_id_seq'::regclass)
|
||||
02. title : character varying(255) NOT NULL
|
||||
03. description : text NULL
|
||||
04. start_date : timestamp without time zone NOT NULL
|
||||
05. end_date : timestamp without time zone NOT NULL
|
||||
06. event_type : character varying(50) NULL DEFAULT 'custom'::character varying
|
||||
07. group_id : integer NULL
|
||||
08. created_by : character varying(255) NULL
|
||||
09. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
10. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: CLIENT_ORDERS
|
||||
===================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('client_orders_id_seq'::regclass)
|
||||
02. order_number : character varying(255) NOT NULL
|
||||
03. client_name : character varying(255) NOT NULL
|
||||
04. client_contact : character varying(255) NULL
|
||||
05. product_description : text NOT NULL
|
||||
06. quantity : integer NOT NULL DEFAULT 1
|
||||
07. unit_price : numeric NULL
|
||||
08. total_amount : numeric NULL
|
||||
09. status : character varying(50) NULL DEFAULT 'pending'::character varying
|
||||
10. delivery_date : date NULL
|
||||
11. notes : text NULL
|
||||
12. group_id : integer NULL
|
||||
13. created_by : character varying(255) NULL
|
||||
14. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
15. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: COMMAND_ITEMS
|
||||
===================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('command_items_id_seq'::regclass)
|
||||
02. command_id : integer NULL
|
||||
03. product_name : character varying(255) NOT NULL
|
||||
04. product_reference : character varying(255) NULL
|
||||
05. quantity : integer NOT NULL
|
||||
06. unit_price : numeric NULL
|
||||
07. total_price : numeric NULL
|
||||
08. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: COMMANDS
|
||||
==============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('commands_id_seq'::regclass)
|
||||
02. command_number : character varying(255) NOT NULL
|
||||
03. supplier_id : integer NULL
|
||||
04. group_id : integer NULL
|
||||
05. command_date : date NOT NULL
|
||||
06. expected_delivery_date : date NULL
|
||||
07. status : character varying(50) NULL DEFAULT 'pending'::character varying
|
||||
08. total_amount : numeric NULL
|
||||
09. notes : text NULL
|
||||
10. created_by : character varying(255) NULL
|
||||
11. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
12. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: CUSTOMER_ORDERS
|
||||
=====================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('customer_orders_id_seq'::regclass)
|
||||
02. order_taker : character varying(255) NOT NULL
|
||||
03. customer_name : character varying(255) NOT NULL
|
||||
04. customer_phone : character varying(255) NULL
|
||||
05. customer_email : character varying(255) NULL
|
||||
06. product_designation : text NOT NULL
|
||||
07. product_reference : character varying(255) NULL
|
||||
08. gencode : character varying(255) NULL
|
||||
09. quantity : integer NULL DEFAULT 1
|
||||
10. supplier_id : integer NULL
|
||||
11. status : character varying(100) NULL DEFAULT 'En attente de Commande'::character varying
|
||||
12. deposit : numeric NULL DEFAULT 0.00
|
||||
13. is_promotional_price : boolean NULL DEFAULT false
|
||||
14. customer_notified : boolean NULL DEFAULT false
|
||||
15. notes : text NULL
|
||||
16. group_id : integer NULL
|
||||
17. created_by : character varying(255) NULL
|
||||
18. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
19. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 50
|
||||
|
||||
TABLE: CUSTOMERS
|
||||
===============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('customers_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. contact_person : character varying(255) NULL
|
||||
04. phone : character varying(255) NULL
|
||||
05. email : character varying(255) NULL
|
||||
06. address : text NULL
|
||||
07. city : character varying(255) NULL
|
||||
08. postal_code : character varying(20) NULL
|
||||
09. notes : text NULL
|
||||
10. group_id : integer NULL
|
||||
11. created_by : character varying(255) NULL
|
||||
12. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
13. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: DASHBOARD_MESSAGES
|
||||
========================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('dashboard_messages_id_seq'::regclass)
|
||||
02. title : character varying(255) NOT NULL
|
||||
03. content : text NOT NULL
|
||||
04. type : character varying(50) NOT NULL DEFAULT 'info'::character varying
|
||||
05. store_id : integer NULL
|
||||
06. created_by : character varying(255) NOT NULL
|
||||
07. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 2
|
||||
|
||||
TABLE: DATABASE_BACKUPS
|
||||
======================
|
||||
|
||||
01. id : character varying(255) NOT NULL
|
||||
02. filename : character varying(255) NOT NULL
|
||||
03. description : text NULL
|
||||
04. size : bigint NULL DEFAULT 0
|
||||
05. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
06. created_by : character varying(255) NOT NULL
|
||||
07. tables_count : integer NULL DEFAULT 0
|
||||
08. status : character varying(50) NULL DEFAULT 'creating'::character varying
|
||||
09. backup_type : character varying(10) NULL DEFAULT 'manual'::character varying
|
||||
📈 Nombre d'enregistrements: 7
|
||||
|
||||
TABLE: DELIVERIES
|
||||
================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('deliveries_id_seq'::regclass)
|
||||
02. order_id : integer NULL
|
||||
03. supplier_id : integer NULL
|
||||
04. group_id : integer NULL
|
||||
05. scheduled_date : date NOT NULL
|
||||
06. delivered_date : timestamp without time zone NULL
|
||||
07. quantity : integer NOT NULL
|
||||
08. unit : character varying(50) NOT NULL
|
||||
09. status : character varying(50) NULL DEFAULT 'pending'::character varying
|
||||
10. notes : text NULL
|
||||
11. bl_number : character varying(255) NULL
|
||||
12. bl_amount : numeric NULL
|
||||
13. invoice_reference : character varying(255) NULL
|
||||
14. invoice_amount : numeric NULL
|
||||
15. reconciled : boolean NULL DEFAULT false
|
||||
16. validated_at : timestamp without time zone NULL
|
||||
17. created_by : character varying(255) NULL
|
||||
18. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
19. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 133
|
||||
|
||||
TABLE: DELIVERY_ITEMS
|
||||
====================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('delivery_items_id_seq'::regclass)
|
||||
02. delivery_id : integer NULL
|
||||
03. product_name : character varying(255) NOT NULL
|
||||
04. product_reference : character varying(255) NULL
|
||||
05. quantity : integer NOT NULL
|
||||
06. unit : character varying(50) NULL
|
||||
07. notes : text NULL
|
||||
08. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: DLC_PRODUCTS
|
||||
==================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('dlc_products_id_seq'::regclass)
|
||||
02. product_name : character varying(255) NOT NULL
|
||||
03. expiry_date : date NOT NULL
|
||||
04. date_type : character varying(50) NOT NULL DEFAULT 'DLC'::character varying
|
||||
05. quantity : integer NOT NULL DEFAULT 1
|
||||
06. unit : character varying(50) NOT NULL DEFAULT 'unité'::character varying
|
||||
07. supplier_id : integer NOT NULL
|
||||
08. location : character varying(255) NOT NULL DEFAULT 'Magasin'::character varying
|
||||
09. status : character varying(50) NOT NULL DEFAULT 'active'::character varying
|
||||
10. notes : text NULL
|
||||
11. alert_threshold : integer NOT NULL DEFAULT 15
|
||||
12. validated_at : timestamp without time zone NULL
|
||||
13. validated_by : character varying(255) NULL
|
||||
14. group_id : integer NOT NULL
|
||||
15. created_by : character varying(255) NOT NULL
|
||||
16. created_at : timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
17. updated_at : timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
18. gencode : character varying(255) NULL
|
||||
19. name : character varying(255) NULL
|
||||
20. dlc_date : date NULL
|
||||
21. product_code : character varying(255) NULL
|
||||
22. description : text NULL
|
||||
23. stock_epuise : boolean NOT NULL DEFAULT false
|
||||
24. stock_epuise_by : character varying(255) NULL
|
||||
25. stock_epuise_at : timestamp without time zone NULL
|
||||
📈 Nombre d'enregistrements: 501
|
||||
|
||||
TABLE: GROUPS
|
||||
============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('groups_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. color : character varying(20) NULL DEFAULT '#1976D2'::character varying
|
||||
04. nocodb_config_id : integer NULL
|
||||
05. nocodb_table_id : character varying(255) NULL
|
||||
06. nocodb_table_name : character varying(255) NULL
|
||||
07. invoice_column_name : character varying(255) NULL
|
||||
08. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
09. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
10. nocodb_bl_column_name : character varying(255) NULL
|
||||
11. nocodb_amount_column_name : character varying(255) NULL
|
||||
12. nocodb_supplier_column_name : character varying(255) NULL
|
||||
13. webhook_url : character varying(500) NULL
|
||||
📈 Nombre d'enregistrements: 2
|
||||
|
||||
TABLE: INVOICE_VERIFICATION_CACHE
|
||||
================================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('invoice_verification_cache_id_seq'::regclass)
|
||||
02. cache_key : character varying(255) NOT NULL
|
||||
03. group_id : integer NOT NULL
|
||||
04. invoice_reference : character varying(255) NOT NULL
|
||||
05. supplier_name : character varying(255) NULL
|
||||
06. exists : boolean NOT NULL
|
||||
07. match_type : character varying(50) NOT NULL
|
||||
08. error_message : text NULL
|
||||
09. cache_hit : boolean NULL DEFAULT false
|
||||
10. api_call_time : integer NULL
|
||||
11. expires_at : timestamp without time zone NOT NULL
|
||||
12. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
13. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 122
|
||||
|
||||
TABLE: INVOICE_VERIFICATIONS
|
||||
===========================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('invoice_verifications_id_seq'::regclass)
|
||||
02. delivery_id : integer NOT NULL
|
||||
03. group_id : integer NOT NULL
|
||||
04. invoice_reference : character varying(255) NOT NULL
|
||||
05. supplier_name : character varying(255) NULL
|
||||
06. exists : boolean NOT NULL
|
||||
07. match_type : character varying(50) NULL
|
||||
08. verified_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
09. is_valid : boolean NULL DEFAULT true
|
||||
10. last_checked_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 15
|
||||
|
||||
TABLE: INVOICES
|
||||
==============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('invoices_id_seq'::regclass)
|
||||
02. invoice_number : character varying(255) NOT NULL
|
||||
03. supplier_id : integer NULL
|
||||
04. group_id : integer NULL
|
||||
05. invoice_date : date NOT NULL
|
||||
06. due_date : date NULL
|
||||
07. amount : numeric NOT NULL
|
||||
08. status : character varying(50) NULL DEFAULT 'pending'::character varying
|
||||
09. payment_date : date NULL
|
||||
10. notes : text NULL
|
||||
11. created_by : character varying(255) NULL
|
||||
12. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
13. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: NOCODB_CONFIG
|
||||
===================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('nocodb_config_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. base_url : character varying(255) NOT NULL
|
||||
04. project_id : character varying(255) NOT NULL
|
||||
05. api_token : character varying(255) NOT NULL
|
||||
06. description : text NULL
|
||||
07. is_active : boolean NULL DEFAULT true
|
||||
08. created_by : character varying(255) NULL
|
||||
09. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
10. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 1
|
||||
|
||||
TABLE: ORDERS
|
||||
============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('orders_id_seq'::regclass)
|
||||
02. supplier_id : integer NULL
|
||||
03. group_id : integer NULL
|
||||
04. planned_date : date NOT NULL
|
||||
05. quantity : integer NULL
|
||||
06. unit : character varying(50) NULL
|
||||
07. status : character varying(50) NULL DEFAULT 'pending'::character varying
|
||||
08. notes : text NULL
|
||||
09. created_by : character varying(255) NULL
|
||||
10. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
11. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 85
|
||||
|
||||
TABLE: PERMISSIONS
|
||||
=================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('permissions_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. display_name : character varying(255) NOT NULL
|
||||
04. description : text NULL
|
||||
05. category : character varying(255) NOT NULL
|
||||
06. action : character varying(255) NOT NULL
|
||||
07. resource : character varying(255) NOT NULL
|
||||
08. is_system : boolean NULL DEFAULT true
|
||||
09. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 7
|
||||
|
||||
TABLE: PUBLICITIES
|
||||
=================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('publicities_id_seq'::regclass)
|
||||
02. pub_number : character varying(255) NOT NULL
|
||||
03. designation : text NOT NULL
|
||||
04. start_date : date NOT NULL
|
||||
05. end_date : date NOT NULL
|
||||
06. year : integer NOT NULL
|
||||
07. created_by : character varying(255) NULL
|
||||
08. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
09. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 48
|
||||
|
||||
TABLE: PUBLICITY_PARTICIPATIONS
|
||||
==============================
|
||||
|
||||
01. publicity_id : integer NOT NULL
|
||||
02. group_id : integer NOT NULL
|
||||
📈 Nombre d'enregistrements: 46
|
||||
|
||||
TABLE: ROLE_PERMISSIONS
|
||||
======================
|
||||
|
||||
01. role_id : integer NOT NULL
|
||||
02. permission_id : integer NOT NULL
|
||||
📈 Nombre d'enregistrements: 21
|
||||
|
||||
TABLE: ROLES
|
||||
===========
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('roles_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. display_name : character varying(255) NOT NULL
|
||||
04. description : text NULL
|
||||
05. color : character varying(7) NULL DEFAULT '#6b7280'::character varying
|
||||
06. is_system : boolean NULL DEFAULT false
|
||||
07. is_active : boolean NULL DEFAULT true
|
||||
08. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
09. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 4
|
||||
|
||||
TABLE: SAV_TICKET_HISTORY
|
||||
========================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('sav_ticket_history_id_seq'::regclass)
|
||||
02. ticket_id : integer NOT NULL
|
||||
03. action : character varying(100) NOT NULL
|
||||
04. description : text NULL
|
||||
05. created_by : character varying(255) NOT NULL
|
||||
06. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 3
|
||||
|
||||
TABLE: SAV_TICKETS
|
||||
=================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('sav_tickets_id_seq'::regclass)
|
||||
02. ticket_number : character varying(50) NOT NULL
|
||||
03. supplier_id : integer NOT NULL
|
||||
04. group_id : integer NOT NULL
|
||||
05. product_gencode : character varying(255) NOT NULL
|
||||
06. product_reference : character varying(255) NULL
|
||||
07. product_designation : character varying(500) NOT NULL
|
||||
08. problem_type : character varying(100) NOT NULL
|
||||
09. problem_description : text NOT NULL
|
||||
10. resolution_description : text NULL
|
||||
11. status : character varying(50) NOT NULL DEFAULT 'nouveau'::character varying
|
||||
12. created_by : character varying(255) NOT NULL
|
||||
13. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
14. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
15. resolved_at : timestamp without time zone NULL
|
||||
16. closed_at : timestamp without time zone NULL
|
||||
17. client_name : character varying(255) NULL
|
||||
18. client_phone : character varying(255) NULL
|
||||
19. priority : character varying(50) NOT NULL DEFAULT 'normale'::character varying
|
||||
📈 Nombre d'enregistrements: 1
|
||||
|
||||
TABLE: SESSION
|
||||
=============
|
||||
|
||||
01. sid : character varying NOT NULL
|
||||
02. sess : json NOT NULL
|
||||
03. expire : timestamp without time zone NOT NULL
|
||||
📈 Nombre d'enregistrements: 13
|
||||
|
||||
TABLE: SESSIONS
|
||||
==============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('sessions_id_seq'::regclass)
|
||||
02. user_id : character varying(255) NULL
|
||||
03. session_token : character varying(255) NOT NULL
|
||||
04. expires_at : timestamp without time zone NOT NULL
|
||||
05. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: STORES
|
||||
============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('stores_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. address : text NULL
|
||||
04. city : character varying(255) NULL
|
||||
05. postal_code : character varying(20) NULL
|
||||
06. phone : character varying(255) NULL
|
||||
07. manager_id : character varying(255) NULL
|
||||
08. is_active : boolean NULL DEFAULT true
|
||||
09. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
10. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: SUPPLIERS
|
||||
===============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('suppliers_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. contact : character varying(255) NULL
|
||||
04. phone : character varying(255) NULL
|
||||
05. has_dlc : boolean NULL DEFAULT false
|
||||
06. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
07. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
08. automatic_reconciliation : boolean NULL DEFAULT false
|
||||
📈 Nombre d'enregistrements: 39
|
||||
|
||||
TABLE: TASKS
|
||||
===========
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('tasks_id_seq'::regclass)
|
||||
02. title : character varying(255) NOT NULL
|
||||
03. description : text NULL
|
||||
04. status : character varying(50) NOT NULL DEFAULT 'pending'::character varying
|
||||
05. priority : character varying(50) NOT NULL DEFAULT 'medium'::character varying
|
||||
06. assigned_to : character varying(255) NULL
|
||||
07. due_date : date NULL
|
||||
08. group_id : integer NOT NULL
|
||||
09. created_by : character varying(255) NOT NULL
|
||||
10. created_at : timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
11. updated_at : timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
12. start_date : timestamp without time zone NULL
|
||||
13. completed_at : timestamp without time zone NULL
|
||||
14. completed_by : character varying(255) NULL
|
||||
📈 Nombre d'enregistrements: 63
|
||||
|
||||
TABLE: USER_GROUPS
|
||||
=================
|
||||
|
||||
01. user_id : character varying(255) NOT NULL
|
||||
02. group_id : integer NOT NULL
|
||||
📈 Nombre d'enregistrements: 7
|
||||
|
||||
TABLE: USER_ROLES
|
||||
================
|
||||
|
||||
01. user_id : character varying(255) NOT NULL
|
||||
02. role_id : integer NOT NULL
|
||||
03. assigned_by : character varying(255) NULL
|
||||
04. assigned_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 1
|
||||
|
||||
TABLE: USERS
|
||||
===========
|
||||
|
||||
01. id : character varying(255) NOT NULL
|
||||
02. username : character varying(255) NOT NULL
|
||||
03. email : character varying(255) NULL
|
||||
04. name : character varying(255) NULL
|
||||
05. first_name : character varying(255) NULL
|
||||
06. last_name : character varying(255) NULL
|
||||
07. profile_image_url : text NULL
|
||||
08. password : character varying(255) NULL
|
||||
09. role : character varying(50) NULL DEFAULT 'employee'::character varying
|
||||
10. password_changed : boolean NULL DEFAULT false
|
||||
11. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
12. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 8
|
||||
|
||||
TABLE: WEATHER_DATA
|
||||
==================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('weather_data_id_seq'::regclass)
|
||||
02. date : date NOT NULL
|
||||
03. location : text NOT NULL
|
||||
04. temp_max : text NOT NULL
|
||||
05. temp_min : text NOT NULL
|
||||
06. icon : text NOT NULL
|
||||
07. conditions : text NOT NULL
|
||||
08. is_current_year : boolean NOT NULL DEFAULT true
|
||||
09. created_at : timestamp with time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
10. updated_at : timestamp with time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 39
|
||||
|
||||
TABLE: WEATHER_SETTINGS
|
||||
======================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('weather_settings_id_seq'::regclass)
|
||||
02. api_key : text NOT NULL
|
||||
03. location : text NOT NULL DEFAULT 'Paris, France'::text
|
||||
04. is_active : boolean NOT NULL DEFAULT true
|
||||
05. created_at : timestamp with time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
06. updated_at : timestamp with time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 1
|
||||
|
||||
CONTRAINTES DE CLÉS ÉTRANGÈRES:
|
||||
===================================
|
||||
|
||||
calendar_events.created_by → users.id
|
||||
calendar_events.group_id → groups.id
|
||||
client_orders.created_by → users.id
|
||||
client_orders.group_id → groups.id
|
||||
command_items.command_id → commands.id
|
||||
commands.created_by → users.id
|
||||
commands.group_id → groups.id
|
||||
commands.supplier_id → suppliers.id
|
||||
customer_orders.created_by → users.id
|
||||
customer_orders.group_id → groups.id
|
||||
customer_orders.supplier_id → suppliers.id
|
||||
customers.created_by → users.id
|
||||
customers.group_id → groups.id
|
||||
dashboard_messages.store_id → groups.id
|
||||
database_backups.created_by → users.id
|
||||
deliveries.created_by → users.id
|
||||
deliveries.group_id → groups.id
|
||||
deliveries.order_id → orders.id
|
||||
deliveries.supplier_id → suppliers.id
|
||||
delivery_items.delivery_id → deliveries.id
|
||||
dlc_products.created_by → users.id
|
||||
dlc_products.group_id → groups.id
|
||||
dlc_products.supplier_id → suppliers.id
|
||||
dlc_products.validated_by → users.id
|
||||
invoice_verification_cache.group_id → groups.id
|
||||
invoice_verifications.delivery_id → deliveries.id
|
||||
invoice_verifications.group_id → groups.id
|
||||
invoices.created_by → users.id
|
||||
invoices.group_id → groups.id
|
||||
invoices.supplier_id → suppliers.id
|
||||
nocodb_config.created_by → users.id
|
||||
orders.created_by → users.id
|
||||
orders.group_id → groups.id
|
||||
orders.supplier_id → suppliers.id
|
||||
publicities.created_by → users.id
|
||||
publicity_participations.group_id → groups.id
|
||||
publicity_participations.publicity_id → publicities.id
|
||||
role_permissions.permission_id → permissions.id
|
||||
role_permissions.role_id → roles.id
|
||||
sav_ticket_history.ticket_id → sav_tickets.id
|
||||
sav_tickets.group_id → groups.id
|
||||
sav_tickets.supplier_id → suppliers.id
|
||||
sessions.user_id → users.id
|
||||
stores.manager_id → users.id
|
||||
tasks.completed_by → users.id
|
||||
tasks.created_by → users.id
|
||||
tasks.group_id → groups.id
|
||||
user_groups.group_id → groups.id
|
||||
user_groups.user_id → users.id
|
||||
user_roles.assigned_by → users.id
|
||||
user_roles.role_id → roles.id
|
||||
user_roles.user_id → users.id
|
||||
|
||||
===============================================
|
||||
FIN DU RAPPORT - 2025-09-03T13:42:55.993Z
|
||||
===============================================
|
||||
-641
@@ -1,641 +0,0 @@
|
||||
LOGIFLOW - RAPPORT SCHÉMA BASE DE DONNÉES PRODUCTION
|
||||
===============================================
|
||||
|
||||
GÉNÉRÉ LE : 2025-09-15T08:08:00.355Z
|
||||
SERVEUR : Production privé LogiFlow
|
||||
ENVIRONNEMENT : PostgreSQL Docker
|
||||
UTILISATEUR : admin
|
||||
|
||||
===============================================
|
||||
RÉSUMÉ DU SCAN
|
||||
===============================================
|
||||
|
||||
TOTAL DES TABLES TROUVÉES: 37
|
||||
==========================================
|
||||
|
||||
TABLE: AVOIRS
|
||||
============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('avoirs_id_seq'::regclass)
|
||||
02. supplier_id : integer NOT NULL
|
||||
03. group_id : integer NOT NULL
|
||||
04. invoice_reference : character varying(255) NULL
|
||||
05. amount : numeric NULL
|
||||
06. comment : text NULL
|
||||
07. commercial_processed : boolean NULL DEFAULT false
|
||||
08. status : character varying(50) NULL DEFAULT 'En attente de demande'::character varying
|
||||
09. webhook_sent : boolean NULL DEFAULT false
|
||||
10. nocodb_verified : boolean NULL DEFAULT false
|
||||
11. nocodb_verified_at : timestamp without time zone NULL
|
||||
12. processed_at : timestamp without time zone NULL
|
||||
13. created_by : character varying(255) NOT NULL
|
||||
14. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
15. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 5
|
||||
|
||||
TABLE: CALENDAR_EVENTS
|
||||
=====================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('calendar_events_id_seq'::regclass)
|
||||
02. title : character varying(255) NOT NULL
|
||||
03. description : text NULL
|
||||
04. start_date : timestamp without time zone NOT NULL
|
||||
05. end_date : timestamp without time zone NOT NULL
|
||||
06. event_type : character varying(50) NULL DEFAULT 'custom'::character varying
|
||||
07. group_id : integer NULL
|
||||
08. created_by : character varying(255) NULL
|
||||
09. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
10. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: CLIENT_ORDERS
|
||||
===================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('client_orders_id_seq'::regclass)
|
||||
02. order_number : character varying(255) NOT NULL
|
||||
03. client_name : character varying(255) NOT NULL
|
||||
04. client_contact : character varying(255) NULL
|
||||
05. product_description : text NOT NULL
|
||||
06. quantity : integer NOT NULL DEFAULT 1
|
||||
07. unit_price : numeric NULL
|
||||
08. total_amount : numeric NULL
|
||||
09. status : character varying(50) NULL DEFAULT 'pending'::character varying
|
||||
10. delivery_date : date NULL
|
||||
11. notes : text NULL
|
||||
12. group_id : integer NULL
|
||||
13. created_by : character varying(255) NULL
|
||||
14. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
15. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: COMMAND_ITEMS
|
||||
===================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('command_items_id_seq'::regclass)
|
||||
02. command_id : integer NULL
|
||||
03. product_name : character varying(255) NOT NULL
|
||||
04. product_reference : character varying(255) NULL
|
||||
05. quantity : integer NOT NULL
|
||||
06. unit_price : numeric NULL
|
||||
07. total_price : numeric NULL
|
||||
08. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: COMMANDS
|
||||
==============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('commands_id_seq'::regclass)
|
||||
02. command_number : character varying(255) NOT NULL
|
||||
03. supplier_id : integer NULL
|
||||
04. group_id : integer NULL
|
||||
05. command_date : date NOT NULL
|
||||
06. expected_delivery_date : date NULL
|
||||
07. status : character varying(50) NULL DEFAULT 'pending'::character varying
|
||||
08. total_amount : numeric NULL
|
||||
09. notes : text NULL
|
||||
10. created_by : character varying(255) NULL
|
||||
11. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
12. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: CUSTOMER_ORDERS
|
||||
=====================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('customer_orders_id_seq'::regclass)
|
||||
02. order_taker : character varying(255) NOT NULL
|
||||
03. customer_name : character varying(255) NOT NULL
|
||||
04. customer_phone : character varying(255) NULL
|
||||
05. customer_email : character varying(255) NULL
|
||||
06. product_designation : text NOT NULL
|
||||
07. product_reference : character varying(255) NULL
|
||||
08. gencode : character varying(255) NULL
|
||||
09. quantity : integer NULL DEFAULT 1
|
||||
10. supplier_id : integer NULL
|
||||
11. status : character varying(100) NULL DEFAULT 'En attente de Commande'::character varying
|
||||
12. deposit : numeric NULL DEFAULT 0.00
|
||||
13. is_promotional_price : boolean NULL DEFAULT false
|
||||
14. customer_notified : boolean NULL DEFAULT false
|
||||
15. notes : text NULL
|
||||
16. group_id : integer NULL
|
||||
17. created_by : character varying(255) NULL
|
||||
18. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
19. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 80
|
||||
|
||||
TABLE: CUSTOMERS
|
||||
===============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('customers_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. contact_person : character varying(255) NULL
|
||||
04. phone : character varying(255) NULL
|
||||
05. email : character varying(255) NULL
|
||||
06. address : text NULL
|
||||
07. city : character varying(255) NULL
|
||||
08. postal_code : character varying(20) NULL
|
||||
09. notes : text NULL
|
||||
10. group_id : integer NULL
|
||||
11. created_by : character varying(255) NULL
|
||||
12. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
13. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: DASHBOARD_MESSAGES
|
||||
========================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('dashboard_messages_id_seq'::regclass)
|
||||
02. title : character varying(255) NOT NULL
|
||||
03. content : text NOT NULL
|
||||
04. type : character varying(50) NOT NULL DEFAULT 'info'::character varying
|
||||
05. store_id : integer NULL
|
||||
06. created_by : character varying(255) NOT NULL
|
||||
07. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 3
|
||||
|
||||
TABLE: DATABASE_BACKUPS
|
||||
======================
|
||||
|
||||
01. id : character varying(255) NOT NULL
|
||||
02. filename : character varying(255) NOT NULL
|
||||
03. description : text NULL
|
||||
04. size : bigint NULL DEFAULT 0
|
||||
05. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
06. created_by : character varying(255) NOT NULL
|
||||
07. tables_count : integer NULL DEFAULT 0
|
||||
08. status : character varying(50) NULL DEFAULT 'creating'::character varying
|
||||
09. backup_type : character varying(10) NULL DEFAULT 'manual'::character varying
|
||||
📈 Nombre d'enregistrements: 10
|
||||
|
||||
TABLE: DELIVERIES
|
||||
================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('deliveries_id_seq'::regclass)
|
||||
02. order_id : integer NULL
|
||||
03. supplier_id : integer NULL
|
||||
04. group_id : integer NULL
|
||||
05. scheduled_date : date NOT NULL
|
||||
06. delivered_date : timestamp without time zone NULL
|
||||
07. quantity : integer NOT NULL
|
||||
08. unit : character varying(50) NOT NULL
|
||||
09. status : character varying(50) NULL DEFAULT 'pending'::character varying
|
||||
10. notes : text NULL
|
||||
11. bl_number : character varying(255) NULL
|
||||
12. bl_amount : numeric NULL
|
||||
13. invoice_reference : character varying(255) NULL
|
||||
14. invoice_amount : numeric NULL
|
||||
15. reconciled : boolean NULL DEFAULT false
|
||||
16. validated_at : timestamp without time zone NULL
|
||||
17. created_by : character varying(255) NULL
|
||||
18. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
19. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 173
|
||||
|
||||
TABLE: DELIVERY_ITEMS
|
||||
====================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('delivery_items_id_seq'::regclass)
|
||||
02. delivery_id : integer NULL
|
||||
03. product_name : character varying(255) NOT NULL
|
||||
04. product_reference : character varying(255) NULL
|
||||
05. quantity : integer NOT NULL
|
||||
06. unit : character varying(50) NULL
|
||||
07. notes : text NULL
|
||||
08. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: DLC_PRODUCTS
|
||||
==================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('dlc_products_id_seq'::regclass)
|
||||
02. product_name : character varying(255) NOT NULL
|
||||
03. expiry_date : date NOT NULL
|
||||
04. date_type : character varying(50) NOT NULL DEFAULT 'DLC'::character varying
|
||||
05. quantity : integer NOT NULL DEFAULT 1
|
||||
06. unit : character varying(50) NOT NULL DEFAULT 'unité'::character varying
|
||||
07. supplier_id : integer NOT NULL
|
||||
08. location : character varying(255) NOT NULL DEFAULT 'Magasin'::character varying
|
||||
09. status : character varying(50) NOT NULL DEFAULT 'active'::character varying
|
||||
10. notes : text NULL
|
||||
11. alert_threshold : integer NOT NULL DEFAULT 15
|
||||
12. validated_at : timestamp without time zone NULL
|
||||
13. validated_by : character varying(255) NULL
|
||||
14. group_id : integer NOT NULL
|
||||
15. created_by : character varying(255) NOT NULL
|
||||
16. created_at : timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
17. updated_at : timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
18. gencode : character varying(255) NULL
|
||||
19. name : character varying(255) NULL
|
||||
20. dlc_date : date NULL
|
||||
21. product_code : character varying(255) NULL
|
||||
22. description : text NULL
|
||||
23. stock_epuise : boolean NOT NULL DEFAULT false
|
||||
24. stock_epuise_by : character varying(255) NULL
|
||||
25. stock_epuise_at : timestamp without time zone NULL
|
||||
📈 Nombre d'enregistrements: 592
|
||||
|
||||
TABLE: GROUPS
|
||||
============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('groups_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. color : character varying(20) NULL DEFAULT '#1976D2'::character varying
|
||||
04. nocodb_config_id : integer NULL
|
||||
05. nocodb_table_id : character varying(255) NULL
|
||||
06. nocodb_table_name : character varying(255) NULL
|
||||
07. invoice_column_name : character varying(255) NULL
|
||||
08. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
09. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
10. nocodb_bl_column_name : character varying(255) NULL
|
||||
11. nocodb_amount_column_name : character varying(255) NULL
|
||||
12. nocodb_supplier_column_name : character varying(255) NULL
|
||||
13. webhook_url : character varying(500) NULL
|
||||
📈 Nombre d'enregistrements: 2
|
||||
|
||||
TABLE: INVOICE_VERIFICATION_CACHE
|
||||
================================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('invoice_verification_cache_id_seq'::regclass)
|
||||
02. cache_key : character varying(255) NOT NULL
|
||||
03. group_id : integer NOT NULL
|
||||
04. invoice_reference : character varying(255) NOT NULL
|
||||
05. supplier_name : character varying(255) NULL
|
||||
06. exists : boolean NOT NULL
|
||||
07. match_type : character varying(50) NOT NULL
|
||||
08. error_message : text NULL
|
||||
09. cache_hit : boolean NULL DEFAULT false
|
||||
10. api_call_time : integer NULL
|
||||
11. expires_at : timestamp without time zone NOT NULL
|
||||
12. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
13. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
14. is_reconciled : boolean NULL DEFAULT false
|
||||
📈 Nombre d'enregistrements: 220
|
||||
|
||||
TABLE: INVOICE_VERIFICATIONS
|
||||
===========================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('invoice_verifications_id_seq'::regclass)
|
||||
02. delivery_id : integer NOT NULL
|
||||
03. group_id : integer NOT NULL
|
||||
04. invoice_reference : character varying(255) NOT NULL
|
||||
05. supplier_name : character varying(255) NULL
|
||||
06. exists : boolean NOT NULL
|
||||
07. match_type : character varying(50) NULL
|
||||
08. verified_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
09. is_valid : boolean NULL DEFAULT true
|
||||
10. last_checked_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 15
|
||||
|
||||
TABLE: INVOICES
|
||||
==============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('invoices_id_seq'::regclass)
|
||||
02. invoice_number : character varying(255) NOT NULL
|
||||
03. supplier_id : integer NULL
|
||||
04. group_id : integer NULL
|
||||
05. invoice_date : date NOT NULL
|
||||
06. due_date : date NULL
|
||||
07. amount : numeric NOT NULL
|
||||
08. status : character varying(50) NULL DEFAULT 'pending'::character varying
|
||||
09. payment_date : date NULL
|
||||
10. notes : text NULL
|
||||
11. created_by : character varying(255) NULL
|
||||
12. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
13. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: NOCODB_CONFIG
|
||||
===================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('nocodb_config_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. base_url : character varying(255) NOT NULL
|
||||
04. project_id : character varying(255) NOT NULL
|
||||
05. api_token : character varying(255) NOT NULL
|
||||
06. description : text NULL
|
||||
07. is_active : boolean NULL DEFAULT true
|
||||
08. created_by : character varying(255) NULL
|
||||
09. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
10. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 1
|
||||
|
||||
TABLE: ORDERS
|
||||
============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('orders_id_seq'::regclass)
|
||||
02. supplier_id : integer NULL
|
||||
03. group_id : integer NULL
|
||||
04. planned_date : date NOT NULL
|
||||
05. quantity : integer NULL
|
||||
06. unit : character varying(50) NULL
|
||||
07. status : character varying(50) NULL DEFAULT 'pending'::character varying
|
||||
08. notes : text NULL
|
||||
09. created_by : character varying(255) NULL
|
||||
10. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
11. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 114
|
||||
|
||||
TABLE: PERMISSIONS
|
||||
=================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('permissions_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. display_name : character varying(255) NOT NULL
|
||||
04. description : text NULL
|
||||
05. category : character varying(255) NOT NULL
|
||||
06. action : character varying(255) NOT NULL
|
||||
07. resource : character varying(255) NOT NULL
|
||||
08. is_system : boolean NULL DEFAULT true
|
||||
09. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 7
|
||||
|
||||
TABLE: PUBLICITIES
|
||||
=================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('publicities_id_seq'::regclass)
|
||||
02. pub_number : character varying(255) NOT NULL
|
||||
03. designation : text NOT NULL
|
||||
04. start_date : date NOT NULL
|
||||
05. end_date : date NOT NULL
|
||||
06. year : integer NOT NULL
|
||||
07. created_by : character varying(255) NULL
|
||||
08. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
09. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 50
|
||||
|
||||
TABLE: PUBLICITY_PARTICIPATIONS
|
||||
==============================
|
||||
|
||||
01. publicity_id : integer NOT NULL
|
||||
02. group_id : integer NOT NULL
|
||||
📈 Nombre d'enregistrements: 46
|
||||
|
||||
TABLE: RECONCILIATION_COMMENTS
|
||||
=============================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('reconciliation_comments_id_seq'::regclass)
|
||||
02. content : text NOT NULL
|
||||
03. type : character varying(255) NOT NULL
|
||||
04. delivery_id : integer NOT NULL
|
||||
05. author_id : character varying(255) NOT NULL
|
||||
06. group_id : integer NOT NULL
|
||||
07. created_at : timestamp without time zone NULL DEFAULT now()
|
||||
08. updated_at : timestamp without time zone NULL DEFAULT now()
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: ROLE_PERMISSIONS
|
||||
======================
|
||||
|
||||
01. role_id : integer NOT NULL
|
||||
02. permission_id : integer NOT NULL
|
||||
📈 Nombre d'enregistrements: 21
|
||||
|
||||
TABLE: ROLES
|
||||
===========
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('roles_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. display_name : character varying(255) NOT NULL
|
||||
04. description : text NULL
|
||||
05. color : character varying(7) NULL DEFAULT '#6b7280'::character varying
|
||||
06. is_system : boolean NULL DEFAULT false
|
||||
07. is_active : boolean NULL DEFAULT true
|
||||
08. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
09. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 4
|
||||
|
||||
TABLE: SAV_TICKET_HISTORY
|
||||
========================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('sav_ticket_history_id_seq'::regclass)
|
||||
02. ticket_id : integer NOT NULL
|
||||
03. action : character varying(100) NOT NULL
|
||||
04. description : text NULL
|
||||
05. created_by : character varying(255) NOT NULL
|
||||
06. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 2
|
||||
|
||||
TABLE: SAV_TICKETS
|
||||
=================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('sav_tickets_id_seq'::regclass)
|
||||
02. ticket_number : character varying(50) NOT NULL
|
||||
03. supplier_id : integer NOT NULL
|
||||
04. group_id : integer NOT NULL
|
||||
05. product_gencode : character varying(255) NOT NULL
|
||||
06. product_reference : character varying(255) NULL
|
||||
07. product_designation : character varying(500) NOT NULL
|
||||
08. problem_type : character varying(100) NOT NULL
|
||||
09. problem_description : text NOT NULL
|
||||
10. resolution_description : text NULL
|
||||
11. status : character varying(50) NOT NULL DEFAULT 'nouveau'::character varying
|
||||
12. created_by : character varying(255) NOT NULL
|
||||
13. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
14. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
15. resolved_at : timestamp without time zone NULL
|
||||
16. closed_at : timestamp without time zone NULL
|
||||
17. client_name : character varying(255) NULL
|
||||
18. client_phone : character varying(255) NULL
|
||||
19. priority : character varying(50) NOT NULL DEFAULT 'normale'::character varying
|
||||
📈 Nombre d'enregistrements: 1
|
||||
|
||||
TABLE: SESSION
|
||||
=============
|
||||
|
||||
01. sid : character varying NOT NULL
|
||||
02. sess : json NOT NULL
|
||||
03. expire : timestamp without time zone NOT NULL
|
||||
📈 Nombre d'enregistrements: 13
|
||||
|
||||
TABLE: SESSIONS
|
||||
==============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('sessions_id_seq'::regclass)
|
||||
02. user_id : character varying(255) NULL
|
||||
03. session_token : character varying(255) NOT NULL
|
||||
04. expires_at : timestamp without time zone NOT NULL
|
||||
05. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: STORES
|
||||
============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('stores_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. address : text NULL
|
||||
04. city : character varying(255) NULL
|
||||
05. postal_code : character varying(20) NULL
|
||||
06. phone : character varying(255) NULL
|
||||
07. manager_id : character varying(255) NULL
|
||||
08. is_active : boolean NULL DEFAULT true
|
||||
09. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
10. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: SUPPLIERS
|
||||
===============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('suppliers_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. contact : character varying(255) NULL
|
||||
04. phone : character varying(255) NULL
|
||||
05. has_dlc : boolean NULL DEFAULT false
|
||||
06. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
07. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
08. automatic_reconciliation : boolean NULL DEFAULT false
|
||||
📈 Nombre d'enregistrements: 45
|
||||
|
||||
TABLE: TASKS
|
||||
===========
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('tasks_id_seq'::regclass)
|
||||
02. title : character varying(255) NOT NULL
|
||||
03. description : text NULL
|
||||
04. status : character varying(50) NOT NULL DEFAULT 'pending'::character varying
|
||||
05. priority : character varying(50) NOT NULL DEFAULT 'medium'::character varying
|
||||
06. assigned_to : character varying(255) NULL
|
||||
07. due_date : date NULL
|
||||
08. group_id : integer NOT NULL
|
||||
09. created_by : character varying(255) NOT NULL
|
||||
10. created_at : timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
11. updated_at : timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
12. start_date : timestamp without time zone NULL
|
||||
13. completed_at : timestamp without time zone NULL
|
||||
14. completed_by : character varying(255) NULL
|
||||
📈 Nombre d'enregistrements: 76
|
||||
|
||||
TABLE: USER_GROUPS
|
||||
=================
|
||||
|
||||
01. user_id : character varying(255) NOT NULL
|
||||
02. group_id : integer NOT NULL
|
||||
📈 Nombre d'enregistrements: 7
|
||||
|
||||
TABLE: USER_ROLES
|
||||
================
|
||||
|
||||
01. user_id : character varying(255) NOT NULL
|
||||
02. role_id : integer NOT NULL
|
||||
03. assigned_by : character varying(255) NULL
|
||||
04. assigned_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 1
|
||||
|
||||
TABLE: USERS
|
||||
===========
|
||||
|
||||
01. id : character varying(255) NOT NULL
|
||||
02. username : character varying(255) NOT NULL
|
||||
03. email : character varying(255) NULL
|
||||
04. name : character varying(255) NULL
|
||||
05. first_name : character varying(255) NULL
|
||||
06. last_name : character varying(255) NULL
|
||||
07. profile_image_url : text NULL
|
||||
08. password : character varying(255) NULL
|
||||
09. role : character varying(50) NULL DEFAULT 'employee'::character varying
|
||||
10. password_changed : boolean NULL DEFAULT false
|
||||
11. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
12. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 8
|
||||
|
||||
TABLE: WEATHER_DATA
|
||||
==================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('weather_data_id_seq'::regclass)
|
||||
02. date : date NOT NULL
|
||||
03. location : text NOT NULL
|
||||
04. temp_max : text NOT NULL
|
||||
05. temp_min : text NOT NULL
|
||||
06. icon : text NOT NULL
|
||||
07. conditions : text NOT NULL
|
||||
08. is_current_year : boolean NOT NULL DEFAULT true
|
||||
09. created_at : timestamp with time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
10. updated_at : timestamp with time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 63
|
||||
|
||||
TABLE: WEATHER_SETTINGS
|
||||
======================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('weather_settings_id_seq'::regclass)
|
||||
02. api_key : text NOT NULL
|
||||
03. location : text NOT NULL DEFAULT 'Paris, France'::text
|
||||
04. is_active : boolean NOT NULL DEFAULT true
|
||||
05. created_at : timestamp with time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
06. updated_at : timestamp with time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 1
|
||||
|
||||
TABLE: WEBHOOK_BAP_CONFIG
|
||||
========================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('webhook_bap_config_id_seq'::regclass)
|
||||
02. name : character varying(100) NOT NULL DEFAULT 'Configuration BAP'::character varying
|
||||
03. webhook_url : text NOT NULL
|
||||
04. description : text NULL
|
||||
05. is_active : boolean NOT NULL DEFAULT true
|
||||
06. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
07. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 1
|
||||
|
||||
CONTRAINTES DE CLÉS ÉTRANGÈRES:
|
||||
===================================
|
||||
|
||||
avoirs.created_by → users.id
|
||||
avoirs.group_id → groups.id
|
||||
avoirs.supplier_id → suppliers.id
|
||||
calendar_events.created_by → users.id
|
||||
calendar_events.group_id → groups.id
|
||||
client_orders.created_by → users.id
|
||||
client_orders.group_id → groups.id
|
||||
command_items.command_id → commands.id
|
||||
commands.created_by → users.id
|
||||
commands.group_id → groups.id
|
||||
commands.supplier_id → suppliers.id
|
||||
customer_orders.created_by → users.id
|
||||
customer_orders.group_id → groups.id
|
||||
customer_orders.supplier_id → suppliers.id
|
||||
customers.created_by → users.id
|
||||
customers.group_id → groups.id
|
||||
dashboard_messages.store_id → groups.id
|
||||
database_backups.created_by → users.id
|
||||
deliveries.created_by → users.id
|
||||
deliveries.group_id → groups.id
|
||||
deliveries.order_id → orders.id
|
||||
deliveries.supplier_id → suppliers.id
|
||||
delivery_items.delivery_id → deliveries.id
|
||||
dlc_products.created_by → users.id
|
||||
dlc_products.group_id → groups.id
|
||||
dlc_products.supplier_id → suppliers.id
|
||||
dlc_products.validated_by → users.id
|
||||
invoice_verification_cache.group_id → groups.id
|
||||
invoice_verifications.delivery_id → deliveries.id
|
||||
invoice_verifications.group_id → groups.id
|
||||
invoices.created_by → users.id
|
||||
invoices.group_id → groups.id
|
||||
invoices.supplier_id → suppliers.id
|
||||
nocodb_config.created_by → users.id
|
||||
orders.created_by → users.id
|
||||
orders.group_id → groups.id
|
||||
orders.supplier_id → suppliers.id
|
||||
publicities.created_by → users.id
|
||||
publicity_participations.group_id → groups.id
|
||||
publicity_participations.publicity_id → publicities.id
|
||||
reconciliation_comments.author_id → users.id
|
||||
reconciliation_comments.delivery_id → deliveries.id
|
||||
reconciliation_comments.group_id → groups.id
|
||||
role_permissions.permission_id → permissions.id
|
||||
role_permissions.role_id → roles.id
|
||||
sav_ticket_history.ticket_id → sav_tickets.id
|
||||
sav_tickets.group_id → groups.id
|
||||
sav_tickets.supplier_id → suppliers.id
|
||||
sessions.user_id → users.id
|
||||
stores.manager_id → users.id
|
||||
tasks.completed_by → users.id
|
||||
tasks.created_by → users.id
|
||||
tasks.group_id → groups.id
|
||||
user_groups.group_id → groups.id
|
||||
user_groups.user_id → users.id
|
||||
user_roles.assigned_by → users.id
|
||||
user_roles.role_id → roles.id
|
||||
user_roles.user_id → users.id
|
||||
|
||||
===============================================
|
||||
FIN DU RAPPORT - 2025-09-15T08:08:00.355Z
|
||||
===============================================
|
||||
-641
@@ -1,641 +0,0 @@
|
||||
LOGIFLOW - RAPPORT SCHÉMA BASE DE DONNÉES PRODUCTION
|
||||
===============================================
|
||||
|
||||
GÉNÉRÉ LE : 2025-09-15T08:08:00.355Z
|
||||
SERVEUR : Production privé LogiFlow
|
||||
ENVIRONNEMENT : PostgreSQL Docker
|
||||
UTILISATEUR : admin
|
||||
|
||||
===============================================
|
||||
RÉSUMÉ DU SCAN
|
||||
===============================================
|
||||
|
||||
TOTAL DES TABLES TROUVÉES: 37
|
||||
==========================================
|
||||
|
||||
TABLE: AVOIRS
|
||||
============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('avoirs_id_seq'::regclass)
|
||||
02. supplier_id : integer NOT NULL
|
||||
03. group_id : integer NOT NULL
|
||||
04. invoice_reference : character varying(255) NULL
|
||||
05. amount : numeric NULL
|
||||
06. comment : text NULL
|
||||
07. commercial_processed : boolean NULL DEFAULT false
|
||||
08. status : character varying(50) NULL DEFAULT 'En attente de demande'::character varying
|
||||
09. webhook_sent : boolean NULL DEFAULT false
|
||||
10. nocodb_verified : boolean NULL DEFAULT false
|
||||
11. nocodb_verified_at : timestamp without time zone NULL
|
||||
12. processed_at : timestamp without time zone NULL
|
||||
13. created_by : character varying(255) NOT NULL
|
||||
14. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
15. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 5
|
||||
|
||||
TABLE: CALENDAR_EVENTS
|
||||
=====================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('calendar_events_id_seq'::regclass)
|
||||
02. title : character varying(255) NOT NULL
|
||||
03. description : text NULL
|
||||
04. start_date : timestamp without time zone NOT NULL
|
||||
05. end_date : timestamp without time zone NOT NULL
|
||||
06. event_type : character varying(50) NULL DEFAULT 'custom'::character varying
|
||||
07. group_id : integer NULL
|
||||
08. created_by : character varying(255) NULL
|
||||
09. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
10. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: CLIENT_ORDERS
|
||||
===================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('client_orders_id_seq'::regclass)
|
||||
02. order_number : character varying(255) NOT NULL
|
||||
03. client_name : character varying(255) NOT NULL
|
||||
04. client_contact : character varying(255) NULL
|
||||
05. product_description : text NOT NULL
|
||||
06. quantity : integer NOT NULL DEFAULT 1
|
||||
07. unit_price : numeric NULL
|
||||
08. total_amount : numeric NULL
|
||||
09. status : character varying(50) NULL DEFAULT 'pending'::character varying
|
||||
10. delivery_date : date NULL
|
||||
11. notes : text NULL
|
||||
12. group_id : integer NULL
|
||||
13. created_by : character varying(255) NULL
|
||||
14. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
15. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: COMMAND_ITEMS
|
||||
===================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('command_items_id_seq'::regclass)
|
||||
02. command_id : integer NULL
|
||||
03. product_name : character varying(255) NOT NULL
|
||||
04. product_reference : character varying(255) NULL
|
||||
05. quantity : integer NOT NULL
|
||||
06. unit_price : numeric NULL
|
||||
07. total_price : numeric NULL
|
||||
08. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: COMMANDS
|
||||
==============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('commands_id_seq'::regclass)
|
||||
02. command_number : character varying(255) NOT NULL
|
||||
03. supplier_id : integer NULL
|
||||
04. group_id : integer NULL
|
||||
05. command_date : date NOT NULL
|
||||
06. expected_delivery_date : date NULL
|
||||
07. status : character varying(50) NULL DEFAULT 'pending'::character varying
|
||||
08. total_amount : numeric NULL
|
||||
09. notes : text NULL
|
||||
10. created_by : character varying(255) NULL
|
||||
11. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
12. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: CUSTOMER_ORDERS
|
||||
=====================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('customer_orders_id_seq'::regclass)
|
||||
02. order_taker : character varying(255) NOT NULL
|
||||
03. customer_name : character varying(255) NOT NULL
|
||||
04. customer_phone : character varying(255) NULL
|
||||
05. customer_email : character varying(255) NULL
|
||||
06. product_designation : text NOT NULL
|
||||
07. product_reference : character varying(255) NULL
|
||||
08. gencode : character varying(255) NULL
|
||||
09. quantity : integer NULL DEFAULT 1
|
||||
10. supplier_id : integer NULL
|
||||
11. status : character varying(100) NULL DEFAULT 'En attente de Commande'::character varying
|
||||
12. deposit : numeric NULL DEFAULT 0.00
|
||||
13. is_promotional_price : boolean NULL DEFAULT false
|
||||
14. customer_notified : boolean NULL DEFAULT false
|
||||
15. notes : text NULL
|
||||
16. group_id : integer NULL
|
||||
17. created_by : character varying(255) NULL
|
||||
18. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
19. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 80
|
||||
|
||||
TABLE: CUSTOMERS
|
||||
===============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('customers_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. contact_person : character varying(255) NULL
|
||||
04. phone : character varying(255) NULL
|
||||
05. email : character varying(255) NULL
|
||||
06. address : text NULL
|
||||
07. city : character varying(255) NULL
|
||||
08. postal_code : character varying(20) NULL
|
||||
09. notes : text NULL
|
||||
10. group_id : integer NULL
|
||||
11. created_by : character varying(255) NULL
|
||||
12. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
13. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: DASHBOARD_MESSAGES
|
||||
========================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('dashboard_messages_id_seq'::regclass)
|
||||
02. title : character varying(255) NOT NULL
|
||||
03. content : text NOT NULL
|
||||
04. type : character varying(50) NOT NULL DEFAULT 'info'::character varying
|
||||
05. store_id : integer NULL
|
||||
06. created_by : character varying(255) NOT NULL
|
||||
07. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 3
|
||||
|
||||
TABLE: DATABASE_BACKUPS
|
||||
======================
|
||||
|
||||
01. id : character varying(255) NOT NULL
|
||||
02. filename : character varying(255) NOT NULL
|
||||
03. description : text NULL
|
||||
04. size : bigint NULL DEFAULT 0
|
||||
05. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
06. created_by : character varying(255) NOT NULL
|
||||
07. tables_count : integer NULL DEFAULT 0
|
||||
08. status : character varying(50) NULL DEFAULT 'creating'::character varying
|
||||
09. backup_type : character varying(10) NULL DEFAULT 'manual'::character varying
|
||||
📈 Nombre d'enregistrements: 10
|
||||
|
||||
TABLE: DELIVERIES
|
||||
================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('deliveries_id_seq'::regclass)
|
||||
02. order_id : integer NULL
|
||||
03. supplier_id : integer NULL
|
||||
04. group_id : integer NULL
|
||||
05. scheduled_date : date NOT NULL
|
||||
06. delivered_date : timestamp without time zone NULL
|
||||
07. quantity : integer NOT NULL
|
||||
08. unit : character varying(50) NOT NULL
|
||||
09. status : character varying(50) NULL DEFAULT 'pending'::character varying
|
||||
10. notes : text NULL
|
||||
11. bl_number : character varying(255) NULL
|
||||
12. bl_amount : numeric NULL
|
||||
13. invoice_reference : character varying(255) NULL
|
||||
14. invoice_amount : numeric NULL
|
||||
15. reconciled : boolean NULL DEFAULT false
|
||||
16. validated_at : timestamp without time zone NULL
|
||||
17. created_by : character varying(255) NULL
|
||||
18. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
19. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 173
|
||||
|
||||
TABLE: DELIVERY_ITEMS
|
||||
====================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('delivery_items_id_seq'::regclass)
|
||||
02. delivery_id : integer NULL
|
||||
03. product_name : character varying(255) NOT NULL
|
||||
04. product_reference : character varying(255) NULL
|
||||
05. quantity : integer NOT NULL
|
||||
06. unit : character varying(50) NULL
|
||||
07. notes : text NULL
|
||||
08. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: DLC_PRODUCTS
|
||||
==================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('dlc_products_id_seq'::regclass)
|
||||
02. product_name : character varying(255) NOT NULL
|
||||
03. expiry_date : date NOT NULL
|
||||
04. date_type : character varying(50) NOT NULL DEFAULT 'DLC'::character varying
|
||||
05. quantity : integer NOT NULL DEFAULT 1
|
||||
06. unit : character varying(50) NOT NULL DEFAULT 'unité'::character varying
|
||||
07. supplier_id : integer NOT NULL
|
||||
08. location : character varying(255) NOT NULL DEFAULT 'Magasin'::character varying
|
||||
09. status : character varying(50) NOT NULL DEFAULT 'active'::character varying
|
||||
10. notes : text NULL
|
||||
11. alert_threshold : integer NOT NULL DEFAULT 15
|
||||
12. validated_at : timestamp without time zone NULL
|
||||
13. validated_by : character varying(255) NULL
|
||||
14. group_id : integer NOT NULL
|
||||
15. created_by : character varying(255) NOT NULL
|
||||
16. created_at : timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
17. updated_at : timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
18. gencode : character varying(255) NULL
|
||||
19. name : character varying(255) NULL
|
||||
20. dlc_date : date NULL
|
||||
21. product_code : character varying(255) NULL
|
||||
22. description : text NULL
|
||||
23. stock_epuise : boolean NOT NULL DEFAULT false
|
||||
24. stock_epuise_by : character varying(255) NULL
|
||||
25. stock_epuise_at : timestamp without time zone NULL
|
||||
📈 Nombre d'enregistrements: 592
|
||||
|
||||
TABLE: GROUPS
|
||||
============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('groups_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. color : character varying(20) NULL DEFAULT '#1976D2'::character varying
|
||||
04. nocodb_config_id : integer NULL
|
||||
05. nocodb_table_id : character varying(255) NULL
|
||||
06. nocodb_table_name : character varying(255) NULL
|
||||
07. invoice_column_name : character varying(255) NULL
|
||||
08. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
09. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
10. nocodb_bl_column_name : character varying(255) NULL
|
||||
11. nocodb_amount_column_name : character varying(255) NULL
|
||||
12. nocodb_supplier_column_name : character varying(255) NULL
|
||||
13. webhook_url : character varying(500) NULL
|
||||
📈 Nombre d'enregistrements: 2
|
||||
|
||||
TABLE: INVOICE_VERIFICATION_CACHE
|
||||
================================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('invoice_verification_cache_id_seq'::regclass)
|
||||
02. cache_key : character varying(255) NOT NULL
|
||||
03. group_id : integer NOT NULL
|
||||
04. invoice_reference : character varying(255) NOT NULL
|
||||
05. supplier_name : character varying(255) NULL
|
||||
06. exists : boolean NOT NULL
|
||||
07. match_type : character varying(50) NOT NULL
|
||||
08. error_message : text NULL
|
||||
09. cache_hit : boolean NULL DEFAULT false
|
||||
10. api_call_time : integer NULL
|
||||
11. expires_at : timestamp without time zone NOT NULL
|
||||
12. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
13. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
14. is_reconciled : boolean NULL DEFAULT false
|
||||
📈 Nombre d'enregistrements: 220
|
||||
|
||||
TABLE: INVOICE_VERIFICATIONS
|
||||
===========================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('invoice_verifications_id_seq'::regclass)
|
||||
02. delivery_id : integer NOT NULL
|
||||
03. group_id : integer NOT NULL
|
||||
04. invoice_reference : character varying(255) NOT NULL
|
||||
05. supplier_name : character varying(255) NULL
|
||||
06. exists : boolean NOT NULL
|
||||
07. match_type : character varying(50) NULL
|
||||
08. verified_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
09. is_valid : boolean NULL DEFAULT true
|
||||
10. last_checked_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 15
|
||||
|
||||
TABLE: INVOICES
|
||||
==============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('invoices_id_seq'::regclass)
|
||||
02. invoice_number : character varying(255) NOT NULL
|
||||
03. supplier_id : integer NULL
|
||||
04. group_id : integer NULL
|
||||
05. invoice_date : date NOT NULL
|
||||
06. due_date : date NULL
|
||||
07. amount : numeric NOT NULL
|
||||
08. status : character varying(50) NULL DEFAULT 'pending'::character varying
|
||||
09. payment_date : date NULL
|
||||
10. notes : text NULL
|
||||
11. created_by : character varying(255) NULL
|
||||
12. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
13. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: NOCODB_CONFIG
|
||||
===================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('nocodb_config_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. base_url : character varying(255) NOT NULL
|
||||
04. project_id : character varying(255) NOT NULL
|
||||
05. api_token : character varying(255) NOT NULL
|
||||
06. description : text NULL
|
||||
07. is_active : boolean NULL DEFAULT true
|
||||
08. created_by : character varying(255) NULL
|
||||
09. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
10. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 1
|
||||
|
||||
TABLE: ORDERS
|
||||
============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('orders_id_seq'::regclass)
|
||||
02. supplier_id : integer NULL
|
||||
03. group_id : integer NULL
|
||||
04. planned_date : date NOT NULL
|
||||
05. quantity : integer NULL
|
||||
06. unit : character varying(50) NULL
|
||||
07. status : character varying(50) NULL DEFAULT 'pending'::character varying
|
||||
08. notes : text NULL
|
||||
09. created_by : character varying(255) NULL
|
||||
10. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
11. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 114
|
||||
|
||||
TABLE: PERMISSIONS
|
||||
=================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('permissions_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. display_name : character varying(255) NOT NULL
|
||||
04. description : text NULL
|
||||
05. category : character varying(255) NOT NULL
|
||||
06. action : character varying(255) NOT NULL
|
||||
07. resource : character varying(255) NOT NULL
|
||||
08. is_system : boolean NULL DEFAULT true
|
||||
09. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 7
|
||||
|
||||
TABLE: PUBLICITIES
|
||||
=================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('publicities_id_seq'::regclass)
|
||||
02. pub_number : character varying(255) NOT NULL
|
||||
03. designation : text NOT NULL
|
||||
04. start_date : date NOT NULL
|
||||
05. end_date : date NOT NULL
|
||||
06. year : integer NOT NULL
|
||||
07. created_by : character varying(255) NULL
|
||||
08. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
09. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 50
|
||||
|
||||
TABLE: PUBLICITY_PARTICIPATIONS
|
||||
==============================
|
||||
|
||||
01. publicity_id : integer NOT NULL
|
||||
02. group_id : integer NOT NULL
|
||||
📈 Nombre d'enregistrements: 46
|
||||
|
||||
TABLE: RECONCILIATION_COMMENTS
|
||||
=============================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('reconciliation_comments_id_seq'::regclass)
|
||||
02. content : text NOT NULL
|
||||
03. type : character varying(255) NOT NULL
|
||||
04. delivery_id : integer NOT NULL
|
||||
05. author_id : character varying(255) NOT NULL
|
||||
06. group_id : integer NOT NULL
|
||||
07. created_at : timestamp without time zone NULL DEFAULT now()
|
||||
08. updated_at : timestamp without time zone NULL DEFAULT now()
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: ROLE_PERMISSIONS
|
||||
======================
|
||||
|
||||
01. role_id : integer NOT NULL
|
||||
02. permission_id : integer NOT NULL
|
||||
📈 Nombre d'enregistrements: 21
|
||||
|
||||
TABLE: ROLES
|
||||
===========
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('roles_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. display_name : character varying(255) NOT NULL
|
||||
04. description : text NULL
|
||||
05. color : character varying(7) NULL DEFAULT '#6b7280'::character varying
|
||||
06. is_system : boolean NULL DEFAULT false
|
||||
07. is_active : boolean NULL DEFAULT true
|
||||
08. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
09. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 4
|
||||
|
||||
TABLE: SAV_TICKET_HISTORY
|
||||
========================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('sav_ticket_history_id_seq'::regclass)
|
||||
02. ticket_id : integer NOT NULL
|
||||
03. action : character varying(100) NOT NULL
|
||||
04. description : text NULL
|
||||
05. created_by : character varying(255) NOT NULL
|
||||
06. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 2
|
||||
|
||||
TABLE: SAV_TICKETS
|
||||
=================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('sav_tickets_id_seq'::regclass)
|
||||
02. ticket_number : character varying(50) NOT NULL
|
||||
03. supplier_id : integer NOT NULL
|
||||
04. group_id : integer NOT NULL
|
||||
05. product_gencode : character varying(255) NOT NULL
|
||||
06. product_reference : character varying(255) NULL
|
||||
07. product_designation : character varying(500) NOT NULL
|
||||
08. problem_type : character varying(100) NOT NULL
|
||||
09. problem_description : text NOT NULL
|
||||
10. resolution_description : text NULL
|
||||
11. status : character varying(50) NOT NULL DEFAULT 'nouveau'::character varying
|
||||
12. created_by : character varying(255) NOT NULL
|
||||
13. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
14. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
15. resolved_at : timestamp without time zone NULL
|
||||
16. closed_at : timestamp without time zone NULL
|
||||
17. client_name : character varying(255) NULL
|
||||
18. client_phone : character varying(255) NULL
|
||||
19. priority : character varying(50) NOT NULL DEFAULT 'normale'::character varying
|
||||
📈 Nombre d'enregistrements: 1
|
||||
|
||||
TABLE: SESSION
|
||||
=============
|
||||
|
||||
01. sid : character varying NOT NULL
|
||||
02. sess : json NOT NULL
|
||||
03. expire : timestamp without time zone NOT NULL
|
||||
📈 Nombre d'enregistrements: 13
|
||||
|
||||
TABLE: SESSIONS
|
||||
==============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('sessions_id_seq'::regclass)
|
||||
02. user_id : character varying(255) NULL
|
||||
03. session_token : character varying(255) NOT NULL
|
||||
04. expires_at : timestamp without time zone NOT NULL
|
||||
05. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: STORES
|
||||
============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('stores_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. address : text NULL
|
||||
04. city : character varying(255) NULL
|
||||
05. postal_code : character varying(20) NULL
|
||||
06. phone : character varying(255) NULL
|
||||
07. manager_id : character varying(255) NULL
|
||||
08. is_active : boolean NULL DEFAULT true
|
||||
09. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
10. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 0
|
||||
|
||||
TABLE: SUPPLIERS
|
||||
===============
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('suppliers_id_seq'::regclass)
|
||||
02. name : character varying(255) NOT NULL
|
||||
03. contact : character varying(255) NULL
|
||||
04. phone : character varying(255) NULL
|
||||
05. has_dlc : boolean NULL DEFAULT false
|
||||
06. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
07. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
08. automatic_reconciliation : boolean NULL DEFAULT false
|
||||
📈 Nombre d'enregistrements: 45
|
||||
|
||||
TABLE: TASKS
|
||||
===========
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('tasks_id_seq'::regclass)
|
||||
02. title : character varying(255) NOT NULL
|
||||
03. description : text NULL
|
||||
04. status : character varying(50) NOT NULL DEFAULT 'pending'::character varying
|
||||
05. priority : character varying(50) NOT NULL DEFAULT 'medium'::character varying
|
||||
06. assigned_to : character varying(255) NULL
|
||||
07. due_date : date NULL
|
||||
08. group_id : integer NOT NULL
|
||||
09. created_by : character varying(255) NOT NULL
|
||||
10. created_at : timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
11. updated_at : timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
12. start_date : timestamp without time zone NULL
|
||||
13. completed_at : timestamp without time zone NULL
|
||||
14. completed_by : character varying(255) NULL
|
||||
📈 Nombre d'enregistrements: 76
|
||||
|
||||
TABLE: USER_GROUPS
|
||||
=================
|
||||
|
||||
01. user_id : character varying(255) NOT NULL
|
||||
02. group_id : integer NOT NULL
|
||||
📈 Nombre d'enregistrements: 7
|
||||
|
||||
TABLE: USER_ROLES
|
||||
================
|
||||
|
||||
01. user_id : character varying(255) NOT NULL
|
||||
02. role_id : integer NOT NULL
|
||||
03. assigned_by : character varying(255) NULL
|
||||
04. assigned_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 1
|
||||
|
||||
TABLE: USERS
|
||||
===========
|
||||
|
||||
01. id : character varying(255) NOT NULL
|
||||
02. username : character varying(255) NOT NULL
|
||||
03. email : character varying(255) NULL
|
||||
04. name : character varying(255) NULL
|
||||
05. first_name : character varying(255) NULL
|
||||
06. last_name : character varying(255) NULL
|
||||
07. profile_image_url : text NULL
|
||||
08. password : character varying(255) NULL
|
||||
09. role : character varying(50) NULL DEFAULT 'employee'::character varying
|
||||
10. password_changed : boolean NULL DEFAULT false
|
||||
11. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
12. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 8
|
||||
|
||||
TABLE: WEATHER_DATA
|
||||
==================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('weather_data_id_seq'::regclass)
|
||||
02. date : date NOT NULL
|
||||
03. location : text NOT NULL
|
||||
04. temp_max : text NOT NULL
|
||||
05. temp_min : text NOT NULL
|
||||
06. icon : text NOT NULL
|
||||
07. conditions : text NOT NULL
|
||||
08. is_current_year : boolean NOT NULL DEFAULT true
|
||||
09. created_at : timestamp with time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
10. updated_at : timestamp with time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 63
|
||||
|
||||
TABLE: WEATHER_SETTINGS
|
||||
======================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('weather_settings_id_seq'::regclass)
|
||||
02. api_key : text NOT NULL
|
||||
03. location : text NOT NULL DEFAULT 'Paris, France'::text
|
||||
04. is_active : boolean NOT NULL DEFAULT true
|
||||
05. created_at : timestamp with time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
06. updated_at : timestamp with time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 1
|
||||
|
||||
TABLE: WEBHOOK_BAP_CONFIG
|
||||
========================
|
||||
|
||||
01. id : integer NOT NULL DEFAULT nextval('webhook_bap_config_id_seq'::regclass)
|
||||
02. name : character varying(100) NOT NULL DEFAULT 'Configuration BAP'::character varying
|
||||
03. webhook_url : text NOT NULL
|
||||
04. description : text NULL
|
||||
05. is_active : boolean NOT NULL DEFAULT true
|
||||
06. created_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
07. updated_at : timestamp without time zone NULL DEFAULT CURRENT_TIMESTAMP
|
||||
📈 Nombre d'enregistrements: 1
|
||||
|
||||
CONTRAINTES DE CLÉS ÉTRANGÈRES:
|
||||
===================================
|
||||
|
||||
avoirs.created_by → users.id
|
||||
avoirs.group_id → groups.id
|
||||
avoirs.supplier_id → suppliers.id
|
||||
calendar_events.created_by → users.id
|
||||
calendar_events.group_id → groups.id
|
||||
client_orders.created_by → users.id
|
||||
client_orders.group_id → groups.id
|
||||
command_items.command_id → commands.id
|
||||
commands.created_by → users.id
|
||||
commands.group_id → groups.id
|
||||
commands.supplier_id → suppliers.id
|
||||
customer_orders.created_by → users.id
|
||||
customer_orders.group_id → groups.id
|
||||
customer_orders.supplier_id → suppliers.id
|
||||
customers.created_by → users.id
|
||||
customers.group_id → groups.id
|
||||
dashboard_messages.store_id → groups.id
|
||||
database_backups.created_by → users.id
|
||||
deliveries.created_by → users.id
|
||||
deliveries.group_id → groups.id
|
||||
deliveries.order_id → orders.id
|
||||
deliveries.supplier_id → suppliers.id
|
||||
delivery_items.delivery_id → deliveries.id
|
||||
dlc_products.created_by → users.id
|
||||
dlc_products.group_id → groups.id
|
||||
dlc_products.supplier_id → suppliers.id
|
||||
dlc_products.validated_by → users.id
|
||||
invoice_verification_cache.group_id → groups.id
|
||||
invoice_verifications.delivery_id → deliveries.id
|
||||
invoice_verifications.group_id → groups.id
|
||||
invoices.created_by → users.id
|
||||
invoices.group_id → groups.id
|
||||
invoices.supplier_id → suppliers.id
|
||||
nocodb_config.created_by → users.id
|
||||
orders.created_by → users.id
|
||||
orders.group_id → groups.id
|
||||
orders.supplier_id → suppliers.id
|
||||
publicities.created_by → users.id
|
||||
publicity_participations.group_id → groups.id
|
||||
publicity_participations.publicity_id → publicities.id
|
||||
reconciliation_comments.author_id → users.id
|
||||
reconciliation_comments.delivery_id → deliveries.id
|
||||
reconciliation_comments.group_id → groups.id
|
||||
role_permissions.permission_id → permissions.id
|
||||
role_permissions.role_id → roles.id
|
||||
sav_ticket_history.ticket_id → sav_tickets.id
|
||||
sav_tickets.group_id → groups.id
|
||||
sav_tickets.supplier_id → suppliers.id
|
||||
sessions.user_id → users.id
|
||||
stores.manager_id → users.id
|
||||
tasks.completed_by → users.id
|
||||
tasks.created_by → users.id
|
||||
tasks.group_id → groups.id
|
||||
user_groups.group_id → groups.id
|
||||
user_groups.user_id → users.id
|
||||
user_roles.assigned_by → users.id
|
||||
user_roles.role_id → roles.id
|
||||
user_roles.user_id → users.id
|
||||
|
||||
===============================================
|
||||
FIN DU RAPPORT - 2025-09-15T08:08:00.355Z
|
||||
===============================================
|
||||
-207
@@ -1,207 +0,0 @@
|
||||
Lines
|
||||
100
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
{
|
||||
|
||||
id: 20,
|
||||
|
||||
title: 'DLC',
|
||||
|
||||
content: 'Attention des DLC sont en expiré bientôt ou expiré, il faut s en occuper',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: 2,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-09-24T11:26:13.521Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 17,
|
||||
|
||||
title: 'Module Avoir',
|
||||
|
||||
content: "Le module d'avoir est en place",
|
||||
|
||||
type: 'error',
|
||||
|
||||
storeId: 1,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-09-09T07:47:47.650Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 4 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 20,
|
||||
|
||||
title: 'DLC',
|
||||
|
||||
content: 'Attention des DLC sont en expiré bientôt ou expiré, il faut s en occuper',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: 2,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-09-24T11:26:13.521Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 17,
|
||||
|
||||
title: 'Module Avoir',
|
||||
|
||||
content: "Le module d'avoir est en place",
|
||||
|
||||
type: 'error',
|
||||
|
||||
storeId: 1,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-09-09T07:47:47.650Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 4
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
GET /api/announcements 304 in 29ms
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 4
|
||||
|
||||
GET /api/announcements 304 in 31ms
|
||||
|
||||
GET /api/dlc-products 200 in 31ms
|
||||
|
||||
GET /api/groups 200 in 5ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
-231
@@ -1,231 +0,0 @@
|
||||
Registries
|
||||
|
||||
Logs
|
||||
|
||||
Notifications
|
||||
|
||||
Settings
|
||||
|
||||
New version available 2.27.9
|
||||
DismissSee what's new
|
||||
Community Edition
|
||||
2.27.6 LTS
|
||||
Containers>logiflow-logiflow-1>Logs
|
||||
Container logs
|
||||
|
||||
|
||||
admin
|
||||
Log viewer settings
|
||||
Auto-refresh logs
|
||||
Wrap lines
|
||||
Display timestamps
|
||||
Fetch
|
||||
All logs
|
||||
Search
|
||||
Filter...
|
||||
Lines
|
||||
100
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 2 ], userRole: 'admin' }
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '2',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: [ 2 ]
|
||||
|
||||
Fetching all orders
|
||||
|
||||
GET /api/publicities 304 in 33ms
|
||||
|
||||
Customer Orders returned: 25 items
|
||||
|
||||
GET /api/customer-orders 304 in 43ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 18 commandes avec relations
|
||||
|
||||
Orders returned: 18 items
|
||||
|
||||
GET /api/orders 304 in 59ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 38 livraisons avec relations
|
||||
|
||||
Deliveries returned: 38 items
|
||||
|
||||
GET /api/deliveries 304 in 65ms
|
||||
|
||||
GET /api/groups 200 in 5ms
|
||||
|
||||
POST /api/logout 302 in 4ms
|
||||
|
||||
📄 SPA: Serving index.html for /auth
|
||||
|
||||
📄 SPA: Serving index.html for /auth
|
||||
|
||||
GET /api/user 401 in 1ms
|
||||
|
||||
GET /api/user 401 in 0ms
|
||||
|
||||
GET /api/default-credentials-check 304 in 1ms
|
||||
|
||||
🔐 comparePasswords: {
|
||||
|
||||
supplied: 'HIDDEN',
|
||||
|
||||
stored: 'b23ec450a63faf3957a1...',
|
||||
|
||||
hasFormat: true
|
||||
|
||||
}
|
||||
|
||||
🔐 Password comparison result: true
|
||||
|
||||
POST /api/login 200 in 51ms
|
||||
|
||||
GET /api/user 200 in 3ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
📊 Calcul statistiques mensuelles: {
|
||||
|
||||
year: 2025,
|
||||
|
||||
month: 8,
|
||||
|
||||
startDate: '2025-08-01',
|
||||
|
||||
endDate: '2025-09-01',
|
||||
|
||||
groupIds: [ 2 ]
|
||||
|
||||
}
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
userRole: 'employee'
|
||||
|
||||
}
|
||||
|
||||
Non-admin filtering with groupIds: [ 2 ]
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'employee'
|
||||
|
||||
}
|
||||
|
||||
Non-admin filtering deliveries with groupIds: [ 2 ]
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 18 commandes avec relations
|
||||
|
||||
Orders returned: 18 items
|
||||
|
||||
GET /api/orders 200 in 54ms
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 2 ], userRole: 'employee' }
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 8,
|
||||
|
||||
deliveriesCount: 21,
|
||||
|
||||
pendingOrdersCount: 4,
|
||||
|
||||
averageDeliveryTime: 0.17647058823529413,
|
||||
|
||||
totalPalettes: 57,
|
||||
|
||||
totalPackages: 17
|
||||
|
||||
}
|
||||
|
||||
GET /api/stats/monthly 200 in 62ms
|
||||
|
||||
Tasks API called with: { groupIds: [ 2 ], userRole: 'employee' }
|
||||
|
||||
Customer Orders returned: 25 items
|
||||
|
||||
GET /api/customer-orders 200 in 76ms
|
||||
|
||||
Tasks returned: 9 items
|
||||
|
||||
GET /api/dlc-products/stats 200 in 80ms
|
||||
|
||||
GET /api/tasks 200 in 78ms
|
||||
|
||||
GET /api/publicities 304 in 84ms
|
||||
|
||||
GET /api/user 304 in 40ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 38 livraisons avec relations
|
||||
|
||||
Deliveries returned: 38 items
|
||||
|
||||
GET /api/deliveries 200 in 93ms
|
||||
|
||||
GET /api/user 304 in 5ms
|
||||
|
||||
GET /api/publicities 304 in 8ms
|
||||
|
||||
GET /api/groups 200 in 6ms
|
||||
|
||||
GET /api/user 304 in 7ms
|
||||
|
||||
GET /api/suppliers 304 in 6ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
🔍 CUSTOMER ORDER PERMISSION DEBUG: {
|
||||
|
||||
userRole: 'employee',
|
||||
|
||||
userId: '_1753266816257',
|
||||
|
||||
userGroups: [ { userId: '_1753266816257', groupId: 2, group: [Object] } ],
|
||||
|
||||
requestedGroupId: 1,
|
||||
|
||||
requestedGroupIdType: 'number'
|
||||
|
||||
}
|
||||
|
||||
🔍 CUSTOMER ORDER - User group IDs: [ 2 ]
|
||||
|
||||
🔍 CUSTOMER ORDER - Requested group ID: 1
|
||||
|
||||
❌ CUSTOMER ORDER - Access denied: User not in requested group
|
||||
|
||||
🔍 Available groups: [ 2 ] Requested: 1
|
||||
|
||||
POST /api/customer-orders 403 in 7ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
-209
@@ -1,209 +0,0 @@
|
||||
Search
|
||||
Filter...
|
||||
Lines
|
||||
100
|
||||
Actions
|
||||
|
||||
|
||||
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
📢 [SERVER] Fetching announcements for user: admin_local environment: production
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 2 ], userRole: 'admin' }
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 29 commandes avec relations
|
||||
|
||||
Orders returned: 29 items
|
||||
|
||||
GET /api/orders 200 in 95ms
|
||||
|
||||
❌ PRODUCTION: Delivery #127 (store 2) linked to order #81 (store 1) - STORE MISMATCH DETECTED!
|
||||
|
||||
Customer Orders returned: 42 items
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 59 livraisons avec relations
|
||||
|
||||
Deliveries returned: 59 items
|
||||
|
||||
📢 [SERVER] User found: { username: 'admin', role: 'admin' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
GET /api/customer-orders 304 in 109ms
|
||||
|
||||
GET /api/deliveries 304 in 111ms
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
GET /api/groups 304 in 58ms
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
GET /api/announcements 304 in 117ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/users 304 in 15ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
|
||||
📝 POST /api/tasks - Received data: {
|
||||
|
||||
originalBody: {
|
||||
|
||||
title: 'test',
|
||||
|
||||
description: 'test',
|
||||
|
||||
priority: 'medium',
|
||||
|
||||
status: 'pending',
|
||||
|
||||
assignedTo: 'Non assigné',
|
||||
|
||||
startDate: '2025-09-02',
|
||||
|
||||
dueDate: '2025-09-07',
|
||||
|
||||
groupId: 2,
|
||||
|
||||
createdBy: 'admin'
|
||||
|
||||
},
|
||||
|
||||
processedData: {
|
||||
|
||||
title: 'test',
|
||||
|
||||
description: 'test',
|
||||
|
||||
priority: 'medium',
|
||||
|
||||
status: 'pending',
|
||||
|
||||
assignedTo: 'Non assigné',
|
||||
|
||||
startDate: '2025-09-02',
|
||||
|
||||
dueDate: '2025-09-07',
|
||||
|
||||
groupId: 2,
|
||||
|
||||
createdBy: 'admin_local'
|
||||
|
||||
},
|
||||
|
||||
dueDate: '2025-09-07',
|
||||
|
||||
dueDateType: 'string',
|
||||
|
||||
dueDateValue: '2025-09-07'
|
||||
|
||||
}
|
||||
|
||||
💾 DatabaseStorage.createTask - Input: {
|
||||
|
||||
taskData: {
|
||||
|
||||
title: 'test',
|
||||
|
||||
description: 'test',
|
||||
|
||||
priority: 'medium',
|
||||
|
||||
status: 'pending',
|
||||
|
||||
assignedTo: 'Non assigné',
|
||||
|
||||
startDate: '2025-09-02',
|
||||
|
||||
dueDate: '2025-09-07',
|
||||
|
||||
groupId: 2,
|
||||
|
||||
createdBy: 'admin_local'
|
||||
|
||||
},
|
||||
|
||||
dueDate: '2025-09-07',
|
||||
|
||||
dueDateType: 'string',
|
||||
|
||||
dueDateISO: '2025-09-07'
|
||||
|
||||
}
|
||||
|
||||
Error creating task: TypeError: value.toISOString is not a function
|
||||
|
||||
at PgTimestamp.mapToDriverValue (file:///app/node_modules/drizzle-orm/pg-core/columns/timestamp.js:34:18)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:131:73
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:92:21
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
at file:///app/node_modules/drizzle-orm/sql/sql.js:95:21
|
||||
|
||||
at Array.map (<anonymous>)
|
||||
|
||||
at SQL.buildQueryFromSourceParams (file:///app/node_modules/drizzle-orm/sql/sql.js:73:32)
|
||||
|
||||
POST /api/tasks 500 in 7ms
|
||||
|
||||
-1299
File diff suppressed because it is too large.
Load diff
-209
@@ -1,209 +0,0 @@
|
||||
ctions
|
||||
|
||||
|
||||
|
||||
|
||||
Admin filtering deliveries with groupIds: [ 1 ]
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
📢 [SERVER] Fetching announcements for user: admin_local environment: production
|
||||
|
||||
📢 [SERVER] User found: { username: 'admin', role: 'admin' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: [ 1 ]
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
GET /api/publicities 200 in 191ms
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 0
|
||||
|
||||
Customer Orders returned: 10 items
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 48 livraisons avec relations
|
||||
|
||||
Deliveries returned: 48 items
|
||||
|
||||
GET /api/announcements 200 in 265ms
|
||||
|
||||
GET /api/customer-orders 200 in 180ms
|
||||
|
||||
GET /api/deliveries 200 in 187ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 33 commandes avec relations
|
||||
|
||||
Orders returned: 33 items
|
||||
|
||||
GET /api/orders 200 in 241ms
|
||||
|
||||
🎯 [SERVER] POST /api/announcements endpoint hit
|
||||
|
||||
🎯 [SERVER] Request body: {
|
||||
|
||||
"title": "test",
|
||||
|
||||
"content": "test",
|
||||
|
||||
"type": "info",
|
||||
|
||||
"storeId": 1,
|
||||
|
||||
"createdBy": "admin"
|
||||
|
||||
}
|
||||
|
||||
🎯 [SERVER] User object: { hasClaims: false, hasId: true, userId: 'admin_local' }
|
||||
|
||||
🎯 [SERVER] Extracted userId: admin_local
|
||||
|
||||
🎯 [SERVER] User found: { username: 'admin', role: 'admin', id: 'admin_local' }
|
||||
|
||||
🎯 [SERVER] User is admin, proceeding with validation
|
||||
|
||||
🎯 [SERVER] Announcement data validated: {
|
||||
|
||||
title: 'test',
|
||||
|
||||
content: 'test',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local'
|
||||
|
||||
}
|
||||
|
||||
🎯 [PRODUCTION] Creating in PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
🎯 [PRODUCTION] Announcement created successfully in DB: {
|
||||
|
||||
|
||||
|
||||
,
|
||||
|
||||
title: 'test',
|
||||
|
||||
content: 'test',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-17T09:19:30.102Z,
|
||||
|
||||
author: { id: 'admin_local', firstName: 'Administrateur', lastName: '' },
|
||||
|
||||
group: null
|
||||
|
||||
}
|
||||
|
||||
POST /api/announcements 201 in 19ms
|
||||
|
||||
📢 [SERVER] Fetching announcements for user: admin_local environment: production
|
||||
|
||||
📢 [SERVER] User found: { username: 'admin', role: 'admin' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 0
|
||||
|
||||
GET /api/announcements 200 in 8ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
|
||||
🎯 [SERVER] POST /api/announcements endpoint hit
|
||||
|
||||
🎯 [SERVER] Request body: {
|
||||
|
||||
"title": "rzqr",
|
||||
|
||||
"content": "etset",
|
||||
|
||||
"type": "info",
|
||||
|
||||
"storeId": 1,
|
||||
|
||||
"createdBy": "admin"
|
||||
|
||||
}
|
||||
|
||||
🎯 [SERVER] User object: { hasClaims: false, hasId: true, userId: 'admin_local' }
|
||||
|
||||
🎯 [SERVER] Extracted userId: admin_local
|
||||
|
||||
🎯 [SERVER] User found: { username: 'admin', role: 'admin', id: 'admin_local' }
|
||||
|
||||
🎯 [SERVER] User is admin, proceeding with validation
|
||||
|
||||
🎯 [SERVER] Announcement data validated: {
|
||||
|
||||
title: 'rzqr',
|
||||
|
||||
content: 'etset',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local'
|
||||
|
||||
}
|
||||
|
||||
🎯 [PRODUCTION] Creating in PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
🎯 [PRODUCTION] Announcement created successfully in DB: {
|
||||
|
||||
|
||||
|
||||
,
|
||||
|
||||
title: 'rzqr',
|
||||
|
||||
content: 'etset',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-17T09:19:37.509Z,
|
||||
|
||||
author: { id: 'admin_local', firstName: 'Administrateur', lastName: '' },
|
||||
|
||||
group: null
|
||||
|
||||
}
|
||||
|
||||
POST /api/announcements 201 in 10ms
|
||||
|
||||
📢 [SERVER] Fetching announcements for user: admin_local environment: production
|
||||
|
||||
📢 [SERVER] User found: { username: 'admin', role: 'admin' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 0
|
||||
|
||||
GET /api/announcements 200 in 11ms
|
||||
|
||||
-205
@@ -1,205 +0,0 @@
|
||||
ctions
|
||||
|
||||
|
||||
|
||||
|
||||
🗓️ [DATE-CALC] Année précédente: 2024-08-17 (Samedi)
|
||||
|
||||
GET /api/user 200 in 295ms
|
||||
|
||||
GET /api/user 200 in 347ms
|
||||
|
||||
GET /api/user 200 in 348ms
|
||||
|
||||
GET /api/dlc-products/stats 200 in 328ms
|
||||
|
||||
Customer Orders returned: 38 items
|
||||
|
||||
📋 Tasks returned: {
|
||||
|
||||
␍ count: 55,
|
||||
|
||||
userId: 'admin_local',
|
||||
|
||||
userRole: 'admin',
|
||||
|
||||
requestedStoreId: undefined,
|
||||
|
||||
groupIds: undefined,
|
||||
|
||||
taskGroups: [
|
||||
|
||||
{ id: 91, title: 'refaire podium lot assiettes', groupId: 2 },
|
||||
|
||||
{ id: 90, title: 'caisse 1', groupId: 1 },
|
||||
|
||||
{ id: 89, title: 'caisse 3', groupId: 1 }
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
🌤️ [RESPONSE] Weather data prepared: {
|
||||
|
||||
hasCurrentYear: true,
|
||||
|
||||
hasPreviousYear: true,
|
||||
|
||||
location: 'Frouard, France'
|
||||
|
||||
}
|
||||
|
||||
GET /api/customer-orders 200 in 367ms
|
||||
|
||||
GET /api/tasks 200 in 341ms
|
||||
|
||||
GET /api/publicities 200 in 357ms
|
||||
|
||||
GET /api/weather/current 200 in 384ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 86 livraisons avec relations
|
||||
|
||||
Deliveries returned: 86 items
|
||||
|
||||
GET /api/deliveries 200 in 462ms
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 20,
|
||||
|
||||
deliveriesCount: 42,
|
||||
|
||||
pendingOrdersCount: 8,
|
||||
|
||||
averageDeliveryTime: 0.3611111111111111,
|
||||
|
||||
totalPalettes: 120,
|
||||
|
||||
totalPackages: 36
|
||||
|
||||
}
|
||||
|
||||
GET /api/stats/monthly 200 in 477ms
|
||||
|
||||
GET /api/groups 200 in 57ms
|
||||
|
||||
📢 Stockage mémoire des annonces initialisé
|
||||
|
||||
GET /api/announcements 200 in 53ms
|
||||
|
||||
GET /api/publicities 200 in 44ms
|
||||
|
||||
🎯 [SERVER] POST /api/announcements endpoint hit
|
||||
|
||||
🎯 [SERVER] Request body: {
|
||||
|
||||
"title": "TEST",
|
||||
|
||||
"content": "TEST",
|
||||
|
||||
"type": "info"
|
||||
|
||||
}
|
||||
|
||||
🎯 [SERVER] User object: { hasClaims: false, hasId: true, userId: 'admin_local' }
|
||||
|
||||
🎯 [SERVER] Extracted userId: admin_local
|
||||
|
||||
🎯 [SERVER] User found: { username: 'admin', role: 'admin', id: 'admin_local' }
|
||||
|
||||
🎯 [SERVER] User is admin, proceeding with validation
|
||||
|
||||
🎯 [SERVER] Error creating announcement: ZodError: [
|
||||
|
||||
{
|
||||
|
||||
"code": "invalid_type",
|
||||
|
||||
"expected": "string",
|
||||
|
||||
"received": "undefined",
|
||||
|
||||
"path": [
|
||||
|
||||
"createdBy"
|
||||
|
||||
],
|
||||
|
||||
"message": "Required"
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
at get error [as error] (file:///app/node_modules/zod/v3/types.js:39:31)
|
||||
|
||||
at ZodObject.parse (file:///app/node_modules/zod/v3/types.js:114:22)
|
||||
|
||||
at file:///app/dist/index.js:7601:57
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
|
||||
|
||||
issues: [
|
||||
|
||||
{
|
||||
|
||||
code: 'invalid_type',
|
||||
|
||||
expected: 'string',
|
||||
|
||||
received: 'undefined',
|
||||
|
||||
path: [Array],
|
||||
|
||||
message: 'Required'
|
||||
|
||||
}
|
||||
|
||||
],
|
||||
|
||||
addIssue: [Function (anonymous)],
|
||||
|
||||
addIssues: [Function (anonymous)],
|
||||
|
||||
errors: [
|
||||
|
||||
{
|
||||
|
||||
code: 'invalid_type',
|
||||
|
||||
expected: 'string',
|
||||
|
||||
received: 'undefined',
|
||||
|
||||
path: [Array],
|
||||
|
||||
message: 'Required'
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
🎯 [SERVER] Validation errors: [
|
||||
|
||||
{
|
||||
|
||||
code: 'invalid_type',
|
||||
|
||||
expected: 'string',
|
||||
|
||||
received: 'undefined',
|
||||
|
||||
path: [ 'createdBy' ],
|
||||
|
||||
message: 'Required'
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
POST /api/announcements 400 in 11ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
-204
@@ -1,204 +0,0 @@
|
||||
ctions
|
||||
|
||||
|
||||
|
||||
|
||||
GET /api/user 401 in 2ms
|
||||
|
||||
GET /api/default-credentials-check 304 in 2ms
|
||||
|
||||
🔐 comparePasswords: {
|
||||
|
||||
supplied: 'HIDDEN',
|
||||
|
||||
stored: 'b23ec450a63faf3957a1...',
|
||||
|
||||
hasFormat: true
|
||||
|
||||
}
|
||||
|
||||
🔐 Password comparison result: true
|
||||
|
||||
POST /api/login 200 in 51ms
|
||||
|
||||
GET /api/user 200 in 5ms
|
||||
|
||||
GET /api/user 304 in 10ms
|
||||
|
||||
📊 Calcul statistiques mensuelles: {
|
||||
|
||||
year: 2025,
|
||||
|
||||
month: 8,
|
||||
|
||||
startDate: '2025-08-01',
|
||||
|
||||
endDate: '2025-09-01',
|
||||
|
||||
groupIds: [ 2 ]
|
||||
|
||||
}
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
userRole: 'employee'
|
||||
|
||||
}
|
||||
|
||||
Non-admin filtering with groupIds: [ 2 ]
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'employee'
|
||||
|
||||
}
|
||||
|
||||
Non-admin filtering deliveries with groupIds: [ 2 ]
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 8,
|
||||
|
||||
deliveriesCount: 21,
|
||||
|
||||
pendingOrdersCount: 4,
|
||||
|
||||
averageDeliveryTime: 0.17647058823529413,
|
||||
|
||||
totalPalettes: 57,
|
||||
|
||||
totalPackages: 17
|
||||
|
||||
}
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 18 commandes avec relations
|
||||
|
||||
Orders returned: 18 items
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 2 ], userRole: 'employee' }
|
||||
|
||||
GET /api/stats/monthly 200 in 76ms
|
||||
|
||||
GET /api/orders 200 in 76ms
|
||||
|
||||
Customer Orders returned: 25 items
|
||||
|
||||
GET /api/customer-orders 200 in 82ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 38 livraisons avec relations
|
||||
|
||||
Deliveries returned: 38 items
|
||||
|
||||
GET /api/deliveries 200 in 91ms
|
||||
|
||||
Tasks API called with: { groupIds: [ 2 ], userRole: 'employee' }
|
||||
|
||||
GET /api/publicities 304 in 92ms
|
||||
|
||||
GET /api/dlc-products/stats 200 in 93ms
|
||||
|
||||
Tasks returned: 9 items
|
||||
|
||||
GET /api/tasks 200 in 92ms
|
||||
|
||||
GET /api/user 304 in 23ms
|
||||
|
||||
GET /api/publicities 304 in 9ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/groups 200 in 5ms
|
||||
|
||||
GET /api/user 304 in 7ms
|
||||
|
||||
GET /api/suppliers 304 in 10ms
|
||||
|
||||
GET /api/user 304 in 7ms
|
||||
|
||||
🔍 CUSTOMER ORDER PERMISSION DEBUG: {
|
||||
|
||||
userRole: 'employee',
|
||||
|
||||
userId: '_1753266816257',
|
||||
|
||||
userGroups: [ { userId: '_1753266816257', groupId: 2, group: [Object] } ],
|
||||
|
||||
requestedGroupId: 2,
|
||||
|
||||
requestedGroupIdType: 'number'
|
||||
|
||||
}
|
||||
|
||||
🔍 CUSTOMER ORDER - User group IDs: [ 2 ]
|
||||
|
||||
🔍 CUSTOMER ORDER - Requested group ID: 2
|
||||
|
||||
🔍 CUSTOMER ORDER - Converted group ID: 2
|
||||
|
||||
✅ CUSTOMER ORDER - Permission granted for user role: employee
|
||||
|
||||
Error creating customer order: error: null value in column "order_taker" of relation "customer_orders" violates not-null constraint
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.createCustomerOrder (file:///app/dist/index.js:1823:33)
|
||||
|
||||
at async file:///app/dist/index.js:5278:29 {
|
||||
|
||||
length: 395,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '23502',
|
||||
|
||||
detail: 'Failing row contains (73, null, test, null, null, null, null, 366092323745, 1, 2, En attente de Commande, 0.00, f, f, null, 2, _1753266816257, 2025-08-14 11:55:42.977226, 2025-08-14 11:55:42.977226).',
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: undefined,
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: 'public',
|
||||
|
||||
table: 'customer_orders',
|
||||
|
||||
column: 'order_taker',
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'execMain.c',
|
||||
|
||||
line: '1972',
|
||||
|
||||
routine: 'ExecConstraints'
|
||||
|
||||
}
|
||||
|
||||
POST /api/customer-orders 500 in 13ms
|
||||
|
||||
HEAD /api/health 200 in 0ms
|
||||
-204
@@ -1,204 +0,0 @@
|
||||
ctions
|
||||
|
||||
|
||||
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
📋 PUBLICITIES RETURNED: { count: 29 }
|
||||
|
||||
GET /api/publicities 304 in 74ms
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
GET /api/announcements 304 in 86ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin orders filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
📢 [SERVER] Fetching announcements for user: admin_local environment: production
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
📢 [SERVER] User found: { username: 'admin', role: 'admin' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 64 commandes avec relations
|
||||
|
||||
Orders returned: 64 items
|
||||
|
||||
GET /api/orders 304 in 115ms
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
Customer Orders returned: 11 items
|
||||
|
||||
GET /api/customer-orders 304 in 147ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 82 livraisons avec relations
|
||||
|
||||
Deliveries returned: 82 items
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
GET /api/deliveries 304 in 187ms
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
GET /api/announcements 304 in 185ms
|
||||
|
||||
GET /api/groups 304 in 140ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/suppliers 304 in 7ms
|
||||
|
||||
🔍 Avoirs API called with: { groupIds: undefined, userRole: 'admin' }
|
||||
|
||||
📋 Avoirs returned: 0 items
|
||||
|
||||
GET /api/avoirs 304 in 14ms
|
||||
|
||||
🔍 [POST AVOIR] Données reçues: {
|
||||
|
||||
"supplierId": 34,
|
||||
|
||||
"groupId": 1,
|
||||
|
||||
"invoiceReference": "",
|
||||
|
||||
"comment": "",
|
||||
|
||||
"commercialProcessed": false
|
||||
|
||||
}
|
||||
|
||||
🔍 [POST AVOIR] User: { id: 'admin_local', role: 'admin' }
|
||||
|
||||
POST /api/avoirs 400 in 9ms
|
||||
-204
@@ -1,204 +0,0 @@
|
||||
ctions
|
||||
|
||||
|
||||
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: [ 1 ]
|
||||
|
||||
Fetching all orders
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 44 livraisons avec relations
|
||||
|
||||
Deliveries returned: 44 items
|
||||
|
||||
Customer Orders returned: 9 items
|
||||
|
||||
GET /api/deliveries 304 in 124ms
|
||||
|
||||
GET /api/customer-orders 304 in 116ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 31 commandes avec relations
|
||||
|
||||
Orders returned: 31 items
|
||||
|
||||
GET /api/orders 304 in 148ms
|
||||
|
||||
GET /api/groups 304 in 95ms
|
||||
|
||||
GET /api/publicities 304 in 140ms
|
||||
|
||||
🌤️ Fetching previous year weather data from API
|
||||
|
||||
Weather API error for previous year: 401
|
||||
|
||||
GET /api/weather/current 200 in 886ms
|
||||
|
||||
GET /api/user 304 in 5ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/backups 304 in 8ms
|
||||
|
||||
GET /api/weather/settings 200 in 4ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
PUT /api/weather/settings/1 200 in 11ms
|
||||
|
||||
GET /api/weather/settings 200 in 4ms
|
||||
|
||||
GET /api/user 304 in 12ms
|
||||
|
||||
GET /api/publicities 304 in 32ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: [ 1 ]
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
📊 Calcul statistiques mensuelles: {
|
||||
|
||||
year: 2025,
|
||||
|
||||
month: 8,
|
||||
|
||||
startDate: '2025-08-01',
|
||||
|
||||
endDate: '2025-09-01',
|
||||
|
||||
groupIds: undefined
|
||||
|
||||
}
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 44 livraisons avec relations
|
||||
|
||||
Deliveries returned: 44 items
|
||||
|
||||
GET /api/deliveries 304 in 168ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: undefined
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Customer Orders API called with: { groupIds: undefined, userRole: 'admin' }
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering with groupIds: [ 1 ]
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Tasks API called with: { groupIds: undefined, userRole: 'admin' }
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 49 commandes avec relations
|
||||
|
||||
Orders returned: 49 items
|
||||
|
||||
GET /api/orders 304 in 336ms
|
||||
|
||||
📊 Statistiques calculées: {
|
||||
|
||||
ordersCount: 18,
|
||||
|
||||
deliveriesCount: 42,
|
||||
|
||||
pendingOrdersCount: 6,
|
||||
|
||||
averageDeliveryTime: 0.3611111111111111,
|
||||
|
||||
totalPalettes: 120,
|
||||
|
||||
totalPackages: 36
|
||||
|
||||
}
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: undefined,
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
Admin filtering deliveries with groupIds: undefined
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
GET /api/stats/monthly 304 in 364ms
|
||||
|
||||
GET /api/dlc-products/stats 304 in 351ms
|
||||
|
||||
Tasks returned: 61 items
|
||||
|
||||
Customer Orders returned: 36 items
|
||||
|
||||
Customer Orders returned: 9 items
|
||||
|
||||
GET /api/tasks 304 in 361ms
|
||||
|
||||
GET /api/customer-orders 304 in 373ms
|
||||
|
||||
GET /api/customer-orders 304 in 331ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 31 commandes avec relations
|
||||
|
||||
Orders returned: 31 items
|
||||
|
||||
GET /api/orders 304 in 370ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 82 livraisons avec relations
|
||||
|
||||
Deliveries returned: 82 items
|
||||
|
||||
GET /api/deliveries 304 in 456ms
|
||||
|
||||
GET /api/publicities 304 in 400ms
|
||||
|
||||
HEAD /api/health 200 in 2ms
|
||||
-204
@@ -1,204 +0,0 @@
|
||||
dueDate: null,
|
||||
|
||||
fromCache: true,
|
||||
|
||||
permanent: false
|
||||
|
||||
}
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
errorMessage: null,
|
||||
|
||||
invoiceReference: 'FC25638222',
|
||||
|
||||
supplierName: 'Tendance',
|
||||
|
||||
invoiceAmount: undefined,
|
||||
|
||||
dueDate: null,
|
||||
|
||||
fromCache: true,
|
||||
|
||||
permanent: false
|
||||
|
||||
}
|
||||
|
||||
✅ [DATABASE-CACHE] Cache hit pour: {
|
||||
|
||||
cacheKey: '1_fc25638222',
|
||||
|
||||
expires: 2025-11-04T11:22:05.884Z,
|
||||
|
||||
hoursRemaining: 6
|
||||
|
||||
}
|
||||
|
||||
🔍 [CACHE] Résultat cache: {
|
||||
|
||||
found: true,
|
||||
|
||||
isReconciled: false,
|
||||
|
||||
expired: false,
|
||||
|
||||
expiresAt: 2025-11-04T11:22:05.884Z,
|
||||
|
||||
currentTime: '2025-11-04T05:33:50.014Z'
|
||||
|
||||
}
|
||||
|
||||
✅ [CACHE] Cache temporaire hit pour: { invoiceReference: 'FC25638222', groupId: 1, exists: true }
|
||||
|
||||
✅ [INVOICE] Résultat depuis cache: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
errorMessage: null,
|
||||
|
||||
invoiceReference: 'FC25638222',
|
||||
|
||||
supplierName: 'Tendance',
|
||||
|
||||
invoiceAmount: undefined,
|
||||
|
||||
dueDate: null,
|
||||
|
||||
fromCache: true,
|
||||
|
||||
permanent: false
|
||||
|
||||
}
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
errorMessage: null,
|
||||
|
||||
invoiceReference: 'FC25638222',
|
||||
|
||||
supplierName: 'Tendance',
|
||||
|
||||
invoiceAmount: undefined,
|
||||
|
||||
dueDate: null,
|
||||
|
||||
fromCache: true,
|
||||
|
||||
permanent: false
|
||||
|
||||
}
|
||||
|
||||
POST /api/deliveries/335/verify-invoice 200 in 432ms
|
||||
|
||||
POST /api/deliveries/420/verify-invoice 200 in 462ms
|
||||
|
||||
POST /api/deliveries/385/verify-invoice 200 in 424ms
|
||||
|
||||
POST /api/deliveries/385/verify-invoice 200 in 407ms
|
||||
|
||||
✅ [DATABASE-CACHE] Cache hit pour: {
|
||||
|
||||
cacheKey: 'bl_1_bl00060473_ access deco',
|
||||
|
||||
expires: 2025-11-04T10:19:30.357Z,
|
||||
|
||||
hoursRemaining: 5
|
||||
|
||||
}
|
||||
|
||||
💾 Cache hit pour BL: { blNumber: 'BL00060473', groupId: 1 }
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: false,
|
||||
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucun BL correspondant trouvé dans NocoDB',
|
||||
|
||||
invoiceReference: 'BL00060473',
|
||||
|
||||
supplierName: ' Access Deco',
|
||||
|
||||
fromCache: true
|
||||
|
||||
}
|
||||
|
||||
✅ [DATABASE-CACHE] Cache hit pour: {
|
||||
|
||||
cacheKey: 'bl_1_198355_depot',
|
||||
|
||||
expires: 2025-11-04T10:19:30.101Z,
|
||||
|
||||
hoursRemaining: 5
|
||||
|
||||
}
|
||||
|
||||
💾 Cache hit pour BL: { blNumber: '198355', groupId: 1 }
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: false,
|
||||
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucun BL correspondant trouvé dans NocoDB',
|
||||
|
||||
invoiceReference: '198355',
|
||||
|
||||
supplierName: 'Depot',
|
||||
|
||||
fromCache: true
|
||||
|
||||
}
|
||||
|
||||
✅ [DATABASE-CACHE] Cache hit pour: {
|
||||
|
||||
cacheKey: 'bl_1_bl00060473_ access deco',
|
||||
|
||||
expires: 2025-11-04T10:19:30.357Z,
|
||||
|
||||
hoursRemaining: 5
|
||||
|
||||
}
|
||||
|
||||
💾 Cache hit pour BL: { blNumber: 'BL00060473', groupId: 1 }
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: false,
|
||||
|
||||
matchType: 'none',
|
||||
|
||||
errorMessage: 'Aucun BL correspondant trouvé dans NocoDB',
|
||||
|
||||
invoiceReference: 'BL00060473',
|
||||
|
||||
supplierName: ' Access Deco',
|
||||
|
||||
fromCache: true
|
||||
|
||||
}
|
||||
|
||||
POST /api/deliveries/333/verify-invoice 200 in 449ms
|
||||
|
||||
POST /api/deliveries/335/verify-invoice 200 in 414ms
|
||||
|
||||
POST /api/deliveries/333/verify-invoice 200 in 439ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-611
@@ -1,611 +0,0 @@
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:977 🔍 RouterProduction Debug: {environment: 'production', isAuthenticated: false, isLoading: true, hasUser: false, userId: undefined, …}
|
||||
index-D62VSbre.js:513 🔄 Production auth check starting, refreshTrigger: 0
|
||||
index-D62VSbre.js:513 🔄 Production auth response: 200
|
||||
index-D62VSbre.js:513 ✅ Production auth success: {username: 'admin', id: 'admin_local'}
|
||||
index-D62VSbre.js:513 🔄 Production auth check complete, loading set to false
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:977 🔍 RouterProduction Debug: {environment: 'production', isAuthenticated: true, isLoading: false, hasUser: true, userId: 'admin_local', …}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 🏪 Layout - Restoring selectedStoreId from localStorage: {saved: '1', restoredId: 1}
|
||||
index-D62VSbre.js:557 🔧 Layout - Restoring sidebar state: {saved: 'false', isMobile: false}
|
||||
index-D62VSbre.js:557 Sidebar - User: null
|
||||
index-D62VSbre.js:557 Sidebar - isLoading: true
|
||||
index-D62VSbre.js:557 Sidebar - error: null
|
||||
index-D62VSbre.js:557 🔧 Sidebar Debug: {isMobile: false, sidebarCollapsed: false, mobileMenuOpen: false, width: 'expanded (256px)', classes: 'sidebar-expanded bg-white border-r border-gray-200…shadow-lg transition-all duration-300 ease-in-out'}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Upcoming deliveries result: 0 []
|
||||
index-D62VSbre.js:557 📊 Dashboard Debug - Raw Data: {allOrders: 0, allDeliveries: 0, customerOrders: 0, upcomingPublicities: 0, stats: undefined, …}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:513 🔄 Production auth check starting, refreshTrigger: 0
|
||||
index-D62VSbre.js:513 🔄 Production auth check starting, refreshTrigger: 0
|
||||
index-D62VSbre.js:513 🔄 Production auth check starting, refreshTrigger: 0
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 Sidebar - User: null
|
||||
index-D62VSbre.js:557 Sidebar - isLoading: true
|
||||
index-D62VSbre.js:557 Sidebar - error: null
|
||||
index-D62VSbre.js:557 🔧 Sidebar Debug: {isMobile: false, sidebarCollapsed: false, mobileMenuOpen: false, width: 'expanded (256px)', classes: 'sidebar-expanded bg-white border-r border-gray-200…shadow-lg transition-all duration-300 ease-in-out'}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Upcoming deliveries result: 0 []
|
||||
index-D62VSbre.js:557 📊 Dashboard Debug - Raw Data: {allOrders: 0, allDeliveries: 0, customerOrders: 0, upcomingPublicities: 0, stats: undefined, …}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:553 ✅ Auth check successful: {username: 'admin', id: 'admin_local'}
|
||||
index-D62VSbre.js:557 Sidebar - User: {id: 'admin_local', username: 'admin', email: 'admin@logiflow.com', firstName: 'Administrateur', lastName: '', …}
|
||||
index-D62VSbre.js:557 Sidebar - isLoading: false
|
||||
index-D62VSbre.js:557 Sidebar - error: null
|
||||
index-D62VSbre.js:557 🔧 Sidebar Debug: {isMobile: false, sidebarCollapsed: false, mobileMenuOpen: false, width: 'expanded (256px)', classes: 'sidebar-expanded bg-white border-r border-gray-200…shadow-lg transition-all duration-300 ease-in-out'}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Upcoming deliveries result: 0 []
|
||||
index-D62VSbre.js:557 📊 Dashboard Debug - Raw Data: {allOrders: 0, allDeliveries: 0, customerOrders: 0, upcomingPublicities: 10, stats: undefined, …}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:513 🔄 Production auth response: 200
|
||||
index-D62VSbre.js:513 ✅ Production auth success: {username: 'admin', id: 'admin_local'}
|
||||
index-D62VSbre.js:513 🔄 Production auth check complete, loading set to false
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 🔍 [ANNOUNCEMENTS] Fetching from: /api/announcements?storeId=1
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Upcoming deliveries result: 0 []
|
||||
index-D62VSbre.js:557 📊 Dashboard Debug - Raw Data: {allOrders: 0, allDeliveries: 0, customerOrders: 0, upcomingPublicities: 10, stats: undefined, …}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Upcoming deliveries result: 0 []
|
||||
index-D62VSbre.js:557 📊 Dashboard Debug - Raw Data: {allOrders: 0, allDeliveries: 0, customerOrders: 70, upcomingPublicities: 10, stats: undefined, …}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Upcoming deliveries result: 0 []
|
||||
index-D62VSbre.js:557 📊 Dashboard Debug - Raw Data: {allOrders: 0, allDeliveries: 0, customerOrders: 70, upcomingPublicities: 10, stats: {…}, …}
|
||||
🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
🚚 Dashboard - Upcoming deliveries result: 0 []
|
||||
📊 Dashboard Debug - Raw Data: {allOrders: 0, allDeliveries: 0, customerOrders: 70, upcomingPublicities: 10, stats: {…}, …}
|
||||
🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
🚚 Dashboard - Upcoming deliveries result: 0 []
|
||||
📊 Dashboard Debug - Raw Data: {allOrders: 0, allDeliveries: 0, customerOrders: 70, upcomingPublicities: 10, stats: {…}, …}
|
||||
🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
🚚 Dashboard - Upcoming deliveries result: 0 []
|
||||
📊 Dashboard Debug - Raw Data: {allOrders: 100, allDeliveries: 0, customerOrders: 70, upcomingPublicities: 10, stats: {…}, …}
|
||||
🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
🚚 Dashboard - Delivery filter: {id: 192, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
🚚 Dashboard - Delivery filter: {id: 191, status: 'planned', isPlanned: true, scheduledDate: '2025-09-09'}
|
||||
🚚 Dashboard - Delivery filter: {id: 190, status: 'planned', isPlanned: true, scheduledDate: '2025-09-09'}
|
||||
🚚 Dashboard - Delivery filter: {id: 189, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
🚚 Dashboard - Delivery filter: {id: 188, status: 'planned', isPlanned: true, scheduledDate: '2025-09-09'}
|
||||
🚚 Dashboard - Delivery filter: {id: 187, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
🚚 Dashboard - Delivery filter: {id: 186, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
🚚 Dashboard - Delivery filter: {id: 185, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
🚚 Dashboard - Delivery filter: {id: 184, status: 'planned', isPlanned: true, scheduledDate: '2025-09-11'}
|
||||
🚚 Dashboard - Delivery filter: {id: 183, status: 'planned', isPlanned: true, scheduledDate: '2025-09-10'}
|
||||
🚚 Dashboard - Delivery filter: {id: 182, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-04'}
|
||||
🚚 Dashboard - Delivery filter: {id: 181, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
🚚 Dashboard - Delivery filter: {id: 180, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
🚚 Dashboard - Delivery filter: {id: 179, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-28'}
|
||||
🚚 Dashboard - Delivery filter: {id: 178, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-03'}
|
||||
🚚 Dashboard - Delivery filter: {id: 177, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-03'}
|
||||
🚚 Dashboard - Delivery filter: {id: 176, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-04'}
|
||||
🚚 Dashboard - Delivery filter: {id: 175, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-03'}
|
||||
🚚 Dashboard - Delivery filter: {id: 174, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-02'}
|
||||
🚚 Dashboard - Delivery filter: {id: 171, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-02'}
|
||||
🚚 Dashboard - Delivery filter: {id: 170, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-02'}
|
||||
🚚 Dashboard - Delivery filter: {id: 169, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-02'}
|
||||
🚚 Dashboard - Delivery filter: {id: 168, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-02'}
|
||||
🚚 Dashboard - Delivery filter: {id: 166, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-04'}
|
||||
🚚 Dashboard - Delivery filter: {id: 165, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
🚚 Dashboard - Delivery filter: {id: 164, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
🚚 Dashboard - Delivery filter: {id: 163, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
🚚 Dashboard - Delivery filter: {id: 162, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
🚚 Dashboard - Delivery filter: {id: 161, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
🚚 Dashboard - Delivery filter: {id: 160, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-01'}
|
||||
🚚 Dashboard - Delivery filter: {id: 159, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-01'}
|
||||
🚚 Dashboard - Delivery filter: {id: 158, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-29'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 157, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-28'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 156, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-28'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 154, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-27'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 152, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-28'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 151, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-26'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 150, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-26'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 149, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-26'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 148, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 147, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 145, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-26'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 144, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-26'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 143, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-27'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 142, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-22'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 141, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-22'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 140, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 139, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 138, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 137, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-21'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 135, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 134, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 133, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-21'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 132, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-22'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 131, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 130, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 129, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-22'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 128, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 127, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-19'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 125, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-19'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 124, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 123, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-19'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 122, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-22'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 121, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-22'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 118, status: 'planned', isPlanned: true, scheduledDate: '2025-10-06'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 117, status: 'planned', isPlanned: true, scheduledDate: '2025-09-29'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 116, status: 'planned', isPlanned: true, scheduledDate: '2025-09-22'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 115, status: 'planned', isPlanned: true, scheduledDate: '2025-09-15'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 111, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-14'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 104, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 101, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-13'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 100, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-11'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 98, status: 'planned', isPlanned: true, scheduledDate: '2025-08-12'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 97, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-12'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 96, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-11'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 94, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-14'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 93, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-14'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 91, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-11'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 90, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-11'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 89, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-13'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 88, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-13'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 87, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 86, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 84, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 83, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 82, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 81, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 80, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 79, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 78, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 77, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-06'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 76, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-06'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 75, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-06'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 74, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 72, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-21'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 71, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 69, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-05'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 68, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-06'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 67, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-06'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 66, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-05'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 65, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-04'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 63, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-04'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 62, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-29'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 61, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-01'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 60, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-01'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 58, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 56, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-30'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 55, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-31'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 54, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-31'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 53, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-01'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 52, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-31'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 51, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-31'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 50, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-30'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 49, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-30'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 48, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-30'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 46, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-28'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 45, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-28'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 43, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-29'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 42, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 41, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 40, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-28'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 39, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-24'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 38, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-30'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 37, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-30'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 36, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-21'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 35, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-15'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 34, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-16'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 33, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-18'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 32, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 31, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 30, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 29, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 28, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 27, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-24'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 26, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 25, status: 'planned', isPlanned: true, scheduledDate: '2025-10-13'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 24, status: 'planned', isPlanned: true, scheduledDate: '2025-10-06'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 23, status: 'planned', isPlanned: true, scheduledDate: '2025-09-29'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 22, status: 'planned', isPlanned: true, scheduledDate: '2025-09-15'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 21, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 18, status: 'planned', isPlanned: true, scheduledDate: '2025-08-11'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 17, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-06'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 16, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-24'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 15, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 13, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 11, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 10, status: 'planned', isPlanned: true, scheduledDate: '2025-08-14'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Upcoming deliveries result: 4 (4) [{…}, {…}, {…}, {…}]
|
||||
index-D62VSbre.js:557 📊 Dashboard Debug - Raw Data: {allOrders: 100, allDeliveries: 147, customerOrders: 70, upcomingPublicities: 10, stats: {…}, …}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:513 🔄 Production auth response: 200
|
||||
index-D62VSbre.js:513 ✅ Production auth success: {username: 'admin', id: 'admin_local'}
|
||||
index-D62VSbre.js:513 🔄 Production auth check complete, loading set to false
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Upcoming deliveries result: 0 []
|
||||
index-D62VSbre.js:557 📊 Dashboard Debug - Raw Data: {allOrders: 0, allDeliveries: 0, customerOrders: 0, upcomingPublicities: 10, stats: {…}, …}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 ✅ [ANNOUNCEMENTS] Data received: (2) [{…}, {…}]
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:513 🔄 Production auth response: 200
|
||||
index-D62VSbre.js:513 ✅ Production auth success: {username: 'admin', id: 'admin_local'}
|
||||
index-D62VSbre.js:513 🔄 Production auth check complete, loading set to false
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 Sidebar - User: {id: 'admin_local', username: 'admin', email: 'admin@logiflow.com', firstName: 'Administrateur', lastName: '', …}
|
||||
index-D62VSbre.js:557 Sidebar - isLoading: false
|
||||
index-D62VSbre.js:557 Sidebar - error: null
|
||||
index-D62VSbre.js:557 🔧 Sidebar Debug: {isMobile: false, sidebarCollapsed: false, mobileMenuOpen: false, width: 'expanded (256px)', classes: 'sidebar-expanded bg-white border-r border-gray-200…shadow-lg transition-all duration-300 ease-in-out'}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Upcoming deliveries result: 0 []
|
||||
index-D62VSbre.js:557 📊 Dashboard Debug - Raw Data: {allOrders: 0, allDeliveries: 0, customerOrders: 0, upcomingPublicities: 10, stats: {…}, …}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Upcoming deliveries result: 0 []
|
||||
index-D62VSbre.js:557 📊 Dashboard Debug - Raw Data: {allOrders: 64, allDeliveries: 0, customerOrders: 0, upcomingPublicities: 10, stats: {…}, …}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 Sidebar - User: {id: 'admin_local', username: 'admin', email: 'admin@logiflow.com', firstName: 'Administrateur', lastName: '', …}
|
||||
index-D62VSbre.js:557 Sidebar - isLoading: false
|
||||
index-D62VSbre.js:557 Sidebar - error: null
|
||||
index-D62VSbre.js:557 🔧 Sidebar Debug: {isMobile: false, sidebarCollapsed: false, mobileMenuOpen: false, width: 'expanded (256px)', classes: 'sidebar-expanded bg-white border-r border-gray-200…shadow-lg transition-all duration-300 ease-in-out'}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 192, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 191, status: 'planned', isPlanned: true, scheduledDate: '2025-09-09'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 187, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 186, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 185, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 184, status: 'planned', isPlanned: true, scheduledDate: '2025-09-11'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 183, status: 'planned', isPlanned: true, scheduledDate: '2025-09-10'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 182, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-04'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 181, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 180, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 177, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-03'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 176, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-04'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 171, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-02'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 163, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 162, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 161, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 159, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-01'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 158, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-29'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 157, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-28'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 154, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-27'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 148, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 147, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 145, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-26'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 144, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-26'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 142, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-22'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 141, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-22'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 139, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 138, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 137, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-21'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 135, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 134, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 129, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-22'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 128, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 123, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-19'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 118, status: 'planned', isPlanned: true, scheduledDate: '2025-10-06'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 117, status: 'planned', isPlanned: true, scheduledDate: '2025-09-29'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 116, status: 'planned', isPlanned: true, scheduledDate: '2025-09-22'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 115, status: 'planned', isPlanned: true, scheduledDate: '2025-09-15'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 104, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 101, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-13'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 97, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-12'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 90, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-11'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 89, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-13'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 88, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-13'}
|
||||
🚚 Dashboard - Delivery filter: {id: 87, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
🚚 Dashboard - Delivery filter: {id: 84, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-08'}
|
||||
🚚 Dashboard - Delivery filter: {id: 83, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-08'}
|
||||
🚚 Dashboard - Delivery filter: {id: 82, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
🚚 Dashboard - Delivery filter: {id: 81, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
🚚 Dashboard - Delivery filter: {id: 77, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-06'}
|
||||
🚚 Dashboard - Delivery filter: {id: 76, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-06'}
|
||||
🚚 Dashboard - Delivery filter: {id: 75, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-06'}
|
||||
🚚 Dashboard - Delivery filter: {id: 74, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
🚚 Dashboard - Delivery filter: {id: 72, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-21'}
|
||||
🚚 Dashboard - Delivery filter: {id: 69, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-05'}
|
||||
🚚 Dashboard - Delivery filter: {id: 66, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-05'}
|
||||
🚚 Dashboard - Delivery filter: {id: 62, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-29'}
|
||||
🚚 Dashboard - Delivery filter: {id: 61, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-01'}
|
||||
🚚 Dashboard - Delivery filter: {id: 60, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-01'}
|
||||
🚚 Dashboard - Delivery filter: {id: 58, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
🚚 Dashboard - Delivery filter: {id: 56, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-30'}
|
||||
🚚 Dashboard - Delivery filter: {id: 55, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-31'}
|
||||
🚚 Dashboard - Delivery filter: {id: 52, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-31'}
|
||||
🚚 Dashboard - Delivery filter: {id: 51, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-31'}
|
||||
🚚 Dashboard - Delivery filter: {id: 43, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-29'}
|
||||
🚚 Dashboard - Delivery filter: {id: 41, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-25'}
|
||||
🚚 Dashboard - Delivery filter: {id: 40, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-28'}
|
||||
🚚 Dashboard - Delivery filter: {id: 38, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-30'}
|
||||
🚚 Dashboard - Delivery filter: {id: 37, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-30'}
|
||||
🚚 Dashboard - Delivery filter: {id: 36, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-21'}
|
||||
🚚 Dashboard - Delivery filter: {id: 35, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-15'}
|
||||
🚚 Dashboard - Delivery filter: {id: 34, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-16'}
|
||||
🚚 Dashboard - Delivery filter: {id: 33, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-18'}
|
||||
🚚 Dashboard - Delivery filter: {id: 32, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
🚚 Dashboard - Delivery filter: {id: 31, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
🚚 Dashboard - Delivery filter: {id: 30, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
🚚 Dashboard - Delivery filter: {id: 29, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
🚚 Dashboard - Delivery filter: {id: 28, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
🚚 Dashboard - Delivery filter: {id: 27, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-24'}
|
||||
🚚 Dashboard - Delivery filter: {id: 13, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-25'}
|
||||
🚚 Dashboard - Delivery filter: {id: 11, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-25'}
|
||||
🚚 Dashboard - Delivery filter: {id: 10, status: 'planned', isPlanned: true, scheduledDate: '2025-08-14'}
|
||||
🚚 Dashboard - Upcoming deliveries result: 4 (4) [{…}, {…}, {…}, {…}]
|
||||
📊 Dashboard Debug - Raw Data: {allOrders: 64, allDeliveries: 82, customerOrders: 0, upcomingPublicities: 10, stats: {…}, …}
|
||||
🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
🏪 Selected store validated successfully: {selectedStoreId: 1, userRole: 'admin', storeName: 'Frouard'}
|
||||
🏪 Store initialization complete: {user: 'admin', selectedStoreId: 1, storesCount: 2, validatedStore: 'Frouard', autoSelected: false}
|
||||
🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
Sidebar - User: {id: 'admin_local', username: 'admin', email: 'admin@logiflow.com', firstName: 'Administrateur', lastName: '', …}
|
||||
Sidebar - isLoading: false
|
||||
Sidebar - error: null
|
||||
🔧 Sidebar Debug: {isMobile: false, sidebarCollapsed: false, mobileMenuOpen: false, width: 'expanded (256px)', classes: 'sidebar-expanded bg-white border-r border-gray-200…shadow-lg transition-all duration-300 ease-in-out'}
|
||||
🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
🚚 Dashboard - Delivery filter: {id: 192, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
🚚 Dashboard - Delivery filter: {id: 191, status: 'planned', isPlanned: true, scheduledDate: '2025-09-09'}
|
||||
🚚 Dashboard - Delivery filter: {id: 187, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
🚚 Dashboard - Delivery filter: {id: 186, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
🚚 Dashboard - Delivery filter: {id: 185, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
🚚 Dashboard - Delivery filter: {id: 184, status: 'planned', isPlanned: true, scheduledDate: '2025-09-11'}
|
||||
🚚 Dashboard - Delivery filter: {id: 183, status: 'planned', isPlanned: true, scheduledDate: '2025-09-10'}
|
||||
🚚 Dashboard - Delivery filter: {id: 182, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-04'}
|
||||
🚚 Dashboard - Delivery filter: {id: 181, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
🚚 Dashboard - Delivery filter: {id: 180, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
🚚 Dashboard - Delivery filter: {id: 177, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-03'}
|
||||
🚚 Dashboard - Delivery filter: {id: 176, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-04'}
|
||||
🚚 Dashboard - Delivery filter: {id: 171, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-02'}
|
||||
🚚 Dashboard - Delivery filter: {id: 163, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
🚚 Dashboard - Delivery filter: {id: 162, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
🚚 Dashboard - Delivery filter: {id: 161, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
🚚 Dashboard - Delivery filter: {id: 159, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-01'}
|
||||
🚚 Dashboard - Delivery filter: {id: 158, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-29'}
|
||||
🚚 Dashboard - Delivery filter: {id: 157, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-28'}
|
||||
🚚 Dashboard - Delivery filter: {id: 154, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-27'}
|
||||
🚚 Dashboard - Delivery filter: {id: 148, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-25'}
|
||||
🚚 Dashboard - Delivery filter: {id: 147, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-25'}
|
||||
🚚 Dashboard - Delivery filter: {id: 145, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-26'}
|
||||
🚚 Dashboard - Delivery filter: {id: 144, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-26'}
|
||||
🚚 Dashboard - Delivery filter: {id: 142, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-22'}
|
||||
🚚 Dashboard - Delivery filter: {id: 141, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-22'}
|
||||
🚚 Dashboard - Delivery filter: {id: 139, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-25'}
|
||||
🚚 Dashboard - Delivery filter: {id: 138, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-25'}
|
||||
🚚 Dashboard - Delivery filter: {id: 137, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-21'}
|
||||
🚚 Dashboard - Delivery filter: {id: 135, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
🚚 Dashboard - Delivery filter: {id: 134, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
🚚 Dashboard - Delivery filter: {id: 129, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-22'}
|
||||
🚚 Dashboard - Delivery filter: {id: 128, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
🚚 Dashboard - Delivery filter: {id: 123, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-19'}
|
||||
🚚 Dashboard - Delivery filter: {id: 118, status: 'planned', isPlanned: true, scheduledDate: '2025-10-06'}
|
||||
🚚 Dashboard - Delivery filter: {id: 117, status: 'planned', isPlanned: true, scheduledDate: '2025-09-29'}
|
||||
🚚 Dashboard - Delivery filter: {id: 116, status: 'planned', isPlanned: true, scheduledDate: '2025-09-22'}
|
||||
🚚 Dashboard - Delivery filter: {id: 115, status: 'planned', isPlanned: true, scheduledDate: '2025-09-15'}
|
||||
🚚 Dashboard - Delivery filter: {id: 104, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
🚚 Dashboard - Delivery filter: {id: 101, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-13'}
|
||||
🚚 Dashboard - Delivery filter: {id: 97, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-12'}
|
||||
🚚 Dashboard - Delivery filter: {id: 90, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-11'}
|
||||
🚚 Dashboard - Delivery filter: {id: 89, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-13'}
|
||||
🚚 Dashboard - Delivery filter: {id: 88, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-13'}
|
||||
🚚 Dashboard - Delivery filter: {id: 87, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
🚚 Dashboard - Delivery filter: {id: 84, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-08'}
|
||||
🚚 Dashboard - Delivery filter: {id: 83, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-08'}
|
||||
🚚 Dashboard - Delivery filter: {id: 82, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
🚚 Dashboard - Delivery filter: {id: 81, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
🚚 Dashboard - Delivery filter: {id: 77, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-06'}
|
||||
🚚 Dashboard - Delivery filter: {id: 76, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-06'}
|
||||
🚚 Dashboard - Delivery filter: {id: 75, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-06'}
|
||||
🚚 Dashboard - Delivery filter: {id: 74, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 72, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-21'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 69, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-05'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 66, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-05'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 62, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-29'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 61, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-01'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 60, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-01'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 58, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 56, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-30'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 55, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-31'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 52, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-31'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 51, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-31'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 43, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-29'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 41, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 40, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-28'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 38, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-30'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 37, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-30'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 36, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-21'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 35, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-15'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 34, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-16'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 33, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-18'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 32, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 31, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 30, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 29, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 28, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 27, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-24'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 13, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 11, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 10, status: 'planned', isPlanned: true, scheduledDate: '2025-08-14'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Upcoming deliveries result: 4 (4) [{…}, {…}, {…}, {…}]
|
||||
index-D62VSbre.js:557 📊 Dashboard Debug - Raw Data: {allOrders: 64, allDeliveries: 82, customerOrders: 11, upcomingPublicities: 10, stats: {…}, …}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 192, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 191, status: 'planned', isPlanned: true, scheduledDate: '2025-09-09'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 187, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 186, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 185, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 184, status: 'planned', isPlanned: true, scheduledDate: '2025-09-11'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 183, status: 'planned', isPlanned: true, scheduledDate: '2025-09-10'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 182, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-04'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 181, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 180, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 177, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-03'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 176, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-04'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 171, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-02'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 163, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 162, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 161, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-05'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 159, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-01'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 158, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-29'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 157, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-28'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 154, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-27'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 148, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 147, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 145, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-26'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 144, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-26'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 142, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-22'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 141, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-22'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 139, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 138, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 137, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-21'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 135, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 134, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 129, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-22'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 128, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 123, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-19'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 118, status: 'planned', isPlanned: true, scheduledDate: '2025-10-06'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 117, status: 'planned', isPlanned: true, scheduledDate: '2025-09-29'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 116, status: 'planned', isPlanned: true, scheduledDate: '2025-09-22'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 115, status: 'planned', isPlanned: true, scheduledDate: '2025-09-15'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 104, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-20'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 101, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-13'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 97, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-12'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 90, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-11'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 89, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-13'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 88, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-13'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 87, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 84, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 83, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 82, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 81, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 77, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-06'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 76, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-06'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 75, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-06'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 74, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-07'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 72, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-21'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 69, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-05'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 66, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-05'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 62, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-29'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 61, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-01'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 60, status: 'delivered', isPlanned: false, scheduledDate: '2025-08-01'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 58, status: 'delivered', isPlanned: false, scheduledDate: '2025-09-08'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 56, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-30'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 55, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-31'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 52, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-31'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 51, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-31'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 43, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-29'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 41, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 40, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-28'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 38, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-30'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 37, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-30'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 36, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-21'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 35, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-15'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 34, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-16'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 33, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-18'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 32, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 31, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 30, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 29, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 28, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-23'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 27, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-24'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 13, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 11, status: 'delivered', isPlanned: false, scheduledDate: '2025-07-25'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Delivery filter: {id: 10, status: 'planned', isPlanned: true, scheduledDate: '2025-08-14'}
|
||||
index-D62VSbre.js:557 🚚 Dashboard - Upcoming deliveries result: 4 (4) [{…}, {…}, {…}, {…}]
|
||||
index-D62VSbre.js:557 📊 Dashboard Debug - Raw Data: {allOrders: 64, allDeliveries: 82, customerOrders: 11, upcomingPublicities: 10, stats: {…}, …}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 Sidebar - User: {id: 'admin_local', username: 'admin', email: 'admin@logiflow.com', firstName: 'Administrateur', lastName: '', …}
|
||||
index-D62VSbre.js:557 Sidebar - isLoading: false
|
||||
index-D62VSbre.js:557 Sidebar - error: null
|
||||
index-D62VSbre.js:557 🔧 Sidebar Debug: {isMobile: false, sidebarCollapsed: false, mobileMenuOpen: false, width: 'expanded (256px)', classes: 'sidebar-expanded bg-white border-r border-gray-200…shadow-lg transition-all duration-300 ease-in-out'}
|
||||
index-D62VSbre.js:977 💰 Debug avoirs reçus: {count: 0, first: null}
|
||||
index-D62VSbre.js:977 💰 Debug avoirs reçus: {count: 0, first: null}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:977 🔍 RouterProduction Debug: {environment: 'production', isAuthenticated: true, isLoading: false, hasUser: true, userId: 'admin_local', …}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 Sidebar - User: {id: 'admin_local', username: 'admin', email: 'admin@logiflow.com', firstName: 'Administrateur', lastName: '', …}
|
||||
index-D62VSbre.js:557 Sidebar - isLoading: false
|
||||
index-D62VSbre.js:557 Sidebar - error: null
|
||||
index-D62VSbre.js:557 🔧 Sidebar Debug: {isMobile: false, sidebarCollapsed: false, mobileMenuOpen: false, width: 'expanded (256px)', classes: 'sidebar-expanded bg-white border-r border-gray-200…shadow-lg transition-all duration-300 ease-in-out'}
|
||||
index-D62VSbre.js:977 💰 Debug avoirs reçus: {count: 0, first: null}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:977 🔍 RouterProduction Debug: {environment: 'production', isAuthenticated: true, isLoading: false, hasUser: true, userId: 'admin_local', …}
|
||||
index-D62VSbre.js:513 🔍 Auth Environment Debug: {hostname: 'logiflow.ffnancy.fr', isDev: false, environment: 'production'}
|
||||
index-D62VSbre.js:557 Sidebar - User: {id: 'admin_local', username: 'admin', email: 'admin@logiflow.com', firstName: 'Administrateur', lastName: '', …}
|
||||
index-D62VSbre.js:557 Sidebar - isLoading: false
|
||||
index-D62VSbre.js:557 Sidebar - error: null
|
||||
index-D62VSbre.js:557 🔧 Sidebar Debug: {isMobile: false, sidebarCollapsed: false, mobileMenuOpen: false, width: 'expanded (256px)', classes: 'sidebar-expanded bg-white border-r border-gray-200…shadow-lg transition-all duration-300 ease-in-out'}
|
||||
index-D62VSbre.js:977 💰 Fetching avoirs from: /api/avoirs?storeId=1
|
||||
index-D62VSbre.js:977 💰 Debug avoirs reçus: {count: 0, first: null}
|
||||
index-D62VSbre.js:977 💰 Debug avoirs reçus: {count: 0, first: null}
|
||||
index-D62VSbre.js:977 💰 Avoirs received: 1 items
|
||||
index-D62VSbre.js:977 🔍 Render avoir: {id: 7, hasSupplier: true, hasGroup: true, hasCreator: true, createdAt: '2025-09-08T18:09:02.103Z', …}
|
||||
index-D62VSbre.js:977 ❌ Erreur rendu avoir: TypeError: E.amount.toFixed is not a function
|
||||
at index-D62VSbre.js:977:82600
|
||||
at Array.map (<anonymous>)
|
||||
at QY (index-D62VSbre.js:977:80948)
|
||||
at ev (index-D62VSbre.js:38:17018)
|
||||
at dx (index-D62VSbre.js:40:3139)
|
||||
at z_ (index-D62VSbre.js:40:44833)
|
||||
at L_ (index-D62VSbre.js:40:39790)
|
||||
at HI (index-D62VSbre.js:40:39718)
|
||||
at $f (index-D62VSbre.js:40:39570)
|
||||
at C1 (index-D62VSbre.js:40:36683) {id: 7, supplierId: 3, groupId: 1, invoiceReference: 'FC-25-00005972', amount: '-47.98', …}
|
||||
(anonymous) @ index-D62VSbre.js:977
|
||||
QY @ index-D62VSbre.js:977
|
||||
ev @ index-D62VSbre.js:38
|
||||
dx @ index-D62VSbre.js:40
|
||||
z_ @ index-D62VSbre.js:40
|
||||
L_ @ index-D62VSbre.js:40
|
||||
HI @ index-D62VSbre.js:40
|
||||
$f @ index-D62VSbre.js:40
|
||||
C1 @ index-D62VSbre.js:40
|
||||
Ni @ index-D62VSbre.js:38
|
||||
(anonymous) @ index-D62VSbre.js:40
|
||||
setTimeout
|
||||
hR @ index-D62VSbre.js:40
|
||||
o @ index-D62VSbre.js:40
|
||||
batch @ index-D62VSbre.js:40
|
||||
ea @ index-D62VSbre.js:40
|
||||
setData @ index-D62VSbre.js:40
|
||||
onSuccess @ index-D62VSbre.js:40
|
||||
f @ index-D62VSbre.js:40
|
||||
Promise.then
|
||||
b @ index-D62VSbre.js:40
|
||||
start @ index-D62VSbre.js:40
|
||||
fetch @ index-D62VSbre.js:40
|
||||
Ec @ index-D62VSbre.js:40
|
||||
setOptions @ index-D62VSbre.js:40
|
||||
(anonymous) @ index-D62VSbre.js:40
|
||||
Em @ index-D62VSbre.js:40
|
||||
Jo @ index-D62VSbre.js:40
|
||||
QI @ index-D62VSbre.js:40
|
||||
Ti @ index-D62VSbre.js:40
|
||||
C1 @ index-D62VSbre.js:40
|
||||
Ni @ index-D62VSbre.js:38
|
||||
(anonymous) @ index-D62VSbre.js:40
|
||||
setTimeout
|
||||
hR @ index-D62VSbre.js:40
|
||||
o @ index-D62VSbre.js:40
|
||||
batch @ index-D62VSbre.js:40
|
||||
ea @ index-D62VSbre.js:40
|
||||
setData @ index-D62VSbre.js:40
|
||||
onSuccess @ index-D62VSbre.js:40
|
||||
f @ index-D62VSbre.js:40
|
||||
Promise.then
|
||||
b @ index-D62VSbre.js:40
|
||||
start @ index-D62VSbre.js:40
|
||||
fetch @ index-D62VSbre.js:40
|
||||
Ec @ index-D62VSbre.js:40
|
||||
onSubscribe @ index-D62VSbre.js:40
|
||||
subscribe @ index-D62VSbre.js:40
|
||||
(anonymous) @ index-D62VSbre.js:40
|
||||
n_ @ index-D62VSbre.js:38
|
||||
Em @ index-D62VSbre.js:40
|
||||
Jo @ index-D62VSbre.js:40
|
||||
QI @ index-D62VSbre.js:40
|
||||
Ti @ index-D62VSbre.js:40
|
||||
C1 @ index-D62VSbre.js:40
|
||||
Ni @ index-D62VSbre.js:38
|
||||
(anonymous) @ index-D62VSbre.js:40
|
||||
index-D62VSbre.js:977 💰 Debug avoirs reçus: {count: 1, first: {…}}
|
||||
-205
@@ -1,205 +0,0 @@
|
||||
ions
|
||||
|
||||
|
||||
|
||||
|
||||
'1. N°2501 - Blanc',
|
||||
|
||||
'2. N°2502 - Moins de 1€ 2€ 3€ 4€ 5€',
|
||||
|
||||
'3. N°2503 - Imbattables'
|
||||
|
||||
]
|
||||
|
||||
GET /api/user 304 in 64ms
|
||||
|
||||
📋 PUBLICITIES RETURNED: { count: 29 }
|
||||
|
||||
GET /api/publicities 304 in 164ms
|
||||
|
||||
📢 [SERVER] User found: { username: 'admin', role: 'admin' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
GET /api/announcements 304 in 67ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin orders filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all orders
|
||||
|
||||
📢 [SERVER] Fetching announcements for user: admin_local environment: production
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
📢 [SERVER] User found: { username: 'admin', role: 'admin' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
Customer Orders returned: 11 items
|
||||
|
||||
GET /api/customer-orders 304 in 93ms
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 82 livraisons avec relations
|
||||
|
||||
Deliveries returned: 82 items
|
||||
|
||||
GET /api/deliveries 304 in 156ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 64 commandes avec relations
|
||||
|
||||
Orders returned: 64 items
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
GET /api/orders 304 in 194ms
|
||||
|
||||
GET /api/announcements 304 in 192ms
|
||||
|
||||
GET /api/groups 304 in 92ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
GET /api/suppliers 304 in 7ms
|
||||
|
||||
🔍 Avoirs API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
📋 Avoirs returned: 1 items
|
||||
|
||||
GET /api/avoirs 304 in 11ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
-205
@@ -1,205 +0,0 @@
|
||||
ns
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
📋 CALLING storage.getPublicities: { filterYear: 2025, groupIds: undefined }
|
||||
|
||||
📋 PUBLICITES FETCHED: 29 résultats pour année 2025
|
||||
|
||||
🔍 PREMIERS RESULTATS: [
|
||||
|
||||
'1. N°2501 - Blanc',
|
||||
|
||||
'2. N°2502 - Moins de 1€ 2€ 3€ 4€ 5€',
|
||||
|
||||
'3. N°2503 - Imbattables'
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
📋 PUBLICITIES RETURNED: { count: 29 }
|
||||
|
||||
GET /api/publicities 304 in 77ms
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
GET /api/announcements 304 in 83ms
|
||||
|
||||
GET /api/user 304 in 3ms
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
📢 [SERVER] Fetching announcements for user: admin_local environment: production
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin orders filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
Customer Orders returned: 11 items
|
||||
|
||||
📢 [SERVER] User found: { username: 'admin', role: 'admin' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
GET /api/customer-orders 304 in 113ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 82 livraisons avec relations
|
||||
|
||||
Deliveries returned: 82 items
|
||||
|
||||
GET /api/deliveries 304 in 151ms
|
||||
|
||||
GET /api/groups 304 in 139ms
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 64 commandes avec relations
|
||||
|
||||
Orders returned: 64 items
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
GET /api/orders 304 in 198ms
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
GET /api/announcements 304 in 196ms
|
||||
|
||||
GET /api/user 304 in 10ms
|
||||
|
||||
GET /api/suppliers 304 in 7ms
|
||||
|
||||
🔍 Avoirs API called with: { groupIds: undefined, userRole: 'admin' }
|
||||
|
||||
📋 Avoirs returned: 1 items
|
||||
|
||||
GET /api/avoirs 304 in 11ms
|
||||
|
||||
-204
@@ -1,204 +0,0 @@
|
||||
ns
|
||||
|
||||
|
||||
|
||||
|
||||
errorMessage: null,
|
||||
|
||||
invoiceReference: '981644',
|
||||
|
||||
supplierName: 'Polyflame',
|
||||
|
||||
fromCache: true,
|
||||
|
||||
permanent: false
|
||||
|
||||
}
|
||||
|
||||
POST /api/deliveries/343/verify-invoice 200 in 256ms
|
||||
|
||||
🔍 Recherche NocoDB: { tableId: 'mrr733dfb8wtt9b', column: 'Numero_BL' }
|
||||
|
||||
🔍 Recherche NocoDB: { tableId: 'mrr733dfb8wtt9b', column: 'Numero_BL' }
|
||||
|
||||
💾 [CACHE] Tentative sauvegarde: {
|
||||
|
||||
invoiceReference: '197771',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
cacheKey: '1_197771',
|
||||
|
||||
exists: true,
|
||||
|
||||
isReconciled: false,
|
||||
|
||||
cacheType: 'temporaire 6h (trouvé)',
|
||||
|
||||
expiresAt: '2025-11-03T23:21:35.673Z'
|
||||
|
||||
}
|
||||
|
||||
💾 [CACHE] Tentative sauvegarde: {
|
||||
|
||||
invoiceReference: '197771',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
cacheKey: '1_197771',
|
||||
|
||||
exists: true,
|
||||
|
||||
isReconciled: false,
|
||||
|
||||
cacheType: 'temporaire 6h (trouvé)',
|
||||
|
||||
expiresAt: '2025-11-03T23:21:35.675Z'
|
||||
|
||||
}
|
||||
|
||||
✅ [CACHE] Résultat sauvé en cache: {
|
||||
|
||||
␍ id: 31803,
|
||||
|
||||
invoiceReference: '197771',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
exists: true,
|
||||
|
||||
isReconciled: false,
|
||||
|
||||
cacheType: 'temporaire 6h (trouvé)',
|
||||
|
||||
cacheKey: '1_197771'
|
||||
|
||||
}
|
||||
|
||||
📅 Date d'échéance récupérée et normalisée: 2025-11-29 (original: 2025-11-29)
|
||||
|
||||
✅ [CACHE] Résultat sauvé en cache: {
|
||||
|
||||
␍ id: 31803,
|
||||
|
||||
invoiceReference: '197771',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
exists: true,
|
||||
|
||||
isReconciled: false,
|
||||
|
||||
cacheType: 'temporaire 6h (trouvé)',
|
||||
|
||||
cacheKey: '1_197771'
|
||||
|
||||
}
|
||||
|
||||
📅 Date d'échéance récupérée et normalisée: 2025-11-29 (original: 2025-11-29)
|
||||
|
||||
Error updating delivery: error: column "due_date" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.updateDelivery (file:///app/dist/index.js:2142:28)
|
||||
|
||||
at async file:///app/dist/index.js:14714:31 {
|
||||
|
||||
length: 174,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: 'Perhaps you meant to reference the column "deliveries.dueDate".',
|
||||
|
||||
position: '310',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
PUT /api/deliveries/427 500 in 307ms
|
||||
|
||||
Error updating delivery: error: column "due_date" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.updateDelivery (file:///app/dist/index.js:2142:28)
|
||||
|
||||
at async file:///app/dist/index.js:14714:31 {
|
||||
|
||||
length: 174,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: 'Perhaps you meant to reference the column "deliveries.dueDate".',
|
||||
|
||||
position: '310',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
PUT /api/deliveries/427 500 in 330ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
|
||||
HEAD /api/health 200 in 1ms
|
||||
-205
@@ -1,205 +0,0 @@
|
||||
ns
|
||||
|
||||
|
||||
|
||||
|
||||
updatedAt: 2025-07-25T23:07:17.197Z
|
||||
|
||||
}
|
||||
|
||||
🔧 Configuration NocoDB trouvée: {
|
||||
|
||||
configName: 'Nocodb',
|
||||
|
||||
baseUrl: 'https://nocodb.ffnancy.fr',
|
||||
|
||||
projectId: 'pcg4uw79ukvycxc',
|
||||
|
||||
hasToken: true
|
||||
|
||||
}
|
||||
|
||||
🔧 Utilisation table ID: {
|
||||
|
||||
groupTable: 'CommandeH',
|
||||
|
||||
configuredId: 'my7zunxprumahmm',
|
||||
|
||||
resolvedId: 'my7zunxprumahmm'
|
||||
|
||||
}
|
||||
|
||||
🔍 Recherche NocoDB: { tableId: 'my7zunxprumahmm', column: 'RefFacture' }
|
||||
|
||||
🔧 Configuration NocoDB active récupérée: {
|
||||
|
||||
id: 1,
|
||||
|
||||
name: 'Nocodb',
|
||||
|
||||
baseUrl: 'https://nocodb.ffnancy.fr',
|
||||
|
||||
projectId: 'pcg4uw79ukvycxc',
|
||||
|
||||
apiToken: 'z4BAwLo6dgoN_E7PKJSHN7PA7kdBePtKOYcsDlwQ',
|
||||
|
||||
description: '',
|
||||
|
||||
isActive: true,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-07-22T11:12:54.971Z,
|
||||
|
||||
updatedAt: 2025-07-25T23:07:17.197Z
|
||||
|
||||
}
|
||||
|
||||
🔧 Configuration NocoDB trouvée: {
|
||||
|
||||
configName: 'Nocodb',
|
||||
|
||||
baseUrl: 'https://nocodb.ffnancy.fr',
|
||||
|
||||
projectId: 'pcg4uw79ukvycxc',
|
||||
|
||||
hasToken: true
|
||||
|
||||
}
|
||||
|
||||
🔧 Utilisation table ID: {
|
||||
|
||||
groupTable: 'CommandeF',
|
||||
|
||||
configuredId: 'mrr733dfb8wtt9b',
|
||||
|
||||
resolvedId: 'mrr733dfb8wtt9b'
|
||||
|
||||
}
|
||||
|
||||
🔍 Recherche NocoDB: { tableId: 'mrr733dfb8wtt9b', column: 'RefFacture' }
|
||||
|
||||
✅ [CACHE] Résultat sauvé en cache: {
|
||||
|
||||
|
||||
|
||||
,
|
||||
|
||||
invoiceReference: '25070526',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
exists: true,
|
||||
|
||||
cacheKey: '1_25070526'
|
||||
|
||||
}
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
invoiceReference: '25070526',
|
||||
|
||||
invoiceAmount: 920.5,
|
||||
|
||||
supplierName: "Cotillon d'Alasce"
|
||||
|
||||
}
|
||||
|
||||
✅ [CACHE] Résultat sauvé en cache: {
|
||||
|
||||
␍ id: 16638,
|
||||
|
||||
invoiceReference: 'F5175811',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
exists: true,
|
||||
|
||||
cacheKey: '1_f5175811'
|
||||
|
||||
}
|
||||
|
||||
✅ Résultat vérification: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
invoiceReference: 'F5175811',
|
||||
|
||||
invoiceAmount: 2812.57,
|
||||
|
||||
supplierName: 'JJA Atmosphera'
|
||||
|
||||
}
|
||||
|
||||
POST /api/deliveries/61/verify-invoice 200 in 2015ms
|
||||
|
||||
POST /api/deliveries/89/verify-invoice 200 in 1989ms
|
||||
|
||||
🔍 [CACHE] Résultat cache: {
|
||||
|
||||
found: true,
|
||||
|
||||
expired: true,
|
||||
|
||||
expiresAt: 2025-08-14T16:04:19.769Z,
|
||||
|
||||
currentTime: '2025-08-17T16:31:06.169Z'
|
||||
|
||||
}
|
||||
|
||||
⏰ [CACHE] Cache expiré pour: { invoiceReference: '25080486', groupId: 1 }
|
||||
|
||||
🔍 [INVOICE] Pas de cache, requête API...
|
||||
|
||||
🔧 Configuration NocoDB active récupérée: {
|
||||
|
||||
id: 1,
|
||||
|
||||
name: 'Nocodb',
|
||||
|
||||
baseUrl: 'https://nocodb.ffnancy.fr',
|
||||
|
||||
projectId: 'pcg4uw79ukvycxc',
|
||||
|
||||
apiToken: 'z4BAwLo6dgoN_E7PKJSHN7PA7kdBePtKOYcsDlwQ',
|
||||
|
||||
description: '',
|
||||
|
||||
isActive: true,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-07-22T11:12:54.971Z,
|
||||
|
||||
updatedAt: 2025-07-25T23:07:17.197Z
|
||||
|
||||
}
|
||||
|
||||
🔧 Configuration NocoDB trouvée: {
|
||||
|
||||
configName: 'Nocodb',
|
||||
|
||||
baseUrl: 'https://nocodb.ffnancy.fr',
|
||||
|
||||
projectId: 'pcg4uw79ukvycxc',
|
||||
|
||||
hasToken: true
|
||||
|
||||
}
|
||||
|
||||
🔧 Utilisation table ID: {
|
||||
|
||||
groupTable: 'CommandeF',
|
||||
|
||||
configuredId: 'mrr733dfb8wtt9b',
|
||||
|
||||
resolvedId: 'mrr733dfb8wtt9b'
|
||||
|
||||
}
|
||||
|
||||
-204
@@ -1,204 +0,0 @@
|
||||
s
|
||||
|
||||
|
||||
|
||||
|
||||
📋 CALLING storage.getPublicities: { filterYear: 2025, groupIds: undefined }
|
||||
|
||||
GET /api/user 304 in 139ms
|
||||
|
||||
📋 PUBLICITES FETCHED: 29 résultats pour année 2025
|
||||
|
||||
🔍 PREMIERS RESULTATS: [
|
||||
|
||||
'1. N°2501 - Blanc',
|
||||
|
||||
'2. N°2502 - Moins de 1€ 2€ 3€ 4€ 5€',
|
||||
|
||||
'3. N°2503 - Imbattables'
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
📋 PUBLICITIES RETURNED: { count: 29 }
|
||||
|
||||
GET /api/publicities 304 in 235ms
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
GET /api/announcements 304 in 136ms
|
||||
|
||||
GET /api/user 304 in 4ms
|
||||
|
||||
📢 [SERVER] Fetching announcements for user: admin_local environment: production
|
||||
|
||||
Orders API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin orders filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all orders
|
||||
|
||||
Deliveries API called with: {
|
||||
|
||||
startDate: undefined,
|
||||
|
||||
endDate: undefined,
|
||||
|
||||
storeId: '1',
|
||||
|
||||
withBL: undefined,
|
||||
|
||||
userRole: 'admin'
|
||||
|
||||
}
|
||||
|
||||
🔍 Admin deliveries filtering by store: { storeId: '1', groupIds: [ 1 ], role: 'admin' }
|
||||
|
||||
Fetching all deliveries
|
||||
|
||||
Customer Orders API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
📢 [SERVER] User found: { username: 'admin', role: 'admin' }
|
||||
|
||||
🎯 [PRODUCTION] Using PostgreSQL DASHBOARD_MESSAGES table
|
||||
|
||||
Customer Orders returned: 11 items
|
||||
|
||||
GET /api/customer-orders 304 in 90ms
|
||||
|
||||
🔗 PRODUCTION: getDeliveries() récupéré 82 livraisons avec relations
|
||||
|
||||
Deliveries returned: 82 items
|
||||
|
||||
GET /api/deliveries 304 in 170ms
|
||||
|
||||
🔍 [PRODUCTION] Raw messages from DB: 2 items: [
|
||||
|
||||
{
|
||||
|
||||
id: 16,
|
||||
|
||||
title: 'Mise à jour Prix',
|
||||
|
||||
content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.',
|
||||
|
||||
type: 'success',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin',
|
||||
|
||||
createdAt: 2025-08-18T10:45:08.585Z
|
||||
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
id: 8,
|
||||
|
||||
title: 'Bon de Livraison',
|
||||
|
||||
content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.',
|
||||
|
||||
type: 'info',
|
||||
|
||||
storeId: null,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-08-07T11:04:38.123Z
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin
|
||||
|
||||
🔍 [PRODUCTION] Looking for user with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Not found
|
||||
|
||||
❌ [PRODUCTION] User not found with username: admin_local
|
||||
|
||||
🔍 [PRODUCTION] User search result: Found
|
||||
|
||||
🎯 [PRODUCTION] Found announcements: 2
|
||||
|
||||
🔗 PRODUCTION: getOrders() récupéré 64 commandes avec relations
|
||||
|
||||
Orders returned: 64 items
|
||||
|
||||
GET /api/announcements 304 in 216ms
|
||||
|
||||
GET /api/orders 304 in 221ms
|
||||
|
||||
GET /api/groups 304 in 216ms
|
||||
|
||||
GET /api/user 304 in 74ms
|
||||
|
||||
GET /api/suppliers 304 in 6ms
|
||||
|
||||
🔍 Avoirs API called with: { groupIds: [ 1 ], userRole: 'admin' }
|
||||
|
||||
📋 Avoirs returned: 1 items
|
||||
|
||||
GET /api/avoirs 304 in 9ms
|
||||
-204
@@ -1,204 +0,0 @@
|
||||
tions
|
||||
|
||||
|
||||
|
||||
|
||||
Error fetching SAV stats: error: column "priority" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getSavTicketStats (file:///app/dist/index.js:2046:25)
|
||||
|
||||
at async file:///app/dist/index.js:6203:21 {
|
||||
|
||||
length: 108,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '28',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
GET /api/sav/stats 500 in 11ms
|
||||
|
||||
Error fetching SAV tickets: error: column sav_tickets.priority does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getSavTickets (file:///app/dist/index.js:1974:25)
|
||||
|
||||
at async file:///app/dist/index.js:6016:23 {
|
||||
|
||||
length: 119,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '350',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
GET /api/sav/tickets 500 in 14ms
|
||||
|
||||
Error fetching SAV stats: error: column "priority" does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getSavTicketStats (file:///app/dist/index.js:2046:25)
|
||||
|
||||
at async file:///app/dist/index.js:6203:21 {
|
||||
|
||||
length: 108,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '28',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
GET /api/sav/stats 500 in 13ms
|
||||
|
||||
Error fetching SAV tickets: error: column sav_tickets.priority does not exist
|
||||
|
||||
at /app/node_modules/pg-pool/index.js:45:11
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async file:///app/node_modules/drizzle-orm/node-postgres/session.js:83:22
|
||||
|
||||
at async DatabaseStorage.getSavTickets (file:///app/dist/index.js:1974:25)
|
||||
|
||||
at async file:///app/dist/index.js:6016:23 {
|
||||
|
||||
length: 119,
|
||||
|
||||
severity: 'ERROR',
|
||||
|
||||
code: '42703',
|
||||
|
||||
detail: undefined,
|
||||
|
||||
hint: undefined,
|
||||
|
||||
position: '350',
|
||||
|
||||
internalPosition: undefined,
|
||||
|
||||
internalQuery: undefined,
|
||||
|
||||
where: undefined,
|
||||
|
||||
schema: undefined,
|
||||
|
||||
table: undefined,
|
||||
|
||||
column: undefined,
|
||||
|
||||
dataType: undefined,
|
||||
|
||||
constraint: undefined,
|
||||
|
||||
file: 'parse_relation.c',
|
||||
|
||||
line: '3665',
|
||||
|
||||
routine: 'errorMissingColumn'
|
||||
|
||||
}
|
||||
|
||||
GET /api/sav/tickets 500 in 14ms
|
||||
-204
@@ -1,204 +0,0 @@
|
||||
tions
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
✅ Résultat vérification avoir: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
errorMessage: null,
|
||||
|
||||
invoiceReference: 'FC-25-00005972',
|
||||
|
||||
supplierName: 'Artyfete',
|
||||
|
||||
fromCache: true,
|
||||
|
||||
permanent: false
|
||||
|
||||
}
|
||||
|
||||
POST /api/avoirs/7/verify-invoice 200 in 8ms
|
||||
|
||||
🔍 Vérification facture avoir: {
|
||||
|
||||
avoirId: 7,
|
||||
|
||||
invoiceReference: 'FC-25-00005972',
|
||||
|
||||
supplier: 'Artyfete',
|
||||
|
||||
group: 'Frouard',
|
||||
|
||||
␍ groupId: 1
|
||||
|
||||
}
|
||||
|
||||
🔍 [INVOICE] Début vérification facture: { invoiceReference: 'FC-25-00005972', groupId: 1, forceRefresh: true }
|
||||
|
||||
🔄 [INVOICE] Refresh forcé, ignorant le cache
|
||||
|
||||
🔧 Configuration groupe: {
|
||||
|
||||
groupName: 'Frouard',
|
||||
|
||||
hasNocodbConfig: true,
|
||||
|
||||
hasTableName: true,
|
||||
|
||||
hasWebhook: true
|
||||
|
||||
}
|
||||
|
||||
🔍 Vérification NocoDB en production...
|
||||
|
||||
🔧 Configuration NocoDB active récupérée: {
|
||||
|
||||
id: 1,
|
||||
|
||||
name: 'Nocodb',
|
||||
|
||||
baseUrl: 'https://nocodb.ffnancy.fr',
|
||||
|
||||
projectId: 'pcg4uw79ukvycxc',
|
||||
|
||||
apiToken: 'z4BAwLo6dgoN_E7PKJSHN7PA7kdBePtKOYcsDlwQ',
|
||||
|
||||
description: '',
|
||||
|
||||
isActive: true,
|
||||
|
||||
createdBy: 'admin_local',
|
||||
|
||||
createdAt: 2025-07-22T11:12:54.971Z,
|
||||
|
||||
updatedAt: 2025-07-25T23:07:17.197Z
|
||||
|
||||
}
|
||||
|
||||
🔧 Configuration NocoDB trouvée: {
|
||||
|
||||
configName: 'Nocodb',
|
||||
|
||||
baseUrl: 'https://nocodb.ffnancy.fr',
|
||||
|
||||
projectId: 'pcg4uw79ukvycxc',
|
||||
|
||||
hasToken: true
|
||||
|
||||
}
|
||||
|
||||
🔧 Utilisation table ID: {
|
||||
|
||||
groupTable: 'CommandeF',
|
||||
|
||||
configuredId: 'mrr733dfb8wtt9b',
|
||||
|
||||
resolvedId: 'mrr733dfb8wtt9b'
|
||||
|
||||
}
|
||||
|
||||
🔍 Recherche NocoDB: { tableId: 'mrr733dfb8wtt9b', column: 'RefFacture' }
|
||||
|
||||
💾 [CACHE] Tentative sauvegarde: {
|
||||
|
||||
invoiceReference: 'FC-25-00005972',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
cacheKey: '1_fc-25-00005972',
|
||||
|
||||
exists: true,
|
||||
|
||||
isReconciled: false,
|
||||
|
||||
cacheType: 'temporaire 6h (trouvé)',
|
||||
|
||||
expiresAt: '2025-09-09T00:48:35.637Z'
|
||||
|
||||
}
|
||||
|
||||
✅ [CACHE] Résultat sauvé en cache: {
|
||||
|
||||
␍ id: 23216,
|
||||
|
||||
invoiceReference: 'FC-25-00005972',
|
||||
|
||||
groupId: 1,
|
||||
|
||||
exists: true,
|
||||
|
||||
isReconciled: false,
|
||||
|
||||
cacheType: 'temporaire 6h (trouvé)',
|
||||
|
||||
cacheKey: '1_fc-25-00005972'
|
||||
|
||||
}
|
||||
|
||||
✅ Résultat vérification avoir: {
|
||||
|
||||
exists: true,
|
||||
|
||||
matchType: 'invoice_reference',
|
||||
|
||||
invoiceReference: 'FC-25-00005972',
|
||||
|
||||
invoiceAmount: -47.976,
|
||||
|
||||
supplierName: 'Artyfete'
|
||||
|
||||
}
|
||||
|
||||
POST /api/avoirs/7/verify-invoice 200 in 33ms
|
||||
|
||||
💰 PUT Avoir - Raw body received: {
|
||||
|
||||
"supplierId": 3,
|
||||
|
||||
"groupId": 1,
|
||||
|
||||
"invoiceReference": "FC-25-00005972",
|
||||
|
||||
"amount": -47.976,
|
||||
|
||||
"comment": "",
|
||||
|
||||
"commercialProcessed": false,
|
||||
|
||||
"status": "Reçu"
|
||||
|
||||
}
|
||||
|
||||
❌ [PUT AVOIR] ERREURS VALIDATION ZOD: [
|
||||
|
||||
{
|
||||
|
||||
"code": "too_small",
|
||||
|
||||
"minimum": 0,
|
||||
|
||||
"type": "number",
|
||||
|
||||
"inclusive": false,
|
||||
|
||||
"exact": false,
|
||||
|
||||
"message": "Number must be greater than 0",
|
||||
|
||||
"path": [
|
||||
|
||||
"amount"
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
PUT /api/avoirs/7 400 in 7ms
|
||||
-90
@@ -1,90 +0,0 @@
|
||||
ublishing post 7e27d1f3-3e85-4d19-b35d-9b4134fce2ce to facebook page Frouard
|
||||
|
||||
Error publishing post 54eabfab-437b-4d84-92aa-b24b9da84f8e: Error: Facebook API error: An unknown error has occurred. (code: 1)
|
||||
|
||||
at FacebookService.publishStory (file:///app/dist/index.js:1997:13)
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async FacebookService.publishPost (file:///app/dist/index.js:1824:14)
|
||||
|
||||
at async SchedulerService.publishPost (file:///app/dist/index.js:2072:24)
|
||||
|
||||
at async SchedulerService.processPendingPosts (file:///app/dist/index.js:2034:11)
|
||||
|
||||
at async file:///app/dist/index.js:2010:7
|
||||
|
||||
at async Timeout._onTimeout (/app/node_modules/node-cron/dist/esm/scheduler/runner.js:70:44)
|
||||
|
||||
Publishing post 7e27d1f3-3e85-4d19-b35d-9b4134fce2ce to facebook page Houdemont
|
||||
|
||||
Error publishing post 1be182d0-00e3-440f-a98c-dadfd45f0304: Error: Facebook API error: An unknown error has occurred. (code: 1)
|
||||
|
||||
at FacebookService.publishStory (file:///app/dist/index.js:1997:13)
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async FacebookService.publishPost (file:///app/dist/index.js:1824:14)
|
||||
|
||||
at async SchedulerService.publishPost (file:///app/dist/index.js:2072:24)
|
||||
|
||||
at async SchedulerService.processPendingPosts (file:///app/dist/index.js:2034:11)
|
||||
|
||||
at async file:///app/dist/index.js:2010:7
|
||||
|
||||
at async Timeout._onTimeout (/app/node_modules/node-cron/dist/esm/scheduler/runner.js:70:44)
|
||||
|
||||
6:40:50 AM [express] GET /api/scheduled-posts 200 in 48ms :: [{"id":"9128ce3e-88b5-4afe-9834-e79e2da…
|
||||
|
||||
6:40:51 AM [express] GET /api/auth/session 304 in 1ms :: {"id":"417b5410-1184-46d7-ac96-e85f731b0c98…
|
||||
|
||||
6:40:51 AM [express] GET /api/scheduled-posts 304 in 35ms :: [{"id":"9128ce3e-88b5-4afe-9834-e79e2da…
|
||||
|
||||
6:40:51 AM [express] GET /api/pages 304 in 40ms :: [{"id":"1abe2ba5-fd7b-423a-b82d-da953c340db2","us…
|
||||
|
||||
6:40:57 AM [express] GET /api/posts/7e27d1f3-3e85-4d19-b35d-9b4134fce2ce 304 in 6ms :: {"post":{"id"…
|
||||
|
||||
Publishing post 7e27d1f3-3e85-4d19-b35d-9b4134fce2ce to facebook page Frouard
|
||||
|
||||
Error publishing post 54eabfab-437b-4d84-92aa-b24b9da84f8e: Error: Facebook API error: An unknown error has occurred. (code: 1)
|
||||
|
||||
at FacebookService.publishStory (file:///app/dist/index.js:1997:13)
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async FacebookService.publishPost (file:///app/dist/index.js:1824:14)
|
||||
|
||||
at async SchedulerService.publishPost (file:///app/dist/index.js:2072:24)
|
||||
|
||||
at async SchedulerService.processPendingPosts (file:///app/dist/index.js:2034:11)
|
||||
|
||||
at async file:///app/dist/index.js:2010:7
|
||||
|
||||
at async Timeout._onTimeout (/app/node_modules/node-cron/dist/esm/scheduler/runner.js:70:44)
|
||||
|
||||
Publishing post 7e27d1f3-3e85-4d19-b35d-9b4134fce2ce to facebook page Houdemont
|
||||
|
||||
Error publishing post 1be182d0-00e3-440f-a98c-dadfd45f0304: Error: Facebook API error: An unknown error has occurred. (code: 1)
|
||||
|
||||
at FacebookService.publishStory (file:///app/dist/index.js:1997:13)
|
||||
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
|
||||
|
||||
at async FacebookService.publishPost (file:///app/dist/index.js:1824:14)
|
||||
|
||||
at async SchedulerService.publishPost (file:///app/dist/index.js:2072:24)
|
||||
|
||||
at async SchedulerService.processPendingPosts (file:///app/dist/index.js:2034:11)
|
||||
|
||||
at async file:///app/dist/index.js:2010:7
|
||||
|
||||
at async Timeout._onTimeout (/app/node_modules/node-cron/dist/esm/scheduler/runner.js:70:44)
|
||||
|
||||
6:41:03 AM [express] GET /api/auth/session 304 in 1ms :: {"id":"417b5410-1184-46d7-ac96-e85f731b0c98…
|
||||
|
||||
6:41:03 AM [express] GET /api/scheduled-posts 304 in 42ms :: [{"id":"9128ce3e-88b5-4afe-9834-e79e2da…
|
||||
|
||||
6:41:03 AM [express] GET /api/pages 304 in 24ms :: [{"id":"1abe2ba5-fd7b-423a-b82d-da953c340db2","us…
|
||||
|
||||
6:41:07 AM [express] GET /api/stats 200 in 22ms :: {"scheduledPosts":2,"scheduledPostsChange":"+100%…
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 191 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 191 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 16 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 71 KiB |
Loaded 100 of 343 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user