Update_8_24.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using Comal.Classes;
  2. using InABox.Core;
  3. using InABox.Database;
  4. namespace PRS.Shared.Database_Update_Scripts;
  5. internal class Update_8_24 : DatabaseUpdateScript
  6. {
  7. private static readonly int CHUNK_SIZE = 500;
  8. private static readonly bool DESTRUCTIVE = false;
  9. public override VersionNumber Version => new(8, 24);
  10. public override bool Update()
  11. {
  12. var _provider = DbFactory.NewProvider(Logger.Main);
  13. Clear_POIAs(_provider);
  14. Migrate_JRIPOIs(_provider);
  15. return true;
  16. }
  17. private void Clear_POIAs(IProvider provider)
  18. {
  19. Logger.Send(LogType.Information, "", "Clearing Existing POIAs");
  20. var sql = $"delete from PurchaseOrderItemAllocation";
  21. var deleted = provider.Update(sql);
  22. Logger.Send(LogType.Information,"",$"Cleared {deleted} POIAs");
  23. }
  24. private void Migrate_JRIPOIs(IProvider provider)
  25. {
  26. if (provider.TableExists("JobRequisitionItemPurchaseOrderItem"))
  27. {
  28. Logger.Send(LogType.Information,"","Migrating JRIPOIs");
  29. var _pois = provider.Query(
  30. null,
  31. Columns.None<PurchaseOrderItem>().Add(x => x.ID).Add(x => x.Qty)
  32. ).ToDictionary<PurchaseOrderItem,Guid,double>(x=>x.ID, x=>x.Qty);
  33. var _sql =
  34. $"select jripoi.[purchaseorderitem.id], jripoi.[jobrequisitionitem.id], jri.[job.id], cast(poi.[qty] as double) as [qty] " +
  35. $"from jobrequisitionitempurchaseorderitem jripoi " +
  36. $"left outer join jobrequisitionitem jri on jripoi.[jobrequisitionitem.id] = jri.[id] " +
  37. $"left outer join purchaseorderitem poi on jripoi.[purchaseorderitem.id] = poi.[id]";
  38. var _queue = provider.Query(_sql)
  39. .Rows.ToQueue();
  40. List<Guid> _ids = new();
  41. while (_queue.Any())
  42. {
  43. List<PurchaseOrderItemAllocation> _poias = new();
  44. var _jripois = _queue.Dequeue(CHUNK_SIZE).ToList();
  45. foreach (var _jripoi in _jripois)
  46. {
  47. Guid poi_id = Guid.TryParse(_jripoi.Get<string>("purchaseorderitem.id"), out var pid) ? pid : Guid.Empty;
  48. var _poia = new PurchaseOrderItemAllocation();
  49. _poia.Item.ID = poi_id;
  50. _poia.Job.ID = Guid.TryParse(_jripoi.Get<string>("job.id"), out var jid) ? jid : Guid.Empty;
  51. _poia.JobRequisitionItem.ID = Guid.TryParse(_jripoi.Get<string>("jobrequisitionitem.id"), out var rid) ? rid : Guid.Empty;
  52. _poia.Quantity = _jripoi.Get<double>("qty");
  53. _poias.Add(_poia);
  54. _ids.Add(poi_id);
  55. }
  56. provider.Save(_poias);
  57. Logger.Send(LogType.Information, "",
  58. $"- Created {_poias.Count} Allocations ({_queue.Count} remaining)");
  59. }
  60. }
  61. if (DESTRUCTIVE)
  62. provider.DropTable("JobRequisitionItemPurchaseOrderItem");
  63. }
  64. }