mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-23 06:58:19 +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