From 2387b4051c095af26f158500596d21167955f971 Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期二, 15 八月 2023 17:39:17 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 model/salesReturn.go |   74 +++++++++++++++++++++++++++++-------
 1 files changed, 59 insertions(+), 15 deletions(-)

diff --git a/model/salesReturn.go b/model/salesReturn.go
index 0b36fef..17aa2de 100644
--- a/model/salesReturn.go
+++ b/model/salesReturn.go
@@ -3,7 +3,10 @@
 import (
 	"aps_crm/constvar"
 	"aps_crm/pkg/mysqlx"
+	"fmt"
+	"github.com/shopspring/decimal"
 	"gorm.io/gorm"
+	"gorm.io/gorm/clause"
 )
 
 type (
@@ -17,24 +20,29 @@
 		Repository          string                         `json:"repository" gorm:"column:repository;type:varchar(255);comment:浠撳簱"`
 		MemberId            int                            `json:"memberId" gorm:"column:member_id;type:int;comment:璐熻矗浜篿d"`
 		Member              User                           `json:"Member"  gorm:"foreignKey:MemberId"`
-		ReturnDate          string                         `json:"returnDate" gorm:"column:return_date;type:datetime(3);comment:閫�璐ф棩鏈�"`          //閫�璐ф棩鏈�
-		SalesReturnStatusId int                            `json:"salesReturnStatusId" gorm:"column:sales_return_status;type:int;comment:閫�璐х姸鎬�"` //閫�璐х姸鎬乮d
-		SalesReturnStatus   SalesReturnStatus              `json:"SalesReturnStatus" gorm:"foreignKey:SalesReturnStatusId"`                     //閫�璐х姸鎬�
-		CreatorId           int                            `json:"-" gorm:"column:creator_id;type:int;comment:鍒涘缓浜篿d"`                           //鍒涘缓浜篒D
-		Creator             User                           `json:"-"  gorm:"foreignKey:CreatorId"`                                              //鍒涘缓浜轰俊鎭�
-		Reason              string                         `json:"reason" gorm:"column:reason;type:varchar(255);comment:閫�璐у師鍥�"`                  //閫�璐у師鍥�
-		Products            []*Product                     `json:"products" gorm:"many2many:salesReturn_product;"`                              //閫�璐т骇鍝�
+		ReturnDate          string                         `json:"returnDate" gorm:"column:return_date;type:datetime(3);comment:閫�璐ф棩鏈�"`                     //閫�璐ф棩鏈�
+		SalesReturnStatusId int                            `json:"salesReturnStatusId" gorm:"column:sales_return_status;type:int;comment:閫�璐х姸鎬�"`            //閫�璐х姸鎬乮d
+		SalesReturnStatus   SalesReturnStatus              `json:"SalesReturnStatus" gorm:"foreignKey:SalesReturnStatusId"`                                //閫�璐х姸鎬�
+		CreatorId           int                            `json:"-" gorm:"column:creator_id;type:int;comment:鍒涘缓浜篿d"`                                      //鍒涘缓浜篒D
+		Creator             User                           `json:"-"  gorm:"foreignKey:CreatorId"`                                                         //鍒涘缓浜轰俊鎭�
+		Reason              string                         `json:"reason" gorm:"column:reason;type:varchar(255);comment:閫�璐у師鍥�"`                             //閫�璐у師鍥�
+		Products            []*Product                     `json:"products" gorm:"many2many:salesReturn_product;"`                                         //閫�璐т骇鍝�
+		AmountShouldRefund  decimal.Decimal                `gorm:"column:amount_should_refund;type:decimal(12,2);comment:搴旈��娆鹃噾棰�" json:"amountShouldRefund"` // 搴旈��娆鹃噾棰�
+		AmountHasRefund     decimal.Decimal                `gorm:"column:amount_has_refund;type:decimal(12,2);comment:宸查��娆鹃噾棰�" json:"amountHasRefund"`       // 宸查��娆鹃噾棰�
+
 		CrmModel
 	}
 
 	SalesReturnSearch struct {
 		SalesReturn
 
-		Orm      *gorm.DB
-		Keyword  string
-		OrderBy  string
-		PageNum  int
-		PageSize int
+		Orm         *gorm.DB
+		KeywordType constvar.SalesReturnKeywordType
+		Keyword     string
+		OrderBy     string
+		PageNum     int
+		PageSize    int
+		Preload     bool
 	}
 )
 
@@ -49,11 +57,37 @@
 
 func (slf *SalesReturnSearch) build() *gorm.DB {
 	var db = slf.Orm.Model(&SalesReturn{})
-	if slf.Keyword != "" {
-		db = db.Where("name LIKE ?", "%"+slf.Keyword+"%")
-	}
 	if slf.Id != 0 {
 		db = db.Where("id = ?", slf.Id)
+	}
+
+	if slf.Preload {
+		db = db.Preload("Client").
+			Preload("Member").
+			Preload("SalesReturnStatus").
+			Preload("Products")
+	}
+
+	if slf.KeywordType != "" {
+		switch slf.KeywordType {
+		case constvar.SalesReturnKeywordReturnNumber:
+			db = db.Where("number like ?", fmt.Sprintf("%%%s%%", slf.Keyword))
+		case constvar.SalesReturnKeywordClientName:
+			db = db.Joins("Client", clause.LeftJoin).Where("Client.name like ?", fmt.Sprintf("%%%s%%", slf.Keyword))
+		case constvar.SalesReturnKeywordReturnDate:
+			db = db.Where("return_date like ?", fmt.Sprintf("%%%s%%", slf.Keyword))
+		case constvar.SalesReturnKeywordStatus:
+			db = db.Joins("SalesReturnStatus").Where("SalesReturnStatus name like ?", fmt.Sprintf("%%%s%%", slf.Keyword))
+		case constvar.SalesReturnKeywordRepository:
+			db = db.Where("repository like ?", fmt.Sprintf("%%%s%%", slf.Keyword))
+		case constvar.SalesReturnKeywordAmountShouldRefund:
+			db = db.Where("amount_should_refund = ?", slf.Keyword)
+		case constvar.SalesReturnKeywordPrincipal:
+			db = db.Joins("left join user on user.id = sales_refund.member_id").Where("user.username like ?", fmt.Sprintf("%%%s%%", slf.Keyword))
+		case constvar.SalesReturnKeywordAmountHasRefund:
+			db = db.Where("amount_has_refund = ?", slf.Keyword)
+
+		}
 	}
 
 	return db
@@ -106,6 +140,11 @@
 	return slf
 }
 
+func (slf *SalesReturnSearch) SetKeywordType(keywordType constvar.SalesReturnKeywordType) *SalesReturnSearch {
+	slf.KeywordType = keywordType
+	return slf
+}
+
 func (slf *SalesReturnSearch) SetPage(page, size int) *SalesReturnSearch {
 	slf.PageNum, slf.PageSize = page, size
 	return slf
@@ -115,3 +154,8 @@
 	slf.OrderBy = order
 	return slf
 }
+
+func (slf *SalesReturnSearch) SetPreload(preload bool) *SalesReturnSearch {
+	slf.Preload = preload
+	return slf
+}

--
Gitblit v1.8.0