zhangqian
2023-08-11 40fa6f86f5f7ac35206d6b953f4e5e82b2145ce9
新增、修改销售明细时更改价税合计,应收金额,未开票金额
2个文件已修改
29 ■■■■■ 已修改文件
model/salesDetails.go 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/salesDetails.go 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/salesDetails.go
@@ -36,6 +36,7 @@
        AmountReceived      decimal.Decimal   `gorm:"column:amount_received;type:decimal(12,2);comment:已收金额" json:"amountReceived"`        // 已收金额
        AmountInvoiced      decimal.Decimal   `gorm:"column:amount_invoiced;type:decimal(12,2);comment:已开票金额" json:"amountInvoiced"`       // 已开票金额
        AmountUnInvoiced    decimal.Decimal   `gorm:"column:amount_not_invoiced;type:decimal(12,2);comment:未开票金额" json:"amountUnInvoiced"` // 未开票金额
        AmountTotal         decimal.Decimal   `gorm:"column:amount_total;type:decimal(12,2);comment:价税合计" json:"amountTotal"`              // 价税合计
        gorm.Model          `json:"-"`
    }
service/salesDetails.go
@@ -4,11 +4,23 @@
    "aps_crm/constvar"
    "aps_crm/model"
    "aps_crm/pkg/ecode"
    "github.com/shopspring/decimal"
)
type SalesDetailsService struct{}
func (SalesDetailsService) AddSalesDetails(salesDetails *model.SalesDetails) int {
    salesDetails.AmountReceivable = decimal.Zero.Round(2)
    salesDetails.AmountInvoiced = decimal.Zero.Round(2)
    salesDetails.AmountReceived = decimal.Zero.Round(2)
    salesDetails.AmountUnInvoiced = decimal.Zero.Round(2)
    salesDetails.AmountTotal = decimal.Zero.Round(2)
    for _, product := range salesDetails.Products {
        salesDetails.AmountTotal = salesDetails.AmountTotal.Add(product.Amount.Mul(product.Price))
    }
    salesDetails.AmountTotal = salesDetails.AmountTotal.Round(2)
    salesDetails.AmountReceivable = salesDetails.AmountTotal
    salesDetails.AmountUnInvoiced = salesDetails.AmountTotal
    err := model.NewSalesDetailsSearch().Create(salesDetails)
    if err != nil {
        return ecode.SalesDetailsExist
@@ -32,10 +44,24 @@
func (SalesDetailsService) UpdateSalesDetails(salesDetails *model.SalesDetails) int {
    // check salesDetails exist
    _, err := model.NewSalesDetailsSearch().SetId(salesDetails.Id).First()
    old, err := model.NewSalesDetailsSearch().SetId(salesDetails.Id).First()
    if err != nil {
        return ecode.SalesDetailsNotExist
    }
    var totalAmount decimal.Decimal
    totalAmount = salesDetails.AmountTotal
    newProducts, removedProducts := NewProductsService().PickDiffProducts(salesDetails.Products, old.Products)
    for _, product := range newProducts {
        totalAmount = totalAmount.Add(product.Amount.Mul(product.Price))
    }
    removedProductIds := make([]uint, 0, len(removedProducts))
    for _, product := range removedProducts {
        totalAmount = totalAmount.Sub(product.Amount.Mul(product.Price))
        removedProductIds = append(removedProductIds, product.Id)
    }
    salesDetails.AmountTotal = totalAmount.Round(2)
    salesDetails.AmountReceivable = salesDetails.AmountTotal.Sub(salesDetails.AmountReceived)
    salesDetails.AmountUnInvoiced = salesDetails.AmountTotal.Sub(salesDetails.AmountInvoiced)
    err = model.NewSalesDetailsSearch().SetId(salesDetails.Id).Update(salesDetails)
    if err != nil {