|
@@ -368,11 +368,6 @@ func (rg *RegisterController) Edit(c *gin.Context) {
|
|
|
return
|
|
|
}
|
|
|
originHasPayment := item.HasPayment
|
|
|
- // TODO:确认是否允许修改货币单位,若可修改货币单位则需要相应的处理开票到款
|
|
|
- if req.CurrencyUnit != item.CurrencyUnit {
|
|
|
- resp.Fail("暂不允许修改货币单位", c)
|
|
|
- return
|
|
|
- }
|
|
|
|
|
|
updateCols := []string{
|
|
|
"ContractCode", "RelateContractCode", "CrmContractId", "ContractSource", "CompanyName", "ActualCompanyName",
|
|
@@ -401,12 +396,64 @@ func (rg *RegisterController) Edit(c *gin.Context) {
|
|
|
item.HasPayment = req.HasPayment
|
|
|
item.NewCompany = req.NewCompany
|
|
|
item.ModifyTime = nowTime
|
|
|
+
|
|
|
// 存在代付的直接完成登记, 且不允许进行开票/到款登记
|
|
|
if req.HasPayment == 1 {
|
|
|
item.RegisterStatus = fms.ContractRegisterStatusComplete
|
|
|
updateCols = append(updateCols, "RegisterStatus")
|
|
|
}
|
|
|
|
|
|
+ // 开票到款信息
|
|
|
+ invoiceOB := new(fms.ContractInvoice)
|
|
|
+ invoiceCond := `contract_register_id = ?`
|
|
|
+ invoicePars := make([]interface{}, 0)
|
|
|
+ invoicePars = append(invoicePars, req.ContractRegisterId)
|
|
|
+ invoiceList, e := invoiceOB.List(invoiceCond, invoicePars, "")
|
|
|
+ if e != nil {
|
|
|
+ resp.FailMsg("操作失败", "获取合同开票到款列表失败, Err: "+e.Error(), c)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ invoiceUpdateCols := make([]string, 0)
|
|
|
+
|
|
|
+ // 开票到款操作类型: 0-无; 1-更新; 2-删除;
|
|
|
+ invoiceHandleType := 0
|
|
|
+ if originHasPayment == 0 && req.HasPayment == 1 {
|
|
|
+ // 若从无代付修改为有代付, 则删除无代付期间新增的所有开票到款登记
|
|
|
+ invoiceHandleType = 2
|
|
|
+ } else {
|
|
|
+ // 修改了货币单位后,同步更新汇率及开票到款的换算金额
|
|
|
+ if req.CurrencyUnit != item.CurrencyUnit {
|
|
|
+ rateList, e := fmsService.GetTodayCurrencyRateList()
|
|
|
+ if e != nil {
|
|
|
+ resp.FailMsg("操作失败", "获取货币列表及汇率失败, Err: "+e.Error(), c)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var rate float64
|
|
|
+ for i := range rateList {
|
|
|
+ if rateList[i].Code == req.CurrencyUnit {
|
|
|
+ rate = rateList[i].RMBRate
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if rate < 0 {
|
|
|
+ resp.FailMsg("操作失败", "货币汇率有误", c)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ item.CurrencyUnit = req.CurrencyUnit
|
|
|
+ item.RMBRate = rate
|
|
|
+ updateCols = append(updateCols, "CurrencyUnit", "RMBRate")
|
|
|
+
|
|
|
+ // 调整开票到款换算后的金额, 保留两位小数
|
|
|
+ for i := range invoiceList {
|
|
|
+ invoiceList[i].CurrencyUnit = req.CurrencyUnit
|
|
|
+ a, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", invoiceList[i].OriginAmount/rate), 64)
|
|
|
+ invoiceList[i].Amount = a
|
|
|
+ }
|
|
|
+ invoiceUpdateCols = append(invoiceUpdateCols, "CurrencyUnit", "Amount")
|
|
|
+ invoiceHandleType = 1
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 套餐信息
|
|
|
serviceList, e := fmsService.HandleContractServiceAndDetail(req.ProductId, req.Services, true)
|
|
|
if e != nil {
|
|
@@ -414,21 +461,12 @@ func (rg *RegisterController) Edit(c *gin.Context) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- // 更新合同及套餐
|
|
|
- if e = fms.UpdateContractRegisterAndServices(item, updateCols, serviceList); e != nil {
|
|
|
+ // 更新合同登记、套餐、开票到款
|
|
|
+ if e = fms.UpdateContractRegister(item, updateCols, serviceList, invoiceList, invoiceUpdateCols, invoiceHandleType); e != nil {
|
|
|
resp.FailMsg("操作失败", "更新合同及套餐失败, Err: "+e.Error(), c)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- // 若从无代付修改为有代付, 则删除无代付期间新增的所有开票/到款登记(此情况并不经常出现, 但是可能会存在这种操作)
|
|
|
- if originHasPayment == 0 && req.HasPayment == 1 {
|
|
|
- go func() {
|
|
|
- if e = fms.DeleteContractInvoicesByRegisterId(item.ContractRegisterId); e != nil {
|
|
|
- alarm_msg.SendAlarmMsg("无代付修改为有代付, 删除开票到款记录失败, ErrMsg: "+err.Error(), 3)
|
|
|
- }
|
|
|
- }()
|
|
|
- }
|
|
|
-
|
|
|
// 校验金额-是否修改状态
|
|
|
go fmsService.CheckContractRegisterAmount(item.ContractRegisterId)
|
|
|
|