public DataSourceResult <TableTemplateGridListDto> GetList(DataSourceRequestDto <TableTemplateGridListDto> request)
        {
            var list = Source.Select(i => new TableTemplateGridListDto
            {
                Id       = i.Id,
                DateFrom = i.DateFrom,
                Rate     = i.Rate
            });

            return(list.AsQueryable().ToDataSourceResult(request));
        }
示例#2
0
        /// <summary>
        /// Получает Список всех банков. todo: Вынести  в отдельный сервис
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public DataSourceResult <BankDto> GetBankQueryResultDto(DataSourceRequestDto <object> request)
        {
            IQueryable <BankDto> query = DataContext.GetTable <BnkSeekEntity>().
                                         Select(e => new BankDto
            {
                Bik  = e.Bik,
                Name = e.Name
            });

            return(query.ToDataSourceResult(request));
        }
示例#3
0
        public void SelectFakeTest()
        {
            var request = new DataSourceRequestDto <object>()
            {
                Take = 3
            };

            var queryDto = Service.GetBankQueryResultDto(request);

            Assert.AreEqual(3, queryDto.Data.Count());
        }
        public HttpResponseFile DownloadExcel(DataSourceRequestDto <TableTemplateGridListDto> request)
        {
            var list = Source.Select(i => new TableTemplateGridListDto
            {
                Id       = i.Id,
                DateFrom = i.DateFrom,
                Rate     = i.Rate
            });

            string strDto = list.AsQueryable().ToDataSourceResult(request).ToJson();

            string       fileName = "TestFile.txt";
            MemoryStream ms       = new MemoryStream(Encoding.UTF8.GetBytes(strDto));

            return(ms.AttachmentResponse(fileName));
        }
示例#5
0
        /// <summary>
        /// Запрос к списочным данным. Метод может быть переопеределен и в этом случае
        /// не требуется переопределять методы Projection(), EntityQueryCustomFilters() и ListDtoQueryCustomFilters.
        /// </summary>
        /// <param name="request">Параметры запроса: фильтр, сортировки, пейджинг</param>
        /// <returns>Страница списка.</returns>
        public virtual DataSourceResult <TListDto> GetQueryResultDto(DataSourceRequestDto <TFilterDto> request)
        {
            var query = GetQuery();

            // Накладываем кастомные фильтры
            query = EntityQueryCustomFilters(query, request.FilterDto);

            // Получение проекции
            var queryListDto = Projection(query, request.FilterDto);

            queryListDto = ListDtoQueryCustomFilters(queryListDto, request.FilterDto);

            // Накладываем кастомные фильтры
            var dsResult = queryListDto.ToDataSourceResult(request);

            return(dsResult);
        }
        /// <summary>
        /// Запрос к списочным данным. Метод может быть переопеределен и в этом случае тогда
        /// не требуется переопределять методы Projection() и QueryCustomFilters().
        /// </summary>
        /// <param name="queryParam">Параметры запроса: фильтр, сортировки, пейджинг</param>
        /// <returns>Страница списка.</returns>
        public virtual DataSourceResult <TListDto> GetQueryResultDto(DataSourceRequestDto <TFilterDto> request)
        {
            var query = GetQuery().AsQueryable();

            // Накладываем кастомные фильтры
            query = QueryCustomFilters(query, request.FilterDto);

            // Получение проекции.
            var queryList = query.Select(Projection());

            // Накладываем кастомные фильтры
            queryList = QueryCustomFilters(queryList, request.FilterDto);

            //Kendo фильтры
            var dsResult = queryList.ToDataSourceResult(request);

            return(dsResult);
        }
示例#7
0
        public void SelectDifficultFakeTest()
        {
            // Подготовка

            var request = new DataSourceRequestDto <TaxRateForBankFilterDto>()
            {
                FilterDto = new TaxRateForBankFilterDto()
                {
                    CurDate = new DateTime(2017, 1, 3)
                }
            };

            // Действие
            var queryDto = Service.GetQueryResultDto(request);

            // Проверка. Ожидаем три записи, т.к. данные группируются по БИК,
            // а в тестовых данных три уникальных БИКа
            Assert.AreEqual(3, queryDto.Data.Count());
        }
 public DataSourceResult <TurnoverPlanDto> Query(DataSourceRequestDto <TurnoverPlanFilterDto> request)
 {
     return(TurnoverPlanService.GetQueryResultDto(request));
 }
        /// <summary>
        /// Списочный запрос
        /// </summary>
        /// <param name="request">Параметры запроса</param>
        /// <returns>Результат, с которым умеет работать Kendo.</returns>
        public override DataSourceResult <TransExitNodeActionListDto> GetQueryResultDto(DataSourceRequestDto <TransExitNodeActionFilterDto> request)
        {
            // Запрос с выборкой гуида сессии и даты последнего действия сесси.
            var queryA = DataContext.GetTable <TransExitNodeActionEntity>()
                         .GroupBy(item => item.SessionId)
                         .Select(g => new { SessionId = g.Key, Date = g.Max(i => i.Date) });

            // Запрос с выборкой последних действий в сессии.
            var query = DataContext.GetTable <TransExitNodeActionEntity>()
                        .Join(queryA,
                              tena => new { SessionId = tena.SessionId, Date = tena.Date },
                              a => new { SessionId = a.SessionId, Date = a.Date },
                              (tena, a) => tena);

            // Применение фильтра с датами.
            if (request.FilterDto != null)
            {
                var filter = request.FilterDto;
                if (filter.StartPeriodDateTime.HasValue)
                {
                    query = query.Where(item => item.Date >= filter.StartPeriodDateTime.Value);
                }

                if (filter.EndPeriodDateTime.HasValue)
                {
                    query = query.Where(item => item.Date < filter.EndPeriodDateTime.Value);
                }
            }

            // Общее кол-во.
            int total = query.Count();

            // Пейжинг.
            query = query.OrderBy(item => item.Id).Skip(request.Skip).Take(request.Take);

            // Финальный запрос - соедиение action с network'ами.
            var resultQuery = query.Join(DataContext.GetTable <TransNetworkExitNodeInActionEntity>(),
                                         tena => tena.Id,
                                         n => n.TransExitNodeActionId,
                                         (tena, n) => new { ActionEnity = tena, NetworkEntity = n });

            // Часть логики реализовано на IEnumerable, потому-что требуется конкатенация занчения networkIps.
            List <TransExitNodeActionListDto> resultList = new List <TransExitNodeActionListDto>();


            // Группируем по идентификатору сущности Действия.
            foreach (var groupItem in resultQuery.ToArray().GroupBy(i => i.ActionEnity.Id))
            {
                // Получаем первую любое действия, т.к. они одинаковые.
                TransExitNodeActionEntity entity = groupItem.First().ActionEnity;

                // Получаем network с именем LAN.
                var lanNetwork = groupItem.FirstOrDefault(i => i.NetworkEntity != null && i.NetworkEntity.Name == "LAN");

                // Получаем ip-адереса network'a через запятую.
                var    networks   = groupItem.Where(i => i.NetworkEntity != null).Select(i => i.NetworkEntity);
                string networkIps = networks.Any() ? string.Join(", ", networks.Select(n => n.Ip)) : null;

                resultList.Add(new TransExitNodeActionListDto
                {
                    SessionId   = entity.SessionId,
                    Action      = entity.Action,
                    Date        = entity.Date,
                    ExternalIP  = entity.ExternalIP,
                    HostName    = entity.HostName,
                    ProfileName = entity.ProfileName,
                    NetworkIps  = networkIps,
                    Mac         = lanNetwork != null ? lanNetwork.NetworkEntity.Mac : null
                });
            }

            return(new DataSourceResult <TransExitNodeActionListDto>
            {
                Total = total,
                Data = resultList
            });
        }
        /// <summary>
        /// Списочный запрос. Возвращает детализация по сессии.
        /// </summary>
        /// <param name="request">Параметры запроса. Содержат последние "действие" сессии для которой нужно вывести детализацию.</param>
        /// <returns>Результат, с которым умеет работать Kendo.</returns>
        public DataSourceResult <TransExitNodeActionListDto> GetSesionDetailsByLastAction(DataSourceRequestDto <TransExitNodeActionListDto> request)
        {
            string sessionId = request.FilterDto.SessionId;

            var query = DataContext.GetTable <TransExitNodeActionEntity>()
                        .Where(action => action.SessionId == sessionId);

            // Финальный запрос - соедиение action с network'ами.
            var resultQuery = query.Join(DataContext.GetTable <TransNetworkExitNodeInActionEntity>(),
                                         tena => tena.Id,
                                         n => n.TransExitNodeActionId,
                                         (tena, n) => new { ActionEnity = tena, NetworkEntity = n });

            // Часть логики реализовано на IEnumerable, потому-что требуется конкатенация занчения networkIps.
            List <TransExitNodeActionListDto> resultList = new List <TransExitNodeActionListDto>();


            // Группируем по идентификатору сущности Действия.
            foreach (var groupItem in resultQuery.ToArray().GroupBy(i => i.ActionEnity.Id))
            {
                // Получаем первую любое действия, т.к. они одинаковые.
                TransExitNodeActionEntity entity = groupItem.First().ActionEnity;

                // Получаем network с именем LAN.
                var lanNetwork = groupItem.FirstOrDefault(i => i.NetworkEntity != null && i.NetworkEntity.Name == "LAN");

                // Получаем ip-адереса network'a через запятую.
                var    networks   = groupItem.Where(i => i.NetworkEntity != null).Select(i => i.NetworkEntity);
                string networkIps = networks.Any() ? string.Join(", ", networks.Select(n => n.Ip)) : null;

                resultList.Add(new TransExitNodeActionListDto
                {
                    Action      = entity.Action,
                    Date        = entity.Date,
                    ExternalIP  = entity.ExternalIP,
                    HostName    = entity.HostName,
                    ProfileName = entity.ProfileName,
                    NetworkIps  = networkIps,
                    Mac         = lanNetwork != null ? lanNetwork.NetworkEntity.Mac : null
                });
            }

            return(new DataSourceResult <TransExitNodeActionListDto>
            {
                Data = resultList
            });
        }