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

            var control = _context.ControlesDeExistencias
                          .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 = _existenciaService.ExistenciaAnterior(control.Turno.BarId, control.Id, control.Fecha);
            var productos          = _context.Set <Producto>()
                                     .Where(p => _context.Set <Standard>()
                                            .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 <DetalleControlExistencia>().Any(d => d.ControlId == control.Id && d.ProductoId == p.Id) ? _context.Set <DetalleControlExistencia>().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 Nuevo([Bind("DependienteId,BarId")] Turno turno)
 {
     if (turno.BarId > 0 && turno.DependienteId > 0)
     {
         turno.Activo      = true;
         turno.FechaInicio = DateTime.Now;
         _context.Add(turno);
         var control = new ControlExistencia
         {
             Turno  = turno,
             Fecha  = DateTime.Now,
             Activo = true,
         };
         var existenciasAnteriores = _existenciaService.ExistenciaAnterior(turno.BarId, 0, DateTime.Now);
         control.Detalles = existenciasAnteriores.Select(e => new DetalleControlExistencia {
             ProductoId = e.ProductoId, Cantidad = e.Cantidad, Costo = _context.Set <Producto>().Find(e.ProductoId).Costo
         }).ToList();
         _context.Add(control);
         var controlVenta = new ControlExistenciaVenta
         {
             Turno  = turno,
             Fecha  = DateTime.Now,
             Activo = true,
         };
         var existenciasVentaAnteriores = _existenciaService.ExistenciaVentaAnterior(turno.BarId, 0, DateTime.Now);
         controlVenta.Detalles = existenciasVentaAnteriores.Select(e => new DetalleControlExistenciaVenta {
             ProductoId = e.ProductoId, Cantidad = e.Cantidad, Costo = _context.Set <Producto>().Find(e.ProductoId).Costo, Precio = _context.Set <Producto>().Find(e.ProductoId).Precio
         }).ToList();
         _context.Add(controlVenta);
         _context.SaveChanges();
         TempData["exito"] = "La acción se ha realizado correctamente";
         return(RedirectToAction("Index", "Home"));
     }
     ViewData["BarId"] = new SelectList(_context.Bares, "Id", "Nombre", turno.BarId);
     TempData["error"] = "Error en realizar esta acción";
     return(View(turno));
 }