diff --git a/trunk/siprp/medicina/MarcacaoConsultaPanel.java b/trunk/siprp/medicina/MarcacaoConsultaPanel.java
new file mode 100644
index 00000000..e75bdde8
--- /dev/null
+++ b/trunk/siprp/medicina/MarcacaoConsultaPanel.java
@@ -0,0 +1,296 @@
+package siprp.medicina;
+
+import com.evolute.utils.*;
+import com.evolute.utils.arrays.*;
+import com.evolute.utils.data.*;
+import com.evolute.utils.dataui.*;
+import com.evolute.utils.db.*;
+import com.evolute.utils.documents.*;
+import com.evolute.utils.sql.*;
+import com.evolute.utils.ui.*;
+import com.evolute.utils.ui.panel.*;
+import com.evolute.utils.ui.text.*;
+import java.awt.*;
+import java.util.*;
+import javax.swing.*;
+import siprp.data.*;
+
+public class MarcacaoConsultaPanel
+ extends JPanel
+ implements ControllableComponent, DataClassAware
+{
+ private siprp.data.MarcacaoTrabalhadorData marcacaoTrabalhadorData;
+ private final ComponentsHashtable components = new ComponentsHashtable();
+
+ protected final SQLExecuter EXECUTER;
+
+ private final JLabel dataLabel = new JLabel( "Data da consulta", JLabel.RIGHT );
+ private final JCalendarPanel dataPanel = new JCalendarPanel( null );
+ private final JButton emailButton = new JButton( "Enviar Email" );
+ private final JLabel dataFichaLabel = new JLabel( "Data da Ficha de Aptid\u00e3o", JLabel.RIGHT );
+ private final JCalendarPanel dataFichaPanel = new JCalendarPanel( null );
+ private RadioButtonFixedPanel tipoList;
+ private RadioButtonFixedPanel estadoList;
+ private final JScrollPane observacoesTextScroll = new JScrollPane();
+ private final StateTextArea observacoesText = new StateTextArea();
+
+ public MarcacaoConsultaPanel()
+ throws Exception
+ {
+ DBManager dbm = ( DBManager )Singleton.getInstance( Singleton.DEFAULT_DBMANAGER );
+ if( dbm != null )
+ {
+ EXECUTER = ( SQLExecuter )dbm.getSharedExecuter( this );
+ }
+ else
+ {
+ EXECUTER = null;
+ }
+ setupComponents();
+ setupComponentsHashtable();
+ place();
+ }
+
+ public void setupComponents()
+ throws Exception
+ {
+ JComponent MarcacaoConsultaPanel = this;
+ emailButton.setMinimumSize( new Dimension( 300, 20 ) );
+ emailButton.setPreferredSize( new Dimension( 200, 20 ) );
+
+ IDObject tipoListOptions[] = new IDObject[]{
+ new MappableObject( new Integer( 1 ), "Admiss\u00e3o" ),
+ new MappableObject( new Integer( 2 ), "Peri\u00f3dico" ),
+ new MappableObject( new Integer( 5 ), "Peri\u00f3dico inicial" ),
+ new MappableObject( new Integer( 3 ), "Ocasional" ),
+ };
+ tipoList = new RadioButtonFixedPanel( tipoListOptions, 4, 1, RadioButtonFixedPanel.ORIENTATION_VERTICAL, false, null );
+ tipoList.setBorder( BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), "Tipo" ) );
+
+ IDObject estadoListOptions[] = new IDObject[]{
+ new MappableObject( new Integer( 0 ), "Por realizar" ),
+ new MappableObject( new Integer( 2 ), "Realizada" ),
+ new MappableObject( new Integer( 3 ), "Desmarcada pelo trabalhador" ),
+ new MappableObject( new Integer( 4 ), "Desmarcada pela SIPRP" ),
+ new MappableObject( new Integer( 5 ), "Faltou" ),
+ };
+ estadoList = new RadioButtonFixedPanel( estadoListOptions, 6, 1, RadioButtonFixedPanel.ORIENTATION_VERTICAL, false, null );
+ estadoList.setBorder( BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), "Estado" ) );
+
+ observacoesTextScroll.setBorder( BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), "Observa\u00e7\u00f5es" ) );
+ observacoesText.setLineWrap( true );
+ observacoesText.setWrapStyleWord( true );
+ observacoesText.setRows( 5 );
+
+ }
+
+ public void place()
+ {
+ JPanel MarcacaoConsultaPanel = this;
+ GridBagConstraints MarcacaoConsultaPanelGBC = new GridBagConstraints();
+ MarcacaoConsultaPanelGBC.insets = new Insets( 1, 1, 1, 1 );
+ GridBagLayout MarcacaoConsultaPanelLayout = new GridBagLayout();
+ MarcacaoConsultaPanel.setLayout( MarcacaoConsultaPanelLayout );
+ MarcacaoConsultaPanelGBC.gridx = 0;
+ MarcacaoConsultaPanelGBC.gridy = 0;
+ MarcacaoConsultaPanelGBC.gridwidth = 1;
+ MarcacaoConsultaPanelGBC.gridheight = 1;
+ MarcacaoConsultaPanelGBC.weightx = 0.0;
+ MarcacaoConsultaPanelGBC.weighty = 0.0;
+ MarcacaoConsultaPanelGBC.fill = GridBagConstraints.HORIZONTAL;
+ MarcacaoConsultaPanelLayout.setConstraints( dataLabel, MarcacaoConsultaPanelGBC );
+ MarcacaoConsultaPanel.add( dataLabel );
+
+ MarcacaoConsultaPanelGBC.gridx = 1;
+ MarcacaoConsultaPanelGBC.gridy = 0;
+ MarcacaoConsultaPanelGBC.gridwidth = 1;
+ MarcacaoConsultaPanelGBC.gridheight = 1;
+ MarcacaoConsultaPanelGBC.weightx = 0.5;
+ MarcacaoConsultaPanelGBC.weighty = 0.0;
+ MarcacaoConsultaPanelGBC.fill = GridBagConstraints.HORIZONTAL;
+ MarcacaoConsultaPanelLayout.setConstraints( dataPanel, MarcacaoConsultaPanelGBC );
+ MarcacaoConsultaPanel.add( dataPanel );
+
+ MarcacaoConsultaPanelGBC.gridx = 2;
+ MarcacaoConsultaPanelGBC.gridy = 0;
+ MarcacaoConsultaPanelGBC.gridwidth = 1;
+ MarcacaoConsultaPanelGBC.gridheight = 1;
+ MarcacaoConsultaPanelGBC.weightx = 0.5;
+ MarcacaoConsultaPanelGBC.weighty = 0.0;
+ MarcacaoConsultaPanelGBC.fill = GridBagConstraints.NONE;
+ MarcacaoConsultaPanelLayout.setConstraints( emailButton, MarcacaoConsultaPanelGBC );
+ MarcacaoConsultaPanel.add( emailButton );
+
+ MarcacaoConsultaPanelGBC.gridx = 0;
+ MarcacaoConsultaPanelGBC.gridy = 1;
+ MarcacaoConsultaPanelGBC.gridwidth = 1;
+ MarcacaoConsultaPanelGBC.gridheight = 1;
+ MarcacaoConsultaPanelGBC.weightx = 0.0;
+ MarcacaoConsultaPanelGBC.weighty = 0.0;
+ MarcacaoConsultaPanelGBC.fill = GridBagConstraints.HORIZONTAL;
+ MarcacaoConsultaPanelLayout.setConstraints( dataFichaLabel, MarcacaoConsultaPanelGBC );
+ MarcacaoConsultaPanel.add( dataFichaLabel );
+
+ MarcacaoConsultaPanelGBC.gridx = 1;
+ MarcacaoConsultaPanelGBC.gridy = 1;
+ MarcacaoConsultaPanelGBC.gridwidth = 1;
+ MarcacaoConsultaPanelGBC.gridheight = 1;
+ MarcacaoConsultaPanelGBC.weightx = 0.5;
+ MarcacaoConsultaPanelGBC.weighty = 0.0;
+ MarcacaoConsultaPanelGBC.fill = GridBagConstraints.HORIZONTAL;
+ MarcacaoConsultaPanelLayout.setConstraints( dataFichaPanel, MarcacaoConsultaPanelGBC );
+ MarcacaoConsultaPanel.add( dataFichaPanel );
+
+ MarcacaoConsultaPanelGBC.gridx = 0;
+ MarcacaoConsultaPanelGBC.gridy = 2;
+ MarcacaoConsultaPanelGBC.gridwidth = 2;
+ MarcacaoConsultaPanelGBC.gridheight = 1;
+ MarcacaoConsultaPanelGBC.weightx = 0.5;
+ MarcacaoConsultaPanelGBC.weighty = 0.0;
+ MarcacaoConsultaPanelGBC.fill = GridBagConstraints.BOTH;
+ MarcacaoConsultaPanelLayout.setConstraints( tipoList, MarcacaoConsultaPanelGBC );
+ MarcacaoConsultaPanel.add( tipoList );
+
+ MarcacaoConsultaPanelGBC.gridx = 2;
+ MarcacaoConsultaPanelGBC.gridy = 2;
+ MarcacaoConsultaPanelGBC.gridwidth = 1;
+ MarcacaoConsultaPanelGBC.gridheight = 1;
+ MarcacaoConsultaPanelGBC.weightx = 0.5;
+ MarcacaoConsultaPanelGBC.weighty = 0.0;
+ MarcacaoConsultaPanelGBC.fill = GridBagConstraints.BOTH;
+ MarcacaoConsultaPanelLayout.setConstraints( estadoList, MarcacaoConsultaPanelGBC );
+ MarcacaoConsultaPanel.add( estadoList );
+
+ MarcacaoConsultaPanelGBC.gridx = 0;
+ MarcacaoConsultaPanelGBC.gridy = 3;
+ MarcacaoConsultaPanelGBC.gridwidth = 3;
+ MarcacaoConsultaPanelGBC.gridheight = 1;
+ MarcacaoConsultaPanelGBC.weightx = 1.0;
+ MarcacaoConsultaPanelGBC.weighty = 1.0;
+ observacoesTextScroll.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
+ observacoesTextScroll.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED );
+ observacoesTextScroll.setViewportView( observacoesText );
+ MarcacaoConsultaPanelGBC.fill = GridBagConstraints.BOTH;
+ MarcacaoConsultaPanelLayout.setConstraints( observacoesTextScroll, MarcacaoConsultaPanelGBC );
+ MarcacaoConsultaPanel.add( observacoesTextScroll );
+
+ }
+
+ private void setupComponentsHashtable()
+ {
+ components.putComponent( siprp.data.MarcacaoTrabalhadorData.DATA, dataPanel );
+ components.putComponent( siprp.data.MarcacaoTrabalhadorData.DATA_RELATORIO, dataFichaPanel );
+ components.putComponent( siprp.data.MarcacaoTrabalhadorData.MOTIVO, tipoList );
+ components.putComponent( siprp.data.MarcacaoTrabalhadorData.ESTADO, estadoList );
+ components.putComponent( siprp.data.MarcacaoTrabalhadorData.OBSERVACOES, observacoesText );
+ }
+
+ public void fill( Object toFill )
+ {
+ clear();
+ if( toFill == null || !( toFill instanceof PropertyObject ) )
+ {
+ return;
+ }
+ Hashtable data = null;
+ if( toFill instanceof PropertyObject )
+ {
+ data = ( (PropertyObject) toFill ).getHashData();
+ if( toFill instanceof siprp.data.MarcacaoTrabalhadorData )
+ {
+ marcacaoTrabalhadorData = (siprp.data.MarcacaoTrabalhadorData) toFill;
+ }
+ }
+ else if( toFill instanceof Hashtable )
+ {
+ data = (Hashtable) toFill;
+ }
+ else
+ {
+ return;
+ }
+ if( marcacaoTrabalhadorData == null )
+ {
+ marcacaoTrabalhadorData = new siprp.data.MarcacaoTrabalhadorData();
+ marcacaoTrabalhadorData.setHashData( data );
+ }
+ PropertyObject po = (PropertyObject) toFill;
+ String properties[] = (String[]) components.keySet().toArray( new String[ 0 ] );
+ ComponentController.fill( properties, po.getHashData(), components );
+ }
+
+ public Object save()
+ {
+ if( marcacaoTrabalhadorData == null )
+ {
+ marcacaoTrabalhadorData = new siprp.data.MarcacaoTrabalhadorData();
+ }
+ Hashtable data = marcacaoTrabalhadorData.getHashData();
+ String properties[] = (String[]) components.keySet().toArray( new String[ 0 ] );
+ ComponentController.save( properties, data, components );
+ if( !( marcacaoTrabalhadorData instanceof PropertyObject ) )
+ {
+ return data;
+ }
+ marcacaoTrabalhadorData.setHashData( data );
+ return marcacaoTrabalhadorData;
+ }
+
+ public void clear()
+ {
+ marcacaoTrabalhadorData = null;
+ String properties[] = (String[]) components.keySet().toArray( new String[ 0 ] );
+ ComponentController.clear( properties, components );
+ }
+
+ public void setEnabled( boolean enable )
+ {
+ String properties[] = (String[]) components.keySet().toArray( new String[ 0 ] );
+ ComponentController.setEnabled( properties, enable, components );
+ }
+
+ public Class getDataClass()
+ {
+ return siprp.data.MarcacaoTrabalhadorData.class;
+ }
+
+ public JLabel getDataFichaLabel()
+ {
+ return dataFichaLabel;
+ }
+
+ public JCalendarPanel getDataFichaPanel()
+ {
+ return dataFichaPanel;
+ }
+
+ public JLabel getDataLabel()
+ {
+ return dataLabel;
+ }
+
+ public JCalendarPanel getDataPanel()
+ {
+ return dataPanel;
+ }
+
+ public JButton getEmailButton()
+ {
+ return emailButton;
+ }
+
+ public RadioButtonFixedPanel getEstadoList()
+ {
+ return estadoList;
+ }
+
+ public StateTextArea getObservacoesText()
+ {
+ return observacoesText;
+ }
+
+ public RadioButtonFixedPanel getTipoList()
+ {
+ return tipoList;
+ }
+}
diff --git a/trunk/siprp/medicina/MarcacaoConsultaPanel.xml b/trunk/siprp/medicina/MarcacaoConsultaPanel.xml
new file mode 100644
index 00000000..0ad63928
--- /dev/null
+++ b/trunk/siprp/medicina/MarcacaoConsultaPanel.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+ siprp.data.*
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo
+
+ 4
+
+
+ Admiss\u00e3o
+ Peri\u00f3dico
+ Peri\u00f3dico inicial
+ Ocasional
+
+
+
+
+ Estado
+
+ 6
+
+
+ Por realizar
+ Realizada
+ Desmarcada pelo trabalhador
+ Desmarcada pela SIPRP
+ Faltou
+
+
+
+
+
+ Observa\u00e7\u00f5es
+
+
+ 5
+
+
+
+
diff --git a/trunk/siprp/medicina/MarcacaoExamePanel.java b/trunk/siprp/medicina/MarcacaoExamePanel.java
new file mode 100644
index 00000000..a4bc1ee5
--- /dev/null
+++ b/trunk/siprp/medicina/MarcacaoExamePanel.java
@@ -0,0 +1,261 @@
+package siprp.medicina;
+
+import com.evolute.utils.*;
+import com.evolute.utils.arrays.*;
+import com.evolute.utils.data.*;
+import com.evolute.utils.dataui.*;
+import com.evolute.utils.db.*;
+import com.evolute.utils.documents.*;
+import com.evolute.utils.sql.*;
+import com.evolute.utils.ui.*;
+import com.evolute.utils.ui.panel.*;
+import com.evolute.utils.ui.text.*;
+import java.awt.*;
+import java.util.*;
+import javax.swing.*;
+import siprp.data.*;
+
+public class MarcacaoExamePanel
+ extends JPanel
+ implements ControllableComponent, DataClassAware
+{
+ private siprp.data.MarcacaoTrabalhadorData marcacaoTrabalhadorData;
+ private final ComponentsHashtable components = new ComponentsHashtable();
+
+ protected final SQLExecuter EXECUTER;
+
+ private final JLabel dataLabel = new JLabel( "Data dos Exames", JLabel.RIGHT );
+ private final JCalendarPanel dataPanel = new JCalendarPanel( null );
+ private final JButton emailButton = new JButton( "Enviar Email" );
+ private final JPanelControllable detalhesPanel = new JPanelControllable();
+ private RadioButtonFixedPanel estadoList;
+ private final JScrollPane observacoesTextScroll = new JScrollPane();
+ private final StateTextArea observacoesText = new StateTextArea();
+
+ public MarcacaoExamePanel()
+ throws Exception
+ {
+ DBManager dbm = ( DBManager )Singleton.getInstance( Singleton.DEFAULT_DBMANAGER );
+ if( dbm != null )
+ {
+ EXECUTER = ( SQLExecuter )dbm.getSharedExecuter( this );
+ }
+ else
+ {
+ EXECUTER = null;
+ }
+ setupComponents();
+ setupComponentsHashtable();
+ place();
+ }
+
+ public void setupComponents()
+ throws Exception
+ {
+ JComponent MarcacaoExamePanel = this;
+ emailButton.setMinimumSize( new Dimension( 300, 20 ) );
+ emailButton.setPreferredSize( new Dimension( 200, 20 ) );
+
+ detalhesPanel.setBorder( BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), "Detalhes" ) );
+
+ IDObject estadoListOptions[] = new IDObject[]{
+ new MappableObject( new Integer( 0 ), "Por realizar" ),
+ new MappableObject( new Integer( 1 ), "Parcialmente realizados" ),
+ new MappableObject( new Integer( 2 ), "Realizados" ),
+ new MappableObject( new Integer( 3 ), "Desmarcados pelo trabalhador" ),
+ new MappableObject( new Integer( 4 ), "Desmarcados pela SIPRP" ),
+ new MappableObject( new Integer( 5 ), "Faltou" ),
+ };
+ estadoList = new RadioButtonFixedPanel( estadoListOptions, 6, 1, RadioButtonFixedPanel.ORIENTATION_VERTICAL, false, null );
+ estadoList.setBorder( BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), "Estado" ) );
+
+ observacoesTextScroll.setBorder( BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), "Observa\u00e7\u00f5es" ) );
+ observacoesText.setLineWrap( true );
+ observacoesText.setWrapStyleWord( true );
+ observacoesText.setRows( 5 );
+
+ }
+
+ public void place()
+ {
+ JPanel MarcacaoExamePanel = this;
+ GridBagConstraints detalhesPanelGBC = new GridBagConstraints();
+ detalhesPanelGBC.insets = new Insets( 1, 1, 1, 1 );
+ GridBagLayout detalhesPanelLayout = new GridBagLayout();
+ detalhesPanel.setLayout( detalhesPanelLayout );
+ GridBagConstraints MarcacaoExamePanelGBC = new GridBagConstraints();
+ MarcacaoExamePanelGBC.insets = new Insets( 1, 1, 1, 1 );
+ GridBagLayout MarcacaoExamePanelLayout = new GridBagLayout();
+ MarcacaoExamePanel.setLayout( MarcacaoExamePanelLayout );
+ MarcacaoExamePanelGBC.gridx = 0;
+ MarcacaoExamePanelGBC.gridy = 0;
+ MarcacaoExamePanelGBC.gridwidth = 1;
+ MarcacaoExamePanelGBC.gridheight = 1;
+ MarcacaoExamePanelGBC.weightx = 0.0;
+ MarcacaoExamePanelGBC.weighty = 0.0;
+ MarcacaoExamePanelGBC.fill = GridBagConstraints.HORIZONTAL;
+ MarcacaoExamePanelLayout.setConstraints( dataLabel, MarcacaoExamePanelGBC );
+ MarcacaoExamePanel.add( dataLabel );
+
+ MarcacaoExamePanelGBC.gridx = 1;
+ MarcacaoExamePanelGBC.gridy = 0;
+ MarcacaoExamePanelGBC.gridwidth = 1;
+ MarcacaoExamePanelGBC.gridheight = 1;
+ MarcacaoExamePanelGBC.weightx = 0.5;
+ MarcacaoExamePanelGBC.weighty = 0.0;
+ MarcacaoExamePanelGBC.fill = GridBagConstraints.HORIZONTAL;
+ MarcacaoExamePanelLayout.setConstraints( dataPanel, MarcacaoExamePanelGBC );
+ MarcacaoExamePanel.add( dataPanel );
+
+ MarcacaoExamePanelGBC.gridx = 2;
+ MarcacaoExamePanelGBC.gridy = 0;
+ MarcacaoExamePanelGBC.gridwidth = 1;
+ MarcacaoExamePanelGBC.gridheight = 1;
+ MarcacaoExamePanelGBC.weightx = 0.5;
+ MarcacaoExamePanelGBC.weighty = 0.0;
+ MarcacaoExamePanelGBC.fill = GridBagConstraints.NONE;
+ MarcacaoExamePanelLayout.setConstraints( emailButton, MarcacaoExamePanelGBC );
+ MarcacaoExamePanel.add( emailButton );
+
+ MarcacaoExamePanelGBC.gridx = 0;
+ MarcacaoExamePanelGBC.gridy = 1;
+ MarcacaoExamePanelGBC.gridwidth = 2;
+ MarcacaoExamePanelGBC.gridheight = 1;
+ MarcacaoExamePanelGBC.weightx = 0.5;
+ MarcacaoExamePanelGBC.weighty = 0.0;
+ MarcacaoExamePanelGBC.fill = GridBagConstraints.BOTH;
+ MarcacaoExamePanelLayout.setConstraints( detalhesPanel, MarcacaoExamePanelGBC );
+ MarcacaoExamePanel.add( detalhesPanel );
+
+ MarcacaoExamePanelGBC.gridx = 2;
+ MarcacaoExamePanelGBC.gridy = 1;
+ MarcacaoExamePanelGBC.gridwidth = 1;
+ MarcacaoExamePanelGBC.gridheight = 1;
+ MarcacaoExamePanelGBC.weightx = 0.5;
+ MarcacaoExamePanelGBC.weighty = 0.0;
+ MarcacaoExamePanelGBC.fill = GridBagConstraints.BOTH;
+ MarcacaoExamePanelLayout.setConstraints( estadoList, MarcacaoExamePanelGBC );
+ MarcacaoExamePanel.add( estadoList );
+
+ MarcacaoExamePanelGBC.gridx = 0;
+ MarcacaoExamePanelGBC.gridy = 2;
+ MarcacaoExamePanelGBC.gridwidth = 3;
+ MarcacaoExamePanelGBC.gridheight = 1;
+ MarcacaoExamePanelGBC.weightx = 1.0;
+ MarcacaoExamePanelGBC.weighty = 1.0;
+ observacoesTextScroll.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
+ observacoesTextScroll.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED );
+ observacoesTextScroll.setViewportView( observacoesText );
+ MarcacaoExamePanelGBC.fill = GridBagConstraints.BOTH;
+ MarcacaoExamePanelLayout.setConstraints( observacoesTextScroll, MarcacaoExamePanelGBC );
+ MarcacaoExamePanel.add( observacoesTextScroll );
+
+ }
+
+ private void setupComponentsHashtable()
+ {
+ components.putComponent( siprp.data.MarcacaoTrabalhadorData.DATA, dataPanel );
+ components.putComponent( siprp.data.MarcacaoTrabalhadorData.ESTADO, estadoList );
+ components.putComponent( siprp.data.MarcacaoTrabalhadorData.OBSERVACOES, observacoesText );
+ }
+
+ public void fill( Object toFill )
+ {
+ clear();
+ if( toFill == null || !( toFill instanceof PropertyObject ) )
+ {
+ return;
+ }
+ Hashtable data = null;
+ if( toFill instanceof PropertyObject )
+ {
+ data = ( (PropertyObject) toFill ).getHashData();
+ if( toFill instanceof siprp.data.MarcacaoTrabalhadorData )
+ {
+ marcacaoTrabalhadorData = (siprp.data.MarcacaoTrabalhadorData) toFill;
+ }
+ }
+ else if( toFill instanceof Hashtable )
+ {
+ data = (Hashtable) toFill;
+ }
+ else
+ {
+ return;
+ }
+ if( marcacaoTrabalhadorData == null )
+ {
+ marcacaoTrabalhadorData = new siprp.data.MarcacaoTrabalhadorData();
+ marcacaoTrabalhadorData.setHashData( data );
+ }
+ PropertyObject po = (PropertyObject) toFill;
+ String properties[] = (String[]) components.keySet().toArray( new String[ 0 ] );
+ ComponentController.fill( properties, po.getHashData(), components );
+ }
+
+ public Object save()
+ {
+ if( marcacaoTrabalhadorData == null )
+ {
+ marcacaoTrabalhadorData = new siprp.data.MarcacaoTrabalhadorData();
+ }
+ Hashtable data = marcacaoTrabalhadorData.getHashData();
+ String properties[] = (String[]) components.keySet().toArray( new String[ 0 ] );
+ ComponentController.save( properties, data, components );
+ if( !( marcacaoTrabalhadorData instanceof PropertyObject ) )
+ {
+ return data;
+ }
+ marcacaoTrabalhadorData.setHashData( data );
+ return marcacaoTrabalhadorData;
+ }
+
+ public void clear()
+ {
+ marcacaoTrabalhadorData = null;
+ String properties[] = (String[]) components.keySet().toArray( new String[ 0 ] );
+ ComponentController.clear( properties, components );
+ }
+
+ public void setEnabled( boolean enable )
+ {
+ String properties[] = (String[]) components.keySet().toArray( new String[ 0 ] );
+ ComponentController.setEnabled( properties, enable, components );
+ }
+
+ public Class getDataClass()
+ {
+ return siprp.data.MarcacaoTrabalhadorData.class;
+ }
+
+ public JLabel getDataLabel()
+ {
+ return dataLabel;
+ }
+
+ public JCalendarPanel getDataPanel()
+ {
+ return dataPanel;
+ }
+
+ public JPanelControllable getDetalhesPanel()
+ {
+ return detalhesPanel;
+ }
+
+ public JButton getEmailButton()
+ {
+ return emailButton;
+ }
+
+ public RadioButtonFixedPanel getEstadoList()
+ {
+ return estadoList;
+ }
+
+ public StateTextArea getObservacoesText()
+ {
+ return observacoesText;
+ }
+
+}
diff --git a/trunk/siprp/medicina/MarcacaoExamePanel.xml b/trunk/siprp/medicina/MarcacaoExamePanel.xml
new file mode 100644
index 00000000..bb5e2ab1
--- /dev/null
+++ b/trunk/siprp/medicina/MarcacaoExamePanel.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+ siprp.data.*
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Detalhes
+
+
+
+
+
+
+
+
+ Estado
+
+ 6
+
+
+ Por realizar
+ Parcialmente realizados
+ Realizados
+ Desmarcados pelo trabalhador
+ Desmarcados pela SIPRP
+ Faltou
+
+
+
+
+
+ Observa\u00e7\u00f5es
+
+
+ 5
+
+
+
+
diff --git a/trunk/siprp/medicina/MarcacoesMedicinaHandler.java b/trunk/siprp/medicina/MarcacoesMedicinaHandler.java
new file mode 100644
index 00000000..2ccce75a
--- /dev/null
+++ b/trunk/siprp/medicina/MarcacoesMedicinaHandler.java
@@ -0,0 +1,93 @@
+/*
+ * MarcacoesMedicinaHandler.java
+ *
+ * Created on 28 de Abril de 2006, 9:56
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package siprp.medicina;
+
+import java.util.*;
+
+import com.evolute.utils.*;
+import com.evolute.utils.jdo.*;
+
+import siprp.data.*;
+
+/**
+ * Classe auxiliar para tratamento de marcações de Medicina.
+ *
+ * @author Frederico
+ */
+public class MarcacoesMedicinaHandler
+{
+ /** Creates a new instance of MarcacoesMedicinaHandler */
+ public MarcacoesMedicinaHandler()
+ {
+ }
+
+ /**
+ * Ajusta os estado das marações corrente e seguinte para uma trabalhador.
+ * Este método é usado pelo sistema de marcaç&atild;o de fichas de aptidaão para ajustar
+ * as marcações existentes às escolhidas na ficha.
+ *
+ * @param trabalhadorID um inteiro que representa o trabalhador em questão
+ * @param motivoCorrente um inteiro que representa o motivo da marcação corrente (admissão/periódico/ocasional)
+ * @param dataCorrente a data que se pretende para a marcação corrente
+ * @param motivoSeguinte um inteiro que representa o motivo da marcação seguinte (admissão/periódico/ocasional)
+ * @param dataSeguinte a data que se pretende para a marcação seguinte
+ * @throws Exception se houver um erro na comunicação com a Base de Dados
+ */
+ public void ajustarMarcacoes( Integer trabalhadorID, Integer motivoCorrente, Date dataCorrente,
+ Integer motivoSeguinte, Date dataSeguinte )
+ throws Exception
+ {
+ Integer idCorrente;
+ Integer idSeguinte;
+ MedicinaDataProvider provider = ( MedicinaDataProvider ) MedicinaDataProvider.getProvider();
+ JDOProvider JDO = ( JDOProvider ) Singleton.getInstance( Singleton.DEFAULT_JDO_PROVIDER );
+ TrabalhadorData trabalhador = (TrabalhadorData)JDO.load( TrabalhadorData.class, trabalhadorID );
+
+ idCorrente = provider.getConsultaIDByTrabalhadorMotivoAndDate( trabalhadorID, motivoCorrente, dataCorrente );
+ MarcacaoTrabalhadorData consultaCorrente;
+ if( idCorrente == null )
+ {
+ consultaCorrente = new MarcacaoTrabalhadorData();
+ consultaCorrente.set( MarcacaoTrabalhadorData.TRABALHADOR, trabalhador );
+ consultaCorrente.set( MarcacaoTrabalhadorData.TIPO, new Integer( MarcacaoTrabalhadorData.TIPO_CONSULTA ) );
+ consultaCorrente.set( Marcacao.DATA, dataCorrente );
+ consultaCorrente.set( MarcacaoTrabalhadorData.MOTIVO, motivoCorrente );
+ }
+ else
+ {
+ consultaCorrente = ( MarcacaoTrabalhadorData ) JDO.load( MarcacaoTrabalhadorData.class, idCorrente );
+ }
+ consultaCorrente.set( Marcacao.REALIZADA, "y" );
+ consultaCorrente.set( MarcacaoTrabalhadorData.ESTADO, new Integer( siprp.medicina.MedicinaDataProvider.ESTADO_REALIZADO ) );
+ consultaCorrente.save();
+
+ idSeguinte = provider.getConsultaIDByTrabalhadorMotivoAndDate( trabalhadorID, motivoSeguinte, dataSeguinte );
+ if( idSeguinte == null )
+ {
+ idSeguinte = provider.getProximaConsultaIDByTrabalhadorMotivoAndDate( trabalhadorID, motivoSeguinte, dataCorrente );
+ MarcacaoTrabalhadorData consultaSeguinte;
+ if( idSeguinte == null )
+ {
+ consultaSeguinte = new MarcacaoTrabalhadorData();
+ consultaSeguinte.set( MarcacaoTrabalhadorData.TRABALHADOR, trabalhador );
+ consultaSeguinte.set( MarcacaoTrabalhadorData.TIPO, new Integer( MarcacaoTrabalhadorData.TIPO_CONSULTA ) );
+ consultaSeguinte.set( MarcacaoTrabalhadorData.MOTIVO, motivoSeguinte );
+ consultaSeguinte.set( Marcacao.REALIZADA, "y" );
+ consultaSeguinte.set( MarcacaoTrabalhadorData.ESTADO, new Integer( siprp.medicina.MedicinaDataProvider.ESTADO_POR_REALIZAR ) );
+ }
+ else
+ {
+ consultaSeguinte = ( MarcacaoTrabalhadorData ) JDO.load( MarcacaoTrabalhadorData.class, idSeguinte );
+ }
+ consultaSeguinte.set( Marcacao.DATA, dataSeguinte );
+ consultaSeguinte.save();
+ }
+ }
+}
diff --git a/trunk/siprp/medicina/MedicinaDataProvider.java b/trunk/siprp/medicina/MedicinaDataProvider.java
new file mode 100644
index 00000000..130aa9a9
--- /dev/null
+++ b/trunk/siprp/medicina/MedicinaDataProvider.java
@@ -0,0 +1,349 @@
+/*
+ * MedicinaDataProvider.java
+ *
+ * Created on January 29, 2006, 12:27 AM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package siprp.medicina;
+
+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.metadb.*;
+import com.evolute.utils.sql.*;
+import com.evolute.utils.strings.*;
+import com.evolute.utils.tables.*;
+
+import siprp.*;
+import siprp.data.*;
+/**
+ *
+ * @author fpalma
+ */
+public class MedicinaDataProvider extends MetaProvider
+{
+ public static final int ESTADO_POR_REALIZAR = 0;
+ public static final int ESTADO_PARCIALMENTE_REALIZADO = 1;
+ public static final int ESTADO_REALIZADO = 2;
+ public static final int ESTADO_DESMARCADO_TRABALHADOR = 3;
+ public static final int ESTADO_DESMARCADO_EMPRESA = 4;
+ public static final int ESTADO_FALTOU = 5;
+
+ public static final String TIPOS_CONSULTAS[] =
+ new String[]{ "", "Admiss\u00e3o", "Peri\u00f3dico", "Ocasional", "", "Peri\u00f3dico inicial" };
+
+ public static final String ESTADOS_EXAME_STR[] =
+ new String[]{ "Por realizar", "Parcialmente realizado", "Realizado",
+ "Desmarcado trabalhador",
+ "Desmarcado " + Singleton.getInstance( SingletonConstants.COMPANY_ACRONYM ),
+ "Faltou" };
+
+ public static final String ESTADOS_CONSULTA_STR[] =
+ new String[]{ "Por realizar", "Parcialmente realizada", "Realizada",
+ "Desmarcada trabalhador",
+ "Desmarcada " + Singleton.getInstance( SingletonConstants.COMPANY_ACRONYM ),
+ "Faltou" };
+
+ private static final Object LOCK = new Object();
+ private static MedicinaDataProvider instance = null;
+ private final Executer executer;
+
+ /** Creates a new instance of MedicinaDataProvider */
+ public MedicinaDataProvider()
+ throws Exception
+ {
+ DBManager dbm = ( DBManager ) Singleton.getInstance( Singleton.DEFAULT_DBMANAGER /*SingletonConstants.DBMANAGER*/ );
+ executer = dbm.getSharedExecuter( this );
+ }
+
+ public static MetaProvider getProvider()
+ throws Exception
+ {
+ synchronized( LOCK )
+ {
+ if( instance == null )
+ {
+ instance = new MedicinaDataProvider();
+ }
+ }
+ return instance;
+ }
+
+ public String []getEmpresaEstabelecimento( Integer empresaID, Integer estabelecimentoID )
+ throws Exception
+ {
+ String nomes[] = new String[ 2 ];
+ Select select = new Select( new String[]{ "empresas" },
+ new String[]{ "designacao_social" },
+ new Field( "id" ).isEqual( empresaID ) );
+ Virtual2DArray array = executer.executeQuery( select );
+ nomes[ 0 ] = ( String ) array.get( 0, 0 );
+
+ select = new Select( new String[]{ "estabelecimentos" },
+ new String[]{ "nome" },
+ new Field( "id" ).isEqual( estabelecimentoID ) );
+ array = executer.executeQuery( select );
+ nomes[ 1 ] = ( String ) array.get( 0, 0 );
+
+ return nomes;
+ }
+
+ public IDObject[] getDetalhesValidosTrabalhador( Integer empresaID, Integer trabalhadorID )
+ throws Exception
+ {
+ Select select =
+ new Select( new String[]{ "trabalhadores" },
+ new String[]{ "perfil" },
+ new Field( "id" ).isEqual( trabalhadorID ) );
+ Virtual2DArray array = executer.executeQuery( select );
+ Integer perfil = ( Integer ) array.get( 0, 0 );
+ if( perfil == null )
+ {
+ return new IDObject[ 0 ];
+ }
+ select =
+ new Select( new String[]{ "prt_elementos_protocolo", "prt_tipos_elementos_protocolo",
+ "prt_grupos_protocolo" },
+ new String[]{ "prt_grupos_protocolo.id" , "prt_grupos_protocolo.descricao",
+ "prt_grupos_protocolo.ordem"},
+ new Field( "prt_elementos_protocolo.empresa_id" ).isEqual( empresaID ).and(
+ new Field( "prt_elementos_protocolo.tipo_elemento_protocolo_id" ).isEqual(
+ new Field( "prt_tipos_elementos_protocolo.id" ) ) ).and(
+ new Field( "prt_tipos_elementos_protocolo.grupo_protocolo_id" ).isEqual(
+ new Field( "prt_grupos_protocolo.id" ) ) ).and(
+ new Field( "prt_elementos_protocolo.numero_perfil" ).isEqual( perfil ) ),
+ new String[]{ "prt_grupos_protocolo.ordem" },
+ null );
+ array = executer.executeQuery( select );
+ Vector detalhes = new Vector();
+ Integer oldID = null;
+ for( int n = 0; n < array.columnLength(); n++ )
+ {
+ Integer id = ( Integer ) array.get( n, 0 );
+ if( id.equals( oldID ) )
+ {
+ continue;
+ }
+ oldID = id;
+ String descricao = ( String ) array.get( n, 1 );
+ detalhes.add( new MappableObject( id, descricao ) );
+ }
+ return ( IDObject[] ) detalhes.toArray( new IDObject[ detalhes.size() ] );
+ }
+
+ public void setDetalhesRealziadosForMarcacao( Integer marcacaoID, Integer detalhes[] )
+ throws Exception
+ {
+ Delete delete =
+ new Delete( "marcacoes_grupos_realizados",
+ new Field( "marcacao_trabalhador_id" ).isEqual( marcacaoID ) );
+ executer.executeQuery( delete );
+ Insert insert =
+ new Insert( "marcacoes_grupos_realizados",
+ new Assignment[]{
+ new Assignment( new Field( "marcacao_trabalhador_id" ), marcacaoID ),
+ new Assignment( new Field( "grupo_protocolo_id" ), detalhes ) } );
+ executer.executeQuery( insert, null );
+ }
+
+ public Integer[] getDetalhesRealizadosForMarcacao( Integer marcacaoID )
+ throws Exception
+ {
+ Select select =
+ new Select( new String[]{ "marcacoes_grupos_realizados" },
+ new String[]{ "grupo_protocolo_id" },
+ new Field( "marcacao_trabalhador_id" ).isEqual( marcacaoID ) );
+ Virtual2DArray array = executer.executeQuery( select );
+ Integer ids[] = new Integer[ array.columnLength() ];
+ for( int n = 0; n < ids.length; n++ )
+ {
+ ids[ n ] = ( Integer ) array.get( n, 0 );
+ }
+ return ids;
+ }
+
+ public void deleteDetalhesRealziadosForMarcacao( Integer marcacaoID )
+ throws Exception
+ {
+ Delete delete =
+ new Delete( "marcacoes_grupos_realizados",
+ new Field( "marcacao_trabalhador_id" ).isEqual( marcacaoID ) );
+ executer.executeQuery( delete );
+ }
+
+ public Object[][] getExamesTrabalhador( Integer trabalhadorID )
+ throws Exception
+ {
+ Select select =
+ new Select( new String[]{ "marcacoes_trabalhador" },
+ new String[]{ "id", "data", "estado" },
+ new Field( "trabalhador_id" ).isEqual( trabalhadorID ).and(
+ new Field( "tipo" ).isEqual( new Integer( Marcacao.TIPO_MARCACAO_TRABALHADOR_EXAMES ) ) ),
+ new String[]{ "data desc" },
+ null );
+ Virtual2DArray array = executer.executeQuery( select );
+ Object data[][] = array.getObjects();
+ for( int n = 0; n < data.length; n++ )
+ {
+ int estado = ( ( Integer ) data[ n ][ 2 ] ).intValue();
+ data[ n ][ 2 ] = ESTADOS_EXAME_STR[ estado ];
+ }
+ return data;
+ }
+
+ public Object[][] getConsultasTrabalhador( Integer trabalhadorID )
+ throws Exception
+ {
+ Select select =
+ new Select( new String[]{ "marcacoes_trabalhador" },
+ new String[]{ "id", "data", "estado" },
+ new Field( "trabalhador_id" ).isEqual( trabalhadorID ).and(
+ new Field( "tipo" ).isEqual( new Integer( Marcacao.TIPO_MARCACAO_TRABALHADOR_CONSULTA ) ) ),
+ new String[]{ "data desc" },
+ null );
+ Virtual2DArray array = executer.executeQuery( select );
+ Object data[][] = array.getObjects();
+ for( int n = 0; n < data.length; n++ )
+ {
+ int estado = ( ( Integer ) data[ n ][ 2 ] ).intValue();
+ data[ n ][ 2 ] = ESTADOS_CONSULTA_STR[ estado ];
+ }
+
+ return data;
+ }
+
+ public ColumnizedMappable[] getAllEmpresas()
+ throws Exception
+ {
+ Select select =
+ new Select( new String[]{ "empresas" },
+ new String[]{ "id", "designacao_social", "designacao_social_plain" },
+ new Field( "inactivo" ).isDifferent( "y" ),
+ new String[]{ "designacao_social_plain" },
+ null );
+ Virtual2DArray array = executer.executeQuery( select );
+ ColumnizedMappable empresas[] = new ColumnizedMappable[ array.columnLength() ];
+ for( int n = 0; n < empresas.length; n++ )
+ {
+ Integer id = ( Integer ) array.get( n, 0 );
+ String designacao = ( String ) array.get( n, 1 );
+ empresas[ n ] = new ColumnizedMappable( id, designacao );
+ }
+ return empresas;
+ }
+
+ public ColumnizedMappable[] getAllEstabelecimentosForEmpresa( Integer empresaID )
+ throws Exception
+ {
+ Select select =
+ new Select( new String[]{ "estabelecimentos" },
+ new String[]{ "id", "nome", "nome_plain" },
+ new Field( "empresa_id" ).isEqual( empresaID ).and(
+ new Field( "inactivo" ).isDifferent( "y" ) ),
+ new String[]{ "nome_plain" },
+ null );
+ Virtual2DArray array = executer.executeQuery( select );
+ ColumnizedMappable estabelecimentos[] = new ColumnizedMappable[ array.columnLength() ];
+ for( int n = 0; n < estabelecimentos.length; n++ )
+ {
+ Integer id = ( Integer ) array.get( n, 0 );
+ String nome = ( String ) array.get( n, 1 );
+ estabelecimentos[ n ] = new ColumnizedMappable( id, nome );
+ }
+ return estabelecimentos;
+ }
+
+ public ColumnizedMappable[] getAllTrabalhadoresForEstabelecimento( Integer estabelecimentoID )
+ throws Exception
+ {
+ Select select =
+ new Select( new String[]{ "trabalhadores" },
+ new String[]{ "id", "nome", "nome_plain" },
+ new Field( "estabelecimento_id" ).isEqual( estabelecimentoID ).and(
+ new Field( "inactivo" ).isDifferent( "y" ) ),
+ new String[]{ "nome_plain" },
+ null );
+ Virtual2DArray array = executer.executeQuery( select );
+ ColumnizedMappable trabalhadores[] = new ColumnizedMappable[ array.columnLength() ];
+ for( int n = 0; n < trabalhadores.length; n++ )
+ {
+ Integer id = ( Integer ) array.get( n, 0 );
+ String nome = ( String ) array.get( n, 1 );
+ trabalhadores[ n ] = new ColumnizedMappable( id, nome );
+ }
+ return trabalhadores;
+ }
+
+ /**
+ * Devolve o identificador da consulta de um trabalhador para um dado motivo e dia.
+ *
+ * @param trabalhadorID o identificador do trabalhador
+ * @param motivo o identificador do motivo da marcacao
+ * @param data a data da marcacao
+ * @return o identificador da consulta ou null se não houver nenhuma
+ * @throws Exception se houver um erro na ligaço à Base de Dados
+ */
+ public Integer getConsultaIDByTrabalhadorMotivoAndDate( Integer trabalhadorID, Integer motivo, Date data )
+ throws Exception
+ {
+ Select select =
+ new Select( new String[]{ "marcacoes_trabalhador" },
+ new String[]{ "id" },
+ new Field( "trabalhador_id" ).isEqual( trabalhadorID ).and(
+ new Field( "tipo" ).isEqual( new Integer( Marcacao.TIPO_MARCACAO_TRABALHADOR_CONSULTA ) ) ).and(
+ new Field( "data" ).isEqual( data ) ).and(
+ new Field( "motivo" ).isEqual( motivo ) ) );
+ Virtual2DArray array = executer.executeQuery( select );
+ Integer id;
+ if( array.columnLength() == 0 || array.get( 0, 0 ) == null )
+ {
+ id = null;
+ }
+ else
+ {
+ id = ( Integer ) array.get( 0, 0 );
+ }
+ return id;
+ }
+
+ /**
+ * Devolve o identificador da primeira consulta de um trabalhador n&ão realizada depois de um diapara um dado motivo.
+ *
+ * @param trabalhadorID o identificador do trabalhador
+ * @param motivo o identificador do motivo da marcacao
+ * @param data a data de início de procura
+ * @return o identificador da consulta ou null se não houver nenhuma
+ * @throws Exception se houver um erro na ligaço à Base de Dados
+ */
+ public Integer getProximaConsultaIDByTrabalhadorMotivoAndDate( Integer trabalhadorID, Integer motivo, Date data )
+ throws Exception
+ {
+ Select select =
+ new Select( new String[]{ "marcacoes_trabalhador" },
+ new String[]{ "id", "data" },
+ new Field( "trabalhador_id" ).isEqual( trabalhadorID ).and(
+ new Field( "tipo" ).isEqual( new Integer( Marcacao.TIPO_MARCACAO_TRABALHADOR_CONSULTA ) ) ).and(
+ new Field( "data" ).isGreater( data ) ).and(
+ new Field( "motivo" ).isEqual( motivo ) ).and(
+ new Field( "estado" ).isEqual( new Integer( 0 ) ) ),
+ new String[]{ "data" },
+ null );
+ Virtual2DArray array = executer.executeQuery( select );
+ Integer id;
+ if( array.columnLength() == 0 || array.get( 0, 0 ) == null )
+ {
+ id = null;
+ }
+ else
+ {
+ id = ( Integer ) array.get( 0, 0 );
+ }
+ return id;
+ }
+}
diff --git a/trunk/siprp/medicina/MedicinaUpperPanel.java b/trunk/siprp/medicina/MedicinaUpperPanel.java
new file mode 100644
index 00000000..79b0aaf1
--- /dev/null
+++ b/trunk/siprp/medicina/MedicinaUpperPanel.java
@@ -0,0 +1,254 @@
+/*
+ * MedicinaUpperPanel.java
+ *
+ * Created on February 1, 2006, 6:48 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package siprp.medicina;
+
+import java.awt.*;
+import javax.swing.*;
+import javax.swing.event.*;
+import java.util.*;
+
+import com.evolute.utils.*;
+import com.evolute.utils.dataui.*;
+import com.evolute.utils.tables.*;
+import com.evolute.utils.ui.*;
+
+/**
+ *
+ * @author fpalma
+ */
+public class MedicinaUpperPanel extends JPanel
+ implements ListSelectionListener, ControllableComponent
+{
+ protected BaseTable empresasTable;
+ protected VectorTableModel empresasModel;
+ protected BaseTable estabelecimentosTable;
+ protected VectorTableModel estabelecimentosModel;
+ protected BaseTable trabalhadoresTable;
+ protected VectorTableModel trabalhadoresModel;
+
+ protected MedicinaDataProvider provider;
+
+ protected final Vector listeners;
+
+ protected boolean editing = false;
+
+ /** Creates a new instance of MedicinaUpperPanel */
+ public MedicinaUpperPanel()
+ throws Exception
+ {
+ provider = ( MedicinaDataProvider ) MedicinaDataProvider.getProvider();
+ listeners = new Vector();
+ setupComponents();
+ }
+
+ private void setupComponents()
+ throws Exception
+ {
+ empresasModel = new VectorTableModel( new String[]{ "empresas" } );
+ empresasTable = new BaseTable( empresasModel );
+ empresasTable.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
+ empresasTable.setNonResizableNorReordable();
+ JScrollPane empresasScroll =
+ new JScrollPane( empresasTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
+ JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
+ empresasTable.getSelectionModel().addListSelectionListener( this );
+ estabelecimentosModel = new VectorTableModel( new String[]{ "estabelecimentos" } );
+ estabelecimentosTable = new BaseTable( estabelecimentosModel );
+ estabelecimentosTable.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
+ estabelecimentosTable.setNonResizableNorReordable();
+ JScrollPane estabelecimentosScroll =
+ new JScrollPane( estabelecimentosTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
+ JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
+ estabelecimentosTable.getSelectionModel().addListSelectionListener( this );
+ trabalhadoresModel = new VectorTableModel( new String[]{ "trabalhadores" } );
+ trabalhadoresTable = new BaseTable( trabalhadoresModel );
+ trabalhadoresTable.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
+ trabalhadoresTable.setNonResizableNorReordable();
+ JScrollPane trabalhadoresScroll =
+ new JScrollPane( trabalhadoresTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
+ JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
+ trabalhadoresTable.getSelectionModel().addListSelectionListener( this );
+
+ GridBagLayout gridbag = new GridBagLayout();
+ setLayout( gridbag );
+ GridBagConstraints constraints = new GridBagConstraints();
+ constraints.insets = new Insets( 1, 1, 1, 1 );
+ constraints.fill = GridBagConstraints.BOTH;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ constraints.weightx = 0.5;
+ constraints.weighty = 0.5;
+
+ gridbag.setConstraints( empresasScroll, constraints );
+
+ constraints.gridwidth = GridBagConstraints.REMAINDER;
+ gridbag.setConstraints( estabelecimentosScroll, constraints );
+
+ constraints.weightx = 1;
+ constraints.gridheight = GridBagConstraints.REMAINDER;
+ gridbag.setConstraints( trabalhadoresScroll, constraints );
+
+ add( empresasScroll );
+ add( estabelecimentosScroll );
+ add( trabalhadoresScroll );
+
+ ColumnizedMappable empresas[] = provider.getAllEmpresas();
+ Vector values = empresasModel.getValues();
+ values.addAll( Arrays.asList( empresas ) );
+ empresasModel.setValues( values );
+ }
+
+ public void valueChanged( ListSelectionEvent e )
+ {
+ Object source = e.getSource();
+ if( e.getValueIsAdjusting() )
+ {
+ return;
+ }
+ if( source.equals( empresasTable.getSelectionModel() ) )
+ {
+ carregarEstabelecimentos();
+ }
+ else if( source.equals( estabelecimentosTable.getSelectionModel() ) )
+ {
+ carregarTrabalhadores();
+ }
+ else if( source.equals( trabalhadoresTable.getSelectionModel() ) )
+ {
+ notifyListeners( e );
+ }
+ }
+
+ protected void carregarEstabelecimentos()
+ {
+ estabelecimentosTable.clearSelection();
+ int selected = empresasTable.getSelectedRow();
+ estabelecimentosModel.clearAll();
+ if( selected > -1 )
+ {
+ try
+ {
+ Integer empresaID = ( ( ColumnizedMappable ) empresasModel.getRowAt( selected ) ).getID();
+ ColumnizedMappable estabelecimentos[] = provider.getAllEstabelecimentosForEmpresa( empresaID);
+ Vector values = estabelecimentosModel.getValues();
+ values.addAll( Arrays.asList( estabelecimentos ) );
+ estabelecimentosModel.setValues( values );
+ }
+ catch( Exception ex )
+ {
+ DialogException.showExceptionMessage( ex, "Erro a carregar os estabelecimentos.", true );
+ estabelecimentosModel.clearAll();
+ }
+ }
+ }
+
+ protected void carregarTrabalhadores()
+ {
+ trabalhadoresTable.clearSelection();
+ int selected = estabelecimentosTable.getSelectedRow();
+ trabalhadoresModel.clearAll();
+ if( selected > -1 )
+ {
+ try
+ {
+ Integer estabelecimentoID = ( ( ColumnizedMappable ) estabelecimentosModel.getRowAt( selected ) ).getID();
+ ColumnizedMappable trabalhadores[] = provider.getAllTrabalhadoresForEstabelecimento( estabelecimentoID );
+ Vector values = trabalhadoresModel.getValues();
+ values.addAll( Arrays.asList( trabalhadores ) );
+ trabalhadoresModel.setValues( values );
+ }
+ catch( Exception ex )
+ {
+ DialogException.showExceptionMessage( ex, "Erro a carregar trabalhadores.", true );
+ trabalhadoresModel.clearAll();
+ }
+ }
+ }
+
+ protected void notifyListeners( ListSelectionEvent e )
+ {
+ for( int n = 0; n < listeners.size(); n++ )
+ {
+ ListSelectionEvent event =
+ new ListSelectionEvent( this, e.getFirstIndex(), e.getLastIndex(), e.getValueIsAdjusting() );
+ ( ( ListSelectionListener ) listeners.elementAt( n ) ).valueChanged( event );
+ }
+ }
+
+ public void addListSelectionListener( ListSelectionListener listener )
+ {
+ listeners.add( listener );
+ }
+
+ public void removeSelectionListener( ListSelectionListener listener )
+ {
+ listeners.remove( listener );
+ }
+
+ public void clear()
+ {
+// empresasTable.clearSelection();
+ }
+
+ public void fill( Object value )
+ {
+ if( value == null )
+ {
+ clear();
+ }
+ Integer ids[] = ( Integer [] ) value;
+ for( int n = 0; n < empresasTable.getRowCount(); n++ )
+ {
+ if( ( ( ColumnizedMappable ) empresasModel.getRowAt( n ) ).getID().equals( ids[ 0 ] ) )
+ {
+ empresasTable.setRowSelectionInterval( n, n );
+ break;
+ }
+ }
+
+ for( int n = 0; n < estabelecimentosTable.getRowCount(); n++ )
+ {
+ if( ( ( ColumnizedMappable ) estabelecimentosModel.getRowAt( n ) ).getID().equals( ids[ 1 ] ) )
+ {
+ estabelecimentosTable.setRowSelectionInterval( n, n );
+ break;
+ }
+ }
+
+ for( int n = 0; n < trabalhadoresTable.getRowCount(); n++ )
+ {
+ if( ( ( ColumnizedMappable ) trabalhadoresModel.getRowAt( n ) ).getID().equals( ids[ 2 ] ) )
+ {
+ trabalhadoresTable.setRowSelectionInterval( n, n );
+ break;
+ }
+ }
+ }
+
+ public Object save()
+ {
+ int empresaSelected = empresasTable.getSelectedRow();
+ int estabelecimentoSelected = estabelecimentosTable.getSelectedRow();
+ int trabalhadorSelected = trabalhadoresTable.getSelectedRow();
+ return new Integer[]{
+ empresaSelected == -1 ? null : ( ( ColumnizedMappable ) empresasModel.getRowAt( empresaSelected ) ).getID(),
+ estabelecimentoSelected == -1 ? null : ( ( ColumnizedMappable ) estabelecimentosModel.getRowAt( estabelecimentoSelected ) ).getID(),
+ trabalhadorSelected == -1 ? null : ( ( ColumnizedMappable ) trabalhadoresModel.getRowAt( trabalhadorSelected ) ).getID()
+ };
+ }
+
+ public void setEnabled( boolean enable )
+ {
+ editing = !enable;
+ empresasTable.setEnabled( enable );
+ estabelecimentosTable.setEnabled( enable );
+ trabalhadoresTable.setEnabled( enable );
+ }
+}
diff --git a/trunk/siprp/medicina/MedicinaWindow.java b/trunk/siprp/medicina/MedicinaWindow.java
new file mode 100644
index 00000000..0e5a0658
--- /dev/null
+++ b/trunk/siprp/medicina/MedicinaWindow.java
@@ -0,0 +1,686 @@
+/*
+ * MedicinaWindow.java
+ *
+ * Created on 17 de Janeiro de 2006, 19:43
+ *
+ * To change this template, choose Tools | Options and locate the template under
+ * the Source Creation and Management node. Right-click the template and choose
+ * Open. You can then make changes to the template in the Source Editor.
+ */
+
+package siprp.medicina;
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import javax.swing.event.*;
+import java.text.*;
+import java.util.*;
+
+import com.evolute.utils.*;
+import com.evolute.utils.arrays.*;
+import com.evolute.utils.data.*;
+import com.evolute.utils.jdo.*;
+import com.evolute.utils.ui.*;
+import com.evolute.utils.ui.panel.*;
+import com.evolute.utils.ui.search.*;
+import com.evolute.utils.ui.text.*;
+import com.evolute.utils.ui.window.*;
+
+import siprp.*;
+import siprp.clientes.*;
+import siprp.data.*;
+/**
+ *
+ * @author fpalma
+ */
+public class MedicinaWindow extends TabbedWindow
+ implements ActionListener, ListSelectionListener
+{
+ private static int iPermissionArray[][] =
+ new int[][]{ {},
+ { NEW_INDEX, EDIT_INDEX, SAVE_INDEX, DELETE_INDEX, CANCEL_INDEX },
+ { NEW_INDEX, EDIT_INDEX, SAVE_INDEX, DELETE_INDEX, CANCEL_INDEX } };
+
+ private static final int TAB_CONSULTA = 0;
+ private static final int TAB_EXAME = 1;
+
+ private static final int INDEX_MAIN = 0;
+ private static final int INDEX_CONSULTA = 1;
+ private static final int INDEX_EXAME = 2;
+
+ private static final String tabNames[] =
+ new String[]{ "Consultas", "Exames" };
+
+ private static final DateFormat DATE_FORMAT =
+ DateFormat.getDateInstance( DateFormat.SHORT, new Locale( "PT", "pt" ) );
+
+ protected MedicinaDataProvider provider;
+ protected FichaDataProvider fichaProvider;
+ protected JDOProvider JDO;
+ protected SIPRPTracker tracker;
+
+ protected MedicinaUpperPanel upperPanel;
+ protected MarcacaoConsultaPanel marcacaoConsultaPanel;
+ protected TableEditorPanel marcacaoConsultaEditorPanel;
+ protected MarcacaoExamePanel marcacaoExamePanel;
+ protected TableEditorPanel marcacaoExameEditorPanel;
+ protected CheckBoxPanel detalhesExamePanel;
+
+ protected Integer empresaID;
+ protected String empresa;
+ protected Integer estabelecimentoID;
+ protected String estabelecimento;
+ protected Integer trabalhadorID;
+ protected TrabalhadorData trabalhador;
+ protected boolean estado[] = new boolean[]{ false, false };
+
+ /** Creates a new instance of MedicinaWindow */
+ public MedicinaWindow()
+ throws Exception
+ {
+ super( new MedicinaUpperPanel(), tabNames, 0.7, createPermissions( iPermissionArray ) );
+ upperPanel = ( MedicinaUpperPanel ) getUpperPanel();
+ provider = ( MedicinaDataProvider ) MedicinaDataProvider.getProvider();
+ fichaProvider = ( FichaDataProvider ) FichaDataProvider.getProvider();
+ JDO = ( JDOProvider ) Singleton.getInstance( Singleton.DEFAULT_JDO_PROVIDER );
+ setupComponents();
+ setExtendedState(getExtendedState() | MAXIMIZED_BOTH);
+ }
+
+ private void setupComponents()
+ throws Exception
+ {
+ setTitle( "Medicina" );
+ setupConsultaComponents();
+ setupExameComponents();
+ upperPanel.addListSelectionListener( this );
+ }
+
+ private void setupConsultaComponents()
+ {
+ JPanel panel = getTab( TAB_CONSULTA );
+
+ panel.setBorder(
+ BorderFactory.createTitledBorder(
+ BorderFactory.createEtchedBorder(), "Consultas" ) );
+
+ changeGroupName( INDEX_CONSULTA, "Consultas" );
+ setActionName( INDEX_CONSULTA, NEW_INDEX, "Nova" );
+ setActionTooltip( INDEX_CONSULTA, NEW_INDEX, "Nova" );
+ JPanel toolbar = getToolbarPanel( INDEX_CONSULTA );
+
+ GridBagLayout gridbag = new GridBagLayout();
+ GridBagConstraints constraints = new GridBagConstraints();
+ panel.setLayout( gridbag );
+ constraints.insets = new Insets( 2, 2, 2, 2 );
+ constraints.fill = GridBagConstraints.BOTH;
+ constraints.gridwidth = GridBagConstraints.REMAINDER;
+ constraints.weightx = 1.0;
+
+ gridbag.setConstraints( toolbar, constraints );
+ panel.add( toolbar );
+
+ constraints.gridheight = 1;
+ constraints.weighty = 1.0;
+ try
+ {
+ marcacaoConsultaEditorPanel =
+ new TableEditorPanel( new String[]{ "Data",
+ "Estado" },
+ new int[]{0,2}, new int[]{0,0},
+ 0.0, 1.0, new Dimension( 350, 100 ) );
+ marcacaoConsultaPanel = new MarcacaoConsultaPanel();
+ new CopyPasteHandler( marcacaoConsultaPanel.getObservacoesText() );
+ marcacaoConsultaEditorPanel.addComponent( marcacaoConsultaPanel,
+ new int[]{0,2}, new int[]{1,2},
+ 1.0, 1.0 );
+ marcacaoConsultaEditorPanel.addListSelectionListener( new ListSelectionListener(){
+ public void valueChanged(javax.swing.event.ListSelectionEvent listSelectionEvent)
+ {
+ if( marcacaoConsultaEditorPanel.getID() != null )
+ {
+ reload(INDEX_CONSULTA);
+ select(INDEX_CONSULTA);
+ }
+ else
+ {
+ clear( INDEX_CONSULTA );
+ }
+ }
+ });
+ }catch( Exception ex )
+ {
+ DialogException.showException( ex );
+ return;
+ }
+ gridbag.setConstraints( marcacaoConsultaEditorPanel, constraints );
+ panel.add( marcacaoConsultaEditorPanel );
+ marcacaoConsultaPanel.getEmailButton().addActionListener( this );
+ }
+
+ private void setupExameComponents()
+ {
+ JPanel panel = getTab( TAB_EXAME );
+
+ panel.setBorder(
+ BorderFactory.createTitledBorder(
+ BorderFactory.createEtchedBorder(), "Exames" ) );
+
+ changeGroupName( INDEX_EXAME, "Exames" );
+ JPanel toolbar = getToolbarPanel( INDEX_EXAME );
+
+ GridBagLayout gridbag = new GridBagLayout();
+ GridBagConstraints constraints = new GridBagConstraints();
+ panel.setLayout( gridbag );
+ constraints.insets = new Insets( 2, 2, 2, 2 );
+ constraints.fill = GridBagConstraints.BOTH;
+ constraints.gridwidth = GridBagConstraints.REMAINDER;
+ constraints.weightx = 1.0;
+
+ gridbag.setConstraints( toolbar, constraints );
+ panel.add( toolbar );
+
+ constraints.gridheight = 1;
+ constraints.weighty = 1.0;
+ try
+ {
+ marcacaoExameEditorPanel =
+ new TableEditorPanel( new String[]{ "Data",
+ "Estado" },
+ new int[]{0,2}, new int[]{0,0},
+ 0.0, 1.0, new Dimension( 350, 100 ) );
+ marcacaoExamePanel = new MarcacaoExamePanel();
+ new CopyPasteHandler( marcacaoExamePanel.getObservacoesText() );
+ marcacaoExameEditorPanel.addComponent( marcacaoExamePanel,
+ new int[]{0,2}, new int[]{1,2},
+ 1.0, 1.0 );
+ marcacaoExameEditorPanel.addListSelectionListener( new ListSelectionListener(){
+ public void valueChanged(javax.swing.event.ListSelectionEvent listSelectionEvent)
+ {
+ if( marcacaoExameEditorPanel.getID() != null )
+ {
+ reload(INDEX_EXAME);
+ select(INDEX_EXAME);
+ }
+ else
+ {
+ clear( INDEX_EXAME );
+ }
+ }
+ });
+ }catch( Exception ex )
+ {
+ DialogException.showException( ex );
+ return;
+ }
+ gridbag.setConstraints( marcacaoExameEditorPanel, constraints );
+ panel.add( marcacaoExameEditorPanel );
+ marcacaoExamePanel.getEmailButton().addActionListener( this );
+ }
+
+ public boolean save(int index)
+ {
+ Date data;
+ switch( index )
+ {
+ case INDEX_EXAME:
+ MarcacaoTrabalhadorData exame = ( MarcacaoTrabalhadorData ) marcacaoExamePanel.save();
+ data = ( Date ) exame.get( MarcacaoTrabalhadorData.DATA );
+ if( data == null )
+ {
+ JOptionPane.showMessageDialog( this, "Tem de preencher uma data para os exames.",
+ "Erro", JOptionPane.ERROR_MESSAGE );
+ return false;
+ }
+ exame.set( MarcacaoTrabalhadorData.TIPO,
+ new Integer( Marcacao.TIPO_MARCACAO_TRABALHADOR_EXAMES ) );
+ exame.set( MarcacaoTrabalhadorData.TRABALHADOR, trabalhador );
+ try
+ {
+ exame.set( MarcacaoTrabalhadorData.REALIZADA,
+ ( ( Integer )exame.get( MarcacaoTrabalhadorData.ESTADO ) ).intValue() ==
+ provider.ESTADO_REALIZADO ? "y" : "n" );
+ exame.save();
+ Integer exameID = ( Integer ) exame.get( MarcacaoTrabalhadorData.ID );
+ Integer detalhesRealizados[] = detalhesExamePanel.getSelected();
+ provider.setDetalhesRealziadosForMarcacao( exameID, detalhesRealizados );
+ }
+ catch( Exception ex )
+ {
+ DialogException.showExceptionMessage( ex, "Erro a gravar", true );
+ return false;
+ }
+
+ break;
+
+ case INDEX_CONSULTA:
+ MarcacaoTrabalhadorData consulta = ( MarcacaoTrabalhadorData ) marcacaoConsultaPanel.save();
+ data = ( Date ) consulta.get( MarcacaoTrabalhadorData.DATA );
+ if( data == null )
+ {
+ JOptionPane.showMessageDialog( this, "Tem de preencher uma data para a consulta.",
+ "Erro", JOptionPane.ERROR_MESSAGE );
+ return false;
+ }
+ consulta.set( MarcacaoTrabalhadorData.TIPO,
+ new Integer( Marcacao.TIPO_MARCACAO_TRABALHADOR_CONSULTA ) );
+ consulta.set( MarcacaoTrabalhadorData.TRABALHADOR, trabalhador );
+ try
+ {
+ consulta.set( MarcacaoTrabalhadorData.REALIZADA,
+ ( ( Integer )consulta.get( MarcacaoTrabalhadorData.ESTADO ) ).intValue() ==
+ provider.ESTADO_REALIZADO ? "y" : "n" );
+ consulta.save();
+ }
+ catch( Exception ex )
+ {
+ DialogException.showExceptionMessage( ex, "Erro a gravar", true );
+ return false;
+ }
+ break;
+ }
+ reload( INDEX_MAIN );
+ return true;
+ }
+
+ public boolean delete(int index)
+ {
+ int option = JOptionPane.showConfirmDialog( this, "Tem a certeza que quer apagar a marca\u00e7\u00e3o?",
+ "Apagar", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE );
+ if( option == 0 )
+ {
+ switch( index )
+ {
+ case INDEX_CONSULTA:
+ MarcacaoTrabalhadorData consulta = ( MarcacaoTrabalhadorData ) marcacaoConsultaPanel.save();
+ try
+ {
+ consulta.delete();
+ }
+ catch( Exception ex )
+ {
+ DialogException.showExceptionMessage( ex, "Erro a apagar.", true );
+ return false;
+ }
+ break;
+
+ case INDEX_EXAME:
+ MarcacaoTrabalhadorData exame = ( MarcacaoTrabalhadorData ) marcacaoExamePanel.save();
+ try
+ {
+ exame.delete();
+ }
+ catch( Exception ex )
+ {
+ DialogException.showExceptionMessage( ex, "Erro a apagar.", true );
+ return false;
+ }
+ break;
+ }
+ reload( INDEX_MAIN );
+ return true;
+ }
+ return false;
+ }
+
+ public void clear(int index)
+ {
+ switch( index )
+ {
+ case INDEX_MAIN:
+ empresaID = null;
+ empresa = null;
+ estabelecimentoID = null;
+ estabelecimento = null;
+ trabalhadorID = null;
+ trabalhador = null;
+ upperPanel.clear();
+ marcacaoExameEditorPanel.clear();
+ marcacaoConsultaEditorPanel.clear();
+// marcacaoExamePanel.getDetalhesPanel().removeAll();
+ detalhesExamePanel = null;
+ break;
+
+ case INDEX_CONSULTA:
+ marcacaoConsultaPanel.clear();
+ marcacaoConsultaPanel.getEmailButton().setText( "Enviar email" );
+ break;
+
+ case INDEX_EXAME:
+ marcacaoExamePanel.clear();
+ marcacaoExamePanel.getEmailButton().setText( "Enviar email" );
+ if( detalhesExamePanel != null )
+ {
+ detalhesExamePanel.clear();
+ }
+ break;
+ }
+ }
+
+ public void enableComponents(int index, boolean enable)
+ {
+ switch( index )
+ {
+ case INDEX_MAIN:
+
+ break;
+
+ case INDEX_EXAME:
+ marcacaoExamePanel.setEnabled( enable );
+ marcacaoExamePanel.getEmailButton().setEnabled( enable );
+ if( detalhesExamePanel != null )
+ {
+ detalhesExamePanel.setEnabled( enable );
+ }
+ upperPanel.setEnabled( !enable );
+ estado[ 0 ] = enable;
+ break;
+
+ case INDEX_CONSULTA:
+ marcacaoConsultaPanel.setEnabled( enable );
+ marcacaoConsultaPanel.getEmailButton().setEnabled( enable );
+ upperPanel.setEnabled( !enable );
+ estado[ 1 ] = enable;
+ break;
+ }
+ if( tracker != null )
+ {
+ tracker.getAvisosPanel().setEnabled( (!estado[ 0 ]) && (!estado[1]),
+ AvisoConstants.TIPO_TRABALHADOR );
+ }
+ }
+
+// public boolean searchByName()
+// {
+// fichaProvider.setSearch( FichaDataProvider.SEARCH_EMPRESAS );
+// SearchDialog search;
+//
+// search = new SearchDialog( fichaProvider, null, false, null, true );
+// empresaID = ( Integer )search.getSelected();
+//
+// if( empresaID == null )
+// {
+// return false;
+// }
+//
+// fichaProvider.setSearch( FichaDataProvider.SEARCH_ESTABELECIMENTOS );
+// fichaProvider.setSearchID( FichaDataProvider.SEARCH_EMPRESAS, empresaID.intValue() );
+//
+// search = new SearchDialog( fichaProvider, null, false, null, true );
+// estabelecimentoID = ( Integer )search.getSelected();
+//
+// if( estabelecimentoID == null )
+// {
+// return false;
+// }
+//
+// fichaProvider.setSearch( FichaDataProvider.SEARCH_TRABALHADORES );
+// fichaProvider.setSearchID( FichaDataProvider.SEARCH_ESTABELECIMENTOS, estabelecimentoID.intValue() );
+// search = new SearchDialog( fichaProvider, null, false, null, true );
+// trabalhadorID = ( Integer )search.getSelected();
+//
+// if( trabalhadorID == null )
+// {
+// return false;
+// }
+// reload(0);
+// return true;
+// }
+
+ protected void enableSelect( int index, boolean select )
+ {
+ switch( index )
+ {
+ case INDEX_EXAME:
+ marcacaoExameEditorPanel.setEnabled( select );
+ break;
+
+ case INDEX_CONSULTA:
+ marcacaoConsultaEditorPanel.setEnabled( select );
+ break;
+ }
+ }
+
+ public void reload( int index )
+ {
+ switch( index )
+ {
+ case INDEX_MAIN:
+ try
+ {
+ String nomes[] =
+ provider.getEmpresaEstabelecimento( empresaID, estabelecimentoID );
+ empresa = nomes[ 0 ];
+ estabelecimento = nomes[ 1 ];
+ trabalhador = ( TrabalhadorData ) JDO.load( TrabalhadorData.class, trabalhadorID );
+// upperPanel.getEmpresaText().setText( empresa );
+// upperPanel.getEstabelecimentoText().setText( estabelecimento );
+// upperPanel.getTrabalhadorText().setText( ( String ) trabalhador.get( TrabalhadorData.NOME ) );
+ IDObject detalhesExame[] = provider.getDetalhesValidosTrabalhador( empresaID, trabalhadorID );
+ detalhesExamePanel = new CheckBoxPanel( detalhesExame );
+ JPanel detalhesExameOuterPanel = marcacaoExamePanel.getDetalhesPanel();
+ detalhesExameOuterPanel.setLayout( new GridLayout( 1, 1 ) );
+ detalhesExameOuterPanel.removeAll();
+ detalhesExameOuterPanel.add( detalhesExamePanel );
+ detalhesExameOuterPanel.validate();
+ Object examesTrabalhador[][] = provider.getExamesTrabalhador( trabalhadorID );
+ Object consultasTrabalhador[][] = provider.getConsultasTrabalhador( trabalhadorID );
+ if( examesTrabalhador.length > 0 )
+ {
+ marcacaoExameEditorPanel.setData( new Object2DArray( examesTrabalhador ) );
+ }
+ else
+ {
+ marcacaoExameEditorPanel.clear();
+ }
+ if( consultasTrabalhador.length > 0 )
+ {
+ marcacaoConsultaEditorPanel.setData( new Object2DArray( consultasTrabalhador ) );
+ }
+ else
+ {
+ marcacaoConsultaEditorPanel.clear();
+ }
+ }
+ catch( Exception ex )
+ {
+ DialogException.showExceptionMessage( ex, "Erro a carregar os dados.", true );
+ }
+ break;
+
+ case INDEX_EXAME:
+ Integer exameID = marcacaoExameEditorPanel.getID();
+ if( exameID == null )
+ {
+ return;
+ }
+ try
+ {
+ MarcacaoTrabalhadorData exame =
+ ( MarcacaoTrabalhadorData ) JDO.load( MarcacaoTrabalhadorData.class, exameID );
+ marcacaoExamePanel.fill( exame );
+ Date dataEmailExame = ( Date ) exame.get( MarcacaoTrabalhadorData.DATA_EMAIL );
+ if( dataEmailExame != null )
+ {
+ marcacaoExamePanel.getEmailButton().setText( "Enviar email (" + DATE_FORMAT.format( dataEmailExame ) + ")" );
+ }
+ else
+ {
+ marcacaoExamePanel.getEmailButton().setText( "Enviar email" );
+ }
+ Integer detalhesRealizados[] = provider.getDetalhesRealizadosForMarcacao( exameID );
+ detalhesExamePanel.setSelected( detalhesRealizados );
+ }
+ catch( Exception ex )
+ {
+ DialogException.showExceptionMessage( ex, "Erro a carregar os dados do exame.", true );
+ }
+ break;
+
+ case INDEX_CONSULTA:
+ Integer consultaID = marcacaoConsultaEditorPanel.getID();
+ if( consultaID == null )
+ {
+ return;
+ }
+ try
+ {
+ MarcacaoTrabalhadorData consulta =
+ ( MarcacaoTrabalhadorData ) JDO.load( MarcacaoTrabalhadorData.class, consultaID );
+ marcacaoConsultaPanel.fill( consulta );
+ Date dataEmailConsulta = ( Date ) consulta.get( MarcacaoTrabalhadorData.DATA_EMAIL );
+ if( dataEmailConsulta != null )
+ {
+ marcacaoConsultaPanel.getEmailButton().setText( "Enviar email (" + DATE_FORMAT.format( dataEmailConsulta ) + ")" );
+ }
+ else
+ {
+ marcacaoConsultaPanel.getEmailButton().setText( "Enviar email" );
+ }
+ }
+ catch( Exception ex )
+ {
+ DialogException.showExceptionMessage( ex, "Erro a carregar os dados da consulta.", true );
+ }
+ break;
+ }
+ }
+
+ public void actionPerformed( ActionEvent e )
+ {
+ Object source = e.getSource();
+ if( source.equals( marcacaoExamePanel.getEmailButton() ) )
+ {
+ enviarEmailExame();
+ }
+ else if( source.equals( marcacaoConsultaPanel.getEmailButton() ) )
+ {
+ enviarEmailConsulta();
+ }
+ }
+
+ protected void enviarEmailConsulta()
+ {
+ MarcacaoTrabalhadorData consulta = ( MarcacaoTrabalhadorData ) marcacaoConsultaPanel.save();
+
+ String subject = ( String ) Singleton.getInstance( SingletonConstants.SUBJECT_CONSULTA );
+ String texto = ( String ) Singleton.getInstance( SingletonConstants.LETTER_CONSULTA );
+
+ Date today = new Date();
+ marcacaoConsultaPanel.getEmailButton().setText( "Enviar email (" + DATE_FORMAT.format( today ) + ")" );
+
+ try
+ {
+ enviarEmail( subject, texto, ( Date )consulta.get( MarcacaoTrabalhadorData.DATA ) );
+ consulta.set( Marcacao.DATA_EMAIL, today );
+ }
+ catch( Exception ex )
+ {
+ DialogException.showExceptionMessage( ex, "Erro a enviar mail", true );
+ }
+ }
+
+ protected void enviarEmailExame()
+ {
+ MarcacaoTrabalhadorData exame = ( MarcacaoTrabalhadorData ) marcacaoExamePanel.save();
+
+ String subject = ( String ) Singleton.getInstance( SingletonConstants.SUBJECT_EXAMES );
+ String texto = ( String ) Singleton.getInstance( SingletonConstants.LETTER_EXAMES );
+
+ Date today = new Date();
+ marcacaoExamePanel.getEmailButton().setText( "Enviar email (" + DATE_FORMAT.format( today ) + ")" );
+
+ try
+ {
+ enviarEmail( subject, texto, ( Date )exame.get( MarcacaoTrabalhadorData.DATA ) );
+ exame.set( Marcacao.DATA_EMAIL, today );
+ }
+ catch( Exception ex )
+ {
+ DialogException.showExceptionMessage( ex, "Erro a enviar mail", true );
+ }
+ }
+
+ protected void enviarEmail( String subject, String texto, Date data )
+ throws Exception
+ {
+ String nome = ( String ) trabalhador.get( TrabalhadorData.NOME );
+ String dataStr = DATE_FORMAT.format( data );
+
+ subject = subject.replaceAll( CompanyDataLoader.NOME, nome );
+ texto = texto.replaceAll( CompanyDataLoader.DATA, dataStr );
+ texto = texto.replaceAll( CompanyDataLoader.NOME, nome );
+
+ EstabelecimentoData estabelecimento =
+ ( EstabelecimentoData ) JDO.load( EstabelecimentoData.class, estabelecimentoID );
+ ContactoData contacto = ( ContactoData )estabelecimento.get( EstabelecimentoData.CONTACTO );
+ String mail = "";
+ if( contacto != null )
+ {
+ mail = ( String )contacto.get( ContactoData.EMAIL );
+ }
+
+ if( System.getProperty( "os.name" ).startsWith( "Windows" ) )
+ {
+ mail = mail.replaceAll( " ", "%20" );
+ subject = subject.replaceAll( " ", "%20" );
+ texto = texto.replaceAll( " ", "%20" );
+ Process proc = Runtime.getRuntime().exec( "cmd.exe /c start mailto:\"" + mail
+ + "?subject=" + subject + "&body="
+
+ + texto
+ );
+ }
+ else
+ {
+ mail = mail.replaceAll( " ", "%20" );
+ subject = subject.replaceAll( " ", "%20" );
+ texto = texto.replaceAll( " ", "%20" );
+
+ Process proc = Runtime.getRuntime().exec( new String[]{ "/usr/bin/open", "/Applications/Mail.app", "mailto:" + mail
+ + "?subject=" + subject + "&body="
+ + texto } );
+ }
+ }
+
+ public void valueChanged( ListSelectionEvent e )
+ {
+ Object source = e.getSource();
+ if( source.equals( upperPanel ) )
+ {
+ Integer ids[] = ( Integer [] ) upperPanel.save();
+ empresaID = ids[ 0 ];
+ estabelecimentoID = ids[ 1 ];
+ trabalhadorID = ids[ 2 ];
+ if( ids[ 2 ] == null )
+ {
+ clear( INDEX_MAIN );
+ unselect( INDEX_MAIN );
+ }
+ else
+ {
+ reload( INDEX_MAIN );
+ select( INDEX_MAIN );
+ }
+ }
+ }
+
+ public void setEmpresaAndEstabelecimentoAndTrabalhador( Integer empresaID, Integer estabelecimentoID, Integer trabalhadorID )
+ {
+ if( upperPanel.editing )
+ {
+ JOptionPane.showMessageDialog( this, "Esta janela est\u00e1 em edi\u00e7\u00e3o.", "Erro...",
+ JOptionPane.ERROR_MESSAGE );
+ }
+ else
+ {
+ upperPanel.fill( new Integer[]{ empresaID, estabelecimentoID, trabalhadorID } );
+ }
+ }
+
+ public void setTracker( SIPRPTracker tracker )
+ {
+ this.tracker = tracker;
+ }
+}
diff --git a/trunk/siprp/medicina/Test.java b/trunk/siprp/medicina/Test.java
new file mode 100644
index 00000000..8305609e
--- /dev/null
+++ b/trunk/siprp/medicina/Test.java
@@ -0,0 +1,38 @@
+/*
+ * Test.java
+ *
+ * Created on 17 de Janeiro de 2006, 18:37
+ *
+ * To change this template, choose Tools | Options and locate the template under
+ * the Source Creation and Management node. Right-click the template and choose
+ * Open. You can then make changes to the template in the Source Editor.
+ */
+
+package siprp.medicina;
+
+import java.awt.*;
+import javax.swing.*;
+/**
+ *
+ * @author fpalma
+ */
+public class Test
+{
+
+ public static void main( String args[] )
+ throws Exception
+ {
+ JFrame frm = new MedicinaWindow();
+// frm.getContentPane().setLayout( new GridLayout() );
+// frm.getContentPane().add( new MedicinaUpperPanel() );
+// frm.setSize( new Dimension( 600, 600 ) );
+ frm.setVisible( true );
+ frm.setExtendedState(frm.getExtendedState() | frm.MAXIMIZED_BOTH);
+ }
+
+ /** Creates a new instance of Test */
+ public Test()
+ {
+ }
+
+}
diff --git a/trunk/siprp/medicina/alter.sql b/trunk/siprp/medicina/alter.sql
new file mode 100644
index 00000000..3549ed22
--- /dev/null
+++ b/trunk/siprp/medicina/alter.sql
@@ -0,0 +1,159 @@
+ALTER TABLE empresas ADD a_consultas char(1);
+ALTER TABLE empresas ADD a_exames char(1);
+ALTER TABLE empresas ADD b_consultas char(1);
+ALTER TABLE empresas ADD b_exames char(1);
+ALTER TABLE empresas ADD data_cancelamento DATE;
+
+ALTER TABLE marcacoes_trabalhador ADD motivo INT;
+ALTER TABLE marcacoes_trabalhador ADD estado INT;
+ALTER TABLE marcacoes_trabalhador ADD observacoes VARCHAR( 2048 );
+UPDATE marcacoes_trabalhador SET estado = 2 WHERE realizada = 'y';
+
+
+-- PROTOCOLOS
+
+CREATE TABLE prt_grupos_protocolo
+(
+ id int4 NOT NULL,
+ descricao varchar(255) NOT NULL,
+ descricao_plain varchar(255) NOT NULL,
+ CONSTRAINT grupos_protocolo_pkey PRIMARY KEY (id)
+)
+WITHOUT OIDS;
+ALTER TABLE prt_grupos_protocolo OWNER TO postgres;
+
+
+
+CREATE TABLE prt_tipos_elementos_protocolo
+(
+ id int4 NOT NULL,
+ descricao_plain varchar(255) NOT NULL,
+ descricao varchar(255) NOT NULL,
+ grupo_protocolo_id int4 NOT NULL,
+ CONSTRAINT prt_tipos_elementos_protocolo_pkey PRIMARY KEY (id),
+ CONSTRAINT prt_tipos_elementos_protocolo_grupo_protocolo_id_fkey FOREIGN KEY (grupo_protocolo_id) REFERENCES prt_grupos_protocolo (id) ON UPDATE RESTRICT ON DELETE RESTRICT
+)
+WITHOUT OIDS;
+ALTER TABLE prt_tipos_elementos_protocolo OWNER TO postgres;
+
+
+CREATE TABLE prt_elementos_protocolo
+(
+ id serial NOT NULL,
+ tipo_elemento_protocolo_id int4 NOT NULL,
+ empresa_id int4 NOT NULL,
+ numero_perfil int4 NOT NULL,
+ CONSTRAINT prt_elementos_protocolo_pkey PRIMARY KEY (id),
+ CONSTRAINT prt_elementos_protocolo_empresa_id_fkey FOREIGN KEY (empresa_id) REFERENCES empresas (id) ON UPDATE RESTRICT ON DELETE RESTRICT,
+ CONSTRAINT prt_elementos_protocolo_tipo_elemento_protocolo_id_fkey FOREIGN KEY (tipo_elemento_protocolo_id) REFERENCES prt_tipos_elementos_protocolo (id) ON UPDATE RESTRICT ON DELETE RESTRICT
+)
+WITH OIDS;
+ALTER TABLE prt_elementos_protocolo OWNER TO postgres;
+
+
+CREATE TABLE marcacoes_grupos_realizados
+(
+ id serial NOT NULL,
+ marcacao_trabalhador_id int4 NOT NULL,
+ grupo_protocolo_id int4 NOT NULL,
+ CONSTRAINT marcacoes_grupos_realizados_pkey PRIMARY KEY (id),
+ CONSTRAINT marcacoes_grupos_realizados_grupo_protocolo_id_fkey FOREIGN KEY (grupo_protocolo_id) REFERENCES prt_grupos_protocolo (id) ON UPDATE RESTRICT ON DELETE RESTRICT,
+ CONSTRAINT marcacoes_grupos_realizados_marcacao_trabalhador_id_fkey FOREIGN KEY (marcacao_trabalhador_id) REFERENCES marcacoes_trabalhador (id) ON UPDATE RESTRICT ON DELETE RESTRICT
+)
+WITH OIDS;
+ALTER TABLE marcacoes_grupos_realizados OWNER TO postgres;
+
+INSERT INTO prt_grupos_protocolo( id, descricao, descricao_plain )
+ VALUES( 1, 'Sangue', 'sangue' );
+INSERT INTO prt_grupos_protocolo( id, descricao, descricao_plain )
+ VALUES( 2, 'Urina', 'urina' );
+INSERT INTO prt_grupos_protocolo( id, descricao, descricao_plain )
+ VALUES( 3, 'RX T\\u00f3rax', 'rx torax' );
+INSERT INTO prt_grupos_protocolo( id, descricao, descricao_plain )
+ VALUES( 4, 'Audiograma', 'audiograma' );
+INSERT INTO prt_grupos_protocolo( id, descricao, descricao_plain )
+ VALUES( 5, 'Rastreio Visual', 'rastreio visual' );
+INSERT INTO prt_grupos_protocolo( id, descricao, descricao_plain )
+ VALUES( 6, 'ECG', 'ecg' );
+INSERT INTO prt_grupos_protocolo( id, descricao, descricao_plain )
+ VALUES( 7, 'Espirometria', 'espirometria' );
+INSERT INTO prt_grupos_protocolo( id, descricao, descricao_plain )
+ VALUES( 8, 'Exsudado Nasofar\\u00edngeo', 'exsudado nasofaringeo' );
+INSERT INTO prt_grupos_protocolo( id, descricao, descricao_plain )
+ VALUES( 9, 'Exame Bacteriol\\u00f3gico (Fezes)', 'exame bacteriologico (fezes)' );
+INSERT INTO prt_grupos_protocolo( id, descricao, descricao_plain )
+ VALUES( 10, 'Coprocultura', 'coprocultura' );
+INSERT INTO prt_grupos_protocolo( id, descricao, descricao_plain )
+ VALUES( 11, 'Outros ECDs', 'outros ecds' );
+INSERT INTO prt_grupos_protocolo( id, descricao, descricao_plain )
+ VALUES( 12, 'Outras An\\u00e1lises', 'outras analises' );
+
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 1, 'Hemograma', 'hemograma', 1 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 2, 'Plaquetas', 'plaquetas', 1 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 3, 'VS', 'vs', 1 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 4, 'Glicemia', 'glicemia', 1 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 5, 'Creatinina', 'creatinina', 1 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 6, 'Colesterol Total', 'colesterol total', 1 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 7, 'colesterol hdl', 'Colesterol hdl', 1 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 8, 'Colesterol LDL', 'colesterol ldl', 1 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 9, 'Trigliceridos', 'trigliceridos', 1 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 10, 'Transaminases', 'transaminases', 1 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 11, 'Gama GT', 'gama gt', 1 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 12, 'Ureia', 'ureia', 1 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 13, '\\u00c1cido \\u00darico', 'acido urico', 1 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 14, 'MBE (Chumbo)', 'mbe (chumbo)', 1 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 15, 'MBE (Outros)', 'mbe (outros)', 1 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 16, 'Serologias Hepatite', 'serologias hepatite', 1 );
+
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 17, 'Urina II', 'urina ii', 2 );
+
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 18, 'RX T\\u00f3rax', 'rx torax', 3 );
+
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 19, 'Audiometria', 'audiometria', 4 );
+
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 20, 'Rastreio Visual', 'rastreio visual', 5 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 21, 'ECG', 'ecg', 6 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 22, 'Espirometria', 'espirometria', 7 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 23, 'Exsudado Nasofar\\u00edngeo', 'exsudado nasofaringeo', 8 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 24, 'Exame Bacteriol\\u00f3gico (Fezes)', 'exame bacteriologico (fezes)', 9 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 25, 'Coprocultura', 'coprocultura', 10 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 26, 'Outros ECDs', 'outros ecds', 11 );
+INSERT INTO prt_tipos_elementos_protocolo( id, descricao, descricao_plain, grupo_protocolo_id )
+ values( 27, 'Outras An\\u00e1lises', 'outras analises', 12 );
+
+
+ALTER TABLE prt_grupos_protocolo ADD grupo_real char(1);
+UPDATE prt_grupos_protocolo SET grupo_real='y' WHERE id <= 4;
+UPDATE prt_grupos_protocolo SET grupo_real='n' WHERE id > 4;
+
+ALTER TABLE prt_grupos_protocolo ADD ordem int4;
+UPDATE prt_grupos_protocolo SET ordem=id;
+
+ALTER TABLE prt_tipos_elementos_protocolo ADD ordem int4;
+UPDATE prt_tipos_elementos_protocolo SET ordem=id;
\ No newline at end of file