208 lines
5.9 KiB
Go
208 lines
5.9 KiB
Go
package domain
|
|
|
|
import (
|
|
"nearle/db"
|
|
"nearle/models"
|
|
"nearle/utils"
|
|
"strconv"
|
|
)
|
|
|
|
func GetAllInvoice(stat, tid int) []models.Tenantsales {
|
|
|
|
var q1 string
|
|
|
|
var data []models.Tenantsales
|
|
|
|
const (
|
|
base = `select a.* from tenantsales a`
|
|
)
|
|
|
|
if stat == 1 {
|
|
|
|
if tid != 0 {
|
|
|
|
q1 = base + ` where a.billstatus=0 and a.tenantid=` + strconv.Itoa(tid) + ` and a.duedate::date > CURRENT_DATE order by salesid desc `
|
|
|
|
} else {
|
|
|
|
q1 = base + ` where a.billstatus=0 and a.duedate::date > CURRENT_DATE order by salesid desc `
|
|
}
|
|
|
|
} else if stat == 2 {
|
|
|
|
if tid != 0 {
|
|
|
|
q1 = base + ` where a.billstatus=0 and a.tenantid=` + strconv.Itoa(tid) + ` and a.duedate::date < CURRENT_DATE order by salesid desc `
|
|
|
|
} else {
|
|
|
|
q1 = base + ` where a.billstatus=0 and a.duedate::date < CURRENT_DATE order by salesid desc `
|
|
|
|
}
|
|
|
|
} else if stat == 3 {
|
|
|
|
if tid != 0 {
|
|
|
|
q1 = base + ` where a.billstatus=2 and a.tenantid=` + strconv.Itoa(tid) + ` order by salesid desc `
|
|
|
|
} else {
|
|
|
|
q1 = base + ` where a.billstatus=2 order by salesid desc `
|
|
}
|
|
|
|
} else {
|
|
|
|
if tid != 0 {
|
|
|
|
q1 = base + ` where a.tenantid=` + strconv.Itoa(tid) + ` order by salesid desc `
|
|
|
|
} else {
|
|
|
|
q1 = base + ` order by salesid desc `
|
|
}
|
|
|
|
}
|
|
// print(q1)
|
|
db.DB.Raw(q1).Preload("Tenantsalesdetails").Find(&data)
|
|
|
|
return data
|
|
|
|
}
|
|
|
|
func GetInvoiceOrders(tid int, fdate, tdate string) models.InvoiceOrders {
|
|
|
|
var q1 string
|
|
|
|
var data models.InvoiceOrders
|
|
|
|
q1 = `SELECT round(SUM(actualkms),0) AS actualkms,round(SUM(kms),0) AS kms,count(*) as deliveries FROM deliveries
|
|
WHERE orderstatus='delivered' and tenantid=` + strconv.Itoa(tid) + ` and date(deliverydate) between '` + fdate + `' and '` + tdate + `'`
|
|
|
|
utils.Logger.Debugf("Query: %s", q1)
|
|
|
|
db.DB.Raw(q1).Find(&data)
|
|
|
|
return data
|
|
|
|
}
|
|
|
|
func GetInvoiceInsight(tid int) models.InvoiceInsight {
|
|
|
|
var q1 string
|
|
|
|
var data models.InvoiceInsight
|
|
|
|
if tid != 0 {
|
|
|
|
q1 = `Select COUNT(*) AS totalcount,
|
|
SUM(totalamount) AS total,
|
|
SUM(CASE WHEN billstatus=0 and status='pending' AND duedate > CURRENT_DATE THEN 1 ELSE 0 END) AS pendingcount,
|
|
SUM(CASE WHEN billstatus IN (0) and status='pending' AND duedate > CURRENT_DATE THEN totalamount ELSE 0 END) AS pending,
|
|
(SUM(CASE WHEN billstatus IN (0) and status='pending' AND duedate > CURRENT_DATE THEN totalamount ELSE 0 END) / SUM(totalamount) * 100) AS pendingpercent,
|
|
SUM(CASE WHEN billstatus = 1 THEN 1 ELSE 0 END) AS confirmedcount,
|
|
SUM(CASE WHEN billstatus = 1 THEN totalamount ELSE 0 END) AS confirmed,
|
|
(SUM(CASE WHEN billstatus = 1 THEN totalamount ELSE 0 END) / SUM(totalamount) * 100) AS confrimedpercent,
|
|
SUM(CASE WHEN billstatus = 2 THEN 1 ELSE 0 END) AS paidcount,
|
|
SUM(CASE WHEN billstatus = 2 THEN totalamount ELSE 0 END) AS paid,
|
|
(SUM(CASE WHEN billstatus = 2 THEN totalamount ELSE 0 END) / SUM(totalamount) * 100) AS paidpercent,
|
|
SUM(CASE WHEN billstatus IN (0) and status='pending' AND duedate <= CURRENT_DATE THEN 1 ELSE 0 END) AS overduecount,
|
|
SUM(CASE WHEN billstatus IN(0) and status='pending' AND duedate <= CURRENT_DATE THEN totalamount ELSE 0 END) AS overdue,
|
|
(SUM(CASE WHEN billstatus IN(0) and status='pending' AND duedate <= CURRENT_DATE THEN totalamount ELSE 0 END) / SUM(totalamount) * 100) AS overduepercent
|
|
FROM tenantsales where tenantid=` + strconv.Itoa(tid)
|
|
|
|
} else {
|
|
|
|
q1 = `Select COUNT(*) AS totalcount,
|
|
SUM(totalamount) AS total,
|
|
SUM(CASE WHEN billstatus=0 and status='pending' AND duedate > CURRENT_DATE THEN 1 ELSE 0 END) AS pendingcount,
|
|
SUM(CASE WHEN billstatus IN (0) and status='pending' AND duedate > CURRENT_DATE THEN totalamount ELSE 0 END) AS pending,
|
|
(SUM(CASE WHEN billstatus IN (0) and status='pending' AND duedate > CURRENT_DATE THEN totalamount ELSE 0 END) / SUM(totalamount) * 100) AS pendingpercent,
|
|
SUM(CASE WHEN billstatus = 1 THEN 1 ELSE 0 END) AS confirmedcount,
|
|
SUM(CASE WHEN billstatus = 1 THEN totalamount ELSE 0 END) AS confirmed,
|
|
(SUM(CASE WHEN billstatus = 1 THEN totalamount ELSE 0 END) / SUM(totalamount) * 100) AS confrimedpercent,
|
|
SUM(CASE WHEN billstatus = 2 THEN 1 ELSE 0 END) AS paidcount,
|
|
SUM(CASE WHEN billstatus = 2 THEN totalamount ELSE 0 END) AS paid,
|
|
(SUM(CASE WHEN billstatus = 2 THEN totalamount ELSE 0 END) / SUM(totalamount) * 100) AS paidpercent,
|
|
SUM(CASE WHEN billstatus IN (0) and status='pending' AND duedate <= CURRENT_DATE THEN 1 ELSE 0 END) AS overduecount,
|
|
SUM(CASE WHEN billstatus IN(0) and status='pending' AND duedate <= CURRENT_DATE THEN totalamount ELSE 0 END) AS overdue,
|
|
(SUM(CASE WHEN billstatus IN(0) and status='pending' AND duedate <= CURRENT_DATE THEN totalamount ELSE 0 END) / SUM(totalamount) * 100) AS overduepercent
|
|
FROM tenantsales`
|
|
|
|
}
|
|
|
|
// print(q1)
|
|
db.DB.Raw(q1).Find(&data)
|
|
|
|
return data
|
|
|
|
}
|
|
|
|
func CreateInvoice(data models.Tenantsales) error {
|
|
|
|
tx := db.DB.Begin()
|
|
|
|
t1 := tx.Create(&data)
|
|
if t1.Error != nil {
|
|
|
|
utils.Error("CreateInvoice error", "error", t1.Error)
|
|
tx.Rollback()
|
|
return t1.Error
|
|
}
|
|
|
|
t2 := tx.Table("deliveries").Where("deliverydate>=? and deliverydate<=?", data.Tenantsalesdetails[0].Fromdate, data.Tenantsalesdetails[0].Todate).Update("settlementid", data.Salesid)
|
|
if t2.Error != nil {
|
|
|
|
utils.Error("CreateInvoice deliveries update error", "error", t2.Error)
|
|
tx.Rollback()
|
|
return t2.Error
|
|
}
|
|
|
|
UpdateSeqno(data.Tenantid, "INV")
|
|
|
|
err := tx.Commit().Error
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func UpdateInvoice(data models.Tenantsales) error {
|
|
|
|
tx := db.DB.Begin()
|
|
|
|
t1 := tx.Where("salesid=?", data.Salesid).Updates(&data)
|
|
if t1.Error != nil {
|
|
|
|
utils.Error("UpdateInvoice error", "error", t1.Error)
|
|
tx.Rollback()
|
|
}
|
|
err := tx.Commit().Error
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func UpdateInvoiceStatus(data models.InvoiceStatus) error {
|
|
|
|
tx := db.DB.Begin()
|
|
|
|
t1 := tx.Table("tenantsales").Where("salesid=?", data.Salesid).Updates(&data)
|
|
if t1.Error != nil {
|
|
|
|
utils.Error("UpdateInvoiceStatus error", "error", t1.Error)
|
|
tx.Rollback()
|
|
}
|
|
err := tx.Commit().Error
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|