예제 #1
0
        /// <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);
                }
            }
        }
예제 #2
0
 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);
 }
예제 #3
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);
        }