LeaveRequestApprovalSetStore.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using Comal.Classes;
  2. using Comal.Stores;
  3. using InABox.Core;
  4. using InABox.Database;
  5. using InABox.Scripting;
  6. namespace PRSStores;
  7. public class LeaveRequestApprovalSetStore : BaseStore<LeaveRequestApprovalSet>
  8. {
  9. private static Dictionary<Guid, ScriptDocument?> _scripts = new();
  10. protected override void BeforeSave(LeaveRequestApprovalSet entity)
  11. {
  12. base.BeforeSave(entity);
  13. if (entity.HasOriginalValue(x => x.ApprovalSetUpdateScript))
  14. {
  15. UpdateApprovalSetScript(entity.ID, entity.ApprovalSetUpdateScript);
  16. }
  17. }
  18. private static ScriptDocument? UpdateApprovalSetScript(Guid approvalSetID, string script)
  19. {
  20. ScriptDocument? document = null;
  21. if (!script.IsNullOrWhiteSpace())
  22. {
  23. document = new ScriptDocument(script);
  24. if (!document.Compile())
  25. {
  26. InABox.Core.Logger.Send(LogType.Error, "",
  27. $"Leave Request Approval Script failed to compile: {document.Result}");
  28. document = null;
  29. }
  30. }
  31. lock (_scripts)
  32. {
  33. _scripts[approvalSetID] = document;
  34. }
  35. return document;
  36. }
  37. public static ScriptDocument? GetUpdateApprovalsScript(Guid approvalSetID)
  38. {
  39. lock (_scripts)
  40. {
  41. if (_scripts.TryGetValue(approvalSetID, out var script)) return script;
  42. }
  43. var set = DbFactory.NewProvider(Logger.Main).Query<LeaveRequestApprovalSet>(
  44. new Filter<LeaveRequestApprovalSet>(x => x.ID).IsEqualTo(approvalSetID),
  45. Columns.None<LeaveRequestApprovalSet>().Add(x => x.ApprovalSetUpdateScript))
  46. .ToObjects<LeaveRequestApprovalSet>().FirstOrDefault();
  47. if (set is not null)
  48. {
  49. return UpdateApprovalSetScript(approvalSetID, set.ApprovalSetUpdateScript);
  50. }
  51. else
  52. {
  53. return null;
  54. }
  55. }
  56. }