This commit is contained in:
朱斌 2025-08-28 10:35:38 +08:00
parent 3a2c12479e
commit 7789d7daaa
2 changed files with 73 additions and 32 deletions

View File

@ -446,6 +446,7 @@
</Target>
<Import Project="packages\SkiaSharp.NativeAssets.Win32.2.88.8\build\net462\SkiaSharp.NativeAssets.Win32.targets" Condition="Exists('packages\SkiaSharp.NativeAssets.Win32.2.88.8\build\net462\SkiaSharp.NativeAssets.Win32.targets')" />
<PropertyGroup>
<PostBuildEvent>copy $(TargetPath) "D:\kingdee\K3Cloud\WebSite\Bin\$(TargetFileName)"</PostBuildEvent>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
</Project>

View File

@ -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);
}
}
}
}
/// <summary>
/// 超额校验,如果校验不通过会返回OperateResult实例通过返回null
/// </summary>
/// <param name="orgId">销售组织</param>
/// <param name="contractNo">合同号</param>
/// <param name="amount">开票金额</param>
/// <returns></returns>
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;
}
}
}