package siprp.higiene.relatorio;
import static com.evolute.utils.strings.UnicodeLatin1Map.aacute;
import static com.evolute.utils.strings.UnicodeLatin1Map.atilde;
import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil;
import static com.evolute.utils.strings.UnicodeLatin1Map.eacute;
import static com.evolute.utils.strings.UnicodeLatin1Map.iacute;
import static com.evolute.utils.strings.UnicodeLatin1Map.oacute;
import info.clearthought.layout.TableLayout;
import info.clearthought.layout.TableLayoutConstraints;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.EventObject;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import leaf.ui.LeafError;
import leaf.ui.LeafIconButton;
import siprp.database.cayenne.objects.HsEmailEstabelecimento;
import siprp.database.cayenne.objects.HsRelatorio;
import siprp.database.cayenne.objects.MarcacoesEstabelecimento;
import siprp.database.cayenne.objects.MarcacoesTecnicosHst;
import siprp.higiene.gestao.equipamentos.AdicionarEquipamentosPanel;
import siprp.medicina.processo.mail.MailSender;
import com.evolute.utils.ui.calendar.JCalendarPanel;
public class PanelRelatorio extends JPanel implements CaretListener, ChangeListener, ActionListener
{
private static final long serialVersionUID = 1L;
private static final String ICON_NAME_SAVE = "siprp/higiene/gestao/riscos/save.png";
private static final String ICON_NAME_REVERT = "siprp/higiene/gestao/riscos/revert.png";
private static final String ICON_NAME_SUBMIT = "siprp/higiene/relatorio/submit.png";
private final JCalendarPanel dataRelatorio = new JCalendarPanel( null );
private final JRadioButton radioInicial = new JRadioButton( "Inicial" );
private final JRadioButton radioPeriodica = new JRadioButton( "Peri" + oacute + "dica" );
private final JTextField fieldTecnico = new JTextField();
private final JPanel panelAcompanhantes = new JPanel();
private final JTextField fieldNome1 = new JTextField();
private final JTextField fieldNome2 = new JTextField();
private final JTextField fieldFuncao1 = new JTextField();
private final JTextField fieldFuncao2 = new JTextField();
private final LeafIconButton buttonSave = LeafIconButton.createButton( ICON_NAME_SAVE );
private final LeafIconButton buttonRevert = LeafIconButton.createButton( ICON_NAME_REVERT );
private final LeafIconButton buttonSubmit = LeafIconButton.createButton( "Submeter plano de actua" + ccedil + atilde + "o", ICON_NAME_SUBMIT );
private final AdicionarEquipamentosPanel panelEquipamentos = new AdicionarEquipamentosPanel();
private final JTabbedPane tabs = new JTabbedPane();
private final PlanoActuacaoPanel panelPlano = new PlanoActuacaoPanel();
private final RelatorioLegislacoesPanel panelLegislacao = new RelatorioLegislacoesPanel();
ButtonGroup bg = new ButtonGroup();
private HsRelatorio relatorio = null;
public PanelRelatorio()
{
setupListeners();
startupComponents();
startupLayout();
placeComponents();
}
private void startupComponents()
{
dataRelatorio.setPreferredSize( new Dimension( 150, 0 ) );
panelEquipamentos.setPreferredSize( new Dimension( 400, 0 ) );
bg.add( radioInicial );
bg.add( radioPeriodica );
panelAcompanhantes.setBorder( BorderFactory.createTitledBorder( "Pessoas que acompanharam" ) );
panelEquipamentos.setBorder( BorderFactory.createTitledBorder( "Equipamentos de medi"+ccedil+atilde+"o" ) );
tabs.addTab( "Plano de actua" + ccedil + atilde + "o", panelPlano );
tabs.addTab( "Legisla" + ccedil + atilde + "o", panelLegislacao );
}
private void startupLayout()
{
TableLayout layout = new TableLayout( new double[] {
TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.PREFERRED, TableLayout.FILL, TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.PREFERRED
}, new double[] {
TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL
} );
layout.setVGap( 5 );
layout.setHGap( 5 );
setLayout( layout );
layout = new TableLayout( new double[] {
TableLayout.MINIMUM, TableLayout.FILL, TableLayout.MINIMUM, TableLayout.FILL
}, new double[] {
TableLayout.MINIMUM, TableLayout.MINIMUM
} );
layout.setVGap( 5 );
layout.setHGap( 5 );
panelAcompanhantes.setLayout( layout );
}
private void placeComponents()
{
panelAcompanhantes.add( new JLabel( "Nome" ), new TableLayoutConstraints( 0, 0 ) );
panelAcompanhantes.add( fieldNome1, new TableLayoutConstraints( 1, 0 ) );
panelAcompanhantes.add( new JLabel( "Fun" + ccedil + atilde + "o" ), new TableLayoutConstraints( 2, 0 ) );
panelAcompanhantes.add( fieldFuncao1, new TableLayoutConstraints( 3, 0 ) );
panelAcompanhantes.add( new JLabel( "Nome" ), new TableLayoutConstraints( 0, 1 ) );
panelAcompanhantes.add( fieldNome2, new TableLayoutConstraints( 1, 1 ) );
panelAcompanhantes.add( new JLabel( "Fun" + ccedil + atilde + "o" ), new TableLayoutConstraints( 2, 1 ) );
panelAcompanhantes.add( fieldFuncao2, new TableLayoutConstraints( 3, 1 ) );
TableLayout layout = new TableLayout( new double[] {
TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL, TableLayout.MINIMUM
}, new double[] {
TableLayout.MINIMUM
} );
layout.setVGap( 5 );
layout.setHGap( 5 );
JPanel panel = new JPanel();
panel.setLayout( layout );
panel.add( buttonSave, new TableLayoutConstraints( 0, 0 ) );
panel.add( buttonRevert, new TableLayoutConstraints( 1, 0 ) );
panel.add( buttonSubmit, new TableLayoutConstraints( 3, 0 ) );
add( panel, new TableLayoutConstraints( 0, 0, 7, 0 ) );
add( new JLabel( "Data do relat" + oacute + "rio" ), new TableLayoutConstraints( 0, 1, 2, 1 ) );
add( dataRelatorio, new TableLayoutConstraints( 3, 1 ) );
JLabel labelAvaliacao = new JLabel( "Avalia" + ccedil + atilde + "o" );
labelAvaliacao.setHorizontalAlignment( JLabel.RIGHT );
add( labelAvaliacao , new TableLayoutConstraints( 4, 1 ) );
add( radioInicial, new TableLayoutConstraints( 5, 1 ) );
add( radioPeriodica, new TableLayoutConstraints( 6, 1 ) );
add( new JLabel( "T" + eacute + "cnico Superior de H.S." ), new TableLayoutConstraints( 0, 2, 2, 2 ) );
add( fieldTecnico, new TableLayoutConstraints( 3, 2, 6, 2 ) );
add( panelEquipamentos, new TableLayoutConstraints( 7, 1, 7, 3 ) );
add( panelAcompanhantes, new TableLayoutConstraints( 0, 3, 6, 3 ) );
add( tabs, new TableLayoutConstraints( 0, 4, 7, 4 ) );
}
private void setupListeners()
{
fieldFuncao1.addCaretListener( this );
fieldFuncao2.addCaretListener( this );
fieldNome1.addCaretListener( this );
fieldNome2.addCaretListener( this );
dataRelatorio.addChangeListener( this );
radioInicial.addActionListener( this );
radioPeriodica.addActionListener( this );
buttonSave.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
save();
}
} );
buttonRevert.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
revert();
}
} );
buttonSubmit.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
if( isValidPlano() && confirmSubmit() )
{
submit();
}
}
} );
}
private boolean isValidPlano()
{
boolean result = false;
result = panelPlano.isValidPlano();
if( !result )
{
JOptionPane.showMessageDialog( this, "Todos os riscos devem ser preenchidos antes da submiss"+ atilde + "o do plano de actua" + ccedil + atilde+ "o!", "Erro", JOptionPane.ERROR_MESSAGE, null );
}
return result;
}
private boolean confirmSubmit()
{
return JOptionPane.OK_OPTION == JOptionPane.showConfirmDialog( this, "Ao submeter o Plano de Actua"+ccedil+atilde+"o n"+atilde+"o ser"+aacute+" mais poss"+iacute+"vel alter"+aacute+"-lo. Deseja continuar?" );
}
private void submit()
{
try
{
if( relatorio != null )
{
relatorio.setIsSubmetido( new Date() );
relatorio.save();
// sendMail( relatorio );
refresh();
setRelatorio( relatorio, false );
}
} catch( Exception e )
{
LeafError.error(e);
}
}
private void sendMail( HsRelatorio relatorio )
{
try
{
MailSender sender = new MailSender();
String nomeEstabelecimento = relatorio.getToHsMarcacoesEstabelecimento().getToEstabelecimentos().getNome();
MarcacoesTecnicosHst tecnico = relatorio.getToHsMarcacoesEstabelecimento().getToMarcacoesTecnicosHst();
String nomeTecnico = tecnico == null ? "" : tecnico.getNome();
Date dataVisita = relatorio.getToHsMarcacoesEstabelecimento().getData();
String dataVisitaString = new SimpleDateFormat("dd/MM/yyyy").format( dataVisita );
String subject = "Relatório da Avaliação de Riscos Laborais e Plano de Actuação de " + nomeEstabelecimento + " - auditoria de " + dataVisitaString;
String body = "Exmos. Senhores" +
"
" +
"
" +
"
" +
"Junto enviamos o relatório de avaliação de riscos laborais e " +
"respectivo plano de actuação da auditoria realizada no dia " +
dataVisitaString +
"ao vosso estabelecimento de " +
nomeEstabelecimento +
". Aconselhamos que tenham em conta as não conformidades indicadas " +
"nestes documentos e que preencham o plano de actuação por forma a " +
"auxiliar-vos na planificação das medidas correctivas e para poderem " +
"apresentá-los em caso de inspecção da ACT – Autoridade para as Condições do Trabalho." +
"
" +
"
" +
"
" +
"Caso pretendam o nosso apoio ou necessitem de qualquer esclarecimento, contactem-nos, por favor, através do telefone (+351) 213 504 540." +
"
" +
"
" +
"
" +
"Com os melhores cumprimentos, " +
"
" +
"
" +
"
" +
nomeTecnico +
"
" +
"SIPRP - Sociedade Ibérica de Prevenção de Riscos Profissionais " +
"
" +
"Atrium Saldanha - Praça Duque de Saldanha, 1 - 9º G - 1050-094 Lisboa " +
"
" +
"Telefone: (+351) 213 504 540 " +
"
" +
"Fax: (+351) 213 504 549 " +
"
" +
"E-mail: geral@siprp.pt " +
"
" +
"URL: www.siprp.com " +
"
" +
"
" +
"
" +
"Esta é uma mensagem gerada automaticamente pelo nosso sistema, por favor não responda";
List rels = relatorio.getToHsMarcacoesEstabelecimento().getToEstabelecimentos().getHsEmailEstabelecimento();
for( HsEmailEstabelecimento rel : rels )
{
sender.send( rel.getToHsEmail().getEmail(), "", subject, body, null, null );
}
}
catch( Exception ex )
{
ex.printStackTrace();
}
}
private void save()
{
try
{
if( relatorio != null )
{
relatorio.setData( dataRelatorio.getDate() );
relatorio.setAvaliacaoInicial( radioInicial.isSelected() );
}
relatorio.setAcompanhante1( fieldNome1.getText() );
relatorio.setAcompanhante2( fieldNome2.getText() );
relatorio.setFuncaoAcompanhante1(fieldFuncao1.getText());
relatorio.setFuncaoAcompanhante2(fieldFuncao2.getText());
relatorio.save();
refresh();
buttonRevert.setEnabled( false );
buttonSave.setEnabled( false );
} catch( Exception e )
{
LeafError.error(e);
}
}
private void revert()
{
refresh();
buttonRevert.setEnabled( false );
buttonSave.setEnabled( false );
}
private void refresh()
{
dataRelatorio.setDate( relatorio == null ? null : relatorio.getData() );
if( relatorio == null || relatorio.getAvaliacaoInicial() == null )
{
bg.clearSelection();
}
else
{
radioInicial.setSelected( relatorio.getAvaliacaoInicial() );
radioPeriodica.setSelected( !relatorio.getAvaliacaoInicial() );
}
String tecnicoName = null;
if(relatorio != null)
{
MarcacoesEstabelecimento marcacao = relatorio.getToHsMarcacoesEstabelecimento();
if( marcacao != null )
{
MarcacoesTecnicosHst tecnico = marcacao.getToMarcacoesTecnicosHst();
if( tecnico != null )
{
tecnicoName = tecnico.getNome();
}
}
}
fieldTecnico.setText( tecnicoName );
fieldNome1.setText( relatorio == null ? null : relatorio.getAcompanhante1() );
fieldNome2.setText( relatorio == null ? null : relatorio.getAcompanhante2() );
fieldFuncao1.setText( relatorio == null ? null : relatorio.getFuncaoAcompanhante1() );
fieldFuncao2.setText( relatorio == null ? null : relatorio.getFuncaoAcompanhante2() );
}
private void setEnabled()
{
boolean enabled = relatorio != null && relatorio.getIsSubmetido() == null;
dataRelatorio.setEnabled( enabled );
radioInicial.setEnabled( enabled );;
radioPeriodica.setEnabled( enabled );
fieldTecnico.setEnabled( false );
fieldNome1.setEnabled( enabled );
fieldNome2.setEnabled( enabled );
fieldFuncao1.setEnabled( enabled );
fieldFuncao2.setEnabled( enabled );
buttonSubmit.setEnabled( enabled );
}
public void setRelatorio( HsRelatorio relatorio,boolean create )
{
this.relatorio = relatorio;
buttonSave.setEnabled( false );
buttonRevert.setEnabled( false );
panelEquipamentos.setRelatorio( relatorio );
panelPlano.setRelatorio( relatorio );
if( create )
{
panelPlano.revert(false);
}
refresh();
setEnabled();
}
private void updated( EventObject e )
{
Object source = e.getSource();
if( source instanceof Component )
{
if( ( (Component) source).isEnabled() )
{
buttonSave.setEnabled( true );
buttonRevert.setEnabled( true );
}
}
}
@Override
public void caretUpdate( CaretEvent e )
{
updated(e);
}
@Override
public void stateChanged( ChangeEvent e )
{
updated(e);
}
@Override
public void actionPerformed( ActionEvent e )
{
updated(e);
}
}