Beispiel #1
0
        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
            }
        }
Beispiel #2
0
        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();
            }
        }