123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- using Comal.Classes;
- using InABox.Core;
- using InABox.Database;
- namespace PRS.Shared.Database_Update_Scripts;
- internal class Update_8_14 : 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)");
- }
- }
- }
|