JobRequisitionItemStore.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. ));
  23. }
  24. public static JobRequisitionItem DoStatusChecks(JobRequisitionItem item, CoreTable table)
  25. {
  26. if (item.Cancelled != DateTime.MinValue)
  27. item.Status = JobRequisitionItemStatus.Cancelled;
  28. else if (item.Archived != DateTime.MinValue)
  29. item.Status = JobRequisitionItemStatus.Archived;
  30. else if (item.Ordered != DateTime.MinValue && item.PurchaseOrderItem.ReceivedDate == DateTime.MinValue)
  31. item.Status = JobRequisitionItemStatus.OnOrder;
  32. else if (item.PurchaseOrderItem.ReceivedDate != DateTime.MinValue)
  33. item.Status = JobRequisitionItemStatus.Received;
  34. else if (item.Status == JobRequisitionItemStatus.OrderRequired)
  35. return item;
  36. else
  37. item = CheckReserved(item, table);
  38. return item;
  39. }
  40. private static JobRequisitionItem CheckReserved(JobRequisitionItem item, CoreTable table)
  41. {
  42. if (!table.Rows.Any())
  43. return item;
  44. double total = 0;
  45. foreach (var row in table.Rows)
  46. total = total + row.Get<StockMovement, double>(x => x.Received);
  47. if (total >= item.Qty)
  48. item.Status = JobRequisitionItemStatus.Reserved;
  49. else
  50. item.Status = JobRequisitionItemStatus.NotChecked;
  51. return item;
  52. }
  53. }
  54. }