コード例 #1
0
        public async Task <IActionResult> listOffer()
        {
            var rooms = await _roomService.ListRoomsAsync();

            ViewBag.Rooms = rooms;
            var buildings = await _buildingService.ListBuildingsAsync();

            var model = new FilterRoomDto();

            model.Buildings = buildings;

            return(View(model));
        }
コード例 #2
0
        public async Task <IActionResult> listOffer(FilterRoomDto filterRoomDto)
        {
            var buildings = await _buildingService.ListBuildingsAsync();

            var model = new FilterRoomDto();

            model.Buildings = buildings;

            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            var rooms = await _roomService.FilterRoomsAsync(filterRoomDto);

            ViewBag.Rooms = rooms;

            return(View(model));
        }
コード例 #3
0
        public async Task <IEnumerable <Room> > FilterAsync(FilterRoomDto filterRoomDto)
        {
            var filters           = 0;
            var availableFiltered = false;
            var damagedFiltered   = false;
            var cleanFiltered     = false;
            var rentFiltered      = false;

            var result = new List <Room>();

            var minId = filterRoomDto.MinId ?? 0;
            var maxId = filterRoomDto.MaxId ?? 0;

            if (minId > 0 || maxId > 0)
            {
                var filteredMinIds = await _db.Rooms.Where(r => r.Id >= minId).ToListAsync();

                var filteredMaxIds = await _db.Rooms.Where(r => r.Id <= maxId).ToListAsync();

                if (minId > 0 && maxId == 0)
                {
                    result.AddRange(filteredMinIds);
                }
                else if (maxId > 0 && minId == 0)
                {
                    result.AddRange(filteredMaxIds);
                }

                result.AddRange(filteredMaxIds.Intersect(filteredMinIds));
                filters += 1;
            }

            if (!string.IsNullOrEmpty(filterRoomDto.Number))
            {
                var filteredNumbers = await _db.Rooms.Where(r => EF.Functions.Like(r.Number, $"%{filterRoomDto.Number}%")).ToListAsync();

                result.AddRange(filteredNumbers);
                filters += 1;
            }

            if (!string.IsNullOrEmpty(filterRoomDto.Standard.ToString()))
            {
                var filteredStandards = await _db.Rooms.Where(r => r.Standard == filterRoomDto.Standard).ToListAsync();

                result.AddRange(filteredStandards);
                filters += 1;
            }

            int minFloor = filterRoomDto.MinFloor ?? 0;
            int maxFloor = filterRoomDto.MaxFloor ?? 0;

            if (minFloor > 0 || maxFloor > 0)
            {
                var filteredMinFloors = await _db.Rooms.Where(r => r.Floor >= minFloor).ToListAsync();

                var filteredMaxFloors = await _db.Rooms.Where(r => r.Floor <= maxFloor).ToListAsync();

                if (minFloor > 0 && maxId == 0)
                {
                    result.AddRange(filteredMinFloors);
                }
                else if (maxFloor > 0 && minFloor == 0)
                {
                    result.AddRange(filteredMaxFloors);
                }

                result.AddRange(filteredMaxFloors.Intersect(filteredMinFloors));
                filters += 1;
            }

            decimal minPricePerDay = filterRoomDto.MinPricePerDay ?? 0;
            decimal maxPricePerDay = filterRoomDto.MaxPricePerDay ?? 0;

            if (minPricePerDay > 0 || maxPricePerDay > 0)
            {
                var filteredMinPricesPerDay = await _db.Rooms.Where(r => r.PricePerDay >= minPricePerDay).ToListAsync();

                var filteredMaxPricesPerDay = await _db.Rooms.Where(r => r.PricePerDay <= maxPricePerDay).ToListAsync();

                if (minPricePerDay > 0 && maxPricePerDay == 0)
                {
                    result.AddRange(filteredMinPricesPerDay);
                }
                else if (maxPricePerDay > 0 && minPricePerDay == 0)
                {
                    result.AddRange(filteredMaxPricesPerDay);
                }

                result.AddRange(filteredMaxPricesPerDay.Intersect(filteredMinPricesPerDay));
                filters += 1;
            }

            if (!string.IsNullOrEmpty(filterRoomDto.Client))
            {
                var filteredClients = await _db.Rooms.Where(r => EF.Functions.Like(r.Client.FirstName, $"%{filterRoomDto.Client}%") ||
                                                            EF.Functions.Like(r.Client.LastName, $"%{filterRoomDto.Client}%")).ToListAsync();

                result.AddRange(filteredClients);
                filters += 1;
            }

            var buildingId = filterRoomDto.BuildingId ?? 0;

            if (buildingId > 0)
            {
                var filteredBuildings = await _db.Rooms.Where(r => r.BuildingId == buildingId).ToListAsync();

                result.AddRange(filteredBuildings);
                filters += 1;
            }

            if (filterRoomDto.IsAvailable)
            {
                var availableRooms = await _db.Rooms.Where(r => r.IsAvailable).ToListAsync();

                result.AddRange(availableRooms);
                if (!availableFiltered)
                {
                    availableFiltered = true;
                }
            }
            if (filterRoomDto.IsNotAvailable)
            {
                var notAvailableRooms = await _db.Rooms.Where(r => !r.IsAvailable).ToListAsync();

                result.AddRange(notAvailableRooms);
                if (!availableFiltered)
                {
                    availableFiltered = true;
                }
            }

            if (filterRoomDto.IsDamaged)
            {
                var damagedRooms = await _db.Rooms.Where(r => r.IsDamaged).ToListAsync();

                result.AddRange(damagedRooms);
                if (!damagedFiltered)
                {
                    damagedFiltered = true;
                }
            }
            if (filterRoomDto.IsNotDamaged)
            {
                var notDamagedRooms = await _db.Rooms.Where(r => !r.IsDamaged).ToListAsync();

                result.AddRange(notDamagedRooms);
                if (!damagedFiltered)
                {
                    damagedFiltered = true;
                }
            }

            if (filterRoomDto.IsClean)
            {
                var cleanRooms = await _db.Rooms.Where(r => r.IsClean).ToListAsync();

                result.AddRange(cleanRooms);
                if (!cleanFiltered)
                {
                    cleanFiltered = true;
                }
            }
            if (filterRoomDto.IsNotClean)
            {
                var notCleanRooms = await _db.Rooms.Where(r => !r.IsClean).ToListAsync();

                result.AddRange(notCleanRooms);
                if (!cleanFiltered)
                {
                    cleanFiltered = true;
                }
            }

            if (filterRoomDto.IsRent)
            {
                var rentRooms = await _db.Rooms.Where(r => r.IsRent).ToListAsync();

                result.AddRange(rentRooms);
                if (!rentFiltered)
                {
                    rentFiltered = true;
                }
            }
            if (filterRoomDto.IsNotRent)
            {
                var notRentRooms = await _db.Rooms.Where(r => !r.IsRent).ToListAsync();

                result.AddRange(notRentRooms);
                if (!rentFiltered)
                {
                    rentFiltered = true;
                }
            }

            if (availableFiltered)
            {
                filters += 1;
            }
            if (damagedFiltered)
            {
                filters += 1;
            }
            if (cleanFiltered)
            {
                filters += 1;
            }
            if (rentFiltered)
            {
                filters += 1;
            }
            var         groupedResults = result.GroupBy(r => r);
            List <Room> finalResult    = new List <Room>();

            foreach (var gr in groupedResults)
            {
                if (gr.Count() == filters)
                {
                    finalResult.Add(gr.Key);
                }
            }

            return(finalResult);
        }
コード例 #4
0
        public async Task <List <GetRoomDto> > FilterRoomsAsync(FilterRoomDto filterRoomDto)
        {
            var filteredRooms = await _repository.FilterAsync(filterRoomDto);

            return(filteredRooms.Select(r => _converter.RoomToGetRoomDto(r)).ToList());
        }