441 lines
18 KiB
Go
441 lines
18 KiB
Go
package models
|
|
|
|
import (
|
|
"database/sql/driver"
|
|
"encoding/json"
|
|
"fmt"
|
|
"strconv"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// FlexibleString handles JSON that could be either a number or a string,
|
|
// and ensures it can be saved/read from the database as a string.
|
|
type FlexibleString string
|
|
|
|
func (fs *FlexibleString) UnmarshalJSON(b []byte) error {
|
|
if len(b) == 0 {
|
|
return nil
|
|
}
|
|
// If it's a string in JSON
|
|
if b[0] == '"' {
|
|
var s string
|
|
if err := json.Unmarshal(b, &s); err != nil {
|
|
return err
|
|
}
|
|
*fs = FlexibleString(s)
|
|
return nil
|
|
}
|
|
// If it's a number in JSON
|
|
var f float64
|
|
if err := json.Unmarshal(b, &f); err != nil {
|
|
return err
|
|
}
|
|
*fs = FlexibleString(strconv.FormatFloat(f, 'f', -1, 64))
|
|
return nil
|
|
}
|
|
|
|
func (fs FlexibleString) MarshalJSON() ([]byte, error) {
|
|
return json.Marshal(string(fs))
|
|
}
|
|
|
|
// 🔥 Database Logic: Handle reading from DB
|
|
func (fs *FlexibleString) Scan(value interface{}) error {
|
|
if value == nil {
|
|
*fs = ""
|
|
return nil
|
|
}
|
|
switch v := value.(type) {
|
|
case []byte:
|
|
*fs = FlexibleString(v)
|
|
case string:
|
|
*fs = FlexibleString(v)
|
|
case float64:
|
|
*fs = FlexibleString(strconv.FormatFloat(v, 'f', -1, 64))
|
|
case int64:
|
|
*fs = FlexibleString(strconv.FormatInt(v, 10))
|
|
default:
|
|
*fs = FlexibleString(fmt.Sprintf("%v", v))
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// 🔥 Database Logic: Handle writing to DB
|
|
func (fs FlexibleString) Value() (driver.Value, error) {
|
|
return string(fs), nil
|
|
}
|
|
|
|
func (fs FlexibleString) String() string {
|
|
return string(fs)
|
|
}
|
|
|
|
type OrderInfo struct {
|
|
Orderheaderid int `json:"orderheaderid"`
|
|
Applocationid int `json:"applocationid"`
|
|
Applocation string `json:"applocation"`
|
|
Tenantid int `json:"tenantid"`
|
|
Partnerid int `json:"partnerid"`
|
|
Locationid int `json:"locationid"`
|
|
Categoryid int `json:"categoryid"`
|
|
Subcategoryid int `json:"subcategoryid"`
|
|
Moduleid int `json:"moduleid"`
|
|
Configid int `json:"configid"`
|
|
Orderid string `json:"orderid"`
|
|
Orderdate string `json:"orderdate"`
|
|
Deliverydate string `json:"deliverydate"`
|
|
Orderstatus string `json:"orderstatus"`
|
|
Deliverystatus string `json:"deliverystatus"`
|
|
Deliveryamt float64 `json:"deliveryamt"`
|
|
Itemcount int `json:"itemcount"`
|
|
Ordernotes string `json:"ordernotes"`
|
|
Kms FlexibleString `json:"kms"`
|
|
Actualkms FlexibleString `json:"actualkms"`
|
|
Pending string `json:"Pending"`
|
|
Processing string `json:"processing"`
|
|
Ready string `json:"ready"`
|
|
Cancelled string `json:"cancelled"`
|
|
Delivered string `json:"delivered"`
|
|
Assigntime string `json:"assigntime"`
|
|
Starttime string `json:"starttime"`
|
|
Arrivaltime string `json:"arrivaltime"`
|
|
Pickuptime string `json:"pickuptime"`
|
|
Deliverytime string `json:"deliverytime"`
|
|
Canceltime string `json:"canceltime"`
|
|
Deliverycharge float32 `json:"deliverycharge"`
|
|
Orderamount float32 `json:"orderamount"`
|
|
Customerid int `json:"customerid"`
|
|
Pickupcustomer string `json:"pickupcustomer"`
|
|
Pickupcontactno string `json:"pickupcontactno"`
|
|
Pickuplocationid int `json:"pickuplocationid"`
|
|
Pickupaddress string `json:"pickupaddress"`
|
|
Pickupsuburb string `json:"pickupsuburb"`
|
|
Pickupcity string `json:"pickupcity"`
|
|
Pickuplat FlexibleString `json:"pickuplat"`
|
|
Pickuplong FlexibleString `json:"pickuplong"`
|
|
Deliveryid int `json:"deliveryid"`
|
|
Deliverycustomerid int `json:"deliverycustomerid"`
|
|
Deliverycustomer string `json:"deliverycustomer"`
|
|
Deliverycontactno string `json:"deliverycontactno"`
|
|
Deliverylocationid int `json:"deliverylocationid"`
|
|
Deliveryaddress string `json:"deliveryaddress"`
|
|
Deliverysuburb string `json:"deliverysuburb"`
|
|
Droplat FlexibleString `json:"droplat"`
|
|
Droplon FlexibleString `json:"droplon"`
|
|
Deliverylat FlexibleString `json:"deliverylat"`
|
|
Deliverylong FlexibleString `json:"deliverylong"`
|
|
Deliverytype string `json:"deliverytype"`
|
|
Paymenttype int `json:"paymenttype"`
|
|
Tenantname string `json:"tenantname"`
|
|
Tenanttoken string `json:"tenanttoken"`
|
|
Tenantsuburb string `json:"tenantsuburb"`
|
|
Tenantcity string `json:"tenantcity"`
|
|
Tenantcontactno string `json:"tenantcontactno"`
|
|
Tenantpostcode string `json:"tenantpostcode"`
|
|
Locationname string `json:"locationname"`
|
|
Locationsuburb string `json:"locationsuburb"`
|
|
Locationcity string `json:"locationcity"`
|
|
Locationcontactno string `json:"locationcontactno"`
|
|
Rider string `json:"rider"`
|
|
Ridercontactno string `json:"ridercontactno"`
|
|
Riderkms FlexibleString `json:"riderkms"`
|
|
Smsdelivery int `json:"smsdelivery"`
|
|
Customertoken string `json:"customertoken"`
|
|
Ridertoken string `json:"ridertoken"`
|
|
}
|
|
|
|
type DeliveryQuery struct {
|
|
Tenantid int
|
|
Customerid int
|
|
Partnerid int
|
|
UserID int
|
|
Appuserid int
|
|
Applocationid int
|
|
Moduleid int
|
|
Locationid int
|
|
Configid int
|
|
Fromdate string
|
|
ToDate string
|
|
Status string
|
|
Pageno int
|
|
Pagesize int
|
|
Conn *gorm.DB
|
|
Keyword string `json:"keyword"`
|
|
}
|
|
|
|
type Ordersummary struct {
|
|
Total int `json:"total"`
|
|
Created int `json:"created"`
|
|
Pending int `json:"pending"`
|
|
Processing int `json:"processing"`
|
|
Delivered int `json:"delivered"`
|
|
Cancelled int `json:"cancelled"`
|
|
// Locationid int `json:"locationid"`
|
|
Locationname string `json:"locationname"`
|
|
Applocationid string `json:"applocationid"`
|
|
}
|
|
|
|
type Ordersummarylocation struct {
|
|
Total int `json:"total"`
|
|
Created int `json:"created"`
|
|
Pending int `json:"pending"`
|
|
Processing int `json:"processing"`
|
|
Delivered int `json:"delivered"`
|
|
Cancelled int `json:"cancelled"`
|
|
Locationid int `json:"locationid"`
|
|
Locationname string `json:"locationname"`
|
|
}
|
|
|
|
type Ordersummarydaily struct {
|
|
Total int `json:"total"`
|
|
Created int `json:"created"`
|
|
Pending int `json:"pending"`
|
|
Processing int `json:"processing"`
|
|
Delivered int `json:"delivered"`
|
|
Cancelled int `json:"cancelled"`
|
|
Tenantid int `json:"tenantid"`
|
|
Tenantname string `json:"tenantname"`
|
|
Locationid int `json:"locationid"`
|
|
Locationname string `json:"locationname"`
|
|
}
|
|
|
|
type OrderInsight struct {
|
|
Applocationid int `json:"applocationid" gorm:"Primary_Key"`
|
|
Locationname string `json:"locationname"`
|
|
Ordermonths *Ordermonths `json:"ordermonths" gorm:"-"`
|
|
}
|
|
|
|
type OrderInsightv1 struct {
|
|
Locationid int `json:"locationid" gorm:"Primary_Key"`
|
|
Locationname string `json:"locationname"`
|
|
Ordermonths *Ordermonths `json:"ordermonths" gorm:"-"`
|
|
}
|
|
|
|
type Ordermonths struct {
|
|
Jan int `json:"jan"`
|
|
Feb int `json:"feb"`
|
|
Mar int `json:"mar"`
|
|
Apr int `json:"apr"`
|
|
May int `json:"may"`
|
|
Jun int `json:"jun"`
|
|
Jul int `json:"jul"`
|
|
Aug int `Json:"aug"`
|
|
Sep int `Json:"sep"`
|
|
Oct int `Json:"oct"`
|
|
Nov int `Json:"nov"`
|
|
Dece int `Json:"dece"`
|
|
// Applocationid int `json:"applocationid"`
|
|
}
|
|
|
|
type Orders struct {
|
|
Orderheaderid int `json:"orderheaderid" gorm:"Primary_Key"`
|
|
Tenantid int `json:"tenantid"`
|
|
Locationid int `json:"locationid"`
|
|
Applocationid int `json:"applocationid"`
|
|
Moduleid int `json:"moduleid"`
|
|
Partnerid int `json:"partnerid"`
|
|
Configid int `json:"configid"`
|
|
Categoryid int `json:"categoryid"`
|
|
Subcategoryid int `json:"subcategoryid"`
|
|
Orderid string `json:"orderid"`
|
|
Orderdate string `json:"orderdate,omitempty"`
|
|
Deliverytime string `json:"deliverytime"`
|
|
Deliverytype string `json:"deliverytype"`
|
|
Orderstatus string `json:"orderstatus"`
|
|
Pending string `json:"pending"`
|
|
Processing string `json:"processing"`
|
|
Ready string `json:"ready"`
|
|
Delivered string `json:"delivered"`
|
|
Cancelled string `json:"cancelled"`
|
|
Customerid int `json:"customerid"`
|
|
Pickupaddress string `json:"pickupaddress"`
|
|
Pickuplat FlexibleString `json:"pickuplat"`
|
|
Pickuplong FlexibleString `json:"pickuplong"`
|
|
Pickupcustomer string `json:"pickupcustomer"`
|
|
Pickupcontactno string `json:"pickupcontactno"`
|
|
Pickuplocation string `json:"pickupsuburb"` // alias
|
|
Pickupcity string `json:"pickupcity"`
|
|
Deliveryid int `json:"deliverycustomerid"` // alias
|
|
Deliverycustomer string `json:"deliverycustomer"`
|
|
Deliverycontactno string `json:"deliverycontactno"`
|
|
Deliveryaddress string `json:"deliveryaddress"`
|
|
Deliverylocation string `json:"deliverylocation"`
|
|
Deliverycity string `json:"deliverycity"`
|
|
Deliverylocationid int `json:"deliverylocationid"`
|
|
Deliverylat FlexibleString `json:"deliverylat"`
|
|
Deliverylong FlexibleString `json:"deliverylong"`
|
|
Promotionid int `json:"promotionid"`
|
|
Promoname string `json:"promoname"`
|
|
Promoterms string `json:"promoterms"`
|
|
Promovalue int `json:"promovalue"`
|
|
Promoamount float32 `json:"promoamount"`
|
|
Orderamount float32 `json:"orderamount"`
|
|
Taxamount float32 `json:"taxamount"`
|
|
Ordercharges float32 `json:"ordercharges"`
|
|
Ordervalue float32 `json:"ordervalue"`
|
|
Itemcount int `json:"itemcount"`
|
|
Paymenttype int `json:"paymenttype"`
|
|
Paymentstatus int `json:"paymentstatus"`
|
|
Deliverycharge float32 `json:"deliverycharge"`
|
|
Ordernotes string `json:"ordernotes"`
|
|
Kms FlexibleString `json:"kms"`
|
|
Remarks string `json:"remarks"`
|
|
Tenantuserid int `json:"tenantuserid"`
|
|
Partneruserid int `json:"partneruserid"`
|
|
Smsdelivery int `json:"smsdelivery" gorm:"default:0"`
|
|
Items []OrderDetail `json:"items" gorm:"-"`
|
|
}
|
|
|
|
type OrderDetails struct {
|
|
Orderdetailid int `json:"orderdetailid" gorm:"primaryKey;autoIncrement"`
|
|
Orderheaderid int `json:"orderheaderid"`
|
|
Tenantid int `json:"tenantid"`
|
|
Locationid int `json:"locationid"`
|
|
Productid int `json:"productid"`
|
|
Productname string `json:"productname"`
|
|
Productdescription string `json:"productdescription"`
|
|
Supplyqty float64 `json:"supplyqty"`
|
|
Balanceqty float64 `json:"balanceqty"`
|
|
Orderqty float64 `json:"orderqty"`
|
|
Price float64 `json:"price"`
|
|
Unitid int `json:"unitid"`
|
|
Unitname string `json:"unitname"`
|
|
Productaddonid int `json:"productaddonid"`
|
|
Addontypeid int `json:"addontypeid"`
|
|
Productmapid int `json:"productmapid"`
|
|
Productvariantid int `json:"productvariantid"`
|
|
Productaddondescription string `json:"productaddondescription"`
|
|
Discountid int `json:"discountid"`
|
|
Discountname string `json:"discountname"`
|
|
Discountcode string `json:"discountcode"`
|
|
Discountterms string `json:"discountterms"`
|
|
Discountpercentage float64 `json:"discountpercentage"`
|
|
Discountamount float64 `json:"discountamount"`
|
|
Landingamount float64 `json:"landingamount"`
|
|
Taxpercentage float64 `json:"taxpercentage"`
|
|
Taxamount float64 `json:"taxamount"`
|
|
Totaltaxamount float64 `json:"totaltaxamount"`
|
|
Productsumprice float64 `json:"productsumprice"`
|
|
Itemstatus string `json:"itemstatus"`
|
|
Delivered string `json:"delivered"`
|
|
Orderamount float64 `json:"Orderamount"`
|
|
Productimage string `json:"productimage"`
|
|
}
|
|
|
|
type OrderDetail struct {
|
|
Orderdetailid int `json:"orderdetailid" gorm:"primaryKey;autoIncrement"`
|
|
Orderheaderid int `json:"orderheaderid"`
|
|
Tenantid int `json:"tenantid"`
|
|
Locationid int `json:"locationid"`
|
|
Productid int `json:"productid"`
|
|
Productname string `json:"productname"`
|
|
Productdescription string `json:"productdescription"`
|
|
Supplyqty float64 `json:"supplyqty"`
|
|
Balanceqty float64 `json:"balanceqty"`
|
|
Orderqty float64 `json:"orderqty"`
|
|
Price float64 `json:"price"`
|
|
Unitid int `json:"unitid"`
|
|
Unitname string `json:"unitname"`
|
|
Productaddonid int `json:"productaddonid"`
|
|
Addontypeid int `json:"addontypeid"`
|
|
Productmapid int `json:"productmapid"`
|
|
Productvariantid int `json:"productvariantid"`
|
|
Productaddondescription string `json:"productaddondescription"`
|
|
Discountid int `json:"discountid"`
|
|
Discountname string `json:"discountname"`
|
|
Discountcode string `json:"discountcode"`
|
|
Discountterms string `json:"discountterms"`
|
|
Discountpercentage float64 `json:"discountpercentage"`
|
|
Discountamount float64 `json:"discountamount"`
|
|
Landingamount float64 `json:"landingamount"`
|
|
Taxpercentage float64 `json:"taxpercentage"`
|
|
Taxamount float64 `json:"taxamount"`
|
|
Productsumprice float64 `json:"productsumprice"`
|
|
Itemstatus string `json:"itemstatus"`
|
|
Delivered string `json:"delivered"`
|
|
Orderamount float64 `json:"-" gorm:"-"`
|
|
Productimage string `json:"productimage" gorm:"-"` // only for JSON
|
|
}
|
|
|
|
type CustomerOrder struct {
|
|
Orderheaderid int `json:"orderheaderid" gorm:"Primary_Key"`
|
|
Applocationid int `json:"applocationid"`
|
|
Tenantid int `json:"tenantid"`
|
|
Locationid int `json:"locationid"`
|
|
Partnerid int `json:"partnerid"`
|
|
Configid int `json:"configid"`
|
|
Categoryid int `json:"categoryid"`
|
|
Subcategoryid int `json:"subcategoryid"`
|
|
Moduleid int `json:"moduleid"`
|
|
Orderid string `json:"orderid"`
|
|
Orderstatus string `json:"orderstatus"`
|
|
Orderdate string `json:"orderdate,omitempty"`
|
|
Ordernotes string `json:"ordernotes"`
|
|
Itemcount int `json:"itemcount"`
|
|
Deliverytime string `json:"deliverytime"` // alias for delivered
|
|
Pending string `json:"pending"`
|
|
Processing string `json:"processing"`
|
|
Ready string `json:"ready"`
|
|
Delivered string `json:"delivered"` // original delivered column
|
|
Cancelled string `json:"cancelled"`
|
|
Deliverycharge float32 `json:"deliverycharge"`
|
|
Kms FlexibleString `json:"kms"`
|
|
|
|
Smsdelivery int `json:"smsdelivery"`
|
|
|
|
// Tenant Info
|
|
Tenantname string `json:"tenantname"`
|
|
Tenanttoken string `json:"tenanttoken"`
|
|
Tenantcontactno string `json:"tenantcontactno"`
|
|
Tenantpostcode string `json:"tenantpostcode"`
|
|
Tenantsuburb string `json:"tenantsuburb"`
|
|
Tenantcity string `json:"tenantcity"`
|
|
Registrationno string `json:"registrationno"`
|
|
|
|
// Location Info
|
|
Locationname string `json:"locationname"`
|
|
Locationcontactno string `json:"locationcontactno"`
|
|
Locationpostcode string `json:"locationpostcode"`
|
|
Locationsuburb string `json:"locationsuburb"`
|
|
Locationcity string `json:"locationcity"`
|
|
|
|
// App Location
|
|
Applocation string `json:"applocation"`
|
|
|
|
// Delivery Info (from `deliveries` table)
|
|
Deliverystatus string `json:"deliverystatus"`
|
|
DeliveryUserID int `json:"deliveryid"` // alias
|
|
Assigntime string `json:"assigntime"`
|
|
Starttime string `json:"starttime"`
|
|
Arrivaltime string `json:"arrivaltime"`
|
|
Pickuptime string `json:"pickuptime"`
|
|
Finaldeliverytime string `json:"finaldeliverytime"` // alias for f.deliverytime
|
|
Canceltime string `json:"canceltime"`
|
|
Riderkms FlexibleString `json:"riderkms"`
|
|
// Actualkms sql.NullFloat64 `json:"actualkms"`
|
|
// Actualkms sql.NullFloat64 `json:"actualkms"`
|
|
// Riderkms sql.NullFloat64 `json:"riderkms"`
|
|
// Deliveryamt sql.NullFloat64 `json:"deliveryamt"`
|
|
Droplat FlexibleString `json:"droplat"`
|
|
Droplon FlexibleString `json:"droplon"`
|
|
|
|
// Rider
|
|
Rider string `json:"rider"`
|
|
Orderamount float64 `json:"orderamount"`
|
|
Taxamount float64 `json:"taxamount"`
|
|
Totaltaxamount float64 `json:"totaltaxamount"`
|
|
Riderkms_v2 FlexibleString `json:"-" gorm:"column:riderkms"` // Extra safety
|
|
|
|
// Items if applicable
|
|
OrderDetails []OrderDetails `json:"orderdetails" gorm:"-"`
|
|
}
|
|
|
|
type Ordersequences struct {
|
|
Sequenceid int `json:"sequenceid" gorm:"Primary_Key"`
|
|
Tenantid int `json:"tenantid"`
|
|
Orderprefix string `json:"orderprefix" gorm:"default:ORD"`
|
|
Customerprefix string `json:"customerprefix" gorm:"default:CUS"`
|
|
Appointmentprefix string `json:"appointmentprefix" gorm:"default:ORD"`
|
|
Receiptprefix string `json:"receiptprefix" gorm:"default:REC"`
|
|
Paymentprefix string `json:"paymentprefix" gorm:"default:PAY"`
|
|
}
|