示例#1
0
        public RentalAnnouncementPageViewModel GetRentalAnnouncements(int page, int pageSize)
        {
            RentalAnnouncementPageDto       announcements = _rentalAnnouncementService.GetPageWithFilters(page, pageSize, HttpContext.Current.Request.QueryString);
            RentalAnnouncementPageViewModel results       = _mapper.Map <RentalAnnouncementPageViewModel>(announcements);

            return(results);
        }
示例#2
0
        public RentalAnnouncementPageDto GetPageWithFilters(Int32 pageNumber, Int32 pageSize, NameValueCollection filteringParams)
        {
            Int32 maxCost, minCost, maxArea, minArea;

            try
            {
                maxCost = String.IsNullOrEmpty(filteringParams["maxCost"]) ? Int32.MaxValue : Int32.Parse(filteringParams["maxCost"]);
                minCost = String.IsNullOrEmpty(filteringParams["minCost"]) ? 0 : Int32.Parse(filteringParams["minCost"]);
                maxArea = String.IsNullOrEmpty(filteringParams["maxArea"]) ? Int32.MaxValue : Int32.Parse(filteringParams["maxArea"]);
                minArea = String.IsNullOrEmpty(filteringParams["minArea"]) ? 0 : Int32.Parse(filteringParams["minArea"]);
            }
            catch
            {
                throw new ArgumentException("Invalid filter parameter");
            }

            IQueryable <RentalAnnouncement> announcements = _repository.GetAll();

            announcements = announcements.Where(announcement =>
                                                (announcement.Cost >= minCost && announcement.Cost <= maxCost) &&
                                                (announcement.Area >= minArea && announcement.Area <= maxArea) &&
                                                announcement.Reservations.All(reservation => ((!reservation.IsActive) && (reservation.IsConfirmed)) || ((!reservation.IsRejected) && (reservation.IsConfirmed))));

            int   skip = (pageNumber - 1) * pageSize;
            Int32 announcementCount = (int)Math.Ceiling(announcements.Count() / (float)pageSize);

            announcements = announcements.OrderByDescending(g => g.Id).Skip(skip).Take(pageSize);


            List <RentalAnnouncementDto> rentalAnnouncementDtos = _mapper.Map <IEnumerable <RentalAnnouncement>, List <RentalAnnouncementDto> >(announcements);

            RentalAnnouncementPageDto rentalAnnouncementPageDto = new RentalAnnouncementPageDto
            {
                CurrentPage         = pageNumber,
                PageCount           = announcementCount,
                RentalAnnouncements = rentalAnnouncementDtos
            };

            return(rentalAnnouncementPageDto);
        }