using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms; using com.steering.mes.mcp.entity; using Core.Mes.Client.Comm.Server; using Core.Mes.Client.Comm.Tool; using Core.StlMes.Client.Mcp.Control.Common; using Core.StlMes.Client.Mcp.Control.Entity; using CoreFS.CA06; using Infragistics.Win; using Infragistics.Win.UltraWinGrid; using Infragistics.Win.UltraWinToolbars; namespace Core.StlMes.Client.Mcp.Control { public partial class CommonScrap : FrmBase { private string _batchNo = ""; private readonly List SignSuspiciousMatNo = new DataSourceList(); private bool _isScrap = true; public CommonScrap(OpeBase ob) { InitializeComponent(); this.ob = ob; dataList = new List(); } public CommonScrap(OpeBase ob, List list1, Func> GetMatNo, string FailCode, string BatchNo, bool ShowChild = false ,bool isScrap = true) { InitializeComponent(); this.ob = ob; _batchNo = BatchNo; _isScrap = isScrap; EntityHelper.ShowGridCaption(ultraGridDetailDes1.DisplayLayout.Bands[0]); EntityHelper.ShowGridCaption(ultraGridDetailDes1.DisplayLayout.Bands[1]); ultraGridDetailDes1.DisplayLayout.Override.AllowRowFiltering = DefaultableBoolean.False; dataList = list1 == null ? new List() : list1.Select(p => p.Clone()).ToList(); //下拉废品原因 var dt2 = ServerHelper.GetData("com.steering.mes.mcp.collarMaterial.ComBaseInfo.getBaseInfo", new object[] { FailCode }, ob); kreason.DataSource = dt2; kreason.DisplayMember = "BASENAME"; kreason.ValueMember = "BASECODE"; YdmBaseClass.SetComboItemHeight(kreason); var list = GetMatNo(); if (list == null) return; if (ShowChild) { PortHttBatch = new DataSourceList(); foreach (var data in list) { for (int i = 0; i < data.OutnumCut; i++) { var temp = data.Clone(); temp.OutnumCut = 1; temp.ActLen = temp.ActLen/data.OutnumCut; temp.ActWeight = temp.ActWeight/data.OutnumCut; temp.ActTheoryWeight = temp.ActTheoryWeight/data.OutnumCut; temp.MatNo = temp.MatNo + (data.OutnumCut<=1?"": ((i + 1).ToString().PadLeft(2, '0'))); temp.BarCode = temp.BarCode + (data.OutnumCut<=1?"": ( "-"+ (i + 1).ToString().PadLeft(2, '0'))); PortHttBatch.Add(temp); } } } else { PortHttBatch = list; } SignSuspiciousMatNo = dataList.SelectMany(p => p.MatNo.Split(',').ToList()).ToList(); mchBugDEntityBindingSource.DataSource = dataList; ultraGridDetailDes1.DisplayLayout.Bands[1].Columns["BarCode"].PerformAutoResize(Infragistics.Win.UltraWinGrid.PerformAutoSizeType.AllRowsInBand, true); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); ultraGridDetailDes1.DisplayLayout.Override.HeaderClickAction = HeaderClickAction.Default; ultraGridDetailDes1.DisplayLayout.Override.AllowRowFiltering = DefaultableBoolean.False; } private List PortHttBatch { get; set; } public List dataList { get; private set; } private void ultraToolbarsManager1_ToolClick(object sender, ToolClickEventArgs e) { switch (e.Tool.Key) { case "Save": Save(); break; case "Close": CloseFrm(); break; } } private void CloseFrm() { DialogResult = DialogResult.Cancel; Close(); } /// /// 保存可疑、剔除品 /// private void Save() { ultraGridDetailDes1.UpdateData(); var list1 = mchBugDEntityBindingSource.DataSource as List; list1 = list1.Where(p => p.Chk).Select(p => { var list = p.ListData.Where(q => q.Check).ToList(); p.MatNo = list.Any() ? list .Select(q => q.MatNo) .Aggregate((a, b) => a + (a == "" ? "" : ",") + b) : ""; p.FailWt = list.Any() ? list .Sum(q => q.ActTheoryWeight ?? 0) : 0; return p; }).ToList(); foreach (var MchBugDEntity in list1) { if (MchBugDEntity.FailTypeCode == "") { MessageUtil.ShowTips("原因不能为空,请选择!"); return; } if ((MchBugDEntity.FailNum == null) || (MchBugDEntity.FailNum <= 0)) { MessageUtil.ShowTips("支数不能为空或者为零支,请输入!"); return; } } dataList = list1; DialogResult = DialogResult.OK; } private void ultraGridDetailDes1_CellChange(object sender, CellEventArgs e) { var UltraGrid = sender as UltraGrid; UltraGrid.UpdateData(); if (e.Cell.Column.Key == "Chk") GridEdite(e.Cell.Row); else if (e.Cell.Column.Key == "FailTypeCode") e.Cell.Row.Cells["FailTypeName"].Value = e.Cell.Text; else if ((e.Cell.Column.Key == "Check") && e.Cell.Row.HasParent()) { var t = e.Cell.Row.ListObject as PortMchBatchSampleResultEntityWithCheck; if((bool)e.Cell.Value) AddSuspicious(t); else RemoveSuspicious(t); UltraGrid.UpdateData(); var MchBugDEntity = e.Cell.Row.ParentRow.ListObject as MchBugDEntity; MchBugDEntity.FailNum = MchBugDEntity.ListData.Count(p => p.Check); } else if ((e.Cell.Column.Key == "FailNum")) { var MchBugDEntity = e.Cell.Row.ListObject as MchBugDEntity; if (!e.Cell.Row.HasChild()) { MessageBox.Show("无足够的合格管!"); MchBugDEntity.FailNum = 0; UltraGrid.PerformAction(UltraGridAction.ExitEditMode); } else { if ((MchBugDEntity != null) && (MchBugDEntity.FailNum != null)) { var signedData = MchBugDEntity.ListData.Where(p => p.Check).ToList(); if (signedData.Count >= MchBugDEntity.FailNum) signedData.Skip((int) MchBugDEntity.FailNum).ToList().ForEach(RemoveSuspicious); else MchBugDEntity.ListData.Where(p => { if (_isScrap && (p.InstoreFlag == "已入库" || p.InstoreFlag == "在途")) return false; if (p.MatStatus != "合格") return false; // if (_isScrap && p.TrFlag == "1") return false; return !SignSuspiciousMatNo.Contains(p.MatNo); } ) .OrderBy( p => p.IsSamplePipe ).ThenBy(p => p.MeasuringSeq).ThenBy(p => p.MatNo) .Take((int) MchBugDEntity.FailNum - signedData.Count).ToList().ForEach(AddSuspicious); var listCheck = MchBugDEntity.ListData.Where(p => p.Check).ToList(); int Count = listCheck.Count; if (Count < MchBugDEntity.FailNum) { MessageBox.Show("无足够的合格管!"); MchBugDEntity.FailNum = Count; UltraGrid.PerformAction(UltraGridAction.ExitEditMode); } } } } UltraGrid.UpdateData(); if (e.Cell.Row.HasParent()) UltraGrid.PerformAction(UltraGridAction.ExitEditMode); UltraGrid.Refresh(); } /// /// ulltragrid控件受勾影响(打钩可编辑,不打勾不能编辑)** /// /// private void GridEdite(UltraGridRow row) { if (row.HasParent()) return; if (row.GetValue("Chk") == "True") { foreach (var cell in row.Cells) if (cell.Column.CellActivation == Activation.AllowEdit) cell.Activation = Activation.AllowEdit; } else { foreach (var cell in row.Cells) { if (cell.Column.Key.Contains("Chk")) continue; if (cell.Column.CellActivation == Activation.AllowEdit) cell.Activation = Activation.ActivateOnly; } } ultraGridDetailDes1.UpdateData(); } private void ultraGridDetailDes_AfterRowInsert(object sender, RowEventArgs e) { var MchBugDEntity = e.Row.ListObject as MchBugDEntity; MchBugDEntity.BatchNo = _batchNo; if (PortHttBatch!=null) MchBugDEntity.ListData = PortHttBatch.Select(q => q.Clone()).ToList(); ultraGridDetailDes1.DisplayLayout.Bands[1].Columns["BarCode"].PerformAutoResize(Infragistics.Win.UltraWinGrid.PerformAutoSizeType.AllRowsInBand, true); GridEdite(e.Row); } private void ultraGridDetailDes1_InitializeTemplateAddRow(object sender, InitializeTemplateAddRowEventArgs e) { if (ultraGridDetailDes1.ActiveRow == null) e.TemplateAddRow.Activated = true; } public void AddSuspicious(PortMchBatchSampleResultEntityWithCheck t) { try { if (_isScrap && t.InstoreFlag == "已入库") { MessageBox.Show("该管号已入库!"); t.Check = false; return; } if (_isScrap && t.InstoreFlag == "在途") { MessageBox.Show("该管号正在途运输!"); t.Check = false; return; } if (t.MatStatus != "合格") { MessageBox.Show("该管号不是合格管号!"); t.Check = false; return; } /* if (_isScrap && t.TrFlag == "1") { MessageBox.Show("该管号已经经过测量点,无法剔废!"); t.Check = false; return; }*/ if (SignSuspiciousMatNo.Contains(t.MatNo)) { MessageBox.Show("该管号已被标记!"); t.Check = false; return; } SignSuspiciousMatNo.Add(t.MatNo); t.Check = true; } catch (Exception ex) { MessageBox.Show(ex.Message); t.Check = false; } } public void RemoveSuspicious(PortMchBatchSampleResultEntityWithCheck t) { try { t.Check = false; SignSuspiciousMatNo.Remove(t.MatNo); } catch (Exception ex) { } } private void ultraGridDetailDes2_InitializeRow(object sender, InitializeRowEventArgs e) { if (e.Row.HasParent()) if (!e.Row.Cells["MatStatus"].Text.Equals("合格")) e.Row.Cells["MatStatus"].Appearance.ForeColor = Color.Red; } } }