Beispiel #1
0
        public async Task Registrar(Venda venda)
        {
            if (!venda.EhValido())
            {
                Notificar(venda.ValidationResult);
                return;
            }

            await _vendaRepository.Adicionar(venda);

            foreach (var produtoVenda in venda.VendasProdutos)
            {
                var produto = await ObterProduto(produtoVenda);

                if (!QuantidadeSuficienteNoEstoque(produtoVenda, produto))
                {
                    Notificar("Não há itens suficientes em estoque para concluir essa operação.");
                    return;
                }

                produtoVenda.GerarKardex(produto.Quantidade, produtoVenda.Quantidade);
                produto.DecrementarEstoque(produtoVenda.Quantidade);

                _produtoRepository.Atualizar(produto);
                await _vendaProdutoRepository.Adicionar(produtoVenda);
            }

            var cliente = await ObterClientePorId(venda.ClienteId);

            await GerarRegistroClienteCompra(cliente, venda);

            await _UoW.Commit();
        }