Example #1
0
 /// <summary>
 /// Поднимает событие биндинга внутреннего грида.
 /// </summary>
 protected PagingResult OnRequestDataSource(object sender, PagingArgs args)
 {
     // поднимаем событие биндинга.
     if (RequestDatasource != null)
         return RequestDatasource(this, args);
     return null;
 }
Example #2
0
 /// <summary>
 /// Возвращает коллекцию полных новостей из архива для заданного пользователя.
 /// </summary>
 /// <returns></returns>
 public static PagingResult GetArchiveNews(PagingArgs args, int? personID)
 {
     NewsCollection coll = new NewsCollection();
     string[] offices = GetUserOfficesStringIDs(personID);
     int total_count;
     coll.FillFromDataSet(DBManager.GetArchiveNews(args, out total_count, offices));
     return new PagingResult(coll, total_count);
 }
Example #3
0
 PagingResult OnRequestDatasource(object sender, PagingArgs args)
 {
     int? userID = (CurrentUser != null) ? CurrentUser.ID : null;
     PagingResult result = NewsManager.GetArchiveNews(
         args,
         userID
         );
     return result;
 }
Example #4
0
 PagingResult OnRequestDatasource(object sender, PagingArgs args)
 {
     PagingResult result = NewsManager.SearchNews(
         args,
         tbSearchText.Text,
         Int32.Parse(ddlAuthors.SelectedItem.Value),
         (DBManager.NewsStatus) ddlNewsStatus.SelectedIndex,
         CurrentUser.ID.Value,
         Int32.Parse(ddlOffices.SelectedItem.Value),
         (DBManager.SearchPeriod) ddlPeriod.SelectedIndex
         );
     return result;
 }
Example #5
0
 /// <summary>
 /// Поиск новостей.
 /// </summary>
 /// <param name="args"> аргументы пэйджинга</param>
 /// <param name="strSearchTerms"> слова для поиска</param>
 /// <param name="iSearchAuthorID">ID автора</param>
 /// <param name="iNewsStatus">Статус новости</param>
 /// <param name="personID">ID пользователя,просматривающего страницу</param>
 /// <param name="officeID">ID офиса</param>
 /// <param name="iPeriod">период для поиска</param>
 /// <returns></returns>
 public static PagingResult SearchNews(PagingArgs args,
                                         String searchTerms,
                                         int searchAuthorID,
                                         UlterSystems.PortalLib.DB.DBManager.NewsStatus newsStatus,
                                         int personID,
                                         int officeID,
                                         UlterSystems.PortalLib.DB.DBManager.SearchPeriod period
                                         )
 {
     NewsCollection coll = new NewsCollection();
     int total_count;
     string[] offices = GetUserOfficesStringIDs(personID);
     coll.FillFromDataSet(DBManager.SearchNews(args, out total_count, searchTerms, searchAuthorID, newsStatus, officeID, offices, period));
     return new PagingResult(coll, total_count);
 }
Example #6
0
 /// <summary>
 /// Возвращает датасет, содержащий страницу записей из БД, 
 /// соответствующих объектам заданного типа.
 /// </summary>
 /// <param name="type">Тип объектов.</param>
 /// <param name="args">Параметры страницы.</param>
 /// <param name="totalCount">Общее количество объектов данного типа.</param>
 /// <returns></returns>
 private static DataSet GetObjectsPageDataset(Type type, PagingArgs args, out int totalCount, params object[] param)
 {
     BaseCommand command = GetObjectsPageCommand(type, args, param);
     DataSet ds = command.ExecDataSet();
     totalCount = Convert.ToInt32(command.GetReturnValue());
     return ds;
 }
Example #7
0
        /// <summary>
        /// Возвращает страницу объектов, связанных с данным по ключевому полю.
        /// Первичным ключём для данного объекта считается ID.
        /// </summary>
        /// <param name="type">Тип связанных объектов.</param>
        /// <param name="propertyName">Имя свойства связанных объектов, 
        /// по которому происходит связь с данным.</param>
        /// <returns>Результат импорта. Если объекты не найдены, то он пустой.</returns>
        public virtual PagingResult GetLinkedObjectsPage(Type type, PagingArgs args, string propertyName,
            params object[] param)
        {
            if (!DBAttributesManager.HasDBTableAttribute(type))
                throw new CoreInvalidOperationException(ResourceManager.GetString("TypeDBTableException", type.FullName));

            PagingResult result = PagingResult.Empty;
            if (ID.HasValue)
            {
                object[] par = new object[param.Length + 2];
                par[0] = propertyName;
                par[1] = ID.Value;
                param.CopyTo(par, 2);

                result = GetObjectsPage(type, args, par);
            }

            return result;
        }
Example #8
0
        /// <summary>
        /// Возвращает страницу объектов, связанных с данным по ключевому полю.
        /// Первичным ключём для данного объекта считается ID.
        /// </summary>
        /// <param name="type">Тип связанных объектов.</param>
        /// <param name="propertyName">Имя свойства связанных объектов, 
        /// по которому происходит связь с данным.</param>
        /// <returns>Результат импорта. Если объекты не найдены, то он пустой.</returns>
        public virtual PagingResult GetLinkedObjectsPage(Type type, PagingArgs args, string propertyName)
        {
            if (!DBAttributesManager.HasDBTableAttribute(type))
                throw new CoreInvalidOperationException(ResourceManager.GetString("TypeDBTableException", type.FullName));

            PagingResult result = PagingResult.Empty;
            if (ID.HasValue)
                result = GetObjectsPage(type, args, propertyName, ID.Value);

            return result;
        }
Example #9
0
 /// <summary>
 /// Возвращает страницу объектов заданного типа, отфильтрованную по заданным полям
 /// </summary>
 /// <param name="type">Тип объекта</param>
 /// <param name="args">Параметры страницы</param>
 /// <param name="param">Параметры фильтрации в формате имя свойства - значение - ...</param>
 /// <returns></returns>
 public static PagingResult GetObjectsPageWithCondition(Type type, PagingArgs args, params object[] param)
 {
     Type tp = typeof(BaseObjectCollection<>);
     Type[] tpArgs = { type };
     Type collectionType = tp.MakeGenericType( tpArgs );
     object coll = Activator.CreateInstance( collectionType );
     int totalCount = 0;
     MethodInfo fill_from_dataset_method = coll.GetType().GetMethod("FillFromDataSet", new Type[] { typeof(DataSet) });
     fill_from_dataset_method.Invoke(coll, new object[] { GetObjectsPageDataset(type, args, out totalCount, param) });
     return new PagingResult(coll, totalCount);
 }
Example #10
0
        /// <summary>
        /// Возвращает команду БД для получения постраничного списка объектов.
        /// </summary>
        /// <param name="type">Тип объектов.</param>
        /// <param name="args">Параметры страницы.</param>
        /// <returns></returns>
        public static BaseCommand GetObjectsPageCommand(Type type, PagingArgs args, params object[] param)
        {
            Dictionary<string, object> prms;
            var statement = ObjectMapper.GetSelectQueryStatement(type);
            statement.ConcatClauses(GetObjectByFieldCondition(type, out prms, param));

            BaseCommand command = new Query(statement.ToString());
            foreach (string key in prms.Keys)
            {
                command.Add(key, prms[key]);
            }

            var procedure = new Procedure("uiGetObjectsPage");
            procedure.Add("@PageIndex", args.PageIndex);
            procedure.Add("@PageSize", args.PageSize);
            procedure.Add("@OrderField", args.SortExpression);
            procedure.Add("@IsOrderASC", args.SortOrderASC);
            procedure.Add("@Query", ObjectMapper.GetCommandFullText(command));
            procedure.AddReturnValueParameter();

            return procedure;
        }
Example #11
0
        /// <summary>
        /// Возвращает страницу объектов заданного типа.
        /// </summary>
        /// <param name="type">Тип объектов.</param>
        /// <param name="args">Параметры страницы.</param>
        /// <param name="param">Дополнительные параметры выборки.</param>
        /// <returns>Результат пейджинга. Если объекты не найдены, то результат пустой.</returns>
        public static PagingResult GetObjectsPage(Type type, PagingArgs args, params object[] param)
        {
            Type tp = typeof(BaseObjectCollection<>);
            Type[] tpArgs = { type };
            Type collectionType = tp.MakeGenericType(tpArgs);

            if (!string.IsNullOrEmpty(args.SortExpression))
            {
                PropertyInfo prop = ObjectPropertiesMapper.GetDBReadPropertyByName(type, args.SortExpression);
                if (prop == null)
                    throw new CoreInvalidOperationException(ResourceManager.GetString("PropertyException", type.FullName, args.SortExpression));

                args.SortExpression = ObjectPropertiesMapper.GetFieldNameByProperty(prop);
            }

            object coll = Activator.CreateInstance(collectionType);
            int totalCount = 0;
            MethodInfo fill_from_dataset_method = coll.GetType().GetMethod("FillFromDataSet", new [] { typeof(DataSet) });
            fill_from_dataset_method.Invoke(coll, new object[] { GetObjectsPageDataset(type, args, out totalCount, param) });
            return new PagingResult(coll, totalCount);
        }
Example #12
0
 /// <summary>
 /// Возвращает страницу объектов заданного типа.
 /// </summary>
 /// <param name="type">Тип объектов.</param>
 /// <param name="args">Параметры страницы.</param>
 /// <returns>Результат пейджинга. Если объекты не найдены, то результат пустой.</returns>
 public static PagingResult GetObjectsPage( Type type, PagingArgs args )
 {
     return GetObjectsPage( type, args, null );
 }
Example #13
0
        /// <summary>
        /// Возвращает все объекты данного типа в виде коллекции типа collectionType, 
        /// отсортированные по значениям указанного свойства.
        /// </summary>
        /// <param name="type">Тип обьекта.</param>
        /// <param name="collectionType">Тип коллекции.</param>
        /// <param name="sortPropertyName">Имя свойства класса, по которому нужно сортировать значения.</param>
        /// <param name="sortOrderAsc"></param>
        /// <param name="param">true - если по возрастанию, false - по убыванию.</param>
        /// <returns>Коллекция типа collectionType.</returns>
        public static object GetObjects(Type type, Type collectionType, string sortPropertyName, bool sortOrderAsc, params object[] param)
        {
            // получаем свойство по имени свойства
            PropertyInfo prop = ObjectPropertiesMapper.GetDBReadPropertyByName( type, sortPropertyName );

            if (prop == null)
                throw new CoreInvalidOperationException(ResourceManager.GetString("PropertyException", type.FullName, sortPropertyName));

            // получаем имя поля
            string fieldName = ObjectPropertiesMapper.GetFieldNameByProperty(prop);

            // формируем аргументы выборки
            var args = new PagingArgs(0, PagingArgs.MaxPageSize, fieldName, sortOrderAsc);
            int totalCount;

            // получаем данные
            object coll = Activator.CreateInstance(collectionType);
            MethodInfo fill_from_dataset_method = coll.GetType().GetMethod("FillFromDataSet", new[] {typeof (DataSet)});
            fill_from_dataset_method.Invoke(coll, new object[] {GetObjectsPageDataset(type, args, out totalCount, param)});

            return coll;
        }
Example #14
0
        /// <summary>
        /// Возвращает датасет полных новостей из архива.
        /// </summary>
        /// <returns></returns>
        public static DataSet GetArchiveNews(PagingArgs args, out int total_count, String[] offices)
        {
            String query = "SELECT n.ID,Caption,Text,AuthorID,CreateTime,ExpireTime,OfficeID, PostID,u.LastName FROM News n,Users u";
            DateTime dt = DateTime.Now.Date;
            query += " WHERE n.AuthorID=u.ID AND ExpireTime<=CONVERT(datetime, '" + dt.ToString(CultureInfo.InvariantCulture.DateTimeFormat) + "', 101)";

                query += " AND (OfficeID=" + String.Join(" OR OfficeID=", offices) + ")";

            Procedure procedure = new Procedure("uiGetObjectsPage");
            procedure.Add("@PageIndex", args.PageIndex);
            procedure.Add("@PageSize", args.PageSize);
            procedure.Add("@OrderField", args.SortExpression);
            procedure.Add("@IsOrderASC", args.SortOrderASC);
            procedure.Add("@Query", query);
            procedure.AddReturnValueParameter();
            DataSet ds = procedure.ExecDataSet();
            total_count = Convert.ToInt32(procedure.GetReturnValue());

            return ds;
        }
Example #15
0
        ///// <summary>
        ///// Возвращает датасет редакторов всех новостей.
        ///// </summary>
        ///// <returns>Датасет редакторов всех новостей.</returns>
        //public static DataSet GetNewsEditors()
        //{
        //    String query = "select distinct u.* from ";
        //    query += ObjectMapper.GetDBTableName(typeof(Person)) + " u, ";
        //    query += ObjectMapper.GetDBTableName(typeof(GroupMembership)) + " pg, ";
        //    query += ObjectMapper.GetDBTableName(typeof(Group)) + " g ";
        //    query += " where u.ID = pg.PersonID";
        //    query += " and pg.GroupID = g.ID";
        //    query += " and (g.GroupID = '" + Group.GroupsEnum.OfficeNewsEditor + "' or g.GroupID='" + Group.GroupsEnum.GeneralNewsEditor + "')";
        //    Query q = new Query(query);
        //    DataSet ds = q.ExecDataSet();
        //    return ds;
        //}
        /// <summary>
        /// Возвращает датасет с результатами поиска новостей.
        /// </summary>
        /// <param name="SearchTerms">Искомые слова в тексте и заголовках.</param>
        /// <param name="SearchAuthor">Искомый автор.</param>
        public static DataSet SearchNews(PagingArgs args,
                                            out int total_count,
                                            string searchTerms,
                                            int searchAuthorID,
                                            NewsStatus newsStatus,
                                            int officeID,
                                            string[] offices,
                                            SearchPeriod period
                                           )
        {
            if (searchTerms == null)
                searchTerms = String.Empty;

            // Period

            DateTime searchDateTime = new DateTime(1754, 1, 1);
            switch (period)
            {
                case SearchPeriod.Day:
                    searchDateTime = DateTime.Now.AddDays(-1);
                    break;
                case SearchPeriod.ThreeDays:
                    searchDateTime = DateTime.Now.AddDays(-3);
                    break;
                case SearchPeriod.Week:
                    searchDateTime = DateTime.Now.AddDays(-7);
                    break;
                case SearchPeriod.Month:
                    searchDateTime = DateTime.Now.AddDays(-30);
                    break;
                case SearchPeriod.HalfYear:
                    searchDateTime = DateTime.Now.AddMonths(-6);
                    break;
                case SearchPeriod.Year:
                    searchDateTime = DateTime.Now.AddYears(-1);
                    break;
            }

            // Author

            String[] aTerms;
            // aTerms = strSearchAuthor.Split(new char[] { ' ' });
            String searchQuery = "SELECT t1.ID,Caption,Text,AuthorID,CreateTime,ExpireTime,OfficeID, PostID, t2.LastName FROM [Portal].[dbo].[News] t1 inner join (select ID,LastName from [Portal].[dbo].[Users]";
            if (searchAuthorID != 0)
            {
                searchQuery += " where (";
                /*searchQuery += "    FirstName LIKE '%" + String.Join("%' OR FirstName LIKE '%", aTerms) + "%'";
                searchQuery += " OR MiddleName LIKE '%" + String.Join("%' OR MiddleName LIKE '%", aTerms) + "%'";
                searchQuery += " OR LastName LIKE '%" + String.Join("%' OR LastName LIKE '%", aTerms) + "%'";*/
                searchQuery += "ID = " + searchAuthorID;
                searchQuery += " )";
            }
            searchQuery += ") as t2 on t1.AuthorID = t2.ID ";
            searchQuery += " WHERE (	CreateTime >= CONVERT(datetime, '" + searchDateTime.ToString(CultureInfo.InvariantCulture.DateTimeFormat) + "', 101)";

            // Terms

            aTerms = searchTerms.Split(new char[] { ' ' });
            searchQuery += " AND (( Caption LIKE '%" + String.Join("%' AND Caption LIKE '%", aTerms) + "%' )";
            searchQuery += " OR ( Text LIKE '%" + String.Join("%' AND Text LIKE '%", aTerms) + "%' ))";

            switch (newsStatus)
            {
                case NewsStatus.ActualNews:
                    searchQuery += " AND (ExpireTime > GetDate())";
                    break;
                case NewsStatus.ArchiveNews:
                    searchQuery += " AND (ExpireTime <= GetDate())";
                    break;
            }

            if (officeID == -1)
            {
                searchQuery += " AND (OfficeID=" + String.Join(" OR OfficeID=", offices) + ")";
            }
            else
                searchQuery += " AND OfficeID=" + officeID;

            searchQuery += ")";
            Procedure procedure = new Procedure("uiGetObjectsPage");
            procedure.Add("@PageIndex", args.PageIndex);
            procedure.Add("@PageSize", args.PageSize);
            procedure.Add("@OrderField", args.SortExpression);
            procedure.Add("@IsOrderASC", args.SortOrderASC);
            procedure.Add("@Query", searchQuery);
            procedure.AddReturnValueParameter();
            DataSet ds = procedure.ExecDataSet();
            total_count = Convert.ToInt32(procedure.GetReturnValue());
            return ds;
        }