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);
 }
 private void RemoveContaReceberDaVenda(Venda venda)
 {
     var contasReceber = _contaReceberRepository.ObterListaPorCodigoVenda(venda.VendaCodigo);
     contasReceber.ForEach(x =>
     {
         _contaReceberRepository.Deletar(x);
     });
 }
 private void AdicionaClienteFormaECondicaoDePagamento(Venda venda, Venda vendaAtual)
 {
     AssertionConcern.AssertArgumentNotEquals(0, venda.Cliente.PessoaCodigo, Erros.ClientNotSet);
     AssertionConcern.AssertArgumentNotEquals(0, venda.FormaPagamento.FormaPagamentoCodigo,
         Erros.NotSetPayment);
     AssertionConcern.AssertArgumentNotEquals(0, venda.CondicaoPagamento.CondicaoPagamentoCodigo,
         Erros.PaymentConditionNotSet);
     var cliente = _pessoaRepository.ObterPorCodigo(venda.Cliente.PessoaCodigo);
     var formaPagamento = _formaPagamentoRepository.ObterPorCodigo(venda.FormaPagamento.FormaPagamentoCodigo);
     var condicaoPagamento =
         _condicaoPagamentoRepository.ObterPorCodigo(venda.CondicaoPagamento.CondicaoPagamentoCodigo);
     vendaAtual.Cliente = cliente;
     vendaAtual.FormaPagamento = formaPagamento;
     vendaAtual.CondicaoPagamento = condicaoPagamento;
 }
 private void AtualizaItensVenda(Venda vendaAtual, IEnumerable<ItemVenda> itensVenda)
 {
     var itensVendaAtual = vendaAtual.ItensVenda.ToList();
     itensVendaAtual.ForEach(x =>
     {
         _itemVendaRepository.Deletar(x);
     });
     vendaAtual.ItensVenda.Clear();
     itensVenda.ForEach(x =>
     {
         x.Venda = vendaAtual;
         var novoItem = _itemVendaRepository.Criar(x);
         vendaAtual.ItensVenda.Add(novoItem);
     });
 }
 private static void AplicaValidacoesPadrao(Venda venda)
 {
     AssertionConcern.AssertArgumentEquals(venda.ItensVenda.Sum(x => x.ValorBruto), venda.ValorTotalBruto,
             Erros.SumDoNotMatchTotalCrudeValue);
     AssertionConcern.AssertArgumentEquals(venda.ItensVenda.Sum(x => x.ValorDesconto),
         venda.ValorTotalDesconto,
         Erros.SumDoNotMatchTotalValueDiscount);
     AssertionConcern.AssertArgumentEquals(venda.ItensVenda.Sum(x => x.ValorLiquido), venda.ValorTotalLiquido,
         Erros.SumDoNotMatchTotalValueLiquid);
 }
 private static void AdicionaContaReceberNaVenda(Venda venda)
 {
     venda.ContasReceber = new List<ContaReceber>();
     for (var i = 0; i < venda.CondicaoPagamento.QuantidadeParcelas; i++)
     {
         venda.ContasReceber.Add(new ContaReceber
         {
             DataVencimento = DateTime.Now.AddDays(1).AddMonths(i),
             Recebido = false,
             StatusContaReceber = StatusContaReceberEnum.Aberto,
             ValorDocumento = venda.ValorTotalLiquido / venda.CondicaoPagamento.QuantidadeParcelas,
             Venda = venda
         });
     }
 }
 public void Deletar(Venda venda)
 {
     _context.Vendas.Remove(venda);
     _context.SaveChanges();
 }
 public void Criar(Venda venda)
 {
     _context.Vendas.Add(venda);
     _context.SaveChanges();
 }
 public void Atualizar(Venda venda)
 {
     _context.Entry(venda).State = System.Data.Entity.EntityState.Modified;
     _context.SaveChanges();
 }