Update_7_48_ProductInstances.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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;
  10. public class Update_7_48_ProductInstances : DatabaseUpdateScript
  11. {
  12. public override VersionNumber Version => new VersionNumber(7, 48);
  13. public override bool Update()
  14. {
  15. var products = DbFactory.Provider.Query<Product>(
  16. new Filter<Product>(x => x.DefaultInstance.ID).IsEqualTo(Guid.Empty),
  17. new Columns<Product>(x => x.ID)
  18. .Add(x => x.DefaultStyle.ID)
  19. .Add(x => x.MinimumStockLevel)
  20. .Add(x => x.Dimensions.Unit.ID)
  21. .Add(x => x.Dimensions.Quantity)
  22. .Add(x => x.Dimensions.Length)
  23. .Add(x => x.Dimensions.Width)
  24. .Add(x => x.Dimensions.Height)
  25. .Add(x => x.Dimensions.Weight)
  26. .Add(x => x.Dimensions.Value)
  27. .Add(x => x.Dimensions.UnitSize))
  28. .ToObjects<Product>();
  29. var productInstances = new List<Tuple<Product, ProductInstance>>();
  30. foreach (var product in products)
  31. {
  32. if (product.MinimumStockLevel != 0 || product.DefaultStyle.ID != Guid.Empty || product.Dimensions.Unit.ID != Guid.Empty)
  33. {
  34. var instance = new ProductInstance();
  35. instance.Product.ID = product.ID;
  36. instance.MinimumStockLevel = product.MinimumStockLevel;
  37. instance.Dimensions.CopyFrom(product.Dimensions);
  38. instance.Style.ID = product.DefaultStyle.ID;
  39. productInstances.Add(new(product, instance));
  40. }
  41. }
  42. Logger.Send(LogType.Information, "", $"Creating ProductInstances for {productInstances.Count} products.");
  43. DbFactory.Provider.Save(productInstances.Select(x => x.Item2));
  44. foreach (var (product, instance) in productInstances)
  45. {
  46. product.DefaultInstance.ID = instance.ID;
  47. }
  48. DbFactory.Provider.Save(productInstances.Select(x => x.Item1));
  49. return true;
  50. }
  51. }