Update_8_25.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using Comal.Classes;
  2. using InABox.Core;
  3. using InABox.Database;
  4. namespace PRS.Shared.Database_Update_Scripts;
  5. internal class Update_8_25 : DatabaseUpdateScript
  6. {
  7. private static readonly int CHUNK_SIZE = 500;
  8. private static readonly bool DESTRUCTIVE = false;
  9. public override VersionNumber Version => new(8, 25);
  10. public override bool Update()
  11. {
  12. var _provider = DbFactory.NewProvider(Logger.Main);
  13. CheckProblemNotes<Bill>(_provider);
  14. CheckProblemNotes<Activity>(_provider);
  15. CheckProblemNotes<ProductStyle>(_provider);
  16. CheckProblemNotes<Product>(_provider);
  17. CheckProblemNotes<CostSheet>(_provider);
  18. CheckProblemNotes<Kit>(_provider);
  19. CheckProblemNotes<JobBillOfMaterialsItem>(_provider);
  20. CheckProblemNotes<JobRequisitionItem>(_provider);
  21. CheckProblemNotes<ManufacturingPacket>(_provider);
  22. return true;
  23. }
  24. private void CheckProblemNotes<T>(IProvider provider) where T : Entity, IProblems<ManagedProblem>, new()
  25. {
  26. Queue<T> _updates = new Queue<T>();
  27. Logger.Send(LogType.Information, "", $"Checking {typeof(T).EntityName().Split('.').Last()} Problem Notes");
  28. var _problems = provider.Query<T>(
  29. new Filter<T>(x=>x.Problem.Notes).IsNotEqualTo(Array.Empty<string>()),
  30. Columns.None<T>()
  31. .Add(x=>x.ID)
  32. .Add(x=>x.Problem.Notes)
  33. ).ToObjects<T>();
  34. foreach (var _problem in _problems)
  35. {
  36. if (_problem.Problem.Notes is string[] _notes && _notes.Length <= 1 && string.IsNullOrWhiteSpace(_notes.FirstOrDefault()))
  37. {
  38. _problem.Problem.Notes = null;
  39. _updates.Enqueue(_problem);
  40. }
  41. }
  42. while (_updates.Any())
  43. {
  44. var _chunk = _updates.Dequeue(100).ToArray();
  45. Logger.Send(LogType.Information, "", $"- Updating {_chunk.Length} {typeof(T).EntityName().Split('.').Last()} Problems ({_updates.Count} remaining)");
  46. provider.Save(_chunk);
  47. }
  48. }
  49. }