/// <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); }
/// <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); }