a
This commit is contained in:
100
00.未分类/ProductionMaterialRequisition/SaveVerification.cs
Normal file
100
00.未分类/ProductionMaterialRequisition/SaveVerification.cs
Normal file
@@ -0,0 +1,100 @@
|
||||
using Kingdee.BOS.Core.Bill.PlugIn;
|
||||
using Kingdee.BOS.Core.Bill.PlugIn.Args;
|
||||
using Kingdee.BOS.App.Data;
|
||||
using Kingdee.BOS.Orm.DataEntity;
|
||||
using Kingdee.BOS.Core.DynamicForm;
|
||||
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
|
||||
using Kingdee.BOS.Core.Permission;
|
||||
using Kingdee.BOS.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
|
||||
using Kingdee.BOS.Core.Metadata.Util;
|
||||
|
||||
namespace ProductionMaterialRequisition
|
||||
{
|
||||
[HotUpdate, Description("生产领料单保存库存数量验证")]
|
||||
public class SaveVerification : AbstractBillPlugIn
|
||||
{
|
||||
public override void BeforeSave(BeforeSaveEventArgs e)
|
||||
{
|
||||
|
||||
base.BeforeSave(e);
|
||||
|
||||
if (VerificationStock())
|
||||
{
|
||||
//this.View.ShowMessage("保存验证失败", MessageBoxType.Error);
|
||||
e.Cancel = true;
|
||||
}
|
||||
}
|
||||
|
||||
public bool VerificationStock()
|
||||
{
|
||||
var details = this.View.BusinessInfo.GetEntity("FEntity");
|
||||
|
||||
var entrys = this.View.Model.GetEntityDataObject(details);
|
||||
if (entrys == null || !entrys.Any())
|
||||
return false;
|
||||
|
||||
var id = this.View.Model.DataObject["Id"].Long2Int();
|
||||
var inDBWhere = $" AND tpp.FID !={id} ";
|
||||
if (id == 0)
|
||||
inDBWhere = string.Empty;
|
||||
|
||||
var selectActualQtySQL = $@"
|
||||
SELECT
|
||||
tbm.FMATERIALID,
|
||||
tbm.FUSEORGID,
|
||||
tbm.FMASTERID,
|
||||
SUM ( tsi.FBASEQTY ) - SUM ( tppd.FACTUALQTY ) AS 'Difference'
|
||||
FROM
|
||||
T_PRD_PICKMTRL tpp
|
||||
LEFT JOIN T_PRD_PICKMTRLDATA tppd ON tpp.FID= tppd.FID
|
||||
LEFT JOIN T_BD_MATERIAL tbm ON tbm.FMATERIALID = tppd.FMATERIALID
|
||||
LEFT JOIN T_STK_INVENTORY tsi ON tbm.FMASTERID = tsi.FMATERIALID
|
||||
AND tppd.FSTOCKID= tsi.FSTOCKID
|
||||
WHERE
|
||||
( tpp.FDOCUMENTSTATUS = 'A' OR tpp.FDOCUMENTSTATUS = 'Z' )
|
||||
AND tsi.FISEFFECTIVED= 1
|
||||
AND tsi.fstockstatusid = 10000
|
||||
AND FBASEQTY > 0 {inDBWhere}
|
||||
GROUP BY
|
||||
tbm.FUSEORGID,
|
||||
tbm.FMATERIALID,
|
||||
tbm.FMASTERID ";
|
||||
|
||||
DynamicObjectCollection actualQtylData = DBUtils.ExecuteDynamicObject(this.Context, $"/*dialect*/{selectActualQtySQL}");
|
||||
|
||||
StringBuilder msg = new StringBuilder();
|
||||
|
||||
var tempTockOrgId = this.View.Model.GetValue("FStockOrgId");
|
||||
|
||||
var stockOrgId = tempTockOrgId == null ? 0 : tempTockOrgId.Long2Int();
|
||||
|
||||
foreach (var entry in entrys)
|
||||
{
|
||||
var tempObject = entry["MaterialId"] as DynamicObject;
|
||||
|
||||
var tempEntity = actualQtylData.FirstOrDefault(w =>
|
||||
w["FMATERIALID"].Long2Int() == entry["MaterialId_Id"].Long2Int()
|
||||
&& w["FUSEORGID"].Long2Int() == stockOrgId);
|
||||
|
||||
if (tempEntity == null)
|
||||
msg.AppendLine($"物料编码:{tempObject["Number"]},物料名称:{tempObject["Name"]},可用库存:0;");
|
||||
else if (tempEntity != null && tempEntity["Difference"].Long2Int() > entry["MaterialId_Id"].Long2Int())
|
||||
msg.AppendLine($"物料编码:{tempObject["Number"]},物料名称:{tempObject["Name"]},可用库存:{tempEntity["Difference"]};");
|
||||
}
|
||||
|
||||
if (msg.Length > 0)
|
||||
this.View.ShowMessage(msg.ToString(), MessageBoxType.Error);
|
||||
|
||||
return msg.Length > 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user