From a9262d9b1c5b570d077c2dc7d3fdda9058f88ec7 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期二, 25 六月 2024 11:15:07 +0800
Subject: [PATCH] 调拨和库存调整产生的出入库补充对应仓库的业务类型

---
 service/operation.go |   38 +++++++++++++++++++++++++++++++++++---
 1 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/service/operation.go b/service/operation.go
index 298627d..7ec90ce 100644
--- a/service/operation.go
+++ b/service/operation.go
@@ -223,7 +223,7 @@
 }
 
 // FinishOperationOutput 瀹屾垚鍑哄簱鎴栨姤搴�
-func FinishOperationOutput(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount) (err error) {
+func FinishOperationOutput(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount, originOperation *models.Operation) (err error) {
 	var internalInputDetails []*models.OperationDetails //鍐呴儴璋冩嫧浜х敓鐨勫嚭搴撻獙璇佸悗锛岀敓鎴愬叆搴撳崟
 	for k, v := range listDetails {
 		if v.Product.Amount.LessThan(v.Amount) {
@@ -250,7 +250,12 @@
 		}
 	}
 	if len(internalInputDetails) > 0 {
+		opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeIncoming)
+		if err != nil {
+			return err
+		}
 		operation := &models.Operation{
+			OperationTypeId:   opTypeId,
 			Number:            strconv.FormatInt(time.Now().Unix(), 10),
 			Status:            constvar.OperationStatus_Ready,
 			OperationDate:     time.Now().Format("2006-01-02 15:04:05"),
@@ -269,7 +274,7 @@
 }
 
 // FinishOperationInternal 楠岃瘉鍐呴儴璋冩嫧鐢熸垚鍑哄簱鍗�
-func FinishOperationInternal(tx *gorm.DB, listDetails []*models.OperationDetails) (err error) {
+func FinishOperationInternal(tx *gorm.DB, listDetails []*models.OperationDetails, originOperation *models.Operation) (err error) {
 	var outputDetails []*models.OperationDetails
 	for _, v := range listDetails {
 		outputDetails = append(outputDetails, &models.OperationDetails{
@@ -287,7 +292,12 @@
 			SalePrice:        v.SalePrice,
 		})
 		if len(outputDetails) > 0 {
+			opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeOutgoing)
+			if err != nil {
+				return err
+			}
 			operation := &models.Operation{
+				OperationTypeId:   opTypeId,
 				Number:            strconv.FormatInt(time.Now().Unix(), 10),
 				Status:            constvar.OperationStatus_Ready,
 				OperationDate:     time.Now().Format("2006-01-02 15:04:05"),
@@ -309,7 +319,7 @@
 
 // FinishOperationAdjust 瀹屾垚搴撳瓨璋冩暣
 // 楠岃瘉鍚庣敓鎴愬叆搴撳崟鎴栧嚭搴撳崟锛堝簱瀛樺噺灏戠敓鎴愬嚭搴撳崟锛屽簱瀛樺鍔犵敓鎴愬叆搴撳崟锛�
-func FinishOperationAdjust(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount) (err error) {
+func FinishOperationAdjust(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount, originOperation *models.Operation) (err error) {
 	var inputDetails []*models.OperationDetails
 	var outputDetails []*models.OperationDetails
 	for _, v := range listDetails {
@@ -373,7 +383,12 @@
 		//}
 
 		if len(inputDetails) > 0 {
+			opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeIncoming)
+			if err != nil {
+				return err
+			}
 			operation := &models.Operation{
+				OperationTypeId:   opTypeId,
 				Number:            strconv.FormatInt(time.Now().Unix(), 10),
 				Status:            constvar.OperationStatus_Ready,
 				OperationDate:     time.Now().Format("2006-01-02 15:04:05"),
@@ -388,7 +403,12 @@
 			}
 		}
 		if len(outputDetails) > 0 {
+			opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeOutgoing)
+			if err != nil {
+				return err
+			}
 			operation := &models.Operation{
+				OperationTypeId:   opTypeId,
 				Number:            strconv.FormatInt(time.Now().Unix(), 10),
 				Status:            constvar.OperationStatus_Ready,
 				OperationDate:     time.Now().Format("2006-01-02 15:04:05"),
@@ -406,3 +426,15 @@
 	return nil
 
 }
+
+func GetTargetOperationTypeIdByOperation(operation *models.Operation, baseOT constvar.BaseOperationType) (operationTypeId int, err error) {
+	oT, err := models.NewOperationTypeSearch().SetID(uint(operation.OperationTypeId)).First()
+	if err != nil {
+		return 0, err
+	}
+	targetOT, err := models.NewOperationTypeSearch().SetBaseOperationType(baseOT).SetWarehouseId(oT.WarehouseId).First()
+	if err != nil {
+		return 0, err
+	}
+	return targetOT.Id, nil
+}

--
Gitblit v1.8.0