public PendenciasCliente GerarPagamento(ParcelamentoPagamento parcelamentoPagamento) { parcelamentoPagamento.ValorPago += (parcelamentoPagamento.Saldo ?? 0); Pagamento pagamento = null; if (parcelamentoPagamento.IdPagamento != null) { pagamento = PagamentoRepositorio.Buscar((long)parcelamentoPagamento.IdPagamento); if (pagamento.ValorAberto - parcelamentoPagamento.ValorPago <= 0) { //pagamento.ValorAberto = 0; pagamento.Situacao = Dominio.Enumeradores.SituacaoVenda.Pago; pagamento.Data = DateTime.Now; } else { pagamento.ValorAberto = pagamento.ValorAberto - parcelamentoPagamento.ValorPago; pagamento.Situacao = Dominio.Enumeradores.SituacaoVenda.Pendente; } if (parcelamentoPagamento.TrocoSaldo ?? false) { parcelamentoPagamento.Saldo = parcelamentoPagamento.ValorPago - pagamento.ValorAberto; } AtualizaSaldoCliente(pagamento.IdCliente, parcelamentoPagamento.TrocoSaldo, parcelamentoPagamento.Saldo, pagamento); PagamentoRepositorio.Atualizar(pagamento); GerarParcelamentoPagamento(parcelamentoPagamento, pagamento); var result = Contexto.Salvar(); } else { pagamento = new Pagamento { Data = DateTime.Now, IdCliente = (long)parcelamentoPagamento.IdCliente }; var pendencias = ObterPendenciaCliente((long)parcelamentoPagamento.IdCliente); if (pendencias != null) { string troco = ""; var valorAntigo = pendencias.ValorTotal; pagamento.ValorTotal = pendencias.ValorTotal + pendencias.TorneiosCliente.Sum(d => d.ValorPago ?? 0); if ((valorAntigo - parcelamentoPagamento.ValorPago) <= 0 || parcelamentoPagamento.TipoFinalizador == TipoFinalizador.Cortesia) { //pagamento.ValorAberto = 0; pagamento.Situacao = Dominio.Enumeradores.SituacaoVenda.Pago; if (parcelamentoPagamento.ValorPago > 0) { troco = (valorAntigo - parcelamentoPagamento.ValorPago).ToString("C2"); } } else { pagamento.ValorAberto = pendencias.ValorTotal - parcelamentoPagamento.ValorPago; pagamento.Situacao = Dominio.Enumeradores.SituacaoVenda.Pendente; } if (pendencias.TorneiosCliente.Sum(d => d.ValorPago) > 0) { foreach (var torneioCliente in pendencias.TorneiosCliente) { var parcela = new ParcelamentoPagamento(); parcela.DataPagamento = torneioCliente.DataAlteracao ?? torneioCliente.DataCadastro; parcela.Pagamento = pagamento; parcela.TipoFinalizador = TipoFinalizador.Dinheiro; parcela.ValorPago = torneioCliente.ValorPago ?? 0; ParcelamentoPagamentoRepositorio.Cadastrar(parcela); } } if (parcelamentoPagamento.ValorPago - valorAntigo > 0) { parcelamentoPagamento.Saldo = parcelamentoPagamento.ValorPago - valorAntigo; } AtualizaSaldoCliente(pagamento.IdCliente, parcelamentoPagamento.TrocoSaldo, parcelamentoPagamento.Saldo, pagamento); PagamentoRepositorio.Cadastrar(pagamento); GerarParcelamentoPagamento(parcelamentoPagamento, pagamento); AtualizaPendencias(pendencias, pagamento); Contexto.Salvar(); } } return(ObterPendenciaCliente((long)parcelamentoPagamento.IdCliente)); }