PurchaseOrderStore.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using Comal.Classes;
  2. using InABox.Core;
  3. using NPOI.HPSF;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. namespace Comal.Stores
  8. {
  9. public class PurchaseOrderStore : BaseStore<PurchaseOrder>
  10. {
  11. protected override void AfterSave(PurchaseOrder entity)
  12. {
  13. base.AfterSave(entity);
  14. UpdateTrackingKanban<PurchaseOrderKanban, PurchaseOrder, PurchaseOrderLink>(entity, p =>
  15. {
  16. return p.Status == PurchaseOrderStatus.Closed
  17. ? KanbanCategory.Complete
  18. : p.Status.Equals(PurchaseOrderStatus.Issued)
  19. ? KanbanCategory.Waiting
  20. : KanbanCategory.Open;
  21. });
  22. }
  23. protected override void BeforeDelete(PurchaseOrder entity)
  24. {
  25. UnlinkTrackingKanban<PurchaseOrderKanban, PurchaseOrder, PurchaseOrderLink>(entity);
  26. DeleteStockMovements(entity);
  27. }
  28. private void DeleteStockMovements(PurchaseOrder entity)
  29. {
  30. var items = Provider.Query(
  31. new Filter<PurchaseOrderItem>(x => x.PurchaseOrderLink.ID).IsEqualTo(entity.ID),
  32. new Columns<PurchaseOrderItem>(x => x.ID)
  33. ).Rows.Select(x => x.ToObject<PurchaseOrderItem>());
  34. List<Guid> ids = new List<Guid>();
  35. foreach ( var item in items)
  36. ids.Add(item.ID);
  37. var movements = Provider.Query(
  38. new Filter<StockMovement>(x => x.OrderItem.ID).InList(ids.ToArray()),
  39. new Columns<StockMovement>(x => x.ID)
  40. ).Rows.Select(x => x.ToObject<StockMovement>());
  41. if (movements.Any())
  42. FindSubStore<StockMovement>().Delete(movements, "Purchase Order Deleted");
  43. }
  44. }
  45. }