using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using Kingdee.BOS.Core.Bill; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Newtonsoft.Json.Linq; using ZD.Cloud.Logger; using ZD.Cloud.WebApi; using Demo.Model.Model; using System.Diagnostics; using System.Linq; using Kingdee.BOS.Core.Bill.PlugIn.Args; namespace Demo.BillView.PRD { /// /// 日计划用料清单变更单 表单插件 /// [Description("日计划用料清单变更单表单插件")] [Kingdee.BOS.Util.HotUpdate] public class Pro_DayPlanBG : AbstractBillPlugIn { CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); public override void DataChanged(DataChangedEventArgs e) { base.DataChanged(e); var model = this.View.Model; double FHQty = Convert.ToDouble(model.GetValue("FHQty")); if (e.Field.Key.Contains("FUseRateNew")) { if (e.OldValue == e.NewValue || e.NewValue == null) return; double FNumerator = Convert.ToDouble(model.GetValue("FNumerator", e.Row));//分子 double FDenominator = Convert.ToDouble(model.GetValue("FDenominator", e.Row));//分母 double FUseRateNew = Convert.ToDouble(model.GetValue("FUseRateNew", e.Row));//使用比例 double Hqty; if (FNumerator == 0 || FDenominator == 0) { Hqty = Math.Ceiling(FHQty * (FUseRateNew / 100)); } Hqty = Math.Ceiling((FNumerator / FDenominator) * FHQty * (FUseRateNew / 100)); this.View.Model.SetValue("FHQtyMustNew", Hqty, e.Row);//新计划数量 var m = e.Row; //项次 var pro = model.GetValue("FReplaceGroup", m).ToString(); var entrys = model.DataObject.GetValue("FEntity"); //LogService.WriteAsync(entrys); //查找到的同批项次 var finds = entrys.Where(entry => entry.GetValue("FReplaceGroup") == pro && entry.GetValue("Seq") != (m + 1)); if (finds.Count() == 0) return; var seq = finds.First().GetValue("Seq"); model.SetValue("FUseRateNew", 100 - Convert.ToDouble(e.NewValue), seq - 1); } if (e.Field.Key.Contains("FHQtyMustNew")) { if (e.OldValue == e.NewValue || e.NewValue == null) return; var m = e.Row; double FNumerator = Convert.ToDouble(model.GetValue("FNumerator", e.Row));//分子 double FDenominator = Convert.ToDouble(model.GetValue("FDenominator", e.Row));//分母 double FHQtyMustNew = Convert.ToDouble(model.GetValue("FHQtyMustNew", e.Row));//新计划数量 double Hqty; if (FNumerator == 0 || FDenominator == 0) { Hqty = Math.Ceiling(FHQtyMustNew / FHQty * 100); } Hqty = Math.Ceiling(FHQtyMustNew / ((FNumerator / FDenominator) * FHQty) * 100); this.View.Model.SetValue("FUseRateNew", Hqty, e.Row);//新用料比例 } } public override void BeforeSave(BeforeSaveEventArgs e) { base.BeforeSave(e); var entrys = this.View.Model.DataObject.GetValue("FEntity"); string resultMes = ""; foreach (var entry in entrys) { var fReplaceGroup = entry["FReplaceGroup"].ToString(); //LogService.WriteAsync(entrys); //查找到的同批项次 var finds = entrys.Where(trys => trys.GetValue("FReplaceGroup") == fReplaceGroup); if (finds.Count() > 1) return; string sql = string.Format(@"/*dialect*/ select count(*) from Sc_DayPlanPPBomBillSub a join Sc_DayPlanPPBomBillMain b on a.FID = b.FID where FREPLACEGROUP = '{0}' and FHMaterSubID<> '{1}' and(FPickedQty + FTranslateQty) > FHQty * ((100 - {2}) / 100.0) * FDwyl and a.FID = {3}", entry["FReplaceGroup"].ToString(), entry["FHMaterSubID_Id"].ToString(), entry["FUseRateNew"].ToString(), entry["FDayPlanId"].ToString()); int result = DBServiceHelper.ExecuteScalar(Context, sql, 0); if (result > 0) resultMes += $"行号:" + entry["Seq"].ToString() + ",存在替代料关系,使用比例变更后超出了领用数量"; } if (resultMes != "") { e.Cancel = true; this.View.ShowErrMessage(resultMes); } } } }