CostCentreStore.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using Comal.Classes;
  2. using InABox.Core;
  3. namespace Comal.Stores;
  4. public class CostCentreStore : BaseStore<CostCentre>
  5. {
  6. private void UpdateJobScopeCostCentres(IEnumerable<CostCentre> entities)
  7. {
  8. var _entities = entities as CostCentre[] ?? entities.ToArray();
  9. var _adds = _entities
  10. .Where(x => x.HasOriginalValue(x => x.IsJobCostCentre))
  11. .Where(x => x.IsJobCostCentre).ToArray();
  12. if (_adds.Any())
  13. {
  14. var _new = Provider.Query(
  15. Filter<JobScope>.Where(x => x.ID).NotInQuery(Filter<JobScopeCostCentre>.Where(x => x.CostCentre.ID).InList(_adds.Select(x=>x.ID).ToArray()), x => x.Scope.ID),
  16. Columns.None<JobScope>().Add(x => x.ID).Add(x=>x.Job.ID)
  17. ).Rows.Select(r =>
  18. {
  19. return _entities.Select(e =>
  20. {
  21. var _insert = new JobScopeCostCentre();
  22. _insert.Job.ID = r.Get<JobScope, Guid>(x => x.ID);
  23. _insert.Scope.ID = r.Get<JobScope, Guid>(x => x.ID);
  24. _insert.CostCentre.ID = e.ID;
  25. return _insert;
  26. });
  27. }).SelectMany(x=>x).ToArray();
  28. Provider.Save(_new);
  29. }
  30. var _removes = _entities
  31. .Where(x => x.HasOriginalValue(x => x.IsJobCostCentre))
  32. .Where(x => !x.IsJobCostCentre).ToArray();
  33. if (_removes.Any())
  34. {
  35. var _deletes = Provider.Query(
  36. Filter<JobScopeCostCentre>.Where(x => x.CostCentre.ID).InList(_removes.Select(x => x.ID).ToArray())
  37. .And(x => x.Cost).IsEqualTo(0.0F)
  38. .And(x=>x.Sell).IsEqualTo(0.0F),
  39. Columns.None<JobScopeCostCentre>().Add(x => x.ID)
  40. ).ToArray<JobScopeCostCentre>();
  41. Provider.Delete(_deletes,this.UserID);
  42. }
  43. }
  44. protected override void AfterSave(IEnumerable<CostCentre> entities)
  45. {
  46. base.AfterSave(entities);
  47. UpdateJobScopeCostCentres(entities);
  48. }
  49. }