using System; using System.Linq; using System.Windows; using Comal.Classes; using InABox.Clients; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; using InABox.Wpf; namespace PRSDesktop { internal class DeliveryRequiList : DynamicDataGrid, IMasterDetailControl { public Delivery? Master { get; set; } public Filter MasterDetailFilter => Master != null && Master.ID != Guid.Empty ? new Filter(x => x.Delivery.ID).IsEqualTo(Master.ID) : new Filter().None(); public DeliveryRequiList() { HiddenColumns.Add(x => x.Delivery.ID); ColumnsTag = "DeliveryRequi"; } protected override void DoReconfigure(FluentList options) { base.DoReconfigure(options); options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.AddRows, DynamicGridOption.DeleteRows, DynamicGridOption.SelectColumns); } protected override DynamicGridColumns LoadColumns() { var columns = new DynamicGridColumns { new() { ColumnName = "Number", Width = 40, Caption = "Req.", Alignment = Alignment.MiddleCenter }, new() { ColumnName = "Title", Width = 0, Caption = "Requisition" }, new() { ColumnName = "Filled", Width = 50, Caption = "Done", Format = "dd MMM", Alignment = Alignment.MiddleCenter }, new() { ColumnName = "Boxes", Width = 25, Caption = "#", Alignment = Alignment.MiddleCenter } }; return columns; } protected override void DoAdd(bool OpenEditorOnDirectEdit = false) { if (Master.ID == Guid.Empty) { MessageBox.Show("Please select a Delivery First"); return; } if (!Master.Completed.IsEmpty()) { MessageBox.Show("You cannot modify a completed delivery!"); return; } var grid = new MultiSelectDialog( new Filter(x => x.JobLink.ID).IsEqualTo(Master.Job.ID).And(x => x.Archived).IsEqualTo(DateTime.MinValue) .And(x => x.Delivery).NotLinkValid(), null ); if (grid.ShowDialog()) { Progress.Show("Adding Requsition Items to Delivery"); var requis = grid.Items(); var filter = new Filter(x => x.ID).IsEqualTo(CoreUtils.FullGuid); foreach (var requi in requis) { filter = filter.Or(x => x.RequisitionLink.ID).IsEqualTo(requi.ID); requi.Delivery.ID = Master.ID; } var items = new Client().Query( filter, new Columns(x => x.Delivery.ID).Add(x => x.ID) ).ToArray(); foreach (var item in items) { item.Delivery.ID = Master.ID; item.Delivery.Synchronise(Master); } new Client().Save(items, "Added to Delivery"); new Client().Save(requis, "Added to Delivery"); DoChanged(); Progress.Close(); } } public override void DeleteItems(params CoreRow[] rows) { if (rows == null || !rows.Any()) { MessageBox.Show("Please select a row first"); return; } if (!Master.Completed.IsEmpty()) { MessageBox.Show("You cannot modify a completed delivery!"); return; } Progress.Show("Removing Items from Delivery"); DeliveryItem[] items = { }; foreach (var row in rows) { var reqid = row.Get(x => x.ID); items = new Client().Query( new Filter(x => x.RequisitionLink.ID).IsEqualTo(reqid), new Columns(x => x.Delivery.ID).Add(x => x.ID) ).ToArray(); var requisition = new Client().Load(new Filter(x => x.ID).IsEqualTo(reqid)).FirstOrDefault(); if (requisition != null) { requisition.Delivery.ID = Guid.Empty; new Client().Save(requisition, "Removed from Delivery"); } if (items.Any()) { foreach (var item in items) item.Delivery.ID = Guid.Empty; new Client().Save(items, "Removed From Delivery"); } } DoChanged(); Progress.Close(); } protected override void Reload(Filters criteria, Columns columns, ref SortOrder? sort, Action action) { criteria.Add(MasterDetailFilter); base.Reload(criteria, columns, ref sort, action); } } }