fix sales

This commit is contained in:
Efril 2026-04-27 13:24:16 +07:00
parent eb95459578
commit 3542104050

View File

@ -77,33 +77,43 @@ func (r *AnalyticsRepositoryImpl) GetSalesAnalytics(ctx context.Context, organiz
dateFormat = "DATE(o.created_at)"
}
query := r.db.WithContext(ctx).
Table("orders o").
Select(`
`+dateFormat+` as date,
outletFilter := ""
args := []interface{}{organizationID, false, false, string(entities.PaymentStatusCompleted), dateFrom, dateTo}
if outletID != nil {
outletFilter = "AND o.outlet_id = ?"
args = append(args, *outletID)
}
rawQuery := `
SELECT
` + dateFormat + ` as date,
COALESCE(SUM(o.total_amount), 0) as sales,
COUNT(o.id) as orders,
COALESCE(SUM(CASE WHEN oi.status != 'cancelled' AND oi.is_fully_refunded = false THEN oi.quantity - COALESCE(oi.refund_quantity, 0) ELSE 0 END), 0) as items,
COALESCE(SUM(oi_agg.total_items), 0) as items,
COALESCE(SUM(o.tax_amount), 0) as tax,
COALESCE(SUM(o.discount_amount), 0) as discount,
COALESCE(SUM(o.total_amount - o.tax_amount - o.discount_amount), 0) as net_sales
`).
Joins("LEFT JOIN order_items oi ON o.id = oi.order_id").
Where("o.organization_id = ?", organizationID).
Where("o.is_void = ?", false).
Where("o.is_refund = ?", false).
Where("o.payment_status = ?", entities.PaymentStatusCompleted).
Where("o.created_at >= ? AND o.created_at <= ?", dateFrom, dateTo)
if outletID != nil {
query = query.Where("o.outlet_id = ?", *outletID)
}
err := query.
Group("date").
Order("date ASC").
Scan(&results).Error
FROM orders o
LEFT JOIN (
SELECT
oi.order_id,
SUM(oi.quantity - COALESCE(oi.refund_quantity, 0)) as total_items
FROM order_items oi
WHERE oi.status != 'cancelled'
AND oi.is_fully_refunded = false
GROUP BY oi.order_id
) oi_agg ON oi_agg.order_id = o.id
WHERE o.organization_id = ?
AND o.is_void = ?
AND o.is_refund = ?
AND o.payment_status = ?
AND o.created_at >= ? AND o.created_at <= ?
` + outletFilter + `
GROUP BY date
ORDER BY date ASC
`
err := r.db.WithContext(ctx).Raw(rawQuery, args...).Scan(&results).Error
return results, err
}