1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- using Comal.Classes;
- using Comal.Stores;
- using InABox.Core;
- using InABox.Database;
- using InABox.Scripting;
- namespace PRSStores;
- public class LeaveRequestApprovalSetStore : BaseStore<LeaveRequestApprovalSet>
- {
- private static Dictionary<Guid, ScriptDocument?> _scripts = new();
- protected override void BeforeSave(LeaveRequestApprovalSet entity)
- {
- base.BeforeSave(entity);
- if (entity.HasOriginalValue(x => x.ApprovalSetUpdateScript))
- {
- UpdateApprovalSetScript(entity.ID, entity.ApprovalSetUpdateScript);
- }
- }
- private static ScriptDocument? UpdateApprovalSetScript(Guid approvalSetID, string script)
- {
- ScriptDocument? document = null;
- if (!script.IsNullOrWhiteSpace())
- {
- document = new ScriptDocument(script);
- if (!document.Compile())
- {
- InABox.Core.Logger.Send(LogType.Error, "",
- $"Leave Request Approval Script failed to compile: {document.Result}");
- document = null;
- }
- }
- lock (_scripts)
- {
- _scripts[approvalSetID] = document;
- }
- return document;
- }
- public static ScriptDocument? GetUpdateApprovalsScript(Guid approvalSetID)
- {
- lock (_scripts)
- {
- if (_scripts.TryGetValue(approvalSetID, out var script)) return script;
- }
- var set = DbFactory.NewProvider(Logger.Main).Query<LeaveRequestApprovalSet>(
- new Filter<LeaveRequestApprovalSet>(x => x.ID).IsEqualTo(approvalSetID),
- Columns.None<LeaveRequestApprovalSet>().Add(x => x.ApprovalSetUpdateScript))
- .ToObjects<LeaveRequestApprovalSet>().FirstOrDefault();
- if (set is not null)
- {
- return UpdateApprovalSetScript(approvalSetID, set.ApprovalSetUpdateScript);
- }
- else
- {
- return null;
- }
- }
- }
|