Exemplo n.º 1
0
        public void AdicionarProduto(Produto produto, decimal desconto, decimal acrescimo, int quantidade)
        {
            if (Status != VendaStatusEnum.Aberta)
            {
                AddDomainError("A venda já foi finalizada. Não é possível adicionar mais itens agora.");
                return;
            }

            if (produto.Estoque < quantidade)
            {
                AddDomainError("O estoque não tem essa quantidade disponível.");
                return;
            }

            VendaProduto vendaProduto = new VendaProduto(this, produto, desconto, acrescimo, quantidade);

            if (!_produtos.Contains(vendaProduto))
            {
                if (!produto.DeduzirEstoque(quantidade))
                {
                    AddDomainError("Erro ao deduzir do estoque.");
                    return;
                }

                _produtos.Add(vendaProduto);
                QuantidadeItens += vendaProduto.Quantidade;
                TotalVenda      += vendaProduto.PrecoFinal;
            }
            else
            {
                AddDomainError("O produto já foi adicionado à venda.");
            }
        }
Exemplo n.º 2
0
        public void RemoverProduto(Produto produto)
        {
            if (Status != VendaStatusEnum.Aberta)
            {
                AddDomainError("A venda já foi finalizada. Não foi possível remover esse item.");
                return;
            }

            VendaProduto vendaProduto = _produtos.Find(c => c.Equals(new VendaProduto(this, produto)));

            if (_produtos.Contains(vendaProduto))
            {
                _produtos.Remove(vendaProduto);

                QuantidadeItens -= vendaProduto.Quantidade;
                TotalVenda      -= vendaProduto.PrecoFinal;
                produto.ReporEstoque(vendaProduto.Quantidade);
            }
            else
            {
                AddDomainError("O produto ainda não foi adicionado à venda.");
            }
        }