/* * PesquisasWindow.java * * Created on 3 de Junho de 2004, 18:13 */ package siprp.pesquisas; import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; import javax.swing.event.*; import java.util.*; import com.evolute.utils.*; import com.evolute.utils.data.*; import com.evolute.utils.documents.*; import com.evolute.utils.jdo.*; import com.evolute.utils.tables.*; import com.evolute.utils.tracker.*; import com.evolute.utils.ui.*; import com.evolute.utils.ui.text.*; import siprp.data.*; /** * * @author fpalma */ public class PesquisasWindow extends JFrame implements TrackableWindow, ListSelectionListener, ActionListener { private JDOProvider JDO; private PesquisasProvider provider; private JTextField anoText; private BaseTable empresasTable; private VectorTableModel empresasModel; private BaseTable estabelecimentosTable; private VectorTableModel estabelecimentosModel; private JButton pesquisarButton; private JButton exportarButton; private JEditorPane resultadoText; // public static void main( String args[] ) // throws Exception // { // new PesquisasWindow().show(); // } /** Creates a new instance of PesquisasWindow */ public PesquisasWindow() throws Exception { provider = (PesquisasProvider)PesquisasProvider.getProvider(); JDO =( JDOProvider ) Singleton.getInstance( Singleton.DEFAULT_JDO_PROVIDER ); setupComponents(); } private void setupComponents() { setSize( 1000, 700 ); setTitle( "Relat\u00f3rio Anual" ); JLabel anoLabel = new JLabel( "Ano" ); anoText = new JTextField(); anoText.setDocument( new YearDocument() ); anoText.setPreferredSize( new Dimension( 50, 20 ) ); new CopyPasteHandler( anoText ); empresasModel = new VectorTableModel( new String[]{ "Designa\u00e7\u00e3o Social" } ); empresasTable = new BaseTable( empresasModel ); empresasTable.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); empresasTable.setNonResizableNorReordable(); empresasTable.getSelectionModel().addListSelectionListener( this ); JScrollPane empresasScroll = new JScrollPane(); empresasScroll.setBorder( BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), "Empresa" ) ); empresasScroll.setViewportView( empresasTable ); empresasScroll.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ); empresasScroll.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ); empresasScroll.getVerticalScrollBar().setBlockIncrement(20); estabelecimentosModel = new VectorTableModel( new String[]{ "Nome" } ); estabelecimentosTable = new BaseTable( estabelecimentosModel ); estabelecimentosTable.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); estabelecimentosTable.setNonResizableNorReordable(); estabelecimentosTable.getSelectionModel().addListSelectionListener( this ); JScrollPane estabelecimentosScroll = new JScrollPane(); estabelecimentosScroll.setBorder( BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), "Estabelecimento" ) ); estabelecimentosScroll.setViewportView( estabelecimentosTable ); estabelecimentosScroll.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ); estabelecimentosScroll.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ); pesquisarButton = new JButton( "Pesquisar" ); pesquisarButton.addActionListener( this ); exportarButton = new JButton( "Exportar" ); exportarButton.addActionListener( this ); resultadoText = new JEditorPane( "text/html", "" ); resultadoText.setEditable( false ); // resultadoText.setLineWrap( true ); // resultadoText.setWrapStyleWord( true ); new CopyPasteHandler( resultadoText ); JScrollPane resultadoScroll = new JScrollPane(); resultadoScroll.setViewportView( resultadoText ); resultadoScroll.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ); resultadoScroll.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ); JPanel pad; GridBagLayout gridbag = new GridBagLayout(); getContentPane().setLayout( gridbag ); GridBagConstraints constraints = new GridBagConstraints(); constraints.insets = new Insets( 5, 5, 5, 5 ); constraints.fill = GridBagConstraints.HORIZONTAL; constraints.weighty = 0; constraints.gridheight = 1; constraints.weightx = 1; constraints.gridwidth = GridBagConstraints.REMAINDER; JPanel anoPanel = new JPanel(); anoPanel.setLayout( new FlowLayout( FlowLayout.LEFT ) ); anoPanel.add( anoLabel ); anoPanel.add( anoText ); gridbag.setConstraints( anoPanel, constraints ); getContentPane().add( anoPanel ); constraints.fill = GridBagConstraints.BOTH; constraints.weighty = 0.2; constraints.gridheight = 2; constraints.weightx = 0.3; constraints.gridwidth = 3; gridbag.setConstraints( empresasScroll, constraints ); getContentPane().add( empresasScroll ); gridbag.setConstraints( estabelecimentosScroll, constraints ); getContentPane().add( estabelecimentosScroll ); constraints.weighty = 0; constraints.gridheight = 1; constraints.weightx = 0.4; constraints.gridwidth = GridBagConstraints.REMAINDER; pad = new JPanel(); gridbag.setConstraints( pad, constraints ); getContentPane().add( pad ); constraints.fill = GridBagConstraints.HORIZONTAL; constraints.weighty = 0; constraints.gridheight = 1; constraints.weightx = 0; constraints.gridwidth = 1; JPanel buttonPanel = new JPanel(); buttonPanel.setLayout( new GridLayout( 1, 2 ) ); buttonPanel.add( pesquisarButton ); buttonPanel.add( exportarButton ); gridbag.setConstraints( buttonPanel, constraints ); getContentPane().add( buttonPanel ); constraints.weighty = 0; constraints.gridheight = 1; constraints.weightx = 0.4; constraints.gridwidth = GridBagConstraints.REMAINDER; pad = new JPanel(); gridbag.setConstraints( pad, constraints ); getContentPane().add( pad ); constraints.fill = GridBagConstraints.BOTH; constraints.weighty = 0.8; constraints.gridheight = GridBagConstraints.REMAINDER; constraints.weightx = 1; constraints.gridwidth = GridBagConstraints.REMAINDER; gridbag.setConstraints( resultadoScroll, constraints ); getContentPane().add( resultadoScroll ); } private boolean close() { setVisible( false ); dispose(); return true; } public boolean closeIfPossible() { return close(); } public void open() { empresasTable.clearSelection(); try { IDObject empresas[] = provider.getAllEmpresas(); empresasModel.setValues( new Vector( Arrays.asList( empresas ) ) ); } catch( Exception ex ) { DialogException.showExceptionMessage( ex, "Erro a carregar dados", true ); } setVisible( true ); } public void refresh() { } public void valueChanged( ListSelectionEvent e ) { Object source = e.getSource(); if( source.equals( empresasTable.getSelectionModel() ) ) { estabelecimentosTable.clearSelection(); int selected = empresasTable.getSelectedRow(); if( selected == -1 ) { return; } IDObject empresa = (IDObject) empresasModel.getRowAt( selected ); estabelecimentosModel.clearAll(); IDObject estabelecimentos[]; try { estabelecimentos = provider.getAllEstabelecimentosForEmpresa( empresa.getID() ); } catch( Exception ex ) { DialogException.showExceptionMessage( ex, "Erro a carregar os estabelecimentos", true ); return; } Vector v = new Vector( Arrays.asList( estabelecimentos ) ); v.add( new MappableObject( new Integer( -1 ), "TODOS" ) ); estabelecimentosModel.setValues( v ); } /* else if( source.equals( estabelecimentosTable.getSelectionModel() ) ) { }*/ } public void actionPerformed( ActionEvent e ) { Object source = e.getSource(); if( source.equals( pesquisarButton ) ) { int sEmpresa = empresasTable.getSelectedRow(); int sEstabelecimento = estabelecimentosTable.getSelectedRow(); String anoStr = anoText.getText(); int ano = ( anoStr.length() != 0 )? Integer.parseInt( anoStr ): -1; if( sEmpresa == -1 || ano == -1 ) { JOptionPane.showMessageDialog( this, "Tem de escolher ano e empresa", "Erro...", JOptionPane.ERROR_MESSAGE ); return; } StringBuffer buff = new StringBuffer(); buff.append( "ANO: " ); buff.append( "" + ano + "
" ); buff.append( "
EMPRESA
" ); try { Integer idEmpresa = ( (IDObject)empresasModel.getRowAt( sEmpresa ) ).getID(); EmpresaData empresa = (EmpresaData)JDO.load( EmpresaData.class, idEmpresa ); buff.append( " DESIGNA\u00C7\u00C3O SOCIAL: " ); String designacao = (String)empresa.get( EmpresaData.DESIGNACAO_SOCIAL ); buff.append( "" + ( designacao == null ? "" : designacao.trim() ) + "
" ); buff.append( " MORADA: " ); String morada = (String)empresa.get( EmpresaData.MORADA ); buff.append( "" + ( morada == null ? "" : morada.trim() ) + "
" ); buff.append( " LOCALIDADE: " ); String localidade = ( String ) empresa.get( EmpresaData.LOCALIDADE ); buff.append( "" + ( localidade == null ? "" : localidade.trim() ) + "
" ); buff.append( " C\u00D3DIGO POSTAL: " ); String codigoPostal = ( String ) empresa.get( EmpresaData.CODIGO_POSTAL ); buff.append( "" + ( codigoPostal == null ? "" : codigoPostal.trim() ) + "
" ); ContactoData contacto = (ContactoData)empresa.get( EmpresaData.CONTACTO_2 ); if( contacto == null ) { buff.append( " TELEFONE:
" ); buff.append( " FAX:
" ); } else { buff.append( " TELEFONE: " ); String telefone = ( String ) contacto.get( ContactoData.TELEFONE ); buff.append( "" + ( telefone == null ? "" : telefone.trim() ) + "
" ); buff.append( " FAX: " ); String fax = ( String ) contacto.get( ContactoData.TELEFONE ); buff.append( "" + ( fax == null ? "" : fax.trim() ) + "
" ); } buff.append( " DISTRITO: " ); String distrito = ( String ) empresa.get( EmpresaData.DISTRITO ); buff.append( "" + ( distrito == null ? "" : distrito ) + "
" ); buff.append( " CONCELHO: " ); String concelho = ( String ) empresa.get( EmpresaData.CONCELHO ); buff.append( "" + ( concelho == null ? "" : concelho ) + "
" ); buff.append( " N\u00DAMERO PESSOA COLECTIVA: " ); String contribuinte = ( String ) empresa.get( EmpresaData.CONTRIBUINTE ); buff.append( "" + ( contribuinte == null ? "" : contribuinte ) + "
" ); buff.append( " N\u00DAMERO SEGURAN\u00C7A SOCIAL: " ); String segSocial = ( String ) empresa.get( EmpresaData.SEGURANCA_SOCIAL ); buff.append( "" + ( segSocial == null ? "" : segSocial ) + "
" ); buff.append( " CAE: " ); String CAE = ( String ) empresa.get( EmpresaData.CAE ); buff.append( "" + ( CAE == null ? "" : CAE ) + "
" ); buff.append( "
 N\u00DAMERO M\u00C9DIO DE TRABALHADORES DURANTE O ANO" ); double contagemMedia[] = provider.countNumeroMedioTrabalhadoresEmpresa( idEmpresa, ano ); buff.append( "" ); buff.append( "" ); buff.append( "" ); buff.append( "" ); buff.append( ""); buff.append( "" ); buff.append( "" ); buff.append( "" ); buff.append( "
    TOTAL HOMENS MULHERES
  TOTAL " + (int)( Math.round( contagemMedia[0] ) + Math.round( contagemMedia[1] ) ) + " " + ( (int)Math.round( contagemMedia[0] ) ) + " " + ( (int)Math.round( contagemMedia[1] ) ) + "
" ); buff.append( "
 N\u00DAMERO TOTAL DE TRABALHADORES DURANTE O ANO" ); double contagemTotal[] = provider.countNumeroTotalTrabalhadoresEmpresa( idEmpresa, ano ); buff.append( "" ); buff.append( "" ); buff.append( "" ); buff.append( "" ); buff.append( ""); buff.append( "" ); buff.append( "" ); buff.append( "" ); buff.append( "
    TOTAL HOMENS MULHERES
  TOTAL " + (int)( Math.round( contagemTotal[0] ) + Math.round( contagemTotal[1] ) ) + " " + ( (int)Math.round( contagemTotal[0] ) ) + " " + ( (int)Math.round( contagemTotal[1] ) ) + "
" ); IDObject estabelecimentos[]; if( sEstabelecimento == -1 || ( ( IDObject )estabelecimentosModel.getRowAt( sEstabelecimento ) ).getID().equals( new Integer( -1 ) ) ) { estabelecimentos = provider.getAllEstabelecimentosForEmpresa( idEmpresa ); } else { estabelecimentos = new IDObject[ 1 ]; estabelecimentos[ 0 ] = ( IDObject )estabelecimentosModel.getRowAt( sEstabelecimento ); } buff.append( "
" ); buff.append( "
 ESTABELECIMENTOS
" ); buff.append( "
" ); for( int n = 0; n < estabelecimentos.length; n++ ) { EstabelecimentoData estabelecimento = (EstabelecimentoData)JDO.load( EstabelecimentoData.class, estabelecimentos[ n ].getID() ); buff.append( "  NOME: " ); String nome = (String)estabelecimento.get( EstabelecimentoData.NOME ); buff.append( "" + ( nome == null ? "" : nome.trim() ) + "
" ); buff.append( "  MORADA: " ); morada = (String)estabelecimento.get( EstabelecimentoData.MORADA ); buff.append( "" + ( morada == null ? "" : morada.trim() ) + "
" ); buff.append( "  LOCALIDADE: " ); localidade = (String)estabelecimento.get( EstabelecimentoData.LOCALIDADE ); buff.append( "" + ( localidade == null ? "" : localidade.trim() ) + "
" ); buff.append( "  C\u00D3DIGO POSTAL: " ); codigoPostal = (String)estabelecimento.get( EstabelecimentoData.CODIGO_POSTAL ); buff.append( "" + ( codigoPostal == null ? "" : codigoPostal.trim() ) + "
" ); contacto = (ContactoData)estabelecimento.get( EstabelecimentoData.CONTACTO ); if( contacto == null ) { buff.append( "  TELEFONE:
" ); buff.append( "  FAX:
" ); } else { buff.append( "  TELEFONE: " ); String telefone = ( String ) contacto.get( ContactoData.TELEFONE ); buff.append( "" + ( telefone == null ? "" : telefone.trim() ) + "
" ); buff.append( "  FAX: " ); String fax = ( String ) contacto.get( ContactoData.TELEFONE ); buff.append( "" + ( fax == null ? "" : fax.trim() ) + "
" ); } int countTrabalhadores[] = provider.countTrabalhadoresEstabelecimentoDezembro( estabelecimentos[ n ].getID(), ano ); buff.append( "
" ); buff.append( "  TRABALHADORES A 31 DE DEZEMBRO DE " + ano + ": " ); buff.append( "
" ); buff.append( "" ); buff.append( "" ); buff.append( "" ); buff.append( "" ); buff.append( "" ); buff.append( "" + "" + "" + "" ); buff.append( "" ); int countTrabalhadoresEtario[][] = provider.countTrabalhadoresEstabelecimentoDezembroPorGrupoEtario( estabelecimentos[ n ].getID(), ano ); buff.append( "" ); buff.append( "" + "" + "" + "" ); buff.append( "" ); buff.append( "" ); buff.append( "" + "" + "" + "" ); buff.append( "" ); buff.append( "" ); buff.append( "" + "" + "" + "" ); buff.append( "" ); buff.append( "
   TOTALHOMENSMULHERES
  TOTAL " + ( countTrabalhadores[0] + countTrabalhadores[1] ) + " " + ( countTrabalhadores[0] ) + " " + ( countTrabalhadores[1] ) + "
  MENOS DE 18 ANOS " + ( countTrabalhadoresEtario[0][0] + countTrabalhadoresEtario[0][1] ) + " " + ( countTrabalhadoresEtario[0][0] ) + " " + ( countTrabalhadoresEtario[0][1] ) + "
  18 A 49 ANOS " + ( countTrabalhadoresEtario[1][0] + countTrabalhadoresEtario[1][1] ) + " " + ( countTrabalhadoresEtario[1][0] ) + " " + ( countTrabalhadoresEtario[1][1] ) + "
  MAIS DE 50 ANOS " + ( countTrabalhadoresEtario[2][0] + countTrabalhadoresEtario[2][1] ) + " " + ( countTrabalhadoresEtario[2][0] ) + " " + ( countTrabalhadoresEtario[2][1] ) + "
" ); buff.append( "
" ); int countExames[][] = provider.countExamesEstabelecimentoDezembroPorGrupoEtario( estabelecimentos[ n ].getID(), ano ); for( int cE = 0; cE < countExames[ countExames.length - 2 ].length; cE++ ) { countExames[ countExames.length - 2 ][ cE ] += countExames[ countExames.length - 1 ][ cE ]; } int totais[] = new int[ 6 ]; for( int cE1 = 0; cE1 < totais.length; cE1++ ) { for( int cE2 = 0; cE2 < countExames.length; cE2++ ) { totais[ cE1 ] += countExames[ cE2 ][ cE1 ]; } } buff.append( "
" ); buff.append( "  N\u00DAMERO DE EXAMES DE ADMISS\u00C3O, PERI\u00D3DICOS E OCASIONAIS EFECTUADOS" ); buff.append( "
" ); buff.append( "" ); buff.append( "" + "" ); buff.append( "" ); buff.append( "" ); for( int t = 0; t < 3; t++ ) { buff.append( "" ); } buff.append( "" ); buff.append( "" ); buff.append( "" ); for( int t = 3; t < 6; t++ ) { buff.append( "" ); } buff.append( "" ); String sexos[] = new String[]{ "H", "M" }; for( int t = 0; t < provider.DESCRICAO_TIPOS_EXAME.length; t++ ) { buff.append( "" ); for( int s = 0; s < 2; s++ ) { buff.append( "" ); buff.append( "" ); for( int d = 0; d < 3; d++ ) { buff.append( "" ); } if( s == 0 ) { buff.append( "" ); } else { buff.append( "" ); } } } int countExamesOcasionais[][] = provider.countExamesOcasionaisEstabelecimentoDezembroPorGrupoEtario( estabelecimentos[ n ].getID(), ano ); for( int t = 0; t < provider.DESCRICAO_TIPOS_OCASIONAL.length; t++ ) { buff.append( "" ); for( int s = 0; s < 2; s++ ) { buff.append( "" ); int sum = countExamesOcasionais[t][s*3]+countExamesOcasionais[t][s*3+1]+countExamesOcasionais[t][s*3+2]; buff.append( "" ); for( int d = 0; d < 3; d++ ) { int val = countExamesOcasionais[t][s*3+d]; if( val < 0 ) { countExamesOcasionais[t][s*3+d] = 0; } buff.append( "" ); } if( s == 0 ) { buff.append( "" ); } else { buff.append( "" ); } } } buff.append( "
      TOTAL INFERIOR A 18 ANOS 18 A 49 ANOS 50 E MAIS ANOS 
   TOTAL DE EXAMES H" + ( totais[0] + totais[1] + totais[2] ) + " " + totais[t] + " 
     M" + ( totais[3] + totais[4] + totais[5] ) + " " + totais[t] + " 
    "+provider.DESCRICAO_TIPOS_EXAME[t]+" " + sexos[ s ] + "" + (countExames[t][s*3]+countExames[t][s*3+1]+countExames[t][s*3+2]) + " " + countExames[t][s*3+d] + " 
    
       "+provider.DESCRICAO_TIPOS_OCASIONAL[t]+" " + sexos[ s ] + "" + ( sum < 0 ? "-" : "" + sum ) + " " + ( val < 0 ? "-" : "" + val ) + " 
       
" ); buff.append( "
" ); buff.append( "  EXAMES COMPLEMENTARES REALIZADOS" ); buff.append( "
" ); buff.append( "" ); buff.append( "" ); buff.append( "" ); String nomesExamesComp[] = provider.getNomesExames(); // int countExamesComp[] = provider.countExamesComplementaresEmpresa( idEmpresa, ano ); int countExamesComp[] = provider.countExamesComplementaresEstabelecimento( estabelecimentos[ n ].getID(), ano ); for( int nec = 0; nec < nomesExamesComp.length; nec++ ) { buff.append( "" ); buff.append( "" ); buff.append( "" ); buff.append( "" ); } buff.append( "
   TIPO DE EXAME N\u00BA TOTAL DE EXAMES
   " + nomesExamesComp[nec] + " " + countExamesComp[nec] + "
" ); buff.append("


"); } resultadoText.setText( buff.toString() ); } catch( Exception ex ) { DialogException.showExceptionMessage( ex, "Erro a carregar dados", true ); return; } } else if( source.equals( exportarButton ) ) { exportar(); } } public void exportar() { FileDialog dialog = new FileDialog( this, "Ficheiro de destino", FileDialog.SAVE ); dialog.setDirectory( System.getProperty( "user.home" ) ); dialog.setVisible( true ); String fileName; String dirName; fileName = dialog.getFile(); dirName = dialog.getDirectory(); if( fileName != null ) { int index = fileName.indexOf( '.' ); if( index == -1 ) { fileName += ".html"; } if( index == fileName.length() - 1 ) { fileName += "html"; } String fullName = dirName + fileName; String text = resultadoText.getText(); String title = "S.I.P.R.P. - Sociedade Ibérica de Prevenção de Riscos Profissionais"; String style = ""; text = text.replace( "", "\n\t\t" + title + "\n" + style ); text = text.replace( "", "
" ); text = text.replace( "", "
" ); text = text.replace( "", "\n
Relatório Anual
" ); // String title = "S.I.P.R.P. - Sociedade Ibérica de Prevenção de Riscos Profissionais"; // text = text.replace( "", "\n\t\t" + title + "" ); // System.out.println( text ); try { FileWriter writer = new FileWriter( new File( fullName ) ); writer.write( text ); writer.close(); } catch( IOException ex ) { DialogException.showException( ex ); return; } } } }