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(` gdb.Raw(`
SELECT DATE(updated_at) AS day, SELECT DATE(updated_at) AS day,
COUNT(*) AS count, COUNT(*) AS count,
COALESCE(SUM(total_prix), 0) AS revenue COALESCE(SUM(total_prix - COALESCE(referral_used, 0)), 0) AS revenue
FROM commandes FROM commandes
WHERE livreur_assign = ? WHERE livreur_assign = ?
AND status IN ('livre', 'approved') AND status IN ('livre', 'approved')
@@ -551,7 +551,7 @@ func GetMyDeliveryStats(c *gin.Context) {
SELECT EXTRACT(WEEK FROM updated_at)::int AS week_num, SELECT EXTRACT(WEEK FROM updated_at)::int AS week_num,
EXTRACT(YEAR FROM updated_at)::int AS year, EXTRACT(YEAR FROM updated_at)::int AS year,
COUNT(*) AS count, COUNT(*) AS count,
COALESCE(SUM(total_prix), 0) AS revenue COALESCE(SUM(total_prix - COALESCE(referral_used, 0)), 0) AS revenue
FROM commandes FROM commandes
WHERE livreur_assign = ? WHERE livreur_assign = ?
AND status IN ('livre', 'approved') AND status IN ('livre', 'approved')
@@ -565,7 +565,7 @@ func GetMyDeliveryStats(c *gin.Context) {
SELECT EXTRACT(MONTH FROM updated_at)::int AS month_num, SELECT EXTRACT(MONTH FROM updated_at)::int AS month_num,
EXTRACT(YEAR FROM updated_at)::int AS year, EXTRACT(YEAR FROM updated_at)::int AS year,
COUNT(*) AS count, COUNT(*) AS count,
COALESCE(SUM(total_prix), 0) AS revenue COALESCE(SUM(total_prix - COALESCE(referral_used, 0)), 0) AS revenue
FROM commandes FROM commandes
WHERE livreur_assign = ? WHERE livreur_assign = ?
AND status IN ('livre', 'approved') 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) ───────────────── // ── Revenus par jour sur 30 jours (commandes approuvées) ─────────────────
var dayRevRows []models.DayRevenueRow var dayRevRows []models.DayRevenueRow
gdb.Raw(` 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 FROM commandes
WHERE created_at >= NOW() - INTERVAL '30 days' WHERE created_at >= NOW() - INTERVAL '30 days'
AND status = 'approved' AND status = 'approved'
@@ -87,7 +87,7 @@ func GetAdminStats(c *gin.Context) {
SELECT SELECT
EXTRACT(HOUR FROM created_at)::int AS hour, EXTRACT(HOUR FROM created_at)::int AS hour,
COUNT(*) AS count, COUNT(*) AS count,
COALESCE(SUM(total_prix), 0) AS revenue COALESCE(SUM(total_prix - COALESCE(referral_used, 0)), 0) AS revenue
FROM commandes FROM commandes
WHERE status != 'cancelled' WHERE status != 'cancelled'
GROUP BY hour GROUP BY hour
@@ -221,7 +221,7 @@ func GetAdminStats(c *gin.Context) {
var totalOrders int64 var totalOrders int64
var totalRevenue float64 var totalRevenue float64
gdb.Raw(`SELECT COUNT(*) FROM commandes WHERE status != 'cancelled'`).Scan(&totalOrders) 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 avgPerDay := 0.0
if totalOrders > 0 { if totalOrders > 0 {
@@ -678,12 +678,17 @@ export default function OrderDetailScreen() {
<Text style={styles.info}>Client: {command.username}</Text> <Text style={styles.info}>Client: {command.username}</Text>
<Text style={styles.info}>Adresse: {command.adresse}</Text> <Text style={styles.info}>Adresse: {command.adresse}</Text>
<Text style={styles.info}> <Text style={styles.info}>
Total: {command.total_prix?.toFixed(2)} Total brut: {command.total_prix?.toFixed(2)}
</Text> </Text>
{command.referral_used > 0 && ( {command.referral_used > 0 && (
<Text style={[styles.info, { color: colors.success }]}> <>
Parrainage utilisé: -{command.referral_used?.toFixed(2)} <Text style={[styles.info, { color: colors.success }]}>
</Text> 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 && ( {command.livreur_assign && (
<Text style={styles.info}> <Text style={styles.info}>
@@ -487,8 +487,18 @@ export default function OrdersScreen() {
<Text style={styles.info}>Client: {item.username}</Text> <Text style={styles.info}>Client: {item.username}</Text>
<Text style={styles.info}>Adresse: {item.adresse}</Text> <Text style={styles.info}>Adresse: {item.adresse}</Text>
<Text style={styles.info}> <Text style={styles.info}>
Total: {item.total_prix.toFixed(2)} Total{(item.referral_used ?? 0) > 0 ? " brut" : ""}: {item.total_prix.toFixed(2)}
</Text> </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 <TouchableOpacity
style={styles.selectBtn} style={styles.selectBtn}
@@ -721,24 +721,34 @@ export default function DashboardScreen() {
</Text> </Text>
</View> </View>
{(item.referral_used ?? 0) > 0 && ( {(item.referral_used ?? 0) > 0 && (
<View style={[styles.totalRow, { marginTop: 2 }]}> <>
<Text <View style={[styles.totalRow, { marginTop: 2 }]}>
style={[ <Text
styles.totalLabel, style={[
{ color: colors.success }, styles.totalLabel,
]} { color: colors.success },
> ]}
Parrainage client >
</Text> Parrainage client
<Text </Text>
style={[ <Text
styles.totalValue, style={[
{ color: colors.success }, styles.totalValue,
]} { color: colors.success },
> ]}
-{(item.referral_used ?? 0).toFixed(2)} >
</Text> -{(item.referral_used ?? 0).toFixed(2)}
</View> </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> </View>
)} )}
@@ -1994,24 +2004,34 @@ export default function DashboardScreen() {
</Text> </Text>
</View> </View>
{(detailsDelivery?.referral_used ?? 0) > 0 && ( {(detailsDelivery?.referral_used ?? 0) > 0 && (
<View style={[styles.detailTotalRow, { marginTop: 4 }]}> <>
<Text <View style={[styles.detailTotalRow, { marginTop: 4 }]}>
style={[ <Text
styles.detailTotalLabel, style={[
{ color: colors.success }, styles.detailTotalLabel,
]} { color: colors.success },
> ]}
Parrainage client >
</Text> Parrainage client
<Text </Text>
style={[ <Text
styles.detailTotalValue, style={[
{ color: colors.success }, styles.detailTotalValue,
]} { color: colors.success },
> ]}
-{detailsDelivery?.referral_used?.toFixed(2)} >
</Text> -{detailsDelivery?.referral_used?.toFixed(2)}
</View> </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> </ScrollView>
</DetailsModal> </DetailsModal>
@@ -409,6 +409,13 @@
font-weight: 700; font-weight: 700;
} }
.order-card-referral {
font-size: 0.72rem;
font-weight: 500;
color: #10b981;
opacity: 0.75;
}
.order-card-chevron { .order-card-chevron {
color: var(--text-muted); color: var(--text-muted);
font-size: 0.9rem; font-size: 0.9rem;
@@ -480,6 +480,11 @@ function ConsultationHistorique() {
<div className="order-card-footer"> <div className="order-card-footer">
<span className="order-card-total"> <span className="order-card-total">
{formatPrice((order.total_prix || 0) - (order.referral_used || 0))} {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> </span>
<FontAwesomeIcon <FontAwesomeIcon
icon={faChevronRight} icon={faChevronRight}
+8 -11
View File
@@ -980,17 +980,14 @@ export const claimMyReward = async (poolKey: string): Promise<{
}; };
export const calculateOrderTotal = (order: any): number => { export const calculateOrderTotal = (order: any): number => {
if (typeof order.total === "number" && order.total > 0) return order.total; let gross = 0;
if (typeof order.total_prix === "number" && order.total_prix > 0) if (typeof order.total === "number" && order.total > 0) gross = order.total;
return order.total_prix; else if (typeof order.total_prix === "number" && order.total_prix > 0) gross = order.total_prix;
if (Array.isArray(order.items) && order.items.length > 0) { else if (Array.isArray(order.items) && order.items.length > 0) {
return order.items.reduce((sum: number, item: any) => { gross = order.items.reduce((sum: number, item: any) => {
return ( return sum + (item.prix || item.price || 0) * (item.quantite || item.quantity || 1);
sum +
(item.prix || item.price || 0) *
(item.quantite || item.quantity || 1)
);
}, 0); }, 0);
} }
return 0; const referralUsed = typeof order.referral_used === "number" ? order.referral_used : 0;
return Math.max(0, gross - referralUsed);
}; };