/// <summary> /// Возвращает строку для фильтрации, с id всех компаний до 4-ого уровня. /// </summary> /// <returns></returns> public string GetListOfDepartments() { DBWeb web = this.Site.GetWeb("/"); if (web == null) { throw new Exception("Узел не найден"); } DBList departmentsList = web.GetList(Consts.DepartmentsList); if (departmentsList == null) { throw new Exception($"Не найден список по имени '{Consts.DepartmentsList}'"); } string selectCondition = null; string result = null; List <DBItem> lvlOne = new List <DBItem>(); selectCondition = "[Название] = " + Consts.DepartmentLevelQuery; lvlOne.Add(departmentsList.GetItem(selectCondition)); foreach (DBItem item in lvlOne) { result += item.ID + ","; } List <DBItem> lvlTwo = new List <DBItem>(); lvlTwo = this.GetChildren(lvlOne, departmentsList); foreach (DBItem item in lvlTwo) { result += item.ID + ","; } List <DBItem> lvlThree = new List <DBItem>(); lvlThree = this.GetChildren(lvlTwo, departmentsList); foreach (DBItem item in lvlThree) { result += item.ID + ","; } List <DBItem> lvlFour = new List <DBItem>(); lvlFour = this.GetChildren(lvlThree, departmentsList); foreach (DBItem item in lvlFour) { result += item.ID + ","; } return(result.TrimEnd(',')); }
/// <summary> /// Возвращает имя подразделения по его id /// </summary> /// <param name="departmentID"></param> /// <returns></returns> private string GetDepartmentNameByID(string departmentID) { bool b = int.TryParse(departmentID, out int id); if (!b) { throw new FormatException("Передан неверный id подразделения"); } DBWeb web = this.Site.GetWeb("/"); DBList listDeps = web.GetList("Departments"); DBItem department = listDeps.GetItem(id); return(department.GetStringValue("Название")); }
/// <summary> /// Метод поиска среди "Родительских подразделений" по условию. /// Результат поиска в свойстве Result. /// </summary> /// <param name="depid"></param> private void Scan(string departmentID) { if (string.IsNullOrEmpty(departmentID)) { throw new ArgumentException("message", nameof(departmentID)); } DBWeb web = this.Site.GetWeb("/"); DBList Deps = web.GetList(Consts.GetDBList); string newNode = this.GetParent(departmentID, Deps); while (Result == null) { newNode = this.GetParent(newNode, Deps); } }
/// <summary> /// Вычисляет доступные группы рассылки для текущего пользователя /// </summary> /// <returns>SQL-запрос</returns> public string GetGroups() { string result = string.Empty; //Список группы рассылки DBList deviringList = this.Site.RootWeb.GetList(Consts.DeliveringGroups.ListName, true); //список «WSSC_Доступ к группам рассылки» DBWeb web = this.Site.GetWeb("dms", true); DBList accessList = web.GetList(Consts.Lists.AccessOfDelivering.ListName, true); //поля в которых нужно проверять текущего юзера DBFieldLookupMulti fieldGroups = accessList.GetField <DBFieldLookupMulti>(Consts.Lists.AccessOfDelivering.Fields.UsersGroups, true); DBFieldLookupMulti fieldUsers = accessList.GetField <DBFieldLookupMulti>(Consts.Lists.AccessOfDelivering.Fields.Users, true); DBFieldLookupMulti fieldDevGroups = accessList.GetField <DBFieldLookupMulti>(Consts.Lists.AccessOfDelivering.Fields.DeliverinGroups, true); //текущий юзер DBUser currentUser = this.Context.CurrentUser; //группы текущего юзера IEnumerable <int> currentUsersGroups = currentUser.AllGroups.Select(group => group.ID); List <string> devGroupsID = new List <string>(); foreach (DBItem accessItem in accessList.GetItems($"{fieldUsers.GetSelectCondition(currentUser.ID)} OR {fieldGroups.GetSelectCondition(currentUsersGroups)}")) { devGroupsID.AddRange(accessItem.GetLookupValues(Consts.Lists.AccessOfDelivering.Fields.DeliverinGroups).Select(lv => lv.LookupID.ToString())); } string devGroupsIDStr = string.Join(",", devGroupsID.Distinct().ToArray()); string condition = devGroupsIDStr.Length > 0 ? $"OR[ID] IN({ devGroupsIDStr})" : string.Empty; result = $@" [ID] IN ( SELECT [ID] FROM {deviringList.TableName} WITH(NOLOCK) WHERE ([{Consts.DeliveringGroups.AccessRestriction}] = 0 OR [{Consts.DeliveringGroups.AccessRestriction}] IS NULL) {condition} ) "; //throw new Exception(result); return(result); }
/// <summary> /// Возвращает id по названию зоны ответственности. /// </summary> /// <param name="zoneName"></param> /// <returns>id для поля "Зона ответственности"</returns> private int ConvertResponsibilityZoneNameToID(string zoneName) { if (zoneName == null) { throw new ArgumentNullException(nameof(zoneName)); } DBWeb web = this.Site.GetWeb("/dms/InvestmentInitiatives"); DBList listRespZones = web.GetList("ResponsibilityZones"); string selectCondition = $"[Название] = N'{zoneName}'"; DBItem responsibilityZone = listRespZones.GetItem(selectCondition); if (responsibilityZone == null) { throw new Exception("Зона ответственности не найдена"); } return(responsibilityZone.ID); }
/// <summary> /// Возвращает id по названию подразделения. /// </summary> /// <param name="zoneName"></param> /// <returns>id для поля "Подразделение-заказчик"</returns> private int ConvertDepartmentNameToID(string departmentName) { if (departmentName == null) { throw new ArgumentNullException(nameof(departmentName)); } DBWeb web = this.Site.GetWeb("/"); DBList listDeps = web.GetList("Departments"); string selectCondition = $"[Название] = N'{departmentName}'"; DBItem department = listDeps.GetItem(selectCondition); if (department == null) { throw new Exception("Подразделение не найдено"); } return(department.ID); }