Update_8_02.cs 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using Comal.Classes;
  2. using InABox.Core;
  3. using InABox.Database;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace PRS.Shared.Database_Update_Scripts;
  10. public class Update_8_02 : DatabaseUpdateScript
  11. {
  12. public override VersionNumber Version => new(8, 2);
  13. private static void PopulateDone()
  14. {
  15. var requiItems = DbFactory.NewProvider(Logger.Main).Query<RequisitionItem>(
  16. new Filter<RequisitionItem>(x => x.Done).IsEqualTo(false).And(x => x.Picked).IsNotEqualTo(DateTime.MinValue),
  17. Columns.None<RequisitionItem>().Add(x => x.ID).Add(x => x.Picked).Add(x => x.Done))
  18. .ToList<RequisitionItem>();
  19. Logger.Send(LogType.Information, "", $"Populating Done flag for {requiItems.Count} RequisitionItems");
  20. foreach(var item in requiItems)
  21. {
  22. item.Done = item.Picked != DateTime.MinValue;
  23. }
  24. Logger.Send(LogType.Information, "", $"Done populating Done flag!");
  25. DbFactory.NewProvider(Logger.Main).Save(requiItems);
  26. }
  27. private static void UpdateUndeliveredItems()
  28. {
  29. var requisitions = DbFactory.NewProvider(Logger.Main).Query(
  30. new Filter<Requisition>(x => x.TakenBy.ID).IsNotEqualTo(Guid.Empty),
  31. Columns.None<Requisition>().Add(x => x.ID).Add(x => x.Filled))
  32. .ToObjects<Requisition>()
  33. .ToDictionary(x => x.ID, x => x);
  34. var requiIDs = requisitions.Keys.ToArray();
  35. var deliveryItems = DbFactory.NewProvider(Logger.Main).Query(
  36. new Filter<DeliveryItem>(x => x.DeliveredDate).IsEqualTo(DateTime.MinValue)
  37. .And(x => x.RequisitionLink.ID).InList(requiIDs),
  38. Columns.None<DeliveryItem>().Add(x => x.ID)
  39. .Add(x => x.RequisitionLink.ID))
  40. .ToArray<DeliveryItem>();
  41. Logger.Send(LogType.Information, "", $"Found {deliveryItems.Length} undelivered DeliveryItems linked to Taken requisitions.");
  42. foreach(var item in deliveryItems)
  43. {
  44. if(requisitions.TryGetValue(item.RequisitionLink.ID, out var requi))
  45. {
  46. item.DeliveredDate = requi.Filled;
  47. }
  48. }
  49. DbFactory.NewProvider(Logger.Main).Save(deliveryItems);
  50. Logger.Send(LogType.Information, "", $"Updated DeliveryItem.DeliveredDate = Requisition.Filled");
  51. }
  52. private static void PopulateManufacturingPacketStageDescription()
  53. {
  54. var table = DbFactory.NewProvider(Logger.Main).Query(
  55. new Filter<ManufacturingPacketStage>(x => x.Description).IsEqualTo(null),
  56. Columns.None<ManufacturingPacketStage>().Add(x => x.ID)
  57. .Add(x => x.Form.Description));
  58. Logger.Send(LogType.Information, "", $"Populating Description for {table.Rows.Count} ManufacturingPacketStages");
  59. for(int i = 0; i < table.Rows.Count; i += 1000)
  60. {
  61. Logger.Send(LogType.Information, "", $"{(double)i / (double)table.Rows.Count * 100.0:F2}%");
  62. var mpStages = new List<ManufacturingPacketStage>(1000);
  63. for(int j = i; j < Math.Min(i + 1000, table.Rows.Count); j++)
  64. {
  65. mpStages.Add(table.Rows[j].ToObject<ManufacturingPacketStage>());
  66. }
  67. foreach(var stage in mpStages)
  68. {
  69. stage.Description = stage.Form.Description;
  70. }
  71. DbFactory.NewProvider(Logger.Main).Save(mpStages);
  72. }
  73. Logger.Send(LogType.Information, "", $"Done populating Description!");
  74. }
  75. public override bool Update()
  76. {
  77. PopulateDone();
  78. UpdateUndeliveredItems();
  79. PopulateManufacturingPacketStageDescription();
  80. return true;
  81. }
  82. }