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/medicina/processo/ProcessoPanel.java

416 lines
12 KiB

/*
* ProcessoPanel.java
*
* Created on March 21, 2007, 9:11 AM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package siprp.medicina.processo;
import com.evolute.utils.dataui.ControllableComponent;
import com.evolute.utils.images.ImageIconLoader;
import com.evolute.utils.ui.DialogException;
import info.clearthought.layout.TableLayout;
import info.clearthought.layout.TableLayoutConstraints;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Vector;
import javax.swing.*;
import siprp.ficha.FichaWindow;
import siprp.ficha.SaveExameListener;
import siprp.medicina.MedicinaConstants;
import siprp.medicina.MedicinaDataProvider;
import siprp.medicina.processo.data.TrabalhadoresProcessoData;
/**
*
* @author fpalma
*/
public class ProcessoPanel extends JPanel
implements ActionListener, ControllableComponent,
MedicinaConstants, ProcessoConstants, SaveExameListener
{
private static final String ECDS_ICON_PATH = "siprp/medicina/processo/icons/ecds.png";
private static final String CONSULTA_ICON_PATH = "siprp/medicina/processo/icons/consulta.png";
private static final String FICHA_APTIDAO_ICON_PATH = "siprp/medicina/processo/icons/fichaaptidao.png";
private static final String FECHAR_ICON_PATH = "siprp/medicina/processo/icons/lock.png";
private static final DateFormat D_F = DateFormat.getDateInstance( DateFormat.SHORT, new Locale( "pt", "PT" ) );
private JTextField estadoText;
private JTextField inicioText;
private JTextField fimText;
private JButton motivoButton;
private JButton novoECDButton;
private JButton novaConsultaButton;
private JButton emitirFAButton;
private JButton fecharButton;
protected JFrame owner;
private final Vector<ProcessoListener> PROCESSO_LISTENERS = new Vector<ProcessoListener>();
private ProcessoDataProvider provider;
private Integer trabalhadorID = null;
private TrabalhadoresProcessoData processo;
/** Creates a new instance of ProcessoPanel */
public ProcessoPanel( JFrame owner )
throws Exception
{
this.owner = owner;
provider = ProcessoDataProvider.getProvider();
setupComponents();
enableButtons();
}
private void setupComponents()
{
motivoButton = new JButton( "Motivo" );
motivoButton.addActionListener( this );
JLabel estadoLabel = new JLabel( "Estado" );
estadoText = new JTextField();
estadoText.setPreferredSize( new Dimension( 120, 20 ) );
estadoText.setEditable( false );
JLabel inicioLabel = new JLabel( "In\u00edcio" );
inicioText = new JTextField();
inicioText.setPreferredSize( new Dimension( 120, 20 ) );
inicioText.setEditable( false );
JLabel fimLabel = new JLabel( "Fim" );
fimText = new JTextField();
fimText.setPreferredSize( new Dimension( 120, 20 ) );
fimText.setEditable( false );
novoECDButton = new JButton( "Marcar ECDs" );
novoECDButton.setIcon( getIcon( ECDS_ICON_PATH ) );
novoECDButton.addActionListener( this );
novaConsultaButton = new JButton( "Marcar Consulta" );
novaConsultaButton.setIcon( getIcon( CONSULTA_ICON_PATH ) );
novaConsultaButton.addActionListener( this );
emitirFAButton = new JButton( "Ficha de Aptid\u00e3o" );
emitirFAButton.setIcon( getIcon( FICHA_APTIDAO_ICON_PATH ) );
emitirFAButton.addActionListener( this );
fecharButton = new JButton( "Fechar Processo" );
fecharButton.setIcon( getIcon( FECHAR_ICON_PATH ) );
fecharButton.addActionListener( this );
JPanel buttonPanel = new JPanel();
double cols[] =
new double[]{ TableLayout.MINIMUM, TableLayout.PREFERRED, TableLayout.FILL };
double rows[] =
new double[]{ TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.PREFERRED,
TableLayout.PREFERRED, TableLayout.FILL };
TableLayout tableLayout = new TableLayout( cols, rows );
setLayout( tableLayout );
add( motivoButton, new TableLayoutConstraints( 0, 0, 2, 0 ) );
add( estadoLabel, new TableLayoutConstraints( 0, 1 ) );
add( estadoText, new TableLayoutConstraints( 1, 1 ) );
add( inicioLabel, new TableLayoutConstraints( 0, 2 ) );
add( inicioText, new TableLayoutConstraints( 1, 2 ) );
add( fimLabel, new TableLayoutConstraints( 0, 3 ) );
add( fimText, new TableLayoutConstraints( 1, 3 ) );
add( buttonPanel, new TableLayoutConstraints( 2, 1, 2, 3 ) );
buttonPanel.setLayout( new GridLayout( 2, 2 ) );
buttonPanel.add( novoECDButton );
buttonPanel.add( novaConsultaButton );
buttonPanel.add( emitirFAButton );
buttonPanel.add( fecharButton );
}
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
if( source.equals( motivoButton ) )
{
escolherMotivo();
}
else if( source.equals( novoECDButton ) )
{
novoECD();
}
else if( source.equals( novaConsultaButton ) )
{
novaConsulta();
}
else if( source.equals( emitirFAButton ) )
{
emitirFA();
}
else if( source.equals( fecharButton ) )
{
fecharProcesso();
}
}
protected boolean gravarProcesso()
{
if( processo.get( TrabalhadoresProcessoData.ESTADO ) == null )
{
processo.set( TrabalhadoresProcessoData.ESTADO, PROCESSO_ABERTO_CODE );
processo.set( TrabalhadoresProcessoData.DATA_INICIO, new Date() );
}
try
{
provider.saveProcesso( processo );
return true;
}
catch( Exception ex )
{
DialogException.showExceptionMessage( ex, "Erro a gravar processo", true );
return false;
}
}
protected void escolherMotivo()
{
EscolherMotivoDialog dialog = new EscolherMotivoDialog( owner );
dialog.setVisible( true );
Integer motivo[] = dialog.getMotivo();
if( motivo != null && motivo[ 0 ] != null )
{
processo.set( TrabalhadoresProcessoData.MOTIVO, motivo[ 0 ] );
processo.set( TrabalhadoresProcessoData.SUB_MOTIVO, motivo[ 1 ] );
if( gravarProcesso() )
{
reload();
HashMap<Integer,Integer> ids = new HashMap<Integer,Integer>();
ids.put( ProcessoEvent.TIPO_PROCESSO, ( Integer ) processo.get( TrabalhadoresProcessoData.ID ) );
ProcessoEvent event = new ProcessoEvent( this, ProcessoEvent.ACCAO_ESCOLHER_MOTIVO, ids );
for( int n = 0; n < PROCESSO_LISTENERS.size(); n++ )
{
PROCESSO_LISTENERS.get( n ).processoStateChanged( event );
}
}
}
}
protected void novoECD()
{
}
protected void novaConsulta()
{
notifyListeners( ProcessoEvent.ACCAO_MARCAR_CONSULTA );
}
protected void emitirFA()
{
if( trabalhadorID != null )
{
try
{
FichaWindow.getWindow().editTrabalhador( trabalhadorID, this );
}
catch( Exception ex )
{
DialogException.showException( ex );
}
}
}
protected void fecharProcesso()
{
String options[] = new String[]{ "N\u00e3o", "Sim" };
int option = JOptionPane.showOptionDialog( owner,
"Tem a certeza que quer fechar o processo sem Ficha de Aptid\u00e3o?",
"Fechar", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE,
getIcon( FECHAR_ICON_PATH ), options, options[ 0 ] );
if( option == 1 )
{
processo.set( TrabalhadoresProcessoData.ESTADO, PROCESSO_FECHADO_CODE );
processo.set( TrabalhadoresProcessoData.DATA_FIM, new Date() );
if( gravarProcesso() )
{
enableButtons();
notifyListeners( ProcessoEvent.ACCAO_FECHAR );
reload();
}
}
}
public void clear()
{
processo = null;
estadoText.setText( "" );
inicioText.setText( "" );
fimText.setText( "" );
motivoButton.setText( "Motivo" );
enableButtons();
}
protected void enableButtons()
{
String estado = null;
Integer motivo = null;
boolean consultasPorRealizar = false;
boolean ecdsPorRealizar = false;
if( processo != null )
{
Integer id = ( Integer ) processo.get( TrabalhadoresProcessoData.ID );
estado = ( String ) processo.get( TrabalhadoresProcessoData.ESTADO );
motivo = ( Integer ) processo.get( TrabalhadoresProcessoData.MOTIVO );
try
{
if( id != null )
{
consultasPorRealizar = provider.getProcessoTemConsultasPorRealizar( id );
ecdsPorRealizar = provider.getProcessoTemECDsPorRealizar( id );
}
}
catch( Exception ex )
{
ex.printStackTrace();
}
}
// novoECDButton.setEnabled( processo != null && motivo != null );
novoECDButton.setEnabled( false );
novaConsultaButton.setEnabled( processo != null && motivo != null && !consultasPorRealizar );
emitirFAButton.setEnabled( processo != null && motivo != null );
fecharButton.setEnabled( processo != null && motivo != null && PROCESSO_ABERTO_CODE.equals( estado ) );
motivoButton.setEnabled( processo != null );
}
public void addProcessoListener( ProcessoListener listener )
{
PROCESSO_LISTENERS.add( listener );
}
public void removeProcessoListener( ProcessoListener listener )
{
PROCESSO_LISTENERS.remove( listener );
}
public Icon getIcon( String path )
{
try
{
return ImageIconLoader.loadImageIcon( getClass(), path );
}
catch( Exception ex )
{
ex.printStackTrace();
return null;
}
}
public Object save()
{
return null;
}
public void enableComponents( boolean enable )
{
}
public void fill( Object value )
{
clear();
if( trabalhadorID == null )
{
return;
}
if( value != null )
{
try
{
processo = provider.getProcessoByID( ( Integer ) value );
if( processo == null )
{
processo = new TrabalhadoresProcessoData();
processo.set( TrabalhadoresProcessoData.TRABALHADOR_ID, trabalhadorID );
}
}
catch( Exception ex )
{
DialogException.showExceptionMessage( ex, "Erro a carregar dados do processo", true );
}
}
reload();
}
public void reload()
{
enableButtons();
if( processo != null )
{
String estado = null;
Date dataInicio = ( Date ) processo.get( TrabalhadoresProcessoData.DATA_INICIO );
if( dataInicio != null )
{
inicioText.setText( D_F.format( dataInicio ) );
}
Date dataFim = ( Date ) processo.get( TrabalhadoresProcessoData.DATA_FIM );
if( dataFim != null )
{
fimText.setText( D_F.format( dataFim ) );
}
estado = ( String ) processo.get( TrabalhadoresProcessoData.ESTADO );
if( estado == null )
{
estadoText.setText( ProcessoDataProvider.PROCESSO_POR_ABRIR_DESCRIPTION );
}
else
{
estadoText.setText( ProcessoDataProvider.ESTADO_PROCESSO_BY_CODE.get( estado ) );
}
Integer motivo = ( Integer ) processo.get( TrabalhadoresProcessoData.MOTIVO );
Integer subMotivo = ( Integer ) processo.get( TrabalhadoresProcessoData.SUB_MOTIVO );
String motivoStr = "Motivo";
if( motivo != null )
{
motivoStr = MedicinaDataProvider.MOTIVOS_BY_ID.get( motivo );
if( subMotivo != null )
{
motivoStr += " > " + MedicinaDataProvider.SUB_MOTIVOS_BY_ID.get( subMotivo );
}
}
motivoButton.setText( motivoStr );
}
}
public void setTrabalhadorID( Integer trabalhadorID )
{
this.trabalhadorID = trabalhadorID;
}
public void exameSaved( Integer trabalhadorID, Integer exameID )
{
if( trabalhadorID.equals( this.trabalhadorID ) )
{
processo.set( TrabalhadoresProcessoData.ESTADO, PROCESSO_FECHADO_CODE );
processo.set( TrabalhadoresProcessoData.DATA_FIM, new Date() );
if( gravarProcesso() )
{
enableButtons();
notifyListeners( ProcessoEvent.ACCAO_EMITIR_FA );
reload();
}
System.out.println( "NOTIFIED EXAME: " + exameID );
}
}
protected void notifyListeners( int accao )
{
HashMap<Integer,Integer> ids = new HashMap<Integer,Integer>();
ids.put( ProcessoEvent.TIPO_PROCESSO, ( Integer ) processo.get( TrabalhadoresProcessoData.ID ) );
ProcessoEvent event = new ProcessoEvent( this, accao, ids );
for( int n = 0; n < PROCESSO_LISTENERS.size(); n++ )
{
PROCESSO_LISTENERS.get( n ).processoStateChanged( event );
}
}
}