Improve delivery time calculation to only include orders with linked deliveries

Update the average delivery time calculation to consider only deliveries with an associated order, measuring the time between the order's planned date and the delivery date.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: cfbfe47c-0c9a-4ebf-8a41-2937407eccff
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/cfbfe47c-0c9a-4ebf-8a41-2937407eccff/ECRh2Iu
This commit is contained in:
michaelschal committed 2025-09-03 14:46:31 +00:00
1 parent 44c8f05519
commit d938db04ff
1 file changed
+12 -3
+12 -3
View File
@@ -1149,14 +1149,23 @@ export class DatabaseStorage implements IStorage {
deliveredWhereCondition = and(deliveredWhereCondition, inArray(deliveries.groupId, groupIds));
}
// NOUVEAU: Calculer le délai moyen entre la date de commande et la date de livraison
// Uniquement pour les livraisons qui ont une commande liée
const deliveriesStatsResult = await db
.select({
totalPalettes: sql<number>`COALESCE(SUM(CAST(${deliveries.quantity} as INTEGER)), 0)`,
totalPackages: sql<number>`COALESCE(COUNT(*), 0)`,
avgDelay: sql<number>`COALESCE(AVG(EXTRACT(DAY FROM (${deliveries.deliveredDate} - ${deliveries.scheduledDate}))), 0)`
avgDelay: sql<number>`COALESCE(AVG(EXTRACT(DAY FROM (${deliveries.deliveredDate} - ${orders.plannedDate}))), 0)`
})
.from(deliveries)
.where(deliveredWhereCondition);
.innerJoin(orders, eq(deliveries.orderId, orders.id))
.where(
and(
deliveredWhereCondition,
isNotNull(deliveries.orderId), // S'assurer qu'il y a une commande liée
isNotNull(orders.plannedDate) // S'assurer que la commande a une date
)
);
const ordersCount = Number(ordersResult[0]?.count || 0);
const deliveriesCount = Number(deliveriesResult[0]?.count || 0);
@@ -1169,7 +1178,7 @@ export class DatabaseStorage implements IStorage {
ordersCount,
deliveriesCount,
pendingOrdersCount,
averageDeliveryTime,
averageDeliveryTime: `${averageDeliveryTime} jours (commande → livraison, livraisons avec commande liée uniquement)`,
totalPalettes,
totalPackages,
});