// GET: ControlesExistencias/Edit/5
        public IActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var control = _context.ControlesDeExistenciasVenta
                          .Include(c => c.Turno.Dependiente)
                          .Include(c => c.Turno.Bar)
                          .Include(c => c.Detalles).ThenInclude(c => c.Producto)
                          .SingleOrDefault(c => c.Id == id);

            if (control == null)
            {
                return(NotFound());
            }
            var existenciaAnterior = _context.Set <ControlExistenciaVenta>()
                                     .Include(c => c.Turno)
                                     .Any(d => d.Turno.BarId == control.Turno.BarId && d.Id != control.Id && d.Fecha < control.Fecha) ?
                                     _context.Set <ControlExistenciaVenta>()
                                     .Include(c => c.Turno)
                                     .Include(c => c.Detalles)
                                     .Where(d => d.Turno.BarId == control.Turno.BarId && d.Id != control.Id && d.Fecha < control.Fecha)
                                     .OrderBy(d => d.Fecha)
                                     .Last().Detalles
                                     .Select(d => new DetalleExistenciaVM
            {
                ProductoId = d.ProductoId,
                Cantidad   = d.Cantidad
            })
                                     .ToList() : new List <DetalleExistenciaVM>();
            var productos = _context.Set <Producto>()
                            .Where(p => _context.Set <StandardVenta>()
                                   .Any(s => s.ProductoId == p.Id && s.BarId == control.Turno.BarId) ||
                                   (existenciaAnterior.Any(e => e.ProductoId == p.Id) ? existenciaAnterior.SingleOrDefault(e => e.ProductoId == p.Id).Cantidad : 0) > 0)
                            .Select(p => new DetalleExistenciaVM
            {
                ProductoId       = p.Id,
                Producto         = p.Nombre,
                Unidad           = p.Unidad.Nombre,
                Cantidad         = _context.Set <DetalleControlExistenciaVenta>().Any(d => d.ControlId == control.Id && d.ProductoId == p.Id) ? _context.Set <DetalleControlExistenciaVenta>().SingleOrDefault(d => d.ControlId == control.Id && d.ProductoId == p.Id).Cantidad : 0,
                CantidadAnterior = existenciaAnterior.Any(e => e.ProductoId == p.Id) ? existenciaAnterior.SingleOrDefault(e => e.ProductoId == p.Id).Cantidad : 0,
            });
            var data = new ControlExistenciaVM
            {
                Id          = control.Id,
                TurnoId     = control.TurnoId,
                Bar         = control.Turno.Bar.Nombre,
                Dependiente = control.Turno.Dependiente.NombreCompleto,
                Fecha       = control.Fecha,
                Detalles    = productos.ToList()
            };

            return(View("PorTurno", data));
        }
        public IActionResult PorTurno(int id, ControlExistenciaVM controlExistencia)
        {
            var control = _context.Set <ControlExistenciaVenta>()
                          .SingleOrDefault(c => c.Id == controlExistencia.Id);

            if (control == null)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    foreach (var item in controlExistencia.Detalles)
                    {
                        var producto = _context.Set <Producto>().Find(item.ProductoId);
                        if (_context.Set <DetalleControlExistenciaVenta>().Any(d => d.ControlId == control.Id && d.ProductoId == item.ProductoId))
                        {
                            var detalle = _context.Set <DetalleControlExistenciaVenta>().SingleOrDefault(d => d.ControlId == control.Id && d.ProductoId == item.ProductoId);
                            detalle.Cantidad = item.Cantidad;
                            detalle.Costo    = producto.Costo;
                            detalle.Precio   = producto.Precio;
                            _context.Update(detalle);
                        }
                        else
                        {
                            _context.Add(new DetalleControlExistenciaVenta {
                                ControlId = control.Id, ProductoId = item.ProductoId, Cantidad = item.Cantidad, Costo = producto.Costo, Precio = producto.Precio
                            });
                        }
                    }
                    _context.SaveChanges();
                    TempData["exito"] = "La acción se ha realizado correctamente";
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!ControlExistenciaExists(controlExistencia.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Detalles), new { Id = control.Id }));
            }
            TempData["error"] = "Error en realizar esta acción";
            return(View(controlExistencia));
        }