123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- using Comal.Classes;
- using InABox.Clients;
- using InABox.Core;
- using InABox.DynamicGrid;
- using InABox.Wpf;
- using InABox.WPF;
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- namespace PRSDesktop;
- internal class DeliveryEquipmentList : DynamicDataGrid<DeliveryEquipment>, IMasterDetailControl<Delivery, DeliveryEquipment>
- {
- public Delivery? Master { get; set; }
- public Filter<DeliveryEquipment> MasterDetailFilter => Master != null && Master.ID != Guid.Empty
- ? new Filter<DeliveryEquipment>(x => x.Delivery.ID).IsEqualTo(Master.ID)
- : new Filter<DeliveryEquipment>().None();
-
- public DeliveryEquipmentList()
- {
- HiddenColumns.Add(x => x.Delivery.ID);
- HiddenColumns.Add(x => x.Equipment.ID);
- ActionColumns.Add(new DynamicMenuColumn(BuildEquipmentMenu));
- }
- private void BuildEquipmentMenu(DynamicMenuColumn column, CoreRow? row)
- {
- column.AddItem("For Drop Off", null, SetAsDropOff);
- column.AddItem("For Pick Up", null, SetAsPickup);
- }
- private void SetAsPickup(CoreRow? row)
- {
- if (row?.ToObject<DeliveryEquipment>() is { } equipment)
- {
- equipment.Type = DeliveryEquipmentType.PickUp;
- new Client<DeliveryEquipment>().Save(equipment,"");
- Refresh(false,true);
- }
- }
- private void SetAsDropOff(CoreRow? row)
- {
- if (row?.ToObject<DeliveryEquipment>() is { } equipment)
- {
- equipment.Type = DeliveryEquipmentType.DropOff;
- new Client<DeliveryEquipment>().Save(equipment,"");
- Refresh(false,true);
- }
- }
-
- 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<DeliveryEquipment>();
- columns.Add(x => x.Equipment.Code, caption: "Eq.", alignment: Alignment.MiddleCenter);
- columns.Add(x => x.Equipment.Description, width: 0, caption: "Equipment");
- columns.Add(x => x.Type, width: 70);
- return columns;
- }
- protected override BaseEditor? GetEditor(object item, DynamicGridColumn column)
- {
- if(column.ColumnName.StartsWith(nameof(DeliveryEquipment.Equipment) + "."))
- {
- return new NullEditor();
- }
- return base.GetEditor(item, column);
- }
- protected override void DoAdd(bool openEditorOnDirectEdit = false)
- {
- if ((Master?.ID ?? Guid.Empty) == Guid.Empty)
- {
- MessageWindow.ShowMessage("Please select a delivery first", "No Delivery Selected");
- return;
- }
- if (!Master!.Completed.IsEmpty())
- {
- MessageWindow.ShowMessage("You cannot modify a completed delivery!", "Delivery Complete");
- return;
- }
- if (MultiSelectDialog.SelectItems(out var equipmentList,
- new Filter<Equipment>(x => x.ID).NotInList(ExtractValues(x => x.Equipment.ID, Selection.All).ToArray()),
- Columns.None<Equipment>().Add(x => x.ID)))
- {
- Progress.Show("Adding Equipment to Delivery");
- var newEquipmentList = new List<DeliveryEquipment>();
- foreach (var equipment in equipmentList)
- {
- var newEquipment = new DeliveryEquipment();
- newEquipment.Delivery.CopyFrom(Master);
- newEquipment.Equipment.CopyFrom(equipment);
- newEquipmentList.Add(newEquipment);
- }
- Client.Save(newEquipmentList, "Added to Delivery");
- DoChanged();
- Progress.Close();
- }
- }
- protected override void Reload(
- Filters<DeliveryEquipment> criteria, Columns<DeliveryEquipment> columns, ref SortOrder<DeliveryEquipment>? sort,
- CancellationToken token, Action<CoreTable?, Exception?> action)
- {
-
- criteria.Add(MasterDetailFilter);
- base.Reload(criteria, columns, ref sort, token, action);
- }
- }
|