diff --git a/trunk/WEB-INF/classes/siprp/pagina/GlobalConstants.java b/trunk/WEB-INF/classes/siprp/pagina/GlobalConstants.java index a21b8d38..51aa7377 100644 --- a/trunk/WEB-INF/classes/siprp/pagina/GlobalConstants.java +++ b/trunk/WEB-INF/classes/siprp/pagina/GlobalConstants.java @@ -28,4 +28,7 @@ public interface GlobalConstants public static final String bdLocalUrl = "jdbc:postgresql://" + bdHost + ":" + bdPort + "/siprp_local"; public static final String DEFAULT_EMAIL = "geral@siprp.pt"; + + public static final int TIPO_MARCACAO_EXAMES = 0; + public static final int TIPO_MARCACAO_CONSULTA = 1; } diff --git a/trunk/WEB-INF/classes/siprp/pagina/doGetListaEmpresas.java b/trunk/WEB-INF/classes/siprp/pagina/doGetListaEmpresas.java index 53b5a7e2..9b092a31 100644 --- a/trunk/WEB-INF/classes/siprp/pagina/doGetListaEmpresas.java +++ b/trunk/WEB-INF/classes/siprp/pagina/doGetListaEmpresas.java @@ -40,9 +40,9 @@ empresa_nome = ( String ) session.getAttribute( sessionCompanyName ); { empresa_nome = null; Class.forName(super.bdDriver); - con = DriverManager.getConnection( bdUrl, bdUsername, bdPassword ); + con = DriverManager.getConnection( bdLocalUrl, bdLocalUsername, bdLocalPassword ); dbQuery = new StringBuffer(); - dbQuery.append( "SELECT "+super.bdEmpresaIdRef+" , "+super.bdEmpresaNomeRef+" FROM empresas order by "+super.bdEmpresaNomeRef); + dbQuery.append( "SELECT id, designacao_social FROM empresas WHERE inactivo <> 'y' ORDER BY designacao_social" ); stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = new ResultSet2DArray( stmt.executeQuery( dbQuery.toString()) ); diff --git a/trunk/WEB-INF/classes/siprp/pagina/doGetListaEstabelecimentos.java b/trunk/WEB-INF/classes/siprp/pagina/doGetListaEstabelecimentos.java index d95395a7..e8243c51 100644 --- a/trunk/WEB-INF/classes/siprp/pagina/doGetListaEstabelecimentos.java +++ b/trunk/WEB-INF/classes/siprp/pagina/doGetListaEstabelecimentos.java @@ -33,9 +33,9 @@ public class doGetListaEstabelecimentos extends siprpServlet{ if ( userRole.equals ( super.superUserRole ) || userRole.equals ( empresaId ) ) { Class.forName(super.bdDriver); - con = DriverManager.getConnection( super.bdUrl, super.bdUsername, super.bdPassword ); + con = DriverManager.getConnection( bdLocalUrl, bdLocalUsername, bdLocalPassword ); dbQuery = new StringBuffer(); - dbQuery.append( " SELECT "+super.bdEstIdRef+" , "+super.bdEstNomeRef+" FROM estabelecimentos WHERE empresa_id = '"+empresaId+"' order by "+super.bdEstNomeRef); + dbQuery.append( " SELECT id, nome FROM estabelecimentos WHERE inactivo <> 'y' AND empresa_id = '"+empresaId+"' order by nome" ); stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = new ResultSet2DArray( stmt.executeQuery( dbQuery.toString()) ); diff --git a/trunk/WEB-INF/classes/siprp/pagina/doGetListaTrabalhadores.java b/trunk/WEB-INF/classes/siprp/pagina/doGetListaTrabalhadores.java index e9c818c4..25a0fc20 100644 --- a/trunk/WEB-INF/classes/siprp/pagina/doGetListaTrabalhadores.java +++ b/trunk/WEB-INF/classes/siprp/pagina/doGetListaTrabalhadores.java @@ -50,13 +50,13 @@ public class doGetListaTrabalhadores extends siprpServlet{ if ( userRole.equals ( super.superUserRole ) || userRole.equals ( empresaId ) ) { Class.forName(super.bdDriver); - con = DriverManager.getConnection( super.bdUrl, super.bdUsername, super.bdPassword ); + con = DriverManager.getConnection( bdLocalUrl, bdLocalUsername, bdLocalPassword ); if ( super.verificaEstabelecimento(con, empresaId, estabelecimentoId) ) // estabelecimento pertence à empresa ?? { //Class.forName(super.bdDriver); //con = DriverManager.getConnection( super.bdUrl, super.bdUsername, super.bdPassword ); dbQuery = new StringBuffer(); - dbQuery.append( " SELECT "+super.bdTrabIdRef+" , "+super.bdTrabNomeRef+" FROM trabalhadores WHERE estabelecimento_id = '"+estabelecimentoId+"' ORDER BY "+super.bdTrabNomeRef); + dbQuery.append( " SELECT id, nome FROM trabalhadores WHERE inactivo <> 'y' AND data_demissao IS NULL AND estabelecimento_id = '"+estabelecimentoId+"' ORDER BY nome" ); stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = new ResultSet2DArray( stmt.executeQuery( dbQuery.toString()) ); diff --git a/trunk/WEB-INF/classes/siprp/pagina/doGetListaTrabalhadoresPendentes.java b/trunk/WEB-INF/classes/siprp/pagina/doGetListaTrabalhadoresPendentes.java index 46eca5fb..8af7855e 100644 --- a/trunk/WEB-INF/classes/siprp/pagina/doGetListaTrabalhadoresPendentes.java +++ b/trunk/WEB-INF/classes/siprp/pagina/doGetListaTrabalhadoresPendentes.java @@ -23,7 +23,9 @@ import org.apache.velocity.app.*; public class doGetListaTrabalhadoresPendentes extends siprpServlet { - + protected java.util.Date today; + protected long todayMillis; + /** Creates a new instance of doGetListaTrabalhadores */ public doGetListaTrabalhadoresPendentes(HttpServletRequest req, HttpServletResponse res, boolean print) throws IOException { @@ -37,6 +39,9 @@ public class doGetListaTrabalhadoresPendentes Vector links = new Vector(); Vector desc = new Vector(); Vector descAdicional = new Vector(); + today = new java.util.Date(); + todayMillis = today.getTime(); + try { userRole = (String)session.getAttribute(super.sessionUserRole); @@ -46,89 +51,88 @@ public class doGetListaTrabalhadoresPendentes if ( userRole.equals ( super.superUserRole ) || userRole.equals ( empresaId ) ) { Class.forName(super.bdDriver); - con = DriverManager.getConnection( super.bdUrl, super.bdUsername, super.bdPassword ); + con = DriverManager.getConnection( bdLocalUrl, bdLocalUsername, bdLocalPassword ); if ( super.verificaEstabelecimento(con, empresaId, estabelecimentoId) ) // estabelecimento pertence à empresa ?? { //Class.forName(super.bdDriver); //con = DriverManager.getConnection( super.bdUrl, super.bdUsername, super.bdPassword ); dbQuery = new StringBuffer(); - 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" ); + dbQuery.append( "SELECT trabalhadores.id, trabalhadores.nome, " + + "marcacoes_trabalhador.tipo, marcacoes_trabalhador.data, marcacoes_trabalhador.realizada " + + "FROM trabalhadores LEFT JOIN marcacoes_trabalhador ON ( marcacoes_trabalhador.trabalhador_id = trabalhadores.id )" + + "WHERE estabelecimento_id = " + estabelecimentoId + + " AND trabalhadores.inactivo <> 'y' AND data_demissao IS NULL " + + "ORDER BY 2, 3, 4 DESC " ); +// 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" ); stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = new ResultSet2DArray( stmt.executeQuery( dbQuery.toString()) ); - + int index=0; int max = rs.columnLength(); - while ( index < max ) + Integer trabalhadorID = new Integer( -1 ); + String nomeTrabalhador = ""; + Vector consultas = new Vector(); + Vector exames = new Vector(); + + for ( index = 0; index <= max; index++ ) { - temp=""+rs.get(index,0); // converter de int para String - dbQuery = new StringBuffer(); - dbQuery.append("/"+super.servletName+"/?"+empresaId+"/"+estabelecimentoId+"/"+temp); // contruir url - links.add(dbQuery.toString()); - HashMap trabalhador = new HashMap(); - trabalhador.put( "Nome", (String)rs.get(index,1) ); - boolean uc = ( (Boolean)rs.get(index,2) ).booleanValue(); - boolean ue = ( (Boolean)rs.get(index,3) ).booleanValue(); - boolean pc = ( (Boolean)rs.get(index,4) ).booleanValue(); - boolean pe = ( (Boolean)rs.get(index,5) ).booleanValue(); - boolean quase_c = ( (Boolean)rs.get(index,6) ).booleanValue(); - boolean quase_e = ( (Boolean)rs.get(index,7) ).booleanValue(); - if( quase_c ) - { - trabalhador.put( "Consulta", "yellow" ); - trabalhador.put( "Consulta_estado", "marcado" ); - } - else if( uc ) - { - trabalhador.put( "Consulta", "green" ); - trabalhador.put( "Consulta_estado", "tratado" ); - } - else if( pc ) + Integer id = index < max ? ( Integer ) rs.get( index, 0 ) : new Integer( -1 ); + if( !id.equals( trabalhadorID ) ) { - trabalhador.put( "Consulta", "yellow" ); - trabalhador.put( "Consulta_estado", "marcado" ); + Object listaConsultas[][] = ( Object[][] ) consultas.toArray( new Object[consultas.size()][2] ); + Object listaExames[][] = ( Object[][] ) exames.toArray( new Object[exames.size()][2] ); + if( trabalhadorID.intValue() > -1 && + verificarTrabalhador( listaConsultas, listaExames ) ) + { + temp=""+rs.get(index - 1,0); // converter de int para String + dbQuery = new StringBuffer(); + dbQuery.append("/"+super.servletName+"/?"+empresaId+"/"+estabelecimentoId+"/"+temp); // contruir url + links.add(dbQuery.toString()); + desc.add( criarDadosTrabalhador( con, trabalhadorID, nomeTrabalhador, listaConsultas, listaExames ) ); + } + exames.clear(); + consultas.clear(); } - else + if( index == max ) { - trabalhador.put( "Consulta", "red" ); - trabalhador.put( "Consulta_estado", "pendente" ); + break; } - - if( quase_e ) + Integer tipo = ( Integer ) rs.get( index, 2 ); + + String nome = ( String ) rs.get( index, 1 ); + java.util.Date data = ( java.util.Date ) rs.get( index, 3 ); + String realizada = ( String ) rs.get( index, 4 ); + trabalhadorID = id; + nomeTrabalhador = nome; + Object marcacao[] = new Object[]{ data, realizada }; + if( tipo == null ) { - trabalhador.put( "Exame", "yellow" ); - trabalhador.put( "Exame_estado", "marcado" ); + continue; } - else if( ue ) + switch( tipo.intValue() ) { - trabalhador.put( "Exame", "green" ); - trabalhador.put( "Exame_estado", "tratado" ); + case TIPO_MARCACAO_EXAMES: + exames.add( marcacao ); + break; + + case TIPO_MARCACAO_CONSULTA: + consultas.add( marcacao ); + break; } - else if( pe ) - { - trabalhador.put( "Exame", "yellow" ); - trabalhador.put( "Exame_estado", "marcado" ); - } - else - { - trabalhador.put( "Exame", "red" ); - trabalhador.put( "Exame_estado", "pendente" ); - } - desc.add( trabalhador ); - ++index; } stmt.close(); - + sBuffer = new StringBuffer(); sBuffer.append(""+super.nomeEmpresa(con,empresaId)+"

" +super.nomeEstabelecimento(con, estabelecimentoId)+"" ); @@ -179,4 +183,156 @@ public class doGetListaTrabalhadoresPendentes } } + protected boolean verificarTrabalhador( Object consultas[][], Object exames[][] ) + { + boolean estadoConsultas = false; + boolean estadoExames = ( exames.length == 0 ) || ( ( java.util.Date )exames[ 0 ][ 0 ] ).before(today) || + ( ( ( ( java.util.Date )exames[ 0 ][ 0 ] ).getTime() - todayMillis ) / 86400000 > 14 ); + 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; + } + estadoConsultas = anterior >= 0 && "y".equals( consultas[ anterior ][ 1 ] ) && + ( proxima == -1 || ( ( ( java.util.Date )consultas[ proxima ][ 0 ] ).getTime() - todayMillis ) / 86400000 > 14 ); + } + return !(estadoConsultas && estadoExames); + } + + protected HashMap criarDadosTrabalhador( Connection con, 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; + 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 ] ); + 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 ] ); + pe = proximo > -1; + quase_e = pe && diff <= 14; + } + + if( quase_c ) + { + trabalhador.put( "Consulta", "yellow" ); + trabalhador.put( "Consulta_estado", "marcado" ); + } + else if( uc ) + { + trabalhador.put( "Consulta", "green" ); + trabalhador.put( "Consulta_estado", "tratado" ); + } + else if( pc ) + { + trabalhador.put( "Consulta", "yellow" ); + trabalhador.put( "Consulta_estado", "marcado" ); + } + else + { + trabalhador.put( "Consulta", "red" ); + trabalhador.put( "Consulta_estado", "pendente" ); + } + + if( quase_e ) + { + trabalhador.put( "Exame", "yellow" ); + trabalhador.put( "Exame_estado", "marcado" ); + } + else if( ue ) + { + trabalhador.put( "Exame", "green" ); + trabalhador.put( "Exame_estado", "tratado" ); + } + else if( pe ) + { + trabalhador.put( "Exame", "yellow" ); + trabalhador.put( "Exame_estado", "marcado" ); + } + else + { + trabalhador.put( "Exame", "red" ); + trabalhador.put( "Exame_estado", "pendente" ); + } + return trabalhador; + } } diff --git a/trunk/WEB-INF/classes/siprp/pagina/doGetListaTrabalhadoresTudo.java b/trunk/WEB-INF/classes/siprp/pagina/doGetListaTrabalhadoresTudo.java index 335cacf1..8e95b30a 100644 --- a/trunk/WEB-INF/classes/siprp/pagina/doGetListaTrabalhadoresTudo.java +++ b/trunk/WEB-INF/classes/siprp/pagina/doGetListaTrabalhadoresTudo.java @@ -6,24 +6,31 @@ package siprp.pagina; -import com.evolute.utils.arrays.*; -import com.evolute.utils.strings.*; import java.io.*; import java.util.*; import java.sql.*; import java.lang.reflect.Array; import javax.servlet.*; import javax.servlet.http.*; + import org.apache.velocity.*; import org.apache.velocity.app.*; + + +import com.evolute.utils.arrays.*; +import com.evolute.utils.sql.*; +import com.evolute.utils.strings.*; /** * * @author fpalma */ public class doGetListaTrabalhadoresTudo - extends siprpServlet + extends siprpServlet + implements GlobalConstants { - + protected java.util.Date today; + protected long todayMillis; + /** Creates a new instance of doGetListaTrabalhadores */ public doGetListaTrabalhadoresTudo(HttpServletRequest req, HttpServletResponse res, boolean print) throws IOException { @@ -37,6 +44,9 @@ public class doGetListaTrabalhadoresTudo Vector links = new Vector(); Vector desc = new Vector(); Vector descAdicional = new Vector(); + today = new java.util.Date(); + todayMillis = today.getTime(); + try { userRole = (String)session.getAttribute(super.sessionUserRole); @@ -46,40 +56,85 @@ public class doGetListaTrabalhadoresTudo if ( userRole.equals ( super.superUserRole ) || userRole.equals ( empresaId ) ) { Class.forName(super.bdDriver); - con = DriverManager.getConnection( super.bdUrl, super.bdUsername, super.bdPassword ); + con = DriverManager.getConnection( bdLocalUrl, bdLocalUsername, bdLocalPassword ); if ( super.verificaEstabelecimento(con, empresaId, estabelecimentoId) ) // estabelecimento pertence à empresa ?? { //Class.forName(super.bdDriver); //con = DriverManager.getConnection( super.bdUrl, super.bdUsername, super.bdPassword ); dbQuery = new StringBuffer(); - dbQuery.append( "SELECT id, nome, data_ficha FROM trabalhadores " - + "WHERE estabelecimento_id = '"+estabelecimentoId+"'" - + " AND ultima_consulta IS NOT NULL AND realizada = 'y' AND" - + " ( proxima_consulta IS NULL OR proxima_consulta - current_date > 14 )" - + " AND ( proximo_exame IS NULL OR proximo_exame - current_date > 14 )" - + " ORDER BY nome" ); +// dbQuery.append( "SELECT id, nome, data_ficha FROM trabalhadores " +// + "WHERE estabelecimento_id = '"+estabelecimentoId+"'" +// + " AND ultima_consulta IS NOT NULL AND realizada = 'y' AND" +// + " ( proxima_consulta IS NULL OR proxima_consulta - current_date > 14 )" +// + " AND ( proximo_exame IS NULL OR proximo_exame - current_date > 14 )" +// + " ORDER BY nome" ); + dbQuery.append( "SELECT trabalhadores.id, trabalhadores.nome, " + + "marcacoes_trabalhador.tipo, marcacoes_trabalhador.data, marcacoes_trabalhador.realizada " + + "FROM trabalhadores, marcacoes_trabalhador " + + "WHERE estabelecimento_id = " + estabelecimentoId + + " AND marcacoes_trabalhador.trabalhador_id = trabalhadores.id " + + " AND trabalhadores.inactivo <> 'y' AND data_demissao IS NULL " + + "ORDER BY 2, 3, 4 DESC " ); stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = new ResultSet2DArray( stmt.executeQuery( dbQuery.toString()) ); int index=0; int max = rs.columnLength(); - while ( index < max ) + Integer trabalhadorID = new Integer( -1 ); + String nomeTrabalhador = ""; + Vector consultas = new Vector(); + Vector exames = new Vector(); + + for ( index = 0; index <= max; index++ ) { - temp=""+rs.get(index,0); // converter de int para String - dbQuery = new StringBuffer(); - dbQuery.append("/"+super.servletName+"/?"+empresaId+"/"+estabelecimentoId+"/"+temp); // contruir url - links.add(dbQuery.toString()); - HashMap trabalhador = new HashMap(); - trabalhador.put( "Nome", (String)rs.get(index,1) ); - Object data_ficha = rs.get(index,2); - if( data_ficha == null ) + Integer id = index < max ? ( Integer ) rs.get( index, 0 ) : new Integer( -1 ); + if( !id.equals( trabalhadorID ) ) + { + Object listaConsultas[][] = ( Object[][] ) consultas.toArray( new Object[consultas.size()][2] ); + Object listaExames[][] = ( Object[][] ) exames.toArray( new Object[exames.size()][2] ); + if( trabalhadorID.intValue() > -1 && + verificarTrabalhador( listaConsultas, listaExames ) ) + { + temp=""+rs.get(index - 1,0); // converter de int para String + dbQuery = new StringBuffer(); + dbQuery.append("/"+super.servletName+"/?"+empresaId+"/"+estabelecimentoId+"/"+temp); // construir url + links.add(dbQuery.toString()); + java.util.Date dataUltimaConsulta = null; + for( int c = 0; c < listaConsultas.length; c++ ) + { + if( "y".equals( listaConsultas[ c ][ 1 ] ) ) + { + dataUltimaConsulta = ( java.util.Date ) listaConsultas[ c ][ 0 ]; + break; + } + } + desc.add( criarDadosTrabalhador( con, trabalhadorID, nomeTrabalhador, dataUltimaConsulta ) ); + } + exames.clear(); + consultas.clear(); + } + if( index == max ) + { + break; + } + Integer tipo = ( Integer ) rs.get( index, 2 ); + String nome = ( String ) rs.get( index, 1 ); + java.util.Date data = ( java.util.Date ) rs.get( index, 3 ); + String realizada = ( String ) rs.get( index, 4 ); + trabalhadorID = id; + nomeTrabalhador = nome; + Object marcacao[] = new Object[]{ data, realizada }; + switch( tipo.intValue() ) { - data_ficha = ""; + case TIPO_MARCACAO_EXAMES: + exames.add( marcacao ); + break; + + case TIPO_MARCACAO_CONSULTA: + consultas.add( marcacao ); + break; } - trabalhador.put( "Data", data_ficha ); - desc.add( trabalhador ); - ++index; } stmt.close(); @@ -132,6 +187,60 @@ public class doGetListaTrabalhadoresTudo out.println( mergeTemplate( super.msgGenericError , super.errorTemplate) ); } } - + + protected boolean verificarTrabalhador( Object consultas[][], Object exames[][] ) + { + boolean estadoConsultas = false; + boolean estadoExames = ( exames.length == 0 ) || ( ( java.util.Date )exames[ 0 ][ 0 ] ).before(today) || + ( ( ( ( java.util.Date )exames[ 0 ][ 0 ] ).getTime() - todayMillis ) / 86400000 > 14 ); + 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; + } + estadoConsultas = anterior >= 0 && "y".equals( consultas[ anterior ][ 1 ] ) && + ( proxima == -1 || ( ( ( java.util.Date )consultas[ proxima ][ 0 ] ).getTime() - todayMillis ) / 86400000 > 14 ); + } + return estadoConsultas && estadoExames; + } + + protected HashMap criarDadosTrabalhador( Connection con, Integer id, String nome, java.util.Date ultimaConsulta ) + throws Exception + { + HashMap trabalhador = new HashMap(); + trabalhador.put( "Nome", nome ); + Select select = + new Select( new String[]{ "exames" }, new String[]{ "data" }, + new Field( "trabalhador_id" ).isEqual( id ).and( + new Field( "data" ).isGreaterOrEqual( ultimaConsulta ) ), + new String[]{ "data" }, null ); + + Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); + ResultSet2DArray rs = new ResultSet2DArray( stmt.executeQuery( select.toString() ) ); + Object data_ficha = rs.columnLength() > 0 ? rs.get( 0, 0 ) : null; + stmt.close(); + if( data_ficha == null ) + { + data_ficha = ""; + } + trabalhador.put( "Data", data_ficha ); + return trabalhador; + } } diff --git a/trunk/WEB-INF/classes/siprp/pagina/doGetTrabalhador.java b/trunk/WEB-INF/classes/siprp/pagina/doGetTrabalhador.java index aece1d8f..19e27d4c 100644 --- a/trunk/WEB-INF/classes/siprp/pagina/doGetTrabalhador.java +++ b/trunk/WEB-INF/classes/siprp/pagina/doGetTrabalhador.java @@ -26,6 +26,7 @@ public class doGetTrabalhador extends siprpServlet HttpSession session = req.getSession(false); Vector names = new Vector(); Vector values = new Vector(); + java.util.Date today = new java.util.Date(); try { @@ -35,7 +36,7 @@ public class doGetTrabalhador extends siprpServlet trabalhadorId = (String)session.getAttribute(super.sessionTrabalhadorId); Class.forName(super.bdDriver); - con = DriverManager.getConnection( super.bdUrl, super.bdUsername, super.bdPassword ); + con = DriverManager.getConnection( bdLocalUrl, bdLocalUsername, bdLocalPassword ); if ( ( userRole.equals ( super.superUserRole ) || userRole.equals ( empresaId ) ) && super.verificaEstabelecimento(con, empresaId, estabelecimentoId) @@ -43,7 +44,8 @@ public class doGetTrabalhador extends siprpServlet { dbQuery = new StringBuffer(); - dbQuery.append( " SELECT * FROM trabalhadores where id='"+trabalhadorId+"'"); + dbQuery.append( " SELECT sexo, categoria, data_nascimento, nome, numero_mecanografico " + + "FROM trabalhadores where id='"+trabalhadorId+"'"); stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = new ResultSet2DArray( stmt.executeQuery( dbQuery.toString()) ); @@ -59,69 +61,192 @@ public class doGetTrabalhador extends siprpServlet hmFuncionario.put( "data_nascimento", rs.get( 0, "data_nascimento" ) ); hmFuncionario.put( "nome", rs.get( 0, "nome" ) ); hmFuncionario.put( "numero", rs.get( 0, "numero_mecanografico" ) ); - hmFuncionario.put( "ultimo_exame", rs.get( 0, "ultimo_exame" ) ); - hmFuncionario.put( "resultado", rs.get( 0, "resultado" ) ); - tmp = ( String ) rs.get( 0, "realizado" ); - if( tmp != null ) + stmt.close(); + + String query = "SELECT id, data, realizada, data_relatorio FROM marcacoes_trabalhador " + + "WHERE tipo = 0 and trabalhador_id = " + trabalhadorId + + " ORDER BY data DESC"; + stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); + rs = new ResultSet2DArray( stmt.executeQuery( query ) ); + if( rs.columnLength() > 0 ) { - if( tmp.equals( "n" ) ) + java.util.Date dataExame2 = ( java.util.Date ) rs.get( 0, 1 ); + String realizado2 = ( String ) rs.get( 0, 2 ); + java.util.Date dataExame1; + String realizado1; + if( rs.columnLength() > 1 ) { - hmFuncionario.put( "realizado", "não" ); + dataExame1 = ( java.util.Date ) rs.get( 1, 1 ); + realizado1 = ( String ) rs.get( 1, 2 ); } - else if( tmp.equals( "s" ) || tmp.equals( "y" ) ) + else { - hmFuncionario.put( "realizado", "sim" ); + dataExame1 = dataExame2; + realizado1 = realizado2; } + if( "y".equals( realizado2 ) || today.after( dataExame2 ) ) + { + hmFuncionario.put( "ultimo_exame", dataExame2 ); + if( realizado2.equals( "n" ) ) + { + realizado2 = "não"; + } + else if( realizado2.equals( "s" ) || realizado2.equals( "y" ) ) + { + realizado2 = "sim"; + } + hmFuncionario.put( "realizado", realizado2 ); + hmFuncionario.put( "proximo_exame", null ); + } + else + { + hmFuncionario.put( "proximo_exame", dataExame2 ); + if( !dataExame2.equals( dataExame1 ) ) + { + hmFuncionario.put( "ultimo_exame", dataExame1 ); + if( realizado1.equals( "n" ) ) + { + realizado1 = "não"; + } + else if( realizado1.equals( "s" ) || realizado1.equals( "y" ) ) + { + realizado1 = "sim"; + } + hmFuncionario.put( "realizado", realizado1 ); + } + else + { + hmFuncionario.put( "ultimo_exame", null ); + hmFuncionario.put( "realizado", null ); + } + } + } + else + { + hmFuncionario.put( "ultimo_exame", null ); + hmFuncionario.put( "realizado", null ); + hmFuncionario.put( "proximo_exame", null ); } - hmFuncionario.put( "proximo_exame", rs.get( 0, "proximo_exame" ) ); - hmFuncionario.put( "ultima_consulta", rs.get( 0, "ultima_consulta" ) ); - tmp = ( String ) rs.get( 0, "realizada" ); - if( tmp != null ) + stmt.close(); + + query = "SELECT MAX(id) FROM exames WHERE trabalhador_id = " + trabalhadorId + " AND inactivo <> 'y'"; + stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); + rs = new ResultSet2DArray( stmt.executeQuery( query ) ); + Integer fichaId = null; + if( rs.columnLength() > 0 ) { - if( tmp.equals( "n" ) ) + fichaId = ( Integer ) rs.get( 0, 0 ); + } + stmt.close(); + + if( fichaId != null ) + { + query = "SELECT data, resultado FROM exames WHERE id = " + fichaId; + stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); + rs = new ResultSet2DArray( stmt.executeQuery( query ) ); + Integer resultadoFicha = (Integer) rs.get( 0, 1 ); + stmt.close(); + if( resultadoFicha != null ) { - hmFuncionario.put( "realizada", "n\u00E3o" ); + switch( resultadoFicha.intValue() ) + { + case 1: + hmFuncionario.put( "resultado", "Apto" ); + break; + case 2: + hmFuncionario.put( "resultado", "Apto Condicionalmente" ); + break; + case 3: + hmFuncionario.put( "resultado", "Inapto Temporariamente" ); + break; + case 4: + hmFuncionario.put( "resultado", "Inapto Definitivamente" ); + break; + default: + hmFuncionario.put( "resultado", null ); + } } - else if( tmp.equals( "s" ) || tmp.equals( "y" ) ) + else { - hmFuncionario.put( "realizada", "sim" ); + hmFuncionario.put( "resultado", null ); } } - hmFuncionario.put( "proxima_consulta", rs.get( 0, "proxima_consulta" ) ); + else + { + hmFuncionario.put( "resultado", null ); + } + + query = "SELECT id, data, realizada FROM marcacoes_trabalhador " + + "WHERE tipo = 1 and trabalhador_id = " + trabalhadorId + + " ORDER BY data DESC"; + stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); + rs = new ResultSet2DArray( stmt.executeQuery( query ) ); + if( rs.columnLength() > 0 ) + { + java.util.Date dataConsulta2 = ( java.util.Date ) rs.get( 0, 1 ); + String realizada2 = ( String ) rs.get( 0, 2 ); + java.util.Date dataConsulta1; +// java.util.Date dataRelatorio1; +// java.util.Date dataRelatorio2 = (java.util.Date) rs.get( 0, 3 ); + String realizada1; + if( rs.columnLength() >= 2 ) + { + dataConsulta1 = ( java.util.Date ) rs.get( 1, 1 ); + realizada1 = ( String ) rs.get( 1, 2 ); +// dataRelatorio1 = (java.util.Date) rs.get( 1, 3 ); + } + else + { + dataConsulta1 = dataConsulta2; + realizada1 = realizada2; +// dataRelatorio1 = dataRelatorio2; + } + if( "y".equals( realizada2 ) || today.after( dataConsulta2 ) ) + { + hmFuncionario.put( "ultima_consulta", dataConsulta2 ); + if( realizada2.equals( "n" ) ) + { + realizada2 = "não"; + } + else if( realizada2.equals( "s" ) || realizada2.equals( "y" ) ) + { + realizada2 = "sim"; + } + hmFuncionario.put( "realizada", realizada2 ); + hmFuncionario.put( "proxima_consulta", null ); + } + else + { + hmFuncionario.put( "proxima_consulta", dataConsulta2 ); + if( !dataConsulta2.equals( dataConsulta1 ) ) + { + if( realizada1.equals( "n" ) ) + { + realizada1 = "não"; + } + else if( realizada1.equals( "s" ) || realizada1.equals( "y" ) ) + { + realizada1 = "sim"; + } + hmFuncionario.put( "realizada", realizada1 ); + hmFuncionario.put( "ultima_consulta", dataConsulta1 ); + } + else + { + hmFuncionario.put( "ultima_consulta", null ); + hmFuncionario.put( "realizada", null ); + } + } + } + else + { + hmFuncionario.put( "ultima_consulta", null ); + hmFuncionario.put( "realizada", null ); + hmFuncionario.put( "proxima_consulta", null ); + } + stmt.close(); } - // while ( index < max ) - // { - // dbQuery = new StringBuffer(); - // dbQuery.append( " SELECT "+super.trabalhadorDescFields[index][1]+" FROM trabalhadores where id='"+trabalhadorId+"'"); - // stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); - // rs = new ResultSet2DArray( stmt.executeQuery( dbQuery.toString()) ); - // names.add(trabalhadorDescFields[index][0]); - // - // if (rs.get(0,0) == null ) - // { - // values.add(super.bdNullString); - // } - // else - // { - //// values.add(rs.get(0,0).toString()); - // temp=rs.get(0,0).toString(); - // - // if ( temp.equals("n") ) - // { - // temp="n\u00E3o"; - // } - // else if ( temp.equals("y") ) - // { - // temp="sim"; - // } - // values.add(temp); } - // - // ++index; - // - // } - stmt.close(); - sBuffer = new StringBuffer(); sBuffer.append(""+super.nomeEmpresa(con,empresaId)+"

" +super.nomeEstabelecimento(con, estabelecimentoId)+"" ); diff --git a/trunk/WEB-INF/classes/siprp/pagina/siprpServlet.java b/trunk/WEB-INF/classes/siprp/pagina/siprpServlet.java index a95e44b0..c73c81f7 100644 --- a/trunk/WEB-INF/classes/siprp/pagina/siprpServlet.java +++ b/trunk/WEB-INF/classes/siprp/pagina/siprpServlet.java @@ -468,8 +468,9 @@ System.out.println( "query: " + queryString ); try { dbQuery = new StringBuffer(); - dbQuery.append( "SELECT "+bdEmailEmpresa+" FROM empresas WHERE "+bdEmpresaIdRef+" ='"+empresaId+"'"); - stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); + dbQuery.append( "SELECT email FROM empresas, contactos " + + "WHERE empresas.id ='"+empresaId+"' AND empresas.contacto_1 = contactos.id"); + stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = new ResultSet2DArray( stmt.executeQuery( dbQuery.toString()) ); if( rs.columnLength() > 0 ) { @@ -498,9 +499,9 @@ System.out.println( "query: " + queryString ); try { - dbQuery = new StringBuffer(); - dbQuery.append( "SELECT "+bdEmpresaNomeRef+" FROM empresas WHERE "+bdEmpresaIdRef+" ='"+empresaId+"'"); - stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); + dbQuery = new StringBuffer(); + dbQuery.append( "SELECT designacao_social FROM empresas WHERE id ='"+empresaId+"'"); + stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = new ResultSet2DArray( stmt.executeQuery( dbQuery.toString()) ); if( rs.columnLength() > 0 ) { @@ -513,7 +514,7 @@ System.out.println( "query: " + queryString ); return null; } } - catch ( Exception e ) + catch ( Exception e ) { e.printStackTrace(); } @@ -530,7 +531,7 @@ System.out.println( "query: " + queryString ); try { dbQuery = new StringBuffer(); - dbQuery.append( "SELECT "+bdEstNomeRef+" FROM estabelecimentos WHERE "+bdEstIdRef+" ='"+estabelecimentoId+"'"); + dbQuery.append( "SELECT nome FROM estabelecimentos WHERE id ='"+estabelecimentoId+"'"); stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = new ResultSet2DArray( stmt.executeQuery( dbQuery.toString()) ); if( rs.columnLength() > 0 ) @@ -561,7 +562,7 @@ System.out.println( "query: " + queryString ); try { dbQuery = new StringBuffer(); - dbQuery.append( "SELECT "+bdTrabNomeRef+" FROM trabalhadores where id='"+trabalhadorId+"'"); + dbQuery.append( "SELECT nome FROM trabalhadores where id='"+trabalhadorId+"'"); stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = new ResultSet2DArray( stmt.executeQuery( dbQuery.toString()) ); if( rs.columnLength() > 0 )