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/clientes/TrabalhadorPanel.java

613 lines
20 KiB

/*
* TrabalhadorPanel.java
*
* Created on 14 de Maio de 2004, 12:29
*/
package siprp.clientes;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
import com.evolute.utils.data.*;
import com.evolute.utils.dataui.*;
import com.evolute.utils.date.*;
import com.evolute.utils.metadb.*;
import com.evolute.utils.tables.*;
import com.evolute.utils.ui.*;
import com.evolute.utils.ui.calendar.*;
import com.evolute.utils.ui.panel.*;
import com.evolute.utils.ui.text.*;
import siprp.*;
import siprp.data.*;
import siprp.importer.*;
/**
*
* @author fpalma
*/
public class TrabalhadorPanel extends JPanel
implements ControllableComponent, ListSelectionListener, ActionListener
{
private FichaDataProvider provider;
private TrabalhadorData trabalhador;
private ComponentsHashtable components;
private EstabelecimentoData estabelecimento;
private JTable estabelecimentosTable;
private JPanel toolbarPanel;
private JPanel dadosTrabalhadorPanel;
private JTextField nomeText;
private RadioButtonFixedPanel sexoPanel;
private JCalendarPanel dataNascimentoPanel;
private JTextField nacionalidadeText;
private JTextField numeroMecanograficoText;
private JCalendarPanel dataAdmissaoPanel;
private JTextField categoriaText;
private JTextField localText;
private JTextField funcaoText;
private JCalendarPanel dataAdmissaoFuncaoPanel;
private JCalendarPanel dataDemissaoPanel;
private JTextField observacoesText;
//private JComboBox perfilCombo;
private RadioButtonFixedPanel perfilPanel;
private SIPRPTracker tracker;
private BaseTable trabalhadoresTable;
private VectorTableModel trabalhadoresModel;
private JButton marcacoesButton;
// private MarcacaoPanel examesPanel;
// private MarcacaoPanel consultaPanel;
private Vector listeners;
private boolean lastEnable = false;
/** Creates a new instance of TrabalhadorPanel */
public TrabalhadorPanel( JPanel toolbarPanel, JTable estabelecimentosTable )
throws Exception
{
this.toolbarPanel = toolbarPanel;
this.estabelecimentosTable = estabelecimentosTable;
provider = ( FichaDataProvider )FichaDataProvider.getProvider();
listeners = new Vector();
setupComponents();
setupComponentsHashtable();
}
private void setupComponents()
{
dadosTrabalhadorPanel = new JPanel();
// JPanel marcacoesPanel = new JPanel();
JLabel nomeLabel = new JLabel( "Nome" );
nomeText = new JTextField();
JLabel sexoLabel = new JLabel( "Sexo" );
sexoPanel =
new RadioButtonFixedPanel(
new IDObject[]{ new MappableObject( new Integer( 1 ), "M" ),
new MappableObject( new Integer( 2 ), "F" ) },
1, 2, RadioButtonPanel.ORIENTATION_HORIZONTAL, false );
JLabel dataNascimentoLabel = new JLabel( "Data de Nascimento" );
dataNascimentoPanel = new JCalendarPanel( null );
JLabel nacionalidadeLabel = new JLabel( "Nacionalidade" );
nacionalidadeText = new JTextField();
JLabel numeroMecanograficoLabel = new JLabel( "N\u00famero Mecanogr\u00e1fico/Outro" );
numeroMecanograficoText = new JTextField();
JLabel dataAdmissaoLabel = new JLabel( "Data de Admiss\u00e3o" );
dataAdmissaoPanel = new JCalendarPanel( null );
JLabel categoriaLabel = new JLabel( "Categoria Profissional" );
categoriaText = new JTextField();
JLabel localLabel = new JLabel( "Local de Trabalho" );
localText = new JTextField();
JLabel funcaoLabel = new JLabel( "Fun\u00e7\u00e3o Proposta" );
funcaoText = new JTextField();
JLabel dataAdmissaoFuncaoLabel = new JLabel( "Data de Admiss\u00e3o na Fun\u00e7\u00e3o" );
dataAdmissaoFuncaoPanel = new JCalendarPanel( null );
JLabel perfilLabel = new JLabel( "Perfil" );
// perfilCombo = new JComboBox();
// perfilCombo.addItem( new MappableObject( new Integer( 1 ), "A" ) );
// perfilCombo.addItem( new MappableObject( new Integer( 2 ), "B" ) );
perfilPanel = new RadioButtonFixedPanel(
new IDObject[]{ new MappableObject( new Integer( 1 ), "A" ),
new MappableObject( new Integer( 2 ), "B" ) },
1, 2, RadioButtonPanel.ORIENTATION_HORIZONTAL, false );
JLabel dataDemissaoLabel = new JLabel( "Data de Demiss\u00e3o" );
dataDemissaoPanel = new JCalendarPanel( null );
JLabel observacoesLabel = new JLabel( "Observa\u00e7\u00f5es" );
observacoesText = new JTextField();
marcacoesButton = new JButton( "Marca\u00e7\u00f5es" );
marcacoesButton.addActionListener( this );
JScrollPane trabalhadoresScroll = new JScrollPane();
trabalhadoresScroll.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
trabalhadoresScroll.setPreferredSize( new Dimension( 250, 300 ) );
trabalhadoresModel = new VectorTableModel( new String[]{ "Trabalhadores" } );
trabalhadoresTable = new BaseTable( trabalhadoresModel );
trabalhadoresTable.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
trabalhadoresTable.setNonResizableNorReordable();
trabalhadoresScroll.setViewportView( trabalhadoresTable );
JPanel pad;
GridBagLayout gridbag = new GridBagLayout();
dadosTrabalhadorPanel.setLayout( gridbag );
GridBagConstraints constraints = new GridBagConstraints();
constraints.insets = new Insets( 1, 1, 1, 1 );
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.weighty = 0;
constraints.gridheight = 1;
constraints.gridwidth = 1;
constraints.weightx = 0;
gridbag.setConstraints( nomeLabel, constraints );
dadosTrabalhadorPanel.add( nomeLabel );
constraints.weightx = 1;
constraints.gridwidth = 3;
gridbag.setConstraints( nomeText, constraints );
dadosTrabalhadorPanel.add( nomeText );
constraints.gridwidth = 1;
constraints.weightx = 0;
gridbag.setConstraints( sexoLabel, constraints );
dadosTrabalhadorPanel.add( sexoLabel );
constraints.weightx = 0;
//constraints.gridwidth = 1;
constraints.gridwidth = GridBagConstraints.REMAINDER;
JPanel sexoOuterPanel = new JPanel();
sexoOuterPanel.setLayout( new GridLayout( 1, 2 ) );
sexoOuterPanel.add( sexoPanel );
sexoOuterPanel.add( new JPanel() );
gridbag.setConstraints( sexoOuterPanel, constraints );
dadosTrabalhadorPanel.add( sexoOuterPanel );
constraints.weightx = 0;
constraints.gridwidth = 2;
gridbag.setConstraints( nacionalidadeLabel, constraints );
dadosTrabalhadorPanel.add( nacionalidadeLabel );
constraints.weightx = 0.5;
constraints.gridwidth = 1;
gridbag.setConstraints( nacionalidadeText, constraints );
dadosTrabalhadorPanel.add( nacionalidadeText );
constraints.weightx = 0;
constraints.gridwidth = 1;
gridbag.setConstraints( dataNascimentoLabel, constraints );
dadosTrabalhadorPanel.add( dataNascimentoLabel );
constraints.weightx = 0.5;
constraints.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints( dataNascimentoPanel, constraints );
dadosTrabalhadorPanel.add( dataNascimentoPanel );
constraints.weightx = 0;
constraints.gridwidth = 2;
gridbag.setConstraints( numeroMecanograficoLabel, constraints );
dadosTrabalhadorPanel.add( numeroMecanograficoLabel );
constraints.weightx = 0.5;
constraints.gridwidth = 1;
gridbag.setConstraints( numeroMecanograficoText, constraints );
dadosTrabalhadorPanel.add( numeroMecanograficoText );
constraints.weightx = 0;
constraints.gridwidth = 1;
gridbag.setConstraints( dataAdmissaoLabel, constraints );
dadosTrabalhadorPanel.add( dataAdmissaoLabel );
constraints.weightx = 0.5;
constraints.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints( dataAdmissaoPanel, constraints );
dadosTrabalhadorPanel.add( dataAdmissaoPanel );
constraints.weightx = 0;
constraints.gridwidth = 2;
gridbag.setConstraints( categoriaLabel, constraints );
dadosTrabalhadorPanel.add( categoriaLabel );
constraints.weightx = 0.5;
constraints.gridwidth = 1;
gridbag.setConstraints( categoriaText, constraints );
dadosTrabalhadorPanel.add( categoriaText );
constraints.weightx = 0;
gridbag.setConstraints( localLabel, constraints );
dadosTrabalhadorPanel.add( localLabel );
constraints.weightx = 0.5;
constraints.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints( localText, constraints );
dadosTrabalhadorPanel.add( localText );
constraints.weightx = 0;
constraints.gridwidth = 2;
gridbag.setConstraints( funcaoLabel, constraints );
dadosTrabalhadorPanel.add( funcaoLabel );
constraints.weightx = 0.5;
constraints.gridwidth = 1;
gridbag.setConstraints( funcaoText, constraints );
dadosTrabalhadorPanel.add( funcaoText );
constraints.weightx = 0;
constraints.gridwidth = 1;
gridbag.setConstraints( dataAdmissaoFuncaoLabel, constraints );
dadosTrabalhadorPanel.add( dataAdmissaoFuncaoLabel );
constraints.weightx = 0.5;
constraints.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints( dataAdmissaoFuncaoPanel, constraints );
dadosTrabalhadorPanel.add( dataAdmissaoFuncaoPanel );
constraints.weightx = 0;
constraints.gridwidth = 2;
gridbag.setConstraints( perfilLabel, constraints );
dadosTrabalhadorPanel.add( perfilLabel );
constraints.weightx = 0.5;
constraints.gridwidth = 1;
// gridbag.setConstraints( perfilCombo, constraints );
// dadosTrabalhadorPanel.add( perfilCombo );
gridbag.setConstraints( perfilPanel, constraints );
dadosTrabalhadorPanel.add( perfilPanel );
constraints.weightx = 0;
constraints.gridwidth = 1;
gridbag.setConstraints( dataDemissaoLabel, constraints );
dadosTrabalhadorPanel.add( dataDemissaoLabel );
constraints.weightx = 0.5;
constraints.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints( dataDemissaoPanel, constraints );
dadosTrabalhadorPanel.add( dataDemissaoPanel );
constraints.weightx = 0;
constraints.gridwidth = 1;
gridbag.setConstraints( observacoesLabel, constraints );
dadosTrabalhadorPanel.add( observacoesLabel );
constraints.weightx = 1;
constraints.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints( observacoesText, constraints );
dadosTrabalhadorPanel.add( observacoesText );
constraints.weightx = 1;
constraints.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints( marcacoesButton, constraints );
dadosTrabalhadorPanel.add( marcacoesButton );
// examesPanel = new MarcacaoPanel( false, "Realizados", "", Marcacao.TIPO_MARCACAO_TRABALHADOR_EXAMES );
// examesPanel.setCalendarDialogOrientation( JCalendarDialog.ABOVE, JCalendarDialog.RIGHT );
// examesPanel.setBorder( BorderFactory.createTitledBorder(
// BorderFactory.createEtchedBorder(),
// "Exames" ) );
// consultaPanel = new MarcacaoPanel( true, "Realizada", "Ficha de Aptid\u00e3o", Marcacao.TIPO_MARCACAO_TRABALHADOR_CONSULTA );
// consultaPanel.setCalendarDialogOrientation( JCalendarDialog.ABOVE, JCalendarDialog.LEFT );
// consultaPanel.setBorder( BorderFactory.createTitledBorder(
// BorderFactory.createEtchedBorder(),
// "Consulta" ) );
// //marcacoesPanel.setLayout( new BoxLayout( marcacoesPanel, BoxLayout.X_AXIS ) );
// marcacoesPanel.setLayout( new GridLayout( 1, 2 ) );
// marcacoesPanel.add( examesPanel );
// marcacoesPanel.add( consultaPanel );
JPanel leftPanel = new JPanel();
leftPanel.setLayout( new BorderLayout() );
leftPanel.add( toolbarPanel, BorderLayout.NORTH );
leftPanel.add( trabalhadoresScroll, BorderLayout.CENTER );
setLayout( new BorderLayout() );
add( leftPanel, BorderLayout.WEST );
add( dadosTrabalhadorPanel, BorderLayout.CENTER );
// add( marcacoesPanel, BorderLayout.SOUTH );
trabalhadoresTable.getSelectionModel().addListSelectionListener( this );
new CopyPasteHandler( nomeText );
new CopyPasteHandler( nacionalidadeText );
new CopyPasteHandler( numeroMecanograficoText );
new CopyPasteHandler( categoriaText );
new CopyPasteHandler( localText );
new CopyPasteHandler( funcaoText );
new CopyPasteHandler( observacoesText );
}
private void setupComponentsHashtable()
{
components = new ComponentsHashtable();
components.putComponent( TrabalhadorData.NOME, nomeText );
components.putComponent( TrabalhadorData.SEXO, new ControllableComponent()
{
public void fill( Object value )
{
if( value != null && value.equals( "f" ) )
{
sexoPanel.fill( new Integer(2) );
}
else
{
sexoPanel.fill( new Integer(1) );
}
}
public Object save()
{
Integer id = (Integer)sexoPanel.save();
if( id != null && id.intValue() == 1 )
{
return "m";
}
return "f";
}
public void clear()
{
sexoPanel.clear();
}
public void setEnabled( boolean enable )
{
sexoPanel.setEnabled( enable );
}
} );
components.putComponent( TrabalhadorData.DATA_NASCIMENTO, dataNascimentoPanel );
components.putComponent( TrabalhadorData.NACIONALIDADE, nacionalidadeText );
components.putComponent( TrabalhadorData.NUMERO_MECANOGRAFICO, numeroMecanograficoText );
components.putComponent( TrabalhadorData.DATA_ADMISSAO, dataAdmissaoPanel );
components.putComponent( TrabalhadorData.CATEGORIA, categoriaText );
components.putComponent( TrabalhadorData.LOCAL_TRABALHO, localText );
components.putComponent( TrabalhadorData.FUNCAO_PROPOSTA, funcaoText );
components.putComponent( TrabalhadorData.DATA_ADMISSAO_FUNCAO, dataAdmissaoFuncaoPanel );
components.putComponent( TrabalhadorData.DATA_DEMISSAO, dataDemissaoPanel );
components.putDummy( TrabalhadorData.OBSERVACOES );
components.putComponent( TrabalhadorData.OBSERVACOES_GESTAO, observacoesText );
components.putComponent( TrabalhadorData.PERFIL, perfilPanel );
// components.putDummy( TrabalhadorData.INACTIVO );
components.putDummy( TrabalhadorData.ESTABELECIMENTO );
components.putDummy( TrabalhadorData.NOME_PLAIN );
}
public void clear()
{
String names[] = (String[])components.keySet().toArray( new String[0] );
ComponentController.clear( names, components );
trabalhador = null;
}
public void fill(Object value)
{
clear();
trabalhador = ( TrabalhadorData ) value;
// examesPanel.setEnabled( trabalhador != null );
// examesPanel.fill( trabalhador );
// consultaPanel.setEnabled( trabalhador != null );
// consultaPanel.fill( trabalhador );
if( trabalhador == null )
{
trabalhadoresTable.clearSelection();
return;
}
String names[] = trabalhador.getFieldNames();
ComponentController.fill( names, trabalhador.getHashData(), components );
}
public Object save()
{
if( trabalhador == null )
{
trabalhador = new TrabalhadorData();
}
String names[] = trabalhador.getFieldNames();
Hashtable hash = new Hashtable();
ComponentController.save( names, hash, components );
trabalhador.setHashData( hash );
trabalhador.set( TrabalhadorData.ESTABELECIMENTO, estabelecimento );
return trabalhador;
}
public void setEnabled( boolean enable )
{
super.setEnabled( enable );
String names[] = (String[])components.keySet().toArray( new String[0] );
ComponentController.setEnabled( names, enable, components );
trabalhadoresTable.setEnabled( !enable );
if( lastEnable != enable )
{
if( enable )
{
EstabelecimentoPanel.disables++;
}
else
{
EstabelecimentoPanel.disables--;
}
lastEnable = enable;
}
estabelecimentosTable.setEnabled( EstabelecimentoPanel.disables == 0 );
// if( trabalhador == null )
// {
// examesPanel.setEnabled( false );
// consultaPanel.setEnabled( false );
// }
}
public void reloaList()
throws Exception
{
if( estabelecimento == null )
{
trabalhadoresModel.clearAll();
}
else
{
Integer id = ( Integer )estabelecimento.get( EstabelecimentoData.ID );
IDObject []trabalhadores = provider.getAllTrabalhadoresForEstabelecimento( id );
trabalhadoresModel.setValues( new Vector( Arrays.asList( trabalhadores ) ) );
}
}
public void valueChanged( ListSelectionEvent e )
{
Object source = e.getSource();
if( source instanceof EmpresaPanel )
{
Integer id = ( ( EmpresaPanel ) source ).getSelectedEstabelecimento();
if( id != null )
{
try
{
IDObject []trabalhadores = provider.getAllTrabalhadoresForEstabelecimento( id );
trabalhadoresModel.setValues( new Vector( Arrays.asList( trabalhadores ) ) );
}
catch( Exception ex )
{
DialogException.showExceptionMessage( ex, "Erro a carregar os trabalhadores", true );
clear();
}
}
else
{
trabalhadoresModel.clearAll();
clear();
}
}
else if( source.equals( trabalhadoresTable.getSelectionModel() ) )
{
// int selected = trabalhadoresTable.getSelectedRow();
// if( selected == -1 )
// {
// clear();
//
// }
// else
// {
// Integer id = ( ( IDObject ) trabalhadoresModel.getRowAt( selected ) ).getID();;
// try
// {
// TrabalhadorData trabalhador = (TrabalhadorData) TrabalhadorData.load( TrabalhadorData.class, id );
// fill( trabalhador );
// }
// catch( Exception ex )
// {
// DialogException.showExceptionMessage( ex, "Erro a carregar o trabalhador", true );
// clear();
// }
for( int n = 0; n < listeners.size(); n++ )
{
ListSelectionEvent newEvent =
new ListSelectionEvent( this, e.getFirstIndex(), e.getLastIndex(), e.getValueIsAdjusting() );
( (ListSelectionListener) listeners.elementAt( n ) ).valueChanged( newEvent );
}
// }
}
}
public void postSave()
{
int selected = trabalhadoresTable.getSelectedRow();
//System.out.println( "postSave TRABALHADOR PANEL " + selected + " : " + ( trabalhador == null ) );
if( trabalhador != null )
{
IDObject obj = new MappableObject( (Integer) trabalhador.get( TrabalhadorData.ID ), trabalhador.get( TrabalhadorData.NOME ) );
if( selected == -1 )
{
trabalhadoresModel.insertRowAt( obj, trabalhadoresTable.getRowCount() );
trabalhadoresTable.setRowSelectionInterval( trabalhadoresTable.getRowCount() - 1, trabalhadoresTable.getRowCount() - 1 );
}
else
{
trabalhadoresModel.removeRowAt( selected );
trabalhadoresModel.insertRowAt( obj, selected );
trabalhadoresTable.setRowSelectionInterval( selected, selected );
}
}
}
public void reload()
{
fill( trabalhador );
}
public void addListSelectionListener( ListSelectionListener listener )
{
listeners.add( listener );
}
public void removeListSelectionListener( ListSelectionListener listener )
{
listeners.remove( listener );
}
public Integer getSelectedTrabalhador()
{
int selected = trabalhadoresTable.getSelectedRow();
if( selected == -1 )
{
return null;
}
return ( (IDObject) trabalhadoresModel.getRowAt( selected ) ).getID();
}
public void setEstabelecimento( EstabelecimentoData estabelecimento )
{
this.estabelecimento = estabelecimento;
}
public void setSelectedTrabalhador( TrabalhadorData trab )
{
IDObject lista[] = (IDObject [])trabalhadoresModel.getValues().toArray( new IDObject[ 0 ] );
Integer id = (Integer)trab.get( TrabalhadorData.ID );
for( int n = 0; n < lista.length; n++ )
{
if( lista[ n ].getID().equals( id ) )
{
trabalhadoresTable.setRowSelectionInterval( n, n );
return;
}
}
trabalhadoresTable.clearSelection();
}
public void actionPerformed( ActionEvent e )
{
Object source = e.getSource();
if( source.equals( marcacoesButton ) )
{
if( trabalhador == null )
{
return;
}
else
{
EstabelecimentoData estabelecimento = ( EstabelecimentoData ) trabalhador.get( TrabalhadorData.ESTABELECIMENTO );
EmpresaData empresa = ( EmpresaData ) estabelecimento.get( EstabelecimentoData.EMPRESA );
tracker.getMedicinaWindow().setVisible( true );
tracker.getMedicinaWindow().setEmpresaAndEstabelecimentoAndTrabalhador( (Integer) empresa.get( EmpresaData.ID ),
( Integer ) estabelecimento.get( EstabelecimentoData.ID ),
( Integer ) trabalhador.get( TrabalhadorData.ID ) );
}
}
}
public void setTracker( SIPRPTracker tracker )
{
this.tracker = tracker;
}
}