Merge pull request #94 from R0m1k3/1.1

Improve reconciliation display and fix statistics calculations
This commit is contained in:
LogiFlow authored and GitHub committed 2025-08-13 16:24:40 +02:00
commit 4c24754b9b
4 files changed
+33 -19

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

+11 -3
View File
@@ -187,8 +187,8 @@ export default function BLReconciliation() {
});
};
// Récupérer les livraisons validées avec BL
const { data: deliveriesWithBL = [], isLoading } = useQuery({
// Récupérer les livraisons validées avec BL - CACHE INVALIDÉ après modifications
const { data: deliveriesWithBL = [], isLoading, refetch } = useQuery({
queryKey: ['/api/deliveries/bl', selectedStoreId],
queryFn: async () => {
const params = new URLSearchParams({});
@@ -214,7 +214,8 @@ export default function BLReconciliation() {
return filtered.sort((a: any, b: any) => new Date(b.deliveredDate || b.updatedAt).getTime() - new Date(a.deliveredDate || a.updatedAt).getTime());
},
enabled: !!user
enabled: !!user,
staleTime: 0 // Éviter la mise en cache pour toujours avoir les dernières données BL
});
// VÉRIFICATION AUTOMATIQUE AU CHARGEMENT avec système de cache
@@ -267,7 +268,9 @@ export default function BLReconciliation() {
description: "Données de rapprochement mises à jour",
});
// Invalidation cache + refetch forcé pour mise à jour immédiate
queryClient.invalidateQueries({ queryKey: ['/api/deliveries/bl'] });
refetch();
handleCloseModal();
} catch (error) {
toast({
@@ -397,7 +400,10 @@ export default function BLReconciliation() {
description: "Rapprochement validé avec succès",
});
// Invalidation cache + refetch forcé pour mise à jour immédiate
queryClient.invalidateQueries({ queryKey: ['/api/deliveries/bl'] });
queryClient.invalidateQueries({ queryKey: ['/api/deliveries'] });
refetch(); // Force recharge immédiate des données BL
} catch (error) {
toast({
title: "Erreur",
@@ -432,7 +438,9 @@ export default function BLReconciliation() {
description: "Rapprochement dévalidé avec succès",
});
// Invalidation cache + refetch forcé pour mise à jour immédiate
queryClient.invalidateQueries({ queryKey: ['/api/deliveries/bl'] });
refetch();
} catch (error) {
toast({
title: "Erreur",
+12 -14
View File
@@ -19,22 +19,20 @@ La plateforme fournit une gestion robuste des flux de travail de livraison avec
## Recent Changes
### 2025-08-13 - Correction complète des statistiques du tableau de bord
✅ **Résolution définitive de l'affichage de zéros dans les statistiques** :
### 2025-08-13 - Correction finale statistiques + affichage BL résolu
✅ **Résolution définitive des bugs statistiques et affichage BL** :
**Problème identifié et corrigé :**
- **Statistiques hardcodées** : La méthode `getMonthlyStats()` retournait des zéros fixes
- **Calculs réels implémentés** : Requêtes PostgreSQL pour vraies statistiques mensuelles
- **Filtrage par magasin** : Support des filtres par groupes/magasins
- **Gestion des erreurs** : Fallback en cas d'erreur de base de données
**1. Statistiques mois corrigées :**
- **Problème** : Palettes/colis comptées sur scheduledDate au lieu de deliveredDate
- **Solution** : Filtrage par `deliveredDate` pour vraies stats mensuelles
- **Impact** : Statistiques reflètent maintenant les livraisons effectives du mois
- **Calcul** : Seules les livraisons `delivered` dans le mois avec `deliveredDate` valide
**Calculs statistiques implémentés :**
- **Commandes** : COUNT des commandes du mois par date plannedDate
- **Livraisons** : COUNT des livraisons du mois par date plannedDate
- **Palettes** : SUM des quantités de livraisons
- **Colis** : COUNT total des livraisons
- **Délai moyen** : Moyenne des jours entre plannedDate et actualDate
- **Commandes en attente** : COUNT des commandes sans date ou statut pending
**2. Affichage BL rapprochement optimisé :**
- **Problème** : BL numbers n'apparaissaient pas immédiatement après validation
- **Solution** : Cache invalidation + refetch forcé après modification
- **Technique** : `staleTime: 0` + `queryClient.invalidateQueries` + `refetch()`
- **Résultat** : Mise à jour instantanée de l'interface utilisateur
### 2025-08-13 - Erreurs 502 production entièrement corrigées
✅ **Résolution définitive des erreurs Bad Gateway en production** :
+10 -2
View File
@@ -612,11 +612,12 @@ export class DatabaseStorage implements IStorage {
try {
console.log('📊 Calcul statistiques mensuelles:', { year, month, startDate, endDate, groupIds });
// Construire les conditions pour le filtrage par groupe
// Construire les conditions pour le filtrage par groupe - UTILISER LE BON CHAMP DE DATE
let ordersWhereCondition = and(
gte(orders.plannedDate, startDate),
lt(orders.plannedDate, endDate)
);
// Pour les livraisons, utiliser deliveredDate pour celles livrées, sinon scheduledDate
let deliveriesWhereCondition = and(
gte(deliveries.scheduledDate, startDate),
lt(deliveries.scheduledDate, endDate)
@@ -652,12 +653,19 @@ export class DatabaseStorage implements IStorage {
.where(pendingWhereCondition);
// Calculer les totaux de palettes et colis du mois (SEULEMENT livraisons delivered)
// IMPORTANT: Utiliser deliveredDate pour filtrer par le mois de livraison effective
let deliveredWhereCondition = and(
deliveriesWhereCondition,
gte(deliveries.deliveredDate, startDate),
lt(deliveries.deliveredDate, endDate),
eq(deliveries.status, 'delivered'),
isNotNull(deliveries.deliveredDate)
);
// Ajouter le filtre par groupe pour les livraisons delivered
if (groupIds && groupIds.length > 0) {
deliveredWhereCondition = and(deliveredWhereCondition, inArray(deliveries.groupId, groupIds));
}
const deliveriesStatsResult = await db
.select({
totalPalettes: sql<number>`COALESCE(SUM(CAST(${deliveries.quantity} as INTEGER)), 0)`,