JobRequisitionItemStore.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. var table = DoQuery(item);
  13. item = DoStatusChecks(item, table);
  14. base.BeforeSave(item);
  15. }
  16. private CoreTable DoQuery(JobRequisitionItem item)
  17. {
  18. return Provider.Query<StockMovement>(
  19. new Filter<StockMovement>(x => x.JobRequisitionItem.ID).IsEqualTo(item.ID),
  20. new Columns<StockMovement>(
  21. x => x.Received,
  22. x => x.Style.ID
  23. ));
  24. }
  25. public static JobRequisitionItem DoStatusChecks(JobRequisitionItem item, CoreTable table)
  26. {
  27. if (item.Cancelled != DateTime.MinValue)
  28. item.Status = JobRequisitionItemStatus.Cancelled;
  29. else if (item.Archived != DateTime.MinValue)
  30. item.Status = JobRequisitionItemStatus.Archived;
  31. else if (item.Ordered != DateTime.MinValue && item.PurchaseOrderItem.ReceivedDate == DateTime.MinValue)
  32. item.Status = JobRequisitionItemStatus.OnOrder;
  33. else if (item.PurchaseOrderItem.ReceivedDate != DateTime.MinValue)
  34. {
  35. item.Status = JobRequisitionItemStatus.Received;
  36. item = CheckReservedOrTreatmentRequired(item, table);
  37. }
  38. else if (item.Status == JobRequisitionItemStatus.OrderRequired)
  39. return item;
  40. else
  41. item = CheckReservedOrTreatmentRequired(item, table);
  42. return item;
  43. }
  44. private static JobRequisitionItem CheckReservedOrTreatmentRequired(JobRequisitionItem item, CoreTable table)
  45. {
  46. if (!table.Rows.Any())
  47. return item;
  48. bool treatmentRequired = false;
  49. double total = 0;
  50. foreach (var row in table.Rows)
  51. {
  52. total = total + row.Get<StockMovement, double>(x => x.Received);
  53. if (row.Get<StockMovement, Guid>(x => x.Style.ID) != item.Style.ID)
  54. treatmentRequired = true;
  55. }
  56. if (total >= item.Qty)
  57. {
  58. item.Status = JobRequisitionItemStatus.Reserved;
  59. if (treatmentRequired)
  60. item.Status = JobRequisitionItemStatus.TreatmentRequired;
  61. }
  62. else
  63. item.Status = JobRequisitionItemStatus.NotChecked;
  64. return item;
  65. }
  66. }
  67. }