From 093c9ab35998d9f4163aa5fe6d3432d9e1a1a522 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期五, 11 八月 2023 14:20:58 +0800 Subject: [PATCH] 新增、修改服务合同时更改价税合计,应收金额,未开票金额 --- model/serviceContract.go | 1 + service/invoice.go | 1 + service/serviceContract.go | 33 ++++++++++++++++++++------------- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/model/serviceContract.go b/model/serviceContract.go index 93ec9c8..05eed61 100644 --- a/model/serviceContract.go +++ b/model/serviceContract.go @@ -39,6 +39,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"` // 浠风◣鍚堣 Products []*Product `json:"products" gorm:"many2many:service_contract_product;"` gorm.Model `json:"-"` } diff --git a/service/invoice.go b/service/invoice.go index d1500f1..996d184 100644 --- a/service/invoice.go +++ b/service/invoice.go @@ -184,6 +184,7 @@ removedProductIds = append(removedProductIds, product.Id) } amountInvoiced = amountInvoiced.Round(2) + amountNotInvoiced = amountNotInvoiced.Round(2) err = model.WithTransaction(func(db *gorm.DB) error { err = model.NewInvoiceSearch().SetId(invoice.Id).Save(invoice) if err != nil { diff --git a/service/serviceContract.go b/service/serviceContract.go index eb901f2..6da4367 100644 --- a/service/serviceContract.go +++ b/service/serviceContract.go @@ -13,10 +13,15 @@ serviceContract.AmountReceivable = decimal.Zero.Round(2) serviceContract.AmountInvoiced = decimal.Zero.Round(2) serviceContract.AmountReceived = decimal.Zero.Round(2) + serviceContract.AmountUnInvoiced = decimal.Zero.Round(2) + serviceContract.AmountTotal = decimal.Zero.Round(2) for _, product := range serviceContract.Products { - serviceContract.AmountReceivable = serviceContract.AmountReceivable.Add(product.Amount.Mul(product.Price)) + serviceContract.AmountTotal = serviceContract.AmountTotal.Add(product.Amount.Mul(product.Price)) } - serviceContract.AmountReceivable = serviceContract.AmountReceivable.Round(2) + serviceContract.AmountTotal = serviceContract.AmountTotal.Round(2) + serviceContract.AmountReceivable = serviceContract.AmountTotal + serviceContract.AmountUnInvoiced = serviceContract.AmountTotal + err := model.NewServiceContractSearch().Create(serviceContract) if err != nil { return ecode.SContractExist @@ -31,19 +36,21 @@ if err != nil { return ecode.SContractNotExist } - var amountReceivable decimal.Decimal - for _, product := range serviceContract.Products { - amountReceivable = serviceContract.AmountReceivable.Add(product.Amount.Mul(product.Price)) + var totalAmount decimal.Decimal + totalAmount = serviceContract.AmountTotal + newProducts, removedProducts := NewProductsService().PickDiffProducts(serviceContract.Products, old.Products) + for _, product := range newProducts { + totalAmount = totalAmount.Add(product.Amount.Mul(product.Price)) } - if amountReceivable.LessThan(serviceContract.AmountInvoiced) { - return ecode.SContractProductPriceLowerThanInvoiceAmountErr + removedProductIds := make([]uint, 0, len(removedProducts)) + for _, product := range removedProducts { + totalAmount = totalAmount.Sub(product.Amount.Mul(product.Price)) + removedProductIds = append(removedProductIds, product.Id) } - if amountReceivable.LessThan(serviceContract.AmountReceived) { - return ecode.SContractProductPriceLowerThanReceivedAmountErr - } - serviceContract.AmountInvoiced = old.AmountReceived - serviceContract.AmountReceived = old.AmountReceived - serviceContract.AmountReceivable = amountReceivable.Round(2) + serviceContract.AmountTotal = totalAmount.Round(2) + serviceContract.AmountReceivable = serviceContract.AmountTotal.Sub(serviceContract.AmountReceived) + serviceContract.AmountUnInvoiced = serviceContract.AmountTotal.Sub(serviceContract.AmountInvoiced) + err = model.NewServiceContractSearch().SetId(serviceContract.Id).Update(serviceContract) if err != nil { return ecode.SContractSetErr -- Gitblit v1.8.0