//using Comal.Classes; //using Comal.Stores; //using InABox.Core; //using InABox.Database; //using PRS.Shared.Database_Update_Scripts.Utils; //using PRSStores; //using System.Collections.Generic; //using System.Linq; //using System.Text; //using System.Threading.Tasks; //using static ICSharpCode.AvalonEdit.Document.TextDocumentWeakEventManager; // //namespace PRS.Shared; // //public class Update_7_52 : DatabaseUpdateScript //{ // // private Type jripoiType = null; // // public Update_7_52() // { // jripoiType = CoreUtils.GetEntity("Comal.Classes.JobRequisitionItemPurchaseOrderItem"); // } // // // public override VersionNumber Version => new VersionNumber(7, 52); // // private IStore? _store; // // private IStore Store // { // get // { // _store ??= DbFactory.FindStore(Guid.Empty, "", Platform.Server, CoreUtils.GetVersion(), Logger.New()); // return _store; // } // } // // private void UpdateStockMovements() // { // var jobRequiItems = DbFactory.NewProvider(Logger.Main).Query( // new Filter(x => x.PurchaseOrderItem.ID).IsNotEqualTo(null), // Columns.None().Add(x => x.ID) // .Add(x => x.PurchaseOrderItem.ID)) // .ToObjects() // .ToList(); // // var _poiIDs = DbFactory.NewProvider(Logger.Main).GetTable(jripoiType).ExtractValues("PurchaseOrderItem.ID").Distinct().ToArray(); // // var mvts = DbFactory.NewProvider(Logger.Main).Query( // new Filter(x => x.JobRequisitionItem.ID).IsEqualTo(null) // .And(x => x.OrderItem.ID).IsNotEqualTo(null) // .And(new Filter(x => x.OrderItem.ID).InList(_poiIDs) //(null, x => x.PurchaseOrderItem.ID) // .Or(x => x.OrderItem.ID).InQuery(null, x => x.PurchaseOrderItem.ID)), // Columns.None().Add(x => x.ID) // .Add(x => x.OrderItem.ID)) // .ToObjects() // .ToList(); // // Logger.Send(LogType.Information, "", $"Updating JobRequisitionItem.ID for {mvts.Count} StockMovements"); // // var orderItemIDs = mvts.Select(x => x.OrderItem.ID).ToArray(); // // var jriPois = DbFactory.NewProvider(Logger.Main).Query( // jripoiType, Filter.Create(jripoiType,"PurchaseOrderItem.ID",Operator.InList, orderItemIDs), // Columns.None(jripoiType).Add("JobRequisitionItem.ID").Add("PurchaseOrderItem.ID") // ); // // var _jris = DbFactory.NewProvider(Logger.Main).Query( // new Filter(x => x.PurchaseOrderItem.ID).InList(orderItemIDs), // Columns.None().Add(x => x.ID).Add(x => x.PurchaseOrderItem.ID)) // .ToObjects(); // // var requiIDs = new Dictionary(); // foreach(var _row in jriPois.Rows) // { // requiIDs.TryAdd(_row.Get("PurchaseOrderItem.ID"), _row.Get("JobRequisitionItem.ID")); // } // foreach (var _jri in _jris) // { // requiIDs.TryAdd(_jri.PurchaseOrderItem.ID, _jri.ID); // } // // foreach(var mvt in mvts) // { // if(requiIDs.TryGetValue(mvt.OrderItem.ID, out var requiItemID)) // { // mvt.JobRequisitionItem.ID = requiItemID; // } // else // { // Logger.Send(LogType.Error, "", $"StockMovement which didn't have an associated JobRequisitionItem: {mvt.ID}"); // } // } // // var changed = mvts.Where(x => x.IsChanged()).ToList(); // // // Not going through the store otherwise the JobRequisitionItem Status will be updated incorrectly. // DbFactory.NewProvider(Logger.Main).Save(changed); // // Logger.Send(LogType.Information, "", $"Updated {changed.Count} StockMovements"); // } // // private void UpdateOrderStatus() // { // var jobRequiItems = DbFactory.NewProvider(Logger.Main).Query( // new Filter(x => x.OrderRequired).IsEqualTo(DateTime.MinValue) // .And(new Filter(x => x.Status).IsEqualTo(JobRequisitionItemStatus.OrderRequired) // .Or(x => x.Status).IsEqualTo(JobRequisitionItemStatus.OnOrder) // .Or(x => x.Status).IsEqualTo(JobRequisitionItemStatus.Received)), // Columns.None().Add(x => x.ID) // .Add(x => x.LastUpdate)) // .ToObjects() // .ToList(); // // foreach (var jri in jobRequiItems) // { // jri.OrderRequired = jri.LastUpdate; // } // // DbFactory.NewProvider(Logger.Main).Save(jobRequiItems); // } // // private void CreateJobRequisitionItemPurchaseOrderItems() // { // // var _poiIDs = DbFactory.NewProvider(Logger.Main).GetTable(jripoiType).ExtractValues("PurchaseOrderItem.ID").Distinct().ToArray(); // // var jobRequiItems = DbFactory.NewProvider(Logger.Main).Query( // new Filter(x => x.PurchaseOrderItem.ID).IsNotEqualTo(null) // .And(x => x.ID).NotInList(_poiIDs), // Columns.None().Add(x => x.ID) // .Add(x => x.PurchaseOrderItem.ID) // .Add(x => x.Status)) // .ToObjects() // .ToList(); // Logger.Send(LogType.Information, "", $"Creating JobRequisitionPurchaseOrderItems for {jobRequiItems.Count} JobRequisitionItems"); // // var newJRIPois = new List(); // foreach (var jri in jobRequiItems) // { // var jriPoi = Activator.CreateInstance(jripoiType) as Entity; // CoreUtils.SetPropertyValue(jriPoi,"JobRequisitionItem.ID",jri.ID); // CoreUtils.SetPropertyValue(jriPoi,"PurchaseOrderItem.ID",jri.PurchaseOrderItem.ID); // newJRIPois.Add(jriPoi); // } // DbFactory.NewProvider(Logger.Main).Save(jripoiType,newJRIPois); // DbFactory.NewProvider(Logger.Main).Save(jobRequiItems); // } // // public override bool Update() // { // UpdateStockMovements(); // UpdateOrderStatus(); // CreateJobRequisitionItemPurchaseOrderItems(); // //JobRequisitionItemUtils.RefreshStatuses(Store); // // return true; // } //}