Merge branch 'main' of http://8.130.121.29:3000/Develop/Piolot_Order_TH
This commit is contained in:
commit
ebfc3de501
@ -347,6 +347,8 @@
|
||||
<Compile Include="PUR_POORDER\HQKC.cs" />
|
||||
<Compile Include="SAL_DELIVERYNOTICE\PushCeLue.cs" />
|
||||
<Compile Include="SAL_ORDERList\ListUpFJ.cs" />
|
||||
<Compile Include="SAL_ORDER\ServicePlugIn\UnAudit.cs" />
|
||||
<Compile Include="SAL_ORDER\ServicePlugIn\Audit.cs" />
|
||||
<Compile Include="SAL_ORDER\DataChage.cs" />
|
||||
<Compile Include="SAL_ORDER\SaveWL.cs" />
|
||||
<Compile Include="ScheduleService\SaleOrderReceiveAmount.cs" />
|
||||
|
||||
62
SAL_ORDER/ServicePlugIn/Audit.cs
Normal file
62
SAL_ORDER/ServicePlugIn/Audit.cs
Normal file
@ -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"); // 纸质合同号
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 审核插件执行后插件、事务提交后事件
|
||||
/// </summary>
|
||||
/// <param name="e"></param>
|
||||
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);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
62
SAL_ORDER/ServicePlugIn/UnAudit.cs
Normal file
62
SAL_ORDER/ServicePlugIn/UnAudit.cs
Normal file
@ -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"); // 纸质合同号
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 审核插件执行后插件、事务提交后事件
|
||||
/// </summary>
|
||||
/// <param name="e"></param>
|
||||
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);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -104,7 +104,7 @@ FROM
|
||||
/// <returns></returns>
|
||||
private int InsertDataToTempTable(Context ctx, string tableName, Dictionary<string, string> orgDict, List<SaleExecuteOut> 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,
|
||||
);
|
||||
";
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 参数获取提前天
|
||||
/// </summary>
|
||||
/// <param name="schedule"></param>
|
||||
/// <returns></returns>
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -34,68 +34,131 @@ namespace GZ_LTHPilot_ORDER.Service
|
||||
/// K3退货金额原币取数逻辑:K3退货金额除以销售订单汇率=K3退货金额原币
|
||||
/// </summary>
|
||||
/// <param name="contractNo">纸质合同号</param>
|
||||
/// <param name="rate">销售订单汇率</param>
|
||||
/// <returns></returns>
|
||||
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"]);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 云星空的退货金额取数逻辑:取已审核的退货通知单的表头字段 ”源头销售订单单号#“ =本销售订单编号的退货通知单原币价税合计金额
|
||||
/// </summary>
|
||||
/// <param name="billNo">单据编号</param>
|
||||
/// <param name="orgId"></param>
|
||||
/// <param name="contractNo"></param>
|
||||
/// <returns></returns>
|
||||
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"]);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 订单明细正数的物料原币价税合计(只取退补类型不等于“退回“的物料明细)
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="orgId"></param>
|
||||
/// <param name="contractNo"></param>
|
||||
/// <returns></returns>
|
||||
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"]);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -240,5 +303,32 @@ WHERE
|
||||
}).ToList();
|
||||
return dataRow;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新销售订单K3退货金额,云星空退货金额,累计可开票金额,
|
||||
/// </summary>
|
||||
/// <param name="orgId">销售组织</param>
|
||||
/// <param name="contractNo">纸质合同号</param>
|
||||
/// <param name="orderAmount">订单金额</param>
|
||||
/// <param name="retrunAmount">云星空退货金额</param>
|
||||
/// <param name="k3retrunAmount">K3退货金额</param>
|
||||
/// <returns></returns>
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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");
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 审核插件执行后插件、事务提交后事件
|
||||
/// </summary>
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user