Пример #1
0
        // 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));
        }
Пример #2
0
        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));
        }