예제 #1
0
        public ActionResult Create([Bind(Include = "NumberOfTicket, Reminder, RemainingTickets")] ParticipantsViewModel participantsViewModel, int id)
        {
            ParticipantDTO   participantDto   = new ParticipantDTO();
            ParticipantQuery participantQuery = new ParticipantQuery();

            //Gary added to find ticket price
            EventDTO   eventDTO   = new EventDTO();
            EventQuery eventQuery = new EventQuery();

            eventDTO.TicketPrice = eventQuery.FindEvent(id).TicketPrice;
            int remainingTickets = eventQuery.GetRemainingTickets(id);

            if (ModelState.IsValid && remainingTickets >= participantsViewModel.NumberOfTicket)
            {
                //Gary added if statement for payment screen
                if ((participantsViewModel.NumberOfTicket > 0) && (eventDTO.TicketPrice > 0))
                {
                    TempData["Reminder"]        = participantsViewModel.Reminder;
                    TempData["NumberOfTickets"] = participantsViewModel.NumberOfTicket;
                    TempData["TicketPrice"]     = eventDTO.TicketPrice;
                    TempData["Subtotal"]        = Convert.ToInt32(participantsViewModel.NumberOfTicket) *
                                                  Convert.ToInt32(eventDTO.TicketPrice);

                    return(RedirectToAction("Payment/" + id, "Participants"));
                }
                else
                {
                    participantDto.NumberOfTicket = participantsViewModel.NumberOfTicket;
                    participantDto.Reminder       = participantsViewModel.Reminder;
                    participantDto.eventId        = id;
                    participantDto.Barcodes       = new List <Guid>();

                    for (int i = 0; i < participantDto.NumberOfTicket; i++)
                    {
                        Guid barcode = Guid.NewGuid();
                        participantDto.Barcodes.Add(barcode);
                    }

                    int participantID = participantQuery.CreateParticipant(participantDto);

                    //EventDTO eventDTO = new EventDTO();
                    ParticipantsViewModel vm = new ParticipantsViewModel();
                    //EventQuery eventQuery = new EventQuery();
                    UserDTO   userDTO   = new UserDTO();
                    UserQuery userQuery = new UserQuery();
                    userDTO  = userQuery.FindCurrentUser();
                    eventDTO = eventQuery.FindEvent(participantDto.eventId);

                    double totalCharge = participantDto.NumberOfTicket * eventDTO.TicketPrice;

                    string content = System.IO.File.ReadAllText(Server.MapPath("~/views/Shared/ConfirmMail.cshtml"));
                    content = content.Replace("{{Name}}", eventDTO.Name);
                    content = content.Replace("{{Address}}", eventDTO.Address);
                    content = content.Replace("{{City}}", eventDTO.City);
                    content = content.Replace("{{State}}", eventDTO.State);
                    content = content.Replace("{{Zip}}", eventDTO.Zip.ToString());
                    content = content.Replace("{{TimeStart}}", eventDTO.TimeStart.ToString());
                    content = content.Replace("{{Price}}", eventDTO.TicketPrice.ToString());
                    content = content.Replace("{{Ticket}}", participantDto.NumberOfTicket.ToString());
                    content = content.Replace("{{Total}}", totalCharge.ToString());
                    content = content.Replace("{{eventID}}", eventDTO.Id.ToString());
                    var toEmail = userDTO.Username.ToString();
                    new EmailNotification().SendEmail(toEmail, content, "Confirmation : You have registered for an event");

                    return(RedirectToAction("RegistrationConfirmation/" + participantID, "Participants"));
                }
            }

            if (remainingTickets < participantsViewModel.NumberOfTicket && remainingTickets > 0)
            {
                ViewBag.RemainingTicketsError1 = "Oops! The number of remaining tickets is less than what you ordered.";
            }
            else if (remainingTickets == 0)
            {
                ViewBag.RemainingTicketsError2 = "Sorry, there are no tickets left";
            }

            participantsViewModel.TicketsAvailable = eventQuery.GetRemainingTickets(id);
            return(View(participantsViewModel));
        }
예제 #2
0
        public ActionResult Payment([Bind(Include = "NumberOfTicket, Reminder")] ParticipantsViewModel participantsViewModel, int id)
        {
            ParticipantDTO   participantDto   = new ParticipantDTO();
            ParticipantQuery participantQuery = new ParticipantQuery();
            UserQuery        userQuery        = new UserQuery();
            EPay             ePay             = new EPay();

            if ((TempData.ContainsKey("Reminder")) && (TempData["Reminder"] != null))
            {
                participantsViewModel.Reminder = DateTime.Parse(TempData["Reminder"].ToString());
            }
            //participantsViewModel.NumberOfTicket = int.Parse(TempData["Reminder"].ToString());

            if (TempData.ContainsKey("NumberOfTickets"))
            {
                participantsViewModel.Subtotal = int.Parse(TempData["NumberOfTickets"].ToString());
            }

            if (TempData.ContainsKey("Subtotal"))
            {
                participantsViewModel.Subtotal = double.Parse(TempData["Subtotal"].ToString());
            }

            double purchAmt   = participantsViewModel.Subtotal * 100;
            string purchEmail = userQuery.FindCurrentUser().Username;

            if (ModelState.IsValid)
            {
                //Web Api call to Stripe Credit Card Payment Service
                string apiResp     = ePay.MakeStripeApiRequest(purchAmt, purchEmail);
                string confirmCode = apiResp.Substring(0, apiResp.IndexOf(','));
                string statusCode  = apiResp.Substring(apiResp.IndexOf(',') + 1, apiResp.Length - (apiResp.IndexOf(',') + 1));

                if (statusCode.ToUpper() == "OK")
                {
                    TempData["ConfirmationCode"] = confirmCode;
                    TempData.Keep("ConfirmationCode");
                    ViewBag.Confirmation = "The payment processed successfully.  " +
                                           "Your confirmation number is " + confirmCode;
                    participantDto.NumberOfTicket = participantsViewModel.NumberOfTicket;
                    participantDto.Reminder       = participantsViewModel.Reminder;
                    participantDto.eventId        = id;
                    participantDto.Barcodes       = new List <Guid>();

                    for (int i = 0; i < participantDto.NumberOfTicket; i++)
                    {
                        Guid barcode = Guid.NewGuid();
                        participantDto.Barcodes.Add(barcode);
                    }

                    int participantID = participantQuery.CreateParticipant(participantDto);

                    EventDTO   eventDTO   = new EventDTO();
                    EventQuery eventQuery = new EventQuery();
                    eventDTO.TicketPrice = eventQuery.FindEvent(id).TicketPrice;


                    ParticipantsViewModel vm = new ParticipantsViewModel();
                    UserDTO userDTO          = new UserDTO();
                    userDTO  = userQuery.FindCurrentUser();
                    eventDTO = eventQuery.FindEvent(participantDto.eventId);

                    double totalCharge = participantDto.NumberOfTicket * eventDTO.TicketPrice;

                    string content = System.IO.File.ReadAllText(Server.MapPath("~/views/Shared/confirmMailPurchase.cshtml"));
                    content = content.Replace("{{Name}}", eventDTO.Name);
                    content = content.Replace("{{Address}}", eventDTO.Address);
                    content = content.Replace("{{City}}", eventDTO.City);
                    content = content.Replace("{{State}}", eventDTO.State);
                    content = content.Replace("{{Zip}}", eventDTO.Zip.ToString());
                    content = content.Replace("{{TimeStart}}", eventDTO.TimeStart.ToString());
                    content = content.Replace("{{Price}}", eventDTO.TicketPrice.ToString());
                    content = content.Replace("{{Ticket}}", participantDto.NumberOfTicket.ToString());
                    content = content.Replace("{{Total}}", totalCharge.ToString());
                    content = content.Replace("{{eventID}}", eventDTO.Id.ToString());
                    content = content.Replace("{{RegistrationConfirmation}}", confirmCode);
                    var toEmail = userDTO.Username.ToString();
                    new EmailNotification().SendEmail(toEmail, content, "Confirmation : You have purchased tickets to an event");

                    return(RedirectToAction("RegistrationConfirmation/" + participantID, "Participants"));
                }
                else
                {
                    ViewBag.Confirmation = "The payment failed.  Please try again.";
                }
            }

            return(View(participantsViewModel));
        }