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")); }
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); }
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)); }
public async Task CreateAsync(Domain.Models.Ticket ticket) { await _ticketRepository.CreateAsync(ticket); }
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!")); }
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)); } } }
public async Task <bool> CreateAsync(Ticket ticketToCreate) { var ticket = await _ticketRepository.CreateAsync(ticketToCreate); return(ticket); }
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))); }