From 2def11ba83760b5be1361f10c3756cc0e9cfd165 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期一, 14 八月 2023 09:32:13 +0800 Subject: [PATCH] merge --- service/serviceContract.go | 33 ++++++++++++++++++++------------- 1 files changed, 20 insertions(+), 13 deletions(-) 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