Files
GateDge2023_ljy/ProductionMaterialRequisition/SaveVerification.cs
2023-12-08 23:53:07 +08:00

101 lines
3.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.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;
}
}
}