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.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;
|
|
}
|
|
}
|