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.
		
		
		
		
		
			
		
			
				
					
					
						
							259 lines
						
					
					
						
							8.3 KiB
						
					
					
				
			
		
		
	
	
							259 lines
						
					
					
						
							8.3 KiB
						
					
					
				| /*
 | |
| * MarcacaoSaveAndDeleteHandler.java
 | |
|  *
 | |
|  * Created on 13 de Outubro de 2004, 18:31
 | |
|  */
 | |
| 
 | |
| package siprp.data;
 | |
| 
 | |
| import java.util.*;
 | |
| 
 | |
| import com.evolute.utils.*;
 | |
| import com.evolute.utils.jdo.*;
 | |
| 
 | |
| import siprp.medicina.*;
 | |
| 
 | |
| /**
 | |
|  *
 | |
|  * @author  fpalma
 | |
|  */
 | |
| public class MarcacaoSaveAndDeleteHandler
 | |
| 	implements JDOOperationHandlerInterface
 | |
| {
 | |
| 	public static final MarcacaoSaveAndDeleteHandler INSTANCE = new MarcacaoSaveAndDeleteHandler();
 | |
| 	
 | |
| 	public JDOProvider JDO;
 | |
| 	protected MedicinaDataProvider medicinaProvider;
 | |
| 	
 | |
| 	/** Creates a new instance of MarcacaoSaveAndDeleteHandler */
 | |
| 	public MarcacaoSaveAndDeleteHandler()
 | |
| 	{
 | |
| 		JDO = ( JDOProvider ) Singleton.getInstance( Singleton.DEFAULT_JDO_PROVIDER );
 | |
| 	}
 | |
| 	
 | |
| 	public boolean handle( JDOObject object, int operation, int moment )
 | |
| 		throws Exception
 | |
| 	{
 | |
| 		if( JDO == null )
 | |
| 		{
 | |
| 			JDO = ( JDOProvider ) Singleton.getInstance( Singleton.DEFAULT_JDO_PROVIDER );
 | |
| 		}
 | |
| 		switch( operation )
 | |
| 		{
 | |
| 			case JDOOperationHandlerInterface.OP_SAVE:
 | |
| 				switch( moment )
 | |
| 				{
 | |
| 					case JDOOperationHandlerInterface.MOMENT_BEFORE:
 | |
| 						return preSave( (Marcacao) object );
 | |
| 						
 | |
| 					case JDOOperationHandlerInterface.MOMENT_AFTER:
 | |
| 						return postSave( (Marcacao) object );
 | |
| 				}
 | |
| 				return false;
 | |
| 				
 | |
| 			case JDOOperationHandlerInterface.OP_DELETE:
 | |
| 				switch( moment )
 | |
| 				{
 | |
| 					case JDOOperationHandlerInterface.MOMENT_BEFORE:
 | |
| 						return preDelete( (Marcacao) object );
 | |
| 						
 | |
| 					case JDOOperationHandlerInterface.MOMENT_AFTER:
 | |
| 						return postDelete( (Marcacao) object );
 | |
| 				}
 | |
| 				return false;
 | |
| 		}
 | |
| 		return false;
 | |
| 	}
 | |
| 	
 | |
| 	protected boolean preSave( Marcacao object )
 | |
| 		throws Exception
 | |
| 	{
 | |
| 		return false;
 | |
| 	}
 | |
| 	
 | |
| 	protected boolean postSave( Marcacao object )
 | |
| 		throws Exception
 | |
| 	{
 | |
| 		if( object instanceof MarcacaoEmpresaData )
 | |
| 		{
 | |
| 			AvisoData aviso = (AvisoData) JDO.load( AvisoData.class, 
 | |
| 				new Object[]{ object.get( MarcacaoEmpresaData.ID ), new Integer( AvisoData.TIPO_EMPRESA ) }, 
 | |
| 				new String[]{ AvisoData.EVENTO_ID, AvisoData.TIPO } );
 | |
| 			if( aviso == null )
 | |
| 			{
 | |
| 				aviso = new AvisoData();
 | |
| 			}
 | |
| 			aviso.set( AvisoData.TIPO, new Integer( AvisoData.TIPO_EMPRESA ) );
 | |
| 			EmpresaData empresa = ( EmpresaData ) object.get( MarcacaoEmpresaData.EMPRESA );
 | |
| 			aviso.set( AvisoData.EMPRESA, empresa );
 | |
| 			aviso.set( AvisoData.EVENTO_ID, object.get( MarcacaoEmpresaData.ID ) );
 | |
| 			Date dataEvento = (Date) object.get( Marcacao.DATA );
 | |
| 			aviso.set( AvisoData.DATA_EVENTO, dataEvento );
 | |
| 			aviso.set( AvisoData.DATA_AVISO, dataEvento );
 | |
| 			String descricao = "Tarefa ";
 | |
| 			aviso.set( AvisoData.DESCRICAO, descricao );
 | |
| 			aviso.save();
 | |
| 			
 | |
| 			empresa.save();
 | |
| 		}
 | |
| 		else if( object instanceof MarcacaoEstabelecimentoData )
 | |
| 		{
 | |
| 			AvisoData aviso = (AvisoData) JDO.load( AvisoData.class, 
 | |
| 				new Object[]{ object.get( MarcacaoEstabelecimentoData.ID ), new Integer( AvisoData.TIPO_ESTABELECIMENTO ) }, 
 | |
| 				new String[]{ AvisoData.EVENTO_ID, AvisoData.TIPO } );
 | |
| 			if( aviso == null )
 | |
| 			{
 | |
| 				aviso = new AvisoData();
 | |
| 			}
 | |
| 			aviso.set( AvisoData.TIPO, new Integer( AvisoData.TIPO_ESTABELECIMENTO ) );
 | |
| 			EstabelecimentoData estabelecimento = ( EstabelecimentoData ) object.get( MarcacaoEstabelecimentoData.ESTABELECIMENTO );
 | |
| 			aviso.set( AvisoData.ESTABELECIMENTO, estabelecimento );
 | |
| 			EmpresaData empresa = ( EmpresaData )estabelecimento.get( EstabelecimentoData.EMPRESA );
 | |
| 			aviso.set( AvisoData.EMPRESA, empresa );
 | |
| 			aviso.set( AvisoData.EVENTO_ID, object.get( MarcacaoEstabelecimentoData.ID ) );
 | |
| 			Date dataEvento = (Date) object.get( Marcacao.DATA );
 | |
| 			Date dataAviso = new Date( dataEvento.getTime() );
 | |
| 			Calendar cal = Calendar.getInstance();
 | |
| 			cal.setTime( dataAviso );
 | |
| 			cal.add( Calendar.DAY_OF_MONTH, -14 );
 | |
| 			dataAviso = cal.getTime();
 | |
| 			aviso.set( AvisoData.DATA_AVISO, dataAviso );
 | |
| 			aviso.set( AvisoData.DATA_EVENTO, dataEvento );
 | |
| 			String descricao = "Visita ";
 | |
| 			aviso.set( AvisoData.DESCRICAO, descricao );
 | |
| 			cal = Calendar.getInstance();
 | |
| 			cal.setTime( dataEvento );
 | |
| 			cal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ), cal.get( Calendar.DAY_OF_MONTH ), 0, 0, 0 );
 | |
| 			cal.set( Calendar.MILLISECOND, 0 );
 | |
| 			dataEvento = cal.getTime();
 | |
| 
 | |
| 			cal = Calendar.getInstance();
 | |
| 			cal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ), cal.get( Calendar.DAY_OF_MONTH ), 10, 0, 0 );
 | |
| 			cal.set( Calendar.MILLISECOND, 0 );
 | |
| 			Date hoje = cal.getTime();
 | |
| 			if( hoje.before( dataEvento ) )
 | |
| 			{
 | |
| 				aviso.save();
 | |
| 			}
 | |
| 			
 | |
| 			estabelecimento.save();
 | |
| 		}
 | |
| 		if( object instanceof MarcacaoTrabalhadorData )
 | |
| 		{
 | |
| 			AvisoData aviso = (AvisoData) JDO.load( AvisoData.class, 
 | |
| 				new Object[]{ object.get( MarcacaoTrabalhadorData.ID ), new Integer( AvisoData.TIPO_TRABALHADOR ) }, 
 | |
| 				new String[]{ AvisoData.EVENTO_ID, AvisoData.TIPO } );
 | |
| 	System.out.println( "AVISO LOADED: " + aviso + " id: " + ( aviso != null ? aviso.get( AvisoData.ID ) : "n/a" )
 | |
| 						+ " MT.ID: " + object.get( MarcacaoTrabalhadorData.ID )
 | |
| 						+ " AD.TIPO: " + new Integer( AvisoData.TIPO_TRABALHADOR ) );
 | |
| 			if( aviso == null )
 | |
| 			{
 | |
| 	System.out.println( "novo aviso" );
 | |
| 				aviso = new AvisoData();
 | |
| 			}
 | |
| 			aviso.set( AvisoData.TIPO, new Integer( AvisoData.TIPO_TRABALHADOR ) );
 | |
| 			TrabalhadorData trab = ( TrabalhadorData ) object.get( MarcacaoTrabalhadorData.TRABALHADOR );
 | |
| 			aviso.set( AvisoData.TRABALHADOR, trab );
 | |
| 			EstabelecimentoData estabelecimento = ( EstabelecimentoData ) trab.get( TrabalhadorData.ESTABELECIMENTO );
 | |
| 			aviso.set( AvisoData.ESTABELECIMENTO, estabelecimento );
 | |
| 			EmpresaData empresa = ( EmpresaData ) estabelecimento.get( EstabelecimentoData.EMPRESA );
 | |
| 			aviso.set( AvisoData.EMPRESA, empresa );
 | |
| 			aviso.set( AvisoData.EVENTO_ID, object.get( MarcacaoTrabalhadorData.ID ) );
 | |
| 			Date dataEvento = (Date) object.get( Marcacao.DATA );
 | |
| 			Date dataAviso = new Date( dataEvento.getTime() );
 | |
| 			Calendar cal = Calendar.getInstance();
 | |
| 			cal.setTime( dataAviso );
 | |
| 			cal.add( Calendar.DAY_OF_MONTH, -14 );
 | |
| 			dataAviso = cal.getTime();
 | |
| 			aviso.set( AvisoData.DATA_AVISO, dataAviso );
 | |
| 			aviso.set( AvisoData.DATA_EVENTO, dataEvento.clone() );
 | |
| 			String descricao = "";
 | |
| 			switch( ( ( Integer ) object.get( MarcacaoTrabalhadorData.TIPO ) ).intValue() )
 | |
| 			{
 | |
| 				case MarcacaoTrabalhadorData.TIPO_EXAMES:
 | |
| 					descricao = "Exames";
 | |
| 					break;
 | |
| 
 | |
| 				case MarcacaoTrabalhadorData.TIPO_CONSULTA:
 | |
| 					Integer motivo = ( ( Integer ) object.get( MarcacaoTrabalhadorData.MOTIVO ) );
 | |
| 					descricao = "Consulta " + ( motivo == null ? "" : ("(" + MedicinaDataProvider.TIPOS_CONSULTAS[ motivo.intValue() ] + ")" ) );
 | |
| 					break;
 | |
| 			}
 | |
| 			aviso.set( AvisoData.DESCRICAO, descricao );
 | |
| 			cal = Calendar.getInstance();
 | |
| 			cal.setTime( dataEvento );
 | |
| 			cal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ), cal.get( Calendar.DAY_OF_MONTH ), 0, 0, 0 );
 | |
| 			cal.set( Calendar.MILLISECOND, 0 );
 | |
| 			dataEvento = cal.getTime();
 | |
| 
 | |
| 			cal = Calendar.getInstance();
 | |
| 			cal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ), cal.get( Calendar.DAY_OF_MONTH ), 10, 0, 0 );
 | |
| 			cal.set( Calendar.MILLISECOND, 0 );
 | |
| 			Date hoje = cal.getTime();
 | |
| 			if( hoje.before( dataEvento ) )
 | |
| 			{
 | |
| 				if( !hoje.before( dataAviso ) )
 | |
| 				{
 | |
| 					aviso.set( AvisoData.DATA_AVISO, dataEvento.clone() );
 | |
| 				}
 | |
| 				aviso.save();
 | |
| 			}
 | |
| 			
 | |
| 			trab.save();
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			return false;
 | |
| 		}
 | |
| 		return true;
 | |
| 	}
 | |
| 	
 | |
| 	protected boolean preDelete( Marcacao object )
 | |
| 		throws Exception
 | |
| 	{
 | |
| 		if( object instanceof MarcacaoTrabalhadorData &&
 | |
| 			( ( Integer ) object.get( MarcacaoTrabalhadorData.TIPO ) ).intValue() == MarcacaoTrabalhadorData.TIPO_EXAMES ) 
 | |
| 		{
 | |
| 			if( medicinaProvider == null )
 | |
| 			{
 | |
| 				medicinaProvider = (MedicinaDataProvider)MedicinaDataProvider.getProvider();
 | |
| 			}
 | |
| 			medicinaProvider.deleteDetalhesRealziadosForMarcacao( ( Integer ) object.get( MarcacaoTrabalhadorData.ID ) );
 | |
| 			return true;
 | |
| 		}
 | |
| 		return false;
 | |
| 	}
 | |
| 	
 | |
| 	protected boolean postDelete( Marcacao object )
 | |
| 		throws Exception
 | |
| 	{
 | |
| System.out.println( "!delete!" );
 | |
| 		Integer tipo;
 | |
| 		if( object instanceof MarcacaoEmpresaData )
 | |
| 		{
 | |
| 			tipo = new Integer( AvisoData.TIPO_EMPRESA );
 | |
| 		}
 | |
| 		else if( object instanceof MarcacaoEstabelecimentoData )
 | |
| 		{
 | |
| 			tipo = new Integer( AvisoData.TIPO_ESTABELECIMENTO );
 | |
| 		}
 | |
| 		if( object instanceof MarcacaoTrabalhadorData )
 | |
| 		{
 | |
| 			tipo = new Integer( AvisoData.TIPO_TRABALHADOR );
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			return false;
 | |
| 		}
 | |
| 		AvisoData aviso = (AvisoData) JDO.load( AvisoData.class, 
 | |
| 			new Object[]{ object.get( "id" ), tipo }, 
 | |
| 			new String[]{ AvisoData.EVENTO_ID, AvisoData.TIPO } );
 | |
| 		if( aviso != null )
 | |
| 		{
 | |
| 			aviso.delete();
 | |
| 		}
 | |
| 		
 | |
| 		return true;
 | |
| 	}
 | |
| }
 |