using System; using System.Collections.Generic; using System.Linq; using Comal.Classes; using InABox.Core; namespace Comal.Stores { internal class StandardLeaveStore : BaseStore { protected override void AfterSave(StandardLeave entity) { base.AfterSave(entity); var updates = new List(); var empdates = new Filter(x => x.StartDate).IsEqualTo(DateTime.MinValue).Or(x => x.StartDate).IsLessThanOrEqualTo(entity.To); empdates.Ands.Add(new Filter(x => x.FinishDate).IsEqualTo(DateTime.MinValue).Or(x => x.FinishDate) .IsGreaterThanOrEqualTo(entity.From)); var leaves = Provider.Query(new Filter(x => x.PublicHoliday.ID).IsEqualTo(entity.ID)); var employees = Provider.Query( empdates, new Columns(x => x.ID, x => x.StartDate, x => x.FinishDate) ); foreach (var employee in employees.Rows) { var empid = employee.Get(x => x.ID); var start = employee.Get(x => x.StartDate); var finish = employee.Get(x => x.FinishDate); var leaverow = leaves.Rows.FirstOrDefault(row => row.Get(x => x.EmployeeLink.ID).Equals(empid) && row.Get(x => x.PublicHoliday.ID).Equals(entity.ID)); var leave = leaverow?.ToObject(); if (leave == null) leave = new LeaveRequest(); leave.LoadFrom(entity); leave.EmployeeLink.ID = empid; if (!start.Equals(DateTime.MinValue) && start > leave.From) leave.From = start; if (!finish.Equals(DateTime.MinValue) && finish < leave.To) leave.To = finish; leave.Status = LeaveRequestStatus.Approved; if (leave.IsChanged()) updates.Add(leave); } if (updates.Any()) FindSubStore().Save(updates, "Updated from Standard Leave Entry"); } } }