public void AtualizarCompra(Compra compra)
 {
     compra.Validar();
     compra.ItensCompra.ForEach(x => x.Validar());
     AssertionConcern.AssertArgumentNotEquals(0, compra.CompraCodigo,
         string.Format(Erros.NotZeroParameter, "CompraCodigo"));
     var compraAtual = _compraRepository.ObterPorCodigoComItensCompra(compra.CompraCodigo);
     if (compra.StatusCompra == StatusCompraEnum.Aberto)
     {
         AplicaValidacoesPadrao(compra);
         AdicionaFornecedorFormaECondicaoDePagamento(compra, compraAtual);
         AtualizaItensCompra(compraAtual, compra.ItensCompra);
         compraAtual.StatusCompra = StatusCompraEnum.Confirmado;
         AdicionaContaPagarNaCompra(compraAtual);
         compraAtual.ContasPagar.ForEach(x => x.Validar());
         AdicionarNoEstoque(compra.ItensCompra, compra);
     }
     else
     {
         compraAtual.StatusCompra = StatusCompraEnum.Cancelado;
         RemoveContaPagarDaCompra(compraAtual);
         AtualizarDoEstoque(compraAtual.ItensCompra);
     }
     _compraRepository.Atualizar(compraAtual);
 }
 public void CriarCompra(Compra compra)
 {
     compra.Validar();
     compra.ItensCompra.ForEach(x => x.Validar());
     AssertionConcern.AssertArgumentEquals(compra.StatusCompra, StatusCompraEnum.Aberto, Erros.StatusOfDifferentPurchasingOpen);
     AplicaValidacoesPadrao(compra);
     var usuario = _usuarioRepository.ObterPorCodigo(compra.Usuario.UsuarioCodigo);
     compra.Usuario = usuario;
     compra.Fornecedor = null;
     compra.FormaPagamento = null;
     compra.CondicaoPagamento = null;
     _compraRepository.Criar(compra);
 }