BillApprovalStore.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using Comal.Classes;
  2. using Comal.Stores;
  3. using InABox.Core;
  4. namespace PRSStores;
  5. public class BillApprovalStore : BaseStore<BillApproval>
  6. {
  7. private void CheckBillApproval(Guid billId)
  8. {
  9. if (billId == Guid.Empty)
  10. return;
  11. var _statustask = Task.Run(() => Provider.Query(
  12. new Filter<BillApproval>(x => x.Bill.ID).IsEqualTo(billId),
  13. Columns.None<BillApproval>().Add(x => x.Status)
  14. )
  15. .ExtractValues<BillApproval, BillApprovalStatus>(x => x.Status)
  16. .Distinct()
  17. .ToArray()
  18. );
  19. var _billTask = Task.Run(() => Provider.Query(
  20. new Filter<Bill>(x => x.ID).IsEqualTo(billId),
  21. Columns.None<Bill>()
  22. .Add(x=>x.ID)
  23. .Add(x=>x.ApprovalStatus)
  24. )
  25. .ToObjects<Bill>()
  26. .FirstOrDefault()
  27. );
  28. Task.WaitAll(_statustask, _billTask);
  29. var _statuses = _statustask.Result;
  30. var _bill = _billTask.Result;
  31. if (_bill == null)
  32. return;
  33. var _status = Bill.CalculateApprovalStatus(_statuses);
  34. if (_status != _bill.ApprovalStatus)
  35. _bill.ApprovalStatus = _status;
  36. Provider.Save(_bill);
  37. }
  38. protected override void AfterSave(BillApproval entity)
  39. {
  40. base.AfterSave(entity);
  41. CheckBillApproval(entity.Bill.ID);
  42. }
  43. protected override void AfterSave(IEnumerable<BillApproval> entities)
  44. {
  45. var _billApprovals = entities as BillApproval[] ?? entities.ToArray();
  46. base.AfterSave(_billApprovals);
  47. var _ids = _billApprovals.Select(x => x.Bill.ID).Distinct().ToArray();
  48. foreach (var _id in _ids)
  49. CheckBillApproval(_id);
  50. }
  51. protected override void AfterDelete(BillApproval entity)
  52. {
  53. base.AfterDelete(entity);
  54. CheckBillApproval(entity.Bill.ID);
  55. }
  56. }