/* * MarcacaoPanel.java * * Created on 14 de Maio de 2004, 15:52 */ package siprp.clientes; 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.dataui.*; import com.evolute.utils.ui.*; import com.evolute.utils.ui.panel.*; import siprp.*; import siprp.data.*; /** * * @author fpalma */ public class MarcacaoPanel extends JPanel implements ControllableComponent, ActionListener { private final String COLUMN_NAMES_REL[]; private static final DateFormat DATE_FORMAT = DateFormat.getDateInstance( DateFormat.SHORT ); private Marcacao marcacoes[]; private ComponentsHashtable components; private int tipo; private final boolean comRelatorio; private Box anteriorPanel; private JPanel correntePanel; private String realizadoLabelText; private String relatorioLabelText; private JLabel dataMarcacaoAnteriorLabel; private JCheckBox realizadaCheckBox; private JCalendarPanel dataRelatorioPanel; private JCalendarPanel dataMarcacaoPanel; private JButton enviarEmailButton; private JLabel dataEnvioMailLabel; private JButton historicoButton; private TrabalhadorData trabalhador; private EstabelecimentoData estabelecimento; private MarcacaoListLoader loader; private Marcacao current; private Marcacao last; private boolean filling = false; /** Creates a new instance of MarcacaoPanel */ public MarcacaoPanel( boolean comRelatorio, String realizadoLabelText, String relatorioLabelText, int tipo ) { this.comRelatorio = comRelatorio; this.realizadoLabelText = realizadoLabelText; this.relatorioLabelText = relatorioLabelText; this.tipo = tipo; COLUMN_NAMES_REL = new String[ comRelatorio ? 3 : 2 ]; COLUMN_NAMES_REL[ 0 ] = "Data"; COLUMN_NAMES_REL[ 1 ] = realizadoLabelText; if( comRelatorio ) { COLUMN_NAMES_REL[ 2 ] = relatorioLabelText; } loader = new MarcacaoListLoader(); setupComponents(); setupComponentsHashtable(); } private void setupComponents() { anteriorPanel = new Box( BoxLayout.X_AXIS ); anteriorPanel.setBorder( BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), "Anterior" ) ); correntePanel = new JPanel(); // correntePanel.setBorder( BorderFactory.createTitledBorder( // BorderFactory.createEtchedBorder(), // "Corrente" ) ); JPanel dataPanel = new JPanel(); Box relatorioBox = new Box( BoxLayout.X_AXIS ); dataMarcacaoAnteriorLabel = new JLabel( "-" ); dataEnvioMailLabel = new JLabel( "" ); realizadaCheckBox = new JCheckBox( realizadoLabelText + " " ); realizadaCheckBox.addChangeListener( new ChangeListener(){ public void stateChanged( ChangeEvent e ) { System.out.println( "stateChanged" ); if( last != null && !filling ) { System.out.println( "stateChanged2" ); last.set( Marcacao.REALIZADA, realizadaCheckBox.isSelected() ? "y": "n" ); try { last.save(); } catch( Exception ex ) { DialogException.showExceptionMessage( ex, "Erro a gravar", true ); realizadaCheckBox.setSelected( realizadaCheckBox.isSelected() ); } } } } ); JLabel relatorioLabel = new JLabel( relatorioLabelText ); dataRelatorioPanel = new JCalendarPanel( null ); dataRelatorioPanel.addDocumentListener( new DocumentListener(){ public void changedUpdate( DocumentEvent e ) { if( !filling ) { marcarRelatorio(); } } public void insertUpdate( DocumentEvent e ) { if( !filling ) { marcarRelatorio(); } } public void removeUpdate( DocumentEvent e ) { if( !filling ) { marcarRelatorio(); } } private void marcarRelatorio() { last.set( Marcacao.DATA_RELATORIO, dataRelatorioPanel.getDate() ); try { last.save(); } catch( Exception ex ) { DialogException.showExceptionMessage( ex, "Erro a gravar", true ); } } } ); dataMarcacaoPanel = new JCalendarPanel( null ); dataMarcacaoPanel.addDocumentListener( new DocumentListener(){ public void changedUpdate( DocumentEvent e ) { if( !filling ) { marcar(); } } public void insertUpdate( DocumentEvent e ) { if( !filling ) { marcar(); } } public void removeUpdate( DocumentEvent e ) { if( !filling ) { marcar(); } } } ); enviarEmailButton = new JButton( "Enviar Email" ); enviarEmailButton.addActionListener( this ); historicoButton = new JButton( "H" ); historicoButton.addActionListener( this ); anteriorPanel.add( dataPanel ); if( comRelatorio ) { anteriorPanel.add( relatorioBox ); anteriorPanel.add( relatorioLabel ); anteriorPanel.add( dataRelatorioPanel ); } dataPanel.setLayout( new GridLayout( 1, 2 ) ); dataPanel.add( dataMarcacaoAnteriorLabel ); dataPanel.add( realizadaCheckBox ); correntePanel.setLayout( new GridLayout( 1, 2 ) ); correntePanel.add( dataMarcacaoPanel ); correntePanel.add( enviarEmailButton ); //setLayout( new BoxLayout( this, BoxLayout.Y_AXIS ) ); GridBagLayout gridbag = new GridBagLayout(); setLayout( gridbag ); GridBagConstraints constraints = new GridBagConstraints(); constraints.insets = new Insets( 1, 1, 1, 1 ); constraints.fill = GridBagConstraints.HORIZONTAL; constraints.weighty = 0.5; constraints.gridheight = 1; constraints.weightx = 1; constraints.gridwidth = 1; gridbag.setConstraints( anteriorPanel, constraints ); add( anteriorPanel ); constraints.fill = GridBagConstraints.BOTH; constraints.weighty = 1; constraints.gridheight = 2; constraints.weightx = 0; constraints.gridwidth = GridBagConstraints.REMAINDER; historicoButton.setPreferredSize( new Dimension( 20, 40 ) ); gridbag.setConstraints( historicoButton, constraints ); add( historicoButton ); constraints.fill = GridBagConstraints.HORIZONTAL; constraints.weighty = 0.5; constraints.gridheight = 1; constraints.weightx = 1; constraints.gridwidth = 1; constraints.gridx = 0; gridbag.setConstraints( correntePanel, constraints ); add( correntePanel ); } private void setupComponentsHashtable() { components = new ComponentsHashtable(); components.putComponent( Marcacao.DATA, dataMarcacaoPanel ); components.putComponent( Marcacao.REALIZADA, realizadaCheckBox ); components.putComponent( Marcacao.DATA_RELATORIO, dataRelatorioPanel ); } public void clear() { String names[] = (String[])components.keySet().toArray( new String[0] ); ComponentController.clear( names, components ); dataMarcacaoAnteriorLabel.setText( "" ); dataEnvioMailLabel.setText( "" ); marcacoes = null; trabalhador = null; estabelecimento = null; current = null; last = null; } public void fill( Object value ) { filling = true; clear(); if( value == null ) { setEnabled( false ); filling = false; return; } switch( tipo ) { case Marcacao.TIPO_MARCACAO_TRABALHADOR_EXAMES: case Marcacao.TIPO_MARCACAO_TRABALHADOR_CONSULTA: if( ! ( value instanceof TrabalhadorData ) ) { filling = false; return ; } trabalhador = (TrabalhadorData) value; try { marcacoes = loader.load( tipo, (Integer)trabalhador.get( TrabalhadorData.ID ) ); } catch( Exception ex ) { DialogException.showExceptionMessage( ex, "Erro a carregar as marca\u00e7\u00f5es", true ); marcacoes = null; } break; case Marcacao.TIPO_MARCACAO_ESTABELECIMENTO: if( ! ( value instanceof EstabelecimentoData ) ) { filling = false; return ; } estabelecimento = (EstabelecimentoData) value; try { marcacoes = loader.load( tipo, (Integer)estabelecimento.get( EstabelecimentoData.ID ) ); } catch( Exception ex ) { DialogException.showExceptionMessage( ex, "Erro a carregar as marca\u00e7\u00f5es", true ); marcacoes = null; } break; } if( marcacoes == null || marcacoes.length == 0 ) { filling = false; return; } Date lastDate = (Date) marcacoes[ 0 ].get( Marcacao.DATA ); current = null; last = null; if( !lastDate.after( new Date() ) ) { current = null; last = marcacoes[ 0 ]; } else { current = marcacoes[ 0 ]; if( marcacoes.length > 1 ) { last = marcacoes[ 1 ]; } } fillCurrent(); fillLast(); filling = false; } private void fillCurrent() { if( current != null ) { Date dataMarcacao = (Date) current.get( Marcacao.DATA ); dataMarcacaoPanel.setDate( dataMarcacao ); Date dataMail = (Date) current.get( Marcacao.DATA_EMAIL ); if( dataMail == null ) { enviarEmailButton.setEnabled( dataMarcacao != null ); dataEnvioMailLabel.setText( "" ); } else { enviarEmailButton.setEnabled( false ); dataEnvioMailLabel.setText( DATE_FORMAT.format( dataMail ) ); } } else { enviarEmailButton.setEnabled( false ); } } private void fillLast() { if( last != null ) { Date dataMarcacao = (Date) last.get( Marcacao.DATA ); dataMarcacaoAnteriorLabel.setText( DATE_FORMAT.format( dataMarcacao ) ); String realizada = (String) last.get( Marcacao.REALIZADA ); boolean isRealizada = "y".equals( realizada ); realizadaCheckBox.setSelected( isRealizada ); realizadaCheckBox.setEnabled( !isRealizada ); Date dataRelatorio = (Date) last.get( Marcacao.DATA_RELATORIO ); dataRelatorioPanel.setDate( dataRelatorio ); } else { realizadaCheckBox.setEnabled( false ); dataRelatorioPanel.setEnabled( false ); } } public Object save() { // if( marcacoes == null ) // { // marcacoes = new Marcacao[ 0 ]; // } // if( marcacoes[ marcacoes.length - 1 ] == null ) // { // marcacoes[ marcacoes.length - 1 ] = Marcacao.getMarcacao( tipo ); // } // if( marcacoes.length > 1 ) // { // } return null; } public void setEnabled( boolean enable ) { filling = true; String names[] = (String[])components.keySet().toArray( new String[0] ); ComponentController.setEnabled( names, enable, components ); if( !enable ) { enviarEmailButton.setEnabled( false ); } if( last == null ) { realizadaCheckBox.setEnabled( false ); dataRelatorioPanel.setEnabled( false ); } filling = false; } public void actionPerformed( ActionEvent e ) { Object source = e.getSource(); if( source.equals( enviarEmailButton ) ) { Date today = new Date(); current.set( Marcacao.DATA_EMAIL, today ); String subject = "."; String texto = ""; EstabelecimentoData estab = null; if( current instanceof MarcacaoTrabalhadorData ) { TrabalhadorData trab = ( TrabalhadorData )current.get( MarcacaoTrabalhadorData.TRABALHADOR ); String nome = ( String )trab.get( TrabalhadorData.NOME ); String data = DateFormat.getDateInstance( DateFormat.SHORT ).format( ( Date )current.get( MarcacaoTrabalhadorData.DATA ) ); if( ( ( Number )current.get( MarcacaoTrabalhadorData.TIPO ) ).intValue() == MarcacaoTrabalhadorConstants.TIPO_EXAMES ) { subject = ( String ) Singleton.getInstance( SingletonConstants.SUBJECT_EXAMES ); subject = subject.replaceAll( CompanyDataLoader.NOME, nome ); texto = ( String ) Singleton.getInstance( SingletonConstants.LETTER_EXAMES ); texto = texto.replaceAll( CompanyDataLoader.DATA, data ); texto = texto.replaceAll( CompanyDataLoader.NOME, nome ); // subject = "Marca\u00E7\u00E3o de exame"; // texto = "Vimos pelo presente informar que '" + nome + "' dever\u00E1 comparecer " // + "nas nossas instala\u00E7\u00F5es para a realiza\u00E7\u00E3o dos exames de Medicina " // + "do Trabalho, no dia '" + data + "', pelas 08H30." // + "%0A%0A" // + "Relembramos que o colaborador dever\u00E1 comparecer em jejum." // + "%0A%0A" // + "Caso n\u00E3o seja poss\u00EDvel a compar\u00EAncia deste colaborador na data " // + "indicada, contacte-nos, por favor, atrav\u00E9s do telefone 21 350 45 40 " //// + "indicada, contacte-nos, por favor, atrav\u00E9s do telefone 21 210 21 21 " // + "ou respondendo ao remetente desta mensagem." // + "%0A%0A%0A" // + "Cumprimentos,%0A%0ASIPRP"; //// + "Cumprimentos,"; } else { subject = ( String ) Singleton.getInstance( SingletonConstants.SUBJECT_CONSULTA ); subject = subject.replaceAll( CompanyDataLoader.NOME, nome ); texto = ( String ) Singleton.getInstance( SingletonConstants.LETTER_CONSULTA ); texto = texto.replaceAll( CompanyDataLoader.DATA, data ); texto = texto.replaceAll( CompanyDataLoader.NOME, nome ); // subject = "Marca\u00E7\u00E3o de consulta"; // texto = "Vimos pelo presente informar que '" + nome + "' dever\u00E1 comparecer " // + "nas nossas instala\u00E7\u00F5es para a realiza\u00E7\u00E3o da consulta de Medicina " // + "do Trabalho, no dia '" + data + "', pelas 08H30." // + "%0A%0A" // + "%0A%0A" // + "Solicitamos, tamb\u00E9m, que o colaborador seja portador do Boletim de Vacinas e " // + "dos \u00FAltimos exames complementares realizados." // + "%0A%0A" // + "%0A%0A" // + "Caso n\u00E3o seja poss\u00EDvel a compar\u00EAncia deste colaborador na data " // + "indicada, contacte-nos, por favor, atrav\u00E9s do telefone 21 350 45 40 " //// + "indicada, contacte-nos, por favor, atrav\u00E9s do telefone 21 210 21 21 " // + "ou respondendo ao remetente desta mensagem." // + "%0A%0A%0A" // + "Cumprimentos," // + "%0A%0ASIPRP" // + "%0A%0AATRIUM SALDANHA" // + "%0A%0APra\u00e7a Duque de Saldanha, 1 - 9\u00BAC" // + "%0A%0A1050-094 Lisboa"; } estab = ( EstabelecimentoData )trab.get( TrabalhadorData.ESTABELECIMENTO ); } else { estab = ( EstabelecimentoData )current.get( MarcacaoEstabelecimentoData.ESTABELECIMENTO ); String sede = ( String )estab.get( EstabelecimentoData.NOME ); subject = ( String ) Singleton.getInstance( SingletonConstants.SUBJECT_VISITA ); subject = subject.replaceAll( CompanyDataLoader.NOME, sede ); String morada = ( String )estab.get( EstabelecimentoData.MORADA ); String data = DateFormat.getDateInstance( DateFormat.SHORT ).format( ( Date )current.get( MarcacaoEstabelecimentoData.DATA ) ); texto = ( String ) Singleton.getInstance( SingletonConstants.LETTER_VISITA ); texto = texto.replaceAll( CompanyDataLoader.DATA, data ); texto = texto.replaceAll( CompanyDataLoader.NOME, sede ); texto = texto.replaceAll( CompanyDataLoader.MORADA, morada ); // texto = "Vimos pelo presente informar que iremos efectuar a auditoria de Higiene e " // + "Seguran\u00E7a \u00E0s vossas instala\u00E7\u00F5es de '" + sede + "', no dia '" + data + "'." // + "%0A%0A" // + "Agradecemos que nos confirme, pela mesma via, o nome do representante " // + "da empresa que nos ir\u00E1 acompanhar e a vossa disponibilidade para a " // + "realiza\u00E7\u00E3o da visita na data indicada." // + "%0A%0A" // + "Caso necessite de qualquer esclarecimento, contacte-nos, por favor, " // + "atrav\u00E9s dos telefones 21 350 45 43 (Pedro Vieira), 21 350 45 44 " // + "(Catarina Leonardo) ou responda ao remetente desta mensagem." //// + "atrav\u00E9s dos telefones 21 210 21 21 (Colaborador), 21 210 21 21 " //// + "(Outro Colaborador) ou responda ao remetente desta mensagem." // + "%0A%0A%0A" // + "Cumprimentos,%0A%0ASIPRP"; //// + "Cumprimentos,"; } ContactoData cont = ( ContactoData )estab.get( EstabelecimentoData.CONTACTO ); String mail = ""; if( cont != null ) { mail = ( String )cont.get( ContactoData.EMAIL ); } try { current.save(); 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=" // + "?subject=" + subject + "&body=" + texto ); } else { mail = mail.replaceAll( " ", "%20" ); subject = subject.replaceAll( " ", "%20" ); texto = texto.replaceAll( " ", "%20" ); // System.out.println( "mailto:" + mail // // + "?subject=SIPRP - " + subject + "&body=" // + "?subject=" + subject + "&body=" // + texto ); Process proc = Runtime.getRuntime().exec( new String[]{ "/usr/bin/open", "/Applications/Mail.app", "mailto:" + mail // + "?subject=SIPRP - " + subject + "&body=" + "?subject=" + subject + "&body=" + texto } ); } } catch( Exception ex ) { DialogException.showExceptionMessage( ex, "Erro a enviar mail", true ); } dataEnvioMailLabel.setText( DATE_FORMAT.format( today ) ); } else if( source.equals( historicoButton ) ) { Vector v = new Vector(); if( marcacoes != null ) { v.addAll( Arrays.asList( marcacoes ) ); } ListActionDialog dialog = new ListActionDialog( null, "Anteriores", COLUMN_NAMES_REL, v, null ); dialog.show(); } } public void marcar() { System.out.println( "MARCAR" ); Date data = dataMarcacaoPanel.getDate(); Vector aux = new Vector(); if( marcacoes != null ) { aux.addAll( Arrays.asList( marcacoes ) ); } if( current == null && data != null ) { current = Marcacao.getMarcacao( tipo ); current.set( Marcacao.REALIZADA, "n" ); aux.insertElementAt( current, 0 ); switch( tipo ) { case Marcacao.TIPO_MARCACAO_TRABALHADOR_EXAMES: case Marcacao.TIPO_MARCACAO_TRABALHADOR_CONSULTA: current.set( MarcacaoTrabalhadorData.TRABALHADOR, trabalhador ); current.set( MarcacaoTrabalhadorData.TIPO, new Integer( tipo ) ); break; case Marcacao.TIPO_MARCACAO_ESTABELECIMENTO: current.set( MarcacaoEstabelecimentoData.ESTABELECIMENTO, estabelecimento ); break; } marcacoes = ( Marcacao [])aux.toArray( new Marcacao[0] ); // System.out.println( "INSERI ! !! ! ! !! ! " ); } else if( current != null && data == null ) { aux.remove( 0 ); marcacoes = ( Marcacao [])aux.toArray( new Marcacao[0] ); // System.out.println( "REMOVI ! !! ! ! !! ! " ); } current.set( Marcacao.DATA, data ); try { if( data != null ) { current.save(); enviarEmailButton.setEnabled( true ); } else { System.out.println( "DELETE DA MARCACAO" ); current.delete(); } } catch( Exception ex ) { DialogException.showExceptionMessage( ex, "Erro a gravar", true ); } } public void setCalendarDialogOrientation( int vertical, int horizontal ) { dataRelatorioPanel.setOrientation( vertical, horizontal ); dataMarcacaoPanel.setOrientation( vertical, horizontal ); } }