Необходимо после нажатия на кнопку проверять некоторые разрешения для продолжения согласования. Есть ли события на нажатие кнопки “Направить на согласование”.
Для решения подобных задач лучше всего использовать правила согласования:
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 Лайк