public IActionResult Put(Usuario usuario)
        {
            if (usuario.Clave != "")
            {
                usuario.Clave = StringExtension.HashPassword(usuario.Clave);
            }
            else
            {
                using (MisPollosContext context = new MisPollosContext())
                {
                    usuario.Clave = context.Usuarios.FirstOrDefault(x => x.Id == usuario.Id).Clave;
                }
            }

            var result = _context.Usuarios.Attach(usuario);

            _context.Entry(usuario).State = EntityState.Modified;
            _context.SaveChanges();

            return(Ok(result.Entity));
        }
Exemple #2
0
        public IActionResult Put(PedidoDto dto)
        {
            decimal total = 0;
            // Consulta los id de producto enviados por el frontend
            var products = _context.Producto.Where(x => dto.ListaProductos.Select(s => s.IdProducto).Contains(x.Id));

            // Calcula el valor total del pedido multiplicando el precio de cada producto por su cantidad y sumandolo
            foreach (var producto in products)
            {
                var cantidad = dto.ListaProductos.First(x => x.IdProducto == producto.Id).Cantidad;
                total += cantidad * producto.Precio;
            }

            var pedido = new Pedido
            {
                Id         = dto.Id,
                IdCliente  = dto.IdCliente,
                IdUsuario  = dto.IdUsuario,
                ValorTotal = total,
            };

            var result = _context.Pedido.Attach(pedido);

            _context.Entry(pedido).State = EntityState.Modified;
            _context.SaveChanges();

            var productItems = _context.PedidoProducto.Where(x => x.IdPedido == pedido.Id);

            foreach (var productItem in productItems)
            {
                if (!dto.ListaProductos.Any(x => x.IdProducto == productItem.IdProducto))
                {
                    using (MisPollosContext context = new MisPollosContext())
                    {
                        Producto product = context.Producto.First(x => x.Id == productItem.IdProducto);
                        product.Stock += productItem.Cantidad;
                        context.SaveChanges();
                    }
                    _context.PedidoProducto.Remove(productItem);
                }
            }
            _context.SaveChanges();

            foreach (var item in dto.ListaProductos)
            {
                Producto producto = _context.Producto.First(x => x.Id == item.IdProducto);
                var      cantidad = productItems.FirstOrDefault(x => x.IdProducto == item.IdProducto)?.Cantidad ?? 0;
                //                   5            10
                producto.Stock += cantidad - item.Cantidad;
                //                   10            5
                _context.Producto.Attach(producto);
                _context.Entry(producto).State = EntityState.Modified;
                _context.SaveChanges();

                var pedidoProducto = productItems.FirstOrDefault(x => x.IdProducto == item.IdProducto);
                if (pedidoProducto == null)
                {
                    pedidoProducto = new PedidoProducto
                    {
                        IdPedido   = pedido.Id,
                        IdProducto = item.IdProducto,
                        Cantidad   = item.Cantidad,
                        ValorTotal = item.Cantidad * producto.Precio
                    };

                    _context.PedidoProducto.Add(pedidoProducto);
                    _context.SaveChanges();
                }
                else
                {
                    pedidoProducto.Cantidad = item.Cantidad;
                    _context.PedidoProducto.Attach(pedidoProducto);
                    _context.Entry(pedidoProducto).State = EntityState.Modified;
                    _context.SaveChanges();
                }
            }

            return(Ok(result.Entity));
        }