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