2025-12-01 15:02:01 +08:00

97 lines
3.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Kingdee.BOS;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System;
using System.ComponentModel;
using System.Linq;
namespace Gatedge.K3.Pilot.PlugIn.BOSPlugIn.AR_SalesVATInvoice.ServicePlugIn
{
[HotUpdate, Description("销售增值税专用发票_保存后事件")]
public class AfterSave : AbstractOperationServicePlugIn
{
public override void OnPreparePropertys(PreparePropertysEventArgs e)
{
base.OnPreparePropertys(e);
// 添加需要加载的字段
e.FieldKeys.Add("FDENTRYID");
e.FieldKeys.Add("FIDD");
e.FieldKeys.Add("FSEQQ");
e.FieldKeys.Add("FSRCBILLTYPEID");
e.FieldKeys.Add("FSRCBILLNO");
}
public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
{
base.AfterExecuteOperationTransaction(e);
foreach (var dataEntity in e.DataEntitys)
{
var billObj = dataEntity as DynamicObject;
if (billObj == null)
continue;
// 获取单据体
var entrys = billObj["SALESICENTRY"] as DynamicObjectCollection;
if (entrys == null || entrys.Count == 0)
continue;
foreach (var entry in entrys)
{
var entryId = Convert.ToInt64(entry["FDENTRYID"]);
var fidd = entry["FIDD"];
var fiddValue = fidd == null ? 0 : Convert.ToInt64(fidd);
if (fiddValue > 0)
{
// FIDD > 0 时,判断是否需要回写
var srcBillNo = entry["FSRCBILLNO"]?.ToString() ?? "";
// FIDD != 当前行FENTRYID 且 源单编号为空 时才回写
if (fiddValue != entryId && string.IsNullOrWhiteSpace(srcBillNo))
{
// 查询源单据体信息(主键=FIDD的明细行
var sql = $@"/*dialect*/
SELECT FSRCBILLTYPEID, FSRCBILLNO, FSEQ
FROM T_IV_SALESICENTRY
WHERE FDENTRYID = {fiddValue}";
var result = DBServiceHelper.ExecuteDynamicObject(this.Context, sql);
if (result == null || result.Count == 0)
continue;
var srcData = result[0];
var srcBillTypeId = srcData["FSRCBILLTYPEID"];
var srcBillNoValue = srcData["FSRCBILLNO"];
// 回写当前单据体:源单类型、源单编号
var updateSql = $@"/*dialect*/
UPDATE T_IV_SALESICENTRY
SET FSRCBILLTYPEID = '{srcBillTypeId}',
FSRCBILLNO = '{srcBillNoValue}'
WHERE FDENTRYID = {entryId}";
DBServiceHelper.Execute(this.Context, updateSql);
}
}
else
{
// FIDD <= 0 时把当前行FENTRYID赋值给FIDD同时把FSEQ赋值给FSEQQ
var updateSql = $@"/*dialect*/
UPDATE T_IV_SALESICENTRY
SET FIDD = FDENTRYID,
FSEQQ = FSEQ
WHERE FDENTRYID = {entryId}";
DBServiceHelper.Execute(this.Context, updateSql);
}
}
}
}
}
}