Update_7_00.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using Comal.Classes;
  2. using InABox.Core;
  3. using InABox.Database;
  4. namespace PRS.Shared;
  5. public class Update_7_00 : DatabaseUpdateScript
  6. {
  7. public override VersionNumber Version => new (7, 00);
  8. public override bool Update()
  9. {
  10. Convert<Assignment>(
  11. new Filter<Assignment>(x=>x.Booked.Start).IsEqualTo(DateTime.MinValue)
  12. .And(x=>x.Booked.Finish).IsEqualTo(DateTime.MinValue)
  13. .And(x=>x.Actual.Finish).IsEqualTo(DateTime.MinValue)
  14. .And(x=>x.Actual.Finish).IsEqualTo(DateTime.MinValue),
  15. new Map<Assignment>("Start",x => x.Booked.Start),
  16. new Map<Assignment>("Finish",x => x.Booked.Finish),
  17. new Map<Assignment>("Start",x => x.Actual.Start),
  18. new Map<Assignment>("Finish",x => x.Actual.Finish)
  19. );
  20. // ConvertTimes<TimeSheet>(
  21. // x => x.Actual.Duration,
  22. // new TimeExpressions<TimeSheet>(x => x.Actual.Start, x => x.Actual.Finish),
  23. // new TimeExpressions<TimeSheet>(x => x.Approved.Start, x => x.Approved.Finish)
  24. // );
  25. Convert_StandardLeaves_and_LeaveRequests();
  26. return true;
  27. }
  28. void Convert_StandardLeaves_and_LeaveRequests()
  29. {
  30. // Delete from TimeSheet where processed={} and leaverequestlink.id != empty
  31. var unprocessedtimesheets = DbFactory.NewProvider(Logger.Main).Query<TimeSheet>(
  32. new Filter<TimeSheet>(x => x.Processed).IsEqualTo(DateTime.MinValue)
  33. .And(x => x.LeaveRequestLink.ID).IsNotEqualTo(Guid.Empty),
  34. Columns.None<TimeSheet>().Add(x => x.ID)
  35. ).Rows.Select(x=>x.ToObject<TimeSheet>()).ToArray();
  36. int iTimes = 0;
  37. while (iTimes < unprocessedtimesheets.Length)
  38. {
  39. var deletions = unprocessedtimesheets.Skip(iTimes).Take(100).ToArray();
  40. DbFactory.NewProvider(Logger.Main).Purge<TimeSheet>(deletions);
  41. iTimes += deletions.Length;
  42. }
  43. //DbFactory.NewProvider(Logger.Main).Delete<TimeSheet>(unprocessedtimesheets,"");
  44. // Find all Leave Requests where public holiday != empty
  45. var standardleaverequests = DbFactory.NewProvider(Logger.Main).Query<LeaveRequest>(
  46. new Filter<LeaveRequest>(x => x.PublicHoliday.ID).IsNotEqualTo(Guid.Empty),
  47. Columns.None<LeaveRequest>().Add(x => x.ID)
  48. .Add(x=>x.PublicHoliday.ID)
  49. ).Rows.Select(x => x.ToObject<LeaveRequest>()).ToArray();
  50. foreach (var standardleaverequest in standardleaverequests)
  51. {
  52. // Find all timesheets for this leave request
  53. var standardleavetimesheets = DbFactory.NewProvider(Logger.Main).Query<TimeSheet>(
  54. new Filter<TimeSheet>(x=>x.LeaveRequestLink.ID).IsEqualTo(standardleaverequest.ID),
  55. Columns.None<TimeSheet>().Add(x => x.ID)
  56. .Add(x=>x.LeaveRequestLink.ID)
  57. ).Rows.Select(x=>x.ToObject<TimeSheet>()).ToArray();
  58. // Redirect timesheet from leaverequest to standardleave
  59. foreach (var standardleavetimesheet in standardleavetimesheets)
  60. {
  61. standardleavetimesheet.StandardLeaveLink.ID = standardleaverequest.PublicHoliday.ID;
  62. standardleavetimesheet.LeaveRequestLink.ID = Guid.Empty;
  63. }
  64. if (standardleavetimesheets.Any())
  65. DbFactory.NewProvider(Logger.Main).Save(standardleavetimesheets);
  66. }
  67. // delete these leave requests
  68. int iRequests = 0;
  69. while (iRequests < standardleaverequests.Length)
  70. {
  71. var deletions = standardleaverequests.Skip(iRequests).Take(100).ToArray();
  72. DbFactory.NewProvider(Logger.Main).Purge<LeaveRequest>(deletions);
  73. iRequests += deletions.Length;
  74. }
  75. // Delete from Assignment where leaverequestlink id != empty
  76. var leaveassignments = DbFactory.NewProvider(Logger.Main).Query<Assignment>(
  77. new Filter<Assignment>(x => x.LeaveRequestLink.ID).IsNotEqualTo(Guid.Empty),
  78. Columns.None<Assignment>().Add(x => x.ID)
  79. ).Rows.Select(x=>x.ToObject<Assignment>()).ToArray();
  80. int iAssignments = 0;
  81. while (iAssignments < leaveassignments.Length)
  82. {
  83. var deletions = leaveassignments.Skip(iAssignments).Take(100).ToArray();
  84. DbFactory.NewProvider(Logger.Main).Purge<Assignment>(deletions);
  85. iAssignments += deletions.Length;
  86. }
  87. }
  88. }