corrections in stockrequest table

This commit is contained in:
2026-07-09 15:30:04 +05:30
parent 135df9fd18
commit 1437a08be5
10 changed files with 186 additions and 10 deletions

View File

@@ -27,6 +27,7 @@ type OrderRepository interface {
GetCustomerOrdersv3(customerID, tenantID, moduleID, fromDate, toDate, orderStatus, keyword string, pageSize, offset int) ([]models.CustomerOrder, error)
GetRevenueSummary(tid, lid int, fdate, tdate string) (*models.TenantRevenueSummary, error)
GetSalesSummary(tid, lid int, fdate, tdate string) (*models.SalesSummaryResponse, error)
GetTimeSeries(tenantID, locationID int, granularity, fromDate, toDate string) ([]models.TimeSeriesData, error)
}
type orderRepository struct {
@@ -1325,3 +1326,87 @@ func (r *orderRepository) GetTenantLocationOrders(input models.DeliveryQuery) ([
result := r.db.Raw(query, params...).Find(&data)
return data, result.Error
}
func (r *orderRepository) GetTimeSeries(tenantID, locationID int, granularity, fromDate, toDate string) ([]models.TimeSeriesData, error) {
var data []models.TimeSeriesData
var dateFunc, dateFuncO2 string
switch granularity {
case "month":
dateFunc = "TO_CHAR(o.orderdate::date, 'YYYY-MM')"
dateFuncO2 = "TO_CHAR(o2.orderdate::date, 'YYYY-MM')"
case "year":
dateFunc = "TO_CHAR(o.orderdate::date, 'YYYY')"
dateFuncO2 = "TO_CHAR(o2.orderdate::date, 'YYYY')"
case "day":
fallthrough
default:
dateFunc = "TO_CHAR(o.orderdate::date, 'YYYY-MM-DD')"
dateFuncO2 = "TO_CHAR(o2.orderdate::date, 'YYYY-MM-DD')"
}
var locFilter, dateFilter string
var params []interface{}
// subquery params
params = append(params, tenantID)
if locationID != 0 {
locFilter = " AND o2.locationid = ?"
params = append(params, locationID)
}
if fromDate != "" && toDate != "" {
dateFilter = " AND o2.orderdate::date BETWEEN ? AND ?"
params = append(params, fromDate, toDate)
}
// main query params
params = append(params, tenantID)
if locationID != 0 {
params = append(params, locationID)
}
if fromDate != "" && toDate != "" {
params = append(params, fromDate, toDate)
}
query := fmt.Sprintf(`
SELECT
%s AS label,
COUNT(o.orderheaderid) AS orders,
COALESCE(SUM(o.orderamount), 0) AS revenue,
COALESCE(SUM(CASE WHEN o.orderstatus = 'cancelled' THEN 1 ELSE 0 END), 0) AS cancelled,
COALESCE(SUM(CASE WHEN o.orderstatus IN ('delivered', 'completed') THEN 1 ELSE 0 END), 0) AS delivered,
COALESCE(MAX(sku_counts.activeskus), 0) AS activeskus
FROM orders o
LEFT JOIN (
SELECT %s AS label, COUNT(DISTINCT d.productid) AS activeskus
FROM orders o2
JOIN orderdetails d ON o2.orderheaderid = d.orderheaderid
WHERE o2.tenantid = ? AND o2.configid = 1
%s
%s
GROUP BY %s
) sku_counts ON %s = sku_counts.label
WHERE o.tenantid = ?
AND o.configid = 1
`, dateFunc, dateFuncO2, locFilter, dateFilter, dateFuncO2, dateFunc)
if locationID != 0 {
query += " AND o.locationid = ?"
}
if fromDate != "" && toDate != "" {
query += " AND o.orderdate::date BETWEEN ? AND ?"
}
query += fmt.Sprintf(" GROUP BY %s ORDER BY %s", dateFunc, dateFunc)
if err := r.db.Raw(query, params...).Scan(&data).Error; err != nil {
return nil, err
}
if data == nil {
data = []models.TimeSeriesData{}
}
return data, nil
}