/* * 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 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; } }