initial commit
This commit is contained in:
922
repositories/deliveriesRepository.go
Normal file
922
repositories/deliveriesRepository.go
Normal file
@@ -0,0 +1,922 @@
|
||||
package repositories
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"nearle/models"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/jinzhu/copier"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type DeliveriesRepository interface {
|
||||
CreateDeliveries(data []models.Deliveries) error
|
||||
UpdateDelivery(data models.UpdateDeliveryStatus) error
|
||||
GetDeliverySummary(tid, pid, uid, aid, lid int, fdate, tdate string) (models.DeliverySummary, error)
|
||||
GetDeliveryInsight(tid int) ([]models.OrderInsightv1, error)
|
||||
GetLocationDeliverySummary(tenantID int) ([]models.Ordersummarylocation, error)
|
||||
GetReportSummary(tid, pid, uid, aid int, fdate, tdate string) ([]models.ReportSummary, error)
|
||||
GetRiderSummary(aid, pid, tid int, fdate, tdate string) ([]models.Ridersummary, error)
|
||||
GetTenantDeliveries(input models.DeliveryQuery) []models.Deliveryinfo
|
||||
GetPartnerDeliveries(input models.DeliveryQuery) []models.Deliveryinfo
|
||||
GetCustomerDeliveries(input models.DeliveryQuery) []models.Deliveryinfo
|
||||
GetAdminDeliveries(input models.DeliveryQuery) []models.Deliveryinfo
|
||||
GetUserDeliveries(input models.DeliveryQuery) []models.Deliveryinfo
|
||||
GetAppUserDeliveries(input models.DeliveryQuery) []models.Deliveryinfo
|
||||
GetDeliveries(input models.DeliveryQuery) []models.Deliveryinfo
|
||||
GetDeliveryQueues(uid int, fdate, tdate string) ([]models.Deliveryinfo, error)
|
||||
GetTenantLocationDeliveries(input models.DeliveryQuery) []models.Deliveryinfo
|
||||
}
|
||||
|
||||
type deliveriesRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewDeliveriesRepository(db *gorm.DB) DeliveriesRepository {
|
||||
return &deliveriesRepository{db: db}
|
||||
}
|
||||
|
||||
const (
|
||||
core = `SELECT COUNT(*) AS total,
|
||||
SUM(CASE WHEN orderstatus = 'pending' THEN 1 ELSE 0 END) AS pending,
|
||||
SUM(CASE WHEN orderstatus = 'accepted' THEN 1 ELSE 0 END) AS accepted,
|
||||
SUM(CASE WHEN orderstatus = 'arrived' THEN 1 ELSE 0 END) AS arrived,
|
||||
SUM(CASE WHEN orderstatus = 'picked' THEN 1 ELSE 0 END) AS picked,
|
||||
SUM(CASE WHEN orderstatus = 'active' THEN 1 ELSE 0 END) AS active,
|
||||
SUM(CASE WHEN orderstatus = 'delivered' THEN 1 ELSE 0 END) AS delivered,
|
||||
SUM(CASE WHEN orderstatus = 'cancelled' THEN 1 ELSE 0 END) AS cancelled`
|
||||
|
||||
reports = `SELECT b.tenantid,b.tenantname,
|
||||
COUNT(*) AS totalorders,
|
||||
SUM(CASE WHEN a.orderstatus = 'created' THEN 1 ELSE 0 END) AS orderscreated,
|
||||
SUM(CASE WHEN a.orderstatus = 'pending' THEN 1 ELSE 0 END) AS orderspending,
|
||||
SUM(CASE WHEN a.orderstatus = 'cancelled' THEN 1 ELSE 0 END) AS orderscancelled,
|
||||
SUM(CASE WHEN a.orderstatus = 'delivered' THEN 1 ELSE 0 END) AS orderscompleted,
|
||||
SUM(CASE WHEN c.orderstatus = 'pending' THEN 1 ELSE 0 END) AS deliveriespending,
|
||||
SUM(CASE WHEN c.orderstatus = 'delivered' THEN 1 ELSE 0 END) AS deliveriescompleted,
|
||||
SUM(CASE WHEN c.orderstatus = 'cancelled' THEN 1 ELSE 0 END) AS deliveriescancelled,
|
||||
SUM(CASE WHEN c.paymenttype = 64 THEN c.deliveryamt ELSE 0 END) AS paylater,
|
||||
SUM(CASE WHEN c.paymenttype = 43 THEN c.deliveryamt ELSE 0 END) AS payondelivery,
|
||||
ROUND(SUM(c.kms), 2) AS kms,
|
||||
ROUND(SUM(c.actualkms), 2) AS actualkms,
|
||||
SUM(c.deliveryamt) AS charges
|
||||
FROM
|
||||
tenants b
|
||||
right JOIN orders a ON b.tenantid = a.tenantid
|
||||
right JOIN deliveries c ON a.orderheaderid = c.orderheaderid `
|
||||
|
||||
Ridersummary = `SELECT a.userid, a.firstname, a.lastname,
|
||||
CONCAT(a.firstname, ' ', a.lastname) AS fullname,a.status,
|
||||
SUM(CASE WHEN b.orderstatus = 'pending' THEN 1 ELSE 0 END) AS deliveries,
|
||||
SUM(CASE WHEN b.orderstatus = 'assigned' THEN 1 ELSE 0 END) AS assigned,
|
||||
SUM(CASE WHEN b.orderstatus = 'accepted' THEN 1 ELSE 0 END) AS accepted,
|
||||
SUM(CASE WHEN b.orderstatus = 'arrived' THEN 1 ELSE 0 END) AS arrived,
|
||||
SUM(CASE WHEN b.orderstatus = 'picked' THEN 1 ELSE 0 END) AS picked,
|
||||
SUM(CASE WHEN b.orderstatus = 'delivered' THEN 1 ELSE 0 END) AS delivered,
|
||||
SUM(CASE WHEN b.orderstatus = 'delivered' THEN b.actualkms ELSE 0 END) AS actualkms,
|
||||
SUM(CASE WHEN b.orderstatus = 'delivered' THEN b.kms ELSE 0 END) AS kms,
|
||||
SUM(CASE WHEN b.paymenttype = 64 THEN b.deliveryamt ELSE 0 END) AS paylater,
|
||||
SUM(CASE WHEN b.paymenttype = 43 THEN b.deliveryamt ELSE 0 END) AS payondelivery,
|
||||
SUM(CASE WHEN b.orderstatus = 'delivered' THEN b.deliveryamt ELSE 0 END) AS deliveryamt
|
||||
FROM app_users a
|
||||
LEFT JOIN deliveries b ON a.userid = b.userid`
|
||||
)
|
||||
|
||||
const (
|
||||
deliveries = `SELECT distinct a.deliveryid,a.applocationid,f.locationname AS applocation,a.orderheaderid,a.configid,a.tenantid,a.partnerid,a.locationid,a.userid,a.categoryid,a.subcategoryid,a.moduleid,
|
||||
a.orderid,a.deliverydate,a.orderstatus,a.assigntime,a.starttime,a.arrivaltime,a.pickuptime,a.deliverytime,a.canceltime,
|
||||
a.customerid,a.pickupcustomer,a.pickupcontactno,a.pickuplocationid,a.pickupaddress,a.pickuplocation,a.pickuplat,a.pickuplon,
|
||||
a.deliverycustomerid,a.deliverycustomer,a.deliverycontactno,a.deliverylocationid,a.deliveryaddress,a.deliverylocation,
|
||||
a.droplat,a.droplon,a.deliverylat,a.deliverylong,
|
||||
a.riderslat,a.riderslon,a.deliveryamt,a.kms,a.actualkms,a.riderkms,a.deliverycharges,a.deliverytype,a.paymenttype,a.smsdelivery,
|
||||
a.expecteddeliverytime,a.profit,a.transitminutes,a.calculationdistancekm,
|
||||
a.notes,a.ordernotes,b.tenantname,b.primarycontact as tenantcontactno,b.tenanttoken,b.suburb as tenantsuburb,b.city as tenantcity,
|
||||
c.firstname AS ridername,c.userfcmtoken,e.locationname,e.suburb AS locationsuburb,e.contactno AS locationcontactno
|
||||
FROM deliveries a
|
||||
INNER JOIN tenants b ON a.tenantid=b.tenantid
|
||||
INNER JOIN app_users c ON a.userid=c.userid
|
||||
INNER JOIN tenantlocations e ON a.locationid=e.locationid
|
||||
INNER JOIN app_location f ON a.applocationid = f.applocationid
|
||||
INNER JOIN app_locationconfig g ON f.applocationid = g.applocationid`
|
||||
)
|
||||
|
||||
func (r *deliveriesRepository) CreateDeliveries(data []models.Deliveries) error {
|
||||
var que []models.Deliveryqueues
|
||||
var ord models.Updateorderstatus
|
||||
|
||||
tx := r.db.Begin()
|
||||
|
||||
for i := range data {
|
||||
|
||||
if err := tx.Create(&data[i]).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
|
||||
if err := copier.Copy(&que, &data[i]); err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
|
||||
if err := tx.Create(&que).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
|
||||
ord.Orderstatus = data[i].Orderstatus
|
||||
ord.Pending = data[i].Deliverydate
|
||||
|
||||
if err := tx.Table("orders").
|
||||
Where("orderheaderid=?", data[i].Orderheaderid).
|
||||
Updates(&ord).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if err := tx.Commit().Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *deliveriesRepository) UpdateDelivery(data models.UpdateDeliveryStatus) error {
|
||||
var ord models.Updateorderstatus
|
||||
var cloc models.Customerlocations
|
||||
|
||||
tx := r.db.Begin()
|
||||
|
||||
if err := tx.Table("deliveries").Where("deliveryid = ?", data.Deliveryid).Updates(&data).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
|
||||
switch data.Orderstatus {
|
||||
case "pending":
|
||||
ord.Orderstatus = data.Orderstatus
|
||||
ord.Pending = data.Assigntime
|
||||
if err := tx.Table("orders").Where("orderheaderid = ?", data.Orderheaderid).Updates(&ord).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
|
||||
case "picked":
|
||||
if data.Pickuplocationid != 0 && data.Deliverytype != "B" {
|
||||
cloc.Latitude = data.Riderslat
|
||||
cloc.Longitude = data.Riderslon
|
||||
cloc.Address = data.Address
|
||||
cloc.Suburb = data.Suburb
|
||||
cloc.City = data.City
|
||||
cloc.State = data.State
|
||||
cloc.Postcode = data.Postcode
|
||||
|
||||
if err := tx.Table("customerlocations").Where("locationid = ?", data.Pickuplocationid).Updates(&cloc).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
case "delivered":
|
||||
ord.Orderstatus = data.Orderstatus
|
||||
ord.Delivered = data.Deliverytime
|
||||
if err := tx.Table("orders").Where("orderheaderid = ?", data.Orderheaderid).Updates(&ord).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
|
||||
if data.Deliverylocationid != 0 && data.Deliverytype != "B" {
|
||||
cloc.Latitude = data.Deliverylat
|
||||
cloc.Longitude = data.Deliverylong
|
||||
cloc.Address = data.Address
|
||||
cloc.Suburb = data.Suburb
|
||||
cloc.City = data.City
|
||||
cloc.State = data.State
|
||||
cloc.Postcode = data.Postcode
|
||||
|
||||
if err := tx.Table("customerlocations").Where("locationid = ?", data.Deliverylocationid).Updates(&cloc).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
case "cancelled":
|
||||
ord.Orderstatus = data.Orderstatus
|
||||
ord.Cancelled = data.Canceltime
|
||||
if err := tx.Table("orders").Where("orderheaderid = ?", data.Orderheaderid).Updates(&ord).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if err := tx.Commit().Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *deliveriesRepository) GetDeliverySummary(tid, pid, uid, aid, lid int, fdate, tdate string) (models.DeliverySummary, error) {
|
||||
var data models.DeliverySummary
|
||||
var q1 string
|
||||
var params []interface{}
|
||||
|
||||
// Base query
|
||||
q1 = core + " FROM deliveries WHERE configid = 1"
|
||||
|
||||
// Filters (allow multiple together)
|
||||
if tid != 0 {
|
||||
q1 += " AND tenantid = ?"
|
||||
params = append(params, tid)
|
||||
}
|
||||
if pid != 0 {
|
||||
q1 += " AND partnerid = ?"
|
||||
params = append(params, pid)
|
||||
}
|
||||
if uid != 0 {
|
||||
q1 += " AND userid = ?"
|
||||
params = append(params, uid)
|
||||
}
|
||||
if aid != 0 {
|
||||
q1 += " AND applocationid = ?"
|
||||
params = append(params, aid)
|
||||
}
|
||||
if lid != 0 {
|
||||
q1 += " AND locationid = ?"
|
||||
params = append(params, lid)
|
||||
}
|
||||
|
||||
// Date filter
|
||||
if fdate != "" && tdate != "" {
|
||||
q1 += " AND deliverydate::date BETWEEN ? AND ?"
|
||||
params = append(params, fdate, tdate)
|
||||
}
|
||||
|
||||
// Execute query
|
||||
if err := r.db.Raw(q1, params...).Scan(&data).Error; err != nil {
|
||||
return data, err
|
||||
}
|
||||
|
||||
print(q1)
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (r *deliveriesRepository) GetDeliveryInsight(tenantID int) ([]models.OrderInsightv1, error) {
|
||||
var locations []models.OrderInsightv1
|
||||
var params []interface{}
|
||||
|
||||
// Base query for fetching active locations
|
||||
q1 := `
|
||||
SELECT DISTINCT l.locationid, l.locationname
|
||||
FROM tenantlocations l
|
||||
LEFT JOIN deliveries d ON l.locationid = d.locationid
|
||||
WHERE l.status = 'Active'
|
||||
`
|
||||
|
||||
// Add tenant filter if provided
|
||||
if tenantID != 0 {
|
||||
q1 += " AND l.tenantid = ?"
|
||||
params = append(params, tenantID)
|
||||
}
|
||||
|
||||
if err := r.db.Raw(q1, params...).Scan(&locations).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Query for monthly deliveries
|
||||
q2 := `
|
||||
SELECT
|
||||
COALESCE(SUM(CASE WHEN EXTRACT(MONTH FROM d.deliverydate) = 1 THEN 1 ELSE 0 END), 0) AS jan,
|
||||
COALESCE(SUM(CASE WHEN EXTRACT(MONTH FROM d.deliverydate) = 2 THEN 1 ELSE 0 END), 0) AS feb,
|
||||
COALESCE(SUM(CASE WHEN EXTRACT(MONTH FROM d.deliverydate) = 3 THEN 1 ELSE 0 END), 0) AS mar,
|
||||
COALESCE(SUM(CASE WHEN EXTRACT(MONTH FROM d.deliverydate) = 4 THEN 1 ELSE 0 END), 0) AS apr,
|
||||
COALESCE(SUM(CASE WHEN EXTRACT(MONTH FROM d.deliverydate) = 5 THEN 1 ELSE 0 END), 0) AS may,
|
||||
COALESCE(SUM(CASE WHEN EXTRACT(MONTH FROM d.deliverydate) = 6 THEN 1 ELSE 0 END), 0) AS jun,
|
||||
COALESCE(SUM(CASE WHEN EXTRACT(MONTH FROM d.deliverydate) = 7 THEN 1 ELSE 0 END), 0) AS jul,
|
||||
COALESCE(SUM(CASE WHEN EXTRACT(MONTH FROM d.deliverydate) = 8 THEN 1 ELSE 0 END), 0) AS aug,
|
||||
COALESCE(SUM(CASE WHEN EXTRACT(MONTH FROM d.deliverydate) = 9 THEN 1 ELSE 0 END), 0) AS sep,
|
||||
COALESCE(SUM(CASE WHEN EXTRACT(MONTH FROM d.deliverydate) = 10 THEN 1 ELSE 0 END), 0) AS oct,
|
||||
COALESCE(SUM(CASE WHEN EXTRACT(MONTH FROM d.deliverydate) = 11 THEN 1 ELSE 0 END), 0) AS nov,
|
||||
COALESCE(SUM(CASE WHEN EXTRACT(MONTH FROM d.deliverydate) = 12 THEN 1 ELSE 0 END), 0) AS dece
|
||||
FROM deliveries d
|
||||
WHERE d.locationid = ?
|
||||
AND EXTRACT(YEAR FROM d.deliverydate) = EXTRACT(YEAR FROM CURRENT_DATE)
|
||||
`
|
||||
|
||||
if tenantID != 0 {
|
||||
q2 += " AND d.tenantid = ?"
|
||||
}
|
||||
|
||||
// Attach month-wise insights for each location
|
||||
for i := range locations {
|
||||
var orderMonths models.Ordermonths
|
||||
|
||||
var err error
|
||||
if tenantID != 0 {
|
||||
err = r.db.Raw(q2, locations[i].Locationid, tenantID).Scan(&orderMonths).Error
|
||||
} else {
|
||||
err = r.db.Raw(q2, locations[i].Locationid).Scan(&orderMonths).Error
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
locations[i].Ordermonths = &orderMonths
|
||||
}
|
||||
|
||||
return locations, nil
|
||||
}
|
||||
|
||||
func (r *deliveriesRepository) GetLocationDeliverySummary(tenantID int) ([]models.Ordersummarylocation, error) {
|
||||
var data []models.Ordersummarylocation
|
||||
var params []interface{}
|
||||
|
||||
q1 := `
|
||||
SELECT
|
||||
b.locationid,
|
||||
b.locationname,
|
||||
COALESCE(COUNT(a.orderid), 0) AS total,
|
||||
COALESCE(SUM(CASE WHEN a.orderstatus = 'created' THEN 1 ELSE 0 END), 0) AS created,
|
||||
COALESCE(SUM(CASE WHEN a.orderstatus = 'pending' THEN 1 ELSE 0 END), 0) AS pending,
|
||||
COALESCE(SUM(CASE WHEN a.orderstatus = 'processing' THEN 1 ELSE 0 END), 0) AS processing,
|
||||
COALESCE(SUM(CASE WHEN a.orderstatus = 'delivered' THEN 1 ELSE 0 END), 0) AS delivered,
|
||||
COALESCE(SUM(CASE WHEN a.orderstatus = 'cancelled' THEN 1 ELSE 0 END), 0) AS cancelled
|
||||
FROM tenantlocations b
|
||||
LEFT JOIN deliveries a
|
||||
ON a.locationid = b.locationid
|
||||
AND a.configid = 1
|
||||
`
|
||||
|
||||
// ✅ Only filter tenant locations in WHERE
|
||||
if tenantID != 0 {
|
||||
q1 += " WHERE b.tenantid = ?"
|
||||
params = append(params, tenantID)
|
||||
}
|
||||
|
||||
q1 += " GROUP BY b.locationid, b.locationname ORDER BY b.locationid"
|
||||
|
||||
if err := r.db.Raw(q1, params...).Scan(&data).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (r *deliveriesRepository) GetReportSummary(tid, pid, uid, aid int, fdate, tdate string) ([]models.ReportSummary, error) {
|
||||
var data []models.ReportSummary
|
||||
var q1 string
|
||||
|
||||
switch {
|
||||
case tid != 0:
|
||||
if fdate != "" && tdate != "" {
|
||||
q1 = reports + ` WHERE a.tenantid=` + strconv.Itoa(tid) +
|
||||
` AND a.orderdate::date BETWEEN '` + fdate + `' AND '` + tdate + `' GROUP BY a.tenantid, b.tenantname`
|
||||
} else {
|
||||
q1 = reports + ` WHERE a.tenantid=` + strconv.Itoa(tid) + ` GROUP BY a.tenantid, b.tenantname`
|
||||
}
|
||||
|
||||
case pid != 0:
|
||||
if fdate != "" && tdate != "" {
|
||||
q1 = reports + ` WHERE a.partnerid=` + strconv.Itoa(pid) +
|
||||
` AND a.orderdate::date BETWEEN '` + fdate + `' AND '` + tdate + `' GROUP BY a.tenantid, b.tenantname`
|
||||
} else {
|
||||
q1 = reports + ` WHERE a.partnerid=` + strconv.Itoa(pid) + ` GROUP BY a.tenantid, b.tenantname`
|
||||
}
|
||||
|
||||
case uid != 0:
|
||||
if fdate != "" && tdate != "" {
|
||||
q1 = reports + ` WHERE c.userid=` + strconv.Itoa(uid) +
|
||||
` AND a.orderdate::date BETWEEN '` + fdate + `' AND '` + tdate + `' GROUP BY a.tenantid, b.tenantname`
|
||||
} else {
|
||||
q1 = reports + ` WHERE c.userid=` + strconv.Itoa(uid) + ` GROUP BY a.tenantid, b.tenantname`
|
||||
}
|
||||
|
||||
case aid != 0:
|
||||
if fdate != "" && tdate != "" {
|
||||
q1 = reports + ` WHERE c.applocationid=` + strconv.Itoa(aid) +
|
||||
` AND a.orderdate::date BETWEEN '` + fdate + `' AND '` + tdate + `' GROUP BY a.tenantid, b.tenantname`
|
||||
} else {
|
||||
q1 = reports + ` WHERE c.applocationid=` + strconv.Itoa(aid) + ` GROUP BY a.tenantid, b.tenantname`
|
||||
}
|
||||
|
||||
default:
|
||||
if fdate != "" && tdate != "" {
|
||||
q1 = reports + ` WHERE a.orderdate::date BETWEEN '` + fdate + `' AND '` + tdate + `' GROUP BY a.tenantid, b.tenantname`
|
||||
} else {
|
||||
q1 = reports + ` GROUP BY a.tenantid, b.tenantname`
|
||||
}
|
||||
}
|
||||
|
||||
if err := r.db.Raw(q1).Scan(&data).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (r *deliveriesRepository) GetRiderSummary(aid, pid, tid int, fdate, tdate string) ([]models.Ridersummary, error) {
|
||||
var data []models.Ridersummary
|
||||
var q1 string
|
||||
|
||||
switch {
|
||||
case aid != 0:
|
||||
if fdate != "" && tdate != "" {
|
||||
q1 = Ridersummary + ` WHERE a.configid=6 AND a.applocationid=` + strconv.Itoa(aid) +
|
||||
` AND b.deliverydate::date BETWEEN '` + fdate + `' AND '` + tdate + `' GROUP BY a.userid, a.firstname, a.lastname`
|
||||
} else {
|
||||
q1 = Ridersummary + ` WHERE a.configid=6 AND a.applocationid=` + strconv.Itoa(aid) +
|
||||
` GROUP BY a.userid, a.firstname, a.lastname`
|
||||
}
|
||||
|
||||
case pid != 0:
|
||||
if fdate != "" && tdate != "" {
|
||||
q1 = Ridersummary + ` WHERE a.configid=6 AND a.partnerid=` + strconv.Itoa(pid) +
|
||||
` AND b.deliverydate::date BETWEEN '` + fdate + `' AND '` + tdate + `' GROUP BY a.userid, a.firstname, a.lastname`
|
||||
} else {
|
||||
q1 = Ridersummary + ` WHERE a.configid=6 AND a.partnerid=` + strconv.Itoa(pid) +
|
||||
` GROUP BY a.userid, a.firstname, a.lastname`
|
||||
}
|
||||
|
||||
case tid != 0:
|
||||
if fdate != "" && tdate != "" {
|
||||
q1 = Ridersummary + ` WHERE a.configid=6 AND b.tenantid=` + strconv.Itoa(tid) +
|
||||
` AND b.deliverydate::date BETWEEN '` + fdate + `' AND '` + tdate + `' GROUP BY a.userid, a.firstname, a.lastname`
|
||||
} else {
|
||||
q1 = Ridersummary + ` WHERE a.configid=6 AND b.tenantid=` + strconv.Itoa(tid) +
|
||||
` GROUP BY a.userid, a.firstname, a.lastname`
|
||||
}
|
||||
|
||||
default:
|
||||
if fdate != "" && tdate != "" {
|
||||
q1 = Ridersummary + ` WHERE a.configid=6 AND b.deliverydate::date BETWEEN '` + fdate + `' AND '` + tdate + `' GROUP BY a.userid, a.firstname, a.lastname`
|
||||
} else {
|
||||
q1 = Ridersummary + ` WHERE a.configid=6 GROUP BY a.userid, a.firstname, a.lastname`
|
||||
}
|
||||
}
|
||||
|
||||
if err := r.db.Raw(q1).Scan(&data).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (r *deliveriesRepository) GetTenantDeliveries(input models.DeliveryQuery) []models.Deliveryinfo {
|
||||
fmt.Println("🔍 Fetching Tenant Deliveries")
|
||||
|
||||
var data []models.Deliveryinfo
|
||||
var queryBuilder strings.Builder
|
||||
var params []interface{}
|
||||
|
||||
offset := (input.Pageno - 1) * input.Pagesize
|
||||
|
||||
baseQuery := `
|
||||
SELECT a.*, b.tenantname, c.firstname AS ridername, c.contactno AS ridercontact
|
||||
FROM deliveries a
|
||||
JOIN tenants b ON a.tenantid = b.tenantid
|
||||
JOIN app_users c ON a.userid = c.userid
|
||||
WHERE a.tenantid = ?
|
||||
`
|
||||
queryBuilder.WriteString(baseQuery)
|
||||
params = append(params, input.Tenantid)
|
||||
|
||||
if input.Status != "" {
|
||||
queryBuilder.WriteString(" AND a.orderstatus = ?")
|
||||
params = append(params, input.Status)
|
||||
}
|
||||
|
||||
if input.Fromdate != "" && input.ToDate != "" {
|
||||
queryBuilder.WriteString(" AND a.deliverydate::date BETWEEN ? AND ?")
|
||||
params = append(params, input.Fromdate, input.ToDate)
|
||||
}
|
||||
|
||||
if input.Keyword != "" {
|
||||
k := "%" + input.Keyword + "%"
|
||||
queryBuilder.WriteString(`
|
||||
AND (
|
||||
a.pickupcustomer LIKE ? OR
|
||||
a.deliverycustomer LIKE ? OR
|
||||
a.pickupcontactno LIKE ? OR
|
||||
a.deliverycontactno LIKE ? OR
|
||||
a.orderid LIKE ?
|
||||
)
|
||||
`)
|
||||
for i := 0; i < 5; i++ {
|
||||
params = append(params, k)
|
||||
}
|
||||
}
|
||||
|
||||
queryBuilder.WriteString(" ORDER BY a.deliveryid DESC")
|
||||
if input.Pagesize != 0 {
|
||||
queryBuilder.WriteString(" LIMIT ? OFFSET ?")
|
||||
params = append(params, input.Pagesize, offset)
|
||||
}
|
||||
|
||||
query := queryBuilder.String()
|
||||
fmt.Println("Final query:", query)
|
||||
fmt.Println("Params:", params)
|
||||
|
||||
r.db.Raw(query, params...).Scan(&data)
|
||||
return data
|
||||
}
|
||||
|
||||
func (r *deliveriesRepository) GetPartnerDeliveries(input models.DeliveryQuery) []models.Deliveryinfo {
|
||||
fmt.Println("🔍 Fetching Partner Deliveries")
|
||||
|
||||
var data []models.Deliveryinfo
|
||||
var queryBuilder strings.Builder
|
||||
var params []interface{}
|
||||
|
||||
offset := (input.Pageno - 1) * input.Pagesize
|
||||
|
||||
queryBuilder.WriteString(deliveries + ` WHERE a.partnerid = ?`)
|
||||
params = append(params, input.Partnerid)
|
||||
|
||||
if input.Status != "" {
|
||||
queryBuilder.WriteString(" AND a.orderstatus = ?")
|
||||
params = append(params, input.Status)
|
||||
}
|
||||
|
||||
if input.Fromdate != "" && input.ToDate != "" {
|
||||
queryBuilder.WriteString(" AND a.deliverydate::date BETWEEN ? AND ?")
|
||||
params = append(params, input.Fromdate, input.ToDate)
|
||||
}
|
||||
|
||||
queryBuilder.WriteString(" ORDER BY a.deliveryid DESC")
|
||||
|
||||
if input.Pagesize > 0 {
|
||||
queryBuilder.WriteString(" LIMIT ? OFFSET ?")
|
||||
params = append(params, input.Pagesize, offset)
|
||||
}
|
||||
|
||||
finalQuery := queryBuilder.String()
|
||||
log.Println("Final Partner Query:", finalQuery, "Params:", params)
|
||||
|
||||
r.db.Raw(finalQuery, params...).Scan(&data)
|
||||
return data
|
||||
}
|
||||
|
||||
func (r *deliveriesRepository) GetCustomerDeliveries(input models.DeliveryQuery) []models.Deliveryinfo {
|
||||
fmt.Println("🔍 Fetching Customer Deliveries")
|
||||
|
||||
var data []models.Deliveryinfo
|
||||
var queryBuilder strings.Builder
|
||||
var params []interface{}
|
||||
|
||||
offset := (input.Pageno - 1) * input.Pagesize
|
||||
|
||||
queryBuilder.WriteString(deliveries + ` WHERE a.customerid = ?`)
|
||||
params = append(params, input.Customerid)
|
||||
|
||||
if input.Partnerid != 0 {
|
||||
queryBuilder.WriteString(" AND a.partnerid = ?")
|
||||
params = append(params, input.Partnerid)
|
||||
}
|
||||
|
||||
if input.Status != "" {
|
||||
queryBuilder.WriteString(" AND a.orderstatus = ?")
|
||||
params = append(params, input.Status)
|
||||
}
|
||||
|
||||
if input.Fromdate != "" && input.ToDate != "" {
|
||||
queryBuilder.WriteString(" AND a.deliverydate::date BETWEEN ? AND ?")
|
||||
params = append(params, input.Fromdate, input.ToDate)
|
||||
}
|
||||
|
||||
if input.Keyword != "" {
|
||||
k := "%" + input.Keyword + "%"
|
||||
queryBuilder.WriteString(` AND (
|
||||
a.pickupcustomer LIKE ? OR
|
||||
a.deliverycustomer LIKE ? OR
|
||||
a.pickupcontactno LIKE ? OR
|
||||
a.deliverycontactno LIKE ? OR
|
||||
a.orderid LIKE ?
|
||||
)`)
|
||||
for i := 0; i < 5; i++ {
|
||||
params = append(params, k)
|
||||
}
|
||||
}
|
||||
|
||||
queryBuilder.WriteString(" ORDER BY a.deliveryid DESC")
|
||||
if input.Pagesize != 0 {
|
||||
queryBuilder.WriteString(" LIMIT ? OFFSET ?")
|
||||
params = append(params, input.Pagesize, offset)
|
||||
}
|
||||
|
||||
query := queryBuilder.String()
|
||||
fmt.Println("Final query:", query)
|
||||
fmt.Println("Params:", params)
|
||||
|
||||
r.db.Raw(query, params...).Scan(&data)
|
||||
return data
|
||||
}
|
||||
|
||||
func (r *deliveriesRepository) GetAdminDeliveries(input models.DeliveryQuery) []models.Deliveryinfo {
|
||||
fmt.Println("Admin Deliveries")
|
||||
|
||||
var data []models.Deliveryinfo
|
||||
var queryBuilder strings.Builder
|
||||
var params []interface{}
|
||||
|
||||
offset := (input.Pageno - 1) * input.Pagesize
|
||||
|
||||
queryBuilder.WriteString(`
|
||||
SELECT a.*, b.tenantname, c.firstname as ridername
|
||||
FROM deliveries a
|
||||
JOIN tenants b ON a.tenantid = b.tenantid
|
||||
JOIN app_users c ON c.userid = a.userid
|
||||
WHERE a.applocationid = ?
|
||||
`)
|
||||
params = append(params, input.Applocationid)
|
||||
|
||||
if input.Status != "" {
|
||||
queryBuilder.WriteString(" AND a.orderstatus = ?")
|
||||
params = append(params, input.Status)
|
||||
}
|
||||
|
||||
if input.Fromdate != "" && input.ToDate != "" {
|
||||
queryBuilder.WriteString(" AND a.deliverydate::date BETWEEN ? AND ?")
|
||||
params = append(params, input.Fromdate, input.ToDate)
|
||||
}
|
||||
|
||||
if input.Keyword != "" {
|
||||
k := "%" + input.Keyword + "%"
|
||||
queryBuilder.WriteString(`
|
||||
AND (
|
||||
a.pickupcustomer LIKE ? OR
|
||||
b.tenantname LIKE ? OR
|
||||
a.deliverycustomer LIKE ? OR
|
||||
a.pickupcontactno LIKE ? OR
|
||||
a.deliverycontactno LIKE ? OR
|
||||
a.orderid LIKE ?
|
||||
)
|
||||
`)
|
||||
for i := 0; i < 6; i++ {
|
||||
params = append(params, k)
|
||||
}
|
||||
}
|
||||
|
||||
queryBuilder.WriteString(" ORDER BY a.deliveryid DESC")
|
||||
|
||||
if input.Pagesize > 0 {
|
||||
queryBuilder.WriteString(" LIMIT ? OFFSET ?")
|
||||
params = append(params, input.Pagesize, offset)
|
||||
}
|
||||
|
||||
finalQuery := queryBuilder.String()
|
||||
|
||||
log.Println("AdminDeliveries query:", finalQuery)
|
||||
log.Println("Params:", params)
|
||||
|
||||
r.db.Raw(finalQuery, params...).Scan(&data)
|
||||
return data
|
||||
}
|
||||
|
||||
func (r *deliveriesRepository) GetUserDeliveries(input models.DeliveryQuery) []models.Deliveryinfo {
|
||||
var q1 string
|
||||
|
||||
offset := (input.Pageno - 1) * input.Pagesize
|
||||
|
||||
var data []models.Deliveryinfo
|
||||
|
||||
if input.Status != "" {
|
||||
|
||||
if input.Pagesize != 0 {
|
||||
|
||||
fmt.Println("Rider Deliveriesv2")
|
||||
|
||||
q1 = deliveries + ` where a.userid=` + strconv.Itoa(input.UserID) + ` and a.orderstatus='` + input.Status + `'
|
||||
and a.deliverydate::date between '` + input.Fromdate + `' and '` + input.ToDate + `' order by deliveryid
|
||||
desc LIMIT ` + strconv.Itoa(input.Pagesize) + ` OFFSET ` + strconv.Itoa(offset)
|
||||
|
||||
} else {
|
||||
|
||||
fmt.Println("Rider Deliveriesv1")
|
||||
|
||||
q1 = deliveries + ` where a.userid=` + strconv.Itoa(input.UserID) + ` and a.orderstatus='` + input.Status + `'
|
||||
and a.deliverydate::date between '` + input.Fromdate + `' and '` + input.ToDate + `' order by deliveryid asc`
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if input.Pagesize != 0 {
|
||||
fmt.Println("Rider Deliveriesv2")
|
||||
|
||||
q1 = deliveries + ` where a.orderstatus in ('accepted','arrived','picked') and a.userid=` + strconv.Itoa(input.UserID) + ` and
|
||||
a.deliverydate::date between '` + input.Fromdate + `' and '` + input.ToDate + `' order by deliveryid
|
||||
desc LIMIT ` + strconv.Itoa(input.Pagesize) + ` OFFSET ` + strconv.Itoa(offset)
|
||||
|
||||
} else {
|
||||
|
||||
fmt.Println("Rider Deliveriesv1")
|
||||
|
||||
q1 = deliveries + ` where a.orderstatus in ('accepted','arrived','picked') and a.userid=` + strconv.Itoa(input.UserID) + ` and
|
||||
a.deliverydate::date between '` + input.Fromdate + `' and '` + input.ToDate + `' order by deliveryid desc`
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
r.db.Raw(q1).Find(&data)
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
func (r *deliveriesRepository) GetAppUserDeliveries(input models.DeliveryQuery) []models.Deliveryinfo {
|
||||
var data []models.Deliveryinfo
|
||||
|
||||
fmt.Println("Appsuser Deliveries -new")
|
||||
|
||||
var q1 string
|
||||
offset := (input.Pageno - 1) * input.Pagesize
|
||||
|
||||
q1 = deliveries + ` WHERE g.status = 'Active' AND g.userid=` + strconv.Itoa(input.Appuserid)
|
||||
|
||||
if input.Status != "" {
|
||||
q1 += ` AND a.orderstatus='` + input.Status + `'`
|
||||
}
|
||||
|
||||
if input.Fromdate != "" && input.ToDate != "" {
|
||||
q1 += ` AND a.deliverydate::date BETWEEN '` + input.Fromdate + `' AND '` + input.ToDate + `'`
|
||||
}
|
||||
|
||||
if input.Keyword != "" {
|
||||
k := "%" + input.Keyword + "%"
|
||||
q1 += ` AND (
|
||||
a.pickupcustomer LIKE '` + k + `' OR
|
||||
b.tenantname LIKE '` + k + `' OR
|
||||
a.deliverycustomer LIKE '` + k + `' OR
|
||||
a.pickupcontactno LIKE '` + k + `' OR
|
||||
a.deliverycontactno LIKE '` + k + `' OR
|
||||
CAST(a.orderid AS TEXT) LIKE '` + k + `'
|
||||
)`
|
||||
}
|
||||
|
||||
q1 += ` ORDER BY a.deliveryid DESC`
|
||||
if input.Pagesize != 0 {
|
||||
q1 += ` LIMIT ` + strconv.Itoa(input.Pagesize) + ` OFFSET ` + strconv.Itoa(offset)
|
||||
}
|
||||
|
||||
log.Println("Final Query:", q1)
|
||||
|
||||
r.db.Raw(q1).Find(&data)
|
||||
return data
|
||||
}
|
||||
|
||||
func (r *deliveriesRepository) GetDeliveries(input models.DeliveryQuery) []models.Deliveryinfo {
|
||||
var data []models.Deliveryinfo
|
||||
var queryBuilder strings.Builder
|
||||
var params []interface{}
|
||||
|
||||
offset := (input.Pageno - 1) * input.Pagesize
|
||||
|
||||
baseQuery := `
|
||||
SELECT a.*, b.tenantname, c.firstname as ridername, c.contactno as ridercontact, d.customertoken
|
||||
FROM deliveries a
|
||||
JOIN tenants b ON a.tenantid = b.tenantid
|
||||
Join app_users c ON a.userid = c.userid
|
||||
JOIN customer d ON a.deliverycustomerid = d.customerid
|
||||
WHERE 1=1
|
||||
`
|
||||
|
||||
queryBuilder.WriteString(baseQuery)
|
||||
|
||||
if input.Fromdate != "" && input.ToDate != "" {
|
||||
queryBuilder.WriteString(" AND a.deliverydate::date BETWEEN ? AND ?")
|
||||
params = append(params, input.Fromdate, input.ToDate)
|
||||
}
|
||||
|
||||
if input.Status != "" {
|
||||
queryBuilder.WriteString(" AND a.orderstatus = ?")
|
||||
params = append(params, input.Status)
|
||||
}
|
||||
|
||||
if input.Keyword != "" {
|
||||
k := "%" + input.Keyword + "%"
|
||||
queryBuilder.WriteString(`
|
||||
AND (
|
||||
a.pickupcustomer LIKE ? OR
|
||||
b.tenantname LIKE ? OR
|
||||
a.deliverycustomer LIKE ? OR
|
||||
a.pickupcontactno LIKE ? OR
|
||||
a.deliverycontactno LIKE ? OR
|
||||
a.orderid LIKE ?
|
||||
)
|
||||
`)
|
||||
for i := 0; i < 6; i++ {
|
||||
params = append(params, k)
|
||||
}
|
||||
}
|
||||
|
||||
queryBuilder.WriteString(" ORDER BY a.deliveryid DESC")
|
||||
|
||||
if input.Pagesize != 0 {
|
||||
queryBuilder.WriteString(" LIMIT ? OFFSET ?")
|
||||
params = append(params, input.Pagesize, offset)
|
||||
}
|
||||
|
||||
query := queryBuilder.String()
|
||||
|
||||
log.Println("Final query:", query)
|
||||
log.Println("With params:", params)
|
||||
|
||||
r.db.Raw(query, params...).Scan(&data)
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
func (r *deliveriesRepository) GetDeliveryQueues(uid int, fdate, tdate string) ([]models.Deliveryinfo, error) {
|
||||
var data []models.Deliveryinfo
|
||||
var q1 string
|
||||
|
||||
if fdate != "" && tdate != "" {
|
||||
q1 = deliveries + `
|
||||
WHERE a.orderstatus='pending'
|
||||
AND a.userid=?
|
||||
AND DATE(a.deliverydate) BETWEEN ? AND ?
|
||||
ORDER BY a.deliveryid ASC`
|
||||
if err := r.db.Raw(q1, uid, fdate, tdate).Find(&data).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
q1 = deliveries + `
|
||||
WHERE a.orderstatus='pending'
|
||||
AND a.userid=?
|
||||
AND DATE(a.deliverydate)=CURDATE()
|
||||
ORDER BY a.deliveryid ASC`
|
||||
if err := r.db.Raw(q1, uid).Find(&data).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (r *deliveriesRepository) GetTenantLocationDeliveries(input models.DeliveryQuery) []models.Deliveryinfo {
|
||||
|
||||
var data []models.Deliveryinfo
|
||||
var params []interface{}
|
||||
var qb strings.Builder
|
||||
|
||||
offset := (input.Pageno - 1) * input.Pagesize
|
||||
|
||||
qb.WriteString(`
|
||||
SELECT a.*, b.tenantname, c.firstname AS ridername,
|
||||
c.contactno AS ridercontact, d.customertoken
|
||||
FROM deliveries a
|
||||
JOIN tenants b ON a.tenantid = b.tenantid
|
||||
JOIN app_users c ON a.userid = c.userid
|
||||
JOIN customers d ON a.deliverycustomerid = d.customerid
|
||||
WHERE a.tenantid = ? AND a.locationid = ?
|
||||
`)
|
||||
|
||||
params = append(params, input.Tenantid, input.Locationid)
|
||||
|
||||
if input.Fromdate != "" && input.ToDate != "" {
|
||||
qb.WriteString(" AND DATE(a.deliverydate) BETWEEN ? AND ?")
|
||||
params = append(params, input.Fromdate, input.ToDate)
|
||||
}
|
||||
|
||||
if input.Status != "" {
|
||||
qb.WriteString(" AND a.orderstatus = ?")
|
||||
params = append(params, input.Status)
|
||||
}
|
||||
|
||||
if input.Keyword != "" {
|
||||
like := "%" + input.Keyword + "%"
|
||||
qb.WriteString(`
|
||||
AND (
|
||||
a.pickupcustomer LIKE ? OR
|
||||
b.tenantname LIKE ? OR
|
||||
a.deliverycustomer LIKE ? OR m
|
||||
a.pickupcontactno LIKE ? OR
|
||||
a.deliverycontactno LIKE ? OR
|
||||
a.orderid LIKE ?
|
||||
)
|
||||
`)
|
||||
for i := 0; i < 6; i++ {
|
||||
params = append(params, like)
|
||||
}
|
||||
}
|
||||
|
||||
qb.WriteString(" ORDER BY a.deliveryid DESC")
|
||||
|
||||
if input.Pagesize != 0 {
|
||||
qb.WriteString(" LIMIT ? OFFSET ?")
|
||||
params = append(params, input.Pagesize, offset)
|
||||
}
|
||||
|
||||
query := qb.String()
|
||||
|
||||
log.Println("Tenant+Location Query:", query)
|
||||
log.Println("Params:", params)
|
||||
|
||||
r.db.Raw(query, params...).Scan(&data)
|
||||
|
||||
return data
|
||||
}
|
||||
Reference in New Issue
Block a user