Update_8_14.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using Comal.Classes;
  2. using InABox.Core;
  3. using InABox.Database;
  4. namespace PRS.Shared.Database_Update_Scripts;
  5. internal class Update_8_14 : DatabaseUpdateScript
  6. {
  7. private static readonly int CHUNK_SIZE = 500;
  8. private static readonly bool DESTRUCTIVE = false;
  9. public override VersionNumber Version => new(8, 14);
  10. public override bool Update()
  11. {
  12. var _provider = DbFactory.NewProvider(Logger.Main);
  13. Clear_POIAs(_provider);
  14. var _poias = Migrate_JRIPOIs(_provider);
  15. Migrate_POIs(_provider, _poias);
  16. return true;
  17. }
  18. private void Clear_POIAs(IProvider provider)
  19. {
  20. return;
  21. Logger.Send(LogType.Information, "", "Clearing Existing Allocations");
  22. var _queue = provider.Query(
  23. new Filter<PurchaseOrderItemAllocation>().All(),
  24. Columns.None<PurchaseOrderItemAllocation>().Add(x => x.ID)
  25. ).Rows.ToQueue();
  26. while (_queue.Any())
  27. {
  28. List<PurchaseOrderItemAllocation> _poias = _queue
  29. .Dequeue(CHUNK_SIZE)
  30. .Select(x => x.ToObject<PurchaseOrderItemAllocation>())
  31. .ToList();
  32. provider.Delete(_poias, "");
  33. Logger.Send(LogType.Information, "", $"- Deleted {_poias.Count} Allocations ({_queue.Count} remaining)");
  34. }
  35. }
  36. private List<PurchaseOrderItemAllocation> Migrate_JRIPOIs(IProvider provider)
  37. {
  38. var _result = new List<PurchaseOrderItemAllocation>();
  39. return _result;
  40. Logger.Send(LogType.Information,"","Migrating JobRequisitionItems");
  41. var _queue = provider.Query(
  42. new Filter<JobRequisitionItemPurchaseOrderItem>().All(),
  43. Columns.None<JobRequisitionItemPurchaseOrderItem>()
  44. .Add(x=>x.PurchaseOrderItem.ID)
  45. .Add(x=>x.PurchaseOrderItem.Qty)
  46. .Add(x=>x.JobRequisitionItem.ID)
  47. .Add(x=>x.JobRequisitionItem.Job.ID)
  48. ).Rows.ToQueue();
  49. while (_queue.Any())
  50. {
  51. List<PurchaseOrderItemAllocation> _poias = new();
  52. var _jripois = _queue.Dequeue(CHUNK_SIZE).Select(x=>x.ToObject<JobRequisitionItemPurchaseOrderItem>()).ToList();
  53. foreach (var _jripoi in _jripois)
  54. {
  55. var _poia = new PurchaseOrderItemAllocation();
  56. _poia.Item.ID = _jripoi.ID;
  57. _poia.Job.ID = _jripoi.JobRequisitionItem.Job.ID;
  58. _poia.JobRequisitionItem.ID = _jripoi.JobRequisitionItem.ID;
  59. _poia.Quantity = _jripoi.PurchaseOrderItem.Qty;
  60. _poias.Add(_poia);
  61. CoreUtils.SetPropertyValue(_jripoi,"Job.ID",Guid.Empty);
  62. }
  63. provider.Save(_poias);
  64. if (DESTRUCTIVE)
  65. provider.Delete(_jripois,"");
  66. Logger.Send(LogType.Information, "", $"- Created {_poias.Count} Allocations ({_queue.Count} remaining)");
  67. _result.AddRange(_poias);
  68. }
  69. return _result;
  70. }
  71. private void Migrate_POIs(IProvider provider, List<PurchaseOrderItemAllocation> poias)
  72. {
  73. Logger.Send(LogType.Information,"","Migrating PurchaseOrderItems");
  74. var _ids = poias.Select(x => x.Item.ID).Distinct().ToArray();
  75. var _queue = provider.Query(
  76. new Filter<PurchaseOrderItem>("Job.ID").IsNotEqualTo(Guid.Empty),
  77. Columns.Required<PurchaseOrderItem>().Add("Job.ID")
  78. ).Rows.ToQueue();
  79. while (_queue.Any())
  80. {
  81. List<PurchaseOrderItemAllocation> _poias = new();
  82. var _pois = _queue.Dequeue(CHUNK_SIZE)
  83. .Where(r => !_ids.Contains(r.Get<PurchaseOrderItemAllocation,Guid>(c=>c.ID)))
  84. .Select(x=>x.ToObject<PurchaseOrderItem>())
  85. .ToList();
  86. foreach (var _poi in _pois)
  87. {
  88. var _poia = new PurchaseOrderItemAllocation();
  89. _poia.Item.ID = _poi.ID;
  90. _poia.Job.ID = (Guid)(CoreUtils.GetPropertyValue(_poi, "Job.ID") ?? Guid.Empty);
  91. _poia.Quantity = _poi.Qty;
  92. _poias.Add(_poia);
  93. CoreUtils.SetPropertyValue(_poi,"Job.ID",Guid.Empty);
  94. }
  95. provider.Save(_poias);
  96. if(DESTRUCTIVE)
  97. provider.Save(_pois);
  98. Logger.Send(LogType.Information, "", $"- Created {_poias.Count} Allocations ({_queue.Count} remaining)");
  99. }
  100. }
  101. }