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);
};