Пример #1
0
        public async Task <IActionResult> ConfirmTicket(TicketModelCreate model)
        {
            if (ModelState.IsValid)
            {
                Ticket ticket = new Ticket();

                User user = await _userHelper.GetUserByEmailAsync(model.UserEmail);

                Flight flight = _flightRepository.GetFlight(model.FlightId);

                ticket.Seat   = model.Seat;
                ticket.User   = user;
                ticket.Flight = flight;

                if (model.Class == 1)
                {
                    ticket.Class = "Economic";
                }

                if (model.Class == 2)
                {
                    ticket.Class = "Business";
                }

                try
                {
                    await _ticketRepository.CreateAsync(ticket);// Ao usar o create grava logo

                    var myToken = await _userHelper.GenerateEmailConfirmationTokenAsync(user);

                    // Criar um link que vai levar lá dentro uma acção. Quando o utilizador carregar neste link,
                    // vai no controlador Account executar a action "ConfirmEmail"(Ainda será feita)
                    // Este ConfirmEmail vai receber um objecto novo que terá um userid e um token.
                    var tokenLink = this.Url.Action("Index", "Home", new
                    {
                        userid = user.Id,
                        token  = myToken,
                    }, protocol: HttpContext.Request.Scheme);

                    _mailHelper.SendMail(model.UserEmail, "Ticket", $"<h1>Ticket Confirmation</h1>" +
                                         $"Your ticket information, " +
                                         $"Flight: {model.FlightId}, " +
                                         $"Class: {ticket.Class}, " +
                                         $"Date: {ticket.Seat}, " +
                                         $"Click in this link to home page :</br></br><a href = \"{tokenLink}\">Airline</a>");


                    return(RedirectToAction(nameof(Index)));
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError(string.Empty, ex.InnerException.Message);
                    return(View(model));
                }
            }

            return(this.RedirectToAction("Index", "Flights"));
        }
Пример #2
0
        public async Task GivenATicket_WhenCreateAsync_ThenReturnTicketEntity()
        {
            var ticket = TicketsFactory.ValidTicket();


            var result = await _repository.CreateAsync(ticket);

            result.Should().BeOfType <Ticket>();
        }
        public async Task <Guid> Handle(CreateTicketCommand command, CancellationToken cancellationToken = default(CancellationToken))
        {
            var ticket = new Ticket(Guid.NewGuid(), command.Email, command.Subject, command.Text);

            await _ticketRepository.CreateAsync(ticket);

            var @event = new TicketCreatedEvent(ticket.Id);
            await _mediator.Publish(@event);

            return(ticket.Id);
        }
Пример #4
0
 public async Task CreateTicketAsync(Ticket ticket)
 {
     try
     {
         await m_repository.CreateAsync(ticket);
     }
     catch (ValidationException e)
     {
         m_logger.LogWarning(e, "A validation failed");
         throw;
     }
     catch (Exception e) when(e.GetType() != typeof(ValidationException))
     {
         m_logger.LogCritical(e, $"Unexpected Exception while trying to create a Ticket with the properties : {JsonConvert.SerializeObject(ticket, Formatting.Indented)}");
         throw;
     }
 }
        public async Task <Ticket> Handle(CreateTicketCommand request, CancellationToken cancellationToken)
        {
            var ticket = _mapper.Map <Ticket>(request);

            HttpRequestAccountsApi _request = new HttpRequestAccountsApi();
            var user       = _request.GetUserById(ticket.UserId);
            var location   = user.Location;
            var consultant = _request.GetBestConsultant(ticket.Category, location);

            ticket.ConsultantId = consultant.Id;
            ticket.Status       = "Pending";

            _request.UpdateNoOfTicketsConsultant(consultant.Id, consultant.NumberOfTickets, consultant.TotalNumberOfTickets);
            SendEmail _sendEmail = new SendEmail();

            _sendEmail.SendEmailStatus(ticket.Status, user);

            ticket.ConsultantEmail = consultant.Email;
            ticket.ConsultantName  = consultant.Username;
            ticket.UserEmail       = user.Email;
            ticket.UserName        = user.Username;

            return(await _repository.CreateAsync(ticket));
        }
Пример #6
0
 public async Task CreateAsync(Domain.Models.Ticket ticket)
 {
     await _ticketRepository.CreateAsync(ticket);
 }
Пример #7
0
        public async Task <IActionResult> BuyTicket(int flightId, string price, int flightClassId)
        {
            if (flightId != 0 || string.IsNullOrEmpty(price) || flightClassId != 0)
            {
                int newPrice = Convert.ToInt32(price);

                // Gets the client by Email
                var client = await _clientRepository.GetByEmailAsync(this.User.Identity.Name);

                // Gets the user by Email
                var user = await _userRepository.GetUserByEmailAsync(this.User.Identity.Name);


                // Gets a list of the client Bonus Miles
                var clientMiles = _mileRepository.GetAllBonusMiles(client.Id);

                int bonusMiles = 0;

                foreach (var mile in clientMiles)
                {
                    bonusMiles += mile.Qtd;
                }

                // Checks if client has enough miles to buy the selected Ticket
                if (bonusMiles < newPrice)
                {
                    return(StatusCode(400, "You dont have enough miles to purchase this ticket!"));
                }

                var selectedFlight = _flightRepository.GetAllWithAirportsAndPartners().Where(f => f.IsAproved && f.Id == flightId).FirstOrDefault();
                if (selectedFlight == null)
                {
                    return(StatusCode(404, "Flight Not Found!"));
                }


                var ticket = new Ticket
                {
                    ClientId      = client.Id,
                    FirstName     = user.FirstName,
                    LastName      = user.LastName,
                    FlightId      = flightId,
                    FlightClassId = flightClassId,
                    Price         = newPrice,
                    IsAproved     = false,
                    IsDeleted     = false,
                };

                // Creates the Ticket in the DataBase
                try
                {
                    await _ticketRepository.CreateAsync(ticket);
                }
                catch (Exception)
                {
                    return(StatusCode(520, "Unexpected DataBase Error"));
                }

                return(StatusCode(200, "Ticket awaiting approval!"));
            }

            return(StatusCode(420, "There was an error processing your request!"));
        }
Пример #8
0
        public async Task <IActionResult> TicketNew(NewTicketModel model)
        {
            // É aqui que vou inserir os bilhetes na base de dados

            User user = await _userHelper.GetUserByEmailAsync(model.UserEmail);

            // ===================== Bilhete de Ida ===========================//
            Ticket ticket = new Ticket();
            Flight flight = _flightRepository.GetFlight(model.FlightId);

            ticket.Seat   = Convert.ToInt32(model.Seat);
            ticket.User   = user;
            ticket.Flight = flight;
            ticket.Class  = model.ClassName;

            if (model.FlightIdReturn != 0)
            {
                // ===================== Bilhete de Regresso ===========================//
                Ticket ticketReturn = new Ticket();
                Flight flightReturn = _flightRepository.GetFlight(model.FlightIdReturn);
                ticket.Seat         = Convert.ToInt32(model.SeatReturn);
                ticketReturn.User   = user;
                ticketReturn.Flight = flightReturn;
                ticketReturn.Class  = model.ClassNameReturn;

                try
                {
                    await _ticketRepository.CreateAsync(ticket);       // Grava Bilhete de Ida

                    await _ticketRepository.CreateAsync(ticketReturn); // Grava Bilhete de Regresso

                    _mailHelper.SendMail(user.Email, "Ticket", $"<h1>Ticket Confirmation</h1>" +
                                         $"Your ticket information, " +
                                         $"Flight: {ticket.Flight.Id}, " +
                                         $"Class: {ticket.Class}, " +
                                         $"Date: {ticket.Seat}, " +
                                         $"Thanks for flying with us!");


                    _mailHelper.SendMail(user.Email, "Return Ticket", $"<h1>Ticket Confirmation</h1>" +
                                         $"Your ticket information, " +
                                         $"Flight: {ticketReturn.Flight.Id}, " +
                                         $"Class: {ticketReturn.Class}, " +
                                         $"Date: {ticketReturn.Seat}, " +
                                         $"Thanks for flying with us!");

                    ViewBag.Message = "Your tickets information was sent to your email!";
                    return(View());
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError(string.Empty, ex.InnerException.Message);
                    return(View(model));
                }
            }

            else
            {
                try
                {
                    await _ticketRepository.CreateAsync(ticket);// Ao usar o create grava logo

                    _mailHelper.SendMail(user.Email, "Ticket", $"<h1>Ticket Confirmation</h1>" +
                                         $"Your ticket information, " +
                                         $"Flight: {ticket.Flight.Id}, " +
                                         $"Class: {ticket.Class}, " +
                                         $"Date: {ticket.Seat}, " +
                                         $"Thanks for flying with us!");

                    ViewBag.Message = "Your ticket information was sent to your email!";
                    return(View());
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError(string.Empty, ex.InnerException.Message);
                    return(View(model));
                }
            }
        }
Пример #9
0
        public async Task <bool> CreateAsync(Ticket ticketToCreate)
        {
            var ticket = await _ticketRepository.CreateAsync(ticketToCreate);

            return(ticket);
        }
Пример #10
0
        public async Task <IActionResult> BuyTicket(BuyTicketViewModel model)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var user = await _userHelper.GetUserByEmailAsync(User.Identity.Name);

                    if (model.TravelClass.Contains("Economy"))
                    {
                        var nextSeat = _ticketRepository.GetEconomySeats(model.FlightId);

                        if (nextSeat == 0)
                        {
                            this.ModelState.AddModelError(string.Empty, "Flight is full");
                        }

                        else
                        {
                            var ticket = new Ticket
                            {
                                FlightId      = model.FlightId,
                                PassangerName = model.PassangerName,
                                TravelClass   = "Economy",
                                SeatNumber    = nextSeat,
                                User          = user,
                            };

                            await _ticketRepository.CreateAsync(ticket);

                            var myToken = await _userHelper.GenerateEmailConfirmationTokenAsync(user);

                            var tokenLink = this.Url.Action("ConfirmEmail", "Account", new
                            {
                                userid = user.Id,
                                token  = myToken
                            }, protocol: HttpContext.Request.Scheme);


                            var flight = await _flightRepository.GetByIdAsync(model.FlightId);

                            var arrival = await _airportRepository.GetByIdAsync(flight.ArrivalAirportId);

                            var departure = await _airportRepository.GetByIdAsync(flight.DepartureAirportId);


                            _mailHelper.SendMail(user.Email, $"Your reservation for flight nº HFA000{ticket.FlightId}:", $"<h1>Was completed successfully!</h1>" +
                                                 $"Here are the details:<br/>From {departure.CompleteAirport} to {arrival.CompleteAirport}<br/>" +
                                                 $"On: {flight.DateTime}<br/><br/>Name: {ticket.PassangerName}<br/>Travel Class: {ticket.TravelClass}<br/>" +
                                                 $"Seat Number: {ticket.SeatNumber}");
                        }
                    }

                    else if (model.TravelClass.Contains("Business"))
                    {
                        var nextSeat = _ticketRepository.GetBusinessSeats(model.FlightId);

                        if (nextSeat == 0)
                        {
                            this.ModelState.AddModelError(string.Empty, "Flight is full");
                        }

                        else
                        {
                            var ticket = new Ticket
                            {
                                FlightId      = model.FlightId,
                                PassangerName = model.PassangerName,
                                TravelClass   = "Business",
                                SeatNumber    = nextSeat,
                                User          = user
                            };

                            await _ticketRepository.CreateAsync(ticket);

                            var myToken = await _userHelper.GenerateEmailConfirmationTokenAsync(user);

                            var tokenLink = this.Url.Action("ConfirmEmail", "Account", new
                            {
                                userid = user.Id,
                                token  = myToken
                            }, protocol: HttpContext.Request.Scheme);

                            var flight = await _flightRepository.GetByIdAsync(model.FlightId);

                            var arrival = await _airportRepository.GetByIdAsync(flight.ArrivalAirportId);

                            var departure = await _airportRepository.GetByIdAsync(flight.DepartureAirportId);


                            _mailHelper.SendMail(user.Email, $"Your reservation for flight nº HFA000{ticket.FlightId}:", $"<h1>Was completed successfully!</h1>" +
                                                 $"Here are the details:<br/>From {departure.CompleteAirport} to {arrival.CompleteAirport}<br/>" +
                                                 $"On: {flight.DateTime}<br/><br/>Name: {ticket.PassangerName}<br/>Travel Class: {ticket.TravelClass}<br/>" +
                                                 $"Seat Number: {ticket.SeatNumber}");
                        }
                    }
                }
                catch (Exception exception)
                {
                    ModelState.AddModelError(string.Empty, exception.Message);
                }
            }
            return(RedirectToAction(nameof(Index)));
        }