Update_8_22.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using Comal.Classes;
  2. using InABox.Configuration;
  3. using InABox.Core;
  4. using InABox.Database;
  5. using NPOI.SS.Formula.Functions;
  6. using Columns = InABox.Core.Columns;
  7. namespace PRS.Shared.Database_Update_Scripts;
  8. internal class Update_8_22 : DatabaseUpdateScript
  9. {
  10. public override VersionNumber Version => new(8, 22);
  11. public override bool Update()
  12. {
  13. var _provider = DbFactory.NewProvider(Logger.Main);
  14. MigrateIssues<Activity>(_provider);
  15. MigrateIssues<ProductStyle>(_provider);
  16. MigrateIssues<Product>(_provider);
  17. MigrateIssues<CostSheet>(_provider);
  18. MigrateIssues<Kit>(_provider);
  19. MigrateIssues<JobBillOfMaterialsItem>(_provider);
  20. MigrateIssues<JobRequisitionItem>(_provider);
  21. MigrateIssues<ManufacturingPacket>(_provider);
  22. return true;
  23. }
  24. private void MigrateIssues<T>(IProvider provider) where T : Entity, IPersistent, IIssues, IProblems, new()
  25. {
  26. var items = provider.Query(
  27. new Filter<T>(x => x.Issues).IsNotEqualTo(""),
  28. Columns.None<T>().Add(x=>x.ID).Add(x=>x.Issues)
  29. ).Rows.ToObjects<T>().ToQueue();
  30. while (items.Any())
  31. {
  32. Logger.Send(LogType.Information,"",$"Migrating {typeof(T).Name.Split('.').Last()} Issues ({items.Count} remaining)..");
  33. var updates = items.Dequeue(100).ToArray();
  34. foreach (var update in updates)
  35. {
  36. update.Problem.Notes = new string[] { update.Issues };
  37. update.Issues = "";
  38. }
  39. provider.Save(updates);
  40. }
  41. Logger.Send(LogType.Information,"",$"Migrating {typeof(T).Name.Split('.').Last()} Issues done.");
  42. }
  43. }