DeliveryEquipmentList.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. using Comal.Classes;
  2. using InABox.Clients;
  3. using InABox.Core;
  4. using InABox.DynamicGrid;
  5. using InABox.Wpf;
  6. using InABox.WPF;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Drawing;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading;
  13. using System.Threading.Tasks;
  14. namespace PRSDesktop;
  15. internal class DeliveryEquipmentList : DynamicDataGrid<DeliveryEquipment>, IMasterDetailControl<Delivery, DeliveryEquipment>
  16. {
  17. public Delivery? Master { get; set; }
  18. public Filter<DeliveryEquipment> MasterDetailFilter => Master != null && Master.ID != Guid.Empty
  19. ? new Filter<DeliveryEquipment>(x => x.Delivery.ID).IsEqualTo(Master.ID)
  20. : new Filter<DeliveryEquipment>().None();
  21. public DeliveryEquipmentList()
  22. {
  23. HiddenColumns.Add(x => x.Delivery.ID);
  24. HiddenColumns.Add(x => x.Equipment.ID);
  25. ActionColumns.Add(new DynamicMenuColumn(BuildEquipmentMenu));
  26. }
  27. private void BuildEquipmentMenu(DynamicMenuColumn column, CoreRow? row)
  28. {
  29. column.AddItem("For Drop Off", null, SetAsDropOff);
  30. column.AddItem("For Pick Up", null, SetAsPickup);
  31. }
  32. private void SetAsPickup(CoreRow? row)
  33. {
  34. if (row?.ToObject<DeliveryEquipment>() is { } equipment)
  35. {
  36. equipment.Type = DeliveryEquipmentType.PickUp;
  37. new Client<DeliveryEquipment>().Save(equipment,"");
  38. Refresh(false,true);
  39. }
  40. }
  41. private void SetAsDropOff(CoreRow? row)
  42. {
  43. if (row?.ToObject<DeliveryEquipment>() is { } equipment)
  44. {
  45. equipment.Type = DeliveryEquipmentType.DropOff;
  46. new Client<DeliveryEquipment>().Save(equipment,"");
  47. Refresh(false,true);
  48. }
  49. }
  50. protected override void DoReconfigure(DynamicGridOptions options)
  51. {
  52. base.DoReconfigure(options);
  53. options.RecordCount = true;
  54. options.AddRows = true;
  55. options.DeleteRows = true;
  56. options.SelectColumns = true;
  57. }
  58. protected override DynamicGridColumns LoadColumns()
  59. {
  60. var columns = new DynamicGridColumns<DeliveryEquipment>();
  61. columns.Add(x => x.Equipment.Code, caption: "Eq.", alignment: Alignment.MiddleCenter);
  62. columns.Add(x => x.Equipment.Description, width: 0, caption: "Equipment");
  63. columns.Add(x => x.Type, width: 70);
  64. return columns;
  65. }
  66. protected override BaseEditor? GetEditor(object item, DynamicGridColumn column)
  67. {
  68. if(column.ColumnName.StartsWith(nameof(DeliveryEquipment.Equipment) + "."))
  69. {
  70. return new NullEditor();
  71. }
  72. return base.GetEditor(item, column);
  73. }
  74. protected override void DoAdd(bool openEditorOnDirectEdit = false)
  75. {
  76. if ((Master?.ID ?? Guid.Empty) == Guid.Empty)
  77. {
  78. MessageWindow.ShowMessage("Please select a delivery first", "No Delivery Selected");
  79. return;
  80. }
  81. if (!Master!.Completed.IsEmpty())
  82. {
  83. MessageWindow.ShowMessage("You cannot modify a completed delivery!", "Delivery Complete");
  84. return;
  85. }
  86. if (MultiSelectDialog.SelectItems(out var equipmentList,
  87. new Filter<Equipment>(x => x.ID).NotInList(ExtractValues(x => x.Equipment.ID, Selection.All).ToArray()),
  88. Columns.None<Equipment>().Add(x => x.ID)))
  89. {
  90. Progress.Show("Adding Equipment to Delivery");
  91. var newEquipmentList = new List<DeliveryEquipment>();
  92. foreach (var equipment in equipmentList)
  93. {
  94. var newEquipment = new DeliveryEquipment();
  95. newEquipment.Delivery.CopyFrom(Master);
  96. newEquipment.Equipment.CopyFrom(equipment);
  97. newEquipmentList.Add(newEquipment);
  98. }
  99. Client.Save(newEquipmentList, "Added to Delivery");
  100. DoChanged();
  101. Progress.Close();
  102. }
  103. }
  104. protected override void Reload(
  105. Filters<DeliveryEquipment> criteria, Columns<DeliveryEquipment> columns, ref SortOrder<DeliveryEquipment>? sort,
  106. CancellationToken token, Action<CoreTable?, Exception?> action)
  107. {
  108. criteria.Add(MasterDetailFilter);
  109. base.Reload(criteria, columns, ref sort, token, action);
  110. }
  111. }