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.
SIPRP/trunk/siprp/ficha/FichaWindow.java

734 lines
20 KiB

/*
* FichaWindow.java
*
* Created on 29 de Março de 2004, 11:50
*/
package siprp.ficha;
import siprp.*;
import siprp.importer.*;
import java.awt.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import java.text.*;
import com.evolute.utils.data.*;
import com.evolute.utils.metadb.*;
import com.evolute.utils.tracker.*;
import com.evolute.utils.ui.*;
import com.evolute.utils.ui.panel.*;
import com.evolute.utils.ui.search.*;
import com.evolute.utils.ui.window.*;
/**
*
* @author fpalma
*/
public class FichaWindow extends TabbedWindow
implements ListAction
{
private UpperPanel upperPanel;
private EmpresaPanel empresaPanel;
private TrabalhadorPanel trabalhadorPanel;
private ObservacoesPanel observacoesPanel;
private ExamePanel examePanel;
private FichaDataProvider fdpProvider;
private Integer empresaID;
private Integer estabelecimentoID;
private Integer trabalhadorID;
private static int permissions[][] =
new int[][]{ { NEW_INDEX, CANCEL_INDEX, SAVE_INDEX } };
/** Creates a new instance of FichaWindow */
public FichaWindow()
throws Exception
{
super( new UpperPanel(), new String[]{ "Empresa/Trabalhador", "Exame" },
createPermissions( permissions ) );
setEditorManagerFactory( FichaAptidaoEditorManager.getEditorManagerFactory() );
upperPanel = (UpperPanel) getUpperPanel();
upperPanel.owner = this;
fdpProvider = ( FichaDataProvider ) FichaDataProvider.getProvider();
setupComponents();
}
private void setupComponents()
throws Exception
{
setSize( 700, 570 );
setResizable( false );
setTitle( "Ficha de Aptid\u00e3o" );
JPanel empresaTrabalhadorPanel = getTab( 0 );
JPanel exameRecomendacoesPanel = getTab( 1 );
GridBagLayout gridbag = new GridBagLayout();
empresaTrabalhadorPanel.setLayout( gridbag );
GridBagConstraints constraints = new GridBagConstraints();
constraints.insets = new Insets( 0, 1, 0, 1 );
constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 1;
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.gridheight = 1;
constraints.weighty = 0;
empresaPanel = new EmpresaPanel();
empresaPanel.setEnabled( false );
gridbag.setConstraints( empresaPanel, constraints );
empresaTrabalhadorPanel.add( empresaPanel );
constraints.weighty = 0;
trabalhadorPanel = new TrabalhadorPanel();
gridbag.setConstraints( trabalhadorPanel, constraints );
empresaTrabalhadorPanel.add( trabalhadorPanel );
constraints.weighty = 1;
observacoesPanel = new ObservacoesPanel();
gridbag.setConstraints( observacoesPanel, constraints );
empresaTrabalhadorPanel.add( observacoesPanel );
gridbag = new GridBagLayout();
exameRecomendacoesPanel.setLayout( gridbag );
constraints = new GridBagConstraints();
constraints.insets = new Insets( 0, 1, 0, 1 );
constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 1;
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.gridheight = 1;
constraints.weighty = 0;
constraints.weighty = 1;
examePanel = new ExamePanel();
gridbag.setConstraints( examePanel, constraints );
exameRecomendacoesPanel.add( examePanel );
registerAction( new ActionHandler(){
public void execute()
{
print();
}
public boolean activate( boolean newAction, boolean editAction,
boolean cancelAction, boolean saveAction,
boolean deleteAction, boolean selectAction )
{
return saveAction || editAction;
}
}, "Imprimir",
"Imprimir Ficha", "print",
0, true );
registerAction( new ActionHandler(){
public void execute()
{
printOld();
}
public boolean activate( boolean newAction, boolean editAction,
boolean cancelAction, boolean saveAction,
boolean deleteAction, boolean selectAction )
{
return saveAction || editAction;
}
}, "Imprimir Fichas Anteriores",
"Imprimir Fichas Anteriores", null,
0, false );
registerAction( new ActionHandler(){
public void execute()
{
deleteOld();
}
public boolean activate( boolean newAction, boolean editAction,
boolean cancelAction, boolean saveAction,
boolean deleteAction, boolean selectAction )
{
return saveAction || editAction;
}
}, "Apagar Fichas Anteriores",
"Apagar Fichas Anteriores", null,
0, false );
registerAction( new ActionHandler(){
public void execute()
{
excel();
}
public boolean activate( boolean newAction, boolean editAction,
boolean cancelAction, boolean saveAction,
boolean deleteAction, boolean selectAction )
{
return saveAction;
}
}, "Importar",
"Importar de Excel", "excel",
0, true );
}
public boolean save( int index )
{
new ProgressDialog( this, "A gravar...",
new Runnable(){
public void run()
{
}
});
StringBuffer msg = new StringBuffer();
MetaObject medico;
try
{
medico = (MetaObject)upperPanel.save();
}
catch( ValuesException vex )
{
msg.append( vex.getMessage() );
medico = null;
}
MetaObject estabelecimento;
try
{
estabelecimento = (MetaObject)empresaPanel.save();
}
catch( ValuesException vex )
{
msg.append( vex.getMessage() );
estabelecimento = null;
}
MetaObject trabalhador;
try
{
trabalhador = (MetaObject)trabalhadorPanel.save();
}
catch( ValuesException vex )
{
msg.append( vex.getMessage() );
trabalhador = null;
}
MetaObject exame;
try
{
exame = (MetaObject)examePanel.save();
}
catch( ValuesException vex )
{
msg.append( vex.getMessage() );
exame = null;
}
if( estabelecimento == null || trabalhador == null || exame == null || medico == null )
{
JOptionPane.showMessageDialog( this, msg.toString(), "Erro...", JOptionPane.ERROR_MESSAGE );
return false;
}
trabalhador.setProperty( FichaDataProvider.R_TRABALHADOR_ESTABELECIMENTO, estabelecimento );
trabalhador.setProperty( FichaDataProvider.OBSERVACOES, observacoesPanel.save() );
exame.setProperty( FichaDataProvider.R_EXAME_MEDICO, medico );
exame.setProperty( FichaDataProvider.R_EXAME_TRABALHADOR, trabalhador );
try
{
exame.save();
exame.setProperty( FichaDataProvider.PDF, createPDF( exame ) );
fdpProvider.savePDF( exame );
DBKey key = trabalhador.getPrimaryKeyValue();
DBField fields[] = FichaDataProvider.TRABALHADORES.getPrimaryKey();
trabalhadorID = new Integer( ((Number)key.getFieldValue( fields[ 0 ] )).intValue() );
try
{
siprp.data.Marcacao.saveMarcacaoExameForTrabalhadorID( trabalhadorID, (Date)exame.getProperty( FichaDataProvider.PROXIMO_EXAME ) );
}
catch( Exception iex )
{
iex.printStackTrace();
}
//
createPDF( exame );
print();
}
catch( Exception ex )
{
DialogException.showExceptionMessage( ex, "Erro a guardar", true );
return false;
}
return true;
}
public boolean newItem( int index )
{
fdpProvider.setSearch( FichaDataProvider.SEARCH_EMPRESAS );
SearchDialog search;
Integer oldID = empresaID;
// if( empresaID != null )
// {
// try
// {
// MetaObject empresa = fdpProvider.load( fdpProvider.EMPRESAS, new DBKey( empresaID ) );
// String designacao = (String) empresa.getProperty( fdpProvider.DESIGNACAO_SOCIAL );
// search = new SearchDialog( fdpProvider, null, true, new Object[]{ empresaID, designacao }, false );
// }
// catch( Exception ex )
// {
// search = new SearchDialog( fdpProvider, null, true, null, true );
// }
// }
// else
// {
// search = new SearchDialog( fdpProvider, null, true, null, true );
// }
search = new SearchDialog( fdpProvider, null, true, null, true );
empresaID = ( Integer )search.getSelected();
if( empresaID == null )
{
if( search.getIsNew() )
{
estabelecimentoID = null;
trabalhadorID = null;
clear( 0 );
return true;
}
else
{
return false;
}
}
fdpProvider.setSearch( FichaDataProvider.SEARCH_ESTABELECIMENTOS );
fdpProvider.setSearchID( FichaDataProvider.SEARCH_EMPRESAS, empresaID.intValue() );
// if( oldID != null && oldID.equals( empresaID ) && estabelecimentoID != null )
// {
// try
// {
// MetaObject estabelecimento = fdpProvider.load( fdpProvider.ESTABELECIMENTOS, new DBKey( estabelecimentoID ) );
// String nome = (String) estabelecimento.getProperty( fdpProvider.NOME );
// search = new SearchDialog( fdpProvider, null, true, new Object[]{ estabelecimentoID, nome }, false );
// }
// catch( Exception ex )
// {
// search = new SearchDialog( fdpProvider, null, true, null, true );
// }
// }
// else
// {
// search = new SearchDialog( fdpProvider, null, true, null, true );
// }
search = new SearchDialog( fdpProvider, null, true, null, true );
estabelecimentoID = ( Integer )search.getSelected();
if( estabelecimentoID == null )
{
if( search.getIsNew() )
{
trabalhadorID = null;
reload(0);
return true;
}
else
{
return false;
}
}
fdpProvider.setSearch( FichaDataProvider.SEARCH_TRABALHADORES );
fdpProvider.setSearchID( FichaDataProvider.SEARCH_ESTABELECIMENTOS, estabelecimentoID.intValue() );
search = new SearchDialog( fdpProvider, null, true, null, true );
trabalhadorID = ( Integer )search.getSelected();
if( trabalhadorID == null )
{
if( search.getIsNew() )
{
reload(0);
return true;
}
else
{
return false;
}
}
reload(0);
return true;
}
public boolean delete( int index )
{
return true;
}
public void deleteOld()
{
if( trabalhadorID == null )
{
return;
}
Vector linhas;
try
{
IDObject fichas[] = fdpProvider.getAllFichasForTrabalhador( trabalhadorID );
linhas = new Vector( Arrays.asList( fichas ) );
}
catch( Exception ex )
{
DialogException.showExceptionMessage( ex, "Erro a criar lista de Fichas anteriores", true );
return;
}
ListActionDialog dialog =
new ListActionDialog( this, "Apagar Fichas Anteriores", new String[]{ "Data" }, linhas,
new ListAction(){
public String getListActionName()
{
return "Apagar";
}
public boolean executeListAction( int line, Object value )
{
if( value == null )
{
return true;
}
try
{
delete( ( ( IDObject )value ).getID() );
}
catch( Exception ex )
{
DialogException.showExceptionMessage( ex, "Erro a Apagar Ficha", true );
return false;
}
return true;
}
} );
dialog.setSize( 250, 200 );
dialog.show();
}
public void reload( int index )
{
Integer upperData[] = new Integer[]{ empresaID, estabelecimentoID, trabalhadorID };
upperPanel.fill( upperData );
Object empresaData[] = new Object[]{ empresaID, estabelecimentoID };
empresaPanel.fill( empresaData );
trabalhadorPanel.fill( trabalhadorID );
observacoesPanel.fill( trabalhadorID );
examePanel.fill( trabalhadorID );
}
public void enableComponents( int index, boolean enable )
{
upperPanel.setEnabled( enable );
empresaPanel.setEnabled( enable );
trabalhadorPanel.setEnabled( enable );
observacoesPanel.setEnabled( enable );
examePanel.setEnabled( enable );
}
public void clear( int index )
{
upperPanel.clear();
empresaPanel.clear();
trabalhadorPanel.clear();
observacoesPanel.clear();
examePanel.clear();
}
public void print()
{
try
{
if( trabalhadorID == null )
{
System.out.println( "no trab" );
return;
}
Integer id = fdpProvider.getLastExameIDForTrabalhador( trabalhadorID );
if( id == null )
{
System.out.println( "no id" );
return;
}
print( id );
}
catch( Exception ex )
{
DialogException.showExceptionMessage( ex, "N\u00e3o foi poss\u00edvel imprimir", true );
}
}
private void print( Integer exameID )
throws Exception
{
MetaObject exame = fdpProvider.load( fdpProvider.EXAMES, new DBKey( exameID ) );
byte pdf[] = (byte []) exame.getProperty( fdpProvider.PDF );
if( exame == null )
{
throw new Exception( "N\u00e3o existe exame" );
}
ExamePDF ePDF = new ExamePDF();
ePDF.print( pdf );
}
public byte[] createPDF( MetaObject exame )
throws Exception
{
MetaObject medico = ( (MetaObject []) exame.getProperty( fdpProvider.R_EXAME_MEDICO ) )[0];
MetaObject trabalhador = ( (MetaObject []) exame.getProperty( fdpProvider.R_EXAME_TRABALHADOR ) )[0];
MetaObject estabelecimento = ( (MetaObject []) trabalhador.getProperty( fdpProvider.R_TRABALHADOR_ESTABELECIMENTO ) )[0];
MetaObject empresa = ( (MetaObject []) estabelecimento.getProperty( fdpProvider.R_ESTABELECIMENTO_EMPRESA ) )[0];
empresa.load( empresa.getPrimaryKeyValue() );
Hashtable ht = new Hashtable();
ht.put( "designacao_social", empresa.getProperty( fdpProvider.DESIGNACAO_SOCIAL ) );
ht.put( "estabelecimentos.nome", estabelecimento.getProperty( fdpProvider.NOME ) );
String aux = (String)estabelecimento.getProperty( fdpProvider.LOCALIDADE );
ht.put( "estabelecimentos.localidade", aux != null ? aux : "" );
Integer tipo = (Integer)empresa.getProperty( fdpProvider.SERVICO_SAUDE_TIPO );
switch( tipo.intValue() )
{
case 1:
ht.put( "servico_saude_tipo_interno", "" );
break;
case 2:
ht.put( "servico_saude_tipo_interempresas", "" );
break;
case 3:
ht.put( "servico_saude_tipo_externo", "" );
break;
case 4:
ht.put( "servico_saude_tipo_sns", "" );
break;
}
ht.put( "servico_saude_designacao", empresa.getProperty( fdpProvider.SERVICO_SAUDE_DESIGNACAO ) );
tipo = (Integer)empresa.getProperty( fdpProvider.SERVICO_HIGIENE_TIPO );
switch( tipo.intValue() )
{
case 1:
ht.put( "servico_higiene_tipo_interno", "" );
break;
case 2:
ht.put( "servico_higiene_tipo_interempresas", "" );
break;
case 3:
ht.put( "servico_higiene_tipo_externo", "" );
break;
case 4:
ht.put( "servico_higiene_outro", "" );
break;
}
ht.put( "servico_higiene_designacao", empresa.getProperty( fdpProvider.SERVICO_HIGIENE_DESIGNACAO ) );
ht.put( "trabalhadores.nome", trabalhador.getProperty( fdpProvider.NOME ) );
aux = (String)trabalhador.getProperty( fdpProvider.SEXO );
switch( aux.charAt( 0 ) )
{
case 'm':
ht.put( "sexo", "Masculino" );
break;
case 'f':
ht.put( "sexo", "Feminino" );
break;
}
DateFormat df = DateFormat.getDateInstance( DateFormat.SHORT );
Date data = ( Date )trabalhador.getProperty( fdpProvider.DATA_NASCIMENTO );
ht.put( "data_nascimento", data != null ? df.format( data ) : "" );
aux = (String)trabalhador.getProperty( fdpProvider.NACIONALIDADE );
ht.put( "nacionalidade", aux != null ? aux : "" );
aux = (String)trabalhador.getProperty( fdpProvider.NUMERO_MECANOGRAFICO );
ht.put( "numero_mecanografico", aux != null ? aux : "" );
data = ( Date )trabalhador.getProperty( fdpProvider.DATA_ADMISSAO );
ht.put( "data_admissao", data != null ? df.format( data ) : "" );
aux = (String)trabalhador.getProperty( fdpProvider.CATEGORIA );
ht.put( "categoria", aux != null ? aux : "" );
aux = (String)trabalhador.getProperty( fdpProvider.LOCAL_TRABALHO );
ht.put( "local_trabalho", aux != null ? aux : "" );
aux = (String)trabalhador.getProperty( fdpProvider.FUNCAO_PROPOSTA );
ht.put( "funcao_proposta", aux != null ? aux : "" );
data = ( Date )trabalhador.getProperty( fdpProvider.DATA_ADMISSAO_FUNCAO );
ht.put( "data_admissao_funcao", data != null ? df.format( data ) : "" );
aux = (String)trabalhador.getProperty( fdpProvider.OBSERVACOES );
ht.put( "observacoes", aux != null ? aux : "" );
data = ( Date )exame.getProperty( fdpProvider.DATA );
ht.put( "exames.data", data != null ? df.format( data ) : "" );
tipo = (Integer)exame.getProperty( fdpProvider.TIPO );
switch( tipo.intValue() )
{
case 1:
ht.put( "tipo_admissao", "" );
break;
case 2:
ht.put( "tipo_periodico", "" );
break;
case 3:
ht.put( "tipo_ocasional", "" );
tipo = (Integer)exame.getProperty( fdpProvider.OCASIONAL );
switch( tipo.intValue() )
{
case 1:
ht.put( "tipo_apos_doenca", "" );
break;
case 2:
ht.put( "tipo_apos_acidente", "" );
break;
case 3:
ht.put( "tipo_pedido_trabalhador", "" );
break;
case 4:
ht.put( "tipo_pedido_empresa", "" );
break;
case 5:
ht.put( "tipo_mudanca_funcao", "" );
break;
case 6:
ht.put( "tipo_trabalho", "" );
break;
case 10:
aux = (String)exame.getProperty( fdpProvider.OUTRO_TIPO );
ht.put( "tipo_outro", aux != null ? aux : "" );
break;
}
break;
// case 4:
// aux = (String)exame.getProperty( fdpProvider.OUTRO_TIPO );
// ht.put( "tipo_outro", aux != null ? aux : "" );
// break;
}
tipo = (Integer)exame.getProperty( fdpProvider.RESULTADO );
switch( tipo.intValue() )
{
case 1:
ht.put( "resultado_apto", "" );
break;
case 2:
ht.put( "resultado_apto_condicionalmente", "" );
break;
case 3:
ht.put( "resultado_inapto_temp", "" );
break;
case 4:
ht.put( "resultado_inapto_def", "" );
break;
}
aux = (String)exame.getProperty( fdpProvider.OUTRA_FUNCAO_1 );
ht.put( "outra_funcao_1", aux != null ? aux : "" );
aux = (String)exame.getProperty( fdpProvider.OUTRA_FUNCAO_2 );
ht.put( "outra_funcao_2", aux != null ? aux : "" );
aux = (String)exame.getProperty( fdpProvider.OUTRA_FUNCAO_3 );
ht.put( "outra_funcao_3", aux != null ? aux : "" );
aux = (String)exame.getProperty( fdpProvider.OUTRA_FUNCAO_4 );
ht.put( "outra_funcao_4", aux != null ? aux : "" );
aux = (String)exame.getProperty( fdpProvider.OUTRAS_RECOMENDACOES );
ht.put( "outras_recomendacoes", aux != null ? aux : "" );
data = ( Date )exame.getProperty( fdpProvider.PROXIMO_EXAME );
ht.put( "proximo_exame", data != null ? df.format( data ) : "n/d" );
aux = (String)medico.getProperty( fdpProvider.NOME );
ht.put( "medicos.nome", aux != null ? aux : "" );
aux = (String)medico.getProperty( fdpProvider.NUMERO_CEDULA );
ht.put( "numero_cedula", aux != null ? aux : "" );
ExamePDF ePDF = new ExamePDF();
return ePDF.createPDF( ht );
}
private void excel()
{
FileDialog fd = new FileDialog( this, "Escolha um ficheiro Excel:", FileDialog.LOAD );
fd.setDirectory( System.getProperty( "user.home" ) );
fd.setFilenameFilter( new FilenameFilter() {
public boolean accept( File dir, String name )
{
return (name!=null) && (name.indexOf( ".xls" ) != -1);
}
} );
fd.show();
//String filename = "c:\\test.xls";
String filename = fd.getFile();
if( filename != null )
{
filename = fd.getDirectory() + File.separator + filename;
try
{
Importer importer = new Importer( this, filename );
Hashtable hash = importer.getData();
if( hash != null )
{
trabalhadorPanel.setData( hash );
}
}
catch( Exception ex )
{
ex.printStackTrace();
JOptionPane.showMessageDialog( this, "Erro a importar", "Erro...", JOptionPane.ERROR_MESSAGE );
}
}
}
private void printOld()
{
if( trabalhadorID == null )
{
return;
}
Vector linhas;
try
{
IDObject fichas[] = fdpProvider.getAllFichasForTrabalhador( trabalhadorID );
linhas = new Vector( Arrays.asList( fichas ) );
}
catch( Exception ex )
{
DialogException.showExceptionMessage( ex, "Erro a criar lista de Fichas anteriores", true );
return;
}
ListActionDialog dialog = new ListActionDialog( this, "Imprimir Fichas Anteriores", new String[]{ "Data" },
linhas, this );
dialog.setSize( 250, 200 );
dialog.show();
}
public boolean executeListAction( int line, Object value )
{
if( value == null )
{
return true;
}
try
{
print( ( ( IDObject )value ).getID() );
}
catch( Exception ex )
{
DialogException.showExceptionMessage( ex, "Erro a imprimir Ficha", true );
return false;
}
return true;
}
public String getListActionName()
{
return "Imprimir";
}
private void delete( Integer exameID )
throws Exception
{
MetaObject exame = fdpProvider.load( fdpProvider.EXAMES, new DBKey( exameID ) );
if( exame == null )
{
throw new Exception( "N\u00e3o existe exame" );
}
if( JOptionPane.showConfirmDialog( this,
"Tem a certeza que quer apagar o exame de " + exame.getProperty( fdpProvider.DATA ) + "?",
"...", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null ) == 0 )
{
exame.setProperty( fdpProvider.INACTIVO, "y" );
exame.save();
}
}
}