using Comal.Classes; using InABox.Core; using InABox.Database; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PRS.Shared; public class Update_7_48_ProductInstances : DatabaseUpdateScript { public override VersionNumber Version => new VersionNumber(7, 48); public override bool Update() { var products = DbFactory.NewProvider(Logger.Main).Query( new Filter(x => x.DefaultInstance.ID).IsEqualTo(Guid.Empty), Columns.None().Add(x => x.ID) .Add(x => x.DefaultStyle.ID) .Add(x => x.MinimumStockLevel) .Add(x => x.Dimensions.Unit.ID) .Add(x => x.Dimensions.Quantity) .Add(x => x.Dimensions.Length) .Add(x => x.Dimensions.Width) .Add(x => x.Dimensions.Height) .Add(x => x.Dimensions.Weight) .Add(x => x.Dimensions.Value) .Add(x => x.Dimensions.UnitSize)) .ToObjects(); var productInstances = new List>(); foreach (var product in products) { if (product.MinimumStockLevel != 0 || product.DefaultStyle.ID != Guid.Empty || product.Dimensions.Unit.ID != Guid.Empty) { var instance = new ProductInstance(); instance.Product.ID = product.ID; instance.MinimumStockLevel = product.MinimumStockLevel; instance.Dimensions.CopyFrom(product.Dimensions); instance.Style.ID = product.DefaultStyle.ID; productInstances.Add(new(product, instance)); } } Logger.Send(LogType.Information, "", $"Creating ProductInstances for {productInstances.Count} products."); DbFactory.NewProvider(Logger.Main).Save(productInstances.Select(x => x.Item2)); foreach (var (product, instance) in productInstances) { product.DefaultInstance.ID = instance.ID; } DbFactory.NewProvider(Logger.Main).Save(productInstances.Select(x => x.Item1)); return true; } }