Update_8_47.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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_47 : DatabaseUpdateScript
  11. {
  12. public override VersionNumber Version => new(8, 47);
  13. public override bool Update()
  14. {
  15. MigrateProductInstanceMinimumStockLevels();
  16. return true;
  17. }
  18. private void MigrateProductInstanceMinimumStockLevels()
  19. {
  20. var provider = DbFactory.NewProvider(Logger.Main);
  21. Logger.Send(LogType.Information, "", $"Migrating ProductInstance Minimum Stock Levels...");
  22. var instances = provider.Query(
  23. new Filter<ProductInstance>("MinimumStockLevel").IsNotEqualTo(FilterConstant.Null),
  24. Columns.Local<ProductInstance>()
  25. ).ToArray<ProductInstance>();
  26. Utils.Utils.ProcessInChunks(
  27. instances,
  28. chunk =>
  29. {
  30. foreach(var instance in instances)
  31. {
  32. instance.MinimumStock.CustomStockLevel = true;
  33. instance.MinimumStock.StockLevel = (int)(CoreUtils.GetPropertyValue(instance, "MinimumStockLevel") ?? 0);
  34. CoreUtils.SetPropertyValue(instance, "MinimumStockLevel", 0);
  35. }
  36. provider.Save(chunk.Where(x => x.IsChanged()));
  37. },
  38. 1000,
  39. percent => Logger.Send(LogType.Information, "", $"Migrating Minimum Stock Levels: {percent:F2}%")
  40. );
  41. Logger.Send(LogType.Information, "", $"Migrating Minimum Stock Levels complete");
  42. }
  43. }