ConsignmentItemGrid.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. using System;
  2. using System.Linq;
  3. using System.Threading;
  4. using System.Windows;
  5. using System.Windows.Controls;
  6. using Comal.Classes;
  7. using InABox.Clients;
  8. using InABox.Core;
  9. using InABox.DynamicGrid;
  10. using InABox.WPF;
  11. namespace PRSDesktop;
  12. public class ConsignmentItemGrid : DynamicDataGrid<PurchaseOrderItem>
  13. {
  14. private Button receiveall;
  15. private Button receiveselected;
  16. protected override void Init()
  17. {
  18. base.Init();
  19. receiveall = AddButton("Receive All", null, ReceiveAll);
  20. receiveall.IsEnabled = false;
  21. receiveselected = AddButton("Receive Selected", null, ReceiveSelected);
  22. receiveselected.IsEnabled = false;
  23. AddButton("Assign Location", null, SupplierPurchaseOrderItemOneToMany.AssignLocation);
  24. }
  25. protected override void DoReconfigure(DynamicGridOptions options)
  26. {
  27. base.DoReconfigure(options);
  28. options.RecordCount = true;
  29. options.SelectColumns = true;
  30. options.AddRows = true;
  31. options.DeleteRows = true;
  32. options.MultiSelect = true;
  33. }
  34. public Guid ConsignmentID { get; set; }
  35. public bool Completed { get; set; }
  36. protected override void SelectItems(CoreRow[]? rows)
  37. {
  38. receiveselected.IsEnabled = rows != null && rows.Any(r => r.Get<PurchaseOrderItem, DateTime>(c => c.ReceivedDate).IsEmpty());
  39. receiveall.IsEnabled = Data.Rows.Any(r => r.Get<PurchaseOrderItem, DateTime>(c => c.ReceivedDate).IsEmpty());
  40. base.SelectItems(rows);
  41. }
  42. private bool ReceiveAll(Button sender, CoreRow[] rows)
  43. {
  44. var unreceived = Data.Rows.Where(r => r.Get<PurchaseOrderItem, DateTime>(c => c.ReceivedDate).IsEmpty());
  45. if (!unreceived.Any())
  46. {
  47. MessageBox.Show("No Items to Receive");
  48. return false;
  49. }
  50. var now = DateTime.Now;
  51. using (new WaitCursor())
  52. {
  53. var items = unreceived.Select(x => x.ToObject<PurchaseOrderItem>());
  54. foreach (var item in items)
  55. item.ReceivedDate = now;
  56. new Client<PurchaseOrderItem>().Save(items, "Consignment Items Received");
  57. }
  58. return true;
  59. }
  60. private bool ReceiveSelected(Button sender, CoreRow[] rows)
  61. {
  62. if (!rows.Any())
  63. {
  64. MessageBox.Show("Please select a row first");
  65. return false;
  66. }
  67. var now = DateTime.Now;
  68. using (new WaitCursor())
  69. {
  70. var items = LoadItems(rows);
  71. foreach (var item in items)
  72. item.ReceivedDate = now;
  73. new Client<PurchaseOrderItem>().Save(items, "Consignment Items Received");
  74. }
  75. return true;
  76. }
  77. protected override void Reload(
  78. Filters<PurchaseOrderItem> criteria, Columns<PurchaseOrderItem> columns, ref SortOrder<PurchaseOrderItem>? sort,
  79. CancellationToken token, Action<CoreTable?, Exception?> action)
  80. {
  81. criteria.Add(new Filter<PurchaseOrderItem>(x => x.Consignment.ID).IsEqualTo(
  82. ConsignmentID == Guid.Empty ? CoreUtils.FullGuid : ConsignmentID));
  83. base.Reload(criteria, columns, ref sort, token, action);
  84. }
  85. protected override void DoAdd(bool OpenEditorOnDirectEdit = false)
  86. {
  87. if (ConsignmentID.Equals(Guid.Empty))
  88. {
  89. MessageBox.Show("Please select a Requisition first!");
  90. return;
  91. }
  92. if (Completed)
  93. {
  94. MessageBox.Show("Cannot Modify a Completed Requisition");
  95. return;
  96. }
  97. var dialog = new MultiSelectDialog<PurchaseOrderItem>(
  98. new Filter<PurchaseOrderItem>(x => x.Consignment.ID).IsEqualTo(Guid.Empty).And(x => x.ReceivedDate).IsEqualTo(DateTime.MinValue),
  99. Columns.None<PurchaseOrderItem>().Add(x => x.PurchaseOrderLink.PONumber, x => x.Product.Code, x => x.Product.Name, x => x.Description,
  100. x => x.Qty)
  101. //new System.Linq.Expressions.Expression<Func<PurchaseOrderItem, object>>[] { x => x.PurchaseOrderLink.PONumber, x => x.ProductLink.Code, x=>x.ProductLink.Name, x=>x.Description, x=>x.Qty}
  102. );
  103. if (dialog.ShowDialog())
  104. {
  105. Progress.Show("Adding Order Items");
  106. var items = dialog.Items(Columns.Required<PurchaseOrderItem>().Add(x => x.ID).Add(x => x.Consignment.ID));
  107. foreach (var item in items)
  108. item.Consignment.ID = ConsignmentID;
  109. Progress.SetMessage("Updating Items");
  110. new Client<PurchaseOrderItem>().Save(items, "Added to Consignment");
  111. Refresh(false, true);
  112. Progress.Close();
  113. MessageBox.Show(string.Format("{0} order items added", items.Length));
  114. }
  115. }
  116. public override bool EditItems(PurchaseOrderItem[] items, Func<Type, CoreTable?>? PageDataHandler, bool PreloadPages = false)
  117. {
  118. if (ConsignmentID.Equals(Guid.Empty))
  119. {
  120. MessageBox.Show("Please select a Requisition first!");
  121. return false;
  122. }
  123. if (Completed)
  124. {
  125. MessageBox.Show("Cannot Modify a Completed Requisition");
  126. return false;
  127. }
  128. return base.EditItems(items, PageDataHandler, PreloadPages);
  129. }
  130. protected override bool CanDeleteItems(CoreRow[] rows)
  131. {
  132. if (ConsignmentID.Equals(Guid.Empty))
  133. {
  134. MessageBox.Show("Please select a Requisition first!");
  135. return false;
  136. }
  137. if (Completed)
  138. {
  139. MessageBox.Show("Cannot Modify a Closed Requisition");
  140. return false;
  141. }
  142. return base.CanDeleteItems(rows);
  143. }
  144. public override void DeleteItems(params CoreRow[] rows)
  145. {
  146. using (new WaitCursor())
  147. {
  148. var items = LoadItems(rows);
  149. foreach (var item in items)
  150. item.Consignment.ID = Guid.Empty;
  151. new Client<PurchaseOrderItem>().Save(items, "Removed from Consignment");
  152. }
  153. }
  154. }