stock request table created
This commit is contained in:
@@ -15,6 +15,7 @@ type PartnerRepository interface {
|
||||
GetLocationConfig(uid, cid int) ([]models.Locationconfigs, error)
|
||||
GetRiderLogs(pid, aid int, fdate, tdate string) ([]models.RiderlogDetails, error)
|
||||
GetRiderInfo(userid int) (models.RiderInfo, error)
|
||||
GetFleetSummary(aid, tid int, fdate, tdate string) (models.FleetSummary, error)
|
||||
}
|
||||
|
||||
type partnerRepository struct {
|
||||
@@ -197,3 +198,100 @@ func (r *partnerRepository) GetRiderInfo(userid int) (models.RiderInfo, error) {
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (r *partnerRepository) GetFleetSummary(aid, tid int, fdate, tdate string) (models.FleetSummary, error) {
|
||||
var summary models.FleetSummary
|
||||
|
||||
// --- Fleet membership filter (app_users aliased as a) ---
|
||||
memberWhere := "a.configid = 6"
|
||||
var memberArgs []interface{}
|
||||
if aid != 0 {
|
||||
memberWhere += " AND a.applocationid = ?"
|
||||
memberArgs = append(memberArgs, aid)
|
||||
}
|
||||
if tid != 0 {
|
||||
memberWhere += " AND a.tenantid = ?"
|
||||
memberArgs = append(memberArgs, tid)
|
||||
}
|
||||
|
||||
countsQuery := `
|
||||
SELECT
|
||||
COUNT(*) AS totalriders,
|
||||
COUNT(*) FILTER (WHERE a.status = 'Active') AS activeriders
|
||||
FROM app_users a
|
||||
WHERE ` + memberWhere
|
||||
|
||||
if err := r.db.Raw(countsQuery, memberArgs...).Scan(&summary.Counts).Error; err != nil {
|
||||
return models.FleetSummary{}, err
|
||||
}
|
||||
|
||||
// --- Log-range filter (app_users aliased as b, riderlogs as a) ---
|
||||
logWhere := "b.configid = 6"
|
||||
var logArgs []interface{}
|
||||
if aid != 0 {
|
||||
logWhere += " AND b.applocationid = ?"
|
||||
logArgs = append(logArgs, aid)
|
||||
}
|
||||
if tid != 0 {
|
||||
logWhere += " AND b.tenantid = ?"
|
||||
logArgs = append(logArgs, tid)
|
||||
}
|
||||
if fdate != "" && tdate != "" {
|
||||
logWhere += " AND a.logdate::date BETWEEN ? AND ?"
|
||||
logArgs = append(logArgs, fdate, tdate)
|
||||
} else {
|
||||
logWhere += " AND a.logdate::date = CURRENT_DATE"
|
||||
}
|
||||
|
||||
var worked struct {
|
||||
Ridersworked int `json:"ridersworked"`
|
||||
Totallogins int `json:"totallogins"`
|
||||
}
|
||||
|
||||
workedQuery := `
|
||||
SELECT
|
||||
COUNT(DISTINCT a.userid) AS ridersworked,
|
||||
COUNT(*) AS totallogins
|
||||
FROM riderlogs a
|
||||
INNER JOIN app_users b ON a.userid = b.userid
|
||||
WHERE ` + logWhere
|
||||
|
||||
if err := r.db.Raw(workedQuery, logArgs...).Scan(&worked).Error; err != nil {
|
||||
return models.FleetSummary{}, err
|
||||
}
|
||||
summary.Counts.Ridersworked = worked.Ridersworked
|
||||
summary.Counts.Totallogins = worked.Totallogins
|
||||
|
||||
// --- Per-rider breakdown over the range ---
|
||||
// Breaks are pre-aggregated per log so the join cannot inflate the work/short-hour sums.
|
||||
ridersQuery := `
|
||||
SELECT
|
||||
b.userid,
|
||||
CONCAT(b.firstname, ' ', b.lastname) AS fullname,
|
||||
b.contactno,
|
||||
b.partnerid,
|
||||
b.status,
|
||||
rs.vehicleno,
|
||||
rs.vehiclename,
|
||||
COUNT(DISTINCT a.logdate::date) AS dayslogged,
|
||||
COALESCE(SUM(a.workhours), 0) AS totalworkhours,
|
||||
COALESCE(SUM(a.shorthours), 0) AS totalshorthours,
|
||||
COALESCE(SUM(bk.breakhours), 0) AS totalbreakhours
|
||||
FROM riderlogs a
|
||||
INNER JOIN app_users b ON a.userid = b.userid
|
||||
LEFT JOIN ridersettings rs ON b.userid = rs.userid
|
||||
LEFT JOIN (
|
||||
SELECT logid, userid, SUM(breakhours) AS breakhours
|
||||
FROM riderbreaks
|
||||
GROUP BY logid, userid
|
||||
) bk ON a.logid = bk.logid AND a.userid = bk.userid
|
||||
WHERE ` + logWhere + `
|
||||
GROUP BY b.userid, b.firstname, b.lastname, b.contactno, b.partnerid, b.status, rs.vehicleno, rs.vehiclename
|
||||
ORDER BY fullname ASC`
|
||||
|
||||
if err := r.db.Raw(ridersQuery, logArgs...).Find(&summary.Riders).Error; err != nil {
|
||||
return models.FleetSummary{}, err
|
||||
}
|
||||
|
||||
return summary, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user