public ActionResult PaymentPaypal() { if (SessionUtility.GetBookingSession() == null || SessionUtility.GetPassengerSession() == null) { return(RedirectToAction("Index", "Home")); } APIContext apiContext = PaypalUtility.GetAPIContext(); try { var payerId = Request.Params["PayerID"]; if (string.IsNullOrEmpty(payerId)) { var baseURI = Request.Url.Scheme + "://" + Request.Url.Authority + "/Ticket/PaymentPaypal?"; var guid = Convert.ToString((new Random()).Next(100000)); var createdPayment = PaypalUtility.CreatePayment(apiContext, baseURI + "guid=" + guid); //Get id payment for refund var boookingSession = SessionUtility.GetBookingSession(); boookingSession.PaymentID = createdPayment.id; SessionUtility.SetBookingSession(boookingSession); var links = createdPayment.links.GetEnumerator(); string paypalRedirectUrl = null; while (links.MoveNext()) { Links lnk = links.Current; if (lnk.rel.ToLower().Trim().Equals("approval_url")) { paypalRedirectUrl = lnk.href; } } Session.Add(guid, createdPayment.id); return(Redirect(paypalRedirectUrl)); } else { var guid = Request.Params["guid"]; var executedPayment = PaypalUtility.ExecutePayment(apiContext, payerId, Session[guid] as string); if (executedPayment.state.ToLower() != "approved") { return(View("Failed")); } } } catch { return(View("Failed")); } return(RedirectToAction("BookingSuccess")); }
public ActionResult Booking() { if (SessionUtility.GetBookingSession() == null || !SessionUtility.IsSessionAlive()) { return(RedirectToAction("Index", "Home")); } return(View()); }
public ActionResult BookingSuccess() { var loggedUser = SessionUtility.GetLoggedUser(); var booking = SessionUtility.GetBookingSession(); var passengerList = SessionUtility.GetPassengerSession(); var seatCodeSuccess = new List <string>(); if (booking == null || passengerList == null) { return(RedirectToAction("Index", "Home")); } var percent = booking.PassengerType.Where(type => type.Name.Equals(Constant.CONST_DB_NAME_INFANT)).Select(type => type.Discount.Value).FirstOrDefault(); var priceInfant = Math.Round(booking.Price - (booking.Price / 100) * percent, 2); var percent2 = booking.PassengerType.Where(type => type.Name.Equals(Constant.CONST_DB_NAME_CHILD)).Select(type => type.Discount.Value).FirstOrDefault(); var priceChild = Math.Round(booking.Price - (booking.Price / 100) * percent2, 2); var totalPrice = (booking.Price * booking.Adult) + (booking.Child > 0 ? priceChild * booking.Child : 0) + (booking.Infant > 0 ? priceInfant * booking.Infant : 0); //Save Ticket var ticket = new TicketModel { AccountID = loggedUser.ID, Price = totalPrice, CreateDate = DateTime.Now, PaymentID = booking.PaymentID, Status = Constant.CONST_DB_TICKET_STATUS_SUCCESS }; var ticketId = this.TicketService.Insert(ticket); //Save Passenger Ticket foreach (var passenger in passengerList) { passenger.TicketID = ticketId; this.PassengerTicketService.Insert(passenger); } //Save Ticket Flight var order = 1; foreach (var flight in booking.DepartFlight) { var seatCode = this.SeatMapService.GenerateSeatCodeTicket(flight.PlaneID.Value, booking.SeatClass.ID , flight.ID, booking.Adult + booking.Child); if (order == 1) { seatCodeSuccess = seatCode; } var ticketFlight = new TicketFlightModel { TicketID = ticketId, FlightID = flight.ID, SeatCode = string.Join(",", seatCode), RoundTrip = false, Order = order++ }; this.TicketFlightService.Insert(ticketFlight); } //Return flight if (booking.ReturnFlight.Count() != 0) { order = 1; foreach (var flight in booking.ReturnFlight) { var seatCode = this.SeatMapService.GenerateSeatCodeTicket(flight.PlaneID.Value, booking.SeatClass.ID , flight.ID, booking.Adult + booking.Child); var ticketFlight = new TicketFlightModel { TicketID = ticketId, FlightID = flight.ID, SeatCode = string.Join(",", seatCode), RoundTrip = true, Order = order++ }; this.TicketFlightService.Insert(ticketFlight); } } SessionUtility.RemoveBookingSession(); SessionUtility.RemovePassengerSession(); var model = new BookingSuccessModel { TicketId = ticketId, PaymentId = ticket.PaymentID.Split('-')[1], Customer = loggedUser.FirstName + " " + loggedUser.LastName, DepartDate = booking.DepartFlight.First().DepartureDate.Value, Flight = booking.Departure.City + " to " + booking.Arrival.City + (booking.ReturnFlight.Count() > 0 ? " (Round trip)" : string.Empty), Passenger = booking.Adult + " Adult, " + booking.Child + " Child, " + booking.Infant + " Infant", SeatCode = string.Join(", ", seatCodeSuccess), Price = totalPrice }; var baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority + Request.ApplicationPath.TrimEnd('/') + "/"; var currentUser = this.AccountService.Find(loggedUser.ID); EmailSender.SendMailBookingSuccess(currentUser.Email, baseUrl + "Ticket", model.PaymentId, model.DepartDate.ToString("dd/MM/yyyy hh:mm tt"), model.Flight, model.Passenger, model.SeatCode, model.Price.ToString(), ticketId); SessionUtility.SetAuthenticationToken(currentUser, 60); return(View(model)); }