PurchaseOrderStore.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using Comal.Classes;
  2. using InABox.Core;
  3. using NPOI.HPSF;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using PRSStores;
  7. using System;
  8. namespace Comal.Stores
  9. {
  10. public class PurchaseOrderStore : BaseStore<PurchaseOrder>
  11. {
  12. protected override void BeforeSave(PurchaseOrder entity)
  13. {
  14. base.BeforeSave(entity);
  15. Guid? empid = null;
  16. if (entity.HasOriginalValue(x => x.IssuedDate) && entity.GetOriginalValue(x => x.IssuedDate).IsEmpty())
  17. {
  18. empid ??= GetEmployeeIDFromUserGuid();
  19. entity.IssuedBy.ID = empid.Value;
  20. }
  21. if (entity.ID == Guid.Empty)
  22. {
  23. empid ??= GetEmployeeIDFromUserGuid();
  24. entity.RaisedBy.ID = empid.Value;
  25. }
  26. }
  27. protected override void AfterSave(PurchaseOrder entity)
  28. {
  29. base.AfterSave(entity);
  30. UpdateTrackingKanban<PurchaseOrderKanban, PurchaseOrder, PurchaseOrderLink>(entity, p =>
  31. {
  32. return p.Status == PurchaseOrderStatus.Closed
  33. ? KanbanStatus.Complete
  34. : p.Status.Equals(PurchaseOrderStatus.Issued)
  35. ? KanbanStatus.Waiting
  36. : KanbanStatus.Open;
  37. });
  38. }
  39. private Guid[] JobRequisitionItemIDs = System.Array.Empty<Guid>();
  40. private Guid[] GetJobRequisitionIDs(PurchaseOrder entity)
  41. {
  42. var jris = Provider.Query(
  43. new Filter<JobRequisitionItemPurchaseOrderItem>(x => x.PurchaseOrderItem.PurchaseOrderLink.ID).IsEqualTo(entity.ID),
  44. new Columns<JobRequisitionItemPurchaseOrderItem>(x => x.JobRequisitionItem.ID))
  45. .Rows
  46. .Select(r=>r.Get<JobRequisitionItemPurchaseOrderItem, Guid>(x => x.JobRequisitionItem.ID))
  47. .Where(x=> x != Guid.Empty)
  48. .Distinct()
  49. .ToArray();
  50. return jris;
  51. }
  52. protected override void BeforeDelete(PurchaseOrder entity)
  53. {
  54. UnlinkTrackingKanban<PurchaseOrderKanban, PurchaseOrder, PurchaseOrderLink>(entity);
  55. DeleteStockMovements(entity);
  56. JobRequisitionItemIDs = GetJobRequisitionIDs(entity);
  57. }
  58. protected override void AfterDelete(PurchaseOrder entity)
  59. {
  60. base.AfterDelete(entity);
  61. foreach (var id in JobRequisitionItemIDs)
  62. JobRequisitionItemStore.UpdateStatus(this, id, JobRequisitionItemAction.Deleted);
  63. }
  64. private void DeleteStockMovements(PurchaseOrder entity)
  65. {
  66. var items = Provider.Query(
  67. new Filter<PurchaseOrderItem>(x => x.PurchaseOrderLink.ID).IsEqualTo(entity.ID),
  68. new Columns<PurchaseOrderItem>(x => x.ID)
  69. ).Rows.Select(x => x.ToObject<PurchaseOrderItem>());
  70. List<Guid> ids = new List<Guid>();
  71. foreach ( var item in items)
  72. ids.Add(item.ID);
  73. var movements = Provider.Query(
  74. new Filter<StockMovement>(x => x.OrderItem.ID).InList(ids.ToArray()),
  75. new Columns<StockMovement>(x => x.ID)
  76. ).Rows.Select(x => x.ToObject<StockMovement>());
  77. if (movements.Any())
  78. FindSubStore<StockMovement>().Delete(movements, "Purchase Order Deleted");
  79. }
  80. }
  81. }