You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
SIPRP/trunk/siprp/medicina/locais_realizacao/LocaisRealizacaoWindow.java

482 lines
14 KiB

/*
* LocaisRealizacaoWindow.java
*
* Created on February 22, 2007, 10:19 AM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package siprp.medicina.locais_realizacao;
import com.evolute.utils.data.IDObject;
import com.evolute.utils.data.MappableObject;
import com.evolute.utils.tables.BaseTable;
import com.evolute.utils.tables.ColumnizedMappable;
import com.evolute.utils.tables.VectorTableModel;
import com.evolute.utils.tracker.TrackableWindow;
import com.evolute.utils.ui.DialogException;
import com.evolute.utils.ui.calendar.JCalendarPanel;
import info.clearthought.layout.TableLayout;
import info.clearthought.layout.TableLayoutConstraints;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Arrays;
import java.util.Date;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import siprp.data.Marcacao;
import siprp.medicina.prestadores.PrestadoresDataProvider;
/**
*
* @author fpalma
*/
public class LocaisRealizacaoWindow extends JFrame
implements ActionListener, TrackableWindow, ListSelectionListener
{
protected static final Integer PRESTADOR_ID_SIPRP = new Integer( -1 );
protected static final IDObject PRESTADOR_SIPRP = new MappableObject( PRESTADOR_ID_SIPRP, "SIPRP" );
protected JCalendarPanel dataPanel;
protected JButton carregarButton;
protected JButton recarregarPrestadoresButton;
protected VectorTableModel empresasModel;
protected BaseTable empresasTable;
protected VectorTableModel estabelecimentosModel;
protected BaseTable estabelecimentosTable;
protected JLabel numeroConsultasLabel;
protected JComboBox prestadoresConsultasCombo;
protected JButton enviarConsultasButton;
protected JLabel numeroECDsLabel;
protected JComboBox prestadoresECDsCombo;
protected JButton enviarECDsButton;
protected LocaisRealizacaoDataProvider provider;
protected PrestadoresDataProvider prestadoresProvider;
/**
* Creates a new instance of LocaisRealizacaoWindow
*/
public LocaisRealizacaoWindow()
throws Exception
{
provider = LocaisRealizacaoDataProvider.getProvider();
prestadoresProvider = PrestadoresDataProvider.getProvider();
setupComponents();
}
private void setupComponents()
{
setTitle( "Locais de Realiza\u00e7\u00e3o" );
setSize( 1000, 700 );
JLabel dataLabel = new JLabel( "Data" );
dataPanel = new JCalendarPanel( this );
carregarButton = new JButton( "Carregar" );
carregarButton.addActionListener( this );
recarregarPrestadoresButton = new JButton( "Recarregar Prestadores" );
recarregarPrestadoresButton.addActionListener( this );
empresasModel = new VectorTableModel( new String[]{ "empresa" } );
empresasTable = new BaseTable( empresasModel );
empresasTable.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
empresasTable.getSelectionModel().addListSelectionListener( this );
JScrollPane empresasScp = new JScrollPane( empresasTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
estabelecimentosModel = new VectorTableModel( new String[]{ "estabelecimento" } );
estabelecimentosTable = new BaseTable( estabelecimentosModel );
estabelecimentosTable.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
estabelecimentosTable.getSelectionModel().addListSelectionListener( this );
JScrollPane estabelecimentosScp = new JScrollPane( estabelecimentosTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
JLabel consultasLabel = new JLabel( "Consultas " );
numeroConsultasLabel = new JLabel( " " );
numeroConsultasLabel.setForeground( Color.green.darker() );
prestadoresConsultasCombo = new JComboBox();
enviarConsultasButton = new JButton( "Atribuir" );
enviarConsultasButton.addActionListener( this );
JLabel ecdsLabel = new JLabel( "ECDs " );
numeroECDsLabel = new JLabel( " " );
numeroECDsLabel.setForeground( Color.green.darker() );
prestadoresECDsCombo = new JComboBox();
enviarECDsButton = new JButton( "Atribuir" );
enviarECDsButton.addActionListener( this );
dataPanel.addChangeListener( new ChangeListener(){
public void stateChanged(ChangeEvent e)
{
empresasTable.clearSelection();
Vector values = empresasModel.getValues();
values.clear();
empresasModel.setValues( values );
}
} );
getContentPane().setLayout( new BorderLayout( 5, 5 ) );
JPanel upperPanel = new JPanel();
getContentPane().add( upperPanel, BorderLayout.NORTH );
JPanel centerPanel = new JPanel();
getContentPane().add( centerPanel, BorderLayout.CENTER );
upperPanel.setLayout( new FlowLayout( FlowLayout.CENTER ) );
upperPanel.add( dataLabel );
upperPanel.add( dataPanel );
upperPanel.add( carregarButton );
upperPanel.add( recarregarPrestadoresButton );
centerPanel.setLayout( new GridLayout( 1, 3 ) );
centerPanel.add( empresasScp );
centerPanel.add( estabelecimentosScp );
JPanel detalhesPanel = new JPanel();
centerPanel.add( detalhesPanel );
double cols[] =
new double[]{ TableLayout.MINIMUM, TableLayout.PREFERRED, TableLayout.FILL, TableLayout.MINIMUM };
double rows[] =
new double[]{ TableLayout.FILL, TableLayout.MINIMUM, TableLayout.MINIMUM,
TableLayout.FILL };
TableLayout tableLayout = new TableLayout( cols,rows );
detalhesPanel.setLayout( tableLayout );
detalhesPanel.add( consultasLabel, new TableLayoutConstraints( 0, 1 ) );
detalhesPanel.add( numeroConsultasLabel, new TableLayoutConstraints( 1, 1 ) );
detalhesPanel.add( prestadoresConsultasCombo, new TableLayoutConstraints( 2, 1 ) );
detalhesPanel.add( enviarConsultasButton, new TableLayoutConstraints( 3, 1 ) );
detalhesPanel.add( ecdsLabel, new TableLayoutConstraints( 0, 2 ) );
detalhesPanel.add( numeroECDsLabel, new TableLayoutConstraints( 1, 2 ) );
detalhesPanel.add( prestadoresECDsCombo, new TableLayoutConstraints( 2, 2 ) );
detalhesPanel.add( enviarECDsButton, new TableLayoutConstraints( 3, 2 ) );
setDefaultCloseOperation( WindowConstants.DO_NOTHING_ON_CLOSE );
addWindowListener( new WindowAdapter(){
public void windowClosing( WindowEvent e )
{
close();
}
public void windowOpened( WindowEvent e )
{
// setExtendedState( getExtendedState() | MAXIMIZED_BOTH );
}
} );
recarregarPrestadores();
}
public void refresh()
{
}
public void open()
{
setVisible( true );
}
public void close()
{
SwingUtilities.invokeLater( new Runnable() {
public void run()
{
setVisible( false );
dispose();
}
} );
}
public boolean closeIfPossible()
{
close();
return true;
}
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
if( source.equals( carregarButton ) )
{
carregar();
}
else if( source.equals( recarregarPrestadoresButton ) )
{
recarregarPrestadores();
}
else if( source.equals( enviarConsultasButton ) )
{
enviarConsultas();
}
else if( source.equals( enviarECDsButton ) )
{
enviarECDs();
}
}
public void valueChanged(ListSelectionEvent e)
{
Object source = e.getSource();
if( e.getValueIsAdjusting() )
{
return;
}
if( source.equals( empresasTable.getSelectionModel() ) )
{
mudarEmpresa();
}
else if( source.equals( estabelecimentosTable.getSelectionModel() ) )
{
mudarEstabelecimento();
}
}
protected void carregar()
{
empresasTable.clearSelection();
Date data = dataPanel.getDate();
if( data == null )
{
empresasModel.clearAll();
return;
}
try
{
ColumnizedMappable empresas[] = provider.getEmpresasComMarcacoes( data );
Vector values = empresasModel.getValues();
values.clear();
values.addAll( Arrays.asList( empresas ) );
empresasModel.setValues( values );
}
catch( Exception ex )
{
DialogException.showExceptionMessage( ex, "Erro a carregar empresas", true );
}
}
protected void mudarEmpresa()
{
estabelecimentosTable.clearSelection();
Date data = dataPanel.getDate();
int selected = empresasTable.getSelectedRow();
if( data == null || selected == -1 )
{
estabelecimentosModel.clearAll();
return;
}
Integer empresaID = ( ( ColumnizedMappable ) empresasModel.getRowAt( selected ) ).getID();
try
{
ColumnizedMappable estabelecimentos[] =
provider.getEstabelecimentosComMarcacoesByEmpresa( empresaID, data );
Vector values = estabelecimentosModel.getValues();
values.clear();
values.addAll( Arrays.asList( estabelecimentos ) );
estabelecimentosModel.setValues( values );
}
catch( Exception ex )
{
DialogException.showExceptionMessage( ex, "Erro a carregar estabelecimentos", true );
}
}
protected void mudarEstabelecimento()
{
Date data = dataPanel.getDate();
int selectedEstabelecimento = estabelecimentosTable.getSelectedRow();
numeroConsultasLabel.setText( " " );
numeroECDsLabel.setText( " " );
enviarConsultasButton.setEnabled( false );
enviarECDsButton.setEnabled( false );
if( data == null || selectedEstabelecimento == -1 )
{
return;
}
Integer estabelecimentoID = ( ( ColumnizedMappable ) estabelecimentosModel.getRowAt( selectedEstabelecimento ) ).getID();
try
{
int countConsultas =
provider.getNumeroMarcacoesByEstabelecimentoAndTipo( estabelecimentoID,
Marcacao.TIPO_MARCACAO_TRABALHADOR_CONSULTA, data );
int countECDs =
provider.getNumeroMarcacoesByEstabelecimentoAndTipo( estabelecimentoID,
Marcacao.TIPO_MARCACAO_TRABALHADOR_EXAMES, data );
if( countConsultas > 0 )
{
numeroConsultasLabel.setText( "" + countConsultas );
enviarConsultasButton.setEnabled( true );
Integer[] escolhidos =
provider.getPrestadoresIDByEstabelecimentoAndTipo( estabelecimentoID,
Marcacao.TIPO_MARCACAO_TRABALHADOR_CONSULTA, data );
if( escolhidos.length == 1 )
{
numeroConsultasLabel.setForeground( Color.green.darker() );
}
else
{
numeroConsultasLabel.setForeground( Color.red.darker() );
}
int e;
for( e = 0; e < escolhidos.length; e++ )
{
if( escolhidos[ e ] != null )
{
break;
}
}
if( e == escolhidos.length || escolhidos[ e ] == null )
{
prestadoresConsultasCombo.setSelectedIndex( 0 );
}
else
{
for( int p = 0; p < prestadoresConsultasCombo.getItemCount(); p++ )
{
IDObject prestador = ( IDObject ) prestadoresConsultasCombo.getItemAt( p );
if( prestador.getID().equals( escolhidos[ e ] ) )
{
prestadoresConsultasCombo.setSelectedIndex( p );
}
}
}
}
if( countECDs > 0 )
{
numeroECDsLabel.setText( "" + countECDs );
enviarECDsButton.setEnabled( true );
Integer[] escolhidos =
provider.getPrestadoresIDByEstabelecimentoAndTipo( estabelecimentoID,
Marcacao.TIPO_MARCACAO_TRABALHADOR_EXAMES, data );
if( escolhidos.length == 1 )
{
numeroECDsLabel.setForeground( Color.green.darker() );
}
else
{
numeroECDsLabel.setForeground( Color.red.darker() );
}
int e;
for( e = 0; e < escolhidos.length; e++ )
{
if( escolhidos[ e ] != null )
{
break;
}
}
if( e == escolhidos.length || escolhidos[ e ] == null )
{
prestadoresECDsCombo.setSelectedIndex( 0 );
}
else
{
for( int p = 0; p < prestadoresECDsCombo.getItemCount(); p++ )
{
IDObject prestador = ( IDObject ) prestadoresECDsCombo.getItemAt( p );
if( prestador.getID().equals( escolhidos[ e ] ) )
{
prestadoresECDsCombo.setSelectedIndex( e );
}
}
}
}
}
catch( Exception ex )
{
DialogException.showExceptionMessage( ex, "Erro a carregar detalhes", true );
}
}
protected void recarregarPrestadores()
{
try
{
IDObject prestadoresConsultas[] = prestadoresProvider.getPrestadoresConsultasActivos();
IDObject prestadoresECDs[] = prestadoresProvider.getPrestadoresECDsActivos();
prestadoresConsultasCombo.removeAllItems();
prestadoresConsultasCombo.addItem( PRESTADOR_SIPRP );
for( int n = 0; n < prestadoresConsultas.length; n++ )
{
prestadoresConsultasCombo.addItem( prestadoresConsultas[ n ] );
}
prestadoresECDsCombo.removeAllItems();
prestadoresECDsCombo.addItem( PRESTADOR_SIPRP );
for( int n = 0; n < prestadoresECDs.length; n++ )
{
prestadoresECDsCombo.addItem( prestadoresECDs[ n ] );
}
}
catch( Exception ex )
{
DialogException.showExceptionMessage( ex, "Erro a carregar prestadores", true );
}
}
protected void enviarECDs()
{
Date data = dataPanel.getDate();
int selectedEstabelecimento = estabelecimentosTable.getSelectedRow();
if( data == null || selectedEstabelecimento == -1 )
{
return;
}
Integer estabelecimentoID = ( ( ColumnizedMappable ) estabelecimentosModel.getRowAt( selectedEstabelecimento ) ).getID();
try
{
Integer prestadorID = ( ( IDObject ) prestadoresECDsCombo.getSelectedItem() ).getID();
if( PRESTADOR_ID_SIPRP.equals( prestadorID ) )
{
prestadorID = null;
}
provider.setPrestadorIDForEstabelecimentoAndTipo( estabelecimentoID,
Marcacao.TIPO_MARCACAO_TRABALHADOR_EXAMES, data, prestadorID );
}
catch( Exception ex )
{
DialogException.showExceptionMessage( ex, "Erro a atribuir", true );
}
}
protected void enviarConsultas()
{
Date data = dataPanel.getDate();
int selectedEstabelecimento = estabelecimentosTable.getSelectedRow();
if( data == null || selectedEstabelecimento == -1 )
{
return;
}
Integer estabelecimentoID = ( ( ColumnizedMappable ) estabelecimentosModel.getRowAt( selectedEstabelecimento ) ).getID();
try
{
Integer prestadorID = ( ( IDObject ) prestadoresConsultasCombo.getSelectedItem() ).getID();
if( PRESTADOR_ID_SIPRP.equals( prestadorID ) )
{
prestadorID = null;
}
provider.setPrestadorIDForEstabelecimentoAndTipo( estabelecimentoID,
Marcacao.TIPO_MARCACAO_TRABALHADOR_CONSULTA, data, prestadorID );
}
catch( Exception ex )
{
DialogException.showExceptionMessage( ex, "Erro a atribuir", true );
}
}
}