StandardLeaveStore.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Comal.Classes;
  5. using InABox.Core;
  6. namespace Comal.Stores
  7. {
  8. internal class StandardLeaveStore : BaseStore<StandardLeave>
  9. {
  10. protected override void AfterSave(StandardLeave entity)
  11. {
  12. base.AfterSave(entity);
  13. var updates = new List<LeaveRequest>();
  14. var empdates = new Filter<Employee>(x => x.StartDate).IsEqualTo(DateTime.MinValue).Or(x => x.StartDate).IsLessThanOrEqualTo(entity.To);
  15. empdates.Ands.Add(new Filter<Employee>(x => x.FinishDate).IsEqualTo(DateTime.MinValue).Or(x => x.FinishDate)
  16. .IsGreaterThanOrEqualTo(entity.From));
  17. var leaves = Provider.Query(new Filter<LeaveRequest>(x => x.PublicHoliday.ID).IsEqualTo(entity.ID));
  18. var employees = Provider.Query(
  19. empdates,
  20. new Columns<Employee>(x => x.ID, x => x.StartDate, x => x.FinishDate)
  21. );
  22. foreach (var employee in employees.Rows)
  23. {
  24. var empid = employee.Get<Employee, Guid>(x => x.ID);
  25. var start = employee.Get<Employee, DateTime>(x => x.StartDate);
  26. var finish = employee.Get<Employee, DateTime>(x => x.FinishDate);
  27. var leaverow = leaves.Rows.FirstOrDefault(row =>
  28. row.Get<LeaveRequest, Guid>(x => x.EmployeeLink.ID).Equals(empid) &&
  29. row.Get<LeaveRequest, Guid>(x => x.PublicHoliday.ID).Equals(entity.ID));
  30. var leave = leaverow?.ToObject<LeaveRequest>();
  31. if (leave == null)
  32. leave = new LeaveRequest();
  33. leave.LoadFrom(entity);
  34. leave.EmployeeLink.ID = empid;
  35. if (!start.Equals(DateTime.MinValue) && start > leave.From)
  36. leave.From = start;
  37. if (!finish.Equals(DateTime.MinValue) && finish < leave.To)
  38. leave.To = finish;
  39. leave.Status = LeaveRequestStatus.Approved;
  40. if (leave.IsChanged())
  41. updates.Add(leave);
  42. }
  43. if (updates.Any())
  44. FindSubStore<LeaveRequest>().Save(updates, "Updated from Standard Leave Entry");
  45. }
  46. }
  47. }