forked from Coded/SIPRP
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.
422 lines
13 KiB
422 lines
13 KiB
/*
|
|
* ImpressaoFichasUpperPanel.java
|
|
*
|
|
* Created on 19 de Fevereiro de 2006, 19:00
|
|
*
|
|
* To change this template, choose Tools | Template Manager
|
|
* and open the template in the editor.
|
|
*/
|
|
|
|
package siprp.impressaofichas;
|
|
|
|
import java.awt.*;
|
|
import java.awt.event.*;
|
|
import java.io.*;
|
|
import javax.print.*;
|
|
import javax.swing.*;
|
|
import javax.swing.event.*;
|
|
import java.util.*;
|
|
|
|
import com.evolute.utils.properties.*;
|
|
import com.evolute.utils.tables.*;
|
|
import com.evolute.utils.ui.*;
|
|
import com.evolute.utils.ui.window.*;
|
|
|
|
/**
|
|
*
|
|
* @author Frederico
|
|
*/
|
|
public class ImpressaoFichasWindow extends EditorWindow
|
|
implements ListSelectionListener, ActionListener
|
|
{
|
|
public final static String TITLE = "Impress\u00e3o de Fichas de Aptid\u00e3o";
|
|
|
|
protected final static String PATH_PROPERTY_SUFFIX = ".path";
|
|
|
|
private final static int iPermissionArray[][] =
|
|
new int[][]{ {} };
|
|
|
|
protected JCalendarPanel dataInicioPanel;
|
|
protected JCalendarPanel dataFimPanel;
|
|
protected VectorTableModel empresasModel;
|
|
protected BaseTable empresasTable;
|
|
protected VectorTableModel estabelecimentosModel;
|
|
protected BaseTable estabelecimentosTable;
|
|
protected VectorTableModel fichasModel;
|
|
protected BaseTable fichasTable;
|
|
protected JButton procurarButton;
|
|
protected JTextField pathText;
|
|
protected JButton pathButton;
|
|
protected JComboBox impressorasCombo;
|
|
protected JButton imprimirButton;
|
|
protected JButton imprimirTodasButton;
|
|
|
|
protected ImpressaoFichasDataProvider provider;
|
|
protected PropertyHandler propertyHandler;
|
|
|
|
/** Creates a new instance of ImpressaoFichasUpperPanel */
|
|
public ImpressaoFichasWindow()
|
|
throws Exception
|
|
{
|
|
super( iPermissionArray );
|
|
provider = ( ImpressaoFichasDataProvider ) ImpressaoFichasDataProvider.getProvider();
|
|
propertyHandler = new PropertyHandler();
|
|
setupComponents();
|
|
}
|
|
|
|
private void setupComponents()
|
|
throws Exception
|
|
{
|
|
setTitle( TITLE );
|
|
empresasModel = new VectorTableModel( new String[]{ "empresas" } );
|
|
empresasTable = new BaseTable( empresasModel );
|
|
empresasTable.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
|
|
empresasTable.setNonResizableNorReordable();
|
|
JScrollPane empresasScroll =
|
|
new JScrollPane( empresasTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
|
|
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
|
|
empresasTable.getSelectionModel().addListSelectionListener( this );
|
|
estabelecimentosModel = new VectorTableModel( new String[]{ "estabelecimentos" } );
|
|
estabelecimentosTable = new BaseTable( estabelecimentosModel );
|
|
estabelecimentosTable.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
|
|
estabelecimentosTable.setNonResizableNorReordable();
|
|
JScrollPane estabelecimentosScroll =
|
|
new JScrollPane( estabelecimentosTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
|
|
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
|
|
estabelecimentosTable.getSelectionModel().addListSelectionListener( this );
|
|
fichasModel = new VectorTableModel( new String[]{ "trabalhador", "data" } );
|
|
fichasTable = new BaseTable( fichasModel );
|
|
fichasTable.fixColumnWidth( 1, 120 );
|
|
fichasTable.setNonResizableNorReordable();
|
|
fichasTable.setSelectionMode( ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );
|
|
fichasTable.getSelectionModel().addListSelectionListener( this );
|
|
JScrollPane fichasScroll = new JScrollPane( fichasTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
|
|
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
|
|
JLabel inicioLabel = new JLabel( "In\u00edcio" );
|
|
dataInicioPanel = new JCalendarPanel( null );
|
|
JLabel fimLabel = new JLabel( "Fim" );
|
|
dataFimPanel = new JCalendarPanel( null );
|
|
procurarButton = new JButton( "Carregar" );
|
|
procurarButton.addActionListener( this );
|
|
procurarButton.setEnabled( false );
|
|
pathText = new JTextField();
|
|
pathText.setEditable( false );
|
|
pathButton = new JButton( "Escolher Direct\u00f3rio" );
|
|
pathButton.addActionListener( this );
|
|
impressorasCombo = new JComboBox();
|
|
PrintService printers[] = PrintServiceLookup.lookupPrintServices( null, null );
|
|
for( int n = 0; n < printers.length; n++ )
|
|
{
|
|
impressorasCombo.addItem( printers[ n ].getName() );
|
|
}
|
|
imprimirButton = new JButton( "Imprimir escolhidas" );
|
|
imprimirButton.addActionListener( this );
|
|
imprimirButton.setEnabled( false );
|
|
imprimirTodasButton = new JButton( "Imprimir Todas" );
|
|
imprimirTodasButton.addActionListener( this );
|
|
imprimirTodasButton.setEnabled( false );
|
|
JPanel upperPad = new JPanel();
|
|
JPanel lowerPad = new JPanel();
|
|
JPanel upperPanel = new JPanel();
|
|
|
|
GridBagLayout gridbag = new GridBagLayout();
|
|
setLayout( gridbag );
|
|
GridBagConstraints constraints = new GridBagConstraints();
|
|
constraints.insets = new Insets( 1, 1, 1, 1 );
|
|
constraints.fill = GridBagConstraints.BOTH;
|
|
constraints.gridheight = 1;
|
|
constraints.weighty = 0.35;
|
|
constraints.weightx = 1;
|
|
constraints.gridwidth = GridBagConstraints.REMAINDER;
|
|
gridbag.setConstraints( upperPanel, constraints );
|
|
|
|
constraints.gridwidth = 2;
|
|
constraints.weightx = 1;
|
|
constraints.weighty = 0.65;
|
|
constraints.gridheight = GridBagConstraints.REMAINDER;
|
|
gridbag.setConstraints( fichasScroll, constraints );
|
|
|
|
constraints.weighty = 0;
|
|
constraints.gridheight = 1;
|
|
constraints.weightx = 0;
|
|
constraints.gridwidth = GridBagConstraints.REMAINDER;
|
|
gridbag.setConstraints( inicioLabel, constraints );
|
|
gridbag.setConstraints( dataInicioPanel, constraints );
|
|
gridbag.setConstraints( fimLabel, constraints );
|
|
gridbag.setConstraints( dataFimPanel, constraints );
|
|
gridbag.setConstraints( procurarButton, constraints );
|
|
gridbag.setConstraints( pathText, constraints );
|
|
gridbag.setConstraints( pathButton, constraints );
|
|
gridbag.setConstraints( impressorasCombo, constraints );
|
|
gridbag.setConstraints( imprimirButton, constraints );
|
|
gridbag.setConstraints( imprimirTodasButton, constraints );
|
|
|
|
constraints.weighty = 0.32;
|
|
gridbag.setConstraints( upperPad, constraints );
|
|
gridbag.setConstraints( lowerPad, constraints );
|
|
|
|
add( upperPanel );
|
|
add( fichasScroll );
|
|
add( upperPad );
|
|
add( inicioLabel );
|
|
add( dataInicioPanel );
|
|
add( fimLabel );
|
|
add( dataFimPanel );
|
|
add( procurarButton );
|
|
add( lowerPad );
|
|
add( pathButton );
|
|
add( pathText );
|
|
add( impressorasCombo );
|
|
add( imprimirButton );
|
|
add( imprimirTodasButton );
|
|
|
|
upperPanel.setLayout( new GridLayout( 1, 2 ) );
|
|
upperPanel.add( empresasScroll );
|
|
upperPanel.add( estabelecimentosScroll );
|
|
ColumnizedMappable empresas[] = provider.getAllEmpresas();
|
|
Vector values = empresasModel.getValues();
|
|
values.addAll( Arrays.asList( empresas ) );
|
|
empresasModel.setValues( values );
|
|
|
|
Properties properties = propertyHandler.load();
|
|
System.out.println( properties );
|
|
String path = (String) properties.get( getClass().getName() + PATH_PROPERTY_SUFFIX );
|
|
if( path == null )
|
|
{
|
|
setDirectorio( System.getProperty( "user.home" ) );
|
|
}
|
|
else
|
|
{
|
|
pathText.setText( path );
|
|
}
|
|
}
|
|
|
|
public void valueChanged( ListSelectionEvent e )
|
|
{
|
|
Object source = e.getSource();
|
|
if( e.getValueIsAdjusting() )
|
|
{
|
|
return;
|
|
}
|
|
if( source.equals( empresasTable.getSelectionModel() ) )
|
|
{
|
|
carregarEstabelecimentos();
|
|
}
|
|
else if( source.equals( estabelecimentosTable.getSelectionModel() ) )
|
|
{
|
|
procurarButton.setEnabled( estabelecimentosTable.getSelectedRow() != -1 );
|
|
}
|
|
else if( source.equals( fichasTable.getSelectionModel() ) )
|
|
{
|
|
imprimirButton.setEnabled( fichasTable.getSelectedRow() != -1 );
|
|
}
|
|
}
|
|
|
|
protected void carregarEstabelecimentos()
|
|
{
|
|
estabelecimentosTable.clearSelection();
|
|
int selected = empresasTable.getSelectedRow();
|
|
estabelecimentosModel.clearAll();
|
|
if( selected > -1 )
|
|
{
|
|
try
|
|
{
|
|
Integer empresaID = ( ( ColumnizedMappable ) empresasModel.getRowAt( selected ) ).getID();
|
|
ColumnizedMappable estabelecimentos[] = provider.getAllEstabelecimentosForEmpresa( empresaID);
|
|
Vector values = estabelecimentosModel.getValues();
|
|
values.addAll( Arrays.asList( estabelecimentos ) );
|
|
estabelecimentosModel.setValues( values );
|
|
}
|
|
catch( Exception ex )
|
|
{
|
|
DialogException.showExceptionMessage( ex, "Erro a carregar os estabelecimentos.", true );
|
|
estabelecimentosModel.clearAll();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void clear()
|
|
{
|
|
empresasTable.clearSelection();
|
|
}
|
|
|
|
public void fill( Object value )
|
|
{
|
|
if( value == null )
|
|
{
|
|
clear();
|
|
}
|
|
Integer ids[] = ( Integer [] ) value;
|
|
for( int n = 0; n < empresasTable.getRowCount(); n++ )
|
|
{
|
|
if( ( ( ColumnizedMappable ) empresasModel.getRowAt( n ) ).getID().equals( ids[ 0 ] ) )
|
|
{
|
|
empresasTable.setRowSelectionInterval( n, n );
|
|
break;
|
|
}
|
|
}
|
|
|
|
for( int n = 0; n < estabelecimentosTable.getRowCount(); n++ )
|
|
{
|
|
if( ( ( ColumnizedMappable ) estabelecimentosModel.getRowAt( n ) ).getID().equals( ids[ 1 ] ) )
|
|
{
|
|
estabelecimentosTable.setRowSelectionInterval( n, n );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public Object save()
|
|
{
|
|
int empresaSelected = empresasTable.getSelectedRow();
|
|
int estabelecimentoSelected = estabelecimentosTable.getSelectedRow();
|
|
return new Integer[]{
|
|
empresaSelected == -1 ? null : ( ( ColumnizedMappable ) empresasModel.getRowAt( empresaSelected ) ).getID(),
|
|
estabelecimentoSelected == -1 ? null : ( ( ColumnizedMappable ) estabelecimentosModel.getRowAt( estabelecimentoSelected ) ).getID()
|
|
};
|
|
}
|
|
|
|
public void setEnabled( boolean enable )
|
|
{
|
|
empresasTable.setEnabled( enable );
|
|
estabelecimentosTable.setEnabled( enable );
|
|
}
|
|
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
Object source = e.getSource();
|
|
if( source.equals( procurarButton ) )
|
|
{
|
|
procurar();
|
|
}
|
|
else if( source.equals( imprimirButton ) )
|
|
{
|
|
imprimir();
|
|
}
|
|
else if( source.equals( imprimirTodasButton ) )
|
|
{
|
|
imprimirTodas();
|
|
}
|
|
else if( source.equals( pathButton ) )
|
|
{
|
|
escolherDirectorio();
|
|
}
|
|
}
|
|
|
|
public void procurar()
|
|
{
|
|
int selected = estabelecimentosTable.getSelectedRow();
|
|
Date dataInicio = dataInicioPanel.getDate();
|
|
Date dataFim = dataFimPanel.getDate();
|
|
if( selected == -1 || ( dataInicio == null && dataFim == null ) )
|
|
{
|
|
JOptionPane.showMessageDialog( this, "Tem de escolher pelo menos uma data e um estabelecimento.", "Erro",
|
|
JOptionPane.ERROR_MESSAGE );
|
|
return;
|
|
}
|
|
if( dataInicio == null )
|
|
{
|
|
dataInicio = dataFim;
|
|
}
|
|
else if( dataFim == null )
|
|
{
|
|
dataFim = dataInicio;
|
|
}
|
|
fichasModel.clearAll();
|
|
try
|
|
{
|
|
Integer estabelecimentoID = ( ( ColumnizedMappable ) estabelecimentosModel.getRowAt( selected ) ).getID();
|
|
Object fichas[][] = provider.getAllFichasForEstabelecimentoAndDatas( estabelecimentoID, dataInicio, dataFim );
|
|
Vector values = fichasModel.getValues();
|
|
for( int n = 0; n < fichas.length; n++ )
|
|
{
|
|
values.add( new ColumnizedObjectArray( fichas[ n ], true ) );
|
|
}
|
|
fichasModel.setValues( values );
|
|
}
|
|
catch( Exception ex )
|
|
{
|
|
DialogException.showExceptionMessage( ex, "Erro a carregar a lista.", true );
|
|
estabelecimentosModel.clearAll();
|
|
}
|
|
imprimirTodasButton.setEnabled( fichasTable.getRowCount() > 0 );
|
|
}
|
|
|
|
public void imprimir()
|
|
{
|
|
imprimirLinhas( fichasTable.getSelectedRows() );
|
|
}
|
|
|
|
public void imprimirTodas()
|
|
{
|
|
int linhas[] = new int[ fichasTable.getRowCount() ];
|
|
for( int n = 0; n < linhas.length; n++ )
|
|
{
|
|
linhas[ n ] = n;
|
|
}
|
|
imprimirLinhas( linhas );
|
|
}
|
|
|
|
protected void imprimirLinhas( int linhas[] )
|
|
{
|
|
try
|
|
{
|
|
File file = new File( pathText.getText().trim() );
|
|
if( !file.exists() || !file.isDirectory() )
|
|
{
|
|
throw new IOException( "Direct\u00f3rio inexistente ou indispon\u00edvel: " + pathText.getText().trim() );
|
|
}
|
|
}
|
|
catch( IOException ioex )
|
|
{
|
|
JOptionPane.showMessageDialog( this, ioex.getMessage(), "Erro...",
|
|
JOptionPane.ERROR_MESSAGE );
|
|
return;
|
|
}
|
|
String impressora = ( String ) impressorasCombo.getSelectedItem();
|
|
Integer ids[] = new Integer[ linhas.length ];
|
|
for( int n = 0; n < ids.length; n++ )
|
|
{
|
|
ids[ n ] = ( ( ColumnizedObjectArray )fichasModel.getRowAt( linhas[ n ] ) ).getID();
|
|
}
|
|
int option = JOptionPane.showConfirmDialog( this, "Imprimir as " + ids.length + " fichas para a impressora " + impressora + "?",
|
|
"Imprimir", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE );
|
|
if( option == 0 )
|
|
{
|
|
System.out.println( "imprimir" );
|
|
new FichasPrinter( ids, impressora, pathText.getText().trim(),
|
|
empresasModel.getRowAt( empresasTable.getSelectedRow() ).toString(),
|
|
estabelecimentosModel.getRowAt( estabelecimentosTable.getSelectedRow() ).toString() ).start();
|
|
}
|
|
}
|
|
|
|
protected void escolherDirectorio()
|
|
{
|
|
JFileChooser chooser = new JFileChooser();
|
|
chooser.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY );
|
|
int returnVal = chooser.showOpenDialog( this );
|
|
if(returnVal == JFileChooser.APPROVE_OPTION)
|
|
{
|
|
setDirectorio( chooser.getSelectedFile().getAbsolutePath() );
|
|
}
|
|
}
|
|
|
|
protected void setDirectorio( String path )
|
|
{
|
|
if( path != null )
|
|
{
|
|
pathText.setText( path );
|
|
Properties properties = propertyHandler.load();
|
|
properties.setProperty( getClass().getName() + PATH_PROPERTY_SUFFIX, path );
|
|
try
|
|
{
|
|
propertyHandler.save( properties );
|
|
}
|
|
catch( IOException ioex )
|
|
{
|
|
ioex.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
}
|