/// <summary> /// Guarda los cambios realizados en el producto /// </summary> /// <param name="idProducto"></param> /// <param name="productoDto"></param> /// <returns></returns> public Producto EditarProducto(int idProducto, Producto productoDto) { var producto = db.Producto.Where(p => p.IdProducto == idProducto).FirstOrDefault(); //Edita el producto if (producto != null) { producto.Codigo = productoDto.Codigo; producto.Nombre = productoDto.Nombre; producto.Valor = productoDto.Valor; db.SaveChanges(); } else { throw new Exception($"No se encontro el producto con IdProducto {idProducto}"); } return(producto); }
/// <summary> /// Se realiza una doble validación para rectifica los valores totales, po si llegan a hackear el valor total en el front /// Se crea la factura don sus respectivos items y productos /// </summary> /// <param name="facturaDto"></param> /// <returns></returns> public Factura CrearFactura(Factura facturaDto) { db.Configuration.LazyLoadingEnabled = false; //Si la factura no tiene productos if (facturaDto.Items.Count() == 0) { throw new Exception("La factura debe tener como mínimo 1 prodcuto"); } if (facturaDto.Cliente == null) { throw new Exception("Ingrese el nombre del cliente a la factura"); } var idsProductos = facturaDto.Items.Select(i => i.IdProducto).Distinct().ToArray(); //Se consultan los productos de la factura, para rectificar el valor total de los productos var productos = db.Producto.Where(p => idsProductos.Contains(p.IdProducto)).ToArray(); decimal totalFactura = 0; foreach (var i in facturaDto.Items) { var producto = productos.Where(p => p.IdProducto == i.IdProducto).FirstOrDefault(); i.ValorTotal = (decimal)i.Cantidad * (decimal)producto.Valor; totalFactura += i.ValorTotal; i.Producto = null; } //Guarda el costo total de la factura facturaDto.ValorTotal = totalFactura; db.Factura.Add(facturaDto); db.SaveChanges(); return(facturaDto); }