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

package siprp.lembretes.externos.actions;

import java.awt.Component;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JOptionPane;

import siprp.SIPRPTracker;
import siprp.SingletonConstants;
import siprp.database.cayenne.objects.Empresas;
import siprp.database.cayenne.objects.Estabelecimentos;
import siprp.database.cayenne.objects.Trabalhadores;
import siprp.database.cayenne.providers.MedicinaDAO;
import siprp.lembretes.Lembrete;
import siprp.lembretes.LembretesDataProvider;
import siprp.medicina.processo.logic.MedicinaProcessoLogic;
import siprp.medicina.processo.ui.MedicinaProcessoWindow;

import com.evolute.utils.Singleton;
import com.evolute.utils.data.IDObject;
import com.evolute.utils.ui.DialogException;

/**
 * 
 * @author fpalma
 */
public class TratarExternoAction extends AbstractAction
{
	private static final long serialVersionUID = 1L;
	private LembretesDataProvider lembretesProvider;
	private SIPRPTracker tracker;

	private Integer lembreteID;

	private MedicinaDAO medicinaDAO = new MedicinaDAO();

	/**
	 * Creates a new instance of TratarMarcacaoTrabalhadorAction
	 */
	public TratarExternoAction(IDObject lembrete)
	{
		super( "Tratar" );
		try
		{
			lembreteID = lembrete.getID();
			lembretesProvider = LembretesDataProvider.getProvider();
		} catch( Exception ex )
		{
			ex.printStackTrace();
		}
	}

	public void actionPerformed( ActionEvent e )
	{
		try
		{
			tracker = (SIPRPTracker) Singleton.getInstance( SingletonConstants.SIPRP_TRACKER );
			Lembrete lembrete = lembretesProvider.getLembreteByID( lembreteID );
			if( lembrete == null )
			{
				JOptionPane.showMessageDialog( null, "Este lembrete j\u00e1 foi tratado.", "J\u00e1 tratado", JOptionPane.WARNING_MESSAGE );
			}
			else
			{
				Trabalhadores trabalhador = null;
				Estabelecimentos estabelecimento = null;
				Empresas empresa = null;
				trabalhador = medicinaDAO.getTrabalhadorByID( lembrete.getTrabalhadorID() );
				estabelecimento = trabalhador.getToEstabelecimentos();
				empresa = estabelecimento.getToEmpresas();
				MedicinaProcessoWindow window = tracker.getMedicinaProcessoWindow();

				window.runActionLater( MedicinaProcessoLogic.SELECT_EMPRESA, empresa );
				window.runActionLater( MedicinaProcessoLogic.SELECT_ESTABELECIMENTO, estabelecimento );
				window.runActionLater( MedicinaProcessoLogic.LOAD_TRABALHADOR, trabalhador );
				window.runActionLater( MedicinaProcessoLogic.SELECT_TRABALHADOR, trabalhador );
				window.runPendingActions();
				window.setVisible( true );
				lembretesProvider.apagarLembreteByID( lembreteID );
			}
			Object source = e.getSource();
			if( source instanceof Component )
			{
				((Component) source).setEnabled( false );
			}
		} catch( Exception ex )
		{
			DialogException.showExceptionMessage( ex, "Erro a tratar", true );
		}
	}

}
