using Kingdee.BOS;
|
using Kingdee.BOS.Core;
|
using Kingdee.BOS.Core.DynamicForm.PlugIn;
|
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
|
using Kingdee.BOS.Core.Validation;
|
using Kingdee.BOS.ServiceHelper;
|
using Kingdee.BOS.Util;
|
using System;
|
using System.ComponentModel;
|
|
namespace Demo.BillView.PRD
|
{
|
[Description("[日计划工单保存] 校验器"), HotUpdate]
|
public class SalOrderSaveVal : AbstractOperationServicePlugIn
|
{
|
public override void OnPreparePropertys(PreparePropertysEventArgs e)
|
{
|
base.OnPreparePropertys(e);
|
}
|
//自定义校验器
|
public override void OnAddValidators(AddValidatorsEventArgs e)
|
{
|
base.OnAddValidators(e);
|
TestValidator validator = new TestValidator();
|
validator.AlwaysValidate = true;
|
validator.EntityKey = "FBillHead";
|
e.Validators.Add(validator);
|
}
|
/// <summary>
|
/// 保存单据头校验器
|
/// </summary>
|
private class TestValidator : AbstractValidator
|
{
|
public override void Validate(ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Context ctx)
|
{
|
//for循环,读取数据
|
foreach (var data in dataEntities)
|
{
|
var FID = data.DataEntity["Id"]?.ToString();//日计划工单FID
|
var FPRDMOENTYID = Convert.ToInt32(data.DataEntity["FPRDMOENTYID"]?.ToString());//生产订单明细 FentryID
|
var FSRCBILLENTRYSEQ = data.DataEntity["FSRCBILLENTRYSEQ"]?.ToString();//生产订单明细行号
|
var FSCOrderNo = data.DataEntity["FSCOrderNo"]?.ToString(); //生产订单号
|
var FDayPlanQuantity = Convert.ToDecimal(data.DataEntity["FDayPlanQuantity"]?.ToString()); //日计划数量总量
|
|
var FMOENTRYID = Convert.ToInt32(data.DataEntity["FMOENTRYID"]?.ToString());//生产订单明细 FMOENTRYID(新)
|
var FMoBillNo = data.DataEntity["FMoBillNo"]?.ToString();//生产订单号 FMOENTRYID(新)
|
var FMoSeq = 1;//生产订单明细行号(新)
|
|
if (FMOENTRYID == 0 || FMOENTRYID == FPRDMOENTYID)
|
{
|
var FOrderQuantity = DBServiceHelper.ExecuteScalar<decimal>(Context, "select Fqty from t_prd_moentry where fentryid ="+ FPRDMOENTYID.ToString(), 0);
|
string sql = $"select convert(decimal(18,2),sum(FDayPlanQuantity)) from Sc_WorkBillSortBillMain where FPRDMOENTYID = {FPRDMOENTYID} and (FMoEntryId = 0 or FMoEntryId = FPRDMOENTYID ) and FID <>{FID}";
|
decimal FOrderCount = DBServiceHelper.ExecuteScalar<decimal>(Context, sql, 0);
|
LogService.Write("sql:" + sql);
|
LogService.Write("FOrderCount:" + FOrderCount);
|
|
bool isSave = FOrderCount + FDayPlanQuantity > FOrderQuantity;
|
if (isSave)
|
{
|
string err = $"生产订单号:{FSCOrderNo},生产订单明细行号:{FSRCBILLENTRYSEQ},生产订单数量:{FOrderQuantity},已有日计划数量{FOrderCount},本次计划数量:{FDayPlanQuantity},将超出生产订单总数量";
|
//报错
|
validateContext.AddError(data.DataEntity,
|
new ValidationErrorInfo
|
("PurchaserId",//出错的字段Key,可以空
|
data.DataEntity["Id"].ToString(),// 出错的字段Key,可以空
|
data.DataEntityIndex, // 出错的数据包在全部数据包中的顺序
|
data.RowIndex,// 出错的数据行在全部数据行中的顺序,如果校验基于单据头,此为0
|
"001",//错误编码,可以任意设定一个字符,主要用于追查错误来源
|
"单据编号" + data.BillNo + err,//错误的详细提示信息
|
"保存" + data.BillNo,// 错误的简明提示信息
|
Kingdee.BOS.Core.Validation.ErrorLevel.Error// 错误级别:警告、错误...
|
));
|
}
|
}
|
else//新生产订单
|
{
|
string _sql = string.Format(@"
|
select convert(decimal(18,2),sum(FDayPlanQuantity)) from
|
(
|
select FDayPlanQuantity
|
from Sc_WorkBillSortBillMain t1
|
where FMOENTRYID ={0} and FID <>{1}
|
|
union
|
|
select FDayPlanQuantity
|
from Sc_WorkBillSortBillMain t1
|
where FPRDMOENTYID ={0} and FMOENTRYID in({0},0 )
|
and FID <> {1}
|
) t1", FMOENTRYID, FID);
|
LogService.Write("_sql:"+ _sql);
|
//string sql = $"select convert(decimal(18,2),sum(FDayPlanQuantity)) from Sc_WorkBillSortBillMain where FMoEntryId = {FMOENTRYID} and FID <>{FID}";
|
decimal FOrderCount = DBServiceHelper.ExecuteScalar<decimal>(Context, _sql, 0);
|
var FOrderQuantity = DBServiceHelper.ExecuteScalar<decimal>(Context, "select Fqty from t_prd_moentry where fentryid =" + FMOENTRYID.ToString(), 0);
|
//LogService.Write("FOrderCount:" + FOrderCount);
|
bool isSave = FOrderCount + FDayPlanQuantity > FOrderQuantity;
|
if (isSave)
|
{
|
string err = $"生产订单号:{FMoBillNo},生产订单明细行号:{FMoSeq},生产订单数量:{FOrderQuantity},已有日计划数量{FOrderCount},本次计划数量:{FDayPlanQuantity},将超出生产订单总数量";
|
//报错
|
validateContext.AddError(data.DataEntity,
|
new ValidationErrorInfo
|
("PurchaserId",//出错的字段Key,可以空
|
data.DataEntity["Id"].ToString(),// 出错的字段Key,可以空
|
data.DataEntityIndex, // 出错的数据包在全部数据包中的顺序
|
data.RowIndex,// 出错的数据行在全部数据行中的顺序,如果校验基于单据头,此为0
|
"001",//错误编码,可以任意设定一个字符,主要用于追查错误来源
|
"单据编号" + data.BillNo + err,//错误的详细提示信息
|
"保存" + data.BillNo,// 错误的简明提示信息
|
Kingdee.BOS.Core.Validation.ErrorLevel.Error// 错误级别:警告、错误...
|
));
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|