Add Daily Sales and Distributed Payment
This commit is contained in:
@@ -227,7 +227,7 @@ func (r *OrderRepository) GetDailySalesMetrics(ctx context.Context, req entity.O
|
||||
// Build the query with GORM
|
||||
query := r.db.WithContext(ctx).
|
||||
Table("orders o").
|
||||
Select(`DATE_TRUNC(?, o.created_at) AS day, s.id AS site_id, s.name AS site_name, o.payment_type, SUM(oi.qty * oi.price) AS total_quantity`, dateTrunc).
|
||||
Select(`DATE_TRUNC(?, o.created_at) AS day, s.id AS site_id, s.name AS site_name, o.payment_type, SUM(oi.qty * oi.price) AS total`, dateTrunc).
|
||||
Joins("JOIN order_items oi ON o.id = oi.order_id").
|
||||
Joins("JOIN sites s ON o.site_id = s.id").
|
||||
Where("o.status = ?", "PAID").
|
||||
@@ -250,3 +250,45 @@ func (r *OrderRepository) GetDailySalesMetrics(ctx context.Context, req entity.O
|
||||
|
||||
return sales, nil
|
||||
}
|
||||
|
||||
func (r *OrderRepository) GetPaymentTypeDistribution(ctx context.Context, req entity.OrderSearch) ([]entity.PaymentTypeDistribution, error) {
|
||||
var distribution []entity.PaymentTypeDistribution
|
||||
|
||||
var periodFilter string
|
||||
now := time.Now()
|
||||
|
||||
switch req.Period {
|
||||
case "1d":
|
||||
periodFilter = now.Add(-24 * time.Hour).Format("2006-01-02 15:04:05")
|
||||
case "7d":
|
||||
periodFilter = now.Add(-7 * 24 * time.Hour).Format("2006-01-02 15:04:05")
|
||||
case "1m":
|
||||
periodFilter = now.AddDate(0, -1, 0).Format("2006-01-02 15:04:05")
|
||||
case "1y":
|
||||
periodFilter = now.AddDate(-1, 0, 0).Format("2006-01-02 15:04:05")
|
||||
default:
|
||||
periodFilter = now.AddDate(0, -1, 0).Format("2006-01-02 15:04:05") // Default to last month
|
||||
}
|
||||
|
||||
query := r.db.WithContext(ctx).
|
||||
Table("orders o").
|
||||
Select("payment_type, COUNT(*) as count").
|
||||
Where("status = ?", "PAID").
|
||||
Where("o.created_at >= ?", periodFilter)
|
||||
|
||||
if req.PartnerID != nil {
|
||||
query = query.Where("o.partner_id = ?", *req.PartnerID)
|
||||
}
|
||||
|
||||
if req.SiteID != nil {
|
||||
query = query.Where("o.site_id = ?", *req.SiteID)
|
||||
}
|
||||
|
||||
query = query.Group("payment_type")
|
||||
|
||||
if err := query.Scan(&distribution).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return distribution, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user