コード例 #1
0
        /// <summary>
        /// Проверка возможности существования маршрута правила.
        /// </summary>
        /// <param name="route">Маршрут.</param>
        /// <param name="ruleConditions">Условия.</param>
        /// <param name="conditionStep">Этап.</param>
        /// <returns>Возможность существования.</returns>
        public override bool CheckRoutePossibility(List <Structures.ApprovalRuleBase.RouteStep> route,
                                                   List <Structures.ApprovalRuleBase.ConditionRouteStep> ruleConditions,
                                                   Structures.ApprovalRuleBase.RouteStep conditionStep)
        {
            var possibleStage = base.CheckRoutePossibility(route, ruleConditions, conditionStep);
            var conditionType = _obj.Conditions.First(c => c.Number == conditionStep.StepNumber).Condition.ConditionType;

            // Проверка условий по адресату.
            if (conditionType == Docflow.Condition.ConditionType.Addressee)
            {
                var addresseeConditions = this.GetAddresseeConditionsInRoute(route).Where(c => c.StepNumber != conditionStep.StepNumber).ToList();
                possibleStage = this.CheckAddresseeConditions(addresseeConditions, conditionStep);
            }

            return(possibleStage);
        }
コード例 #2
0
        /// <summary>
        /// Проверить возможность существования данного маршрута с условиями по адресату.
        /// </summary>
        /// <param name="allConditions">Все условия в данном маршруте.</param>
        /// <param name="condition">Текущее условие.</param>
        /// <returns>Возможность существования данного маршрута.</returns>
        public bool CheckAddresseeConditions(List <Structures.ApprovalRuleBase.RouteStep> allConditions, Structures.ApprovalRuleBase.RouteStep condition)
        {
            var conditionItem = _obj.Conditions.Where(x => x.Number == condition.StepNumber).FirstOrDefault();
            var addressees    = Conditions.As(conditionItem.Condition).Addressees.Select(x => x.Addressee).ToList();

            foreach (var previousCondition in allConditions.TakeWhile(x => !Equals(x, condition)))
            {
                var previoisConditionItem = _obj.Conditions.Where(x => x.Number == previousCondition.StepNumber).FirstOrDefault();
                var previousAddressees    = Conditions.As(previoisConditionItem.Condition).Addressees.Select(x => x.Addressee).ToList();

                var result = CheckConsistencyConditions(addressees, previousAddressees, condition, previousCondition);
                if (result != null)
                {
                    return(result.Value);
                }
            }

            return(true);
        }