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); }