JobRequisitionItemUtils.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using Comal.Classes;
  2. using Comal.Stores;
  3. using InABox.Core;
  4. using InABox.Database;
  5. using PRSStores;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace PRS.Shared.Database_Update_Scripts.Utils;
  12. public static class JobRequisitionItemUtils
  13. {
  14. public static void RefreshStatuses(IStore store)
  15. {
  16. Logger.Send(LogType.Information, "", $"Refreshing JobRequisitionItem statuses");
  17. var jobRequiItems = store.Provider.Query(
  18. null,
  19. JobRequisitionItemStore.StatusRequiredColumns().Add(x => x.Status))
  20. .ToObjects<JobRequisitionItem>()
  21. .ToList();
  22. var statusUpdates = new Dictionary<Tuple<JobRequisitionItemStatus, JobRequisitionItemStatus>, List<Guid>>();
  23. var i = 0;
  24. foreach(var item in jobRequiItems)
  25. {
  26. if(i % 50 == 0)
  27. {
  28. Logger.Send(LogType.Information, "", $"Refreshing statuses: {(((double)i) / (double)jobRequiItems.Count * 100):F0}%");
  29. }
  30. if (JobRequisitionItemStore.CalculateStatus(store, item))
  31. {
  32. var key = new Tuple<JobRequisitionItemStatus, JobRequisitionItemStatus>(item.GetOriginalValue(x=>x.Status), item.Status);
  33. if(!statusUpdates.TryGetValue(key, out var list))
  34. {
  35. list = new List<Guid>();
  36. statusUpdates.Add(key, list);
  37. }
  38. list.Add(item.ID);
  39. item.Issues += $"Updated status from {item.GetOriginalValue(x=>x.Status)} to {item.Status}";
  40. }
  41. ++i;
  42. }
  43. foreach(var ((from, to), list) in statusUpdates)
  44. {
  45. Logger.Send(LogType.Information, "", $"{from} -> {to}: {list.Count} entries");
  46. }
  47. new BaseStore<JobRequisitionItem>
  48. {
  49. UserGuid = Guid.Empty,
  50. UserID = "",
  51. Platform = Platform.Server,
  52. Version = CoreUtils.GetVersion(),
  53. Provider = DbFactory.NewProvider(Logger.Main)
  54. }.Save(jobRequiItems, "");
  55. }
  56. }