public async Task <ProductoDto> Handle(DataRequest request, CancellationToken cancellationToken)
            {
                var productoExistente = await dBContext.Producto.Where(p => p.ProductoId == request.ProductoId).FirstOrDefaultAsync();

                if (productoExistente != null)
                {
                    productoExistente.ProductoNombre         = request.ProductoNombre;
                    productoExistente.ProductoDescripcion    = request.ProductoDescripcion;
                    productoExistente.ProductoCantidad       = request.ProductoCantidad;
                    productoExistente.ProductoPrecioUnitario = request.ProductoPrecioUnitario;
                    productoExistente.CategoriaId            = request.CategoriaId;
                    dBContext.Update(productoExistente);

                    var result = await dBContext.SaveChangesAsync();

                    if (result > 0)
                    {
                        return(new ProductoDto()
                        {
                            ProductoId = productoExistente.ProductoId,
                            ProductoNombre = productoExistente.ProductoNombre,
                            ProductoDescripcion = productoExistente.ProductoDescripcion,
                            ProductoCantidad = productoExistente.ProductoCantidad,
                            ProductoPrecioUnitario = productoExistente.ProductoPrecioUnitario,
                            CategoriaId = productoExistente.CategoriaId
                        });
                    }
                    throw new Exception("No se pudo editar producto");
                }

                throw new Exception("No existe producto");
            }
Esempio n. 2
0
            public async Task <FacturaDto> Handle(DataRequest request, CancellationToken cancellationToken)
            {
                //Declaracion de variables
                decimal _subtotal = 0;
                var     listaDescripcionProductoFacturadoDto = new List <DescripcionFacturadoDto>();
                var     listaDescripcionProductoFacturado    = new List <DescripcionFactura>();



                //Evaluamos las cantidades existentes de cada producto y si existe
                foreach (var producto in request.ProductosFacturar)
                {
                    var productoExistente = await dBContext.Producto.Where(x => x.ProductoId == producto.ProductoId).FirstOrDefaultAsync();

                    if (productoExistente == null)
                    {
                        throw new Exception("Producto No existe");
                    }

                    var productoCantidadRestante = productoExistente.ProductoCantidad - producto.CantidadFacturar;
                    if (productoCantidadRestante < 5)
                    {
                        throw new Exception("El stock mínimo es de 5");
                    }


                    //Calculo de subtotal de los productos
                    _subtotal = (_subtotal + (producto.CantidadFacturar * productoExistente.ProductoPrecioUnitario));
                }


                //Creamos factura para guardarla en la base de datos
                var facturaNueva = new Factura()
                {
                    FacturaId            = new Guid(),
                    FacturaFecha         = request.FacturaFecha,
                    ClienteId            = request.ClienteId,
                    FacturaIvaporcentaje = request.FacturaIvaporcentaje,
                    FacturaSubtotal      = _subtotal,
                    FacturaIvatotal      = _subtotal * (request.FacturaIvaporcentaje / 100),
                    FacturaTotal         = _subtotal + (_subtotal * (request.FacturaIvaporcentaje / 100))
                };

                //Guardamos la factura
                await dBContext.Factura.AddAsync(facturaNueva);

                var result = await dBContext.SaveChangesAsync();

                //////////////////////////////////////////////////////

                if (result > 0)
                {
                    var cliente = await dBContext.Cliente.Where(x => x.ClienteId == facturaNueva.ClienteId).FirstOrDefaultAsync();

                    //Actualizamos la cantidad del producto facturado y registramos a descripcion de la facturacion
                    foreach (var producto in request.ProductosFacturar)
                    {
                        var productoExistente = await dBContext.Producto.Where(x => x.ProductoId == producto.ProductoId).FirstOrDefaultAsync();

                        var productoCantidadRestante = productoExistente.ProductoCantidad - producto.CantidadFacturar;
                        productoExistente.ProductoCantidad = productoCantidadRestante;

                        var _DescripcionFacturaProducto = new DescripcionFactura()
                        {
                            DescripcionFacturaId       = new Guid(),
                            DescripcionFacturaCantidad = producto.CantidadFacturar,
                            DescripcionFacturaPrecio   = producto.CantidadFacturar * productoExistente.ProductoPrecioUnitario,
                            FacturaId  = facturaNueva.FacturaId,
                            ProductoId = producto.ProductoId,
                        };
                        listaDescripcionProductoFacturado.Add(_DescripcionFacturaProducto);

                        listaDescripcionProductoFacturadoDto.Add(new DescripcionFacturadoDto()
                        {
                            DescripcionFacturaCantidad = (int)_DescripcionFacturaProducto.DescripcionFacturaCantidad,
                            DescripcionFacturaPrecio   = (decimal)_DescripcionFacturaProducto.DescripcionFacturaPrecio,
                            ProductoId     = productoExistente.ProductoId,
                            ProductoNombre = productoExistente.ProductoNombre
                        });

                        await dBContext.DescripcionFactura.AddAsync(_DescripcionFacturaProducto);

                        dBContext.Update(productoExistente);
                        var resultActualizarProducto = await dBContext.SaveChangesAsync();


                        if (resultActualizarProducto <= 0)
                        {
                            throw new Exception("No se pudó actualizar la cantidad del producto o la descripcion de la factura");
                        }
                    }

                    return(new FacturaDto()
                    {
                        FacturaId = facturaNueva.FacturaId,
                        FacturaFecha = facturaNueva.FacturaFecha,
                        ClienteId = facturaNueva.ClienteId,
                        ClienteNombre = cliente.ClienteNombre,
                        FacturaSubtotal = facturaNueva.FacturaSubtotal,
                        FacturaIvaporcentaje = facturaNueva.FacturaIvaporcentaje,
                        FacturaIvatotal = facturaNueva.FacturaIvatotal,
                        FacturaTotal = facturaNueva.FacturaTotal,
                        ListaDescripcionFactura = listaDescripcionProductoFacturadoDto
                    });
                }


                throw new Exception("No se pudó registrar la factura");
            }