Есть ли событие на нажатие кнопки "Направить на согласование"

Необходимо после нажатия на кнопку проверять некоторые разрешения для продолжения согласования. Есть ли события на нажатие кнопки “Направить на согласование”.

Для решения подобных задач лучше всего использовать правила согласования:

namespace BarsUp.Modules.Agreement.CommonWorkflows.Customizers
{
    using System.Linq;
    using BarsUp.DataAccess;
    using BarsUp.Modules.Agreement.AgreementStates;
    using BarsUp.Modules.Agreement.Attributes;
    using BarsUp.Modules.Agreement.CommonWorkflows.Workflow;
    using BarsUp.Modules.Agreement.Entities;
    using BarsUp.Modules.Agreement.Interface;
    using BarsUp.Modules.Agreement.Models;
    using Castle.Windsor;

    /// <summary>Лист согласования: запретить что-либо</summary>
    [AgreementCustomizerDefinition(Name = "Лист согласования: запретить что-либо", Description = "Запрещает что-либо")]
    public class AgrListSomeRestrictCustomizer : EmptyAgreementCustomizer
    {
        public const string Code = "AgrListSomeRestrictCustomizer";
        
        public IAgrStepDomainService AgrStepDomainService { get; set; }
        public IDataStore DataStore { get; set; }
        public IWindsorContainer Container { get; set; }

        public override ICanAgreementCheckResult CheckAgreementAvailability(AgrStateValue agreementStateValue,
            PersistentObject entity)
        {
            var stepName = AgrStepDomainService.GetAll()
                .Where(x => x.AgreementStateValue.Id == agreementStateValue.Id && x.NextAgrStep == null)
                .Select(x => x.StepName)
                .FirstOrDefault();

            if (stepName != nameof(AgrListWorkflowCreateListStep) || CheckSomeRestrict())
            {
                return null;
            }

            return new CanAgreementCheckResult
            {
                RestrictProcess = true,
                RestrictReason = "Согласование запрещено"
            };
        }

        private bool CheckSomeRestrict() => throw new System.NotImplementedException();
    }
}

Также необходимо описать провайдер правил:

namespace BarsUp.Modules.Agreement.CommonWorkflows.Services
{
    using BarsUp.Modules.Agreement.CommonWorkflows.Customizers;
    using BarsUp.Modules.Agreement.Interface;

    public class AgreementCustomizerProvider : IAgreementCustomizerDescriptionProvider
    {
        public void Register(IAgreementCustomizerDescriptionContainer container) =>
            container.RegisterAgreementCustomizerDescription<AgrListSomeRestrictCustomizer>();
    }
}

И зарегистрировать провайдер правил в контейнере зависимостей:

Container.RegisterSingleton<IAgreementCustomizerDescriptionProvider, AgreementCustomizerProvider>();
1 Лайк