Files

268 lines
14 KiB
C#
Raw Normal View History

2024-07-16 10:33:50 +08:00
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using BGP.K3.GSP.Business.PlugIn.Template;
using BGP.K3.GSP.Contracts;
using BGP.K3.GSP.Core.Text;
using Kingdee.BOS;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.Core.BD;
namespace GZ.BGP.K3.GSP.Business.PlugIn.StorageAndMaintenance
{
[Description("GSP药品养护计划表单插件")]
public class DrugMaintPlanEdits : AbstractGspBillPlugIn
{
public override string FEntityKey => "FENTITY";
public override string FEntityorm => "T_BGP_MAINTEPLANB";
public override string Materialidorm => "F_BGP_MATERIALNO";
public override string MaterialidKey => "F_BGP_MATERIALNO";
public override string LOTorm => "F_BGP_BATCHNO";
public override string LOTKey => "F_BGP_BATCHNO";
public override string ProduceDateorm => "F_BGP_PRODUCTDATE";
public override string ApprovalNoMKey => "F_BGP_APPROVALNOM";
public override string ApprovalNoKey => "F_BGP_APPROVALNOALL";
public override bool ISadd => false;
public override bool ISback => true;
public override DynamicObject RequestOrg => Model.GetValue("F_BGP_OrgId") as DynamicObject;
public override string DeptFieldKey => "F_BGP_Department";
public override string EmpFieldKey => "F_BGP_Staff";
public override void BarItemClick(BarItemClickEventArgs e)
{
_ = e.BarItemKey;
DynamicObject dataObject = Model.DataObject;
string barItemKey;
if ((barItemKey = e.BarItemKey) == null || !(barItemKey == "tbButtonComDraw"))
{
return;
}
DynamicObject dynamicObject = dataObject["F_BGP_OrgId"] as DynamicObject;
string leadtime = Model.GetValue("F_BGP_LeadTime").ToString();
if (dynamicObject == null)
{
return;
}
DynamicObjectCollection dynamicObjectCollection = ReceivableDetail1(base.Context, dynamicObject[0], leadtime);
Entity entity = base.View.BusinessInfo.GetEntity("FEntity");
base.View.Model.GetEntityDataObject(entity);
for (int num = Model.GetEntryRowCount(entity.Key) - 1; num > -1; num--)
{
base.View.Model.DeleteEntryRow("FEntity", num);
}
int count = dynamicObjectCollection.Count;
if (count < 1)
{
base.View.ShowNotificationMessage("无可提取数据!");
}
else
{
List<string> list = new List<string>();
for (int i = 0; i < count; i++)
{
if (!list.Contains(dynamicObjectCollection[i]["F_BGP_INVENTORYID"].ToString()))
{
list.Add(dynamicObjectCollection[i]["F_BGP_INVENTORYID"].ToString());
base.View.Model.CreateNewEntryRow("FEntity");
base.View.Model.SetValue("F_BGP_MaterialNo", dynamicObjectCollection[i]["FMaterialId"], i);
base.View.InvokeFieldUpdateService("FMaterialId", i);
base.View.Model.SetValue("F_BGP_Warehouse", dynamicObjectCollection[i]["FSTOCKID"], i);
base.View.Model.SetValue("F_BGP_Inventory", dynamicObjectCollection[i]["FBaseQty"], i);
base.View.Model.SetValue("F_BGP_BatchNo", dynamicObjectCollection[i]["FLot"], i);
base.View.Model.SetValue("F_BGP_Positions", dynamicObjectCollection[i]["FStockLocId"], i);
base.View.Model.SetValue("F_BGP_OverTime", dynamicObjectCollection[i]["overday"], i);
if (ConvertExtensionMethods.Pstring(dynamicObjectCollection[i]["F_BGP_ShouldMainteDate"]) != "0001-01-01 00:00:00")
{
base.View.Model.SetValue("F_BGP_ShouldMainteDate", dynamicObjectCollection[i]["F_BGP_ShouldMainteDate"], i);
}
base.View.Model.SetValue("F_BGP_MeasuringUnit", dynamicObjectCollection[i]["FStockUnitId"], i);
base.View.Model.SetValue("F_BGP_UNITID", dynamicObjectCollection[i]["FBaseUnitId"], i);
if (ConvertExtensionMethods.Pstring(dynamicObjectCollection[i]["F_BGP_MAINTEPLANDATE"]) != "0001-01-01 00:00:00")
{
base.View.Model.SetValue("F_BGP_MAINTEPLANDATE", dynamicObjectCollection[i]["F_BGP_MAINTEPLANDATE"], i);
}
base.View.Model.SetValue("F_BGP_MAINTECN", dynamicObjectCollection[i]["FBaseQty"], i);
if (ConvertExtensionMethods.Pstring(dynamicObjectCollection[i]["FPRODUCEDATE"]) != "0001-01-01 00:00:00")
{
base.View.Model.SetValue("F_BGP_ProductDate", dynamicObjectCollection[i]["FPRODUCEDATE"], i);
}
if (ConvertExtensionMethods.Pstring(dynamicObjectCollection[i]["FEXPIRYDATE"]) != "0001-01-01 00:00:00")
{
base.View.Model.SetValue("F_BGP_EffDate", dynamicObjectCollection[i]["FEXPIRYDATE"], i);
}
base.View.Model.SetValue("F_BGP_BaseQty", dynamicObjectCollection[i]["FBaseQty"], i);
base.View.Model.SetValue("F_BGP_InventoryState", dynamicObjectCollection[i]["FStockStatusId"], i);
base.View.Model.SetValue("F_BGP_OwnerTypeId", dynamicObjectCollection[i]["FOwnerTypeId"], i);
base.View.Model.SetValue("F_BGP_OwnerId", dynamicObjectCollection[i]["FOwnerId"], i);
base.View.Model.SetValue("F_BGP_KeeperTypeId", dynamicObjectCollection[i]["FKeeperTypeId"], i);
base.View.Model.SetValue("F_BGP_KeeperId", dynamicObjectCollection[i]["FKeeperId"], i);
base.View.Model.SetValue("F_BGP_AuxPropId", dynamicObjectCollection[i]["FAuxPropId"], i);
base.View.Model.SetValue("F_BGP_SecUnitId", dynamicObjectCollection[i]["FSecUnitId"], i);
base.View.Model.SetValue("F_BGP_SecQty", dynamicObjectCollection[i]["FSecQty"], i);
base.View.Model.SetValue("F_BGP_MaintDate", dynamicObjectCollection[i]["Maintdate"], i);
base.View.Model.SetValue("F_BGP_INVENTORYID", dynamicObjectCollection[i]["F_BGP_INVENTORYID"], i);
}
}
}
base.View.UpdateView("F_BGP_MaterialNo");
base.View.UpdateView("FEntity");
}
public override void EntryBarItemClick(BarItemClickEventArgs e)
{
string text;
if ((text = e.BarItemKey.ToUpper()) != null && text == "TBLOTCR_BGP")
{
UpdateMaintDt();
}
}
public void UpdateMaintDt()
{
if (!(Model.DataObject["F_BGP_OrgId"] is DynamicObject dynamicObject))
{
return;
}
StringBuilder stringBuilder = new StringBuilder();
SqlParam[] array = new SqlParam[1]
{
new SqlParam("@FORG", KDDbType.String, dynamicObject[0])
};
stringBuilder.Append($" SELECT *from T_STK_INVENTORY where FSTOCKORGID=@FORG ");
DynamicObjectCollection source = DBServiceHelper.ExecuteDynamicObject(base.Context, stringBuilder.ToString(), null, null, CommandType.Text, array);
Entity entity = base.View.BusinessInfo.GetEntity("FEntity");
DynamicObjectCollection subEntityRows = base.View.Model.GetEntityDataObject(entity);
Model.GetEntryRowCount(entity.Key);
List<DynamicObject> lidy = new List<DynamicObject>();
List<int> liin = new List<int>();
int num = 0;
int num2 = 0;
foreach (DynamicObject item in subEntityRows)
{
DynamicObject dynamicObject2 = source.Where((DynamicObject p) => p["fid"].ToString() == ConvertExtensionMethods.Pstring(item["F_BGP_INVENTORYID"])).FirstOrDefault();
if (dynamicObject2 != null && ConvertExtensionMethods.Pdecimal(dynamicObject2["FBASEQTY"]) < ConvertExtensionMethods.Pdecimal(item["F_BGP_BaseQty"]) - ConvertExtensionMethods.Pdecimal(item["F_BGP_BaseMaintQty"]))
{
lidy.Add(dynamicObject2);
liin.Add(num2);
num++;
}
num2++;
}
if (num > 0)
{
base.View.ShowMessage("检验结果有" + num + "笔的库存数量已经小于是否需要自动校正数量,并留存变更记录,且自动下推(【是】=执行/【否】=取消)", MessageBoxOptions.YesNo, delegate (MessageBoxResult result)
{
if (result == MessageBoxResult.Yes)
{
UpdateDt(liin, subEntityRows, lidy);
}
});
}
else
{
base.View.ShowMessage("检验结果库存数量数据正常,无需调整");
}
}
public void UpdateDt(List<int> liseq, DynamicObjectCollection subEntityRows, List<DynamicObject> lidy)
{
int num = Model.GetEntryRowCount("F_BGP_FChangeRecord");
IMaintInventoryService maintInventoryService = GspServiceFactory.GetMaintInventoryService(base.Context);
Dictionary<string, UnitConvert> dictionary = new Dictionary<string, UnitConvert>();
foreach (int item in liseq)
{
base.View.Model.CreateNewEntryRow("F_BGP_FChangeRecord");
DynamicObject dynamicObject = lidy.Where((DynamicObject p) => p["fid"].ToString() == subEntityRows[item]["F_BGP_INVENTORYID"].ToString()).FirstOrDefault();
base.View.Model.SetValue("F_BGP_MaterialNoCR", subEntityRows[item]["F_BGP_MaterialNo"], num);
base.View.Model.SetValue("F_BGP_UnitIDCR", subEntityRows[item]["F_BGP_MeasuringUnit"], num);
base.View.Model.SetValue("F_BGP_MainteCnOLD", subEntityRows[item]["F_BGP_MainteCn"], num);
base.View.Model.SetValue("F_BGP_InventoryOld", subEntityRows[item]["F_BGP_Inventory"], num);
base.View.Model.SetValue("F_BGP_UnitICR", subEntityRows[item]["F_BGP_UnitID"], num);
base.View.Model.SetValue("F_BGP_BaseQtyOld", subEntityRows[item]["F_BGP_BaseQty"], num);
base.View.Model.SetValue("F_BGP_DateCR", DateTime.Now, num);
base.View.Model.SetValue("F_BGP_INVENTORYIDCR", subEntityRows[item]["F_BGP_INVENTORYID"], num);
decimal num2 = ConvertExtensionMethods.Pdecimal(dynamicObject["FBaseQty"]);
decimal num3 = ConvertExtensionMethods.Pdecimal(subEntityRows[item]["F_BGP_BaseMaintQty"]);
decimal num4 = num2 + num3;
decimal num5 = maintInventoryService.ExchangeUnitQty(base.Context, ConvertExtensionMethods.Pint64(subEntityRows[item]["F_BGP_MaterialNo_id"]), ConvertExtensionMethods.Pint64(subEntityRows[item]["F_BGP_MaterialNo_id"]), ConvertExtensionMethods.Pint64(subEntityRows[item]["F_BGP_UnitID_id"]), ConvertExtensionMethods.Pint64(subEntityRows[item]["F_BGP_MeasuringUnit_id"]), num4, ref dictionary);
base.View.Model.SetValue("F_BGP_BaseQtyNew", num4, num);
base.View.Model.SetValue("F_BGP_InventoryNew", num4, num);
base.View.Model.SetValue("F_BGP_MainteCnNew", num5, num);
base.View.Model.SetValue("F_BGP_MainteCn", num5, item);
base.View.Model.SetValue("F_BGP_Inventory", num4, item);
base.View.Model.SetValue("F_BGP_BaseQty", num4, item);
num++;
}
BusinessDataServiceHelper.Save(base.Context, base.View.BusinessInfo, base.View.Model.DataObject);
base.View.ShowMessage("更新完毕");
}
public static DynamicObjectCollection ReceivableDetail1(Context cxt, object fOrg, string leadtime)
{
StringBuilder stringBuilder = new StringBuilder();
SqlParam[] array = new SqlParam[1]
{
new SqlParam("@FORG", KDDbType.String, fOrg)
};
stringBuilder.Append($@"
SELECT t0.fid F_BGP_INVENTORYID
,t0.FSTOCKID,t1.FMaterialId,t0.FLot,t0.FStockUnitId,t0.FBaseUnitId
,t0.FQty,t0.FBaseQty,t0.FStockStatusId,t0.FStockLocId
,DATEDIFF(DAY,t3.Maintdate,GETDATE()) - t2.F_BGP_DAY + 1 overday
,DATEADD(DAY,(t2.F_BGP_DAY + 0.7),t3.Maintdate) as F_BGP_ShouldMainteDate
,ISNULL(t3.FPRODUCEDATE,t0.FPRODUCEDATE) FPRODUCEDATE
,ISNULL(t3.FEXPIRYDATE,t0.FEXPIRYDATE) FEXPIRYDATE
,GETDATE() F_BGP_MAINTEPLANDATE,FOwnerTypeId,FOwnerId,FKeeperTypeId,FKeeperId
,FStockStatusId,FAuxPropId,FSecQty,FSecUnitId,t3.Maintdate
FROM T_STK_INVENTORY t0
INNER JOIN T_BD_MATERIAL t1 on t0.FMATERIALID = t1.FMASTERID AND t0.FSTOCKORGID = t1.FUSEORGID
INNER JOIN T_BGP_MaintainType t2 on t1.F_BGP_MAINTAINCLASS = t2.FID AND t2.FNUMBER = '01'
INNER JOIN (
SELECT ISNULL(t3.F_BGP_MaintDate,t3.FInStockDate) Maintdate,t3.FLOTID,t3.FPRODUCEDATE,t3.FEXPIRYDATE
FROM T_BD_LOTMASTER t3
) t3 on t3.FLOTID=t0.FLot
WHERE 1 = 1
AND DATEDIFF(DAY,t3.Maintdate ,GETDATE()) > t2.F_BGP_DAY - {leadtime} AND t0.FSTOCKORGID = @FORG
AND FBaseQty > 0 AND t1.FDOCUMENTSTATUS='C' AND FStockStatusId = 10000
AND NOT EXISTS (
SELECT 1 FROM T_BGP_MaintePlanB t4
WHERE t4.F_BGP_BaseQty > t4.F_BGP_BaseMaintQty AND t4.F_BGP_INVENTORYID= t0.fid
)
ORDER BY F_BGP_DosageForm,FSTOCKID,FMaterialId ");
return DBServiceHelper.ExecuteDynamicObject(cxt, stringBuilder.ToString(), null, null, CommandType.Text, array);
}
}
}