a
This commit is contained in:
111
14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/BillConvertEventPlugInEx.cs
Normal file
111
14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/BillConvertEventPlugInEx.cs
Normal file
@@ -0,0 +1,111 @@
|
||||
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn;
|
||||
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args;
|
||||
using Kingdee.BOS.Orm.DataEntity;
|
||||
using Kingdee.BOS.ServiceHelper;
|
||||
using Kingdee.BOS.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace GZ.LJY000.Biori.SAL_OUTSTOCK
|
||||
{
|
||||
[Description("发货通知单下推销售出库单#"), HotUpdate]
|
||||
public class BillConvertEventPlugInEx : AbstractConvertPlugIn
|
||||
{
|
||||
public override void AfterConvert(AfterConvertEventArgs e)
|
||||
{
|
||||
base.AfterConvert(e);
|
||||
if (e.Result.FindByEntityKey("FBillHead").Any())
|
||||
{
|
||||
var billHead = e.Result.FindByEntityKey("FBillHead")[0].DataEntity;
|
||||
|
||||
var sqlTables = new List<string>();
|
||||
|
||||
var entrys = billHead["SAL_OUTSTOCKENTRY"] as DynamicObjectCollection;
|
||||
foreach (var entry in entrys)
|
||||
{
|
||||
DynamicObject entityLinkObj = null;
|
||||
var entityLinkObjList = entry["FEntity_Link"] as DynamicObjectCollection;
|
||||
|
||||
if (entityLinkObjList != null && entityLinkObjList.Count > 0)
|
||||
entityLinkObj = entityLinkObjList[0];
|
||||
|
||||
var sBillId = entityLinkObj == null ? 0 : entityLinkObj["SBillId"].Long2Int();
|
||||
var sId = entityLinkObj == null ? 0 : entityLinkObj["SId"].Long2Int();
|
||||
var sTableName = entityLinkObj == null ? "" : entityLinkObj["STableName"].ToString();
|
||||
|
||||
sqlTables.Add($" SELECT {sId} FENTRYID ");
|
||||
}
|
||||
|
||||
var sqlL = $@"/*dialect*/
|
||||
WITH #基础数据 AS (
|
||||
{string.Join(" UNION ", sqlTables)}
|
||||
)
|
||||
SELECT t4.FBILLNO,t4.FEntryID,t4.FSeq
|
||||
,t4.FSRCBILLENTRYID,t0.FENTRYID AS 'EntryId'
|
||||
FROM #基础数据 t0
|
||||
INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk on t1e_lk.FENTRYID = t0.FENTRYID
|
||||
AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY'
|
||||
INNER JOIN T_SAL_ORDERENTRY_LK t2e_lk on t2e_lk.FENTRYID = t1e_lk.FSID
|
||||
AND t2e_lk.FSTABLENAME = 'T_PLN_FORECASTENTRY'
|
||||
CROSS APPLY (
|
||||
SELECT t4.FBILLNO,t4e.FEntryID,t4e.FSeq,t4e.FSRCBILLENTRYID
|
||||
FROM T_PRD_PACKAGEINSTOCK t4
|
||||
INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t4e on t4.FID = t4e.FID
|
||||
WHERE t4e.FSRCBILLENTRYID = t2e_lk.FSID
|
||||
UNION ALL
|
||||
SELECT t4.FBILLNO,0,0,t4.FSRCBILLENTRYID
|
||||
FROM T_PRD_PACKAGEINSTOCK t4
|
||||
WHERE t4.FSRCBILLENTRYID = t2e_lk.FSID
|
||||
) t4
|
||||
UNION ALL
|
||||
SELECT t4.FBILLNO,t4.FEntryID,t4.FSeq
|
||||
,t4.FSRCBILLENTRYID,t0.FENTRYID AS 'EntryId'
|
||||
FROM #基础数据 t0
|
||||
INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk on t1e_lk.FENTRYID = t0.FENTRYID
|
||||
AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY'
|
||||
CROSS APPLY (
|
||||
SELECT t4.FBILLNO,t4e.FEntryID,t4e.FSeq,t4e.FSRCBILLENTRYID
|
||||
FROM T_PRD_PACKAGEINSTOCK t4
|
||||
INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t4e on t4.FID = t4e.FID
|
||||
WHERE t4e.FSRCBILLENTRYID = t1e_lk.FSID
|
||||
UNION ALL
|
||||
SELECT t4.FBILLNO,0,0,t4.FSRCBILLENTRYID
|
||||
FROM T_PRD_PACKAGEINSTOCK t4
|
||||
WHERE t4.FSRCBILLENTRYID = t1e_lk.FSID
|
||||
) t4
|
||||
|
||||
";
|
||||
|
||||
var dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL);
|
||||
if (dataList != null && dataList.Any())
|
||||
{
|
||||
foreach (var entry in entrys)
|
||||
{
|
||||
DynamicObject entityLinkObj = null;
|
||||
var entityLinkObjList = entry["FEntity_Link"] as DynamicObjectCollection;
|
||||
|
||||
if (entityLinkObjList != null && entityLinkObjList.Count > 0)
|
||||
entityLinkObj = entityLinkObjList[0];
|
||||
|
||||
var sBillId = entityLinkObj == null ? 0 : entityLinkObj["SBillId"].Long2Int();
|
||||
var sId = entityLinkObj == null ? 0 : entityLinkObj["SId"].Long2Int();
|
||||
var sTableName = entityLinkObj == null ? "" : entityLinkObj["STableName"].ToString();
|
||||
|
||||
var data = dataList.FirstOrDefault(w => w["EntryId"].Long2Int() == sId);
|
||||
if (data != null)
|
||||
{
|
||||
entry["FPackBillNo"] = data["FBILLNO"];
|
||||
entry["FPackBillSeq"] = data["FSeq"];
|
||||
entry["FPackBillEntryId"] = data["FEntryID"];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
91
14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/BillEventPlugInEx.cs
Normal file
91
14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/BillEventPlugInEx.cs
Normal file
@@ -0,0 +1,91 @@
|
||||
using Kingdee.BOS.Core.DynamicForm;
|
||||
using Kingdee.BOS.Core.DynamicForm.PlugIn;
|
||||
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
|
||||
using Kingdee.BOS.Core.List;
|
||||
using Kingdee.BOS.Orm.DataEntity;
|
||||
using Kingdee.BOS.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace GZ.LJY000.Biori.SAL_OUTSTOCK
|
||||
{
|
||||
[HotUpdate, Description("销售出库单组装单取值插件")]
|
||||
public class BillEventPlugInEx : AbstractDynamicFormPlugIn
|
||||
{
|
||||
|
||||
public override void BeforeUpdateValue(BeforeUpdateValueEventArgs e)
|
||||
{
|
||||
base.BeforeUpdateValue(e);
|
||||
}
|
||||
|
||||
public override void EntryBarItemClick(BarItemClickEventArgs e)
|
||||
{
|
||||
base.EntryBarItemClick(e);
|
||||
|
||||
if (e.BarItemKey.Equals("tbScanPack"))
|
||||
{
|
||||
var billShowParameter = new DynamicFormShowParameter();
|
||||
if (this.Context.DBId.Equals("6735f10547df64"))
|
||||
billShowParameter.FormId = "k474702e8884e43a3b11c235d9d430f5d";
|
||||
else
|
||||
billShowParameter.FormId = "UHIK_ScanGetPack";
|
||||
|
||||
billShowParameter.ParentPageId = this.View.PageId;
|
||||
|
||||
var billObj = this.View.Model.DataObject;
|
||||
var billId = billObj["Id"].ToString();
|
||||
var entity = billObj["SAL_OUTSTOCKENTRY"] as DynamicObjectCollection;
|
||||
if (entity != null && entity.Any())
|
||||
{
|
||||
this.View.ShowForm(billShowParameter, (result) =>
|
||||
{
|
||||
if (result != null)
|
||||
{
|
||||
var rows = result.ReturnData as DynamicObjectCollection;
|
||||
if (rows.Any())
|
||||
{
|
||||
//var parentRows = rows.Where(w => !w["FParentRowId"].ToString().IsNullOrEmpty());
|
||||
//var subRows = rows.Where(w => w["FParentRowId"].ToString().IsNullOrEmpty());
|
||||
foreach (var item in entity)
|
||||
{
|
||||
DynamicObject row = null;
|
||||
//var parentRowId = item["ParentRowId"].ToString();
|
||||
//var rowId = item["RowId"].ToString();
|
||||
|
||||
//if (parentRowId.IsNullOrEmpty())
|
||||
//{
|
||||
// //var row = rows.FirstOrDefault(w => w["FRowId"].ToString() == item["RowId"].ToString());
|
||||
// row = parentRows.FirstOrDefault(w => w["FMaterialID_Id"].Long2Int() == item["MaterialID_Id"].Long2Int());
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// var parentMatId = item["ParentMatId_Id"].Long2Int();
|
||||
// var parentRow = parentRows.FirstOrDefault(w => w["FMaterialID_Id"].Long2Int() == parentMatId);
|
||||
// row = subRows.FirstOrDefault(w => w["FParentRowId"].ToString() == parentRow["FRowId"].ToString() && w["FMaterialID_Id"] == item["MaterialID_Id"]);
|
||||
//}
|
||||
|
||||
row = rows.FirstOrDefault(w => w["FMaterialID_Id"].Long2Int() == item["MaterialID_Id"].Long2Int());
|
||||
|
||||
if (row != null)
|
||||
{
|
||||
item["FPackBillNo"] = row["FBILLNO"].ToString();
|
||||
item["FPackBillSeq"] = row["FBILLSEQ"].Long2Int();
|
||||
item["FPackBillEntryId"] = row["FBILLENTRYID"].Long2Int();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.View.UpdateView("FEntity");
|
||||
return;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
141
14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugInEx.cs
Normal file
141
14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/OperationEventPlugInEx.cs
Normal file
@@ -0,0 +1,141 @@
|
||||
|
||||
using Kingdee.BOS.App.Data;
|
||||
using Kingdee.BOS.Core.DynamicForm;
|
||||
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;
|
||||
|
||||
namespace GZ.LJY000.Biori.SAL_OUTSTOCK
|
||||
{
|
||||
[HotUpdate, Description("销售出库单审核/反审核操作")]
|
||||
public class OperationEventPlugInEx : AbstractOperationServicePlugIn
|
||||
{
|
||||
public override void OnPreparePropertys(PreparePropertysEventArgs e)
|
||||
{
|
||||
base.OnPreparePropertys(e);
|
||||
|
||||
e.FieldKeys.Add("FRowType");
|
||||
e.FieldKeys.Add("FPackBillNo");
|
||||
e.FieldKeys.Add("FPackBillSeq");
|
||||
e.FieldKeys.Add("FPackBillEntryId");
|
||||
e.FieldKeys.Add("FRealQty");
|
||||
}
|
||||
|
||||
public override void OnAddValidators(AddValidatorsEventArgs e)
|
||||
{
|
||||
base.OnAddValidators(e);
|
||||
//添加检查校验器:
|
||||
if (this.FormOperation.OperationId == 1)
|
||||
{
|
||||
var validator = new VaildatorEventPlugInEx();//新增的校验器
|
||||
validator.EntityKey = "FEntity";
|
||||
e.Validators.Add(validator);//添加校验器
|
||||
}
|
||||
}
|
||||
|
||||
public override void EndOperationTransaction(EndOperationTransactionArgs e)
|
||||
{
|
||||
base.EndOperationTransaction(e);
|
||||
//保存8 提交9 审核1 反审核26 删除3
|
||||
if (this.FormOperation.OperationId == 1)
|
||||
{
|
||||
DoComputePackgeQty(e.DataEntitys, false);
|
||||
}
|
||||
else if (this.FormOperation.OperationId == 26)
|
||||
{
|
||||
DoComputePackgeQty(e.DataEntitys, true);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="dataEntitys"></param>
|
||||
/// <param name="isInStock"></param>
|
||||
private void DoComputePackgeQty(DynamicObject[] dataEntitys, bool isInStock)
|
||||
{
|
||||
var dataEntityList = new List<DynamicObject>();
|
||||
var sqlL = new List<string>();
|
||||
foreach (var data in dataEntitys)
|
||||
{
|
||||
foreach (var item in data["SAL_OUTSTOCKENTRY"] as DynamicObjectCollection)
|
||||
{
|
||||
var packBillNo = item["FPackBillNo"];
|
||||
var rowType = item["RowType"].ToString();
|
||||
if (!packBillNo.IsNullOrEmpty() && rowType.Equals("Parent"))
|
||||
{
|
||||
sqlL.Add($" SELECT '{packBillNo}' AS FBILLNO , {item["RealQty"]} AS QTY ");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isInStock)
|
||||
DoComputePackgeInStockQty(sqlL);
|
||||
else
|
||||
DoComputePackgeOutStockQty(sqlL);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 入库操作
|
||||
/// </summary>
|
||||
/// <param name="sqlL"></param>
|
||||
private void DoComputePackgeInStockQty(List<string> sqlL)
|
||||
{
|
||||
if (sqlL.Any())
|
||||
{
|
||||
var updSqlL = $@"/*dialect*/
|
||||
|
||||
WITH #基础数据 AS (
|
||||
{string.Join(" UNION ALL ", sqlL)}
|
||||
)
|
||||
UPDATE t0 SET t0.FQTY = t0.FQTY + t1.QTY
|
||||
,t0.FOUTSTOCKQTY = t0.FOUTSTOCKQTY - t1.QTY
|
||||
FROM T_PRD_PACKAGEINSTOCK t0
|
||||
INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO
|
||||
WHERE 1 = 1
|
||||
AND t0.FDOCUMENTSTATUS = 'C'
|
||||
|
||||
";
|
||||
|
||||
//更新组装单信
|
||||
var resData = DBUtils.Execute(this.Context, updSqlL);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 出库操作
|
||||
/// </summary>
|
||||
/// <param name="dataEntitys"></param>
|
||||
private void DoComputePackgeOutStockQty(List<string> sqlL)
|
||||
{
|
||||
if (sqlL.Any())
|
||||
{
|
||||
var updSqlL = $@"/*dialect*/
|
||||
|
||||
WITH #基础数据 AS (
|
||||
{string.Join(" UNION ALL ", sqlL)}
|
||||
)
|
||||
UPDATE t0 SET t0.FQTY = t0.FQTY - t1.QTY
|
||||
,t0.FOUTSTOCKQTY = t0.FOUTSTOCKQTY + t1.QTY
|
||||
FROM T_PRD_PACKAGEINSTOCK t0
|
||||
INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO
|
||||
WHERE 1 = 1
|
||||
AND t0.FDOCUMENTSTATUS = 'C'
|
||||
AND (t0.FQTY - t1.QTY) >= 0
|
||||
|
||||
";
|
||||
|
||||
//更新组装单信
|
||||
var resData = DBUtils.Execute(this.Context, updSqlL);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
112
14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/VaildatorEventPlugInEx.cs
Normal file
112
14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/VaildatorEventPlugInEx.cs
Normal file
@@ -0,0 +1,112 @@
|
||||
using Kingdee.BOS;
|
||||
using Kingdee.BOS.Core;
|
||||
using Kingdee.BOS.Core.DynamicForm;
|
||||
using Kingdee.BOS.Core.Validation;
|
||||
using Kingdee.BOS.Orm.DataEntity;
|
||||
using Kingdee.BOS.ServiceHelper;
|
||||
using Kingdee.BOS.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace GZ.LJY000.Biori.SAL_OUTSTOCK
|
||||
{
|
||||
/// <summary>
|
||||
/// 销售出库单审核时校验对应组装单是否有足够数量
|
||||
/// </summary>
|
||||
[Description("销售出库单审核时校验对应组装单是否有足够数量")]
|
||||
public class VaildatorEventPlugInEx : AbstractValidator
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="dataEntities"></param>
|
||||
/// <param name="validateContext"></param>
|
||||
/// <param name="ctx"></param>
|
||||
public override void Validate(ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Context ctx)
|
||||
{
|
||||
IOperationResult opResult = new OperationResult();
|
||||
|
||||
var dataEntityList = new List<DynamicObject>();
|
||||
var sqlL = new List<string>();
|
||||
foreach (var data in dataEntities)
|
||||
{
|
||||
var item = data.DataEntity;
|
||||
var packBillNo = item["FPackBillNo"];
|
||||
var rowType = item["RowType"].ToString();
|
||||
if (!packBillNo.IsNullOrEmpty() && rowType.Equals("Parent"))
|
||||
{
|
||||
sqlL.Add($" SELECT '{packBillNo}' AS FBILLNO , {item["RealQty"]} AS QTY ");
|
||||
}
|
||||
}
|
||||
|
||||
if (sqlL.Any())
|
||||
{
|
||||
var selectSql = $@"/*dialect*/
|
||||
WITH #基础数据 AS (
|
||||
{string.Join(" UNION ALL ", sqlL)}
|
||||
)
|
||||
SELECT t0.FBILLNO,t0.FMATERIALID,t0.FQTY,t0.FINSTOCKQTY,t0.FNOINSTOCKQTY,t0.FOUTSTOCKQTY
|
||||
,t0.FQTY - t1.QTY AS 'surplusQty'
|
||||
FROM T_PRD_PACKAGEINSTOCK t0
|
||||
INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO
|
||||
WHERE 1 = 1
|
||||
AND t0.FDOCUMENTSTATUS = 'C'
|
||||
|
||||
";
|
||||
|
||||
var dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, selectSql);
|
||||
if (dataList != null && dataList.Any())
|
||||
{
|
||||
foreach (var data in dataEntities)
|
||||
{
|
||||
var item = data.DataEntity;
|
||||
var packBillNo = item["FPackBillNo"].ToString();
|
||||
var rowType = item["RowType"].ToString();
|
||||
if (!packBillNo.IsNullOrEmpty() && rowType.Equals("Parent"))
|
||||
{
|
||||
var res = dataList.FirstOrDefault(w => w["FBILLNO"].ToString() == packBillNo);
|
||||
if (res != null)
|
||||
{
|
||||
var surplusQty = Convert.ToDecimal(res["surplusQty"]);
|
||||
if (surplusQty < 0)
|
||||
{
|
||||
ValidatorUnique(validateContext, data, data.DataEntity["Id"].ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="validateContext"></param>
|
||||
/// <param name="entity"></param>
|
||||
/// <param name="id"></param>
|
||||
private void ValidatorUnique(ValidateContext validateContext, ExtendedDataEntity entity, string id)
|
||||
{
|
||||
//添加校验的错误信息
|
||||
validateContext.AddError(entity,
|
||||
new ValidationErrorInfo(
|
||||
"RealQty", // 出错的字段Key,可以空
|
||||
id, // 数据包内码,必填,后续操作会据此内码避开此数据包
|
||||
entity.DataEntityIndex, // 出错的数据包在全部数据包中的顺序
|
||||
0, // 出错的数据行在全部数据行中的顺序,如果校验基于单据头,此为0
|
||||
"REF", // 错误编码,可以任意设定一个字符,主要用于追查错误来源
|
||||
$"对应组装单可出库数量不足!", // 错误的详细提示信息
|
||||
$"对应组装单可出库数量不足!", // 错误的简明提示信息
|
||||
ErrorLevel.Error)); // 错误级别:警告、错误...
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user