intial commit
This commit is contained in:
207
domain/invoice.go
Normal file
207
domain/invoice.go
Normal file
@@ -0,0 +1,207 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user