Ejemplo n.º 1
0
        /// <summary>
        /// Записываем в лог инфу о найденых карточках. Пишем ИД карточки и её рег номер
        /// </summary>
        private void WriteLogInfo(DBItemCollection items, DBList list)
        {
            Console.WriteLine($"{Environment.NewLine}Найдено карточек: {items.Count}");

            this.Loger.WriteLine($"{Environment.NewLine}Дата {DateTime.Now.ToString()}  найдено карточек: {items.Count}{Environment.NewLine}Информация о найденых карточках:");

            if (items.Count == 0)
            {
                return;
            }

            //устанавливаем load type
            DBField field = list.GetField(Consts.Fields.RegNumber, true);

            field.ValueLoadingType = DBFieldValueIOType.Directly;

            //собираем всю инфу (ИД карточки и её рег номер) и потом записываем разом в лог
            StringBuilder itemsinfo = new StringBuilder();

            foreach (DBItem item in items)
            {
                itemsinfo.AppendLine($"ItemID = '{item.ID}' Регистрационный номер: '{item.GetStringValue(Consts.Fields.RegNumber)}'");
            }

            this.Loger.WriteLine(itemsinfo.ToString());
        }
        /// <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);
        }