Galera seguinte, estou montando uma pequena listagem de Contas a Receber no meu sistema utilizando datatable do prime e preciso diferenciar as linhas que estão com o titulo em atraso. Mas nao estou conseguindo realizar o tratamento…
Alguem pode me ajudar:
Olhem como estou fazendo:
TELA:
[code]<p:dataTable value="#{contasReceberController.dmLreceber}" rowKey="#{obj.id}" selection="#{contasReceberController.contasReceber}"
id=“tb_receber”
var=“obj”
selectionMode=“single”
emptyMessage=“Nenhum registro encontrado!”
paginatorPosition=“bottom”
rowStyleClass="#{obj.dt_vencimento le usuarioLogadoController.dataDoDia(evt)? ‘vermelho’ : null }">
//coluns ...
</p:dataTable>[/code]
MB
[code]public Date dataDoDia(ActionEvent evt) {
Calendar c = Calendar.getInstance();
c.setTime(dt_hora_momento);
por questões de desempenho principalmente, o melhor acho que é consultar e colocar todas as informações que vc precisa nos itens da lista antes de imprimir o dataTable.
Então a lista que seu método dmLreceber retorna deve ser montada definindo em obj se ele está em atraso.
Você precisará alterar o obj para ter uma atributo ‘boolean atraso’
Poderia ser algo assim:
[code]
public List dmLreceber() {
if(lista == null) {
lista = dao.getContas();
verificaAtrasoLista();
}
}
public void verificaAtrasoLista() {
for(Conta conta : lista) {
if(conta.getDt_vencimento().after(Calendar.getInstance().getTime())) {
conta.setAtraso(true);
// ou, antes que o jakefrog (http://uaihebert.com/?p=4) reclame, poderia ser algo como
// conta.alteraParaAtraso();
}
}
}[/code]
[code] public DataModel getDmLreceber() {
if ((lreceber.isEmpty() && (!dao.findAll().isEmpty()))) {
listaContasReceberRecebidas(null);
}
calculaDiasAtraso();
return new ListDataModel(lreceber);
}
public void calculaDiasAtraso(){
Date dt_momento = Calendar.getInstance().getTime();
for(ContasReceber cr : lreceber){
if(cr.getDt_vencimento().before(dt_momento))
cr.setDias_atraso(((Double)FuncoesData.diferencaEmDias(cr.getDt_vencimento(), dt_momento)).intValue());
}
}[/code]
e peguei uma classe em um post aqui no forum para pegar a diferenca entre a datas, so nao lembro o link
assim:
[code] * Calcula a diferença de duas datas em dias
*
* Importante: Quando realiza a diferença em dias entre duas datas, este método considera as horas restantes e as converte em fração de dias.
* @param dataInicial
* @param dataFinal
* @return quantidade de dias existentes entre a dataInicial e dataFinal.
*/
public static double diferencaEmDias(Date dataInicial, Date dataFinal){
double result = 0;
long diferenca = dataFinal.getTime() - dataInicial.getTime();
double diferencaEmDias = (diferenca /1000) / 60 / 60 /24; //resultado é diferença entre as datas em dias
long horasRestantes = (diferenca /1000) / 60 / 60 %24; //calcula as horas restantes
result = diferencaEmDias + (horasRestantes /24d); //transforma as horas restantes em fração de dias
return result;
}[/code]
matou a pau =D, so estou com um problema agora em mostrar a data meu <f:converterDateTime> esta com um dia de atrazo.
Ja tentei N maneiras aqui e nao resolveu meu problema kkk
ja tentei GMT, ja tetei colocar uma função que devolve o getTimeZone defaut e nada… ja implementei algumas alterações no meu web.xml e nada… estou sem ideias
=\
A linha 3 ( listaContasReceberRecebidas(null); ) seta null na lista lreceber ? se sim, quando entrar ali depois vai dar NullPointerException no calculaDiasAtraso() na hora de fazer o for.
[quote=otOtavio]
matou a pau =D, so estou com um problema agora em mostrar a data meu <f:converterDateTime> esta com um dia de atrazo.
Ja tentei N maneiras aqui e nao resolveu meu problema kkk
ja tentei GMT, ja tetei colocar uma função que devolve o getTimeZone defaut e nada… ja implementei algumas alterações no meu web.xml e nada… estou sem ideias
=[/quote]
quer dizer que você já tentou com isto no seu web.xml ?
kkkkkk lancei um monte de registros aqui para testar uma coisa totalmente diferente e descobri que estava chamando o campo errado kkk
no dt vencimento estava puchando dt_documento… arrumei aqui já