// GET: Reservations/AddPassengers public async Task <IActionResult> AddPassengers() { int count = Int32.Parse(this.Request.Query["count"]); int reservationId = Int32.Parse(this.Request.Query["reservation"]); var reservation = await _context.Reservations.FindAsync(reservationId); var flight = await _context.Flights.FindAsync(reservation.FlightId); ViewData.Add("BusinessSeats", flight.BusinessCapacity); ViewData.Add("RegularSeats", flight.PassengerCapacity); var passengerReservationViewModel = new PassengerReservationViewModel() { PassengerCount = count, CurrentCount = count, ReservationId = reservationId }; return(View(passengerReservationViewModel)); }
public async Task <IActionResult> AddPassengers(int?rnd = null) { var model = new PassengerReservationViewModel(this.Request.Form); var reservation = await _context.Reservations .Include(r => r.Flight) .Include(r => r.Passengers) .FirstOrDefaultAsync(m => m.Id == model.ReservationId); var flight = await _context.Flights.FindAsync(reservation.FlightId); ViewData.Add("BusinessSeats", flight.BusinessCapacity); ViewData.Add("RegularSeats", flight.PassengerCapacity); if (ModelState.IsValid) { var passenger = await _context.Passengers.FirstOrDefaultAsync(x => x.PersonalNo == model.PersonalNo); if (passenger == null) { var newPassenger = new Passenger() { FirstName = model.FirstName, LastName = model.LastName, MiddleName = model.MiddleName, Nationality = model.Nationality, PersonalNo = model.PersonalNo, Telephone = model.Telephone }; _context.Passengers.Add(newPassenger); await _context.SaveChangesAsync(); passenger = await _context.Passengers.FindAsync(newPassenger.Id); } int capacity = 0; TicketTypes?ticketType = null; switch (model.TicketType) { case 1: { capacity = reservation.Flight.PassengerCapacity - reservation.Passengers.Where(r => r.TicketType == TicketTypes.Regular).Count(); ticketType = TicketTypes.Regular; break; } case 2: { capacity = reservation.Flight.BusinessCapacity - reservation.Passengers.Where(r => r.TicketType == TicketTypes.Business).Count(); ticketType = TicketTypes.Business; break; } } if (capacity > 0) { var relation = new PassengerReservation() { Passenger = passenger, PassengerId = passenger.Id, ReservationId = reservation.Id, Reservation = reservation, TicketType = (TicketTypes)ticketType }; reservation.Passengers.Add(relation); passenger.Reservations.Add(relation); await _context.SaveChangesAsync(); } model = new PassengerReservationViewModel() { ReservationId = model.ReservationId, CurrentCount = model.CurrentCount - 1, PassengerCount = model.PassengerCount }; } if (model.CurrentCount == 0) { var callbackUrl = Url.Action( "Confirm", "Reservations", values: new { id = reservation.Id }, protocol: Request.Scheme); reservation = await _context.Reservations .Include(r => r.Flight) .Include(r => r.Passengers) .ThenInclude(p => p.Passenger) .FirstOrDefaultAsync(m => m.Id == model.ReservationId); var message = new StringBuilder(); message.Append($"Моля, потвърдете резервацията си като <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>натиснете тук</a>."); message.Append("<br />"); message.Append($"{reservation.Passengers.Count} общо пътници за полет {reservation.Flight.FlightNumber}. Списък:"); message.Append("<br />"); foreach (var passengerReservation in reservation.Passengers) { var passenger = passengerReservation.Passenger; message.Append($"{passenger.PersonalNo} {passenger.FirstName} {passenger.MiddleName} {passenger.LastName} {passengerReservation.TicketType}"); message.Append("<br />"); } await this.emailSender.SendEmailAsync(reservation.Email, "Потвърждение на резервация", message.ToString()); return(View("ConfirmationNeeded")); } return(View(model)); }