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.

453 lines
15 KiB

/*
* AvisosPanel.java
*
* Created on 21 de Maio de 2004, 13:06
*/
package siprp.clientes;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import shst.clientes.AvisosPanelInterface;
import shst.data.AvisoConstants;
import shst.data.outer.AvisosData;
import shst.data.outer.EmpresasData;
import shst.data.outer.EstabelecimentosData;
import shst.data.outer.TrabalhadoresData;
import siprp.FichaDataProvider;
import siprp.SIPRPTracker;
import com.evolute.entity.ProviderInterface;
import com.evolute.utils.Singleton;
import com.evolute.utils.dataui.ControllableComponent;
import com.evolute.utils.ui.DialogException;
/**
*
* @author fpalma
*/
public class AvisosPanel extends JPanel implements ActionListener, ControllableComponent< Object >, AvisosPanelInterface
{
private static final long serialVersionUID = 1L;
private static final DateFormat DATE_FORMAT = DateFormat.getDateInstance( DateFormat.SHORT );
private ProviderInterface JDO;
private FichaDataProvider provider;
private SIPRPTracker tracker;
private JPanel empresaPanel;
private JPanel estabelecimentosPanel;
private JPanel trabalhadoresPanel;
private Object avisosEmpresa[][];
private Object avisosEstabelecimento[][];
private Object avisosTrabalhador[][];
private boolean refreshed = false;
private Hashtable buttonHash;
private Hashtable buttonTypeHash;
/** Creates a new instance of AvisosPanel */
public AvisosPanel() throws Exception
{
buttonHash = new Hashtable();
buttonTypeHash = new Hashtable();
JDO = (ProviderInterface) Singleton.getInstance( Singleton.DEFAULT_EVO_DATA_PROVIDER );
}
private void setupComponents()
{
empresaPanel = new JPanel();
empresaPanel.setBorder(
BorderFactory.createTitledBorder(
BorderFactory.createLineBorder( new Color( 0.0f, 0.0f, 0.0f, 0.0f ), 1 ), "Empresas" ) );
empresaPanel.setLayout( new GridLayout( avisosEmpresa.length, 1 ) );
GridBagConstraints constraints = new GridBagConstraints();
constraints.insets = new Insets( 1, 1, 1, 1 );
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.weighty = 0;
for( int n = 0; n < avisosEmpresa.length; n++ )
{
JPanel pan = new JPanel();
GridBagLayout gridbag = new GridBagLayout();
pan.setBorder( BorderFactory.createLineBorder( Color.black, 1 ) );
pan.setLayout( gridbag );
constraints.gridheight = GridBagConstraints.REMAINDER;
constraints.gridx = 0;
constraints.weightx = 0;
constraints.gridwidth = 1;
JButton tratarButton = new JButton( "Tratar" );
gridbag.setConstraints( tratarButton, constraints );
pan.add( tratarButton );
buttonHash.put( tratarButton, avisosEmpresa[ n ][ 0 ] );
buttonTypeHash.put( tratarButton, new Integer( AvisoConstants.TIPO_EMPRESA ) );
tratarButton.addActionListener( this );
constraints.gridx = 1;
constraints.weightx = 1;
constraints.gridheight = 1;
constraints.gridwidth = GridBagConstraints.REMAINDER;
JLabel empresaLabel = new JLabel( "" + avisosEmpresa[ n ][ 3 ] );
gridbag.setConstraints( empresaLabel, constraints );
pan.add( empresaLabel );
constraints.weightx = 1;
constraints.gridwidth = GridBagConstraints.REMAINDER;
JLabel descricaoLabel = criarDescricao( avisosEmpresa[ n ] );
gridbag.setConstraints( descricaoLabel, constraints );
pan.add( descricaoLabel );
empresaPanel.add( pan );
}
estabelecimentosPanel = new JPanel();
estabelecimentosPanel.setBorder(
BorderFactory.createTitledBorder(
BorderFactory.createLineBorder( new Color( 0.0f, 0.0f, 0.0f, 0.0f ), 1 ), "Estabelecimentos" ) );
estabelecimentosPanel.setLayout( new GridLayout( avisosEstabelecimento.length, 1 ) );
for( int n = 0; n < avisosEstabelecimento.length; n++ )
{
Date dataAviso = ( Date ) avisosEstabelecimento[ n ][ 5 ];
Date dataEvento = ( Date ) avisosEstabelecimento[ n ][ 1 ];
Calendar calAviso = Calendar.getInstance();
calAviso.setTime( dataAviso );
Calendar calEvento = Calendar.getInstance();
calEvento.setTime( dataEvento );
boolean mesmoDia =
( calAviso.get( Calendar.YEAR ) == calEvento.get( Calendar.YEAR ) ) &&
( calAviso.get( Calendar.MONTH ) == calEvento.get( Calendar.MONTH ) ) &&
( calAviso.get( Calendar.DAY_OF_MONTH ) == calEvento.get( Calendar.DAY_OF_MONTH ) );
JPanel pan = new JPanel();
GridBagLayout gridbag = new GridBagLayout();
pan.setBorder( BorderFactory.createLineBorder( Color.black, 1 ) );
pan.setLayout( gridbag );
constraints.gridheight = GridBagConstraints.REMAINDER;
constraints.gridx = 0;
constraints.weightx = 0;
constraints.gridwidth = 1;
JButton tratarButton = new JButton( mesmoDia ? "Confirmar" : "Marcar" );
gridbag.setConstraints( tratarButton, constraints );
pan.add( tratarButton );
buttonHash.put( tratarButton, avisosEstabelecimento[ n ][ 0 ] );
buttonTypeHash.put( tratarButton, new Integer( AvisoConstants.TIPO_ESTABELECIMENTO ) );
tratarButton.addActionListener( this );
constraints.gridx = 1;
constraints.weightx = 1;
constraints.gridheight = 1;
constraints.gridwidth = GridBagConstraints.REMAINDER;
JLabel empresaLabel = new JLabel( "" + avisosEstabelecimento[ n ][ 3 ] );
gridbag.setConstraints( empresaLabel, constraints );
pan.add( empresaLabel );
JLabel estabelecimentoLabel = new JLabel( "" + avisosEstabelecimento[ n ][ 4 ] );
gridbag.setConstraints( estabelecimentoLabel, constraints );
pan.add( estabelecimentoLabel );
constraints.gridwidth = GridBagConstraints.REMAINDER;
JLabel descricaoLabel = criarDescricao( avisosEstabelecimento[ n ] );
gridbag.setConstraints( descricaoLabel, constraints );
pan.add( descricaoLabel );
estabelecimentosPanel.add( pan );
}
trabalhadoresPanel = new JPanel();
trabalhadoresPanel.setBorder(
BorderFactory.createTitledBorder(
BorderFactory.createLineBorder( new Color( 0.0f, 0.0f, 0.0f, 0.0f ), 1 ), "Trabalhadores" ) );
trabalhadoresPanel.setLayout( new GridLayout( avisosTrabalhador.length, 1 ) );
for( int n = 0; n < avisosTrabalhador.length; n++ )
{
Date dataAviso = ( Date ) avisosTrabalhador[ n ][ 6 ];
Date dataEvento = ( Date ) avisosTrabalhador[ n ][ 1 ];
Calendar calAviso = Calendar.getInstance();
calAviso.setTime( dataAviso );
Calendar calEvento = Calendar.getInstance();
calEvento.setTime( dataEvento );
boolean mesmoDia =
( calAviso.get( Calendar.YEAR ) == calEvento.get( Calendar.YEAR ) ) &&
( calAviso.get( Calendar.MONTH ) == calEvento.get( Calendar.MONTH ) ) &&
( calAviso.get( Calendar.DAY_OF_MONTH ) == calEvento.get( Calendar.DAY_OF_MONTH ) );
JPanel pan = new JPanel();
GridBagLayout gridbag = new GridBagLayout();
pan.setBorder( BorderFactory.createLineBorder( Color.black, 1 ) );
pan.setLayout( gridbag );
constraints.gridheight = GridBagConstraints.REMAINDER;
constraints.gridx = 0;
constraints.weightx = 0;
constraints.gridwidth = 1;
JButton tratarButton = new JButton( mesmoDia ? "Confirmar" : "Marcar" );
gridbag.setConstraints( tratarButton, constraints );
pan.add( tratarButton );
buttonHash.put( tratarButton, avisosTrabalhador[ n ][ 0 ] );
buttonTypeHash.put( tratarButton, new Integer( AvisoConstants.TIPO_TRABALHADOR ) );
tratarButton.addActionListener( this );
constraints.gridx = 1;
constraints.weightx = 1;
constraints.gridheight = 1;
constraints.gridwidth = GridBagConstraints.REMAINDER;
JLabel empresaLabel = new JLabel( "" + avisosTrabalhador[ n ][ 3 ] );
gridbag.setConstraints( empresaLabel, constraints );
pan.add( empresaLabel );
JLabel estabelecimentoLabel = new JLabel( "" + avisosTrabalhador[ n ][ 4 ] );
gridbag.setConstraints( estabelecimentoLabel, constraints );
pan.add( estabelecimentoLabel );
JLabel trabalhadorLabel = new JLabel( "" + avisosTrabalhador[ n ][ 5 ] );
gridbag.setConstraints( trabalhadorLabel, constraints );
pan.add( trabalhadorLabel );
constraints.gridwidth = GridBagConstraints.REMAINDER;
JLabel descricaoLabel = criarDescricao( avisosTrabalhador[ n ] );
gridbag.setConstraints( descricaoLabel, constraints );
pan.add( descricaoLabel );
trabalhadoresPanel.add( pan );
}
JScrollPane scp = new JScrollPane();
setLayout( new GridLayout( 1, 1 ) );
add( scp );
JPanel contentPanel = new JPanel();
scp.setViewportView( contentPanel );
GridBagLayout gridbag = new GridBagLayout();
contentPanel.setLayout( gridbag );
constraints = new GridBagConstraints();
constraints.insets = new Insets( 1, 1, 1, 1 );
constraints.fill = GridBagConstraints.BOTH;
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.weightx = 1;
constraints.gridheight = 1;
constraints.weighty = 0;
if( avisosEmpresa.length > 0 )
{
gridbag.setConstraints( empresaPanel, constraints );
contentPanel.add( empresaPanel );
}
if( avisosTrabalhador.length > 0 )
{
gridbag.setConstraints( trabalhadoresPanel, constraints );
contentPanel.add( trabalhadoresPanel );
}
if( avisosEstabelecimento.length > 0 )
{
gridbag.setConstraints( estabelecimentosPanel, constraints );
contentPanel.add( estabelecimentosPanel );
}
}
public void refresh()
{
if( refreshed )
{
return;
}
refreshed = true;
try
{
provider = ( FichaDataProvider ) FichaDataProvider.getProvider();
avisosEmpresa = provider.getAvisosEmpresaByDate( new Date() );
avisosEstabelecimento = provider.getAvisosEstabelecimentoByDate( new Date() );
avisosTrabalhador = provider.getAvisosTrabalhadorByDate( new Date() );
}
catch( Exception ex )
{
ex.printStackTrace();
}
setupComponents();
setVisible( true );
repaint();
}
private JLabel criarDescricao( Object aviso[] )
{
Date dataEvento = ( Date )aviso[ 1 ];
String descricao = (String)aviso[ 2 ];
Calendar cal = Calendar.getInstance();
cal.setTime( dataEvento );
cal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ), cal.get( Calendar.DAY_OF_MONTH ), 0, 0, 0 );
cal.set( Calendar.MILLISECOND, 0 );
dataEvento = cal.getTime();
cal = Calendar.getInstance();
cal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ), cal.get( Calendar.DAY_OF_MONTH ), 0, 0, 0 );
cal.set( Calendar.MILLISECOND, 0 );
Date hoje = cal.getTime();
if( !hoje.after( dataEvento ) && !hoje.before( dataEvento ) )
{
descricao += " hoje";
}
else
{
descricao += " no dia " + DATE_FORMAT.format( dataEvento );
}
JLabel descricaoLabel = new JLabel( descricao );
if( hoje.after( dataEvento ) )
{
descricaoLabel.setForeground( Color.red );
}
else if( hoje.equals( dataEvento ) )
{
descricaoLabel.setForeground( Color.green.darker() );
}
return descricaoLabel;
}
public void actionPerformed( ActionEvent e )
{
if( JDO == null )
{
JDO = ( ProviderInterface ) Singleton.getInstance( Singleton.DEFAULT_EVO_DATA_PROVIDER );
}
Object source = e.getSource();
if( source instanceof JButton )
{
try
{
( (JButton) source ).setEnabled( false );
Integer id = (Integer)buttonHash.get( source );
if( id == null )
{
return;
}
buttonHash.remove( source );
AvisosData aviso = (AvisosData) JDO.load( AvisosData.class, id );
if( aviso == null )
{
JOptionPane.showMessageDialog( null, "Este aviso j\u00e1 foi tratado.", "J\u00e1 tratado",
JOptionPane.WARNING_MESSAGE );
return;
}
Map<String,Object> dataHash = aviso.getHashData();
Date dataEvento = (Date)dataHash.get( AvisosData.DATA_EVENTO );
Calendar cal = Calendar.getInstance();
cal.setTime( dataEvento );
cal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ), cal.get( Calendar.DAY_OF_MONTH ), 0, 0, 0 );
cal.set( Calendar.MILLISECOND, 0 );
dataEvento = cal.getTime();
cal = Calendar.getInstance();
cal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ), cal.get( Calendar.DAY_OF_MONTH ), 10, 0, 0 );
cal.set( Calendar.MILLISECOND, 0 );
Date hoje = cal.getTime();
if( hoje.before( dataEvento ) )
{
AvisosData novoAviso = new AvisosData();
novoAviso.setHashData( dataHash );
novoAviso.set( AvisosData.DATA_AVISO, dataEvento );
novoAviso.save();
}
Integer tipo = (Integer) aviso.get( AvisosData.TIPO );
TrabalhadoresData trabalhador;
EstabelecimentosData estabelecimento;
EmpresasData empresa;
switch( tipo.intValue() )
{
case AvisoConstants.TIPO_TRABALHADOR:
trabalhador = aviso.toTrabalhador_id();
estabelecimento = trabalhador.toEstabelecimento_id();
empresa = estabelecimento.toEmpresa_id();
aviso.delete();
tracker.getMedicinaWindow().setVisible( true );
tracker.getMedicinaWindow().setEmpresaAndEstabelecimentoAndTrabalhador( (Integer) empresa.get( EmpresasData.ID ),
( Integer ) estabelecimento.get( EstabelecimentosData.ID ),
( Integer ) trabalhador.get( TrabalhadoresData.ID ) );
break;
case AvisoConstants.TIPO_ESTABELECIMENTO:
estabelecimento = aviso.toEstabelecimento_id();
empresa = estabelecimento.toEmpresa_id();
aviso.delete();
tracker.getHigieneWindow().setVisible( true );
tracker.getHigieneWindow().setEmpresaAndEstabelecimento( (Integer) empresa.get( EmpresasData.ID ),
( Integer ) estabelecimento.get( EstabelecimentosData.ID ) );
break;
case AvisoConstants.TIPO_EMPRESA:
empresa = aviso.toEmpresa_id();
aviso.delete();
shst.clientes.ClientesWindow clientesWindow = tracker.getClientesWindow();
clientesWindow.setVisible( true );
clientesWindow.setDataObject( empresa );
break;
}
System.out.println( "delete aviso" );
}
catch( Exception ex )
{
DialogException.showExceptionMessage( ex, "Erro a limpar o aviso", true );
}
}
}
public void clear()
{
}
public void fill(Object value)
{
}
public Object save()
{
return null;
}
public void setEnabled( boolean enable )
{
Set buttonSet = buttonHash.keySet();
JButton buttons[] = (JButton[]) buttonSet.toArray( new JButton[0] );
for( int n = 0;n < buttons.length; n++ )
{
buttons[ n ].setEnabled( enable );
}
}
public void setEnabled( boolean enable, int type )
{
Set buttonSet = buttonHash.keySet();
JButton buttons[] = (JButton[]) buttonSet.toArray( new JButton[0] );
for( int n = 0;n < buttons.length; n++ )
{
Integer buttonType = ( Integer ) buttonTypeHash.get( buttons[ n ] );
if( buttonType.intValue() == type )
{
buttons[ n ].setEnabled( enable );
}
}
}
public void setTracker( SIPRPTracker tracker )
{
this.tracker = tracker;
}
}