Update_7_48_ProductInstances.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using Comal.Classes;
  2. using InABox.Core;
  3. using InABox.Database;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace PRS.Shared;
  9. public class Update_7_48_ProductInstances : DatabaseUpdateScript
  10. {
  11. public override VersionNumber Version => new VersionNumber(7, 48);
  12. public override bool Update()
  13. {
  14. var products = DbFactory.NewProvider(Logger.Main).Query<Product>(
  15. new Filter<Product>(x => x.DefaultInstance.ID).IsEqualTo(Guid.Empty),
  16. Columns.None<Product>().Add(x => x.ID)
  17. .Add(x => x.DefaultStyle.ID)
  18. .Add(x => x.MinimumStockLevel)
  19. .Add(x => x.Dimensions.Unit.ID)
  20. .Add(x => x.Dimensions.Quantity)
  21. .Add(x => x.Dimensions.Length)
  22. .Add(x => x.Dimensions.Width)
  23. .Add(x => x.Dimensions.Height)
  24. .Add(x => x.Dimensions.Weight)
  25. .Add(x => x.Dimensions.Value)
  26. .Add(x => x.Dimensions.UnitSize))
  27. .ToObjects<Product>();
  28. var productInstances = new List<Tuple<Product, ProductInstance>>();
  29. foreach (var product in products)
  30. {
  31. if (product.MinimumStockLevel != 0 || product.DefaultStyle.ID != Guid.Empty || product.Dimensions.Unit.ID != Guid.Empty)
  32. {
  33. var instance = new ProductInstance();
  34. instance.Product.ID = product.ID;
  35. instance.MinimumStockLevel = product.MinimumStockLevel;
  36. instance.Dimensions.CopyFrom(product.Dimensions);
  37. instance.Style.ID = product.DefaultStyle.ID;
  38. productInstances.Add(new(product, instance));
  39. }
  40. }
  41. Logger.Send(LogType.Information, "", $"Creating ProductInstances for {productInstances.Count} products.");
  42. DbFactory.NewProvider(Logger.Main).Save(productInstances.Select(x => x.Item2));
  43. foreach (var (product, instance) in productInstances)
  44. {
  45. product.DefaultInstance.ID = instance.ID;
  46. }
  47. DbFactory.NewProvider(Logger.Main).Save(productInstances.Select(x => x.Item1));
  48. return true;
  49. }
  50. }