diff --git a/trunk/WEB-INF/classes/siprp/pagina/doGetListaTrabalhadoresPendentes.java b/trunk/WEB-INF/classes/siprp/pagina/doGetListaTrabalhadoresPendentes.java index 19916ebe..d6dfde6e 100644 --- a/trunk/WEB-INF/classes/siprp/pagina/doGetListaTrabalhadoresPendentes.java +++ b/trunk/WEB-INF/classes/siprp/pagina/doGetListaTrabalhadoresPendentes.java @@ -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; +// } }