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;
}
}
}