BillApprovalSetStore.cs 2.0 KB

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