diff --git a/backend/gestion/handlers/deleviry.go b/backend/gestion/handlers/deleviry.go index 4c3dbcbd..5ff17a05 100644 --- a/backend/gestion/handlers/deleviry.go +++ b/backend/gestion/handlers/deleviry.go @@ -537,7 +537,7 @@ func GetMyDeliveryStats(c *gin.Context) { gdb.Raw(` SELECT DATE(updated_at) AS day, COUNT(*) AS count, - COALESCE(SUM(total_prix), 0) AS revenue + COALESCE(SUM(total_prix - COALESCE(referral_used, 0)), 0) AS revenue FROM commandes WHERE livreur_assign = ? AND status IN ('livre', 'approved') @@ -551,7 +551,7 @@ func GetMyDeliveryStats(c *gin.Context) { SELECT EXTRACT(WEEK FROM updated_at)::int AS week_num, EXTRACT(YEAR FROM updated_at)::int AS year, COUNT(*) AS count, - COALESCE(SUM(total_prix), 0) AS revenue + COALESCE(SUM(total_prix - COALESCE(referral_used, 0)), 0) AS revenue FROM commandes WHERE livreur_assign = ? AND status IN ('livre', 'approved') @@ -565,7 +565,7 @@ func GetMyDeliveryStats(c *gin.Context) { SELECT EXTRACT(MONTH FROM updated_at)::int AS month_num, EXTRACT(YEAR FROM updated_at)::int AS year, COUNT(*) AS count, - COALESCE(SUM(total_prix), 0) AS revenue + COALESCE(SUM(total_prix - COALESCE(referral_used, 0)), 0) AS revenue FROM commandes WHERE livreur_assign = ? AND status IN ('livre', 'approved') diff --git a/backend/gestion/handlers/stats.go b/backend/gestion/handlers/stats.go index 8d402172..65c8b83b 100644 --- a/backend/gestion/handlers/stats.go +++ b/backend/gestion/handlers/stats.go @@ -64,7 +64,7 @@ func GetAdminStats(c *gin.Context) { // ── Revenus par jour sur 30 jours (commandes approuvées) ───────────────── var dayRevRows []models.DayRevenueRow gdb.Raw(` - SELECT DATE(created_at) AS day, COALESCE(SUM(total_prix), 0) AS revenue + SELECT DATE(created_at) AS day, COALESCE(SUM(total_prix - COALESCE(referral_used, 0)), 0) AS revenue FROM commandes WHERE created_at >= NOW() - INTERVAL '30 days' AND status = 'approved' @@ -87,7 +87,7 @@ func GetAdminStats(c *gin.Context) { SELECT EXTRACT(HOUR FROM created_at)::int AS hour, COUNT(*) AS count, - COALESCE(SUM(total_prix), 0) AS revenue + COALESCE(SUM(total_prix - COALESCE(referral_used, 0)), 0) AS revenue FROM commandes WHERE status != 'cancelled' GROUP BY hour @@ -221,7 +221,7 @@ func GetAdminStats(c *gin.Context) { var totalOrders int64 var totalRevenue float64 gdb.Raw(`SELECT COUNT(*) FROM commandes WHERE status != 'cancelled'`).Scan(&totalOrders) - gdb.Raw(`SELECT COALESCE(SUM(total_prix), 0) FROM commandes WHERE status = 'approved'`).Scan(&totalRevenue) + gdb.Raw(`SELECT COALESCE(SUM(total_prix - COALESCE(referral_used, 0)), 0) FROM commandes WHERE status = 'approved'`).Scan(&totalRevenue) avgPerDay := 0.0 if totalOrders > 0 { diff --git a/frontend-admin/src/screens/admin/OrderDetailScreen.tsx b/frontend-admin/src/screens/admin/OrderDetailScreen.tsx index 92d7b672..559173eb 100644 --- a/frontend-admin/src/screens/admin/OrderDetailScreen.tsx +++ b/frontend-admin/src/screens/admin/OrderDetailScreen.tsx @@ -678,12 +678,17 @@ export default function OrderDetailScreen() { Client: {command.username} Adresse: {command.adresse} - Total: {command.total_prix?.toFixed(2)} € + Total brut: {command.total_prix?.toFixed(2)} € {command.referral_used > 0 && ( - - Parrainage utilisé: -{command.referral_used?.toFixed(2)} € - + <> + + Parrainage utilisé: -{command.referral_used?.toFixed(2)} € + + + Net: {(command.total_prix - command.referral_used).toFixed(2)} € + + )} {command.livreur_assign && ( diff --git a/frontend-admin/src/screens/cabine/OrdersScreen.tsx b/frontend-admin/src/screens/cabine/OrdersScreen.tsx index bbe7a40b..4067bf09 100644 --- a/frontend-admin/src/screens/cabine/OrdersScreen.tsx +++ b/frontend-admin/src/screens/cabine/OrdersScreen.tsx @@ -487,8 +487,18 @@ export default function OrdersScreen() { Client: {item.username} Adresse: {item.adresse} - Total: {item.total_prix.toFixed(2)} € + Total{(item.referral_used ?? 0) > 0 ? " brut" : ""}: {item.total_prix.toFixed(2)} € + {(item.referral_used ?? 0) > 0 && ( + <> + + Parrainage: -{(item.referral_used ?? 0).toFixed(2)} € + + + Net: {(item.total_prix - (item.referral_used ?? 0)).toFixed(2)} € + + + )} {(item.referral_used ?? 0) > 0 && ( - - - Parrainage client - - - -{(item.referral_used ?? 0).toFixed(2)}€ - - + <> + + + Parrainage client + + + -{(item.referral_used ?? 0).toFixed(2)}€ + + + + + Net à encaisser + + + {((item.total_prix ?? 0) - (item.referral_used ?? 0)).toFixed(2)}€ + + + )} )} @@ -1994,24 +2004,34 @@ export default function DashboardScreen() { {(detailsDelivery?.referral_used ?? 0) > 0 && ( - - - Parrainage client - - - -{detailsDelivery?.referral_used?.toFixed(2)}€ - - + <> + + + Parrainage client + + + -{detailsDelivery?.referral_used?.toFixed(2)}€ + + + + + Net à encaisser + + + {((detailsDelivery?.total_prix ?? 0) - (detailsDelivery?.referral_used ?? 0)).toFixed(2)}€ + + + )} diff --git a/frontend-prep/src/pages/User/ConsultationHistorique.css b/frontend-prep/src/pages/User/ConsultationHistorique.css index d0f95bda..49cd40c6 100644 --- a/frontend-prep/src/pages/User/ConsultationHistorique.css +++ b/frontend-prep/src/pages/User/ConsultationHistorique.css @@ -409,6 +409,13 @@ font-weight: 700; } +.order-card-referral { + font-size: 0.72rem; + font-weight: 500; + color: #10b981; + opacity: 0.75; +} + .order-card-chevron { color: var(--text-muted); font-size: 0.9rem; diff --git a/frontend-prep/src/pages/User/ConsultationHistorique.tsx b/frontend-prep/src/pages/User/ConsultationHistorique.tsx index 836d8134..99f056cf 100644 --- a/frontend-prep/src/pages/User/ConsultationHistorique.tsx +++ b/frontend-prep/src/pages/User/ConsultationHistorique.tsx @@ -480,6 +480,11 @@ function ConsultationHistorique() {
{formatPrice((order.total_prix || 0) - (order.referral_used || 0))} + {(order.referral_used || 0) > 0 && ( + + {" "}— dont {formatPrice(order.referral_used)} parrainage + + )} { - if (typeof order.total === "number" && order.total > 0) return order.total; - if (typeof order.total_prix === "number" && order.total_prix > 0) - return order.total_prix; - if (Array.isArray(order.items) && order.items.length > 0) { - return order.items.reduce((sum: number, item: any) => { - return ( - sum + - (item.prix || item.price || 0) * - (item.quantite || item.quantity || 1) - ); + let gross = 0; + if (typeof order.total === "number" && order.total > 0) gross = order.total; + else if (typeof order.total_prix === "number" && order.total_prix > 0) gross = order.total_prix; + else if (Array.isArray(order.items) && order.items.length > 0) { + gross = order.items.reduce((sum: number, item: any) => { + return sum + (item.prix || item.price || 0) * (item.quantite || item.quantity || 1); }, 0); } - return 0; + const referralUsed = typeof order.referral_used === "number" ? order.referral_used : 0; + return Math.max(0, gross - referralUsed); };