JobRequisitionItemStore.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using Comal.Classes;
  2. using Comal.Stores;
  3. using InABox.Core;
  4. using System;
  5. using System.Linq;
  6. namespace PRSStores
  7. {
  8. public class JobRequisitionItemStore : BaseStore<JobRequisitionItem>
  9. {
  10. protected override void BeforeSave(JobRequisitionItem item)
  11. {
  12. if (item.ID != Guid.Empty)
  13. {
  14. var table = DoQuery(item);
  15. item = DoStatusChecks(item, table);
  16. }
  17. base.BeforeSave(item);
  18. }
  19. private CoreTable DoQuery(JobRequisitionItem item)
  20. {
  21. return Provider.Query<StockMovement>(
  22. new Filter<StockMovement>(x => x.JobRequisitionItem.ID).IsEqualTo(item.ID),
  23. new Columns<StockMovement>(
  24. x => x.Received,
  25. x => x.Style.ID
  26. ));
  27. }
  28. public static JobRequisitionItem DoStatusChecks(JobRequisitionItem item, CoreTable table)
  29. {
  30. if (item.Cancelled != DateTime.MinValue)
  31. item.Status = JobRequisitionItemStatus.Cancelled;
  32. else if (item.Archived != DateTime.MinValue)
  33. item.Status = JobRequisitionItemStatus.Archived;
  34. //this can only get set from the "Create Treatment PO" custom module
  35. else if (item.Status == JobRequisitionItemStatus.TreatmentOnOrder || item.Status == JobRequisitionItemStatus.TreatmentReceived)
  36. {
  37. if (item.PurchaseOrderItem.ReceivedDate != DateTime.MinValue)
  38. item.Status = JobRequisitionItemStatus.TreatmentReceived;
  39. }
  40. else if (item.Ordered != DateTime.MinValue && item.PurchaseOrderItem.ReceivedDate == DateTime.MinValue)
  41. item.Status = JobRequisitionItemStatus.OnOrder;
  42. else if (item.PurchaseOrderItem.ReceivedDate != DateTime.MinValue)
  43. {
  44. item.Status = JobRequisitionItemStatus.Received;
  45. item = CheckReservedOrTreatmentRequired(item, table);
  46. }
  47. else if (item.Status == JobRequisitionItemStatus.OrderRequired)
  48. return item;
  49. else
  50. item = CheckReservedOrTreatmentRequired(item, table);
  51. return item;
  52. }
  53. private static JobRequisitionItem CheckReservedOrTreatmentRequired(JobRequisitionItem item, CoreTable table)
  54. {
  55. if (!table.Rows.Any())
  56. {
  57. item.Status = JobRequisitionItemStatus.NotChecked;
  58. return item;
  59. }
  60. bool treatmentRequired = false;
  61. double total = 0;
  62. foreach (var row in table.Rows)
  63. {
  64. total = total + row.Get<StockMovement, double>(x => x.Received);
  65. if (row.Get<StockMovement, Guid>(x => x.Style.ID) != item.Style.ID)
  66. treatmentRequired = true;
  67. }
  68. if (total >= item.Qty)
  69. {
  70. item.Status = JobRequisitionItemStatus.Allocated;
  71. if (treatmentRequired)
  72. item.Status = JobRequisitionItemStatus.TreatmentRequired;
  73. }
  74. else
  75. item.Status = JobRequisitionItemStatus.NotChecked;
  76. return item;
  77. }
  78. }
  79. }