/* * 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.deleteDetalhesRealizadosForMarcacao( ( 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; } }