/// <summary> /// Define target stage for a workflow element /// </summary> /// <typeparam name="TWf"></typeparam> /// <param name="c"></param> /// <param name="getStage"></param> /// <returns></returns> public static IFluentConfigurator <IWorkflowConditionalObject <TWf> > ToStage <TWf>(this IFluentConfigurator <IWorkflowConditionalObject <TWf> > c, Func <Workflow <TWf> .Stage> getStage) where TWf : class, IWorkflow <TWf> { if (c.Target is Workflow <TWf> .Action action) { c.WhenStageAllowed(getStage); c.Action(async w => await w.SetStageAsync(getStage, action.GetCaption(w), action.GetIconPath(w), action.SigningMandatory, action.MotivationMandatory)); return(c); } return(c); }
/// <summary> /// Enable an action when current stage is in provided list /// </summary> /// <typeparam name="TWf"></typeparam> /// <param name="c"></param> /// <param name="getters">List of lambdas pointing to allowed stages</param> /// <returns></returns> public static IFluentConfigurator <IWorkflowConditionalObject <TWf> > FromStage <TWf>(this IFluentConfigurator <IWorkflowConditionalObject <TWf> > c, params Func <Workflow <TWf> .Stage>[] getters) where TWf : class, IWorkflow <TWf> { c?.Target.AddCondition(new WorkflowCondition <TWf>(w => { foreach (var getState in getters) { if (w.CurrentStage == getState()) { return(WorkflowConditionResult.Passed); } } return(WorkflowConditionResult.Hidden); })); return(c); }
/// <summary> /// Define action for a workflow element /// </summary> /// <typeparam name="TWf"></typeparam> /// <param name="c"></param> /// <param name="action"></param> /// <returns></returns> public static IFluentConfigurator <IWorkflowConditionalObject <TWf> > Action <TWf>(this IFluentConfigurator <IWorkflowConditionalObject <TWf> > c, Action <TWf> action) where TWf : class, IWorkflow <TWf> { c?.Target.SetAction(action); return(c); }
Progress <TWf>(this IFluentConfigurator <IWorkflowConditionalObject <TWf> > c, double progress) where TWf : NotifierBase, IWorkflow <TWf> => c.Progress <TWf>(e => progress);
SubIcon <TWf>(this IFluentConfigurator <IWorkflowConditionalObject <TWf> > c, string icon) where TWf : NotifierBase, IWorkflow <TWf> => c.SubIcon <TWf>(e => icon);
Progress <TWf>(this IFluentConfigurator <IWorkflowConditionalObject <TWf> > c, Func <TWf, double> getter) where TWf : NotifierBase, IWorkflow <TWf> { c?.Target.SetProgress(getter); return(c); }
SubIcon <TWf>(this IFluentConfigurator <IWorkflowConditionalObject <TWf> > c, Func <TWf, string> getter) where TWf : NotifierBase, IWorkflow <TWf> { c?.Target.SetSubIconPath(getter); return(c); }
WithMessage <TC, TWf>(this IFluentConfigurator <IWorkflowConditionalObject <TWf> > c, string message) where TWf : NotifierBase, IWorkflow <TWf> => c.WithMessage(e => message);
Caption <TWf>(this IFluentConfigurator <IWorkflowConditionalObject <TWf> > c, string caption) where TWf : NotifierBase, IWorkflow <TWf> // where TC : IFluentConfigurator<IWorkflowConditionalObject<TWf>> => c.Caption <TWf>(e => caption);
/// <summary> /// Require a user that have <see cref="AnalysisRights.AnalysisCertificateCreate"/> right /// </summary> /// <typeparam name="TWf"></typeparam> /// <param name="t"></param> /// <returns></returns> public static IFluentConfigurator <IWorkflowConditionalObject <TWf> > NeedPharmacist <TWf>(this IFluentConfigurator <IWorkflowConditionalObject <TWf> > t) where TWf : NotifierBase, IWorkflow <TWf> { return(t.NotWhen(w => !Acl.IsGranted( AnalysisRights.AnalysisCertificateCreate //, w.User,w.Target )) .WithMessage(w => "{Pharmacist needed}")); }
/// <summary> /// Require user with almost one right of a list /// </summary> /// <typeparam name="TWf"></typeparam> /// <param name="t"></param> /// <param name="rights">List of rights from one only is required</param> /// <returns></returns> public static IFluentConfigurator <IWorkflowConditionalObject <TWf> > NeedAnyRight <TWf>(this IFluentConfigurator <IWorkflowConditionalObject <TWf> > t, params Func <AclRight>[] rights) where TWf : NotifierBase, IWorkflow <TWf> => t.When(w => { foreach (var right in rights) { if (Acl.IsGranted(right() //, w.User, w.Target )) { return(true); } } return(false); }) .WithMessage(w => { var s = new StringBuilder("{Not allowed} {need} "); foreach (var right in rights) { s.Append(right().Caption).Append(" "); } return(s.ToString()); });
/// <summary> /// Require user with specific right /// </summary> /// <typeparam name="TWf"></typeparam> /// <param name="t"></param> /// <param name="right"></param> /// <returns></returns> public static IFluentConfigurator <IWorkflowConditionalObject <TWf> > NeedRight <TWf>(this IFluentConfigurator <IWorkflowConditionalObject <TWf> > t, Func <AclRight> right) where TWf : NotifierBase, IWorkflow <TWf> { return(t.When(w => Acl.IsGranted( right() //,w.User,w.Target )) .WithMessage(w => "{Not allowed} {need} " + right().Caption)); }
/// <summary> /// Require a user that have <see cref="AnalysisRights.AnalysisSchedule"/> right /// </summary> /// <typeparam name="TWf"></typeparam> /// <param name="c"></param> /// <returns></returns> public static IFluentConfigurator <IWorkflowConditionalObject <TWf> > NeedPlanner <TWf>(this IFluentConfigurator <IWorkflowConditionalObject <TWf> > c) where TWf : NotifierBase, IWorkflow <TWf> { return(c.NotWhen(w => !Acl.IsGranted(AnalysisRights.AnalysisSchedule //,w.User,w.Target )) .WithMessage(w => "planner needed")); }
/// <summary> /// Require a user that have <see cref="AnalysisRights.AnalysisResultValidate"/> right /// </summary> /// <typeparam name="TWf"></typeparam> /// <param name="t"></param> /// <returns></returns> public static IFluentConfigurator <IWorkflowConditionalObject <TWf> > NeedValidator <TWf>(this IFluentConfigurator <IWorkflowConditionalObject <TWf> > t) where TWf : Workflow <TWf> { return(t.NotWhen(w => !Acl.IsGranted(AnalysisRights.AnalysisResultValidate //,w.User,w.Target )) .WithMessage(w => "validator needed")); }