public void MenuEmprestimo(Conta contaLogada, Tela tela, BaseDeDados baseDeDados) { int inputMenu = 0; #region Menu Empréstimo while (inputMenu == 0) { Console.Clear(); tela.ImprimirMensagem("Selecione a opção desejada: "); tela.ImprimirMensagem("1 - Solicitar Empréstimo"); tela.ImprimirMensagem("2 - Pagar Parcela do Empréstimo"); tela.ImprimirMensagem("3 - Cancelar operação"); try { inputMenu = Convert.ToInt32(Console.ReadLine()); } catch (Exception) { inputMenu = 0; } switch (inputMenu) { case 1: case 2: case 3: break; default: Console.Clear(); tela.ImprimirMensagem("Opção Inválida. Tente novamente."); Console.ReadKey(); Console.Clear(); break; } } #endregion #region Solicitar Empréstimo double valorMaxEmprestimo; double valorEmprestimo; if (inputMenu == 1) { Emprestimo svEmprestimo = new Emprestimo(); valorMaxEmprestimo = baseDeDados.getVlrDispEmprestimo(contaLogada); if (valorMaxEmprestimo == 0) { Console.Clear(); tela.ImprimirMensagem("Sem limite para empréstimo."); Console.ReadKey(); Console.Clear(); } else { Console.Clear(); tela.ImprimirMensagem(string.Concat("Valor disponível para empréstimo: ", valorMaxEmprestimo.ToString("C"))); tela.ImprimirMensagem("Taxa de juros: 5%"); tela.ImprimirMensagem("Por favor, insira uma quantia desejada em R$ (ou 0 para cancelar): "); valorEmprestimo = validador.ValidarInputMenu(tela, Console.ReadLine()); if (valorEmprestimo != 0) { #region RN: Valida se valor do empréstimo é permitido if (!svEmprestimo.VeririficaValorEmprestimo(valorEmprestimo, valorMaxEmprestimo)) { Console.Clear(); tela.ImprimirMensagem(string.Concat("O valor do empréstimo deve ser positivo e menor que ", valorMaxEmprestimo.ToString("C"), ". A transação será cancelada.")); Console.ReadKey(); Console.Clear(); } #endregion //Se valor é válido else { tela.ImprimirMensagem("\nPor favor, insira um prazo para o empréstimo (prazo máximo de 12 meses): "); int nrParcelas = validador.ValidarInputMenu(tela, Console.ReadLine()); if (nrParcelas > 0) { #region RN: Valida prazo do empréstimo if (!svEmprestimo.VeririficaPrazoEmprestimo(nrParcelas)) { Console.Clear(); tela.ImprimirMensagem(string.Concat("O prazo deve ser positivo de no máximo 12 meses. A transação será cancelada.")); Console.ReadKey(); Console.Clear(); } #endregion //Se prazo é válido else { Console.Clear(); if (validador.ValidarUsuario(tela, contaLogada, baseDeDados)) { string retornoEmprestimo = svEmprestimo.RealizarEmprestimo(tela, contaLogada, baseDeDados, valorEmprestimo, nrParcelas); Console.Clear(); tela.ImprimirMensagem(retornoEmprestimo); Console.ReadKey(); } else { Console.Clear(); tela.ImprimirMensagem("Senha Inválida. Sua transação não poderá ser efetivada."); Console.ReadKey(); Console.Clear(); } } } } } } } #endregion #region Pagamento das Parcelas if (inputMenu == 2) { PagamentoParcelas svPagamentoParcelas = new PagamentoParcelas(); Transacao selecionada = null; int count = 1; int opcao; int opcaoEmprestimo = 0; //Busca lista de parcelas A PAGAR var emprestimo = baseDeDados.obterEmprestimo(contaLogada); while (opcaoEmprestimo == 0) { Console.Clear(); tela.ImprimirMensagem("Lista de empréstimos: "); int i = 1; foreach (var emp in emprestimo) { tela.ImprimirMensagem("Emprestimo " + i); tela.ImprimirMensagem("Data: " + emp.DataTransacao); tela.ImprimirMensagem("Valor: R$" + emp.VlrTotalEmprestimo); tela.ImprimirMensagem("-----------------------------------"); i++; } tela.ImprimirMensagem("Selecione um empréstimo (0 para cancelar): "); try { opcaoEmprestimo = int.Parse(Console.ReadLine()); if (opcaoEmprestimo == 0) { Console.Clear(); tela.ImprimirMensagem("Transação cancelada."); Console.ReadKey(); Console.Clear(); break; } try { selecionada = emprestimo[opcaoEmprestimo - 1]; Console.Clear(); } catch (Exception) { tela.ImprimirMensagem("Opção Inválida."); Console.ReadKey(); opcaoEmprestimo = 0; Console.Clear(); } } catch (Exception) { tela.ImprimirMensagem("Opção Inválida."); Console.ReadKey(); opcaoEmprestimo = 0; Console.Clear(); } } var listaParcelasAbertas = new List <Transacao>(); if (selecionada != null) { for (int i = 1; i <= selecionada.ParcelasRestantes; i++) { listaParcelasAbertas.Add(new Transacao { Valor = selecionada.Valor, NrParcela = selecionada.NrParcela, VlrTotalEmprestimo = selecionada.VlrTotalEmprestimo, NrTotalParcelas = selecionada.NrTotalParcelas, ProximaParcela = selecionada.ProximaParcela, DataTransacao = selecionada.DataTransacao, Taxa = selecionada.Taxa, ParcelasRestantes = selecionada.ParcelasRestantes, Id = selecionada.Id }); selecionada.ProximaParcela = selecionada.ProximaParcela.AddMonths(1); selecionada.NrParcela = selecionada.NrParcela + 1; } } //Verifica se existem parcelas de empréstimo if (listaParcelasAbertas.Any()) { int nrTotalParcelas = Convert.ToInt32(selecionada.NrTotalParcelas); #region Lista de parcelas Console.Clear(); tela.ImprimirMensagem("Empréstimo realizado em: " + selecionada.DataTransacao.ToShortDateString()); double valor = (double)selecionada.VlrTotalEmprestimo; tela.ImprimirMensagem("Valor Solicitado: " + valor.ToString("C")); valor = selecionada.Valor * (int)selecionada.NrTotalParcelas; tela.ImprimirMensagem("Valor Total: " + valor.ToString("C")); tela.ImprimirMensagem("Número de Parcelas: " + selecionada.NrTotalParcelas.ToString()); tela.ImprimirMensagem("Taxa de juros: " + selecionada.Taxa.ToString() + "%"); tela.ImprimirMensagem("Total das Parcelas Restantes: " + (selecionada.Valor * selecionada.ParcelasRestantes).ToString("C")); tela.ImprimirMensagem("\n--------------------------------------\n"); tela.ImprimirMensagem("Parcelas em aberto:"); foreach (var parcela in listaParcelasAbertas) { tela.ImprimirMensagem(String.Concat("Parcela ", parcela.NrParcela.ToString().PadLeft(2, '0'), "/", nrTotalParcelas.ToString().PadLeft(2, '0'), " - ", parcela.ProximaParcela.ToString("dd/MM/yyyy"), " - ", parcela.Valor.ToString("C"))); } tela.ImprimirMensagem(String.Concat("\nDeseja pagar a ", listaParcelasAbertas[0].NrParcela, "ª parcela?")); tela.ImprimirMensagem("1 - Sim"); tela.ImprimirMensagem("2 - Não"); opcao = validador.ValidarInputMenu(tela, Console.ReadLine()); #endregion switch (opcao) { case 0: Console.Clear(); tela.ImprimirMensagem("Transação cancelada."); Console.ReadKey(); Console.Clear(); break; case 1: Console.Clear(); if (validador.ValidarUsuario(tela, contaLogada, baseDeDados)) { string retornoPagamento = svPagamentoParcelas.RealizarPagamento(baseDeDados, contaLogada, listaParcelasAbertas.OrderBy(x => x.DataTransacao).First()); Console.Clear(); tela.ImprimirMensagem(retornoPagamento); Console.ReadKey(); } else { Console.Clear(); tela.ImprimirMensagem("Senha Inválida. Sua transação não poderá ser efetivada."); Console.ReadKey(); Console.Clear(); } break; case 2: Console.Clear(); tela.ImprimirMensagem("Operação cancelada."); Console.ReadKey(); Console.Clear(); break; default: Console.Clear(); tela.ImprimirMensagem("Opção inválida. Operação cancelada"); Console.ReadKey(); Console.Clear(); break; } } else { Console.Clear(); tela.ImprimirMensagem("Não foram encontradas parcelas referentes a um empréstimo."); Console.ReadKey(); Console.Clear(); } #endregion } }
public Boolean PagamentoParcela(Conta conta, double valorParcela, Transacao parcela, Operacao op) { Conta atual = obterConta(conta); string valorEmprestimo = (atual.ValorDisponivelEmprestimo + parcela.Valor).ToString().Replace(".", "").Replace(",", "."); string saldoConta = (atual.ValorDisponivel - valorParcela).ToString().Replace(".", "").Replace(",", "."); SqlCommand cmd = new SqlCommand(); SqlTransaction transaction; cmd.CommandType = CommandType.Text; cmd.Connection = con.conectar(); transaction = con.beginTransaction(); cmd.Transaction = transaction; try { string sqlUpdate = "UPDATE CONTA SET LIMITE = " + valorEmprestimo + ", SALDO = " + saldoConta + " WHERE COD_CONTA = " + conta.NumeroConta; string sqlInsert = "INSERT INTO EXTRATO(TIPO_MOVIMENTACAO, DATA_MOVIMENTACAO, VALOR, CONTA_ORIGEM, CONTA_DESTINO) " + "VALUES ('" + (Char)op + "', '" + DateTime.Now.ToString("dd/MM/yyyy") + "'," + valorParcela.ToString().Replace(".", "").Replace(",", ".") + "," + conta.NumeroConta + "," + conta.NumeroConta + ")"; string updateParcela; if (parcela.ParcelasRestantes == 1) { updateParcela = "UPDATE EMPRESTIMO SET NR_PARCELAS_RESTANTES = " + (parcela.ParcelasRestantes - 1) + ", PROXIMA_PARCELA = '', IS_ACTIVE = 'N' WHERE COD_CONTA = " + conta.NumeroConta + " AND IS_ACTIVE = 'S' AND ID_TRANSACAO = " + parcela.Id; } else { updateParcela = "UPDATE EMPRESTIMO SET NR_PARCELAS_RESTANTES = " + (parcela.ParcelasRestantes - 1) + ", PROXIMA_PARCELA = '" + parcela.ProximaParcela.AddMonths(1).ToShortDateString() + "' WHERE COD_CONTA = " + conta.NumeroConta + " AND IS_ACTIVE = 'S' AND ID_TRANSACAO = " + parcela.Id; } cmd.CommandText = updateParcela; cmd.ExecuteNonQuery(); cmd.CommandText = sqlInsert; cmd.ExecuteNonQuery(); cmd.CommandText = sqlUpdate; cmd.ExecuteNonQuery(); // Attempt to commit the transaction. transaction.Commit(); return(true); } catch (Exception ex) { try { transaction.Rollback(); return(false); } catch (Exception) { return(false); } finally { con.desconectar(); } } finally { con.desconectar(); } }