public async Task <TicketOrderDto> ReserveTicketAsync(int eventId, int clientId, int orderId, SeatPriceOptionDto option) { var priceOption = await _context .PriceOptions .Where(x => x.Id == option.PriceOptionId) .Include(x => x.PriceZone) .ThenInclude(x => x.Seats) .Include(x => x.Price) .Select(x => x) .SingleAsync(); var seats = await _context .Seats .Where(x => x.SceneSeatId == option.SceneSeatId) .Where(x => x.EventId == eventId) .Select(x => x.Id) .ToListAsync(); var reservations = await _context .Reservations .Where(x => x.OrderId == orderId) .Where(x => x.EventId == eventId) .Where(x => x.ClientId == clientId) .Where(x => seats.Any(seatId => x.SeatId == seatId)) .Where(x => x.Discarded == false) .Where(x => x.Ticket == null) .ToListAsync(); var ticket = new TicketProduct { EventId = eventId, ClientId = clientId, OrderId = orderId, PriceOption = priceOption, }; ticket.Reservations.AddRange(reservations); _context.TicketProducts.Add(ticket); await _context.SaveChangesAsync(); return(ticket.MapTo <TicketOrderDto>()); }
public ActionResult Buy(ShoppingCart cc, int id, int cuantity) { Product product = db.Products.Find(id); if (product == null) { return(HttpNotFound()); } TicketProduct ticketProduct = new TicketProduct(); ticketProduct.Id = product.Id; ticketProduct.Name = product.Name; ticketProduct.Price = (double)product.Price; ticketProduct.Cuantity = cuantity; ticketProduct.CategoryId = product.Category.Id; ticketProduct.CategoryName = product.Category.Name; cc.Add(ticketProduct); return(RedirectToAction("Index", "Products")); }