Olá, tenho uma comparação onde só trago onde há diferença de horários na entrada ou saída, porém tem alguns funcionários que não tem almoço, então a saída deles vem nulo. Esses funcionários preciso pegar o registro = ida_almoco .
Porém eu tenho o campo hora, e defino se ele é entrada/saída/ida_almoco, através de um flag_destino .
Sendo assim, preciso ter a seguinte opção, se o saidaTS for == nulo, então eu verifico se flag_destino == “ida_almoco”, se for tenho que fazer o saidaTS receber o hora do flag_destino ida_almoco.
Segue minha classe de comparação .
eu já tentei colocar essa opção dentro do if do saída… ja tentei depois…
mas não consigo trazer… =/ .
Algúem pode me ajudar… .por favor…
já estou a dias nisso …
=/ .
public List comparaTimeSheetBiometrico(Date dataIni, Date dataFim) throws ParseException {
listaTimeSheet = retornaConsultaTimeSheet(dataIni, dataFim);
listaBiometrico = retornaConsultaBiometrico(dataIni, dataFim);
int diferencaMin;
Date entTs, entBt, saiTs, saiBt, diferenca;
for (Biometrico bt : listaBiometrico) {
CompTimeSheetBiometrico comp = new CompTimeSheetBiometrico();
for (TimeSheetBio ts : listaTimeSheet) {
if (bt.getSigla().equals(ts.getSigla()) && bt.getData().equals(ts.getData())) {
comp.setSigla(bt.getSigla());
comp.setNome(ts.getNome());
comp.setN_apropriacao(ts.getN_apropriacao());
comp.setData(bt.getData());
if (ts.getFlag_destino().equals("entrada")) {
if (!converteData(ts.getHora()).equals(formataHora(bt.getMenor_horario()))) {
comp.setEntradaTS(ts.getHora());
comp.setEntradaBio(bt.getMenor_horario());
} else if (converteData(ts.getHora()).equals(formataHora(bt.getMenor_horario()))) {
comp.setEntradaTS(ts.getHora());
comp.setEntradaBio(bt.getMenor_horario());
}
} else if (ts.getFlag_destino().equals("saida")) {
if (!converteData(ts.getHora()).equals(formataHora(bt.getMaior_horario()))) {
comp.setSaidaTS(ts.getHora());
comp.setSaidaBio(bt.getMaior_horario());
} else if (converteData(ts.getHora()).equals(formataHora(bt.getMaior_horario()))) {
comp.setSaidaTS(ts.getHora());
comp.setSaidaBio(bt.getMaior_horario());
}
}
}
}
listComp.add(comp);
if (comp.getEntradaTS() == null && comp.getEntradaBio() == null && comp.getSaidaTS() == null && comp.getSaidaBio() == null) {
listComp.remove(comp);
}
if (comp.getEntradaTS() != null && comp.getEntradaBio() != null
&& comp.getSaidaTS() != null && comp.getSaidaBio() != null) {
if (converteData(comp.getEntradaTS()).equals(formataHora(comp.getEntradaBio()))
&& converteData(comp.getSaidaTS()).equals(formataHora(comp.getSaidaBio()))) {
listComp.remove(comp);
}
}
}
return listComp;
}
segue meus DAO completo.
public List retornaConsultaTimeSheet(Date dataIni, Date dataFim) {
Session sessao = HibernateUtil.getSession();
List<TimeSheetBio> tbCompTimeSheetBio = new ArrayList<TimeSheetBio>();
String SQL;
//Consulta em SQL Nativo
//retorna uma lista dos funcionarios que preencheram o Time-Sheet
SQL = "SELECT h.pessoa, f.nome, h.n_apropriacao, h.dt_dia as data, h.hora, h.flag_destino ";
SQL += "FROM horario_unico h, funcionario f ";
SQL += "WHERE to_date(h.dia||'/'||h.mes||'/'||h.ano, 'DD/MM/YYYY') BETWEEN :dataIni AND :dataFim ";
SQL += "AND(h.flag_destino='entrada' or h.flag_destino='saida' or h.flag_destino='ida_almoco') ";
SQL += "AND h.pessoa=lower(f.sigla) ";
SQL += "ORDER BY h.pessoa, h.dt_dia, h.flag_destino ";
try {
sessao.beginTransaction();
Query select = sessao.createSQLQuery(SQL);
select.setDate("dataIni", dataIni);
select.setDate("dataFim", dataFim);
List resultado = select.list();
for (Iterator it = resultado.iterator(); it.hasNext();) {
Object[] obj = (Object[]) it.next();
TimeSheetBio comp = new TimeSheetBio();
comp.setSigla(obj[0].toString());
comp.setNome(obj[1].toString());
comp.setN_apropriacao(Integer.parseInt(obj[2].toString()));
comp.setData(new SimpleDateFormat("yyyy-MM-dd").parse(obj[3].toString()));
if (obj[4] != null) {
comp.setHora(obj[4].toString());
} else {
comp.setHora(null);
}
comp.setFlag_destino(obj[5].toString());
tbCompTimeSheetBio.add(comp);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
sessao.close();
}
return tbCompTimeSheetBio;
}
public List retornaConsultaBiometrico(Date dataIni, Date dataFim) {
Session sessao = HibernateUtil.getSession();
List<Biometrico> TbBiometrico = new ArrayList<Biometrico>();
String SQL;
//Consulta em SQL Nativo
//retorna uma lista com o menor e o maior horario de cada funcionario no biometrico
SQL = "SELECT tb.sigla, tb.dia, min(horario) as menor_horario, max(horario) as maior_horario ";
SQL += "FROM tb_biometrico tb ";
SQL += "WHERE tb.dia between :dataIni AND :dataFim ";
SQL += "GROUP BY tb.sigla, tb.dia ";
SQL += "ORDER BY tb.sigla, tb.dia ";
try {
sessao.beginTransaction();
Query select = sessao.createSQLQuery(SQL);
select.setDate("dataIni", dataIni);
select.setDate("dataFim", dataFim);
List resultado = select.list();
for (Iterator it = resultado.iterator(); it.hasNext();) {
Object[] obj = (Object[]) it.next();
Biometrico bio = new Biometrico();
bio.setSigla(obj[0].toString());
bio.setData(new SimpleDateFormat("yyyy-MM-dd").parse(obj[1].toString()));
bio.setMenor_horario(new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(obj[2].toString()));
bio.setMaior_horario(new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(obj[3].toString()));
TbBiometrico.add(bio);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
sessao.close();
}
return TbBiometrico;
}
private String formataHora(Date hora) {
SimpleDateFormat formatoData = new SimpleDateFormat("HH:mm");
return formatoData.format(hora);
}
private String converteData(String dtData) {
SimpleDateFormat formatBra;
formatBra = new SimpleDateFormat("HH:mm");
Date newData;
try {
newData = formatBra.parse(dtData.toString());
return (formatBra.format(newData));
} catch (Exception e) {
return "Erro na conversão da data";
}
}