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