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