Calculo de Vencimento baseado em dia de fechamento (ex:.Cartão de crédito)

Visual Studio

Visual Studio Code

C#

11/12/2017

Boa tarde Pessoal,

Já pesquisei no fórum e em outros lugares da Web, mas não encontrei algo tão especifico...

gostaria de ajuda para elaborar o calculo para data de vencimento de faturas, baseando-se em um dia de fechamento, assim como funciona a rotina de cartões de crédito.

Na minha aplicação WindowsForm, eu possuo o cadastro de cartões, onde eu consigo informar o dia de fechamento e o dia de vencimento das faturas, a partir dessas informações precisava que no momento de lançar uma compra, o sistema calculasse a data de vencimento tomando como base a data de emissão.
Johnny

Johnny

Curtidas 0

Respostas

Johnny

Johnny

11/12/2017

Pessoal consegui resolver...

não sei se é a melhor forma de se fazer, pois sou iniciante em programação e estou aprendendo C# sozinho, mas segue abaixo o código caso alguém precise de algo um dia:

        private void cbCartao_DropDownClosed(object sender, EventArgs e)
        {
            try
            {
                //tabela Cartoes
                ConexaoFirebird.Conectar();
                FbCommand SQLCartoesData = new FbCommand("select " +
                                                       "ID_CARTAO, " +
                                                       "DIA_BOM, " +
                                                       "DIA_VENCIMENTO " +
                                                     "from " +
                                                       "TAB_CARTAO " +
                                                       " WHERE ID_CARTAO = " + cbCartao.SelectedValue.ToString(), connection: ConexaoFirebird.Conexao);

                //Variavel local para armazenar dados do select
                DataTable dtCartoesData = new DataTable();

                //Executa comando SQL
                dtCartoesData.Load(SQLCartoesData.ExecuteReader());

                FbDataReader dataCartao = SQLCartoesData.ExecuteReader();
                //enquanto leitor lê 

                int _dia_bom_cartao_mov = 0;
                int _dia_vencimento_cartao_mov = 0;

                while (dataCartao.Read())
                {
                   _dia_bom_cartao_mov = Convert.ToInt32((dataCartao["DIA_BOM"].ToString()));
                   _dia_vencimento_cartao_mov = Convert.ToInt32((dataCartao["DIA_VENCIMENTO"].ToString()));
                }

                _dataEmissaoCartao = dtEmissao.Value;
                DateTime _dataDiaBom = new DateTime(_dataEmissaoCartao.Year, _dataEmissaoCartao.Month, _dia_bom_cartao_mov);
                DateTime _mesVencimento = _dataEmissaoCartao.Date.AddMonths(1);
                DateTime _dataVencimentoAddMes = new DateTime(_mesVencimento.Year, _mesVencimento.Month, _dia_vencimento_cartao_mov);
                DateTime _dataVencimentoNaoAddMes = new DateTime(_dataEmissaoCartao.Year, _dataEmissaoCartao.Month, _dia_vencimento_cartao_mov);

            if (_dataEmissaoCartao.Date >= _dataDiaBom.Date && _dataVencimentoNaoAddMes.Date > _dataDiaBom.Date)
            {
                dtVencimento.Value = _dataVencimentoAddMes.Date;
            }

            else if (_dataEmissaoCartao.Date < _dataDiaBom.Date && _dataDiaBom.Date > _dataVencimentoNaoAddMes.Date)
            {
                dtVencimento.Value = _dataVencimentoAddMes.Date;
            }

            else if (_dataEmissaoCartao.Date >= _dataDiaBom.Date && _dataVencimentoNaoAddMes.Date < _dataDiaBom.Date)
            {
                dtVencimento.Value = _dataVencimentoAddMes.AddMonths(1).Date;
            }
            else if (_dataEmissaoCartao.Date < _dataDiaBom.Date && _dataVencimentoNaoAddMes.Date > _dataDiaBom.Date)
            {
                dtVencimento.Value = _dataVencimentoNaoAddMes.Date;
            }


            ConexaoFirebird.Desconectar();
            }
            catch
            {
       
            }


        }

GOSTEI 0
Nathália Hirth

Nathália Hirth

11/12/2017

Em Java me deparei com o mesmo problema e fiz esse método, onde passo a data de hoje, o dia do inicio do tipo de vencimento (que no meu caso tenho varios periodos), o dia final(fechamento) e o dia base que seria o dia do vencimento.

public static Date calculaProximoVenc(Date data, Integer diaInicio, Integer diaFim, Integer diaBase) {
Calendar calendarHoje = Calendar.getInstance();
calendarHoje.setTime(data);
Integer diaHoje = calendarHoje.get(Calendar.DAY_OF_MONTH);
Integer mesHoje = calendarHoje.get(Calendar.MONTH) + 1;
Integer anoHoje = calendarHoje.get(Calendar.YEAR);
Date dataVencimento;
Calendar calendarVencimento = Calendar.getInstance();
calendarVencimento.set(anoHoje, mesHoje - 1, diaBase);
if(((diaInicio > diaFim) && (diaHoje > diaFim))){
calendarVencimento.add(Calendar.MONTH, 1);
} else {
if(diaInicio < diaFim)
calendarVencimento.add(Calendar.MONTH, 1);
}
dataVencimento = calendarVencimento.getTime();
return dataVencimento;
}

Foi um ajuste técnico kkk
GOSTEI 0
POSTAR