Ejemplo n.º 1
0
        public ActionResult BuyTickets(FormCollection data)
        {
            var kidsRetirees = int.Parse(data["kidsRetirees"]);
            var students     = int.Parse(data["students"]);
            var adults       = int.Parse(data["adults"]);
            var projectionID = int.Parse(data["projectionID"]);
            var seats        = data["seats"].Split(',').Select(int.Parse).ToArray();

            List <decimal> ticketTypesPrices = new List <decimal>();
            var            ticketsBought     = new Dictionary <Ticket, int[]>();

            if (kidsRetirees != 0)
            {
                for (int i = 1; i <= kidsRetirees; i++)
                {
                    ticketTypesPrices.Add(TicketPrices.kidsRetirees);
                }
            }

            if (students != 0)
            {
                for (int i = 1; i <= students; i++)
                {
                    ticketTypesPrices.Add(TicketPrices.students);
                }
            }

            if (adults != 0)
            {
                for (int i = 1; i <= adults; i++)
                {
                    ticketTypesPrices.Add(TicketPrices.adults);
                }
            }


            using (var context = new CinemaTicketsDbContext())
            {
                try
                {
                    var tickets       = context.Projections.FirstOrDefault(p => p.ProjectionID == projectionID).Tickets.ToList();
                    var counter       = 0;
                    var usernameEmail = (string)Session["usernameEmail"];
                    foreach (var ticket in tickets)
                    {
                        foreach (var seat in seats)
                        {
                            if (ticket.SeatID == seat)
                            {
                                var userSoldCurrentTicket = context.Employees.FirstOrDefault(e => e.Email == usernameEmail);
                                var currentSeat           = ticket.Seat;
                                ticket.IsSold   = true;
                                ticket.Price    = ticketTypesPrices[counter];
                                ticket.Employee = userSoldCurrentTicket;
                                counter++;
                                ticketsBought[ticket] = new int[] { currentSeat.Row, currentSeat.Column };
                            }
                        }
                    }
                    context.SaveChanges();
                }
                catch (OptimisticConcurrencyException ex)
                {
                }
            }
            CacheViewModel.CacheModel(ticketsBought);
            return(new HttpStatusCodeResult(200, "OK"));
        }
        public ActionResult RedirectProjectionData(FormCollection data)
        {
            try
            {
                var kidsRetirees   = int.Parse(data["kidsRetirees"]);
                var students       = int.Parse(data["students"]);
                var adults         = int.Parse(data["adults"]);
                var projectionID   = int.Parse(data["projectionID"]);
                var totalPrice     = decimal.Parse(data["totalPrice"]);
                var projectionTime = data["projectionTime"].Split(' ');
                Session["ticketDate"] = projectionTime[0];
                Session["ticketHour"] = projectionTime[1] + projectionTime[2];

                var seatDtos = new List <SeatDTO>();
                using (var context = new CinemaTicketsDbContext())
                {
                    var projection = context.Projections.FirstOrDefault(p => p.ProjectionID == projectionID);
                    var hallNumber = context.Halls.FirstOrDefault(h => h.HallID == projection.HallID).HallNumber;
                    Session["hallNumber"] = hallNumber;
                    var tickets = projection.Tickets.ToList();

                    foreach (var ticket in tickets)
                    {
                        var seatDto = new SeatDTO
                        {
                            Column = ticket.Seat.Column,
                            Row    = ticket.Seat.Row,
                            HallID = ticket.Seat.HallID,
                            SeatID = ticket.Seat.SeatID
                        };

                        if (ticket.IsSold)
                        {
                            seatDto.IsTaken = true;
                        }
                        else
                        {
                            seatDto.IsTaken = false;
                        }
                        seatDtos.Add(seatDto);
                    }
                }

                var model = new SeatViewModel()
                {
                    Adults       = adults,
                    KidsRetirees = kidsRetirees,
                    SeatDtos     = seatDtos,
                    Students     = students,
                    TotalPrice   = totalPrice,
                    ProjectionID = projectionID
                };
                CacheViewModel.CacheModel(model);
            }

            catch (Exception e)
            {
                return(new HttpStatusCodeResult(400, "Something went wrong! :("));
            }

            return(new HttpStatusCodeResult(200, "OK"));
        }