DeliveryItemsList.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. using System;
  2. using System.Linq;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. using Comal.Classes;
  6. using InABox.Clients;
  7. using InABox.Core;
  8. using InABox.DynamicGrid;
  9. using InABox.WPF;
  10. namespace PRSDesktop
  11. {
  12. public class DeliveryItemsList : DynamicDataGrid<DeliveryItem>
  13. {
  14. public DeliveryItemsList()
  15. {
  16. HiddenColumns.Add(x => x.ShipmentLink.ID);
  17. HiddenColumns.Add(x => x.ShipmentCode);
  18. HiddenColumns.Add(x => x.RequisitionLink.ID);
  19. //AddButton("Add Rack", null, AddRack);
  20. //AddButton("Add Requi", null, AddRequi);
  21. //AddButton("Remove", null, RemoveItems);
  22. }
  23. protected override void DoReconfigure(FluentList<DynamicGridOption> options)
  24. {
  25. base.DoReconfigure(options);
  26. options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.SelectColumns);
  27. }
  28. public Delivery Delivery { get; set; }
  29. private bool AddRack(Button arg1, CoreRow[] arg2)
  30. {
  31. if (Delivery.ID == Guid.Empty)
  32. {
  33. MessageBox.Show("Please select a Delivery First");
  34. return false;
  35. }
  36. if (!Delivery.Completed.IsEmpty())
  37. {
  38. MessageBox.Show("You cannot modify a completed delivery!");
  39. return false;
  40. }
  41. var grid = new MultiSelectDialog<Shipment>(
  42. new Filter<Shipment>(x => x.Delivery).NotLinkValid(),
  43. null
  44. );
  45. if (grid.ShowDialog())
  46. {
  47. Progress.Show("Adding Rack Items to Delivery");
  48. var shipments = grid.Items();
  49. var filter = new Filter<DeliveryItem>(x => x.ID).IsEqualTo(CoreUtils.FullGuid);
  50. foreach (var shipment in shipments)
  51. {
  52. filter = filter.Or(x => x.ShipmentLink.ID).IsEqualTo(shipment.ID);
  53. shipment.Delivery.ID = Delivery.ID;
  54. }
  55. var items = new Client<DeliveryItem>().Load(filter);
  56. foreach (var item in items)
  57. item.Delivery.ID = Delivery.ID;
  58. new Client<DeliveryItem>().Save(items, "Added to Delivery");
  59. new Client<Shipment>().Save(shipments, "Added to Delivery");
  60. Progress.Close();
  61. return true;
  62. }
  63. return false;
  64. }
  65. private bool AddRequi(Button arg1, CoreRow[] arg2)
  66. {
  67. if (Delivery.ID == Guid.Empty)
  68. {
  69. MessageBox.Show("Please select a Delivery First");
  70. return false;
  71. }
  72. if (!Delivery.Completed.IsEmpty())
  73. {
  74. MessageBox.Show("You cannot modify a completed delivery!");
  75. return false;
  76. }
  77. var grid = new MultiSelectDialog<Requisition>(
  78. new Filter<Requisition>(x => x.JobLink.ID).IsEqualTo(Delivery.Job.ID).And(x => x.Archived).IsEqualTo(DateTime.MinValue)
  79. .And(x => x.Delivery).NotLinkValid(),
  80. null
  81. );
  82. if (grid.ShowDialog())
  83. {
  84. Progress.Show("Adding Requisition Items to Delivery");
  85. var requis = grid.Items();
  86. var filter = new Filter<DeliveryItem>(x => x.ID).IsEqualTo(CoreUtils.FullGuid);
  87. foreach (var requi in requis)
  88. {
  89. filter = filter.Or(x => x.RequisitionLink.ID).IsEqualTo(requi.ID);
  90. requi.Delivery.ID = Delivery.ID;
  91. requi.Delivery.Synchronise(Delivery);
  92. }
  93. var items = new Client<DeliveryItem>().Load(filter);
  94. foreach (var item in items)
  95. {
  96. item.Delivery.ID = Delivery.ID;
  97. item.Delivery.Synchronise(Delivery);
  98. }
  99. new Client<DeliveryItem>().Save(items, "Added to Delivery");
  100. new Client<Requisition>().Save(requis, "Added to Delivery");
  101. Progress.Close();
  102. return true;
  103. }
  104. return false;
  105. }
  106. private bool RemoveItems(Button arg1, CoreRow[] arg2)
  107. {
  108. if (arg2 == null || !arg2.Any())
  109. {
  110. MessageBox.Show("Please select a row first");
  111. return false;
  112. }
  113. if (!Delivery.Completed.IsEmpty())
  114. {
  115. MessageBox.Show("You cannot modify a completed delivery!");
  116. return false;
  117. }
  118. var bResult = false;
  119. Progress.Show("Removing Items from Delivery");
  120. DeliveryItem[] items = { };
  121. var requi = arg2.First().EntityLinkID<DeliveryItem, RequisitionLink>(x => x.RequisitionLink) ?? Guid.Empty;
  122. if (requi != Guid.Empty)
  123. {
  124. items = new Client<DeliveryItem>().Load(new Filter<DeliveryItem>(x => x.RequisitionLink.ID).IsEqualTo(requi));
  125. var requisition = new Client<Requisition>().Load(new Filter<Requisition>(x => x.ID).IsEqualTo(requi)).FirstOrDefault();
  126. if (requisition != null)
  127. {
  128. requisition.Delivery.ID = Guid.Empty;
  129. new Client<Requisition>().Save(requisition, "Removed from Delivery");
  130. }
  131. }
  132. else
  133. {
  134. var rack = arg2.First().EntityLinkID<DeliveryItem, ShipmentLink>(x => x.ShipmentLink) ?? Guid.Empty;
  135. if (rack != Guid.Empty)
  136. {
  137. items = new Client<DeliveryItem>().Load(new Filter<DeliveryItem>(x => x.ShipmentLink.ID).IsEqualTo(rack));
  138. var shipment = new Client<Shipment>().Load(new Filter<Shipment>(x => x.ID).IsEqualTo(rack)).FirstOrDefault();
  139. if (shipment != null)
  140. {
  141. shipment.Delivery.ID = Guid.Empty;
  142. new Client<Shipment>().Save(shipment, "Removed from Delivery");
  143. }
  144. }
  145. }
  146. if (items.Any())
  147. {
  148. foreach (var item in items)
  149. item.Delivery.ID = Guid.Empty;
  150. new Client<DeliveryItem>().Save(items, "Removed From Delivery");
  151. bResult = true;
  152. }
  153. Progress.Close();
  154. return bResult;
  155. }
  156. protected override void Reload(Filters<DeliveryItem> criteria, Columns<DeliveryItem> columns, ref SortOrder<DeliveryItem>? sort, Action<CoreTable?, Exception?> action)
  157. {
  158. if (Delivery.ID == Guid.Empty)
  159. criteria.Add(new Filter<DeliveryItem>(x => x.Delivery.ID).None());
  160. else
  161. criteria.Add(new Filter<DeliveryItem>(x => x.Delivery.ID).IsEqualTo(Delivery.ID));
  162. base.Reload(criteria, columns, ref sort, action);
  163. }
  164. }
  165. }