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");
- }
- }
- }
|