forked from Coded/SIPRP
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
412 lines
13 KiB
412 lines
13 KiB
/*
|
|
* 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;
|
|
}
|
|
}
|