Update_8_49.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using Comal.Classes;
  2. using InABox.Core;
  3. using InABox.Database;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace PRS.Shared.Database_Update_Scripts;
  10. internal class Update_8_49 : DatabaseUpdateScript
  11. {
  12. public override VersionNumber Version => new(8, 49);
  13. public override bool Update()
  14. {
  15. MigrateBillApprovals();
  16. return true;
  17. }
  18. private void MigrateBillApprovals()
  19. {
  20. var _provider = DbFactory.NewProvider(Logger.Main);
  21. Logger.Send(LogType.Information, "", $"Migrating Bill Approvals...");
  22. var _approvals = _provider.Query(
  23. new Filter<BillApproval>().All(),
  24. Columns.Local<BillApproval>().Add("Approved")
  25. ).ToArray<BillApproval>()
  26. .ToArray();
  27. Utils.Utils.ProcessInChunks(
  28. _approvals,
  29. chunk =>
  30. {
  31. foreach(var _approval in chunk)
  32. {
  33. var _date = (DateTime)(CoreUtils.GetPropertyValue(_approval,"Approved") ?? DateTime.MinValue);
  34. _approval.Status = _date.IsEmpty() ? BillApprovalStatus.NotYetApproved : BillApprovalStatus.Approved;
  35. }
  36. _provider.Save(chunk.Where(x => x.IsChanged()));
  37. },
  38. 100,
  39. percent => Logger.Send(LogType.Information, "", $"Migrating Bill Approvals: {percent:F2}%")
  40. );
  41. Logger.Send(LogType.Information, "", $"Updating Bill Statuses...");
  42. var _bills = _provider.Query<Bill>(
  43. new Filter<Bill>().All(),
  44. Columns.Required<Bill>().Add(x=>x.ApprovalStatus)
  45. ).ToArray<Bill>();
  46. Utils.Utils.ProcessInChunks(
  47. _bills,
  48. chunk =>
  49. {
  50. foreach (var _bill in chunk)
  51. {
  52. var _statuses = _approvals
  53. .Where(x => x.Bill.ID == _bill.ID)
  54. .Select(x => x.Status)
  55. .Distinct()
  56. .ToArray();
  57. _bill.ApprovalStatus = Bill.CalculateApprovalStatus(_statuses);
  58. }
  59. _provider.Save(chunk.Where(x => x.IsChanged()));
  60. },
  61. 100,
  62. percent => Logger.Send(LogType.Information, "", $"Migrating Bill Statuses: {percent:F2}%")
  63. );
  64. Logger.Send(LogType.Information, "", $"Migrating Bill Statuses complete");
  65. }
  66. }