コード例 #1
0
        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"));
        }
コード例 #2
0
        public ActionResult Booking()
        {
            if (SessionUtility.GetBookingSession() == null || !SessionUtility.IsSessionAlive())
            {
                return(RedirectToAction("Index", "Home"));
            }

            return(View());
        }
コード例 #3
0
        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));
        }