Browse Source

Merge branch 'fms_2.5' into debug

# Conflicts:
#	models/fms/contract_invoice.go
ziwen 2 years ago
parent
commit
48b498a7da

+ 45 - 19
controller/contract/pre_register.go

@@ -145,6 +145,10 @@ func (rg *PreRegisterController) Add(c *gin.Context) {
 		}
 	}
 
+	var currencyUnit string
+	if len(req.List) > 0{
+		currencyUnit = req.List[0].CurrencyUnit
+	}
 	// 获取销售分组信息
 	sellerList, e := crmService.GetSellerDepartmentListWithGroupAndTeam()
 	if e != nil {
@@ -184,6 +188,7 @@ func (rg *PreRegisterController) Add(c *gin.Context) {
 	ob.StartDate = startDate
 	ob.EndDate = endDate
 	ob.Set()
+	ob.CurrencyUnit = currencyUnit
 	if req.RegisterType == fms.ContractInvoiceTypePreMake {
 		//sellerItem := sellerMap[r.SellerId]
 		//if sellerItem == nil {
@@ -284,10 +289,8 @@ func (rg *PreRegisterController) Add(c *gin.Context) {
 			ContractRegisterId: ob.ContractRegisterId,
 			CompanyName:        req.CompanyName,
 			InvoiceType:        req.RegisterType,
-			InvoiceDate:        registerDate,
 			AdminId:            int(adminInfo.AdminId),
 			AdminName:          adminInfo.AdminName,
-			Remark:             r.Remark,
 			ServiceProductId:   r.ServiceProductId,
 			IsPrePay:           1,
 			StartDate:          startDate,
@@ -303,7 +306,7 @@ func (rg *PreRegisterController) Add(c *gin.Context) {
 			pp.OriginAmount = r.Amount
 			a, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", pp.OriginAmount/rate), 64)
 			pp.Amount = a
-
+			pp.Remark = r.Remark
 			sellerItem := sellerMap[r.SellerId]
 			if sellerItem == nil {
 				resp.Fail("销售信息异常", c)
@@ -323,6 +326,7 @@ func (rg *PreRegisterController) Add(c *gin.Context) {
 			pp.ArriveOriginAmount = r.Amount
 			a, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", pp.ArriveOriginAmount/rate), 64)
 			pp.ArriveAmount = a
+			pp.ArriveRemark = r.Remark
 		}
 
 		// 新增开票到款记录
@@ -330,6 +334,12 @@ func (rg *PreRegisterController) Add(c *gin.Context) {
 			resp.FailMsg("操作失败", "新增预登记失败, Err: "+e.Error(), c)
 			return
 		}
+
+		v.PreRegisterId = pp.PreRegisterId
+		if e = v.Update([]string{"PreRegisterId"}); e != nil {
+			fmt.Println("更新开票登记失败, Err: " + e.Error())
+			return
+		}
 	}
 
 	// 开票到款汇总
@@ -374,6 +384,12 @@ func (rg *PreRegisterController) Edit(c *gin.Context) {
 		}
 	}
 
+	var currencyUnit string
+	if len(req.List) > 0{
+		currencyUnit = req.List[0].CurrencyUnit
+	}
+
+
 	// 获取销售分组信息
 	sellerList, e := crmService.GetSellerDepartmentListWithGroupAndTeam()
 	if e != nil {
@@ -413,6 +429,7 @@ func (rg *PreRegisterController) Edit(c *gin.Context) {
 	ob.StartDate = startDate
 	ob.EndDate = endDate
 	ob.ModifyTime = time.Now().Local()
+	ob.CurrencyUnit = currencyUnit
 	if req.RegisterType == fms.ContractInvoiceTypePreMake {
 		//sellerItem := sellerMap[r.SellerId]
 		//if sellerItem == nil {
@@ -439,11 +456,10 @@ func (rg *PreRegisterController) Edit(c *gin.Context) {
 	}
 	updateCols := []string{
 		"ProductIds", "CompanyName", "SellerId", "SellerName", "StartDate", "EndDate",
-		"RaiSellerId", "RaiSellerName", "ModifyTime",
+		"RaiSellerId", "RaiSellerName", "ModifyTime","CurrencyUnit",
 	}
 
 	invoiceList := make([]*fms.ContractInvoice, 0)
-	ppList := make([]*fms.ContractPreRegister, 0)
 	for _, r := range req.List {
 		// 货币及汇率
 		rateList, e := fmsService.GetTodayCurrencyRateList()
@@ -504,17 +520,14 @@ func (rg *PreRegisterController) Edit(c *gin.Context) {
 			v.SellerTeamName = sellerItem.TeamName
 		}
 
-		invoiceList = append(invoiceList, v)
-
 		//预登记列表
 		pp := &fms.ContractPreRegister{
-			PreRegisterId:      req.PreRegisterId,
+			PreRegisterId:      r.PreRegisterId,
 			ContractRegisterId: ob.ContractRegisterId,
 			CompanyName:        req.CompanyName,
 			InvoiceType:        req.RegisterType,
 			AdminId:            int(adminInfo.AdminId),
 			AdminName:          adminInfo.AdminName,
-			Remark:             r.Remark,
 			ServiceProductId:   r.ServiceProductId,
 			IsPrePay:           1,
 			StartDate:          startDate,
@@ -526,6 +539,7 @@ func (rg *PreRegisterController) Edit(c *gin.Context) {
 		ppUpdateCols := make([]string, 0)
 		if pp.InvoiceType == fms.ContractInvoiceTypePreMake {
 			//开票走开票字段
+			pp.Remark = r.Remark
 			pp.InvoiceDate = registerDate
 			pp.OriginAmount = r.Amount
 			a, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", pp.OriginAmount/rate), 64)
@@ -547,27 +561,38 @@ func (rg *PreRegisterController) Edit(c *gin.Context) {
 				"SellerName", "SellerGroupId", "SellerGroupName", "SellerTeamId", "SellerTeamName")
 		} else {
 			//到款
+			pp.ArriveRemark = r.Remark
 			pp.ArriveDate = registerDate
 			pp.ArriveOriginAmount = r.Amount
 			a, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", pp.ArriveOriginAmount/rate), 64)
 			pp.ArriveAmount = a
 			ppUpdateCols = append(ppUpdateCols, "CurrencyUnit", "ArriveDate", "ArriveAmount", "ArriveOriginAmount")
 		}
-		ppList = append(ppList, pp)
-		ppUpdateCols = append(ppUpdateCols,
-			 "CurrencyUnit", "CompanyName", "AdminId", "AdminName", "Remark",
-			"ServiceProductId", "CurrencyUnit", "StartDate", "EndDate", "ModifyTime")
-		if e = pp.Update(ppUpdateCols); e != nil {
-			resp.FailMsg("操作失败", "更新预登记记录失败, Err: "+e.Error(), c)
-			return
+
+		if pp.PreRegisterId == 0 {
+			if e = pp.Create(); e != nil {
+				resp.FailMsg("操作失败", "新增预登记失败, Err: "+e.Error(), c)
+				return
+			}
+			v.PreRegisterId = pp.PreRegisterId
+		} else {
+			ppUpdateCols = append(ppUpdateCols,
+				"CurrencyUnit", "CompanyName", "Remark", "ArriveRemark","InvoiceTime","ArriveTime",
+				"ServiceProductId", "CurrencyUnit", "StartDate", "EndDate", "ModifyTime")
+			if e = pp.Update(ppUpdateCols); e != nil {
+				resp.FailMsg("操作失败", "更新预登记记录失败, Err: "+e.Error(), c)
+				return
+			}
 		}
+
+		invoiceList = append(invoiceList, v)
 	}
 	invoiceUpdateCols := []string{
-		"CurrencyUnit", "Amount", "InvoiceDate", "AdminId", "AdminName", "Remark",
+		"CurrencyUnit", "OriginAmount", "Amount", "InvoiceDate", "AdminId", "AdminName", "Remark",
 		"ServiceProductId", "StartDate", "EndDate", "ModifyTime",
 	}
 	// 更新合同登记、套餐、开票到款
-	if e = fms.UpdateContractPreRegister(ob, updateCols, serviceList, invoiceList, invoiceUpdateCols); e != nil {
+	if e = fms.UpdateContractPreRegister(ob, updateCols, serviceList, invoiceList, invoiceUpdateCols, req.DelInvoiceIds, req.DelPreRegisterIds); e != nil {
 		resp.FailMsg("操作失败", "更新合同及套餐失败, Err: "+e.Error(), c)
 		return
 	}
@@ -1006,7 +1031,6 @@ func (rg *PreRegisterController) Save(c *gin.Context) {
 			InvoiceDate:        registerDate,
 			AdminId:            int(adminInfo.AdminId),
 			AdminName:          adminInfo.AdminName,
-			Remark:             r.Remark,
 			ServiceProductId:   r.ServiceProductId,
 			IsPrePay:           1,
 			StartDate:          startDate,
@@ -1017,6 +1041,7 @@ func (rg *PreRegisterController) Save(c *gin.Context) {
 		pp.CurrencyUnit = r.CurrencyUnit
 		if pp.InvoiceType == fms.ContractInvoiceTypePreMake {
 			//开票走开票字段
+			pp.Remark = r.Remark
 			pp.InvoiceId = v.ContractInvoiceId
 			pp.InvoiceDate = registerDate
 			pp.OriginAmount = r.Amount
@@ -1039,6 +1064,7 @@ func (rg *PreRegisterController) Save(c *gin.Context) {
 				"SellerName", "SellerGroupId", "SellerGroupName", "SellerTeamId", "SellerTeamName")
 		} else {
 			//到款
+			pp.ArriveRemark = r.Remark
 			pp.ArriveDate = registerDate
 			pp.ArriveOriginAmount = r.Amount
 			a, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", pp.ArriveOriginAmount/rate), 64)

+ 4 - 14
controller/contract/register.go

@@ -498,20 +498,10 @@ func (rg *RegisterController) Add(c *gin.Context) {
 			return
 		}
 
-		for i := 0; i < len(serviceAmountList); i++ {
-			// 合同服务
-			t := serviceAmountList[i]
-			tmp := &fms.ContractServiceAmount{
-				ContractRegisterId: ob.ContractRegisterId,
-				ProductId:          t.ProductId,
-				ServiceAmount:      t.ServiceAmount,
-				CurrencyUnit:       t.CurrencyUnit,
-			}
-
-			if e := tmp.Create(); e != nil {
-				resp.FailData("日期格式有误", "Err:"+e.Error(), c)
-				return
-			}
+		//更新合同套餐等内容
+		if e = fms.UpdateSupplementContractPreRegister(ob, serviceAmountList, serviceList); e != nil {
+			resp.FailMsg("操作失败", "更新合同及套餐失败, Err: "+e.Error(), c)
+			return
 		}
 
 		// 校验金额-是否修改状态

+ 4 - 3
models/fms/contract_invoice.go

@@ -33,6 +33,7 @@ type ContractInvoice struct {
 	IsPrePay           int       `gorm:"column:is_pre_pay" json:"is_pre_pay" description:"是否预付款: 0-不是; 1-是"`
 	StartDate          time.Time `gorm:"column:start_date" json:"start_date" description:"约定开始时间"`
 	EndDate            time.Time `gorm:"column:end_date" json:"end_date" description:"约定结束时间"`
+	PreRegisterId      int       `gorm:"column:pre_register_id" json:"pre_register_id" description:"预登记ID"`
 	base.TimeBase
 }
 
@@ -90,7 +91,6 @@ func (c *ContractInvoice) Delete() (err error) {
 	return
 }
 
-
 func (c *ContractInvoice) Sum(field, condition string, pars []interface{}) (total float64, err error) {
 	totalList := make([]float64, 0)
 	err = global.DEFAULT_MYSQL.Model(c).
@@ -293,7 +293,7 @@ type InvoicePaymentCensusListReq struct {
 	HasInvoice   string `json:"has_invoice" form:"has_invoice" description:"是否已开票: 0-否; 1-是; 空-全部"`
 	HasPayment   string `json:"has_payment" form:"has_payment" description:"是否已到款: 0-否; 1-是; 空-全部"`
 	IsExport     int    `json:"is_export" form:"is_export" description:"是否导出: 0-否; 1-是"`
-	ListParam     int    `json:"list_param" form:"list_param" description:"套餐类型: 0-全部; 1-ficc; 2-权益"`
+	ListParam    int    `json:"list_param" form:"list_param" description:"套餐类型: 0-全部; 1-ficc; 2-权益"`
 	SortParam    string `json:"sort_param" form:"sort_param" description:"排序字段参数,用来排序的字段, 枚举值:'invoice_time':开票日 、 'payment_date':到款日"`
 	SortType     string `json:"sort_type" form:"sort_type" description:"如何排序,是正序还是倒序,枚举值:asc 正序,desc 倒叙"`
 	TimeType     int    `json:"time_type" form:"time_type" description:"时间类型: 1-开票时间; 2-到款时间;3-开票时间&到款时间"`
@@ -540,9 +540,9 @@ type ContractInvoiceDetailItem struct {
 	StartDate          string  `gorm:"column:start_date" json:"start_date" description:"约定开始时间"`
 	EndDate            string  `gorm:"column:end_date" json:"end_date" description:"约定结束时间"`
 	CreateTime         string  `gorm:"column:create_time" json:"create_time" description:"创建时间"`
+	PreRegisterId      int     `gorm:"column:pre_register_id" json:"pre_register_id" description:"预登记ID"`
 }
 
-
 // GetContractInvoiceDetailItemList 预登记列表详情用-获取开票到款列表
 func GetContractInvoiceDetailItemList(condition string, pars []interface{}) (itemList []*ContractInvoiceDetailItem, err error) {
 	list := make([]*ContractInvoice, 0)
@@ -579,6 +579,7 @@ func formatContractInvoice2DetailItemList(list []*ContractInvoice) (itemList []*
 			StartDate:          list[i].StartDate.Format(utils.FormatDate),
 			EndDate:            list[i].StartDate.Format(utils.FormatDate),
 			CreateTime:         utils.TimeTransferString(utils.FormatDateTime, list[i].CreateTime),
+			PreRegisterId:      list[i].PreRegisterId,
 		})
 	}
 	return

+ 6 - 3
models/fms/contract_pre_payment.go

@@ -151,19 +151,22 @@ func (c *ContractPrePayment) Delete() (err error) {
 
 // PrepayEditReq 编辑到款预登记请求体
 type PreRegisterEditReq struct {
-	PreRegisterId      int     `json:"pre_register_id" description:"预登记ID"`
+	PreRegisterId      int    `json:"pre_register_id" description:"预登记ID"`
 	ContractRegisterId int    `json:"contract_register_id" binding:"required,gte=1" description:"登记ID"`
 	CompanyName        string `json:"company_name" binding:"required" description:"客户名称"`
-	StartDate          string `json:"start_date" binding:"required" description:"约定开始日期"`
-	EndDate            string `json:"end_date" binding:"required" description:"约定结束日期"`
+	StartDate          string `json:"start_date" description:"约定开始日期"`
+	EndDate            string `json:"end_date" description:"约定结束日期"`
 	RegisterType       int    `json:"register_type" description:"预登记类型 3-开票预登记 4-到款预登记"`
 	ProductIds         string `gorm:"column:product_ids" json:"product_ids" description:"产品ID:1-FICC; 2-权益, 如果两者都有,则用英文逗号拼接"`
 	SellerIds          string `json:"seller_ids" description:"CRM系统-销售ID"`
+	DelInvoiceIds      []int  `json:"del_invoice_ids" description:"删除的开票到款记录ids"`
+	DelPreRegisterIds  []int  `json:"del_pre_register_ids" description:"删除的预登记记录ids"`
 	List               []*PreRegisterEditReqItem
 	Services           []ContractServiceAddReq `json:"services" description:"服务套餐内容"`
 }
 
 type PreRegisterEditReqItem struct {
+	PreRegisterId    int     `json:"pre_register_id" description:"预登记ID"`
 	InvoiceId        int     `json:"contract_invoice_id" description:"开票ID"`
 	ArriveId         int     `json:"arrive_id" description:"到款ID"`
 	Amount           float64 `json:"amount" binding:"required" description:"到款金额"`

+ 3 - 1
models/fms/contract_pre_register.go

@@ -31,6 +31,7 @@ type ContractPreRegister struct {
 	AdminId            int       `gorm:"column:admin_id" json:"admin_id" description:"操作人ID"`
 	AdminName          string    `gorm:"column:admin_name" json:"admin_name" description:"操作人姓名"`
 	Remark             string    `gorm:"column:remark" json:"remark" description:"备注信息"`
+	ArriveRemark       string    `gorm:"column:arrive_remark" json:"arrive_remark" description:"到款备注信息"`
 	ServiceProductId   int       `gorm:"column:service_product_id" json:"service_product_id" description:"套餐类型:1ficc套餐,2权益套餐"`
 	IsPrePay           int       `gorm:"column:is_pre_pay" json:"is_pre_pay" description:"是否预付款: 0-不是; 1-是"`
 	StartDate          time.Time `gorm:"column:start_date" json:"start_date" description:"约定开始时间"`
@@ -90,6 +91,7 @@ func formatContractPreRegister2Item(item *ContractPreRegister) (formatItem *Cont
 	formatItem.SellerId = item.SellerId
 	formatItem.SellerName = item.SellerName
 	formatItem.Remark = item.Remark
+	formatItem.ArriveRemark = item.ArriveRemark
 	formatItem.IsPrePay = item.IsPrePay
 	formatItem.ServiceProductId = item.ServiceProductId
 	formatItem.AdminId = item.AdminId
@@ -203,5 +205,5 @@ type ContractPreRegisterDetail struct {
 	*ContractRegisterItem
 	List               []*ContractInvoiceDetailItem `json:"list" description:"开票到款列表"`
 	Services           []*ContractServiceAndDetail  `json:"services" description:"套餐列表"`
-	ServiceTemplateIds []int                       `json:"serviceTemplateIds" description:"小套餐列表"`
+	ServiceTemplateIds []int                        `json:"serviceTemplateIds" description:"小套餐列表"`
 }

+ 137 - 4
models/fms/contract_register.go

@@ -1,6 +1,7 @@
 package fms
 
 import (
+	"hongze/fms_api/controller/resp"
 	"hongze/fms_api/global"
 	"hongze/fms_api/models/base"
 	"hongze/fms_api/utils"
@@ -558,7 +559,7 @@ type CheckContractNameResp struct {
 
 // UpdateContractPreRegister 更新合同预登记
 func UpdateContractPreRegister(item *ContractRegister, updateCols []string, serviceDetail []*ContractServiceAndDetail,
-	invoiceList []*ContractInvoice, invoiceUpdateCols []string) (err error) {
+	invoiceList []*ContractInvoice, invoiceUpdateCols []string, delInvoiceIds, delPreRegisterIds []int) (err error) {
 	tx := global.DEFAULT_MYSQL.Begin()
 	defer func() {
 		if err != nil {
@@ -610,9 +611,39 @@ func UpdateContractPreRegister(item *ContractRegister, updateCols []string, serv
 	}
 
 	for i := range invoiceList {
-		if e := tx.Model(invoiceList[i]).Select(invoiceUpdateCols).Updates(invoiceList[i]).Error; e != nil {
-			err = e
-			return
+		if invoiceList[i].ContractInvoiceId == 0{
+			if e := invoiceList[i].Create(); e != nil {
+				err = e
+				return
+			}
+		} else {
+			if e := tx.Model(invoiceList[i]).Select(invoiceUpdateCols).Updates(invoiceList[i]).Error; e != nil {
+				err = e
+				return
+			}
+		}
+	}
+
+	//更新另一类型的invoice表数据
+	invoiceItem := ContractInvoice{
+		ContractRegisterId: item.ContractRegisterId,
+		StartDate: item.StartDate,
+		EndDate: item.EndDate,
+		CurrencyUnit: item.CurrencyUnit,
+	}
+	tx.Model(&invoiceItem).Select([]string{"StartDate","EndDate","CurrencyUnit"}).Where("ContractRegisterId",item.ContractRegisterId).Updates(invoiceItem)
+
+	//删除
+	if len(delInvoiceIds) > 0 {
+		for _, id := range delInvoiceIds {
+			ob := ContractInvoice{ContractInvoiceId: id}
+			tx.Model(&ob).Delete(ob)
+		}
+	}
+	if len(delPreRegisterIds) > 0 {
+		for _, id := range delPreRegisterIds {
+			ob := ContractPreRegister{PreRegisterId: id}
+			tx.Model(&ob).Delete(ob)
 		}
 	}
 
@@ -696,3 +727,105 @@ func UpdateContractRegisterPre(item *ContractRegister, updateCols []string, serv
 	}
 	return
 }
+
+// UpdateSupplementContractPreRegister 更新补录合同预登记
+func UpdateSupplementContractPreRegister(item *ContractRegister, serviceAmountList []*ContractServiceAmount, serviceDetail []*ContractServiceAndDetail) (err error) {
+	tx := global.DEFAULT_MYSQL.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	for i := 0; i < len(serviceAmountList); i++ {
+		// 合同服务
+		t := serviceAmountList[i]
+		tmp := &ContractServiceAmount{
+			ContractRegisterId: item.ContractRegisterId,
+			ProductId:          t.ProductId,
+			ServiceAmount:      t.ServiceAmount,
+			CurrencyUnit:       t.CurrencyUnit,
+		}
+
+		if e := tmp.Create(); e != nil {
+			resp.FailData("日期格式有误", "Err:"+e.Error(), c)
+			return
+		}
+	}
+
+	// 删除原服务及详情信息
+	sql := `DELETE FROM contract_service WHERE contract_register_id = ?`
+	tx.Exec(sql, item.ContractRegisterId)
+
+	// 新增合同服务
+	//nowTime := time.Now().Local()
+	for i := 0; i < len(serviceDetail); i++ {
+		// 合同服务
+		t := serviceDetail[i]
+		contractService := &ContractService{
+			ContractRegisterId: item.ContractRegisterId,
+			ProductId:          t.ProductId,
+			ServiceTemplateId:  t.ServiceTemplateId,
+			Title:              t.Title,
+			Value:              t.Value,
+			TableValue:         t.TableValue,
+			HasDetail:          t.HasDetail,
+			ChartPermissionId:  t.ChartPermissionId,
+			ChartPermissionIds: t.ChartPermissionIds,
+		}
+		contractService.Set()
+		tx.Create(contractService)
+
+		//// 合同服务详情
+		//for j := 0; j < len(t.Detail); j++ {
+		//	contractServiceDetail := t.Detail[j]
+		//	contractServiceDetail.ContractServiceId = contractService.ContractServiceId
+		//	contractServiceDetail.ContractRegisterId = item.ContractRegisterId
+		//	contractServiceDetail.ServiceTemplateId = contractService.ServiceTemplateId
+		//	contractServiceDetail.CreateTime = nowTime
+		//	tx.Create(contractServiceDetail)
+		//	t.Detail[j] = contractServiceDetail
+		//}
+	}
+
+	for i := range invoiceList {
+		if invoiceList[i].ContractInvoiceId == 0{
+			if e := invoiceList[i].Create(); e != nil {
+				err = e
+				return
+			}
+		} else {
+			if e := tx.Model(invoiceList[i]).Select(invoiceUpdateCols).Updates(invoiceList[i]).Error; e != nil {
+				err = e
+				return
+			}
+		}
+	}
+
+	//更新另一类型的invoice表数据
+	invoiceItem := ContractInvoice{
+		ContractRegisterId: item.ContractRegisterId,
+		StartDate: item.StartDate,
+		EndDate: item.EndDate,
+		CurrencyUnit: item.CurrencyUnit,
+	}
+	tx.Model(&invoiceItem).Select([]string{"StartDate","EndDate","CurrencyUnit"}).Where("ContractRegisterId",item.ContractRegisterId).Updates(invoiceItem)
+
+	//删除
+	if len(delInvoiceIds) > 0 {
+		for _, id := range delInvoiceIds {
+			ob := ContractInvoice{ContractInvoiceId: id}
+			tx.Model(&ob).Delete(ob)
+		}
+	}
+	if len(delPreRegisterIds) > 0 {
+		for _, id := range delPreRegisterIds {
+			ob := ContractPreRegister{PreRegisterId: id}
+			tx.Model(&ob).Delete(ob)
+		}
+	}
+
+	return
+}