Piolot_Order_TH/T_IV_SALESIC/AuditS_Order.cs
李狗蛋 12db989e79 1
2025-04-24 18:38:42 +08:00

103 lines
6.3 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.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.ControlElement;
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.IV_SALESIC
{
[Description("服务插件:发票审核时,反写销售订单累计开票金额字段"), HotUpdate]
public class AuditS_Order : AbstractOperationServicePlugIn
{
public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e)
{
base.BeforeExecuteOperationTransaction(e);
foreach (var Row in e.SelectedRows)
{
var Billobj = Row.DataEntity;
//先查询是否由蓝票下推生成的红票
var GetLpFids = SqlManage.SqlManage.GetBuleFpFID(this.Context, Convert.ToString(Billobj["Id"]));
if (GetLpFids.Count > 0)
{
//循环遍历蓝字发票FID,执行蓝字发票的查询存储过程
foreach (var GetLpFid in GetLpFids) {
var Ordersqls = SqlManage.SqlManage.GetHZFPSal_ORDERFidAndFentryid(this.Context, Convert.ToString(GetLpFid["蓝字发票FID"]));
if (Ordersqls.Count > 0)
{
foreach (var Ordersql in Ordersqls)
{
//根据销售订单FID和销售订单FENTRYID更新源销售订单的开票数量和开票金额(明细)
SqlManage.SqlManage.UpSal_OrderKPJEAndKPSL(this.Context, Convert.ToString(Ordersql["销售订单FID"]),
Convert.ToString(Ordersql["销售订单FENTRYID"]), Convert.ToString(Ordersql["开票数量"]),
Convert.ToString(Ordersql["开票金额"]));
//判断更新后的累计核销金额是否大于销售订单的价税合计本位币
var dynamics = SqlManage.SqlManage.GetSal_Order(this.Context, Convert.ToString(Ordersql["销售订单FID"]));
if (dynamics.Count > 0)
{
//当累计开票金额>订单的价税合计时,溯源更新订单的开票数量和开票金额
SqlManage.SqlManage.FalseUpSal_OrderKPJEAndKPSL(this.Context, Convert.ToString(Ordersql["销售订单FID"]),
Convert.ToString(Ordersql["销售订单FENTRYID"]), Convert.ToString(Ordersql["开票数量"]),
Convert.ToString(Ordersql["开票金额"]));
foreach (var dynamic in dynamics)
{
e.Cancel = true;
var ErrorMessge = string.Format(@"源单销售订单编号:{0},的价税合计为{1},目前开票金额反写回
销售订单累计开票金额为{2},超出核销范围,不允许执行审核操作", Convert.ToString(dynamic["单据编号"])
, Convert.ToString(dynamic["价税合计"]), Convert.ToString(dynamic["累计开票金额"]));
throw new Exception(
ErrorMessge.ToString()
);
}
}
}
}
break;
}
}
//当发票为蓝字发票或非蓝字发票下推生成的红字发票时
else
{
var LZOrders = SqlManage.SqlManage.GetLZFPSal_ORDERFidAndFentryid(this.Context, Convert.ToString(Billobj["Id"]));
if (LZOrders.Count > 0)
{
foreach (var LZOrder in LZOrders)
{
//根据销售订单FID和销售订单的FENTRYID更新源销售订单的开票数量和开票金额(明细)
SqlManage.SqlManage.UpSal_OrderKPJEAndKPSL(this.Context, Convert.ToString(LZOrder["销售订单FID"]),
Convert.ToString(LZOrder["销售订单FENTRYID"]), Convert.ToString(LZOrder["开票数量"]),
Convert.ToString(LZOrder["开票金额"]));
//判断更新后的累计核销金额是否大于销售订单的价税合计本位币
var dynamics = SqlManage.SqlManage.GetSal_Order(this.Context, Convert.ToString(LZOrder["销售订单FID"]));
if (dynamics.Count > 0)
{
//当累计开票金额>订单的价税合计时,溯源更新订单的开票数量和开票金额
SqlManage.SqlManage.FalseUpSal_OrderKPJEAndKPSL(this.Context, Convert.ToString(LZOrder["销售订单FID"]),
Convert.ToString(LZOrder["销售订单FENTRYID"]), Convert.ToString(LZOrder["开票数量"]),
Convert.ToString(LZOrder["开票金额"]));
foreach (var dynamic in dynamics)
{
e.Cancel = true;
var ErrorMessge = string.Format(@"源单销售订单编号:{0},的价税合计为{1},目前开票金额反写回
销售订单累计开票金额为{2},超出核销范围,不允许执行审核操作", Convert.ToString(dynamic["单据编号"])
, Convert.ToString(dynamic["价税合计"]), Convert.ToString(dynamic["累计开票金额"]));
throw new Exception(
ErrorMessge.ToString()
);
}
}
}
}
break;
}
}
}
}
}