forked from Coded/SIPRP
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
451 lines
14 KiB
451 lines
14 KiB
/*
|
|
* EstabelecimentoPanel.java
|
|
*
|
|
* Created on 14 de Maio de 2004, 12:21
|
|
*/
|
|
|
|
package siprp.clientes;
|
|
|
|
import java.awt.*;
|
|
import java.awt.event.*;
|
|
import javax.swing.*;
|
|
import javax.swing.event.*;
|
|
import java.util.*;
|
|
|
|
import com.evolute.utils.*;
|
|
import com.evolute.utils.data.*;
|
|
import com.evolute.utils.dataui.*;
|
|
import com.evolute.utils.documents.*;
|
|
import com.evolute.utils.jdo.*;
|
|
import com.evolute.utils.tables.*;
|
|
import com.evolute.utils.ui.*;
|
|
import com.evolute.utils.ui.text.*;
|
|
|
|
import siprp.*;
|
|
import siprp.data.*;
|
|
/**
|
|
*
|
|
* @author fpalma
|
|
*/
|
|
public class EstabelecimentoPanel extends JPanel
|
|
implements ControllableComponent, ListSelectionListener, ActionListener
|
|
{
|
|
public static int disables = 0;
|
|
|
|
private JDOProvider JDO;
|
|
|
|
private EstabelecimentoData estabelecimento;
|
|
private ComponentsHashtable components;
|
|
|
|
private EmpresaData empresa;
|
|
|
|
private JTable estabelecimentosTable;
|
|
private JPanel toolbarPanel;
|
|
|
|
private JTextField designacaoText;
|
|
private JTextField moradaText;
|
|
private JTextField localText;
|
|
private JTextField codigoPostalText;
|
|
private ContactoPanel contactoPanel;
|
|
private JTextArea historicoText;
|
|
private JButton marcacoesButton;
|
|
|
|
private JPanel historicoPanel;
|
|
private JPanel listaHistoricoPanel;
|
|
private BaseTable historicoTable;
|
|
private HistoricoEstabelecimentoPanel edicaoHistoricoPanel;
|
|
private CardLayout historicoCardLayout;
|
|
|
|
// private MarcacaoPanel marcacaoPanel;
|
|
private SIPRPTracker tracker;
|
|
|
|
private boolean lastEnable = false;
|
|
|
|
/** Creates a new instance of EstabelecimentoPanel */
|
|
public EstabelecimentoPanel( JPanel toolbarPanel, JTextField designacaoText, JTable estabelecimentosTable )
|
|
{
|
|
this.toolbarPanel = toolbarPanel;
|
|
this.designacaoText = designacaoText;
|
|
this.estabelecimentosTable = estabelecimentosTable;
|
|
JDO = ( JDOProvider ) Singleton.getInstance( Singleton.DEFAULT_JDO_PROVIDER );
|
|
setupComponents();
|
|
setupComponentsHashtable();
|
|
}
|
|
|
|
private void setupComponents()
|
|
{
|
|
JPanel dadosEstabelecimentoPanel = new JPanel();
|
|
JLabel designacaoLabel = new JLabel( "Designa\u00e7\u00e3o" );
|
|
//designacaoText = new JTextField();
|
|
JLabel moradaLabel = new JLabel( "Morada" );
|
|
moradaText = new JTextField();
|
|
JLabel codigoPostalLabel = new JLabel( "C\u00f3digo Postal" );
|
|
codigoPostalText = new JTextField();
|
|
codigoPostalText.setDocument( new MaximumLengthDocument( 8 ) );
|
|
JLabel localLabel = new JLabel( "Local" );
|
|
localText = new JTextField();
|
|
contactoPanel = new ContactoPanel();
|
|
contactoPanel.setBorder( BorderFactory.createTitledBorder(
|
|
BorderFactory.createEtchedBorder(),
|
|
"Contacto" ) );
|
|
marcacoesButton = new JButton( "Marca\u00e7\u00f5es" );
|
|
marcacoesButton.addActionListener( this );
|
|
JPanel pad;
|
|
historicoText = new JTextArea();
|
|
new CopyPasteHandler( historicoText );
|
|
historicoText.setLineWrap( true );
|
|
historicoText.setWrapStyleWord( true );
|
|
JScrollPane observacoesScp = new JScrollPane( historicoText, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
|
|
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
|
|
observacoesScp.setBorder( BorderFactory.createTitledBorder(
|
|
BorderFactory.createEtchedBorder(), "Observa\u00e7\u00f5es" ) );
|
|
historicoPanel = new JPanel();
|
|
historicoPanel.setBorder( BorderFactory.createTitledBorder(
|
|
BorderFactory.createEtchedBorder(), "Hist\u00f3rico" ) );
|
|
// marcacaoPanel = new MarcacaoPanel( true, "Realizada", "Relat\u00f3rio", Marcacao.TIPO_MARCACAO_ESTABELECIMENTO );
|
|
// marcacaoPanel.setCalendarDialogOrientation( JCalendarDialog.ABOVE, JCalendarDialog.LEFT );
|
|
// marcacaoPanel.setBorder( BorderFactory.createTitledBorder(
|
|
// BorderFactory.createEtchedBorder(),
|
|
// "Visita" ) );
|
|
|
|
GridBagLayout gridbag = new GridBagLayout();
|
|
dadosEstabelecimentoPanel.setLayout( gridbag );
|
|
GridBagConstraints constraints = new GridBagConstraints();
|
|
constraints.insets = new Insets( 1, 1, 1, 1 );
|
|
constraints.fill = GridBagConstraints.HORIZONTAL;
|
|
constraints.gridheight = 1;
|
|
constraints.weighty = 0;
|
|
|
|
constraints.weightx = 1;
|
|
constraints.gridwidth = GridBagConstraints.REMAINDER;
|
|
gridbag.setConstraints( toolbarPanel, constraints );
|
|
dadosEstabelecimentoPanel.add( toolbarPanel );
|
|
|
|
constraints.fill = GridBagConstraints.HORIZONTAL;
|
|
constraints.weighty = 1;
|
|
pad = new JPanel();
|
|
gridbag.setConstraints( pad, constraints );
|
|
dadosEstabelecimentoPanel.add( pad );
|
|
constraints.fill = GridBagConstraints.HORIZONTAL;
|
|
constraints.weighty = 0;
|
|
|
|
constraints.weightx = 0;
|
|
constraints.gridwidth = 1;
|
|
gridbag.setConstraints( moradaLabel, constraints );
|
|
dadosEstabelecimentoPanel.add( moradaLabel );
|
|
|
|
constraints.weightx = 1;
|
|
constraints.gridwidth = GridBagConstraints.REMAINDER;
|
|
gridbag.setConstraints( moradaText, constraints );
|
|
dadosEstabelecimentoPanel.add( moradaText );
|
|
|
|
constraints.weightx = 0;
|
|
constraints.gridwidth = 1;
|
|
gridbag.setConstraints( codigoPostalLabel, constraints );
|
|
dadosEstabelecimentoPanel.add( codigoPostalLabel );
|
|
|
|
constraints.weightx = 0.3;
|
|
constraints.gridwidth = 1;
|
|
gridbag.setConstraints( codigoPostalText, constraints );
|
|
dadosEstabelecimentoPanel.add( codigoPostalText );
|
|
|
|
constraints.weightx = 0.7;
|
|
constraints.gridwidth = GridBagConstraints.REMAINDER;
|
|
pad = new JPanel();
|
|
gridbag.setConstraints( pad, constraints );
|
|
dadosEstabelecimentoPanel.add( pad );
|
|
|
|
constraints.weightx = 0;
|
|
constraints.gridwidth = 1;
|
|
gridbag.setConstraints( localLabel, constraints );
|
|
dadosEstabelecimentoPanel.add( localLabel );
|
|
|
|
constraints.weightx = 1;
|
|
constraints.gridwidth = GridBagConstraints.REMAINDER;
|
|
gridbag.setConstraints( localText, constraints );
|
|
dadosEstabelecimentoPanel.add( localText );
|
|
|
|
constraints.weightx = 1;
|
|
constraints.gridwidth = GridBagConstraints.REMAINDER;
|
|
gridbag.setConstraints( marcacoesButton, constraints );
|
|
dadosEstabelecimentoPanel.add( marcacoesButton );
|
|
|
|
constraints.weightx = 1;
|
|
constraints.gridwidth = GridBagConstraints.REMAINDER;
|
|
gridbag.setConstraints( contactoPanel, constraints );
|
|
|
|
gridbag = new GridBagLayout();
|
|
setLayout( gridbag );
|
|
constraints.fill = GridBagConstraints.BOTH;
|
|
constraints.weighty = 0;
|
|
constraints.gridheight = 1;
|
|
constraints.weightx = 0.5;
|
|
constraints.gridwidth = 1;
|
|
gridbag.setConstraints( dadosEstabelecimentoPanel, constraints );
|
|
constraints.gridwidth = GridBagConstraints.REMAINDER;
|
|
gridbag.setConstraints( contactoPanel, constraints );
|
|
constraints.weightx = 0.5;
|
|
constraints.weighty = 1;
|
|
constraints.gridwidth = 1;
|
|
constraints.gridheight = GridBagConstraints.REMAINDER;
|
|
gridbag.setConstraints( historicoPanel, constraints );
|
|
constraints.weightx = 0.5;
|
|
constraints.weighty = 1;
|
|
constraints.gridheight = GridBagConstraints.REMAINDER;
|
|
constraints.gridwidth = GridBagConstraints.REMAINDER;
|
|
gridbag.setConstraints( observacoesScp, constraints );
|
|
add( dadosEstabelecimentoPanel );
|
|
add( contactoPanel );
|
|
add( historicoPanel );
|
|
add( observacoesScp );
|
|
|
|
listaHistoricoPanel = new JPanel();
|
|
listaHistoricoPanel.setLayout( new GridLayout( 1, 1 ) );
|
|
VectorTableModel marcacoesModel = new VectorTableModel( new String[]{ "Data", "Texto" } );
|
|
historicoTable = new BaseTable( marcacoesModel );
|
|
historicoTable.setToolTipColumn( 1 );
|
|
historicoTable.fixColumnWidth( 0, 150 );
|
|
historicoTable.setNonResizableNorReordable();
|
|
JScrollPane listaHistoricoScp = new JScrollPane( historicoTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
|
|
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
|
|
listaHistoricoPanel.add( listaHistoricoScp );
|
|
|
|
historicoCardLayout = new CardLayout();
|
|
edicaoHistoricoPanel = new HistoricoEstabelecimentoPanel( this );
|
|
historicoPanel.setLayout( historicoCardLayout );
|
|
historicoPanel.add( HistoricoEstabelecimentoPanel.LIST_PANEL, listaHistoricoPanel );
|
|
historicoPanel.add( HistoricoEstabelecimentoPanel.EDIT_PANEL, edicaoHistoricoPanel );
|
|
|
|
historicoTable.getSelectionModel().addListSelectionListener( new ListSelectionListener(){
|
|
public void valueChanged( ListSelectionEvent e )
|
|
{
|
|
int selected = historicoTable.getSelectedRow();
|
|
if( selected == -1 || e.getValueIsAdjusting() )
|
|
{
|
|
return;
|
|
}
|
|
Object row = ( (VectorTableModel)historicoTable.getModel() ).getRowAt( selected );
|
|
historicoTable.clearSelection();
|
|
edicaoHistoricoPanel.setEstabelecimento( estabelecimento );
|
|
if( row != null && row instanceof HistoricoEstabelecimentoData )
|
|
{
|
|
edicaoHistoricoPanel.fill( row );
|
|
}
|
|
else
|
|
{
|
|
edicaoHistoricoPanel.fill( null );
|
|
}
|
|
historicoCardLayout.show( historicoPanel, HistoricoEstabelecimentoPanel.EDIT_PANEL );
|
|
}
|
|
} );
|
|
|
|
new CopyPasteHandler( designacaoText );
|
|
new CopyPasteHandler( moradaText );
|
|
new CopyPasteHandler( localText );
|
|
new CopyPasteHandler( codigoPostalText );
|
|
}
|
|
|
|
private void setupComponentsHashtable()
|
|
{
|
|
components = new ComponentsHashtable();
|
|
components.putComponent( EstabelecimentoData.NOME, designacaoText );
|
|
components.putComponent( EstabelecimentoData.MORADA, moradaText );
|
|
components.putComponent( EstabelecimentoData.LOCALIDADE, localText );
|
|
components.putComponent( EstabelecimentoData.CODIGO_POSTAL, codigoPostalText );
|
|
components.putComponent( EstabelecimentoData.CONTACTO, contactoPanel );
|
|
// components.putComponent( EstabelecimentoData.HISTORICO, historicoText );
|
|
components.putComponent( EstabelecimentoData.HISTORICO, historicoText );
|
|
components.putDummy( EstabelecimentoData.EMPRESA );
|
|
components.putDummy( EstabelecimentoData.NOME_PLAIN );
|
|
// components.putDummy( EstabelecimentoData.INACTIVO );
|
|
}
|
|
|
|
public void clear()
|
|
{
|
|
String names[] = (String[])components.keySet().toArray( new String[0] );
|
|
ComponentController.clear( names, components );
|
|
clearHistorico();
|
|
estabelecimento = null;
|
|
}
|
|
|
|
public void fill(Object value)
|
|
{
|
|
clear();
|
|
estabelecimento = ( EstabelecimentoData ) value;
|
|
// marcacaoPanel.setEnabled( estabelecimento != null );
|
|
// marcacaoPanel.fill( estabelecimento );
|
|
if( estabelecimento == null )
|
|
{
|
|
estabelecimentosTable.clearSelection();
|
|
return;
|
|
}
|
|
String names[] = estabelecimento.getFieldNames();
|
|
ComponentController.fill( names, estabelecimento.getHashData(), components );
|
|
reloadHistorico();
|
|
}
|
|
|
|
public Object save()
|
|
{
|
|
if( estabelecimento == null )
|
|
{
|
|
estabelecimento = new EstabelecimentoData();
|
|
}
|
|
|
|
String names[] = estabelecimento.getFieldNames();
|
|
Hashtable hash = new Hashtable();
|
|
ComponentController.save( names, hash, components );
|
|
estabelecimento.setHashData( hash );
|
|
estabelecimento.set( EstabelecimentoData.EMPRESA, empresa );
|
|
return estabelecimento;
|
|
}
|
|
|
|
public void postSave()
|
|
{
|
|
int selected = estabelecimentosTable.getSelectedRow();
|
|
if( estabelecimento != null )
|
|
{
|
|
IDObject obj = new MappableObject( (Integer) estabelecimento.get( EstabelecimentoData.ID ), estabelecimento.get( EstabelecimentoData.NOME ) );
|
|
VectorTableModel model = (VectorTableModel)estabelecimentosTable.getModel();
|
|
if( selected == -1 )
|
|
{
|
|
model.insertRowAt( obj, estabelecimentosTable.getRowCount() );
|
|
estabelecimentosTable.setRowSelectionInterval( estabelecimentosTable.getRowCount() - 1, estabelecimentosTable.getRowCount() - 1 );
|
|
}
|
|
else
|
|
{
|
|
model.removeRowAt( selected );
|
|
model.insertRowAt( obj, selected );
|
|
estabelecimentosTable.setRowSelectionInterval( selected, selected );
|
|
}
|
|
}
|
|
}
|
|
|
|
public void setEnabled( boolean enable )
|
|
{
|
|
super.setEnabled( enable );
|
|
String names[] = (String[])components.keySet().toArray( new String[0] );
|
|
ComponentController.setEnabled( names, enable, components );
|
|
if( enable != lastEnable )
|
|
{
|
|
if( enable )
|
|
{
|
|
disables++;
|
|
}
|
|
else
|
|
{
|
|
disables--;
|
|
}
|
|
lastEnable = enable;
|
|
}
|
|
estabelecimentosTable.setEnabled( disables == 0 );
|
|
// if( estabelecimento == null )
|
|
// {
|
|
// marcacaoPanel.setEnabled( false );
|
|
// }
|
|
}
|
|
|
|
public void valueChanged( ListSelectionEvent e )
|
|
{
|
|
Object source = e.getSource();
|
|
if( source instanceof EmpresaPanel )
|
|
{
|
|
Integer id = ( ( EmpresaPanel ) source ).getSelectedEstabelecimento();
|
|
if( id != null )
|
|
{
|
|
try
|
|
{
|
|
EstabelecimentoData estab = ( EstabelecimentoData ) JDO.load( EstabelecimentoData.class, id );
|
|
fill( estab );
|
|
}
|
|
catch( Exception ex )
|
|
{
|
|
DialogException.showExceptionMessage( ex, "Erro a carregar o estabelecimento", true );
|
|
clear();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
clear();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void reload()
|
|
{
|
|
fill( estabelecimento );
|
|
}
|
|
|
|
public void setEmpresa( EmpresaData empresa )
|
|
{
|
|
this.empresa = empresa;
|
|
}
|
|
|
|
protected void reloadHistorico()
|
|
{
|
|
try
|
|
{
|
|
Collection historicoCollection =
|
|
JDO.listLoad( HistoricoEstabelecimento.class, new Object[]{ estabelecimento.get( EstabelecimentoData.ID ) },
|
|
new String []{ "estabelecimento.id" }, new String[]{ "data descending" } );
|
|
Vector historico = new Vector();
|
|
historico.add( new ColumnizedObject(){
|
|
public Object getValue( int col )
|
|
{
|
|
switch( col )
|
|
{
|
|
case 0:
|
|
return "";
|
|
case 1:
|
|
return "NOVO EVENTO...";
|
|
}
|
|
return null;
|
|
}
|
|
} );
|
|
if( historicoCollection != null )
|
|
{
|
|
historico.addAll( historicoCollection );
|
|
}
|
|
historicoTable.clearSelection();
|
|
( (VectorTableModel) historicoTable.getModel() ).setValues( historico );
|
|
}
|
|
catch( Exception ex )
|
|
{
|
|
DialogException.showExceptionMessage( ex, "Erro a carregar as Marca\u00e7\u00f5es", true );
|
|
}
|
|
showHistorico();
|
|
}
|
|
|
|
protected void showHistorico()
|
|
{
|
|
historicoCardLayout.show( historicoPanel, HistoricoEstabelecimentoPanel.LIST_PANEL );
|
|
}
|
|
|
|
protected void clearHistorico()
|
|
{
|
|
( (VectorTableModel) historicoTable.getModel() ).clearAll();
|
|
}
|
|
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
Object source = e.getSource();
|
|
if( source.equals( marcacoesButton ) )
|
|
{
|
|
if( empresa == null || estabelecimento == null )
|
|
{
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
tracker.getHigieneWindow().setVisible( true );
|
|
tracker.getHigieneWindow().setEmpresaAndEstabelecimento( (Integer) empresa.get( EmpresaData.ID ),
|
|
( Integer ) estabelecimento.get( EstabelecimentoData.ID ) );
|
|
}
|
|
}
|
|
}
|
|
|
|
public void setTracker( SIPRPTracker tracker )
|
|
{
|
|
this.tracker = tracker;
|
|
}
|
|
}
|