/// <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);
Пример #10
0
 /// <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}"));
 }
Пример #11
0
 /// <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());
 });
Пример #12
0
 /// <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));
 }
Пример #13
0
 /// <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"));
 }
Пример #14
0
 /// <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"));
 }