示例#1
0
        public async Task <ActionResult> SearchFlightsAsync(SearchFlightFE values)
        {
            var departureDate = Convert.ToDateTime(values.DepartureDate);

            // Mapping để lấy thông tin
            // Flights:
            await _unitOfWork.Airlines.GetAllAsync();

            await _unitOfWork.Airports.GetAllAsync();

            await _unitOfWork.TicketCategories.GetAllAsync();

            await _unitOfWork.Flights.GetFlightTicketCategoriesAsync();

            var flights = _mapper.Map <IEnumerable <Flight>, IEnumerable <FlightDTO> >(await _unitOfWork.Flights.GetAllAsync());

            // DateFlights:
            var dateFlights = _mapper.Map <IEnumerable <DateFlight>, IEnumerable <DateFlightDTO> >(await _unitOfWork.DateFlights.GetAllAsync());

            // Dates:
            var dates = _mapper.Map <IEnumerable <Date>, IEnumerable <DateDTO> >(await _unitOfWork.Dates.GetAllAsync());

            // Total Passengers:
            int totalSeats = 0;

            foreach (var passenger in values.TicketCategories)
            {
                if (passenger.Id != 3) // *Gán cứng*: 3 là em bé nên ko tính số ghế
                {
                    totalSeats += passenger.Quantity;
                }
            }

            // Get flights in date
            var currentDepartureDate = dates.Where(d => d.DepartureDate == departureDate).SingleOrDefault();

            if (currentDepartureDate == null)
            {
                return(BadRequest("date not found"));
            }
            var departureDateFlight = dateFlights.Where(df => df.DateId.Equals(currentDepartureDate.Id));
            var departureFlights    = (
                from f in flights
                from df in departureDateFlight
                where f.Id.Equals(df.FlightId) &&
                df.SeatsLeft >= totalSeats   // Số ghế trống phải >= Số hành khách đăng ký
                select f
                );

            // Search Departure Flights:
            departureFlights = departureFlights.Where(f =>
                                                      f.AirportFrom.Equals(values.AirportFrom) &&
                                                      f.AirportTo.Equals(values.AirportTo) &&
                                                      f.Status == 1 // active
                                                      );

            // Search Return Flights:
            IEnumerable <FlightDTO> returnFlights = null;

            if (values.ReturnDate != "")
            {
                var returnDate = Convert.ToDateTime(values.ReturnDate);
                // Get flights in date
                var currentReturnDate = dates.Where(d => d.DepartureDate == returnDate).SingleOrDefault();
                if (currentReturnDate == null)
                {
                    return(BadRequest("date not found"));
                }
                var returnDateFlight = dateFlights.Where(df => df.DateId.Equals(currentReturnDate.Id));

                returnFlights = (
                    from f in flights
                    from df in returnDateFlight
                    where f.Id.Equals(df.FlightId) &&
                    f.Status == 1 && // 1 => Chuyến bay đang hoạt động
                    df.SeatsLeft >= totalSeats
                    select f
                    );
                returnFlights = returnFlights.Where(f =>
                                                    f.AirportFrom.Equals(values.AirportTo) &&
                                                    f.AirportTo.Equals(values.AirportFrom)
                                                    );
            }
            else
            {
                return(Ok(new { success = true, departureFlights = departureFlights }));
            }

            return(Ok(new { success = true, DepartureFlights = departureFlights, ReturnFlights = returnFlights }));
        }
        public async Task <ActionResult> SearchFlightsAsync([FromQuery] SearchFlightFE values)
        {
            var flights = await _service.SearchFlightsAsync(values);

            return(flights);
        }