BillApprovalSetStore.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. using Microsoft.CodeAnalysis.VisualBasic.Syntax;
  13. namespace PRSStores;
  14. public class BillApprovalSetStore : BaseStore<BillApprovalSet>
  15. {
  16. private static Dictionary<Guid, ScriptDocument?> _scripts = new();
  17. protected override void BeforeSave(BillApprovalSet entity)
  18. {
  19. base.BeforeSave(entity);
  20. if(entity.HasOriginalValue(x => x.ApprovalSetUpdateScript))
  21. {
  22. UpdateApprovalSetScript(entity.ID, entity.ApprovalSetUpdateScript);
  23. }
  24. }
  25. private static ScriptDocument? UpdateApprovalSetScript(Guid approvalSetID, string script)
  26. {
  27. ScriptDocument? document = null;
  28. if (!script.IsNullOrWhiteSpace())
  29. {
  30. document = new ScriptDocument(script);
  31. if (!document.Compile())
  32. {
  33. InABox.Core.Logger.Send(LogType.Error, "", $"Bill Approval Script failed to compile: {document.Result}");
  34. document = null;
  35. }
  36. }
  37. lock(_scripts)
  38. {
  39. _scripts[approvalSetID] = document;
  40. }
  41. return document;
  42. }
  43. public static ScriptDocument? GetUpdateApprovalsScript(Guid approvalSetID)
  44. {
  45. lock (_scripts)
  46. {
  47. if (_scripts.TryGetValue(approvalSetID, out var script)) return script;
  48. }
  49. var set = DbFactory.NewProvider(Logger.Main).Query<BillApprovalSet>(
  50. Filter<BillApprovalSet>.Where(x => x.ID).IsEqualTo(approvalSetID),
  51. Columns.None<BillApprovalSet>().Add(x => x.ApprovalSetUpdateScript))
  52. .ToObjects<BillApprovalSet>().FirstOrDefault();
  53. if(set is not null)
  54. {
  55. return UpdateApprovalSetScript(approvalSetID, set.ApprovalSetUpdateScript);
  56. }
  57. else
  58. {
  59. return null;
  60. }
  61. }
  62. }