修复发票超额控制问题
This commit is contained in:
parent
5881d9e9c7
commit
3237265dfd
@ -330,5 +330,34 @@ WHERE
|
||||
var sql = string.Format(sqlTemp, orgId, contractNo, k3retrunAmount, retrunAmount, orderAmount);
|
||||
return DBServiceHelper.Execute(ctx, sql);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取已提交发票金额
|
||||
/// </summary>
|
||||
/// <param name="orgId"></param>
|
||||
/// <param name="contractNo"></param>
|
||||
/// <returns></returns>
|
||||
internal decimal GetSubmitedAmount(string orgId, string contractNo)
|
||||
{
|
||||
var sqlTemp = $@"/*dialect*/SELECT
|
||||
ISNULL (SUM(t1e_O.FALLAMOUNT), 0) AS SubmitAmount
|
||||
FROM
|
||||
T_IV_SALESIC t1
|
||||
LEFT JOIN T_IV_SALESICENTRY t1e ON t1.FID = t1e.FID
|
||||
LEFT JOIN T_IV_SALESICENTRY_O t1e_O ON t1e.FENTRYID = t1e_O.FENTRYID
|
||||
WHERE
|
||||
1 = 1
|
||||
AND t1.FDOCUMENTSTATUS = 'B'
|
||||
AND t1e.F_CONTRACTNO = '{contractNo}'
|
||||
AND t1.FSALEORGID = '{orgId}'
|
||||
";
|
||||
var sql = string.Format(sqlTemp, orgId, contractNo);
|
||||
var result = DBServiceHelper.ExecuteDynamicObject(ctx, sql);
|
||||
if (result.Count == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return Convert.ToDecimal(result[0]["SubmitAmount"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ using Kingdee.BOS.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics.Contracts;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
@ -24,45 +25,74 @@ namespace GZ_LTHPilot_ORDER.T_IV_SALESIC.ServicePlugIn
|
||||
e.FieldKeys.Add("FSALEORGID");
|
||||
}
|
||||
|
||||
private class SALESIC
|
||||
{
|
||||
/// <summary>
|
||||
/// 组织Id
|
||||
/// </summary>
|
||||
public string OrgId { get; set; }
|
||||
/// <summary>
|
||||
/// 纸质合同号
|
||||
/// </summary>
|
||||
public string ContractNo { get; set; }
|
||||
/// <summary>
|
||||
/// 价税合计原币
|
||||
/// </summary>
|
||||
public decimal AllAmountFor { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e)
|
||||
{
|
||||
base.BeforeExecuteOperationTransaction(e);
|
||||
|
||||
var entryListUnion = new List<SALESIC>();
|
||||
foreach (var bill in e.SelectedRows)
|
||||
{
|
||||
|
||||
var org = bill["SALEORGID"] as DynamicObject;
|
||||
var orgId = org["Id"].ToString(); // 销售组织
|
||||
var entryList = bill["SALESICENTRY"] as DynamicObjectCollection;
|
||||
// 根据合同号分组
|
||||
var grouped = entryList.GroupBy(n => n["F_contractno"].ToString());
|
||||
foreach (var group in grouped)
|
||||
// 添加所有分录到集合
|
||||
foreach (var item in entryList)
|
||||
{
|
||||
// 纸质合同号
|
||||
var contractNo = group.Key;
|
||||
// 校验原单是否超额
|
||||
var srcVerifResult = SrcExcessVerification(orgId, contractNo);
|
||||
if (srcVerifResult != null)
|
||||
entryListUnion.Add(new SALESIC()
|
||||
{
|
||||
//有错误信息
|
||||
e.Cancel = true;
|
||||
IOperationResult operationResult = new OperationResult();
|
||||
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);
|
||||
}
|
||||
OrgId = orgId,
|
||||
ContractNo = item["F_contractno"].ToString(),
|
||||
AllAmountFor = Convert.ToDecimal(item["ALLAMOUNTFOR"])
|
||||
});
|
||||
}
|
||||
}
|
||||
var entryGrouped = entryListUnion.GroupBy(n => new
|
||||
{
|
||||
n.ContractNo,
|
||||
n.OrgId
|
||||
});
|
||||
foreach (var item in entryGrouped)
|
||||
{
|
||||
// 纸质合同号
|
||||
var contractNo = item.Key.ContractNo;
|
||||
var orgId = item.Key.OrgId;
|
||||
// 校验原单是否超额
|
||||
var srcVerifResult = SrcExcessVerification(orgId, contractNo);
|
||||
if (srcVerifResult != null)
|
||||
{
|
||||
//有错误信息
|
||||
e.Cancel = true;
|
||||
IOperationResult operationResult = new OperationResult();
|
||||
operationResult.OperateResult.Add(srcVerifResult);
|
||||
this.OperationResult.MergeResult(operationResult);
|
||||
}
|
||||
// 发票单体价税合计原币
|
||||
var SumALLAMOUNTFOR = item.Sum(n => 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -123,17 +153,19 @@ namespace GZ_LTHPilot_ORDER.T_IV_SALESIC.ServicePlugIn
|
||||
var saleOrderNoList = saleOrderList.Select(n => n["FBILLNO"].ToString()).ToList();
|
||||
var saleOrderNoString = string.Join(",\n\r", saleOrderNoList);
|
||||
var saleOrder = saleOrderList[0];
|
||||
// 销售订单价税合计(原币)
|
||||
// 已提交发票金额(本币)
|
||||
var submitedAmount = saleOrderService.GetSubmitedAmount(orgId, contractNo);
|
||||
// 销售订单价税合计(本币)
|
||||
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)
|
||||
// 校验销售订单累计开票金额 + 本次开票金额 + 已提交发票金额 <= 销售订单价税合计
|
||||
if (saleOrderAmount - saleOrderReturnAmount < saleOrderINVOICEAMOUNT + amount + submitedAmount)
|
||||
{
|
||||
return new OperateResult()
|
||||
{
|
||||
@ -142,10 +174,11 @@ namespace GZ_LTHPilot_ORDER.T_IV_SALESIC.ServicePlugIn
|
||||
MessageType = MessageType.FatalError,
|
||||
Message = string.Format($@" 销售纸质合同号:'{contractNo}',
|
||||
销售订单:'{saleOrderNoString}' , 开票超额。
|
||||
不满足条件:整单可开票金额 >= 累计开票金额 + 本次开票金额。
|
||||
不满足条件:整单可开票金额 >= 累计开票金额 + 本次开票金额 + 已提交发票金额。
|
||||
整单可开票金额:{(saleOrderAmount - saleOrderReturnAmountK3Cloud - saleOrderReturnAmountK3).ToString("0.00")},
|
||||
累计开票金额:{saleOrderINVOICEAMOUNT.ToString("0.00")},
|
||||
本次开票金额:{amount.ToString("0.00")}"),
|
||||
本次开票金额:{amount.ToString("0.00")},
|
||||
已提交金额:{submitedAmount.ToString("0.00")}"),
|
||||
SuccessStatus = false
|
||||
};
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user