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.
		
		
		
		
		
			
		
			
				
					
					
						
							416 lines
						
					
					
						
							12 KiB
						
					
					
				
			
		
		
	
	
							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 );
 | |
| 		}
 | |
| 	}
 | |
| }
 |