using System; using System.Linq; using System.Windows; using System.Windows.Media.Imaging; using Comal.Classes; using InABox.Clients; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; namespace PRSDesktop { public class DeliveryBuilderGrid : DynamicDataGrid { private Guid _orderid; private readonly BitmapImage tick = PRSDesktop.Resources.tick.AsBitmapImage(); public DeliveryBuilderGrid() { DeliveryItems = null; Options.AddRange(DynamicGridOption.RecordCount); HiddenColumns.Add(x => x.Packet.ID); HiddenColumns.Add(x => x.PurchaseOrderLink.PONumber); HiddenColumns.Add(x => x.Packet.SetoutLink.ID); HiddenColumns.Add(x => x.Packet.SetoutLink.JobLink.ID); ActionColumns.Add(new DynamicImageColumn(ConfirmedImage, ConfirmClick)); RowHeight = 35; FontSize = 20; } public CoreTable DeliveryItems { get; private set; } public Guid OrderID { get => _orderid; set { _orderid = value; DeliveryItems = new Client().Query( new Filter(x => x.OrderItem.PurchaseOrderLink.ID).IsEqualTo(value), new Columns(x => x.ID, x => x.Delivery.ID, x => x.OrderItem.ID, x => x.OrderItem.PurchaseOrderLink.ID, x => x.Description) ); Refresh(true, true); } } public Guid DeliveryID { get; set; } public bool DeliveryDocketReady() { if (DeliveryItems == null || !DeliveryItems.Rows.Any()) return false; if (Data == null || !Data.Rows.Any()) return false; foreach (var row in Data.Rows) { var oid = row.Get(c => c.ID); var del = DeliveryItems.Rows.FirstOrDefault(r => r.Get(c => c.OrderItem.ID).Equals(oid)); if (del == null) return false; } return true; } private bool ConfirmClick(CoreRow row) { if (row == null) { foreach (CoreRow dataRow in Data.Rows) { var oid = dataRow.Get(c => c.ID); var del = DeliveryItems.Rows.FirstOrDefault(r => r.Get(c => c.OrderItem.ID).Equals(oid)); if (del == null) { var item = new DeliveryItem(); item.OrderItem.ID = oid; item.Delivery.ID = DeliveryID; item.Description = string.Format("{0} x {1} ", dataRow.Get(c => c.Qty), dataRow.Get(c => c.Description) ); item.ManufacturingPacketLink.ID = dataRow.Get(c => c.Packet.ID); item.JobLink.ID = dataRow.Get(c => c.Packet.SetoutLink.JobLink.ID); item.Type = DeliveryItemType.TreatmentItem; new Client().Save(item, "Scanned By DeliveryBuilder"); var newrow = DeliveryItems.NewRow(); DeliveryItems.LoadRow(newrow, item); DeliveryItems.Rows.Add(newrow); } else { var item = del.ToObject(); new Client().Delete(item, "Removed By DeliveryBuilder"); DeliveryItems.Rows.RemoveAt(del.Index); } } DoChanged(); return true; } if (DeliveryItems != null) { var oid = row.Get(c => c.ID); try { CheckCode(oid); DoChanged(); return true; } catch (Exception e) { MessageBox.Show(e.Message); return false; } } return false; } public bool CheckCode(Guid oid) { var ordrow = Data.Rows.Where(r => r.Get(c => c.ID).Equals(oid)).FirstOrDefault(); if (ordrow == null) throw new Exception("Cannot find Order Item: " + oid); var del = DeliveryItems.Rows.FirstOrDefault(r => r.Get(c => c.OrderItem.ID).Equals(oid)); if (del == null) { var item = new DeliveryItem(); item.OrderItem.ID = oid; item.Delivery.ID = DeliveryID; item.Description = string.Format("{0} x {1} ", ordrow.Get(c => c.Qty), ordrow.Get(c => c.Description) ); item.ManufacturingPacketLink.ID = ordrow.Get(c => c.Packet.ID); item.JobLink.ID = ordrow.Get(c => c.Packet.SetoutLink.JobLink.ID); item.Type = DeliveryItemType.TreatmentItem; new Client().Save(item, "Scanned By DeliveryBuilder"); var newrow = DeliveryItems.NewRow(); DeliveryItems.LoadRow(newrow, item); DeliveryItems.Rows.Add(newrow); return true; } else { var item = del.ToObject(); new Client().Delete(item, "Removed By DeliveryBuilder"); DeliveryItems.Rows.RemoveAt(del.Index); return false; } } private BitmapImage ConfirmedImage(CoreRow row) { if (row == null) return tick; if (DeliveryItems != null) { var oid = row.Get(c => c.ID); var del = DeliveryItems.Rows.FirstOrDefault(r => r.Get(c => c.OrderItem.ID).Equals(oid)); return del != null ? tick : null; } return null; } protected override void Reload(Filters criteria, Columns columns, ref SortOrder sort, Action action) { criteria.Add(new Filter(x => x.PurchaseOrderLink.ID).IsEqualTo(_orderid)); base.Reload(criteria, columns, ref sort, action); } } }