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/clientes/MarcacaoPanel.java

595 lines
18 KiB

/*
* 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.calendar.*;
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.addChangeListener( new ChangeListener(){
public void stateChanged(ChangeEvent 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.addChangeListener( new ChangeListener(){
public void stateChanged(ChangeEvent 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 );
}
}