using System; using System.Collections.Generic; using System.Linq; using System.Windows; using Comal.Classes; using InABox.Clients; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; using Microsoft.Office.Interop.Outlook; using Exception = System.Exception; namespace PRSDesktop { public class RequisitionItemGrid : DynamicDataGrid { //public int Boxes { get; set; } public RequisitionItemGrid() { Options.BeginUpdate() .Add(DynamicGridOption.RecordCount) .Add(DynamicGridOption.SelectColumns) .Add(DynamicGridOption.AddRows) .Add(DynamicGridOption.EditRows) .Add(DynamicGridOption.DeleteRows) .Add(DynamicGridOption.FilterRows) .Add(DynamicGridOption.MultiSelect) .EndUpdate(); HiddenColumns.Add(x => x.Code); HiddenColumns.Add(x => x.BarCode); HiddenColumns.Add(x => x.RequisitionLink.JobLink.ID); HiddenColumns.Add(x => x.RequisitionLink.ID); HiddenColumns.Add(x => x.RequisitionLink.Filled); HiddenColumns.Add(x => x.RequisitionLink.Archived); HiddenColumns.Add(x => x.Product.ID); HiddenColumns.Add(x => x.Product.Deleted); HiddenColumns.Add(x => x.Product.DefaultStyle.ID); HiddenColumns.Add(x => x.Product.Dimensions.Unit.ID); HiddenColumns.Add(x => x.Product.Dimensions.Length); HiddenColumns.Add(x => x.Product.Dimensions.Width); HiddenColumns.Add(x => x.Product.Dimensions.Height); HiddenColumns.Add(x => x.Product.Dimensions.Weight); HiddenColumns.Add(x => x.Product.Dimensions.UnitSize); HiddenColumns.Add(x => x.Product.Dimensions.Value); HiddenColumns.Add(x => x.Product.Dimensions.Unit.HasQuantity); HiddenColumns.Add(x => x.Product.Dimensions.Unit.HasLength); HiddenColumns.Add(x => x.Product.Dimensions.Unit.HasWidth); HiddenColumns.Add(x => x.Product.Dimensions.Unit.HasWeight); HiddenColumns.Add(x => x.Product.Dimensions.Unit.HasHeight); HiddenColumns.Add(x => x.Product.Dimensions.Unit.Formula); HiddenColumns.Add(x => x.Product.Dimensions.Unit.Format); //HiddenColumns.Add(x => x.Product.Units.ID); HiddenColumns.Add(x => x.Product.NonStock); HiddenColumns.Add(x => x.Location.ID); HiddenColumns.Add(x => x.Location.Code); HiddenColumns.Add(x => x.Location.Description); HiddenColumns.Add(x => x.Location.Deleted); HiddenColumns.Add(x => x.Style.ID); HiddenColumns.Add(x => x.Style.Code); HiddenColumns.Add(x => x.Picked); ActionColumns.Add(new DynamicMenuColumn(SelectHolding, (row) => (row.Get(c=>c.Product.ID) == Guid.Empty) || row.Get(c => c.Product.NonStock) == true ? DynamicMenuStatus.Hidden : DynamicMenuStatus.Enabled) ); } private void SelectHolding(DynamicMenuColumn column, CoreRow? row) { using (new WaitCursor()) { var holdings = new Client().Query( new Filter(x => x.Product.ID).IsEqualTo(row.Get(c => c.Product.ID)), new Columns(x => x.Location.ID) .Add(x => x.Location.Code) .Add(x => x.Style.ID) .Add(x => x.Style.Code) .Add(x => x.Job.ID) .Add(x => x.Job.JobNumber) .Add(x => x.Dimensions.Unit.ID) .Add(x => x.Dimensions.Length) .Add(x => x.Dimensions.Width) .Add(x => x.Dimensions.Height) .Add(x => x.Dimensions.Weight) .Add(x => x.Dimensions.UnitSize) .Add(x => x.Dimensions.Value) .Add(x => x.Dimensions.Unit.HasQuantity) .Add(x => x.Dimensions.Unit.HasLength) .Add(x => x.Dimensions.Unit.HasWidth) .Add(x => x.Dimensions.Unit.HasWeight) .Add(x => x.Dimensions.Unit.HasHeight) .Add(x => x.Dimensions.Unit.Formula) .Add(x => x.Dimensions.Unit.Format) .Add(x => x.Units), new SortOrder(x => x.Location.Code).ThenBy(x => x.Style.Code).ThenBy(x => x.Dimensions.UnitSize) ); foreach (var holding in holdings.Rows) { String text = $"{holding.Get(c => c.Location.Code)}: {holding.Get(c => c.Units)} @ {holding.Get(c => c.Dimensions.UnitSize)}"; String style = holding.Get(c => c.Style.Code); if (!String.IsNullOrWhiteSpace(style)) text = $"{text} ({style})"; column.AddItem(text, null, (sel) => SelectLocation(holding,sel)); } } } private void SelectLocation(CoreRow holdingrow, CoreRow itemrow) { var item = itemrow.ToObject(); var holding = holdingrow.ToObject(); item.Location.ID = holding.Location.ID; item.Location.Code = holding.Location.Code; item.Dimensions.CopyFrom(holding.Dimensions, true); item.Style.ID = holding.Style.ID; item.Style.Code = holding.Style.Code; new Client().Save(item, "Changed due to stock holding selection"); Data.LoadRow(itemrow, item); InvalidateRow(itemrow); } public Requisition Requisition { get; set; } protected override void Reload(Filters criteria, Columns columns, ref SortOrder? sort, Action action) { criteria.Add( new Filter(x => x.RequisitionLink.ID).IsEqualTo(Requisition != null ? Requisition.ID : CoreUtils.FullGuid)); sort = new SortOrder(x => x.Created); base.Reload( criteria, columns, ref sort, (o, e) => { // Update Buttons Here action.Invoke(o, e); } ); } protected override bool CanDeleteItems(CoreRow[] rows) { if (Requisition == null || Requisition.ID.Equals(Guid.Empty)) { MessageBox.Show("Please select a Requisition first!"); return false; } if (!Requisition.Filled.IsEmpty()) { MessageBox.Show("Cannot Modify a Completed Requisition"); return false; } return base.CanDeleteItems(rows); } public override bool EditItems(RequisitionItem[] items, Func? PageDataHandler, bool PreloadPages = false) { if (Requisition == null || Requisition.ID.Equals(Guid.Empty)) { MessageBox.Show("Please select a Requisition first!"); return false; } if (!Requisition.StockUpdated.IsEmpty()) { MessageBox.Show("Cannot Edit Items after Stock Holdings have been updated!"); return false; } return base.EditItems(items, PageDataHandler, PreloadPages); } protected override RequisitionItem CreateItem() { var item = base.CreateItem(); item.RequisitionLink.ID = Requisition.ID; item.RequisitionLink.Synchronise(Requisition); item.Quantity = 1; return item; } protected override void DoAdd() { if (Requisition == null || Requisition.ID.Equals(Guid.Empty)) { MessageBox.Show("Please select a Requisition first!"); return; } if (!Requisition.Filled.IsEmpty()) { MessageBox.Show("Cannot Add Items to a Completed Requisition"); return; } base.DoAdd(); } } }