/* * FichaDataProvider.java * * Created on 30 de Março de 2004, 11:31 */ package siprp; import java.text.*; import java.util.*; import com.evolute.utils.*; import com.evolute.utils.arrays.*; import com.evolute.utils.data.*; import com.evolute.utils.db.*; import com.evolute.utils.db.keyretrievers.*; import com.evolute.utils.metadb.*; import com.evolute.utils.ui.search.*; import com.evolute.utils.sql.*; /** * * @author pars */ public class FichaDataProvider extends MetaProvider implements SearchExecuter { private static final Object LOCK = new Object(); private static FichaDataProvider instance = null; private final Executer executer; public static final String SIPRP = "SIPRP - Sociedade Ib\u00e9rica de Preven\u00e7\u00e3o de Riscos Profissionais"; // empresas public static final String T_EMPRESAS = "empresas"; public static final String ID = "id"; public static final String DESIGNACAO_SOCIAL = "designacao_social"; public static final String SERVICO_SAUDE_TIPO = "servico_saude_tipo"; public static final String SERVICO_SAUDE_DESIGNACAO = "servico_saude_designacao"; public static final String SERVICO_HIGIENE_TIPO = "servico_higiene_tipo"; public static final String SERVICO_HIGIENE_DESIGNACAO = "servico_higiene_designacao"; public static final String INACTIVO = "inactivo"; public static final DBTable EMPRESAS = new DBTable( T_EMPRESAS, new String[]{ DESIGNACAO_SOCIAL, SERVICO_SAUDE_TIPO, SERVICO_SAUDE_DESIGNACAO, SERVICO_HIGIENE_TIPO, SERVICO_HIGIENE_DESIGNACAO, INACTIVO }, ID ); // estabelecimentos public static final String T_ESTABELECIMENTOS = "estabelecimentos"; // ID public static final String NOME = "nome"; public static final String LOCALIDADE = "localidade"; public static final String EMPRESA_ID = "empresa_id"; // INACTIVO public static final DBTable ESTABELECIMENTOS = new DBTable( T_ESTABELECIMENTOS, new String[]{ NOME, LOCALIDADE, EMPRESA_ID, INACTIVO }, ID ); // trabalhadores public static final String T_TRABALHADORES = "trabalhadores"; // ID // public static final String NOME = "nome"; public static final String SEXO = "sexo"; public static final String DATA_NASCIMENTO = "data_nascimento"; public static final String NACIONALIDADE = "nacionalidade"; public static final String NUMERO_MECANOGRAFICO = "numero_mecanografico"; public static final String DATA_ADMISSAO = "data_admissao"; public static final String CATEGORIA = "categoria"; public static final String LOCAL_TRABALHO = "local_trabalho"; public static final String FUNCAO_PROPOSTA = "funcao_proposta"; public static final String DATA_ADMISSAO_FUNCAO = "data_admissao_funcao"; public static final String OBSERVACOES = "observacoes"; public static final String ESTABELECIMENTO_ID = "estabelecimento_id"; // INACTIVO public static final DBTable TRABALHADORES = new DBTable( T_TRABALHADORES, new String[]{ NOME, SEXO, DATA_NASCIMENTO, NACIONALIDADE, NUMERO_MECANOGRAFICO, DATA_ADMISSAO, CATEGORIA, LOCAL_TRABALHO, FUNCAO_PROPOSTA, DATA_ADMISSAO_FUNCAO, OBSERVACOES, ESTABELECIMENTO_ID, INACTIVO }, ID ); //medicos public static final String T_MEDICOS = "medicos"; public static final String NUMERO_CEDULA = "numero_cedula"; public static final DBTable MEDICOS = new DBTable( T_MEDICOS, new String[]{ NOME, NUMERO_CEDULA }, ID ); // exames public static final String T_EXAMES = "exames"; // ID public static final String DATA = "data"; public static final String TIPO = "tipo"; public static final String OCASIONAL = "ocasional"; public static final String OUTRO_TIPO = "outro_tipo"; public static final String RESULTADO = "resultado"; public static final String OUTRA_FUNCAO_1 = "outra_funcao_1"; public static final String OUTRA_FUNCAO_2 = "outra_funcao_2"; public static final String OUTRA_FUNCAO_3 = "outra_funcao_3"; public static final String OUTRA_FUNCAO_4 = "outra_funcao_4"; public static final String PROXIMO_EXAME = "proximo_exame"; public static final String OUTRAS_RECOMENDACOES = "outras_recomendacoes"; public static final String TRABALHADOR_ID = "trabalhador_id"; public static final String MEDICO_ID = "medico_id"; public static final String PDF = "pdf"; public static final DBTable EXAMES = new DBTable( T_EXAMES, new String[]{ DATA, TIPO, OCASIONAL, OUTRO_TIPO, RESULTADO, OUTRA_FUNCAO_1, OUTRA_FUNCAO_2, OUTRA_FUNCAO_3, OUTRA_FUNCAO_4, PROXIMO_EXAME, OUTRAS_RECOMENDACOES, TRABALHADOR_ID, MEDICO_ID, PDF }, ID ); public static DBReference R_ESTABELECIMENTO_EMPRESA = new DBReference( ESTABELECIMENTOS.getFieldByName( EMPRESA_ID ) ); public static DBReference R_TRABALHADOR_ESTABELECIMENTO = new DBReference( TRABALHADORES.getFieldByName( ESTABELECIMENTO_ID ) ); public static DBReference R_EXAME_TRABALHADOR = new DBReference( EXAMES.getFieldByName( TRABALHADOR_ID ) ); public static DBReference R_EXAME_MEDICO = new DBReference( EXAMES.getFieldByName( MEDICO_ID ) ); static { try { EXAMES.addRelation( MEDICOS, new DBField[]{ EXAMES.getFieldByName( MEDICO_ID ) }, "R_EXAMES_MEDICOS" ); EXAMES.addRelation( TRABALHADORES, new DBField[]{ EXAMES.getFieldByName( TRABALHADOR_ID ) }, "R_EXAMES_TRABALHADORES" ); TRABALHADORES.addRelation( ESTABELECIMENTOS, new DBField[]{ TRABALHADORES.getFieldByName( ESTABELECIMENTO_ID ) }, "R_TRABALHADORES_ESTABELECIMENTOS" ); ESTABELECIMENTOS.addRelation( EMPRESAS, new DBField[]{ ESTABELECIMENTOS.getFieldByName( EMPRESA_ID ) }, "R_ESTABELECIMENTOS_EMPRESAS" ); EMPRESAS.disableSave( INACTIVO ); ESTABELECIMENTOS.disableSave( INACTIVO ); TRABALHADORES.disableSave( INACTIVO ); EXAMES.disableSave( PDF ); } catch( Exception e ) { throw new RuntimeException( e ); } } public static final int SEARCH_EMPRESAS = 0; public static final int SEARCH_ESTABELECIMENTOS = 1; public static final int SEARCH_TRABALHADORES = 2; public static final int SEARCH_EXAMES = 3; private int SEARCH = 0; private int SEARCH_EMPRESAS_ID = -1; private int SEARCH_ESTABELECIMENTOS_ID = -1; private int SEARCH_TRABALHADORES_ID = -1; private int SEARCH_EXAMES_ID = -1; /** Creates a new instance of FichaDataProvider */ public FichaDataProvider() throws Exception { DBManager dbm = ( DBManager ) Singleton.getInstance( Singleton.DEFAULT_DBMANAGER /*SingletonConstants.DBMANAGER*/ ); executer = dbm.getSharedExecuter( this ); setDBTable( EXAMES ); } public static MetaProvider getProvider() throws Exception { synchronized( LOCK ) { if( instance == null ) { instance = new FichaDataProvider(); } } return instance; } public String[] getColumnNames() { return new String[]{ "Nome" }; } public String getSearchTitle() { switch( SEARCH ) { case SEARCH_EMPRESAS: return "Procurar empresa"; case SEARCH_ESTABELECIMENTOS: return "Procurar estabelecimento"; case SEARCH_TRABALHADORES: return "Procurar trabalhador"; case SEARCH_EXAMES: return "Procurar exame"; } return ""; } public boolean hasDetails() { return false; } public void setSearch( int what ) { switch( what ) { case SEARCH_EMPRESAS: case SEARCH_ESTABELECIMENTOS: case SEARCH_TRABALHADORES: case SEARCH_EXAMES: SEARCH = what; break; } } public void setSearchID( int what, int id ) { switch( what ) { case SEARCH_EMPRESAS: SEARCH_EMPRESAS_ID = id; break; case SEARCH_ESTABELECIMENTOS: SEARCH_ESTABELECIMENTOS_ID = id; break; case SEARCH_TRABALHADORES: SEARCH_TRABALHADORES_ID = id; break; case SEARCH_EXAMES: SEARCH_EXAMES_ID = id; break; } } public Virtual2DArray search( String pattern ) throws Exception { switch( SEARCH ) { case SEARCH_EMPRESAS: return searchEmpresas( pattern ); case SEARCH_ESTABELECIMENTOS: return searchEstabelecimentos( pattern ); case SEARCH_TRABALHADORES: return searchTrabalhadores( pattern ); case SEARCH_EXAMES: return searchExames( pattern ); } return null; } public Virtual2DArray searchEmpresas( String pattern ) throws Exception { Select select = new Select( "SELECT e.id, e.designacao_social FROM empresas e ORDER BY lower( e.designacao_social );" ); return executer.executeQuery( select ); } public Virtual2DArray searchEstabelecimentos( String pattern ) throws Exception { Select select = new Select( "SELECT e.id, e.nome FROM estabelecimentos e WHERE empresa_id = " + SEARCH_EMPRESAS_ID + " ORDER BY lower( e.nome )"); return executer.executeQuery( select ); } public Virtual2DArray searchTrabalhadores( String pattern ) throws Exception { Select select = new Select( "SELECT t.id, t.nome FROM trabalhadores t, estabelecimentos es " + " WHERE t.estabelecimento_id = es.id " + " AND es.empresa_id = " + SEARCH_EMPRESAS_ID + " ORDER BY lower(t.nome);" ); return executer.executeQuery( select ); } public Virtual2DArray searchExames( String pattern ) throws Exception { Select select = new Select( "SELECT e.id, e.data FROM exames e " + " WHERE e.trabalhador_id = " + SEARCH_TRABALHADORES_ID + " ORDER BY e.data DESC;" ); return executer.executeQuery( select ); } public void showDetails(SearchDialog dialog, Object o) throws Exception { } public Object [][]getAllMedicos() throws Exception { Select select = new Select( new String[]{ T_MEDICOS }, new String[]{ ID, NOME, NUMERO_CEDULA }, null, new String[]{ NOME }, null ); Virtual2DArray array = executer.executeQuery( select ); return array.getObjects(); } public void savePDF( MetaObject exame ) throws Exception { if( exame == null ) { return; } DBKey key = exame.getPrimaryKeyValue(); DBField fields[] = EXAMES.getPrimaryKey(); Integer id = new Integer( ((Number)key.getFieldValue( fields[ 0 ] )).intValue() ); if( id == null ) { throw new Exception( "Error saving pdf: id is null" ); } byte []pdf = (byte[]) exame.getProperty( PDF ); BlobUpdate bUpdate = new BlobUpdate( T_EXAMES, PDF, pdf, new Field( ID ).isEqual( id ) ); executer.executeQuery( bUpdate ); } public Integer getLastExameIDForTrabalhador( Integer trabalhadorID ) throws Exception { Select select = new Select( new String[]{ T_EXAMES }, new String[]{ ID, DATA }, new Field( TRABALHADOR_ID ).isEqual( trabalhadorID ), new String[]{ DATA + " DESC", ID + " DESC" }, null ); Virtual2DArray array = executer.executeQuery( select ); if( array.columnLength() == 0 ) { return null; } return new Integer( ( (Number) array.get( 0, 0 ) ).intValue() ); } public IDObject []getAllFichasForTrabalhador( Integer trabalhadorID ) throws Exception { Select select = new Select( new String[]{ T_EXAMES }, new String[]{ "MAX("+ID+")", DATA }, new Field( TRABALHADOR_ID ).isEqual( trabalhadorID ), new String[]{ DATA + " DESC" }, new String[]{ DATA } ); Virtual2DArray array = executer.executeQuery( select ); IDObject exames[] = new IDObject[ array.columnLength() ]; DateFormat df = DateFormat.getDateInstance( DateFormat.SHORT ); for( int n = 0; n < exames.length; n++ ) { Date date = (Date)array.get( n, 1 ); Integer id = new Integer( ((Number)array.get( n, 0 )).intValue() ); exames[ n ] = new MappableObject( id, date != null? df.format( date ): "" ); } return exames; } public IDObject []getAllEstabelecimentosForEmpresa( Integer empresaID ) throws Exception { Select select = new Select( new String[]{ T_ESTABELECIMENTOS }, new String[]{ ID, NOME }, new Field( EMPRESA_ID ).isEqual( empresaID ), new String[]{ "lower(" + NOME + ")" }, null ); Virtual2DArray array = executer.executeQuery( select ); IDObject objects[] = new IDObject[ array.columnLength() ]; for( int n = 0; n < objects.length; n++ ) { Integer id = new Integer( ((Number)array.get( n, 0 )).intValue() ); String desc = (String)array.get( n, 1 ); objects[ n ] = new MappableObject( id, desc ); } return objects; } public IDObject []getAllTrabalhadoresForEmpresa( Integer empresaID ) throws Exception { Select select = new Select( new String[]{ T_TRABALHADORES, T_ESTABELECIMENTOS }, new String[]{ T_TRABALHADORES + "." + ID, T_TRABALHADORES + "." + NOME }, new Field( T_ESTABELECIMENTOS + "." + EMPRESA_ID ).isEqual( empresaID ).and( new Field( T_TRABALHADORES + "." + ESTABELECIMENTO_ID ).isEqual( new Field( T_ESTABELECIMENTOS + "." + ID ) ) ), new String[]{ "lower(" + T_TRABALHADORES + "." + NOME + ")" }, null ); Virtual2DArray array = executer.executeQuery( select ); IDObject objects[] = new IDObject[ array.columnLength() ]; for( int n = 0; n < objects.length; n++ ) { Integer id = new Integer( ((Number)array.get( n, 0 )).intValue() ); String desc = (String)array.get( n, 1 ); objects[ n ] = new MappableObject( id, desc ); } return objects; } public IDObject []getAllTrabalhadoresForEstabelecimento( Integer estabelecimentoID ) throws Exception { Select select = new Select( new String[]{ T_TRABALHADORES }, new String[]{ ID, NOME }, new Field( ESTABELECIMENTO_ID ).isEqual( estabelecimentoID ), new String[]{ "lower(" + NOME + ")" }, null ); Virtual2DArray array = executer.executeQuery( select ); IDObject objects[] = new IDObject[ array.columnLength() ]; for( int n = 0; n < objects.length; n++ ) { Integer id = new Integer( ((Number)array.get( n, 0 )).intValue() ); String desc = (String)array.get( n, 1 ); objects[ n ] = new MappableObject( id, desc ); } return objects; } }