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