Calculo de Vencimento baseado em dia de fechamento (ex:.Cartão de crédito)
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.
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
Curtidas 0
Respostas
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:
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
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
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