/*
 * RealizouParcialmenteAction.java
 *
 * Created on January 31, 2007, 6:20 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package siprp.medicina.presencas.actions;

import com.evolute.utils.data.IDObject;
import com.evolute.utils.ui.DialogException;
import java.awt.event.ActionEvent;
import java.util.Arrays;
import java.util.Vector;
import javax.swing.AbstractAction;
import javax.swing.JOptionPane;
import siprp.clientes.ClientesDataProvider;
import siprp.data.Marcacao;
import siprp.medicina.MedicinaDataProvider;
import siprp.medicina.presencas.DetalhesRealizacaoDialog;
import siprp.medicina.presencas.Presenca;
import siprp.medicina.presencas.PresencasDataProvider;

/**
 *
 * @author fpalma
 */
public class RealizouParcialmenteAction extends AbstractAction
{
	protected Presenca presenca;
	
	/** Creates a new instance of RealizouParcialmenteAction */
	public RealizouParcialmenteAction( Presenca presenca )
	{
		super( "Parcialmente" );
		this.presenca = presenca;
		if( Marcacao.TIPO_MARCACAO_TRABALHADOR_CONSULTA == presenca.getTipo().intValue() )
		{
			setEnabled( false );
		}
	}

	public void actionPerformed(ActionEvent e)
	{
		try
		{
			PresencasDataProvider provider = PresencasDataProvider.getProvider();
			ClientesDataProvider clientesProvider = 
				( ClientesDataProvider ) ClientesDataProvider.getProvider();
			MedicinaDataProvider medicinaProvider = 
				( MedicinaDataProvider ) MedicinaDataProvider.getProvider();
			Integer trabalhadorID = medicinaProvider.getTrabalhadorIDByMarcacaoID( presenca.getID() );
			Integer empresaID = clientesProvider.getEmpresaIDByTrabalhadorID( trabalhadorID );
			Integer realizados[] = medicinaProvider.getDetalhesRealizadosForEstadosMarcacao( presenca.getID() );
			Vector realizadosVector = new Vector();
			realizadosVector.addAll( Arrays.asList( realizados ) );
			IDObject validos[] = medicinaProvider.getDetalhesValidosTrabalhador( empresaID, trabalhadorID );
			Vector aRealizar = new Vector();
			for( int n = 0; n < validos.length; n++ )
			{
				Integer id = validos[ n ].getID();
				if( !realizadosVector.contains( id ) )
				{
					aRealizar.add( validos[ n ] );
				}
			}
			DetalhesRealizacaoDialog dialog = 
				new DetalhesRealizacaoDialog( null, ( IDObject[] ) aRealizar.toArray( new IDObject[ aRealizar.size() ] ) );
			Integer escolhidos[] = dialog.getSelected();
			if( escolhidos != null )
			{
				provider.marcarParcialmenteRealizado( presenca.getID(), escolhidos );
				setEnabled( false );
			}
		}
		catch( Exception ex )
		{
			DialogException.showExceptionMessage( ex, "Erro a marcar", true );
		}
	}
	
}
