| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | using Comal.Classes;using InABox.Core;using InABox.Database;namespace PRS.Shared.Database_Update_Scripts;internal class Update_8_14_Unused : DatabaseUpdateScript{    private static readonly int CHUNK_SIZE = 500;    private static readonly bool DESTRUCTIVE = false;        public override VersionNumber Version => new(8, 14);        public override bool Update()    {        var _provider = DbFactory.NewProvider(Logger.Main);        Clear_POIAs(_provider);        var _poias = Migrate_JRIPOIs(_provider);        Migrate_POIs(_provider, _poias);        return true;    }    private void Clear_POIAs(IProvider provider)    {        return;        Logger.Send(LogType.Information, "", "Clearing Existing Allocations");        var _queue = provider.Query(            new Filter<PurchaseOrderItemAllocation>().All(),            Columns.None<PurchaseOrderItemAllocation>().Add(x => x.ID)        ).Rows.ToQueue();        while (_queue.Any())        {            List<PurchaseOrderItemAllocation> _poias = _queue                .Dequeue(CHUNK_SIZE)                .Select(x => x.ToObject<PurchaseOrderItemAllocation>())                .ToList();            provider.Delete(_poias, "");            Logger.Send(LogType.Information, "", $"- Deleted {_poias.Count} Allocations ({_queue.Count} remaining)");        }    }    private List<PurchaseOrderItemAllocation> Migrate_JRIPOIs(IProvider provider)    {        var _result = new List<PurchaseOrderItemAllocation>();        return _result;                Logger.Send(LogType.Information,"","Migrating JobRequisitionItems");        var _queue = provider.Query(            new Filter<JobRequisitionItemPurchaseOrderItem>().All(),            Columns.None<JobRequisitionItemPurchaseOrderItem>()                .Add(x=>x.PurchaseOrderItem.ID)                .Add(x=>x.PurchaseOrderItem.Qty)                .Add(x=>x.JobRequisitionItem.ID)                .Add(x=>x.JobRequisitionItem.Job.ID)        ).Rows.ToQueue();                while (_queue.Any())        {            List<PurchaseOrderItemAllocation> _poias = new();            var _jripois = _queue.Dequeue(CHUNK_SIZE).Select(x=>x.ToObject<JobRequisitionItemPurchaseOrderItem>()).ToList();            foreach (var _jripoi in _jripois)            {                var _poia = new PurchaseOrderItemAllocation();                _poia.Item.ID = _jripoi.ID;                _poia.Job.ID = _jripoi.JobRequisitionItem.Job.ID;                _poia.JobRequisitionItem.ID = _jripoi.JobRequisitionItem.ID;                _poia.Quantity = _jripoi.PurchaseOrderItem.Qty;                _poias.Add(_poia);                CoreUtils.SetPropertyValue(_jripoi,"Job.ID",Guid.Empty);            }            provider.Save(_poias);            if (DESTRUCTIVE)                provider.Delete(_jripois,"");            Logger.Send(LogType.Information, "", $"- Created {_poias.Count} Allocations ({_queue.Count} remaining)");            _result.AddRange(_poias);        }        return _result;    }        private void Migrate_POIs(IProvider provider, List<PurchaseOrderItemAllocation> poias)    {        Logger.Send(LogType.Information,"","Migrating PurchaseOrderItems");        var _ids = poias.Select(x => x.Item.ID).Distinct().ToArray();        var _queue = provider.Query(            new Filter<PurchaseOrderItem>("Job.ID").IsNotEqualTo(Guid.Empty),            Columns.Required<PurchaseOrderItem>().Add("Job.ID")        ).Rows.ToQueue();                while (_queue.Any())        {            List<PurchaseOrderItemAllocation> _poias = new();            var _pois = _queue.Dequeue(CHUNK_SIZE)                .Where(r => !_ids.Contains(r.Get<PurchaseOrderItemAllocation,Guid>(c=>c.ID)))                .Select(x=>x.ToObject<PurchaseOrderItem>())                .ToList();            foreach (var _poi in _pois)            {                var _poia = new PurchaseOrderItemAllocation();                _poia.Item.ID = _poi.ID;                _poia.Job.ID = (Guid)(CoreUtils.GetPropertyValue(_poi, "Job.ID") ?? Guid.Empty);                _poia.Quantity = _poi.Qty;                _poias.Add(_poia);                CoreUtils.SetPropertyValue(_poi,"Job.ID",Guid.Empty);            }            provider.Save(_poias);            if(DESTRUCTIVE)                provider.Save(_pois);            Logger.Send(LogType.Information, "", $"- Created {_poias.Count} Allocations ({_queue.Count} remaining)");        }    }}
 |