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")); }