JobRequisitionItemStore.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. else if (item.Ordered != DateTime.MinValue && item.PurchaseOrderItem.ReceivedDate == DateTime.MinValue)
  35. item.Status = JobRequisitionItemStatus.OnOrder;
  36. else if (item.PurchaseOrderItem.ReceivedDate != DateTime.MinValue)
  37. {
  38. item.Status = JobRequisitionItemStatus.Received;
  39. item = CheckReservedOrTreatmentRequired(item, table);
  40. }
  41. else if (item.Status == JobRequisitionItemStatus.OrderRequired)
  42. return item;
  43. else
  44. item = CheckReservedOrTreatmentRequired(item, table);
  45. return item;
  46. }
  47. private static JobRequisitionItem CheckReservedOrTreatmentRequired(JobRequisitionItem item, CoreTable table)
  48. {
  49. if (!table.Rows.Any())
  50. return item;
  51. bool treatmentRequired = false;
  52. double total = 0;
  53. foreach (var row in table.Rows)
  54. {
  55. total = total + row.Get<StockMovement, double>(x => x.Received);
  56. if (row.Get<StockMovement, Guid>(x => x.Style.ID) != item.Style.ID)
  57. treatmentRequired = true;
  58. }
  59. if (total >= item.Qty)
  60. {
  61. item.Status = JobRequisitionItemStatus.Reserved;
  62. if (treatmentRequired)
  63. item.Status = JobRequisitionItemStatus.TreatmentRequired;
  64. }
  65. else
  66. item.Status = JobRequisitionItemStatus.NotChecked;
  67. return item;
  68. }
  69. }
  70. }