public async Task <ActionResult> AnularOrdenCompra(DTOOrdenCompra orden)
        {
            string _id = null;

            try
            {
                _id = User.Claims.First(x => x.Type == "Idusuario").Value;
            }
            catch (Exception)
            {
                return(await Task.FromResult(StatusCode(401, "Acceso restringido")));
            }

            var ordenCompra = await _context.OrdenCompra.FirstOrDefaultAsync(x => x.IdordenCompra == orden.IdordenCompra);

            if (ordenCompra.IdestadoOrdenCompra == (int)EnumCompras.Entrega || ordenCompra.IdestadoOrdenCompra == (int)EnumCompras.Anulada)
            {
                return(Ok("Esta orden se encuentra entregada/anulada no es posible anularla"));
            }

            ordenCompra.IdestadoOrdenCompra = (int)EnumCompras.Anulada;

            //foreach (var detalle in orden.DetalleOrdenCompra)
            //{
            //    var producto = await _context.Inventario.FirstOrDefaultAsync(x => x.Idproducto == detalle.Idproducto);

            //    producto.Cantidad -= detalle.Cantidad;

            //}

            await _context.SaveChangesAsync();

            return(Ok("Orden de compra anulada"));
        }
        public async Task <ActionResult> UpdateOrdenCompra(DTOOrdenCompra orden)
        {
            string _id = null;

            try
            {
                _id = User.Claims.First(x => x.Type == "Idusuario").Value;
            }
            catch (Exception)
            {
                return(await Task.FromResult(StatusCode(401, "Acceso restringido")));
            }

            var ordenCompra = await _context.OrdenCompra.FirstOrDefaultAsync(x => x.IdordenCompra == orden.IdordenCompra);

            var nextEstado = await Estados(ordenCompra.IdordenCompra);

            ordenCompra.IdestadoOrdenCompra = nextEstado;

            if (ordenCompra.IdestadoOrdenCompra == (int)EnumCompras.Entrega)
            {
                foreach (var detalle in orden.DetalleOrdenCompra)
                {
                    var producto = await _context.Inventario.FirstOrDefaultAsync(x => x.Idproducto == detalle.Idproducto);

                    producto.Cantidad += detalle.Cantidad;
                }
            }

            await _context.SaveChangesAsync();

            return(Ok("Orden de compra actualizada"));
        }
        public async Task <ActionResult> PostOrdenCompra(DTOOrdenCompra orden)
        {
            string _id = null;

            try
            {
                _id = User.Claims.First(x => x.Type == "Idusuario").Value;
            }
            catch (Exception)
            {
                return(await Task.FromResult(StatusCode(401, "Acceso restringido")));
            }

            OrdenCompra item = new OrdenCompra()
            {
                FechaCreacion       = DateTime.Now,
                FechaEspectativa    = orden.FechaEspectativa,
                UserCreatedId       = Int32.Parse(_id),
                Idproveedor         = orden.Idproveedor,
                IdestadoOrdenCompra = (int)EnumCompras.Compra,
                Tipo     = orden.Tipo,
                SubTotal = orden.SubTotal,
                Impuesto = orden.Impuesto,
                Total    = orden.Total
            };

            _context.OrdenCompra.Add(item);
            await _context.SaveChangesAsync();

            foreach (var detalle in orden.DetalleOrdenCompra)
            {
                DetalleOrdenCompra itemDetalle = new DetalleOrdenCompra()
                {
                    IdordenCompra     = item.IdordenCompra,
                    Idproducto        = detalle.Idproducto,
                    IdunidadMedida    = detalle.IdunidadMedida,
                    Cantidad          = detalle.Cantidad,
                    TotalUnidadCompra = detalle.TotalUnidadCompra
                };

                _context.DetalleOrdenCompra.Add(itemDetalle);

                //var producto = await _context.Inventario.FirstOrDefaultAsync(x => x.Idproducto == detalle.Idproducto);

                //producto.Cantidad += detalle.Cantidad;

                await _context.SaveChangesAsync();
            }

            return(Ok("Orden de compra realizada"));
        }