/// <summary>
        /// Возвращает ID подразделения пользователя.
        /// </summary>
        /// <param name="idUser"></param>
        /// <returns>id подразделения</returns>
        private string GetDepartmentID()
        {
            DBList listUsers   = this.Site.UsersList;
            DBItem user        = listUsers.GetItem(this.UserID);
            string _department = "";

            _department = user.GetLookupID(Consts.FieldDepartment).ToString();

            return(_department);
        }
        /// <summary>
        /// Возвращает id компании по номеру пользователя
        /// </summary>
        /// <param name="initiatorID"></param>
        /// <returns></returns>
        public int GetCompany(int initiatorID)
        {
            int result = 0;

            DBList usersList = this.Context.Site.UsersList;
            DBItem user      = usersList.GetItem(initiatorID);

            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            result = user.GetLookupID(Consts.FieldCompany);
            return(result);
        }
        /// <summary>
        /// Проверяет наличие уcловия, ищет "Родительские подразделения"
        /// </summary>
        /// <param name="level"></param>
        /// <param name="depList"></param>
        /// <returns>id Родительского подразделения</returns>
        private string GetParent(string departmentID, DBList departmentsList)
        {
            int result = 0;

            bool b = int.TryParse(departmentID, out int id);

            if (!b)
            {
                throw new FormatException("Передан неверный id подразделения");
            }

            DBItem departments = departmentsList.GetItem(id);

            if (departments != null)
            {
                string parentDepartmentName = departments.GetStringValue(Consts.FieldParentDep);

                if (parentDepartmentName == Consts.FirstLevel)
                {
                    Result = this.GetDepartmentNameByID(departmentID);
                }
                else if (parentDepartmentName == null)
                {
                    Result = "nothing";
                }
                else if (parentDepartmentName == Consts.ParentDepValue)
                {
                    Result = "ao_vmz";
                }
                else
                {
                    bool check = this.IndexCheck(departmentID, departmentsList);
                    if (!check)
                    {
                        result = departments.GetLookupID(Consts.FieldParentDep);
                    }
                }
            }
            return(Convert.ToString(result));
        }
示例#4
0
        protected override void OnBeforeItemUpdate(DBItemOperation operationProperties)
        {
            if (operationProperties == null)
            {
                throw new Exception(string.Format("Ошибка в обработчике '{0}', параметр '{1}'", "DepartamentsOnStageHandler", "DBItemOperation"));
            }

            DBItem item = operationProperties.Item;

            if (item == null)
            {
                throw new Exception(string.Format("Ошибка получения '{0}' в обработчике '{1}'", "item", "DepartamentsOnStageHandler"));
            }

            //только при создании
            if (!item.IsNewOrContextCreated)
            {
                return;
            }

            string currentStage = item.GetStringValue(Consts.Handlers.DepartamentsOnStageHandler.FieldNameStage);

            if (currentStage != Consts.Handlers.DepartamentsOnStageHandler.StagePreparation && currentStage != Consts.Handlers.DepartamentsOnStageHandler.StageAdd)
            {
                return;
            }

            int itemCompanyID = item.GetLookupID(Consts.Handlers.DepartamentsOnStageHandler.FieldNameCompany);

            if (itemCompanyID == 0)
            {
                return;
            }

            //Получаем пользователя
            int userID = item.GetLookupID(Consts.Handlers.DepartamentsOnStageHandler.FieldNameInitor);

            if (userID == 0)
            {
                return;
            }

            DBUser user = item.Site.GetUser(userID);

            if (user == null)
            {
                throw new Exception(string.Format("Ошибка получения '{0}' в обработчике '{1}'", "DBUser", "DepartamentsOnStageHandler"));
            }

            DBItem userItem = user.UserItem;

            if (userItem == null)
            {
                throw new Exception(string.Format("Ошибка получения '{0}' в обработчике '{1}'", "DBUser.DBItem", "DepartamentsOnStageHandler"));
            }

            //Получаем подразделения в карточке пользователя
            List <DBItem> userDepartaments    = userItem.GetLookupItems(Consts.Handlers.DepartamentsOnStageHandler.FieldNameDepartamentExtra);
            DBItem        userDepartamentItem = userItem.GetLookupItem(Consts.Handlers.DepartamentsOnStageHandler.FieldNameDepartament);

            if (userDepartamentItem != null)
            {
                userDepartaments.Add(userDepartamentItem);
            }

            //Удаляем не актуальные подразделения
            userDepartaments = userDepartaments.Where(t => !t.GetValue <bool>(Consts.Handlers.DepartamentsOnStageHandler.FieldNameDepartamentActual)).ToList();
            if (userDepartaments == null || userDepartaments.Count == 0)
            {
                item.SetValue(Consts.Handlers.DepartamentsOnStageHandler.FieldNameDepartament, null);
                return;
            }

            //Словарь где key это  это ID компании, value это ID подразделения
            Dictionary <int, int[]> userDepartamentInfo = userDepartaments.GroupBy(t => t.GetLookupID(Consts.Handlers.DepartamentsOnStageHandler.FieldNameCompany), t => t.ID)
                                                          .ToDictionary(t => t.Key, t => t.ToArray());

            //Если у пользователя нет подразделений для компании из карточки ИЛИ таких подразделений более 1 то поле "Подразделение" очищается
            int[] value;
            if (!userDepartamentInfo.TryGetValue(itemCompanyID, out value) || value.Length > 1)
            {
                item.SetValue(Consts.Handlers.DepartamentsOnStageHandler.FieldNameDepartament, null);
                return;
            }

            //Если одно подразделение по компании из карточки то его и проставляем в поле "Подразделение"
            item.SetValue(Consts.Handlers.DepartamentsOnStageHandler.FieldNameDepartament, value.First());
        }