Пример #1
0
        public ViewResult List(string type, int page = 1)
        {
            ToursListViewModel model = new ToursListViewModel
            {
                Tours = repository.GetAllTours()
                        .Where(b => type == null || b.Type == type)
                        .OrderBy(tour => tour.TourId)
                        .Skip((page - 1) * pageSize)
                        .Take(pageSize),
                PagingInfo = new PagingInfo
                {
                    CurrentPage  = page,
                    ItemsPerPage = pageSize,
                    TotalItems   = type == null?
                                   repository.GetAllTours().Count() :
                                       repository.GetAllTours().Where(tour => tour.Type == type).Count()
                },
                CurrentType = type
            };

            return(View(model));
        }
Пример #2
0
        public void Can_Send_Pagination_View_Model()
        {
            // Организация (arrange)
            Mock <ITourRepository> mock = new Mock <ITourRepository>();

            mock.Setup(m => m.GetAllTours()).Returns(new List <Tour>
            {
                new Tour {
                    TourId = 1, Name = "Tour1"
                },
                new Tour {
                    TourId = 2, Name = "Tour2"
                },
                new Tour {
                    TourId = 3, Name = "Tour3"
                },
                new Tour {
                    TourId = 4, Name = "Tour4"
                },
                new Tour {
                    TourId = 5, Name = "Tour5"
                }
            });

            ToursController controller = new ToursController(mock.Object);

            controller.pageSize = 3;

            // Действие (act)
            ToursListViewModel result = (ToursListViewModel)controller.List(null, 2).Model;

            PagingInfo pagingInfo = result.PagingInfo;

            Assert.AreEqual(pagingInfo.CurrentPage, 2);
            Assert.AreEqual(pagingInfo.ItemsPerPage, 3);
            Assert.AreEqual(pagingInfo.TotalItems, 5);
            Assert.AreEqual(pagingInfo.TotalPages, 2);
        }
Пример #3
0
        public void Can_Paginate()
        {
            // Организация (arrange)
            Mock <ITourRepository> mock = new Mock <ITourRepository>();

            mock.Setup(m => m.GetAllTours()).Returns(new List <Tour>
            {
                new Tour {
                    TourId = 1, Name = "Tour1"
                },
                new Tour {
                    TourId = 2, Name = "Tour2"
                },
                new Tour {
                    TourId = 3, Name = "Tour3"
                },
                new Tour {
                    TourId = 4, Name = "Tour4"
                },
                new Tour {
                    TourId = 5, Name = "Tour5"
                }
            });

            ToursController controller = new ToursController(mock.Object);

            controller.pageSize = 3;

            // Действие (act)
            ToursListViewModel result = (ToursListViewModel)controller.List(null, 2).Model;

            // Утверждение (assert)
            List <Tour> tours = result.Tours.ToList();

            Assert.IsTrue(tours.Count == 2);
            Assert.AreEqual(tours[0].Name, "Tour4");
            Assert.AreEqual(tours[1].Name, "Tour5");
        }
Пример #4
0
        public async Task <ActionResult <ToursViewModel> > Post2([FromBody] ToursListViewModel parameters)
        {
            var filtersList = GetListFilters(_context);        // list існуючих фільтрів

            long[] filterValueSearchList = parameters.Filters; //масив ID вибраних фільтрів
            var    url = _configuration.GetValue <string>("ImagesHotelUrl");

            int            page     = parameters.CurrentPage;
            int            pageSize = 4;
            int            pageNo   = page - 1;
            ToursViewModel model    = new ToursViewModel();

            var query = _context
                        .Tours
                        .Include(s => s.RoomType)
                        .Include(s => s.RoomType.Hotel)
                        //.ThenInclude(hotel => hotel.Name)
                        .Include(d => d.RoomType.Hotel.Region)
                        //.ThenInclude(region => region.Name)
                        .Include(f => f.RoomType.Hotel.Region.Country)
                        //.ThenInclude(country => country.Name)
                        .Include(s => s.RoomType.Hotel.HotelImages)
                        .Include(z => z.CityDeparture)
                        //.ThenInclude(city => city.Name)
                        .Include(t => t.Filtres)
                        .AsQueryable();

            if (parameters.Filters.Length != 0)
            {
                foreach (var fName in filtersList)
                {
                    int countFilter = 0; //Кількість співпадінь у даній групі фільтрів
                    var predicate   = PredicateBuilder.False <Tour>();
                    foreach (var fValue in fName.Children)
                    {
                        for (int i = 0; i < filterValueSearchList.Length; i++)
                        {
                            var idV = fValue.Id;
                            if (filterValueSearchList[i] == idV)
                            {
                                predicate = predicate
                                            .Or(p => p.Filtres
                                                .Any(f => f.FilterValueId == idV));
                                countFilter++;
                            }
                        }
                    }
                    if (countFilter != 0)
                    {
                        query = query.Where(predicate);
                    }
                }
            }

            if (!String.IsNullOrEmpty(parameters.SearchString))
            {
                query = query.Where(s => s.RoomType.Hotel.Name.Contains(parameters.SearchString) ||
                                    s.RoomType.Hotel.Region.Name.Contains(parameters.SearchString));
            }

            switch (parameters.SortOrder)
            {
            case "name":
                query = query.OrderBy(c => c.RoomType.Hotel.Name);
                break;

            case "name_desc":
                query = query.OrderByDescending(c => c.RoomType.Hotel.Name);
                break;

            case "rate":
                query = query.OrderBy(c => c.RoomType.Hotel.Rate);
                break;

            case "rate_desc":
                query = query.OrderByDescending(c => c.RoomType.Hotel.Rate);
                break;

            default:
                query = query.OrderBy(c => c.RoomType.Hotel.Name);
                break;
            }

            int count = query.Count();

            var result = await query.Select(u => new TourListViewModel
            {
                Id                    = u.Id,
                СityDeparture         = u.CityDeparture.Name,
                Name                  = u.RoomType.Hotel.Name,
                HotelNormalizedName   = u.RoomType.Hotel.NormalizedName,
                Region                = u.RoomType.Hotel.Region.Name,
                Country               = u.RoomType.Hotel.Region.Country.Name,
                CountryNormalizedName = u.RoomType.Hotel.Region.Country.NormalizedName,
                Description           = u.RoomType.Hotel.Description,
                Price                 = u.Price,
                Rate                  = u.RoomType.Hotel.Rate,
                Class                 = u.RoomType.Hotel.Class,
                HotelFood             = u.RoomType.Hotel.HotelFood.Name,
                FromData              = u.FromData,
                Date                  = u.FromData.ToString(),
                DaysCount             = u.DaysCount,
                Discount              = u.Discount,
                DiscountPrice         = u.DiscountPrice,
                PlaceCount            = u.RoomType.PlacesCount,
                ImagePath             = u.RoomType.Hotel.HotelImages.FirstOrDefault(f => f.HotelId == u.RoomType.HotelId) == null
                            ? Path.Combine(_url, "no-photo.jpg")
                            : Path.Combine(_url, u.RoomType.Hotel.NormalizedName, "1200_" + u.RoomType.Hotel.HotelImages.FirstOrDefault(
                                               f => f.HotelId == u.RoomType.HotelId).HotelImageUrl)
            })
                         .Skip(pageNo * pageSize)
                         .Take(pageSize).ToListAsync();

            model.Tours       = result;
            model.TotalPages  = (int)Math.Ceiling((double)count / pageSize);
            model.CurrentPage = page;
            model.CountItem   = count;
            return(Ok(model));
        }