From 886b1ae4bdaac1fc9a2eb98b91dc333f14f70c50 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期三, 09 八月 2023 17:41:42 +0800
Subject: [PATCH] 新增和编辑服务合同时更新应收款金额,新增服务合同发票时更新已开票金额

---
 service/invoice.go |   51 +++++++++++++++++++++++++++++----------------------
 1 files changed, 29 insertions(+), 22 deletions(-)

diff --git a/service/invoice.go b/service/invoice.go
index 9bd1b91..c70450d 100644
--- a/service/invoice.go
+++ b/service/invoice.go
@@ -1,9 +1,11 @@
 package service
 
 import (
+	"aps_crm/constvar"
 	"aps_crm/model"
 	"aps_crm/model/request"
 	"aps_crm/pkg/ecode"
+	"github.com/shopspring/decimal"
 	"gorm.io/gorm"
 )
 
@@ -15,30 +17,35 @@
 
 func (InvoiceService) AddInvoice(invoice *model.Invoice) int {
 
-	err := model.WithTransaction(func(db *gorm.DB) error {
-		err := model.NewInvoiceSearch().Create(invoice)
+	if invoice.SourceType == constvar.InvoiceSourceTypeServiceContract {
+		serviceContract, err := model.NewServiceContractSearch().SetId(invoice.SourceId).First()
 		if err != nil {
-			return err
+			return ecode.DBErr
 		}
-		//if invoice.SourceType == constvar.InvoiceSourceTypeServiceContract {
-		//	contract,err := model.NewServiceContractSearch().SetId(invoice.SourceId).First()
-		//	if err != nil {
-		//		return err
-		//	}
-		//	AmountInvoiced := contract.AmountReceived.Add()
-		//	err := model.NewServiceContractSearch().SetId(invoice.SourceId).UpdateByMap(map[string]interface{}{
-		//		"amount_received" :
-		//	})
-		//	if err != nil {
-		//		return err
-		//	}
-		//}
-
-		return nil
-	})
-
-	if err != nil {
-		return ecode.DBErr
+		var amountInvoiced decimal.Decimal
+		for _, product := range invoice.Products {
+			amountInvoiced = serviceContract.AmountInvoiced.Add(product.Amount.Mul(product.Price))
+		}
+		amountInvoiced = amountInvoiced.Round(2)
+		if amountInvoiced.GreaterThan(serviceContract.AmountReceivable) {
+			return ecode.SContractInvoiceProductPriceGreaterThanReceivableAmountErr
+		}
+		err = model.WithTransaction(func(db *gorm.DB) error {
+			err = model.NewInvoiceSearch().Create(invoice)
+			if err != nil {
+				return err
+			}
+			err = model.NewServiceContractSearch().SetId(invoice.SourceId).UpdateByMap(map[string]interface{}{
+				"amount_invoiced": amountInvoiced,
+			})
+			if err != nil {
+				return err
+			}
+			return nil
+		})
+		if err != nil {
+			return ecode.DBErr
+		}
 	}
 
 	return ecode.OK

--
Gitblit v1.8.0