From 9a7e0a7da01a9f9625ceaca0c61a59c540c6438f Mon Sep 17 00:00:00 2001 From: wangpengfei <274878379@qq.com> Date: 星期五, 18 八月 2023 17:32:10 +0800 Subject: [PATCH] fix --- service/serviceContract.go | 41 ++++++++++++++++++++++++++++------------- 1 files changed, 28 insertions(+), 13 deletions(-) diff --git a/service/serviceContract.go b/service/serviceContract.go index eb901f2..93b7b3a 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 @@ -70,6 +77,14 @@ return ecode.OK } +func (SContractService) BatchDeleteServiceContract(ids []int) int { + err := model.NewServiceContractSearch().DeleteByIds(ids) + if err != nil { + return ecode.DBErr + } + return ecode.OK +} + func (SContractService) GetServiceContractList(page, pageSize int, queryClass constvar.ServiceContractQueryClass, keywordType constvar.ServiceContractKeywordType, keyword string) ([]*model.ServiceContract, int64, int) { // get contact list contacts, total, err := model.NewServiceContractSearch(). -- Gitblit v1.8.0