no message

git-svn-id: https://svn.coded.pt/svn/SIPRP@533 bb69d46d-e84e-40c8-a05a-06db0d633741
0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z
Frederico Palma 20 years ago
parent 3ab4835e36
commit 175cfc70cb

@ -29,8 +29,8 @@ import com.evolute.utils.strings.*;
public class doGetListaTrabalhadoresPendentes
extends siprpServlet
{
private static final int TRES_MESES = 3 * 30 * 24 * 60 * 60 * 1000;
private static final int CATORZE_DIAS = 14 * 24 * 60 * 60 * 1000;
private static final long TRES_MESES = 3L * 30L * 24L * 60L * 60L * 1000L;
private static final long CATORZE_DIAS = 14L * 24L * 60L * 60L * 1000L;
protected static final int ESTADO_NAO_APLICAVEL = 0;
protected static final int ESTADO_PENDENTE = 1;
@ -289,12 +289,22 @@ public class doGetListaTrabalhadoresPendentes
+ " ORDER BY 6, 8, 3 DESC";
Virtual2DArray ocasionaisArray = executer.executeQuery( new Select( query ) );
query = "SELECT trabalhadores.id, trabalhadores.nome "
+ "FROM trabalhadores "
+ "WHERE estabelecimento_id = " + estabelecimentoId
+ " AND trabalhadores.inactivo <> 'y' AND data_demissao IS NULL;";
Virtual2DArray trabalhadoresArray = executer.executeQuery( new Select( query ) );
Hashtable marcacoesPorID = new Hashtable();
Hashtable ocasionaisPorID = new Hashtable();
Hashtable nomesPorID = new Hashtable();
for( int n = 0; n < trabalhadoresArray.columnLength(); n++ )
{
nomesPorID.put( trabalhadoresArray.get( n, 0 ), trabalhadoresArray.get( n, 1 ) );
}
preencherMarcacoes( array, nomesPorID, marcacoesPorID );
preencherMarcacoes( array, nomesPorID, ocasionaisPorID );
preencherMarcacoes( ocasionaisArray, nomesPorID, ocasionaisPorID );
Integer ids[] = ( Integer[] ) nomesPorID.keySet().toArray( new Integer[0] );
IDObject trabalhadores[] = new IDObject[ ids.length ];
@ -313,13 +323,30 @@ public class doGetListaTrabalhadoresPendentes
for( int n = 0; n < trabalhadores.length; n++ )
{
Object marcacoes[][] = ( Object[][] ) ( ( Vector )marcacoesPorID.get( trabalhadores[ n ].getID() ) ).toArray( new Object[ 0 ][] );
Object ocasionais[][] = ( Object[][] ) ( ( Vector )ocasionaisPorID.get( trabalhadores[ n ].getID() ) ).toArray( new Object[ 0 ][] );
Object marcacoes[][];
if( marcacoesPorID.containsKey( trabalhadores[ n ].getID() ) )
{
marcacoes = ( Object[][] ) ( ( Vector )marcacoesPorID.get( trabalhadores[ n ].getID() ) ).toArray( new Object[ 0 ][] );
}
else
{
marcacoes = new Object[0][];
}
Object ocasionais[][];
if( ocasionaisPorID.containsKey( trabalhadores[ n ].getID() ) )
{
ocasionais = ( Object[][] ) ( ( Vector )ocasionaisPorID.get( trabalhadores[ n ].getID() ) ).toArray( new Object[ 0 ][] );
}
else
{
ocasionais = new Object[ 0 ][];
}
Object agrupadas[][] = agruparMarcacoes( marcacoes, ocasionais );
acrescentarTrabalhador( empresaId, estabelecimentoId,
trabalhadores[ n ], null,
agrupadas, links, desc,
true, true );
perfilTemConsultas( trabalhadores[ n ].getID(), new Integer( empresaId ) ),
perfilTemExames( trabalhadores[ n ].getID(), new Integer( empresaId ) ) );
}
HashMap hmValues = new HashMap();
@ -384,14 +411,17 @@ public class doGetListaTrabalhadoresPendentes
nomesPorID.put( id, nome );
marcacoesPorID.put( id, new Vector() );
}
Object marcacao[] = new Object[]{ data, estado, motivo, tipo };
( ( Vector ) marcacoesPorID.get( id ) ).add( marcacao );
if( data != null )
{
Object marcacao[] = new Object[]{ data, estado, motivo, tipo };
( ( Vector ) marcacoesPorID.get( id ) ).add( marcacao );
}
}
}
protected Object[][] agruparMarcacoes( Object marcacoes[][], Object ocasionais[][] )
{
int tresMeses = TRES_MESES;
long tresMeses = TRES_MESES;
java.util.Date dataExame = null;
Integer estadoExame = null;
java.util.Date dataConsulta = null;
@ -428,7 +458,7 @@ public class doGetListaTrabalhadoresPendentes
dataExame = data;
estadoExame = estado;
}
else if( Math.abs( dataConsulta.getTime() - data.getTime() ) < tresMeses )
else if( dataConsulta != null && Math.abs( dataConsulta.getTime() - data.getTime() ) < tresMeses )
{
dataExame = data;
estadoExame = estado;
@ -472,9 +502,9 @@ public class doGetListaTrabalhadoresPendentes
for( int n = 0; n < ocasionais.length; n++ )
{
grupo = new Object[ 5 ];
for( int i = 0; i < ocasionais[ n ].length; i++ )
for( int i = 0; i < 3; i++ )
{
grupo[ i ] = ocasionais[ i ];
grupo[ i ] = ocasionais[ n ][ i ];
}
grupos.add( grupo );
}
@ -501,6 +531,7 @@ public class doGetListaTrabalhadoresPendentes
{
int estado[] = new int[ 2 ];
int index = 0;
boolean pendente = false;
if( marcacoes.length == 0 )
{
estado[ 0 ] = perfilConsultas ? ESTADO_PENDENTE : ESTADO_NAO_APLICAVEL;
@ -524,7 +555,6 @@ public class doGetListaTrabalhadoresPendentes
if( ( temConsulta && consultaAntiga && temExame && exameAntigo ) ||
( temConsulta && consultaAntiga && !temExame && !exameAntigo ) ||
( !temConsulta && !consultaAntiga && temExame && exameAntigo ) )
{
break;
}
@ -533,12 +563,11 @@ public class doGetListaTrabalhadoresPendentes
{
index = 0;
}
else if( index < marcacoes.length - 1 )
{
index = 0;
}
boolean found = false;
for( ; !found && index < marcacoes.length; index++ )
// else if( index < marcacoes.length - 1 )
// {
// index = 0;
// }
for( ; index < marcacoes.length; index++ )
{
dataConsulta = ( java.util.Date ) marcacoes[ index ][ 0 ];
dataExame = ( java.util.Date ) marcacoes[ index ][ 3 ];
@ -548,7 +577,7 @@ public class doGetListaTrabalhadoresPendentes
long diffExame = temExame ? dataExame.getTime() - today.getTime() : 0;
if( ( temConsulta && diffConsulta < CATORZE_DIAS ) || ( temExame && diffExame < CATORZE_DIAS ) )
{
found = true;
break;
}
}
if( index >= marcacoes.length )
@ -564,9 +593,17 @@ public class doGetListaTrabalhadoresPendentes
Calendar calToday = Calendar.getInstance();
calToday.setTime( today );
calToday.add( Calendar.YEAR, -2 );
if( dataConsulta.before( calToday.getTime() ) )
if( ( dataConsulta != null && dataConsulta.before( calToday.getTime() ) )
|| ( dataConsulta == null && dataExame != null && dataExame.before( calToday.getTime() ) ) )
{
index++;
if( index > 0 )
{
index--;
}
else
{
pendente = true;
}
}
}
}
@ -577,7 +614,7 @@ public class doGetListaTrabalhadoresPendentes
Integer estadoExame = ( Integer ) marcacoes[ index ][ 4 ];
if( perfilConsultas )
{
if( dataConsulta == null )
if( dataConsulta == null || pendente )
{
estado[ 0 ] = ESTADO_PENDENTE;
}
@ -596,7 +633,7 @@ public class doGetListaTrabalhadoresPendentes
}
if( perfilExames )
{
if( dataExame == null )
if( dataExame == null || pendente )
{
if( motivoConsulta != null && motivoConsulta.intValue() != MOTIVO_OCASIONAL )
{
@ -621,16 +658,60 @@ public class doGetListaTrabalhadoresPendentes
estado[ 1 ] = ESTADO_NAO_APLICAVEL;
}
}
links.add( "/"+servletName+"/?"+empresaID+"/"+estabelecimentoID+"/"+trabalhador.getID() );
HashMap dadosTrabalhador = new HashMap();
dadosTrabalhador.put( "Nome", trabalhador.toString() );
dadosTrabalhador.put( "Consulta", CORES_ESTADOS.get( new Integer( estado[ 0 ] ) ) );
Object text = TEXTOS_ESTADOS.get( new Integer( estado[ 0 ] ) );
dadosTrabalhador.put( "Consulta_estado", text != null ? text : marcacoes[ index ][ 0 ] );
dadosTrabalhador.put( "Exame", CORES_ESTADOS.get( new Integer( estado[ 1 ] ) ) );
text = TEXTOS_ESTADOS.get( new Integer( estado[ 0 ] ) );
dadosTrabalhador.put( "Exame_estado", text != null ? text : marcacoes[ index ][ 3 ] );
dados.add( dadosTrabalhador );
if( estado[ 0 ] == 1 || estado[ 0 ] == 2 ||
estado[ 1 ] == 1 || estado[ 1 ] == 2 )
{
links.add( "/"+servletName+"/?"+empresaID+"/"+estabelecimentoID+"/"+trabalhador.getID() );
HashMap dadosTrabalhador = new HashMap();
dadosTrabalhador.put( "Nome", trabalhador.toString() );
dadosTrabalhador.put( "Consulta", CORES_ESTADOS.get( new Integer( estado[ 0 ] ) ) );
Object text = TEXTOS_ESTADOS.get( new Integer( estado[ 0 ] ) );
dadosTrabalhador.put( "Consulta_estado", text != null ? text : marcacoes[ index ][ 0 ] );
dadosTrabalhador.put( "Exame", CORES_ESTADOS.get( new Integer( estado[ 1 ] ) ) );
text = TEXTOS_ESTADOS.get( new Integer( estado[ 1 ] ) );
dadosTrabalhador.put( "Exame_estado", text != null ? text : marcacoes[ index ][ 3 ] );
dados.add( dadosTrabalhador );
}
}
protected boolean perfilTemConsultas( Integer trabalhadorID, Integer empresaID )
throws Exception
{
Executer executer = getExecuter();
String query = "SELECT a_consultas, b_consultas FROM empresas WHERE id = " + empresaID;
Virtual2DArray array = executer.executeQuery( new Select( query ) );
boolean consultas[] = new boolean[]{ "y".equals( array.get( 0, 0 ) ), "n".equals( array.get( 0, 0 ) ) };
query = "SELECT perfil FROM trabalhadores WHERE id = " + trabalhadorID;
array = executer.executeQuery( new Select( query ) );
Integer perfil = ( Integer )array.get( 0, 0 );
if( perfil != null )
{
return consultas[ perfil.intValue() - 1 ];
}
else
{
return false;
}
}
protected boolean perfilTemExames( Integer trabalhadorID, Integer empresaID )
throws Exception
{
Executer executer = getExecuter();
String query = "SELECT a_exames, b_exames FROM empresas WHERE id = " + empresaID;
Virtual2DArray array = executer.executeQuery( new Select( query ) );
boolean consultas[] = new boolean[]{ "y".equals( array.get( 0, 0 ) ), "n".equals( array.get( 0, 0 ) ) };
query = "SELECT perfil FROM trabalhadores WHERE id = " + trabalhadorID;
array = executer.executeQuery( new Select( query ) );
Integer perfil = ( Integer )array.get( 0, 0 );
if( perfil != null )
{
return consultas[ perfil.intValue() - 1 ];
}
else
{
return false;
}
}
// protected boolean verificarTrabalhador( Object consultas[][], Object exames[][] )
@ -665,134 +746,134 @@ public class doGetListaTrabalhadoresPendentes
// return !(estadoConsultas && estadoExames);
// }
protected HashMap criarDadosTrabalhador( Integer id, String nome,
Object consultas[][], Object exames[][] )
throws Exception
{
// dbQuery.append( "SELECT id, nome, ( ultima_consulta IS NOT NULL AND realizada = 'y' ),"
// + " ( ultimo_exame IS NOT NULL AND realizado = 'y' ),"
// + " proxima_consulta IS NOT NULL, proximo_exame IS NOT NULL, "
// + " ( proxima_consulta IS NOT NULL AND proxima_consulta - current_date <= 14 ), "
// + " ( proximo_exame IS NOT NULL AND proximo_exame - current_date <= 14 )"
// + " FROM trabalhadores "
// + " WHERE estabelecimento_id = '"+estabelecimentoId+"'"
// + " AND ( ultima_consulta IS NULL OR realizada = 'n' OR"
// + " ( proxima_consulta IS NOT NULL AND proxima_consulta - current_date <= 14 )"
// + " OR ( proximo_exame IS NOT NULL AND proximo_exame - current_date <= 14 ) )"
// + " ORDER BY nome" );
HashMap trabalhador = new HashMap();
trabalhador.put( "Nome", nome );
boolean uc = false;
boolean ue = false;
boolean pc = false;
boolean pe = false;
boolean quase_c = false;
boolean quase_e = false;
java.util.Date consultaAnterior = null;
java.util.Date exameAnterior = null;
if( consultas.length > 0 )
{
int anterior;
int proxima;
if( ( (java.util.Date) consultas[ 0 ][ 0 ] ).after( today ) )
{
proxima = 0;
if( consultas.length >= 2 )
{
anterior = 1;
}
else
{
anterior = -1;
}
}
else
{
proxima = -1;
anterior = 0;
}
long diff = proxima > -1 ? ( ( ( java.util.Date )consultas[ proxima ][ 0 ] ).getTime() - todayMillis ) / 86400000 : 15;
uc = anterior > -1 && "y".equals( consultas[ anterior ][ 1 ] );
if( uc )
{
consultaAnterior = ( java.util.Date ) consultas[ anterior ][ 0 ];
}
pc = proxima > -1;
quase_c = pc && diff <= 14;
}
if( exames.length > 0 )
{
int anterior;
int proximo;
if( ( (java.util.Date) exames[ 0 ][ 0 ] ).after( today ) )
{
proximo = 0;
if( exames.length >= 2 )
{
anterior = 1;
}
else
{
anterior = -1;
}
}
else
{
proximo = -1;
anterior = 0;
}
long diff = proximo > -1 ? ( ( ( java.util.Date )exames[ proximo ][ 0 ] ).getTime() - todayMillis ) / 86400000 : 15;
ue = anterior > -1 && "y".equals( exames[ anterior ][ 1 ] );
if( ue )
{
exameAnterior = ( java.util.Date ) exames[ anterior ][ 0 ];
}
pe = proximo > -1;
quase_e = pe && diff <= 14;
}
if( quase_c )
{
trabalhador.put( "Consulta", "yellow" );
trabalhador.put( "Consulta_estado", "pendente" );
}
else if( uc )
{
trabalhador.put( "Consulta", "green" );
trabalhador.put( "Consulta_estado", consultaAnterior );
}
else if( pc )
{
trabalhador.put( "Consulta", "yellow" );
trabalhador.put( "Consulta_estado", "pendente" );
}
else
{
trabalhador.put( "Consulta", "red" );
trabalhador.put( "Consulta_estado", "pendente" );
}
if( quase_e )
{
trabalhador.put( "Exame", "yellow" );
trabalhador.put( "Exame_estado", "pendente" );
}
else if( ue )
{
trabalhador.put( "Exame", "green" );
trabalhador.put( "Exame_estado", exameAnterior );
}
else if( pe )
{
trabalhador.put( "Exame", "yellow" );
trabalhador.put( "Exame_estado", "pendente" );
}
else
{
trabalhador.put( "Exame", "red" );
trabalhador.put( "Exame_estado", "pendente" );
}
return trabalhador;
}
// protected HashMap criarDadosTrabalhador( Integer id, String nome,
// Object consultas[][], Object exames[][] )
// throws Exception
// {
//// dbQuery.append( "SELECT id, nome, ( ultima_consulta IS NOT NULL AND realizada = 'y' ),"
//// + " ( ultimo_exame IS NOT NULL AND realizado = 'y' ),"
//// + " proxima_consulta IS NOT NULL, proximo_exame IS NOT NULL, "
//// + " ( proxima_consulta IS NOT NULL AND proxima_consulta - current_date <= 14 ), "
//// + " ( proximo_exame IS NOT NULL AND proximo_exame - current_date <= 14 )"
//// + " FROM trabalhadores "
//// + " WHERE estabelecimento_id = '"+estabelecimentoId+"'"
//// + " AND ( ultima_consulta IS NULL OR realizada = 'n' OR"
//// + " ( proxima_consulta IS NOT NULL AND proxima_consulta - current_date <= 14 )"
//// + " OR ( proximo_exame IS NOT NULL AND proximo_exame - current_date <= 14 ) )"
//// + " ORDER BY nome" );
// HashMap trabalhador = new HashMap();
// trabalhador.put( "Nome", nome );
// boolean uc = false;
// boolean ue = false;
// boolean pc = false;
// boolean pe = false;
// boolean quase_c = false;
// boolean quase_e = false;
// java.util.Date consultaAnterior = null;
// java.util.Date exameAnterior = null;
// if( consultas.length > 0 )
// {
// int anterior;
// int proxima;
// if( ( (java.util.Date) consultas[ 0 ][ 0 ] ).after( today ) )
// {
// proxima = 0;
// if( consultas.length >= 2 )
// {
// anterior = 1;
// }
// else
// {
// anterior = -1;
// }
// }
// else
// {
// proxima = -1;
// anterior = 0;
// }
// long diff = proxima > -1 ? ( ( ( java.util.Date )consultas[ proxima ][ 0 ] ).getTime() - todayMillis ) / 86400000 : 15;
// uc = anterior > -1 && "y".equals( consultas[ anterior ][ 1 ] );
// if( uc )
// {
// consultaAnterior = ( java.util.Date ) consultas[ anterior ][ 0 ];
// }
// pc = proxima > -1;
// quase_c = pc && diff <= 14;
// }
//
// if( exames.length > 0 )
// {
// int anterior;
// int proximo;
// if( ( (java.util.Date) exames[ 0 ][ 0 ] ).after( today ) )
// {
// proximo = 0;
// if( exames.length >= 2 )
// {
// anterior = 1;
// }
// else
// {
// anterior = -1;
// }
// }
// else
// {
// proximo = -1;
// anterior = 0;
// }
// long diff = proximo > -1 ? ( ( ( java.util.Date )exames[ proximo ][ 0 ] ).getTime() - todayMillis ) / 86400000 : 15;
// ue = anterior > -1 && "y".equals( exames[ anterior ][ 1 ] );
// if( ue )
// {
// exameAnterior = ( java.util.Date ) exames[ anterior ][ 0 ];
// }
// pe = proximo > -1;
// quase_e = pe && diff <= 14;
// }
//
// if( quase_c )
// {
// trabalhador.put( "Consulta", "yellow" );
// trabalhador.put( "Consulta_estado", "pendente" );
// }
// else if( uc )
// {
// trabalhador.put( "Consulta", "green" );
// trabalhador.put( "Consulta_estado", consultaAnterior );
// }
// else if( pc )
// {
// trabalhador.put( "Consulta", "yellow" );
// trabalhador.put( "Consulta_estado", "pendente" );
// }
// else
// {
// trabalhador.put( "Consulta", "red" );
// trabalhador.put( "Consulta_estado", "pendente" );
// }
//
// if( quase_e )
// {
// trabalhador.put( "Exame", "yellow" );
// trabalhador.put( "Exame_estado", "pendente" );
// }
// else if( ue )
// {
// trabalhador.put( "Exame", "green" );
// trabalhador.put( "Exame_estado", exameAnterior );
// }
// else if( pe )
// {
// trabalhador.put( "Exame", "yellow" );
// trabalhador.put( "Exame_estado", "pendente" );
// }
// else
// {
// trabalhador.put( "Exame", "red" );
// trabalhador.put( "Exame_estado", "pendente" );
// }
// return trabalhador;
// }
}

Loading…
Cancel
Save