public async Task <IActionResult> Edit(int id, [Bind("CodFactura,FecEmision,TotalVendido,TotalCosto,CodEmpleado,CodCliente,CodEstado")] PredidoFactura predidoFactura)
        {
            ClaimsPrincipal currentUser = this.User;
            var             identity    = (ClaimsIdentity)currentUser.Identity;
            var             hola        = Int32.Parse(identity.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier)?.Value);
            var             rol         = Int32.Parse(identity.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Role)?.Value);

            if (id != predidoFactura.CodFactura)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    despensa1Context db = new despensa1Context();
                    var aux             = await db.PredidoFactura.FindAsync(id);

                    if (rol == 3)
                    {
                        aux.CodEstado = predidoFactura.CodEstado;
                    }
                    aux.CodEstado   = 2;
                    aux.CodEmpleado = hola;
                    Factura factura = new Factura();
                    factura.Fecha       = DateTime.Now;
                    factura.CodEmpleado = aux.CodEmpleado;
                    factura.CodCliente  = aux.CodCliente;
                    _context.Update(aux);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!PredidoFacturaExists(predidoFactura.CodFactura))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(PedidosPendientes)));
            }
            ViewData["CodCliente"]  = new SelectList(_context.Usuario, "CodUsuario", "CodUsuario", predidoFactura.CodCliente);
            ViewData["CodEmpleado"] = new SelectList(_context.Usuario, "CodUsuario", "CodUsuario", predidoFactura.CodEmpleado);
            ViewData["CodEstado"]   = new SelectList(_context.EstadoPedido, "CodEstado", "CodEstado", predidoFactura.CodEstado);
            return(View(predidoFactura));
        }
        public async Task <IActionResult> Create([Bind("CodFactura,Direccion_entrega,FecEmision,TotalVendido,TotalCosto,CodEmpleado,CodCliente,CodEstado")] PredidoFactura predidoFactura)
        {
            ClaimsPrincipal       currentUser     = this.User;
            var                   identity        = (ClaimsIdentity)currentUser.Identity;
            decimal?              totalxproducto  = 0;
            decimal?              totalxproducto1 = 0;
            decimal?              totalventa      = 0;
            decimal?              totalcosto      = 0;
            List <DetalleFactura> lista           = new List <DetalleFactura>();

            try
            {
                var entradas = SessionHelper.GetObjectFromJson <List <Item> >(HttpContext.Session, "cart");
                if (entradas == null)
                {
                    ViewBag.ErrorCarrito = 3;
                    return(View());
                }
                foreach (var item in entradas)
                {
                    if (item.Quantity == 0)
                    {
                        ViewBag.ErrorCarrito = 4;
                        return(View());
                    }
                    lista.Add(new DetalleFactura {
                        Precio = item.Product.PrecioVenta, Costo = item.Product.PrecioCosto, CodProducto = item.Product.CodProducto, Cantidad = item.Quantity
                    });
                    totalxproducto  = item.Product.PrecioVenta * item.Quantity;
                    totalxproducto1 = item.Product.PrecioCosto * item.Quantity;
                    totalventa      = totalventa + totalxproducto;
                    totalcosto      = totalcosto + totalxproducto1;
                    var producto = await _context.Producto.FindAsync(item.Product.CodProducto);

                    if (producto.Cantidad < item.Quantity)
                    {
                        ViewBag.Inexistencia = producto;
                        ViewBag.ErrorCarrito = 2;
                        return(View());
                    }
                }
                if (totalventa < 50)
                {
                    ViewBag.ErrorCarrito = 1;
                    return(View());
                }
                else
                {
                    foreach (var item in entradas)
                    {
                        var producto = await _context.Producto.FindAsync(item.Product.CodProducto);

                        producto.Cantidad = producto.Cantidad - item.Quantity;
                        _context.Update(producto);
                        await _context.SaveChangesAsync();
                    }
                }
            }
            catch
            {
                ViewBag.ErrorCarrito = 3;
                return(View());
            }


            if (ModelState.IsValid)
            {
                string fecha = DateTime.Now.ToString("dd/MM/yyyy");
                predidoFactura.FecEmision     = DateTime.Now;
                predidoFactura.TotalVendido   = totalventa;
                predidoFactura.TotalCosto     = totalcosto;
                predidoFactura.CodCliente     = Int32.Parse(identity.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier)?.Value);
                predidoFactura.CodEstado      = 1;
                predidoFactura.DetalleFactura = lista;
                _context.Add(predidoFactura);
                await _context.SaveChangesAsync();

                limpiarCarrito();
                return(RedirectToAction("Index", "Categorias", new { a = "PedidoSatisfactorio", b = predidoFactura.TotalVendido, c = fecha }));
            }
            ViewBag.Pedidofactura   = "entre aqui";
            ViewData["CodCliente"]  = new SelectList(_context.Usuario, "CodUsuario", "CodUsuario", predidoFactura.CodCliente);
            ViewData["CodEmpleado"] = new SelectList(_context.Usuario, "CodUsuario", "CodUsuario", predidoFactura.CodEmpleado);
            ViewData["CodEstado"]   = new SelectList(_context.EstadoPedido, "CodEstado", "CodEstado", predidoFactura.CodEstado);
            Console.WriteLine("no  entre");
            return(View(predidoFactura));
        }