Esempio n. 1
0
        public ActionResult PurchaseTicketsWithCreditCard(FindSeatsViewModel viewModel)
        {
            // Check Information
            if (!ModelState.IsValid)
            {
                return(RedirectToAction("Index", "Home"));
            }

            // Map to Domain Model
            var domainModel = new PurchaseTicketsModel()
            {
                ConcertId     = viewModel.Purchase.ConcertId,
                SeatSectionId = viewModel.Purchase.SeatSectionId,
                Quantity      = viewModel.Purchase.Quantity,
                Seats         = viewModel.Purchase.Seats.Replace(" ", "").Split(',').ToList(),

                CustomerId   = ((CustomerModel)Session["SessionUser"]).CustomerId,
                CustomerName = ((CustomerModel)Session["SessionUser"]).FirstName
            };

            // Purchase Tickets and Display Result
            var ticketsPurchased = _ticketRepository.WriteNewTicketToDb(domainModel);

            DisplayMessage(ticketsPurchased != null
                ? string.Format("Successfully purchased tickets. You now have {0} tickets for this concert. Confirmation # {1}", ticketsPurchased.Count, ticketsPurchased[0].TicketId)
                : "Failed to purchase tickets.");

            return(RedirectToAction("Index", "Home"));
        }
Esempio n. 2
0
 public DatabaseContext()
 {
     Concerts  = new ConcertContext();
     Tickets   = new ConcertTicketContext();
     Customers = new CustomerContext();
     Purchase  = new PurchaseTicketsModel();
     Venues    = new VenueContext();
 }
 public DatabaseContext()
 {
     Concerts    = new ConcertContext();
     Tickets     = new ConcertTicketContext();
     Customers   = new CustomerContext();
     Purchase    = new PurchaseTicketsModel();
     Venues      = new VenueContext();
     Discount    = new DiscountContext();
     SeatSection = new SeatSectionContext();
     AllSeats    = new AllSeatsContext();
 }
Esempio n. 4
0
            public List <ConcertTicket> WriteNewTicketToDb(PurchaseTicketsModel model)
            {
                using (var insertConnection = WingtipTicketApp.CreateTenantConnectionDatabase1())
                {
                    insertConnection.Open();

                    for (var i = 0; i < model.Quantity; i++)
                    {
                        var ticketName  = String.Format("Ticket ({0} of {1}) for user {2} to concert-{3}", (i + 1), model.Quantity, model.CustomerName, model.ConcertId);
                        var insertQuery = String.Format(@"INSERT INTO Tickets (CustomerId, Name, TicketLevelId, ConcertId, PurchaseDate, SeatNumber) VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}')", model.CustomerId, ticketName, model.SeatSectionId, model.ConcertId, DateTime.Now, model.Seats[i]);

                        using (var insertCommand = new SqlCommand(insertQuery, insertConnection))
                        {
                            insertCommand.ExecuteNonQuery();
                        }
                    }

                    insertConnection.Close();
                    insertConnection.Dispose();
                }

                return(ReturnPurchasedTicketsByConcertId(model.CustomerId, model.ConcertId));
            }
        public ActionResult PurchaseTicketsWithCreditCard(FindSeatsViewModel viewModel)
        {
            // Check Information
            if (!ModelState.IsValid)
            {
                return(RedirectToAction("Index", "Home"));
            }

            var domainModels = new List <PurchaseTicketsModel>();

            var seats         = viewModel.Purchase.Seats.Replace(" ", "").Split(',').ToList();
            var seatSectionId = viewModel.Purchase.SeatSectionId;
            var sectionName   = _seatSectionRepository.GetSeatSectionDetails(seatSectionId).Description;


            //get concert date to calculate number of days prior concert
            var concertId       = viewModel.Purchase.ConcertId;
            var selectedConcert = _concertRepository.GetConcertById(concertId);
            var concertDate     = selectedConcert.ConcertDate;
            var daysToConcert   = (concertDate - DateTime.Now).Days;

            foreach (var seat in seats)
            {
                // Map to Domain Model
                var domainModel = new PurchaseTicketsModel()
                {
                    ConcertId           = concertId,
                    SeatSectionId       = seatSectionId,
                    Quantity            = viewModel.Purchase.Quantity,
                    Seat                = seat,
                    CustomerId          = ((CustomerModel)Session["SessionUser"]).CustomerId,
                    CustomerName        = ((CustomerModel)Session["SessionUser"]).FirstName,
                    TMinusDaysToConcert = daysToConcert
                };

                //verify if seat has discount
                var discountedSeats = _discountRepository.GetDiscountedSeat(seatSectionId, Convert.ToInt32(seat));

                //there is discount on this seat
                if (discountedSeats.Count > 0)
                {
                    var discountSeatAndSeatSection = discountedSeats.First();
                    domainModel.Discount = discountSeatAndSeatSection.Discount;
                }

                domainModels.Add(domainModel);

                //update allseats table
                var fullSeatDescription = sectionName + " Seat " + seat;

                int tminusDaysToConcert = 0;
                if (daysToConcert >= 0 && daysToConcert <= 5)
                {
                    tminusDaysToConcert = 5;
                }
                if (daysToConcert > 5 && daysToConcert <= 10)
                {
                    tminusDaysToConcert = 10;
                }
                if (daysToConcert > 10 && daysToConcert <= 15)
                {
                    tminusDaysToConcert = 15;
                }
                if (daysToConcert > 15 && daysToConcert <= 20)
                {
                    tminusDaysToConcert = 20;
                }
                if (daysToConcert > 20 && daysToConcert <= 25)
                {
                    tminusDaysToConcert = 25;
                }

                //update only when number of days is less than 25 days as only 0-25 days is required for probability of sales graph
                if (daysToConcert <= 25)
                {
                    var seatDetails = _allSeatsRepository.GetSeatDetails(fullSeatDescription, tminusDaysToConcert);

                    var count = 0;
                    if (domainModel.Discount == 0)
                    {
                        count = seatDetails.DiscountZero;
                        count++;
                    }
                    else if (domainModel.Discount == 10)
                    {
                        count = seatDetails.DiscountTen;
                        count++;
                    }
                    else if (domainModel.Discount == 20)
                    {
                        count = seatDetails.DiscountTwenty;
                        count++;
                    }
                    else if (domainModel.Discount == 30)
                    {
                        count = seatDetails.DiscountThirty;
                        count++;
                    }

                    _allSeatsRepository.UpdateSeatDetails(Convert.ToInt32(domainModel.Discount),
                                                          seatDetails.SeatDescription, domainModel.TMinusDaysToConcert, count);
                }
            }


            // Purchase Tickets and Display Result
            var ticketsPurchased = _ticketRepository.WriteNewTicketToDb(domainModels);

            DisplayMessage(ticketsPurchased != null
                ? string.Format("Successfully purchased tickets. You now have {0} tickets for this concert. Confirmation # {1}", ticketsPurchased.Count, ticketsPurchased[0].TicketId)
                : "Failed to purchase tickets.");

            return(RedirectToAction("Index", "Home"));
        }
Esempio n. 6
0
 public List <ConcertTicket> WriteNewTicketToDb(PurchaseTicketsModel model)
 {
     return(Context.Tickets.WriteNewTicketToDb(model));
 }