diff --git a/trunk/siprp/medicina/presencas/RegistarPresencasWindow.java b/trunk/siprp/medicina/presencas/RegistarPresencasWindow.java index 17e1da98..b20ac6a4 100644 --- a/trunk/siprp/medicina/presencas/RegistarPresencasWindow.java +++ b/trunk/siprp/medicina/presencas/RegistarPresencasWindow.java @@ -11,6 +11,8 @@ package siprp.medicina.presencas; import com.evolute.utils.data.IDObject; import com.evolute.utils.data.MappableObject; +import com.evolute.utils.fop.FOPCreator; +import com.evolute.utils.fop.FOPPrinter; import com.evolute.utils.tracker.TrackableWindow; import com.evolute.utils.ui.DialogException; import com.evolute.utils.ui.calendar.JCalendarPanel; @@ -21,12 +23,21 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.text.DateFormat; import java.util.Arrays; import java.util.Collections; import java.util.Date; +import java.util.Hashtable; import java.util.List; +import java.util.Locale; import java.util.Vector; import javax.swing.*; +import org.jdom.*; +import org.jdom.output.*; +import siprp.clientes.ClientesDataProvider; import siprp.medicina.MedicinaDataProvider; import siprp.medicina.prestadores.PrestadoresDataProvider; @@ -37,6 +48,9 @@ import siprp.medicina.prestadores.PrestadoresDataProvider; public class RegistarPresencasWindow extends JFrame implements ActionListener, TrackableWindow { + protected static final String PRINT_TEMPLATE = "/siprp/medicina/presencas/auxiliares.xsl"; + protected static final DateFormat D_F = DateFormat.getDateInstance( DateFormat.SHORT, new Locale( "pt", "PT" ) ); + protected static final Integer PRESTADOR_ID_SIPRP = new Integer( -1 ); protected static final Integer PRESTADOR_ID_TODOS = new Integer( -2 ); @@ -47,6 +61,7 @@ public class RegistarPresencasWindow extends JFrame protected JButton carregarButton; protected JComboBox prestadoresCombo; protected JButton recarregarPrestadoresButton; + protected JButton imprimirAuxiliaresButton; protected JScrollPane listECDsScroll; protected JScrollPane listConsultasScroll; protected MultipleActionListPanel listECDsPanel; @@ -54,6 +69,8 @@ public class RegistarPresencasWindow extends JFrame protected MedicinaDataProvider provider; protected PrestadoresDataProvider prestadoresProvider; + + protected Presenca ECDS[]; /** Creates a new instance of RegistarPresencasWindow */ public RegistarPresencasWindow() @@ -77,6 +94,8 @@ public class RegistarPresencasWindow extends JFrame prestadoresCombo = new JComboBox (); recarregarPrestadoresButton = new JButton( "Recarregar Prestadores" ); recarregarPrestadoresButton.addActionListener( this ); + imprimirAuxiliaresButton = new JButton( "Imprimir" ); + imprimirAuxiliaresButton.addActionListener( this ); PresencasActionFactory realizouFactory = new PresencasActionFactory( PresencasActionFactory.REALIZOU ); PresencasActionFactory realizouParcialmenteFactory = new PresencasActionFactory( PresencasActionFactory.REALIZOU_PARCIALMENTE ); @@ -117,6 +136,7 @@ public class RegistarPresencasWindow extends JFrame upperPanel.add( prestadoresLabel ); upperPanel.add( prestadoresCombo ); upperPanel.add( recarregarPrestadoresButton ); + upperPanel.add( imprimirAuxiliaresButton ); setDefaultCloseOperation( WindowConstants.DO_NOTHING_ON_CLOSE ); addWindowListener( new WindowAdapter(){ @@ -145,6 +165,10 @@ public class RegistarPresencasWindow extends JFrame { recarregarPrestadores(); } + else if( source.equals( imprimirAuxiliaresButton ) ) + { + imprimirAuxiliares(); + } } public void refresh() @@ -175,6 +199,7 @@ public class RegistarPresencasWindow extends JFrame protected void carregar() { + ECDS = null; try { Date data = dataPanel.getDate(); @@ -190,7 +215,8 @@ public class RegistarPresencasWindow extends JFrame ecds.add( new Presenca( id, nome, nomePlain, empresa, tipo ) ); } Collections.sort( ecds ); - listECDsPanel.showList( ecds.toArray( new Presenca[ ecds.size() ] ) ); + ECDS = ecds.toArray( new Presenca[ ecds.size() ] ); + listECDsPanel.showList( ECDS ); listECDsScroll.setViewportView( listECDsPanel ); Object consultasArray[][] = provider.getListaConsultasByData( data ); @@ -233,4 +259,79 @@ public class RegistarPresencasWindow extends JFrame DialogException.showExceptionMessage( ex, "Erro a carregar prestadores", true ); } } + + protected void imprimirAuxiliares() + { + try + { + Date data = dataPanel.getDate(); + if( ECDS == null || data == null ) + { + return; + } + ClientesDataProvider clientesProvider = + ( ClientesDataProvider ) ClientesDataProvider.getProvider(); + MedicinaDataProvider medicinaProvider = + ( MedicinaDataProvider ) MedicinaDataProvider.getProvider(); + + String dataStr = D_F.format( data ); + + Element rootElement = new Element( "lista-presencas" ); + + for( int n = 0; n < ECDS.length; n++ ) + { + Element presencaElement = new Element( "presenca" ); + + Element trabalhadorElement = new Element( "trabalhador" ); + trabalhadorElement.setText( ECDS[ n ].getNome() ); + presencaElement.addContent( trabalhadorElement ); + + Element empresaElement = new Element( "empresa" ); + empresaElement.setText( ECDS[ n ].getNomeEmpresa() ); + presencaElement.addContent( empresaElement ); + + Element dataElement = new Element( "data" ); + dataElement.setText( dataStr ); + presencaElement.addContent( dataElement ); + + Integer trabalhadorID = medicinaProvider.getTrabalhadorIDByMarcacaoID( ECDS[ n ].getID() ); + Integer empresaID = clientesProvider.getEmpresaIDByTrabalhadorID( trabalhadorID ); + Integer realizados[] = medicinaProvider.getDetalhesRealizadosForEstadosMarcacao( ECDS[ n ].getID() ); + Vector realizadosVector = new Vector(); + realizadosVector.addAll( Arrays.asList( realizados ) ); + IDObject validos[] = medicinaProvider.getDetalhesValidosTrabalhador( empresaID, trabalhadorID ); + for( int v = 0; v < validos.length; v++ ) + { + Integer id = validos[ v ].getID(); + if( !realizadosVector.contains( id ) ) + { + Element ecdElement = new Element( "ecd" ); + ecdElement.setText( validos[ v ].toString() ); + presencaElement.addContent( ecdElement ); + } + } + + rootElement.addContent( presencaElement ); + } + + Document doc = new Document( rootElement ); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + //new XMLOutputter().output( doc, System.out ); + new XMLOutputter().output( doc, baos ); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + FOPCreator creator = FOPCreator.getFOPCreator(); + InputStream xmlIn = new ByteArrayInputStream( baos.toByteArray() ); + creator.createFOfromXML( xmlIn, + getClass().getResourceAsStream( PRINT_TEMPLATE ), + out ); + ByteArrayInputStream in = new ByteArrayInputStream( out.toByteArray() ); + Hashtable printOptions = new Hashtable(); + FOPPrinter.getFOPPrinter().printFO( in, true, true, printOptions ); + } + catch( Exception ex ) + { + DialogException.showExceptionMessage( ex, "Erro a imprimir", true ); + } + } } diff --git a/trunk/siprp/medicina/presencas/auxiliares.xsl b/trunk/siprp/medicina/presencas/auxiliares.xsl index 0205b5cb..ae96ca3c 100644 --- a/trunk/siprp/medicina/presencas/auxiliares.xsl +++ b/trunk/siprp/medicina/presencas/auxiliares.xsl @@ -18,7 +18,7 @@ - + @@ -30,21 +30,21 @@ - + - + Realização de ECDs - + - + ( ) - + data: @@ -52,23 +52,23 @@ - + - + ECD - + Rúbrica - + Motivo de não realização @@ -76,7 +76,7 @@ - + @@ -95,19 +95,14 @@ - + hora de saída: __h__m - + assinatura do trabalhador:________________________________________ - - - - -