/// <summary> /// 把主管加到 UserSet 裡 , 2006/11/27 尋找部門主管,如果找不到就往上找,直到找到為止 /// </summary> /// <param name="groupId"></param> /// <param name="userSet"></param> private void AddSuperiorToUserSet(string groupId, UserSet userSet) { EmployeeFindUCO employeeFindUCO = new EmployeeFindUCO(); //取得查詢群組的主管 UserSetEBUsersCollection userSetEBUsersCollection = employeeFindUCO.FindEmployeeByFunction(groupId, "Superior"); if (userSetEBUsersCollection.Count > 0) { for (int i = 0; i < userSetEBUsersCollection.Count; i++) { //把查到的主管 UserGuid 加到 userSet 裡 UserSetUser userSetUser = new UserSetUser(); userSetUser.USER_GUID = userSetEBUsersCollection[i].UserGUID; userSet.Items.Add(userSetUser); } } else { //如果找不到直屬主管就往上一層層找上去,直到有為止 BaseGroup baseGroup = new BaseGroup(groupId); if (baseGroup.ParnetGroup != null) { AddSuperiorToUserSet(baseGroup.ParnetGroup.GroupId, userSet); } } }
private string GetValueFromDimension(UserSetUser usu, string dimensionName) { if (dimensionName == Constant.DATA_DIMENSION_1) { return(usu.Position1); } if (dimensionName == Constant.DATA_DIMENSION_2) { return(usu.Position2); } if (dimensionName == Constant.DATA_DIMENSION_3) { return(usu.Position3); } if (dimensionName == Constant.DATA_DIMENSION_4) { return(usu.Position4); } if (dimensionName == Constant.DATA_DIMENSION_5) { return(usu.Position5); } if (dimensionName == Constant.DATA_DIMENSION_6) { return(usu.Position6); } if (dimensionName == Constant.DATA_DIMENSION_7) { return(usu.Position7); } if (dimensionName == Constant.DATA_DIMENSION_8) { return(usu.Position8); } if (dimensionName == Constant.DATA_DIMENSION_9) { return(usu.Position9); } if (dimensionName == Constant.DATA_DIMENSION_10) { return(usu.Position10); } return(null); }
/// <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); }