chore: build

This commit is contained in:
2026-06-13 12:40:44 +02:00
parent 4a67b0cd82
commit 13c09c10c3
8 changed files with 102 additions and 58 deletions
+3 -3
View File
@@ -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')
+3 -3
View File
@@ -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 {
@@ -678,12 +678,17 @@ export default function OrderDetailScreen() {
<Text style={styles.info}>Client: {command.username}</Text>
<Text style={styles.info}>Adresse: {command.adresse}</Text>
<Text style={styles.info}>
Total: {command.total_prix?.toFixed(2)}
Total brut: {command.total_prix?.toFixed(2)}
</Text>
{command.referral_used > 0 && (
<Text style={[styles.info, { color: colors.success }]}>
Parrainage utilisé: -{command.referral_used?.toFixed(2)}
</Text>
<>
<Text style={[styles.info, { color: colors.success }]}>
Parrainage utilisé: -{command.referral_used?.toFixed(2)}
</Text>
<Text style={[styles.info, { fontWeight: "700", color: colors.textPrimary }]}>
Net: {(command.total_prix - command.referral_used).toFixed(2)}
</Text>
</>
)}
{command.livreur_assign && (
<Text style={styles.info}>
@@ -487,8 +487,18 @@ export default function OrdersScreen() {
<Text style={styles.info}>Client: {item.username}</Text>
<Text style={styles.info}>Adresse: {item.adresse}</Text>
<Text style={styles.info}>
Total: {item.total_prix.toFixed(2)}
Total{(item.referral_used ?? 0) > 0 ? " brut" : ""}: {item.total_prix.toFixed(2)}
</Text>
{(item.referral_used ?? 0) > 0 && (
<>
<Text style={[styles.info, { color: colors.success }]}>
Parrainage: -{(item.referral_used ?? 0).toFixed(2)}
</Text>
<Text style={[styles.info, { fontWeight: "700" }]}>
Net: {(item.total_prix - (item.referral_used ?? 0)).toFixed(2)}
</Text>
</>
)}
<TouchableOpacity
style={styles.selectBtn}
@@ -721,24 +721,34 @@ export default function DashboardScreen() {
</Text>
</View>
{(item.referral_used ?? 0) > 0 && (
<View style={[styles.totalRow, { marginTop: 2 }]}>
<Text
style={[
styles.totalLabel,
{ color: colors.success },
]}
>
Parrainage client
</Text>
<Text
style={[
styles.totalValue,
{ color: colors.success },
]}
>
-{(item.referral_used ?? 0).toFixed(2)}
</Text>
</View>
<>
<View style={[styles.totalRow, { marginTop: 2 }]}>
<Text
style={[
styles.totalLabel,
{ color: colors.success },
]}
>
Parrainage client
</Text>
<Text
style={[
styles.totalValue,
{ color: colors.success },
]}
>
-{(item.referral_used ?? 0).toFixed(2)}
</Text>
</View>
<View style={[styles.totalRow, { marginTop: 2 }]}>
<Text style={[styles.totalLabel, { fontWeight: "700" }]}>
Net à encaisser
</Text>
<Text style={[styles.totalValue, { fontWeight: "700" }]}>
{((item.total_prix ?? 0) - (item.referral_used ?? 0)).toFixed(2)}
</Text>
</View>
</>
)}
</View>
)}
@@ -1994,24 +2004,34 @@ export default function DashboardScreen() {
</Text>
</View>
{(detailsDelivery?.referral_used ?? 0) > 0 && (
<View style={[styles.detailTotalRow, { marginTop: 4 }]}>
<Text
style={[
styles.detailTotalLabel,
{ color: colors.success },
]}
>
Parrainage client
</Text>
<Text
style={[
styles.detailTotalValue,
{ color: colors.success },
]}
>
-{detailsDelivery?.referral_used?.toFixed(2)}
</Text>
</View>
<>
<View style={[styles.detailTotalRow, { marginTop: 4 }]}>
<Text
style={[
styles.detailTotalLabel,
{ color: colors.success },
]}
>
Parrainage client
</Text>
<Text
style={[
styles.detailTotalValue,
{ color: colors.success },
]}
>
-{detailsDelivery?.referral_used?.toFixed(2)}
</Text>
</View>
<View style={[styles.detailTotalRow, { marginTop: 4 }]}>
<Text style={[styles.detailTotalLabel, { fontWeight: "700" }]}>
Net à encaisser
</Text>
<Text style={[styles.detailTotalValue, { fontWeight: "700" }]}>
{((detailsDelivery?.total_prix ?? 0) - (detailsDelivery?.referral_used ?? 0)).toFixed(2)}
</Text>
</View>
</>
)}
</ScrollView>
</DetailsModal>
@@ -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;
@@ -480,6 +480,11 @@ function ConsultationHistorique() {
<div className="order-card-footer">
<span className="order-card-total">
{formatPrice((order.total_prix || 0) - (order.referral_used || 0))}
{(order.referral_used || 0) > 0 && (
<span className="order-card-referral">
{" "} dont {formatPrice(order.referral_used)} parrainage
</span>
)}
</span>
<FontAwesomeIcon
icon={faChevronRight}
+8 -11
View File
@@ -980,17 +980,14 @@ export const claimMyReward = async (poolKey: string): Promise<{
};
export const calculateOrderTotal = (order: any): number => {
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);
};