using Comal.Classes; using InABox.Core; using InABox.Database; namespace PRS.Shared; public class Update_7_00 : DatabaseUpdateScript { public override VersionNumber Version => new (7, 00); public override bool Update() { Convert( new Filter(x=>x.Booked.Start).IsEqualTo(DateTime.MinValue) .And(x=>x.Booked.Finish).IsEqualTo(DateTime.MinValue) .And(x=>x.Actual.Finish).IsEqualTo(DateTime.MinValue) .And(x=>x.Actual.Finish).IsEqualTo(DateTime.MinValue), new Map("Start",x => x.Booked.Start), new Map("Finish",x => x.Booked.Finish), new Map("Start",x => x.Actual.Start), new Map("Finish",x => x.Actual.Finish) ); // ConvertTimes( // x => x.Actual.Duration, // new TimeExpressions(x => x.Actual.Start, x => x.Actual.Finish), // new TimeExpressions(x => x.Approved.Start, x => x.Approved.Finish) // ); Convert_StandardLeaves_and_LeaveRequests(); return true; } void Convert_StandardLeaves_and_LeaveRequests() { // Delete from TimeSheet where processed={} and leaverequestlink.id != empty var unprocessedtimesheets = DbFactory.NewProvider(Logger.Main).Query( new Filter(x => x.Processed).IsEqualTo(DateTime.MinValue) .And(x => x.LeaveRequestLink.ID).IsNotEqualTo(Guid.Empty), Columns.None().Add(x => x.ID) ).Rows.Select(x=>x.ToObject()).ToArray(); int iTimes = 0; while (iTimes < unprocessedtimesheets.Length) { var deletions = unprocessedtimesheets.Skip(iTimes).Take(100).ToArray(); DbFactory.NewProvider(Logger.Main).Purge(deletions); iTimes += deletions.Length; } //DbFactory.NewProvider(Logger.Main).Delete(unprocessedtimesheets,""); // Find all Leave Requests where public holiday != empty var standardleaverequests = DbFactory.NewProvider(Logger.Main).Query( new Filter(x => x.PublicHoliday.ID).IsNotEqualTo(Guid.Empty), Columns.None().Add(x => x.ID) .Add(x=>x.PublicHoliday.ID) ).Rows.Select(x => x.ToObject()).ToArray(); foreach (var standardleaverequest in standardleaverequests) { // Find all timesheets for this leave request var standardleavetimesheets = DbFactory.NewProvider(Logger.Main).Query( new Filter(x=>x.LeaveRequestLink.ID).IsEqualTo(standardleaverequest.ID), Columns.None().Add(x => x.ID) .Add(x=>x.LeaveRequestLink.ID) ).Rows.Select(x=>x.ToObject()).ToArray(); // Redirect timesheet from leaverequest to standardleave foreach (var standardleavetimesheet in standardleavetimesheets) { standardleavetimesheet.StandardLeaveLink.ID = standardleaverequest.PublicHoliday.ID; standardleavetimesheet.LeaveRequestLink.ID = Guid.Empty; } if (standardleavetimesheets.Any()) DbFactory.NewProvider(Logger.Main).Save(standardleavetimesheets); } // delete these leave requests int iRequests = 0; while (iRequests < standardleaverequests.Length) { var deletions = standardleaverequests.Skip(iRequests).Take(100).ToArray(); DbFactory.NewProvider(Logger.Main).Purge(deletions); iRequests += deletions.Length; } // Delete from Assignment where leaverequestlink id != empty var leaveassignments = DbFactory.NewProvider(Logger.Main).Query( new Filter(x => x.LeaveRequestLink.ID).IsNotEqualTo(Guid.Empty), Columns.None().Add(x => x.ID) ).Rows.Select(x=>x.ToObject()).ToArray(); int iAssignments = 0; while (iAssignments < leaveassignments.Length) { var deletions = leaveassignments.Skip(iAssignments).Take(100).ToArray(); DbFactory.NewProvider(Logger.Main).Purge(deletions); iAssignments += deletions.Length; } } }