diff --git a/GZ_LTHPilot_ORDER.csproj b/GZ_LTHPilot_ORDER.csproj index 2dc717b..8475a6b 100644 --- a/GZ_LTHPilot_ORDER.csproj +++ b/GZ_LTHPilot_ORDER.csproj @@ -347,6 +347,8 @@ + + diff --git a/SAL_ORDER/ServicePlugIn/Audit.cs b/SAL_ORDER/ServicePlugIn/Audit.cs new file mode 100644 index 0000000..3223a1e --- /dev/null +++ b/SAL_ORDER/ServicePlugIn/Audit.cs @@ -0,0 +1,62 @@ +using GZ_LTHPilot_ORDER.Service; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GZ_LTHPilot_ORDER.SAL_ORDER.ServicePlugIn +{ + [Description("服务插件:销售订单审核,刷新销售订单整单可开票金额和退货金额金额字段"), HotUpdate] + + public class Audit : AbstractOperationServicePlugIn + { + public override void OnPreparePropertys(PreparePropertysEventArgs e) + { + base.OnPreparePropertys(e); + e.FieldKeys.Add("F_totalinvoiceAmount"); // 整单可开票金额 + e.FieldKeys.Add("F_allreturnAmount"); // 云星空退货金额 + e.FieldKeys.Add("F_sourorderno"); // 源单编号 + e.FieldKeys.Add("FSALEORGID"); // 销售组织 + e.FieldKeys.Add("FRETURNTYPE"); // 退补类型 + e.FieldKeys.Add("F_sourpapercontract"); // 源头纸质合同号# + e.FieldKeys.Add("F_contractnumber"); // 纸质合同号 + } + + + /// + /// 审核插件执行后插件、事务提交后事件 + /// + /// + public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) + { + base.AfterExecuteOperationTransaction(e); + SaleOrderService saleOrderService = new SaleOrderService(this.Context); + foreach (var bill in e.DataEntitys) + { + var org = bill["SALEORGID"] as DynamicObject; + var orgId = org["Id"].ToString(); // 销售组织 + var contractNo = bill["F_contractnumber"].ToString(); // 纸质合同号 + var srcContractNo = bill["F_sourpapercontract"].ToString(); // 源头纸质合同号 + var saleOrderAmont = saleOrderService.GetSaleOrderAmount(orgId, contractNo); // 本单累计可开票金额 + var k3RetrunAmount = saleOrderService.GetK3SaleOrderRetrunAmount(orgId, contractNo); // 本单云星空退货金额 + var retrunAmount = saleOrderService.GetSaleOrderRetrunAmount(orgId, contractNo); // 本单k3退货金额 + saleOrderService.UpdateSaleOrderOrderAmountAndRetrunAmount(orgId, contractNo, saleOrderAmont, retrunAmount, k3RetrunAmount); + if (srcContractNo.IsNullOrEmpty()) + { + continue; + } + var srcSaleOrderAmont = saleOrderService.GetSaleOrderAmount(orgId, srcContractNo); // 源单累计可开票金额 + var srcK3RetrunAmount = saleOrderService.GetK3SaleOrderRetrunAmount(orgId, srcContractNo); // 源单云星空退货金额 + var srcRetrunAmount = saleOrderService.GetSaleOrderRetrunAmount(orgId, srcContractNo); // 源单k3退货金额 + saleOrderService.UpdateSaleOrderOrderAmountAndRetrunAmount(orgId, srcContractNo, srcSaleOrderAmont, srcRetrunAmount, srcK3RetrunAmount); + + } + } + } +} diff --git a/SAL_ORDER/ServicePlugIn/UnAudit.cs b/SAL_ORDER/ServicePlugIn/UnAudit.cs new file mode 100644 index 0000000..78f933e --- /dev/null +++ b/SAL_ORDER/ServicePlugIn/UnAudit.cs @@ -0,0 +1,62 @@ +using GZ_LTHPilot_ORDER.Service; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GZ_LTHPilot_ORDER.SAL_ORDER.ServicePlugIn +{ + [Description("服务插件:销售订单反审核,刷新销售订单和源单整单可开票金额和退货金额金额字段"), HotUpdate] + + public class UnAudit : AbstractOperationServicePlugIn + { + public override void OnPreparePropertys(PreparePropertysEventArgs e) + { + base.OnPreparePropertys(e); + e.FieldKeys.Add("F_totalinvoiceAmount"); // 整单可开票金额 + e.FieldKeys.Add("F_allreturnAmount"); // 云星空退货金额 + e.FieldKeys.Add("F_sourorderno"); // 源单编号 + e.FieldKeys.Add("FSALEORGID"); // 销售组织 + e.FieldKeys.Add("FRETURNTYPE"); // 退补类型 + e.FieldKeys.Add("F_sourpapercontract"); // 源头纸质合同号# + e.FieldKeys.Add("F_contractnumber"); // 纸质合同号 + } + + + /// + /// 审核插件执行后插件、事务提交后事件 + /// + /// + public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) + { + base.AfterExecuteOperationTransaction(e); + SaleOrderService saleOrderService = new SaleOrderService(this.Context); + foreach (var bill in e.DataEntitys) + { + var org = bill["SALEORGID"] as DynamicObject; + var orgId = org["Id"].ToString(); // 销售组织 + var contractNo = bill["F_contractnumber"].ToString(); // 纸质合同号 + var srcContractNo = bill["F_sourpapercontract"].ToString(); // 源头纸质合同号 + var saleOrderAmont = saleOrderService.GetSaleOrderAmount(orgId, contractNo); // 本单累计可开票金额 + var k3RetrunAmount = saleOrderService.GetK3SaleOrderRetrunAmount(orgId, contractNo); // 本单云星空退货金额 + var retrunAmount = saleOrderService.GetSaleOrderRetrunAmount(orgId, contractNo); // 本单k3退货金额 + saleOrderService.UpdateSaleOrderOrderAmountAndRetrunAmount(orgId, contractNo, saleOrderAmont, retrunAmount, k3RetrunAmount); + if (srcContractNo.IsNullOrEmpty()) + { + continue; + } + var srcSaleOrderAmont = saleOrderService.GetSaleOrderAmount(orgId, srcContractNo); // 源单累计可开票金额 + var srcK3RetrunAmount = saleOrderService.GetK3SaleOrderRetrunAmount(orgId, srcContractNo); // 源单云星空退货金额 + var srcRetrunAmount = saleOrderService.GetSaleOrderRetrunAmount(orgId, srcContractNo); // 源单k3退货金额 + saleOrderService.UpdateSaleOrderOrderAmountAndRetrunAmount(orgId, srcContractNo, srcSaleOrderAmont, srcRetrunAmount, srcK3RetrunAmount); + + } + } + } +} diff --git a/ScheduleService/SaleOrderReceiveAmount.cs b/ScheduleService/SaleOrderReceiveAmount.cs index 7ca58ea..a7ef314 100644 --- a/ScheduleService/SaleOrderReceiveAmount.cs +++ b/ScheduleService/SaleOrderReceiveAmount.cs @@ -104,7 +104,7 @@ FROM /// private int InsertDataToTempTable(Context ctx, string tableName, Dictionary orgDict, List saleExecuteOuts) { - var values = saleExecuteOuts.Select(n => $"({orgDict[n.FSALEORGNAME]},'{n.FSALEORGNAME}','{n.FBILLNO}',{n.FALLMATCHAMOUNT},'{n.FDate}')").ToList(); + var values = saleExecuteOuts.Select(n => $"({orgDict[n.FSALEORGNAME]},'{n.FSALEORGNAME}','{n.FBILLNO}',{n.FALLMATCHAMOUNT.ToString()},'{n.FDate}')").ToList(); var index = 0; var line = 0; var pageSize = 100; @@ -135,7 +135,7 @@ VALUES FORGID int, FORGNAME NVARCHAR (100), FBILLNO NVARCHAR (100), - FAMOUNT decimal, + FAMOUNT DECIMAL(18, 10), FDATE DATETIME, ); "; diff --git a/ScheduleService/SaleOrderSumSicsAmountRefresh.cs b/ScheduleService/SaleOrderSumSicsAmountRefresh.cs index acb7338..4c6fed3 100644 --- a/ScheduleService/SaleOrderSumSicsAmountRefresh.cs +++ b/ScheduleService/SaleOrderSumSicsAmountRefresh.cs @@ -5,62 +5,21 @@ using Kingdee.BOS.Contracts; using Kingdee.BOS.Core; using Kingdee.BOS.Util; using Kingdee.K3.FIN.App.Core.Match.Object; +using Kingdee.K3.SCM.Common.BusinessEntity.Sales; using System; using System.ComponentModel; namespace GZ_LTHPilot_ORDER.ScheduleService { - [Description("定时刷新销售订单累计开票金额#"), HotUpdate] + [Description("刷新所有销售订单累计开票金额#"), HotUpdate] public class SaleOrderSumSicsAmountRefresh : IScheduleService { public void Run(Context ctx, Schedule schedule) { - var advanceAays = GetAdvanceAays(schedule); - // 提前天的日期 - var approvedDate = DateTime.Now.Date.AddDays(-advanceAays - 1); // 销售发票服务 SaleSicsService saleSicsService = new SaleSicsService(ctx); - // TODO 获取前一天的发票数据 - var sicsList = saleSicsService.GetSaleSiceListByApprovedDate(approvedDate); - SaleOrderService saleOrderService = new SaleOrderService(ctx); - foreach (var sice in sicsList) - { - var saleOrgId = sice["FSALEORGID"].ToString(); - var contractNo = sice["contractNo"].ToString(); - var saleOrderList = saleOrderService.GetSaleOrderByOrgIdAndContractNo(saleOrgId, contractNo); - if (saleOrderList.Count == 0) - { - continue; - } - var saleOrder = saleOrderList[0]; - saleSicsService.UpdateSaleOrderSumSicsamountBySaleOrder(saleOrder); - } - } - - /// - /// 参数获取提前天 - /// - /// - /// - private int GetAdvanceAays(Schedule schedule) - { - // 参数获取提前天 - var advanceAaysStr = schedule.Parameters; - int advanceAays; - try - { - advanceAays = Convert.ToInt32(advanceAaysStr); - if (advanceAays < 0) - { - throw new Exception(); - } - } - catch (Exception) - { - - throw new Exception("获取参数提前天失败,参数格式为整数,且大于等于0"); - } - return advanceAays; + // 刷新所有销售订单累计开票金额# + saleSicsService.UpdateSaleOrderSumSicsamountAll(); } } } diff --git a/Services/SaleOrderService.cs b/Services/SaleOrderService.cs index 1f08a06..d7f8675 100644 --- a/Services/SaleOrderService.cs +++ b/Services/SaleOrderService.cs @@ -34,68 +34,131 @@ namespace GZ_LTHPilot_ORDER.Service /// K3退货金额原币取数逻辑:K3退货金额除以销售订单汇率=K3退货金额原币 /// /// 纸质合同号 - /// 销售订单汇率 /// - public decimal GetK3SaleOrderRetrunAmount(string contractNo, string rate) + public decimal GetK3SaleOrderRetrunAmount(string orgId, string contractNo) { - var sqlTemp = @"/*dialect*/SELECT - ROUND(ISNULL (SUM(退货金额), 0) / {1}, 2) Amount + var sqlTemp = @"/*dialect*/WITH + K3returnAmount AS ( + SELECT + t2.F_CONTRACTNUMBER, + ROUND(ISNULL (SUM(退货金额), 0) / t2fin.FEXCHANGERATE, 2) K3returnAmount + FROM + oldk3seorder0701 t1 + Inner join T_SAL_ORDER t2 on t1.合同号 = t2.F_CONTRACTNUMBER + and t2.FSALEORGID = '100302' + inner join T_SAL_ORDERFIN t2fin on t2.fid = t2fin.fid + WHERE + 1 = 1 + AND t2.FSALEORGID = '{0}' + AND t2.F_CONTRACTNUMBER = '{1}' + GROUP BY + t2.FSALEORGID, + t2.F_CONTRACTNUMBER, + t2fin.FEXCHANGERATE + ) +SELECT + * FROM - oldk3seorder0701 t1 -WHERE - 1 = 1 - AND t1.合同号 = '{0}' + K3returnAmount "; - var sql = string.Format(sqlTemp, contractNo, rate); + var sql = string.Format(sqlTemp, orgId, contractNo); var result = DBServiceHelper.ExecuteDynamicObject(ctx, sql); - return Convert.ToDecimal(result[0]["Amount"]); + if (result.Count == 0) + { + return 0; + } + return Convert.ToDecimal(result[0]["K3returnAmount"]); } /// /// 云星空的退货金额取数逻辑:取已审核的退货通知单的表头字段 ”源头销售订单单号#“ =本销售订单编号的退货通知单原币价税合计金额 /// - /// 单据编号 + /// + /// /// - public decimal GetSaleOrderRetrunAmount(string billNo) + public decimal GetSaleOrderRetrunAmount(string orgId, string contractNo) { - var sqlTemp = @"/*dialect*/SELECT - ISNULL (SUM(FBILLALLAMOUNT), 0) Amount + var sqlTemp = @"/*dialect*/WITH + returnAmount AS ( + SELECT + t2.F_CONTRACTNUMBER, + t2.FSALEORGID, + ISNULL (SUM(t1e_f.FALLAMOUNT), 0) returnAmount + FROM + T_SAL_ORDER t1 -- 下游单据 + INNER join T_SAL_ORDERENTRY t1e -- 下游单据分录 + ON t1.FID = t1e.FID + INNER JOIN T_SAL_ORDERENTRY_F t1e_f ON t1e.FENTRYID = t1e_f.FENTRYID + Inner join T_SAL_ORDER t2 -- 上游单据 + ON t1.F_SOURORDERNO = t2.FBILLNO + AND t1.FSALEORGID = t1.FSALEORGID + WHERE + 1 = 1 + AND t1.FBUSINESSTYPE = 'RETURNSO' -- 退货订单 + AND t2.FDOCUMENTSTATUS = 'C' + AND t1.FDOCUMENTSTATUS = 'C' + AND t1e.FRETURNTYPE = 'RETURN' -- 退货类型 + AND t2.FSALEORGID = '{0}' + AND t2.F_CONTRACTNUMBER = '{1}' + GROUP BY + t2.F_CONTRACTNUMBER, + t2.FSALEORGID + ) +SELECT + * FROM - T_SAL_RETURNNOTICE t1 - LEFT JOIN T_SAL_RETURNNOTICEFIN t1fin ON t1.FID = t1fin.FID -WHERE - 1 = 1 - AND t1.FDOCUMENTSTATUS = 'C' - AND t1.FCANCELSTATUS = 'A' - AND t1.F_SOURORDERNO = '{0}' + returnAmount "; - var sql = string.Format(sqlTemp, billNo); + var sql = string.Format(sqlTemp, orgId, contractNo); var result = DBServiceHelper.ExecuteDynamicObject(ctx, sql); - return Convert.ToDecimal(result[0]["Amount"]); + if (result.Count == 0) + { + return 0; + } + return -Convert.ToDecimal(result[0]["returnAmount"]); } /// /// 订单明细正数的物料原币价税合计(只取退补类型不等于“退回“的物料明细) /// - /// + /// + /// /// - public decimal GetSaleOrderAmount(string id) + public decimal GetSaleOrderAmount(string orgId, string contractNo) { - var sqlTemp = @"/*dialect*/SELECT - ISNULL (SUM(t1e_f.FALLAMOUNT), 0) Amount + var sqlTemp = @"/*dialect*/WITH + SaleOrderAmount AS ( + SELECT + t1.F_CONTRACTNUMBER, + t1.FSALEORGID, + ISNULL (SUM(t1e_f.FALLAMOUNT), 0) OrderAmount + FROM + T_SAL_ORDER t1 + INNER JOIN T_SAL_ORDERENTRY t1e ON t1.FID = t1e.FID + INNER JOIN T_SAL_ORDERENTRY_F t1e_f ON t1e.FENTRYID = t1e_f.FENTRYID + WHERE + 1 = 1 + AND t1.FDOCUMENTSTATUS = 'C' + AND t1.FCANCELSTATUS = 'A' + AND t1e.FRETURNTYPE <> 'RETURN' -- 退补类型不等于退货 + AND t1.FSALEORGID = '{0}' + AND t1.F_CONTRACTNUMBER = '{1}' + GROUP BY + t1.F_CONTRACTNUMBER, + t1.FSALEORGID + ) +SELECT + * FROM - T_SAL_ORDER t1 - LEFT JOIN T_SAL_ORDERENTRY_F t1e_f ON t1.FID = t1e_f.FID -WHERE - 1 = 1 - AND t1.FDOCUMENTSTATUS = 'C' - AND t1.FCANCELSTATUS = 'A' - AND t1e_f.FALLAMOUNT > 0 - AND t1.FID = '{0}' + SaleOrderAmount "; - var sql = string.Format(sqlTemp, id); + var sql = string.Format(sqlTemp, orgId, contractNo); var result = DBServiceHelper.ExecuteDynamicObject(ctx, sql); - return Convert.ToDecimal(result[0]["Amount"]); + if (result.Count == 0) + { + return 0; + } + return Convert.ToDecimal(result[0]["OrderAmount"]); } /// @@ -240,5 +303,32 @@ WHERE }).ToList(); return dataRow; } + + /// + /// 更新销售订单K3退货金额,云星空退货金额,累计可开票金额, + /// + /// 销售组织 + /// 纸质合同号 + /// 订单金额 + /// 云星空退货金额 + /// K3退货金额 + /// + public int UpdateSaleOrderOrderAmountAndRetrunAmount(string orgId, string contractNo, decimal orderAmount, decimal retrunAmount, decimal k3retrunAmount) + { + var sqlTemp = @"/*dialect*/UPDATE t1 +SET + t1.F_K3returnAmount = {2}, -- k3退货金额 + t1.F_ALLRETURNAMOUNT = {3}, -- 退货金额 + t1.F_TOTALINVOICEAMOUNT = {4} - {2} - {3} -- 订单总金额-云星空退货金额-K3WISE退货金额 +FROM + T_SAL_ORDER t1 +WHERE + 1 = 1 + AND t1.FSALEORGID = '{0}' + AND t1.F_CONTRACTNUMBER = '{1}' +"; + var sql = string.Format(sqlTemp, orgId, contractNo, k3retrunAmount, retrunAmount, orderAmount); + return DBServiceHelper.Execute(ctx, sql); + } } } diff --git a/Services/SaleSicsService.cs b/Services/SaleSicsService.cs index 3442cd4..5dabc14 100644 --- a/Services/SaleSicsService.cs +++ b/Services/SaleSicsService.cs @@ -91,6 +91,59 @@ WHERE return DBServiceHelper.Execute(ctx, sql); } + + public int UpdateSaleOrderSumSicsamountAll() + { + var sql = @"/*dialect*/UPDATE t1 +SET + t1.F_INVOICEAMOUNT = ISNULL (TEMP1.FAFTERTOTALTAXFOR, 0) +FROM + T_SAL_ORDER t1 + INNER JOIN T_SAL_ORDERFIN t1fin ON t1.FID = t1fin.FID + LEFT JOIN ( + SELECT + FSALEORGID, + F_PaperNumber, + SUM(FAFTERTOTALTAX) FAFTERTOTALTAX, -- 价税合计本币 + SUM(FAFTERTOTALTAXFOR) FAFTERTOTALTAXFOR -- 价税合计原币 + FROM + ( + SELECT + v1.FSALEORGID, -- 销售组织 + v1e.F_CONTRACTNO F_PaperNumber, -- 纸质合同号 + ISNULL (v1e_o.FALLAMOUNT, 0) FAFTERTOTALTAX, -- 价税合计本币 + ISNULL (v1e.FALLAMOUNTFOR, 0) FAFTERTOTALTAXFOR -- 价税合计 + FROM + T_IV_SALESIC v1 + INNER JOIN T_IV_SALESICENTRY v1e ON v1.FID = v1e.FID + LEFT JOIN T_IV_SALESICENTRY_O v1e_o ON v1e_o.FENTRYID = v1e.FENTRYID + WHERE + 1 = 1 + AND v1.FDOCUMENTSTATUS = 'C' + AND v1.FCANCELSTATUS = 'A' + AND v1.F_SFQC = 0 + UNION ALL + SELECT + '100302' FSALEORGID, -- 销售组织 + 合同号 F_PaperNumber, -- 纸质合同号 + SUM(ISNULL (发票金额, 0)) FAFTERTOTALTAX, -- 价税合计本币 + SUM(ISNULL (发票原币金额, 0)) FAFTERTOTALTAXFOR -- 价税合计 + FROM + oldk3ICSale0802 + WHERE + 1 = 1 + GROUP BY + 合同号 + ) temp02 + GROUP BY + FSALEORGID, + F_PaperNumber + ) TEMP1 ON t1.F_CONTRACTNUMBER = TEMP1.F_PaperNumber + AND t1.FSALEORGID = TEMP1.FSALEORGID +"; + return DBServiceHelper.Execute(ctx, sql); + } + /// /// /// diff --git a/T_IV_SALESIC/ServicePlugIn/Audit.cs b/T_IV_SALESIC/ServicePlugIn/Audit.cs index 8c23e59..ba54104 100644 --- a/T_IV_SALESIC/ServicePlugIn/Audit.cs +++ b/T_IV_SALESIC/ServicePlugIn/Audit.cs @@ -19,6 +19,9 @@ namespace GZ_LTHPilot_ORDER.T_IV_SALESIC.ServicePlugIn { base.OnPreparePropertys(e); e.FieldKeys.Add("F_PaperNumber"); + e.FieldKeys.Add("F_contractno"); + e.FieldKeys.Add("FALLAMOUNTFOR"); + e.FieldKeys.Add("FSALEORGID"); } @@ -32,28 +35,34 @@ namespace GZ_LTHPilot_ORDER.T_IV_SALESIC.ServicePlugIn foreach (var bill in e.DataEntitys) { var org = bill["SALEORGID"] as DynamicObject; - var orgId = org["Id"].ToString(); // 销售订单 - var contractNo = bill["F_PaperNumber"].ToString(); // 纸质合同号 + var orgId = org["Id"].ToString(); // 销售组织 + + var entryList = bill["SALESICENTRY"] as DynamicObjectCollection; + // 根据合同号分组 + var grouped = entryList.GroupBy(n => n["F_contractno"].ToString()); + // 销售订单服务 var saleOrderService = new SaleOrderService(this.Context); - // TODO 根据组织和纸质合同号查找销售订单 - var saleOrderList = saleOrderService.GetSaleOrderByOrgIdAndContractNo(orgId, contractNo); - if (saleOrderList.Count == 0) - { - //var errInfo = string.Format("纸质合同号:{0},没有找到对应的销售订单,请检查销售订单是否已审核,或者被作废", contractNo); - //throw new Exception(errInfo); - continue; - } - if (saleOrderList.Count > 1) - { - var errInfo = string.Format("纸质合同号:{0},找到多个销售订单,请检查组织内纸质合同号唯一性", contractNo); - throw new Exception(errInfo); - } - var saleOrder = saleOrderList[0]; // 发票服务 SaleSicsService saleSicsService = new SaleSicsService(this.Context); - // TODO 刷新销售订单单头的累计开票金额 - saleSicsService.UpdateSaleOrderSumSicsamountBySaleOrder(saleOrder); + foreach (var group in grouped) + { + // 纸质合同号 + var contractNo = group.Key; + + // TODO 根据组织和纸质合同号查找销售订单 + var saleOrderList = saleOrderService.GetSaleOrderByOrgIdAndContractNo(orgId, contractNo); + if (saleOrderList.Count == 0) + { + continue; + } + foreach (var saleOrder in saleOrderList) + { + + // TODO 刷新销售订单单头的累计开票金额 + saleSicsService.UpdateSaleOrderSumSicsamountBySaleOrder(saleOrder); + } + } } } } diff --git a/T_IV_SALESIC/ServicePlugIn/Submit.cs b/T_IV_SALESIC/ServicePlugIn/Submit.cs index c7563c7..32c4e12 100644 --- a/T_IV_SALESIC/ServicePlugIn/Submit.cs +++ b/T_IV_SALESIC/ServicePlugIn/Submit.cs @@ -51,23 +51,17 @@ namespace GZ_LTHPilot_ORDER.T_IV_SALESIC.ServicePlugIn { continue; } - if (saleOrderList.Count > 1) - { - var errInfo = string.Format("纸质合同号:{0},找到多个销售订单,请检查组织内纸质合同号唯一性", contractNo); - throw new Exception(errInfo); - } + var saleOrderNoList = saleOrderList.Select(n => n["FBILLNO"].ToString()).ToList(); + var saleOrderNoString = string.Join(",\n\r", saleOrderNoList); var saleOrder = saleOrderList[0]; - // 销售订单Id - var saleOrderId = saleOrder["FID"].ToString(); - var saleOrderNo = saleOrder["FBILLNO"].ToString(); // 销售订单价税合计(原币) - var saleOrderAmount = saleOrderService.GetSaleOrderAmount(saleOrderId); + var saleOrderAmount = saleOrderService.GetSaleOrderAmount(orgId, contractNo); // 销售订单累计开票金额(原币) var saleOrderINVOICEAMOUNT = Convert.ToDecimal(saleOrder["F_INVOICEAMOUNT"]); // 销售订单退货金额(原币) - var rate = saleOrder["FEXCHANGERATE"].ToString(); - var saleOrderReturnAmountK3Cloud = saleOrderService.GetSaleOrderRetrunAmount(saleOrderNo); - var saleOrderReturnAmountK3 = saleOrderService.GetK3SaleOrderRetrunAmount(contractNo, rate); + var saleOrderReturnAmountK3Cloud = saleOrderService.GetSaleOrderRetrunAmount(orgId, contractNo); + var saleOrderReturnAmountK3 = saleOrderService.GetK3SaleOrderRetrunAmount(orgId, contractNo); + // 销售订单退货金额(原币) var saleOrderReturnAmount = saleOrderReturnAmountK3 + saleOrderReturnAmountK3Cloud; // 校验销售订单累计开票金额+本次开票金额不能大于销售订单价税合计 if (saleOrderAmount < saleOrderINVOICEAMOUNT + SumALLAMOUNTFOR - saleOrderReturnAmount) @@ -80,7 +74,12 @@ namespace GZ_LTHPilot_ORDER.T_IV_SALESIC.ServicePlugIn PKValue = "1", Name = "检查开票金额是否超额", MessageType = MessageType.FatalError, - Message = string.Format($@"销售订单:'{saleOrderNo}' , 纸质合同号:'{contractNo}', 开票超额。 不满足条件:销售订单价税合计 >= 累计开票金额 + 本次开票金额 - 退货金额。销售订单价税合计:{saleOrderAmount.ToString("0.00")}, 累计开票金额:{saleOrderINVOICEAMOUNT.ToString("0.00")},本次开票金额:{SumALLAMOUNTFOR.ToString("0.00")},退货金额:{saleOrderReturnAmountK3Cloud.ToString("0.00")},K3退货金额:{saleOrderReturnAmountK3.ToString("0.00")} + Message = string.Format($@" 销售纸质合同号:'{contractNo}', +销售订单:'{saleOrderNoString}' , 开票超额。 +不满足条件:整单可开票金额 >= 累计开票金额 + 本次开票金额。 +整单可开票金额:{(saleOrderAmount - saleOrderReturnAmountK3Cloud - saleOrderReturnAmountK3).ToString("0.00")}, +累计开票金额:{saleOrderINVOICEAMOUNT.ToString("0.00")}, +本次开票金额:{SumALLAMOUNTFOR.ToString("0.00")}, "), SuccessStatus = false diff --git a/T_IV_SALESIC/ServicePlugIn/UnAudit.cs b/T_IV_SALESIC/ServicePlugIn/UnAudit.cs index 2b5a1ba..2937895 100644 --- a/T_IV_SALESIC/ServicePlugIn/UnAudit.cs +++ b/T_IV_SALESIC/ServicePlugIn/UnAudit.cs @@ -19,8 +19,12 @@ namespace GZ_LTHPilot_ORDER.T_IV_SALESIC.ServicePlugIn { base.OnPreparePropertys(e); e.FieldKeys.Add("F_PaperNumber"); + e.FieldKeys.Add("F_contractno"); + e.FieldKeys.Add("FALLAMOUNTFOR"); + e.FieldKeys.Add("FSALEORGID"); } + /// /// 审核插件执行后插件、事务提交后事件 /// @@ -31,27 +35,34 @@ namespace GZ_LTHPilot_ORDER.T_IV_SALESIC.ServicePlugIn foreach (var bill in e.DataEntitys) { var org = bill["SALEORGID"] as DynamicObject; - var orgId = org["Id"].ToString(); // 销售订单 - var contractNo = bill["F_PaperNumber"].ToString(); // 纸质合同号 + var orgId = org["Id"].ToString(); // 销售组织 + + var entryList = bill["SALESICENTRY"] as DynamicObjectCollection; + // 根据合同号分组 + var grouped = entryList.GroupBy(n => n["F_contractno"].ToString()); + // 销售订单服务 var saleOrderService = new SaleOrderService(this.Context); - // TODO 根据组织和纸质合同号查找销售订单 - var saleOrderList = saleOrderService.GetSaleOrderByOrgIdAndContractNo(orgId, contractNo); - if (saleOrderList.Count == 0) - { - - continue; - } - if (saleOrderList.Count > 1) - { - var errInfo = string.Format("纸质合同号:{0},找到多个销售订单,请检查组织内纸质合同号唯一性", contractNo); - throw new Exception(errInfo); - } - var saleOrder = saleOrderList[0]; // 发票服务 SaleSicsService saleSicsService = new SaleSicsService(this.Context); - // TODO 刷新销售订单单头的累计开票金额 - saleSicsService.UpdateSaleOrderSumSicsamountBySaleOrder(saleOrder); + foreach (var group in grouped) + { + // 纸质合同号 + var contractNo = group.Key; + + // TODO 根据组织和纸质合同号查找销售订单 + var saleOrderList = saleOrderService.GetSaleOrderByOrgIdAndContractNo(orgId, contractNo); + if (saleOrderList.Count == 0) + { + continue; + } + foreach (var saleOrder in saleOrderList) + { + + // TODO 刷新销售订单单头的累计开票金额 + saleSicsService.UpdateSaleOrderSumSicsamountBySaleOrder(saleOrder); + } + } } } }