123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- 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;
- using System.Threading;
- namespace PRSDesktop
- {
- internal class DeliveryRequiList : DynamicDataGrid<Requisition>, IMasterDetailControl<Delivery,Requisition>
- {
- public Delivery? Master { get; set; }
- public Filter<Requisition> MasterDetailFilter => Master != null && Master.ID != Guid.Empty
- ? new Filter<Requisition>(x => x.Delivery.ID).IsEqualTo(Master.ID)
- : new Filter<Requisition>().None();
-
- public DeliveryRequiList()
- {
- HiddenColumns.Add(x => x.Delivery.ID);
- ColumnsTag = "DeliveryRequi";
- }
- protected override void DoReconfigure(DynamicGridOptions options)
- {
- base.DoReconfigure(options);
- options.RecordCount = true;
- options.AddRows = true;
- options.DeleteRows = true;
- options.SelectColumns = true;
- }
- protected override DynamicGridColumns LoadColumns()
- {
- var columns = new DynamicGridColumns<Requisition>();
- columns.Add(x => x.Number, width: 40, caption: "Req.", alignment: Alignment.MiddleCenter);
- columns.Add(x => x.Title, width: 0, caption: "Requisition");
- columns.Add(x => x.Filled, width: 50, caption: "Done", format: "dd MMM", alignment: Alignment.MiddleCenter);
- columns.Add(x => x.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<Requisition>(
- new Filter<Requisition>(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<DeliveryItem>(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<DeliveryItem>().Query(
- filter,
- Columns.Required<DeliveryItem>().Add(x => x.Delivery.ID).Add(x => x.ID)
- ).ToArray<DeliveryItem>();
-
- foreach (var item in items)
- {
- item.Delivery.ID = Master.ID;
- item.Delivery.Synchronise(Master);
- }
- new Client<DeliveryItem>().Save(items, "Added to Delivery");
- new Client<Requisition>().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<Requisition, Guid>(x => x.ID);
- items = new Client<DeliveryItem>().Query(
- new Filter<DeliveryItem>(x => x.RequisitionLink.ID).IsEqualTo(reqid),
- Columns.Required<DeliveryItem>().Add(x => x.Delivery.ID).Add(x => x.ID)
- ).ToArray<DeliveryItem>();
- var requisition = new Client<Requisition>().Load(new Filter<Requisition>(x => x.ID).IsEqualTo(reqid)).FirstOrDefault();
- if (requisition != null)
- {
- requisition.Delivery.ID = Guid.Empty;
- new Client<Requisition>().Save(requisition, "Removed from Delivery");
- }
- if (items.Any())
- {
- foreach (var item in items)
- item.Delivery.ID = Guid.Empty;
- new Client<DeliveryItem>().Save(items, "Removed From Delivery");
- }
- }
- DoChanged();
- Progress.Close();
- }
- protected override void Reload(
- Filters<Requisition> criteria, Columns<Requisition> columns, ref SortOrder<Requisition>? sort,
- CancellationToken token, Action<CoreTable?, Exception?> action)
- {
- criteria.Add(MasterDetailFilter);
- base.Reload(criteria, columns, ref sort, token, action);
- }
- }
- }
|