public Response HacerCompraService(CompraRequest request)
        {
            TerceroProveedor proveedor = this._unitOfWork.TerceroProvedorRepository.
                                         FindBy(provedor => provedor.Tercero.Nit == request.NitProveedor,
                                                includeProperties: "Tercero").FirstOrDefault();

            if (proveedor == null)
            {
                return(new Response
                {
                    Mensaje = $"El provedor con identificación {request.NitProveedor}" +
                              $" no fue encontrado en el sistema, agréguelo antes"
                });
            }
            TerceroUsuario usuario = this._unitOfWork.TerceroUsuarioRepository.
                                     FindFirstOrDefault(usuario => usuario.Id == request.UsuarioId);


            if (usuario == null)
            {
                return(new Response
                {
                    Mensaje = $"El usuario con id {request.UsuarioId}" +
                              $" no fue encontrado en el sistema, agréguelo antes"
                });
            }
            var errores = PuedeRegistrarDetalles(request.Detalles);

            if (errores.Any())
            {
                return(new Response
                {
                    Mensaje = string.Join(", ", errores)
                });
            }
            Compra compra = new Compra.CompraBuilder(proveedor, usuario).Build();

            request.Detalles.ForEach((detalle) =>
            {
                Producto producto = this._unitOfWork.ProductoRepository.
                                    FindBy(producto => producto.Id == detalle.ProductoId,
                                           includeProperties: "DetallesCompra.Compra").FirstOrDefault();

                CompraDetalle compraDetalle = new CompraDetalle.CompraDetalleBuilder(producto, compra).
                                              SetCantidad(detalle.Cantidad).SetCostoUnitario(detalle.Valor).Build();

                compra.AddDetalle(compraDetalle);
                producto.AddCompraDetalle(compraDetalle);
            });

            this._unitOfWork.CompraRepository.Add(compra);
            this._unitOfWork.TransaccionRepository.Add(new Transaccion(TipoDeTransaccion.Egreso, Concepto.CompraDeMateriasPrimas, compra.Total));
            this._unitOfWork.Commit();
            return(new Response
            {
                Mensaje = "Compra registrada con éxito",
                Data = new CompraRequest().Map(compra)
            });
        }
Example #2
0
        public void ProbarCompra()
        {
            Compra compra = new Compra.CompraBuilder(provedorMartin, usuarioDuvan).Build();

            CompraDetalle detalle1 = new CompraDetalle.CompraDetalleBuilder(azucar, compra).
                                     SetCantidad(15).SetCostoUnitario(1800).Build();

            CompraDetalle detalle2 = new CompraDetalle.CompraDetalleBuilder(leche, compra).
                                     SetCantidad(30).SetCostoUnitario(1500).Build();

            compra.AddDetalle(detalle1);
            compra.AddDetalle(detalle2);

            leche.AddCompraDetalle(detalle2);
            azucar.AddCompraDetalle(detalle1);

            Assert.AreEqual(72000, compra.Total);
            Assert.AreEqual(75, leche.Cantidad);
            Assert.AreEqual(30, azucar.Cantidad);
        }