Update_7_37.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using Comal.Classes;
  2. using InABox.Core;
  3. using InABox.Database;
  4. namespace PRS.Shared;
  5. public class Update_7_37 : DatabaseUpdateScript
  6. {
  7. public override VersionNumber Version => new VersionNumber(7, 37);
  8. public override bool Update()
  9. {
  10. UpdateDigitalFormFlags();
  11. UpdateJobLeads();
  12. return true;
  13. }
  14. private void UpdateDigitalFormFlags()
  15. {
  16. // Find all classes that derive from EntityForm
  17. var formtypes = CoreUtils.TypeList(
  18. new[]
  19. {
  20. typeof(Setout).Assembly
  21. },
  22. myType =>
  23. myType is { IsClass: true, IsAbstract: false, IsGenericType: false }
  24. && myType.IsSubclassOf(typeof(Entity))
  25. && myType.GetInterfaces().Contains(typeof(IEntityForm))
  26. ).ToArray();
  27. foreach (var formtype in formtypes)
  28. {
  29. var filter = Filter.Create(formtype, "Processed").IsEqualTo(true)
  30. .And("FormProcessed").IsEqualTo(DateTime.MinValue);
  31. var columns = Columns.None(formtype)
  32. .Add("ID")
  33. .Add("Processed")
  34. .Add("FormProcessed")
  35. .Add("LastUpdate");
  36. var forms = DbFactory.NewProvider(Logger.Main).Query(formtype, filter, columns)
  37. .Rows
  38. .Select(r => r.ToObject(formtype))
  39. .OfType<Entity>()
  40. .ToArray();
  41. if (!forms.Any())
  42. continue;
  43. foreach (var form in forms)
  44. {
  45. var lastupdate = CoreUtils.GetPropertyValue(form, "LastUpdate");
  46. CoreUtils.SetPropertyValue(form,"FormProcessed", lastupdate);
  47. CoreUtils.SetPropertyValue(form,"Processed", false);
  48. }
  49. DbFactory.NewProvider(Logger.Main).Save(formtype, forms);
  50. Logger.Send(LogType.Information, "", $"{forms.Length} {formtype.Name}s processed");
  51. }
  52. }
  53. private static void UpdateJobLeads()
  54. {
  55. List<Job> jobs;
  56. IColumns columns = Columns.None<Job>().Add(x => x.ID)
  57. .Add(x => x.ProjectLead.ID)
  58. .Add(x => x.SiteLead.ID)
  59. .Add("ManagerLink.ID")
  60. .Add("EmployeeLink.ID");
  61. jobs = DbFactory.NewProvider(Logger.Main).Query(
  62. typeof(Job),
  63. null,
  64. columns
  65. ).ToObjects<Job>().ToList();
  66. foreach (var item in jobs)
  67. {
  68. item.ProjectLead.ID = CoreUtils.GetPropertyValue(item, "ManagerLink.ID") is Guid _mgr ? _mgr : Guid.Empty;
  69. CoreUtils.SetPropertyValue(jobs, "ManagerLink.ID", Guid.Empty);
  70. item.SiteLead.ID = CoreUtils.GetPropertyValue(item, "EmployeeLink.ID") is Guid _emp ? _emp : Guid.Empty;
  71. CoreUtils.SetPropertyValue(jobs, "EmployeeLink.ID", Guid.Empty);
  72. }
  73. var updates = jobs.Where(x => x.IsChanged()).ToArray();
  74. if (updates.Any())
  75. DbFactory.NewProvider(Logger.Main).Save(updates);
  76. Logger.Send(LogType.Information, "", $"{jobs.Count} {typeof(Job).Name}s processed");
  77. }
  78. }