Exemplo n.º 1
0
        public FindSeatsViewModel GetFindSeatsData(int concertId)
        {
            using (var context = new WingTipTicketsEntities(WingtipTicketApp.GetTenantConnectionString(WingtipTicketApp.Config.TenantDatabase1)))
            {
                var concert   = context.Concerts.First(c => c.ConcertId == concertId);
                var venue     = context.Venues.First(v => v.VenueId == concert.VenueId);
                var performer = context.Performers.First(p => p.PerformerId == concert.PerformerId);

                var seatSections = context.TicketLevels.Where(t => t.ConcertId == concertId).ToList();

                // Map to ViewModel
                var viewModel = new FindSeatsViewModel()
                {
                    // Main Models
                    Concert = new FindSeatsViewModel.ConcertViewModel()
                    {
                        ConcertId   = concert.ConcertId,
                        ConcertName = concert.ConcertName,
                        ConcertDate = (DateTime)concert.ConcertDate,

                        VenueId   = venue.VenueId,
                        VenueName = venue.VenueName,

                        PerformerName = performer.ShortName
                    },

                    // Collections
                    SeatSections = new SelectList(seatSections, "SeatSectionId", "Description", null),
                };

                return(viewModel);
            }
        }
Exemplo n.º 2
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"));
        }
        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"));
        }