Esempio n. 1
0
        /// <summary>
        /// Trouve les validateurs et les ajoute dans la liste des utilisateurs en validation.
        /// </summary>
        /// <param name="selectorInstance">SelectorInstance</param>
        /// <param name="wfInstance">WorkflowInstance</param>
        /// <returns>Message de retour</returns>
        public async Task <HttpResponseMessageResult> FindValidators(SelectorInstance selectorInstance, WorkflowInstance wfInstance)
        {
            if (selectorInstance == null)
            {
                throw new WrongParameterException($"SelectorInstanceDomain.FindValidators: SelectorInstance is null.");
            }
            if (selectorInstance.SelectorConfig == null)
            {
                throw new WrongParameterException($"SelectorInstanceDomain.FindValidators: SelectorConfig is null (Id SelectorInstance : {selectorInstance.Id}).");
            }
            if (selectorInstance.SelectorConfig.Validators == null)
            {
                throw new SequenceException($"SelectorInstance.FindValidators: no validator found, error in SelectorConfig (no Validators list). Id SelectorConfig : {selectorInstance.SelectorConfig.Id}");
            }

            HttpResponseMessageResult res = new HttpResponseMessageResult()
            {
                IsSuccess = true
            };
            IEnumerable <IGrouping <int, Criteria> > lstGrp = selectorInstance.SelectorConfig.Validators.GroupBy(c => c.ChainNumber);

            int currentChain = -1;

            if ((lstGrp != null) && (lstGrp.Count() > 0))
            {
                currentChain = lstGrp.Min(g => g.Key);
            }
            IEnumerable <User>        validators = null;
            IEnumerable <UserSetUser> lstUsu     = null;
            IGrouping <int, Criteria> grp        = null;

            // On parcourt les chaines de criteria une à une afin de trouver le modificateur.
            while ((currentChain > -1) && ((validators == null) || (validators.Count() == 0)))
            {
                grp = lstGrp.Where(g => g.Key == currentChain).FirstOrDefault();
                if (grp == null)
                {
                    throw new SequenceException($"SelectorInstance.FindValidators: no validator found, error in SelectorConfig (no group). Id SelectorConfig : {selectorInstance.SelectorConfig.Id}");
                }

                IEnumerable <IEnumerable <CriteriaValues> > lstCv = await CriteriaDomain.ExtractAllCriteriaValues(grp, wfInstance);

                lstUsu = await UserSetDomain.GetUsersByRight(lstCv, wfInstance.DataSetId, RightEnum.Validation);

                validators = lstUsu.Select(usu => usu.User).Distinct(new UserComparer((x, y) => x.Id == y.Id));

                // Gestion des cas des modificateurs
                if ((validators == null) || (validators.Count() == 0))
                {
                    IEnumerable <int> lstNumber = lstGrp.Select(g => g.Key).Where(i => i > currentChain);
                    if (lstNumber.Count() > 0)
                    {
                        currentChain = lstNumber.OrderBy(i => i).First();
                    }
                    else
                    {
                        throw new ConfigurationException("SelectorInstanceDomain.FindValidators: no validator was found.");
                    }
                }
            }

            if (validators != null)
            {
                foreach (User val in validators)
                {
                    SelectorInstanceUser siu = new SelectorInstanceUser()
                    {
                        SelectorInstance = selectorInstance,
                        User             = val,
                        Right            = RightEnum.Validation
                    };
                    UnitOfWork.SelectorInstanceUserRepository.PrepareAddForObject(siu);
                    siu.InitDatesAndUser("");

                    selectorInstance.SelectorInstanceUser.Add(siu);
                    val.SelectorInstanceUser.Add(siu);
                }
            }

            return(res);
        }
Esempio n. 2
0
        /// <summary>
        /// Recherche du modificateur pour le SelectorInstance donné en paramétre.
        /// </summary>
        /// <param name="selectorInstance">SelectorInstance</param>
        /// <param name="wfInstance">WorkflowInstance</param>
        /// <returns>Message de retour</returns>
        public async Task <HttpResponseMessageResult> FindModificator(SelectorInstance selectorInstance, WorkflowInstance wfInstance)
        {
            if (selectorInstance == null)
            {
                throw new WrongParameterException($"SelectorInstanceDomain.FindModificator: SelectorInstance is null.");
            }
            if (selectorInstance.SelectorConfig == null)
            {
                throw new WrongParameterException($"SelectorInstanceDomain.FindModificator: SelectorConfig is null (Id SelectorInstance : {selectorInstance.Id}).");
            }
            if (selectorInstance.SelectorConfig.Modifiers == null)
            {
                throw new SequenceException($"SelectorInstance.FindModificator : no modificator found, error in SelectorConfig (no Modifiers list). Id SelectorConfig : {selectorInstance.SelectorConfig.Id}");
            }

            HttpResponseMessageResult res = new HttpResponseMessageResult()
            {
                IsSuccess = true
            };
            IEnumerable <IGrouping <int, Criteria> > lstGrp = selectorInstance.SelectorConfig.Modifiers.GroupBy(c => c.ChainNumber);

            int currentChain = -1;

            if ((lstGrp != null) && (lstGrp.Count() > 0))
            {
                currentChain = lstGrp.Min(g => g.Key);
            }
            User modificator = null;
            IEnumerable <UserSetUser> lstUsu = null;
            IGrouping <int, Criteria> grp    = null;

            // On parcourt les chaines de criteria une à une afin de trouver le modificateur.
            while ((currentChain > -1) && (modificator == null))
            {
                grp = lstGrp.Where(g => g.Key == currentChain).FirstOrDefault();
                if (grp == null)
                {
                    throw new SequenceException($"SelectorInstance.FindModificator : no modificator found, error in SelectorConfig (no group). Id SelectorConfig : {selectorInstance.SelectorConfig.Id}");
                }

                IEnumerable <IEnumerable <CriteriaValues> > lstCv = await CriteriaDomain.ExtractAllCriteriaValues(grp, wfInstance);

                lstUsu = await UserSetDomain.GetUsersByRight(lstCv, wfInstance.DataSetId, RightEnum.Modification);

                IEnumerable <User> modificators = lstUsu.Select(usu => usu.User).Distinct(new UserComparer((x, y) => x.Id == y.Id));

                // Gestion des cas des modificateurs
                if ((modificators == null) || (modificators.Count() == 0))
                {
                    IEnumerable <int> lstNumber = lstGrp.Select(g => g.Key).Where(i => i > currentChain);
                    if (lstNumber.Count() > 0)
                    {
                        currentChain = lstNumber.OrderBy(i => i).First();
                    }
                    else
                    {
                        throw new ConfigurationException("SelectorInstanceDomain.FindModificator : no modificator was found.");
                    }
                }
                if (modificators.Count() > 1)
                {
                    throw new ConfigurationException("SelectorInstanceDomain.FindModificator : more than one modificator was found.");
                }
                if (modificators.Count() == 1)
                {
                    modificator = modificators.ElementAt(0);
                }
            }

            if (modificator == null)
            {
                throw new DataLoadingException($"SelectorInstanceDomain.FindModificator : No modificator found for SelectorInstance (Id : {selectorInstance.Id}).");
            }

            // Régler le SelectorInstance avec l'id de l'utilisateur trouvé.
            selectorInstance.ChainNumberModifyer = currentChain;
            selectorInstance.ModifyerId          = modificator.Id;
            UserSetUser usuDistinct = lstUsu.FirstOrDefault();

            if (usuDistinct == null)
            {
                throw new DataLoadingException("SelectorInstanceDomain.FindModificator : a problem with loading UserSetUser must stop this finding.");
            }

            Dictionary <long, DataSetDimension> dimIds = await DataSetDimensionDomain.GetDimensionColumns(wfInstance.DataSetId);

            foreach (Criteria crit in grp)
            {
                string         dimName = dimIds.Values.Where(v => v.Dimension.Id == crit.Dimension.Id).Select(v => v.ColumnName).FirstOrDefault();
                string         value   = GetValueFromDimension(usuDistinct, dimName);
                CriteriaValues cv      = new CriteriaValues()
                {
                    Criteria = crit, SelectorInstanceModifier = selectorInstance, Value = value
                };
                selectorInstance.ModifyCriteriasValues.Add(cv);
            }

            return(res);
        }