public void AtualizarVenda(Venda venda)
 {
     venda.Validar();
     venda.ItensVenda.ForEach(x => x.Validar());
     AssertionConcern.AssertArgumentNotEquals(0, venda.VendaCodigo,
         string.Format(Erros.NotZeroParameter, "VendaCodigo"));
     VerificarEstoque(venda.ItensVenda);
     var vendaAtual = _vendaRepository.ObterPorCodigoComItensVenda(venda.VendaCodigo);
     if (venda.StatusVenda == StatusVendaEnum.Aberto)
     {
         AplicaValidacoesPadrao(venda);
         AdicionaClienteFormaECondicaoDePagamento(venda, vendaAtual);
         AtualizaItensVenda(vendaAtual, venda.ItensVenda);
         vendaAtual.StatusVenda = StatusVendaEnum.Confirmado;
         AdicionaContaReceberNaVenda(vendaAtual);
         vendaAtual.ContasReceber.ForEach(x => x.Validar());
         BaixarDoEstoque(vendaAtual.ItensVenda);
     }
     else
     {
         vendaAtual.StatusVenda = StatusVendaEnum.Cancelado;
         RemoveContaReceberDaVenda(vendaAtual);
         DevolverNoEstoque(vendaAtual.ItensVenda);
     }
     _vendaRepository.Atualizar(vendaAtual);
 }
 public void CriarVenda(Venda venda)
 {
     venda.Validar();
     venda.ItensVenda.ForEach(x => x.Validar());
     AssertionConcern.AssertArgumentEquals(venda.StatusVenda, StatusVendaEnum.Aberto, Erros.StatusOfDifferentSalesOpen);
     AplicaValidacoesPadrao(venda);
     var usuario = _usuarioRepository.ObterPorCodigo(venda.Usuario.UsuarioCodigo);
     venda.Usuario = usuario;
     venda.Cliente = null;
     venda.FormaPagamento = null;
     venda.CondicaoPagamento = null;
     _vendaRepository.Criar(venda);
 }