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