From 7789d7daaa040beefd961b21ba646cbafb563c79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=96=8C?= <1324361213@qq.com> Date: Thu, 28 Aug 2025 10:35:38 +0800 Subject: [PATCH] 0 --- GZ_LTHPilot_ORDER.csproj | 3 +- T_IV_SALESIC/ServicePlugIn/Submit.cs | 102 +++++++++++++++++++-------- 2 files changed, 73 insertions(+), 32 deletions(-) diff --git a/GZ_LTHPilot_ORDER.csproj b/GZ_LTHPilot_ORDER.csproj index 8475a6b..b05ecd2 100644 --- a/GZ_LTHPilot_ORDER.csproj +++ b/GZ_LTHPilot_ORDER.csproj @@ -446,6 +446,7 @@ - copy $(TargetPath) "D:\kingdee\K3Cloud\WebSite\Bin\$(TargetFileName)" + + \ No newline at end of file diff --git a/T_IV_SALESIC/ServicePlugIn/Submit.cs b/T_IV_SALESIC/ServicePlugIn/Submit.cs index b9a7bde..765a471 100644 --- a/T_IV_SALESIC/ServicePlugIn/Submit.cs +++ b/T_IV_SALESIC/ServicePlugIn/Submit.cs @@ -28,13 +28,12 @@ namespace GZ_LTHPilot_ORDER.T_IV_SALESIC.ServicePlugIn public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) { base.BeforeExecuteOperationTransaction(e); - // 销售订单服务 - var saleOrderService = new SaleOrderService(this.Context); + foreach (var bill in e.SelectedRows) { var org = bill["SALEORGID"] as DynamicObject; - var orgId = org["Id"].ToString(); // 销售订单 + var orgId = org["Id"].ToString(); // 销售组织 var entryList = bill["SALESICENTRY"] as DynamicObjectCollection; // 根据合同号分组 var grouped = entryList.GroupBy(n => n["F_contractno"].ToString()); @@ -42,51 +41,92 @@ namespace GZ_LTHPilot_ORDER.T_IV_SALESIC.ServicePlugIn { // 纸质合同号 var contractNo = group.Key; - // 发票单体价税合计原币 - var SumALLAMOUNTFOR = group.Sum(n => Convert.ToDecimal(n["ALLAMOUNTFOR"])); + // 销售订单服务 + var saleOrderService = new SaleOrderService(this.Context); // TODO 根据组织和纸质合同号查找销售订单 var saleOrderList = saleOrderService.GetSaleOrderByOrgIdAndContractNo(orgId, contractNo); if (saleOrderList.Count == 0) { continue; } - var saleOrderNoList = saleOrderList.Select(n => n["FBILLNO"].ToString()).ToList(); - var saleOrderNoString = string.Join(",\n\r", saleOrderNoList); + var saleOrder = saleOrderList[0]; - // 销售订单价税合计(原币) - var saleOrderAmount = saleOrderService.GetSaleOrderAmount(orgId, contractNo); - // 销售订单累计开票金额(原币) - var saleOrderINVOICEAMOUNT = Convert.ToDecimal(saleOrder["F_INVOICEAMOUNT"]); - // 销售订单退货金额(原币) - var saleOrderReturnAmountK3Cloud = saleOrderService.GetSaleOrderRetrunAmount(orgId, contractNo); - var saleOrderReturnAmountK3 = saleOrderService.GetK3SaleOrderRetrunAmount(orgId, contractNo); - // 销售订单退货金额(原币) - var saleOrderReturnAmount = saleOrderReturnAmountK3 + saleOrderReturnAmountK3Cloud; - // 校验销售订单累计开票金额+本次开票金额不能大于销售订单价税合计 - if (saleOrderAmount - saleOrderReturnAmount < saleOrderINVOICEAMOUNT + SumALLAMOUNTFOR) + // 源纸质合同号 + var srcContractNo = saleOrder["F_SOURPAPERCONTRACT"].ToString(); + // 校验源单是否超额 + var srcVerifResult = ExcessVerification(orgId, srcContractNo, 0); + if (srcVerifResult != null) { //有错误信息 e.Cancel = true; IOperationResult operationResult = new OperationResult(); - operationResult.OperateResult.Add(new OperateResult() - { - PKValue = "1", - Name = "检查开票金额是否超额", - MessageType = MessageType.FatalError, - Message = string.Format($@" 销售纸质合同号:'{contractNo}', + operationResult.OperateResult.Add(srcVerifResult); + this.OperationResult.MergeResult(operationResult); + } + // 发票单体价税合计原币 + var SumALLAMOUNTFOR = group.Sum(n => Convert.ToDecimal(n["ALLAMOUNTFOR"])); + // TODO 校验是否超额 + var verifResult = ExcessVerification(orgId, contractNo, SumALLAMOUNTFOR); + if (verifResult != null) + { + //有错误信息 + e.Cancel = true; + IOperationResult operationResult = new OperationResult(); + operationResult.OperateResult.Add(verifResult); + this.OperationResult.MergeResult(operationResult); + } + } + } + } + + /// + /// 超额校验,如果校验不通过会返回OperateResult实例,通过返回null + /// + /// 销售组织 + /// 合同号 + /// 开票金额 + /// + private OperateResult ExcessVerification(string orgId, string contractNo, decimal amount) + { + // 销售订单服务 + var saleOrderService = new SaleOrderService(this.Context); + // TODO 根据组织和纸质合同号查找销售订单 + var saleOrderList = saleOrderService.GetSaleOrderByOrgIdAndContractNo(orgId, contractNo); + if (saleOrderList.Count == 0) + { + return null; + } + var saleOrderNoList = saleOrderList.Select(n => n["FBILLNO"].ToString()).ToList(); + var saleOrderNoString = string.Join(",\n\r", saleOrderNoList); + var saleOrder = saleOrderList[0]; + // 销售订单价税合计(原币) + var saleOrderAmount = saleOrderService.GetSaleOrderAmount(orgId, contractNo); + // 销售订单累计开票金额(原币) + var saleOrderINVOICEAMOUNT = Convert.ToDecimal(saleOrder["F_INVOICEAMOUNT"]); + // 销售订单退货金额(原币) + var saleOrderReturnAmountK3Cloud = saleOrderService.GetSaleOrderRetrunAmount(orgId, contractNo); + var saleOrderReturnAmountK3 = saleOrderService.GetK3SaleOrderRetrunAmount(orgId, contractNo); + // 销售订单退货金额(原币) + var saleOrderReturnAmount = saleOrderReturnAmountK3 + saleOrderReturnAmountK3Cloud; + // 校验销售订单累计开票金额+本次开票金额不能大于销售订单价税合计 + if (saleOrderAmount - saleOrderReturnAmount < saleOrderINVOICEAMOUNT + amount) + { + return new OperateResult() + { + PKValue = "1", + Name = "检查开票金额是否超额", + MessageType = MessageType.FatalError, + Message = string.Format($@" 销售纸质合同号:'{contractNo}', 销售订单:'{saleOrderNoString}' , 开票超额。 不满足条件:整单可开票金额 >= 累计开票金额 + 本次开票金额。 整单可开票金额:{(saleOrderAmount - saleOrderReturnAmountK3Cloud - saleOrderReturnAmountK3).ToString("0.00")}, 累计开票金额:{saleOrderINVOICEAMOUNT.ToString("0.00")}, -本次开票金额:{SumALLAMOUNTFOR.ToString("0.00")}"), - SuccessStatus = false - }); - this.OperationResult.MergeResult(operationResult); - } - } - +本次开票金额:{amount.ToString("0.00")}"), + SuccessStatus = false + }; } + return null; } } }