git-svn-id: https://svn.coded.pt/svn/SIPRP@726 bb69d46d-e84e-40c8-a05a-06db0d633741

0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z
Tiago Simão 18 years ago
parent d8f56fbb77
commit 7198774813

@ -29,6 +29,7 @@ import siprp.data.MarcacaoEstabelecimentoData;
import siprp.data.MarcacaoSaveAndDeleteHandler; import siprp.data.MarcacaoSaveAndDeleteHandler;
import siprp.data.MarcacaoTrabalhadorData; import siprp.data.MarcacaoTrabalhadorData;
import siprp.data.TrabalhadorData; import siprp.data.TrabalhadorData;
import siprp.lembretes.LembretesDemon;
import siprp.update.UpdateWindow; import siprp.update.UpdateWindow;
import com.evolute.utils.EVUtilsImageLib; import com.evolute.utils.EVUtilsImageLib;
@ -209,6 +210,7 @@ public class Main implements com.evolute.utils.ui.window.Connector
// } // }
// catch( Exception ex ){} // catch( Exception ex ){}
// new Exception().printStackTrace(); // new Exception().printStackTrace();
LembretesDemon.go();
return true; return true;
} }

@ -18,6 +18,7 @@ import siprp.database.cayenne.objects.Trabalhadores;
import siprp.database.cayenne.objects.TrabalhadoresConsultasDatas; import siprp.database.cayenne.objects.TrabalhadoresConsultasDatas;
import siprp.database.cayenne.objects.TrabalhadoresEcd; import siprp.database.cayenne.objects.TrabalhadoresEcd;
import siprp.database.cayenne.objects.TrabalhadoresEcdsDatas; import siprp.database.cayenne.objects.TrabalhadoresEcdsDatas;
import siprp.database.cayenne.objects.TrabalhadoresFichasAptidao;
import siprp.database.cayenne.objects.TrabalhadoresProcesso; import siprp.database.cayenne.objects.TrabalhadoresProcesso;
import siprp.medicina.MedicinaConstants; import siprp.medicina.MedicinaConstants;
import siprp.medicina.processo.ProcessoConstants; import siprp.medicina.processo.ProcessoConstants;
@ -42,7 +43,6 @@ public class MedicinaDAO extends MainDAO implements MedicinaConstants
return (TrabalhadoresEcdsDatas) DataObjectUtils.objectForPK( context, TrabalhadoresEcdsDatas.class, id ); return (TrabalhadoresEcdsDatas) DataObjectUtils.objectForPK( context, TrabalhadoresEcdsDatas.class, id );
} }
public List<Empresas> getAllEmpresas() public List<Empresas> getAllEmpresas()
{ {
SelectQuery query = new SelectQuery( Empresas.class ); SelectQuery query = new SelectQuery( Empresas.class );

@ -9,8 +9,21 @@
package siprp.lembretes; package siprp.lembretes;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
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.medicina.MedicinaConstants;
import com.evolute.utils.Singleton; import com.evolute.utils.Singleton;
import com.evolute.utils.arrays.Virtual2DArray; import com.evolute.utils.arrays.Virtual2DArray;
import com.evolute.utils.db.DBException;
import com.evolute.utils.db.DBManager; import com.evolute.utils.db.DBManager;
import com.evolute.utils.db.Executer; import com.evolute.utils.db.Executer;
import com.evolute.utils.sql.Assignment; import com.evolute.utils.sql.Assignment;
@ -18,8 +31,7 @@ import com.evolute.utils.sql.Delete;
import com.evolute.utils.sql.Field; import com.evolute.utils.sql.Field;
import com.evolute.utils.sql.Insert; import com.evolute.utils.sql.Insert;
import com.evolute.utils.sql.Select; import com.evolute.utils.sql.Select;
import java.util.Date; import com.evolute.utils.sql.Select2;
import java.util.HashMap;
/** /**
* *
@ -36,6 +48,8 @@ public class LembretesDataProvider
new HashMap<Integer,TipoLembrete>(); new HashMap<Integer,TipoLembrete>();
private TipoLembrete tiposLembrete[]; private TipoLembrete tiposLembrete[];
private MedicinaDAO medicinaDAO = null ;
private Executer EXECUTER; private Executer EXECUTER;
/** Creates a new instance of LembretesDataProvider */ /** Creates a new instance of LembretesDataProvider */
@ -44,6 +58,7 @@ public class LembretesDataProvider
{ {
DBManager dbm = ( DBManager ) Singleton.getInstance( Singleton.DEFAULT_DBMANAGER ); DBManager dbm = ( DBManager ) Singleton.getInstance( Singleton.DEFAULT_DBMANAGER );
EXECUTER = dbm.getSharedExecuter( this ); EXECUTER = dbm.getSharedExecuter( this );
medicinaDAO = new MedicinaDAO();
} }
public static LembretesDataProvider getProvider() public static LembretesDataProvider getProvider()
@ -163,6 +178,18 @@ public class LembretesDataProvider
private void criarLembreteNew( Integer tipoID, Date date, String descricao, String texto, Integer empresaID, Integer estabelecimentoID, Integer trabalhadorID, Integer marcacaoID, boolean isConsulta ) private void criarLembreteNew( Integer tipoID, Date date, String descricao, String texto, Integer empresaID, Integer estabelecimentoID, Integer trabalhadorID, Integer marcacaoID, boolean isConsulta )
{ {
try try
{
Select2 query = new Select2(
new String[]{ "lembretes" },
null,
null,
new String[]{ "id" },
new Field( "tipo_id" ).isEqual( tipoID ).
and( new Field( "data" ).isEqual( date ).
and( new Field( "trabalhador_id" ).isEqual( trabalhadorID ) ) ),
null, null, null, null);
Virtual2DArray array = EXECUTER.executeQuery( query );
if( array.columnLength() == 0 )
{ {
Insert insert = Insert insert =
new Insert( "lembretes", new Insert( "lembretes",
@ -177,6 +204,7 @@ public class LembretesDataProvider
new Assignment( new Field( isConsulta ? "trabalhadores_consultas_datas_id" : "trabalhadores_ecds_datas_id" ), marcacaoID ) } ); new Assignment( new Field( isConsulta ? "trabalhadores_consultas_datas_id" : "trabalhadores_ecds_datas_id" ), marcacaoID ) } );
EXECUTER.executeQuery( insert ); EXECUTER.executeQuery( insert );
} }
}
catch( Exception e ) catch( Exception e )
{ {
e.printStackTrace(); e.printStackTrace();
@ -298,4 +326,111 @@ public class LembretesDataProvider
} }
} }
private Calendar makeDateCalendar()
{
Calendar now = Calendar.getInstance();
Calendar nowDate = Calendar.getInstance();
nowDate.clear();
nowDate.set( Calendar.YEAR, now.get( Calendar.YEAR ) );
nowDate.set( Calendar.MONTH, now.get( Calendar.MONTH ) );
nowDate.set( Calendar.DAY_OF_MONTH, now.get( Calendar.DAY_OF_MONTH ) );
return nowDate;
}
public List<Integer> getFichasExpiradasID()
{
List<Integer> fichasExpiradas = new LinkedList<Integer>();
try
{
Calendar nowDate = makeDateCalendar();
Select2 query = new Select2(
new String[]{ "exames" },
null,
null,
new String[]{ "id" },
new Field( "proximo_exame" ).isEqual( nowDate.getTime() ),
null, null, null, null);
Virtual2DArray array = EXECUTER.executeQuery( query );
for( int i = 0; i < array.columnLength(); fichasExpiradas.add( (Integer) array.get( i, 0 ) ), ++i );
} catch( DBException e )
{
e.printStackTrace();
}
return fichasExpiradas;
}
public List<Integer> getFichasExpiradasSemData()
{
List<Integer> fichasExpiradas = new LinkedList<Integer>();
try
{
Calendar date = makeDateCalendar();
date.add( Calendar.MONTH, -22 );
Select2 query = new Select2(
new String[]{ "exames" },
null,
null,
new String[]{ "id" },
new Field( "proximo_exame" ).isEqual( null ).and( new Field( "data" ).isEqual( date.getTime() ) ),
null, null, null, null);
Virtual2DArray array = EXECUTER.executeQuery( query );
for( int i = 0; i < array.columnLength(); fichasExpiradas.add( (Integer) array.get( i, 0 ) ), ++i );
} catch( DBException e )
{
e.printStackTrace();
}
return fichasExpiradas;
}
public void createLembretesForFichas( List<Integer> fichas )
{
for( Integer fichaID : fichas )
{
Integer tipoID = getTipoLembreteIDByCodigo( LembretesConstants.CODE_MARCACOES );
try
{
Integer trabalhadorID = getTrabalhadorIDForFichaID( fichaID );
Trabalhadores trabalhador = medicinaDAO.getTrabalhadorByID( trabalhadorID );
Estabelecimentos estabelecimento = trabalhador.getToEstabelecimentos();
Empresas empresa = estabelecimento.getToEmpresas();
criarLembreteConsulta( tipoID,
new Date(),
MedicinaConstants.LEMBRETE_RENOVACAO_FICHA_APTIDAO_STRING ,
null,
empresa.getId(),
estabelecimento.getId(),
trabalhador.getId(),
null
);
}
catch(Exception e)
{
System.out.println(e);
}
}
}
private Integer getTrabalhadorIDForFichaID( Integer fichaID )
{
Integer result = null;
try
{
Select2 query = new Select2(
new String[]{ "exames" },
null,
null,
new String[]{ "trabalhador_id" },
new Field( "id" ).isEqual( fichaID ),
null, null, null, null);
Virtual2DArray array = EXECUTER.executeQuery( query );
result = (Integer) array.get( 0, 0 );
} catch( DBException e )
{
e.printStackTrace();
}
return result;
}
} }

@ -0,0 +1,109 @@
package siprp.lembretes;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class LembretesDemon extends Thread
{
private static final long SLEEP_TIME_MILLIS = 60 * 60 * 1000; // one hour
private static boolean isRunning = false;
private static LembretesDemon instance = null;
private LembretesDataProvider lembretesProvider = null;
private boolean doneForToday = false;
private Calendar lastIteration = Calendar.getInstance();
private LembretesDemon()
{
try
{
lembretesProvider = new LembretesDataProvider();
} catch( Exception e )
{
e.printStackTrace();
}
}
/**
* Instanciates and starts a LembretesDemon
*/
public static void go()
{
getInstance();
startDemon();
}
/**
* Gets LembretesDemon
* @return
*/
public static LembretesDemon getInstance()
{
if( LembretesDemon.instance == null )
{
LembretesDemon.instance = new LembretesDemon();
}
return LembretesDemon.instance;
}
public static void stopDemon()
{
if( LembretesDemon.isRunning )
{
LembretesDemon.isRunning = false;
}
}
public static void startDemon()
{
if( !LembretesDemon.isRunning )
{
LembretesDemon.isRunning = true;
instance.start();
}
}
@Override
public void run()
{
System.out.println( new Date() + ": Starting LembretesDemon" );
while( isRunning )
{
try
{
Calendar now = Calendar.getInstance();
if( !doneForToday || lastIterationWasYesterday( now ) )
{
doStuff();
doneForToday = true;
}
lastIteration = now;
Thread.sleep( SLEEP_TIME_MILLIS );
} catch( InterruptedException e )
{
e.printStackTrace();
}
}
System.out.println( new Date() + ": Stopping LembretesDemon" );
}
private void doStuff()
{
List<Integer> fichasExpiradas = lembretesProvider.getFichasExpiradasID();
fichasExpiradas.addAll( lembretesProvider.getFichasExpiradasSemData() );
lembretesProvider.createLembretesForFichas( fichasExpiradas );
}
private boolean lastIterationWasYesterday( Calendar now )
{
return ( now.get( Calendar.DAY_OF_MONTH ) > lastIteration.get( Calendar.DAY_OF_MONTH ) )
||
( now.get( Calendar.DAY_OF_MONTH ) == 1 && lastIteration.get( Calendar.DAY_OF_MONTH ) != 1 );
}
}

@ -11,6 +11,7 @@ package siprp.medicina;
import com.evolute.utils.Singleton; import com.evolute.utils.Singleton;
import siprp.SingletonConstants; import siprp.SingletonConstants;
import static com.evolute.utils.strings.UnicodeLatin1Map.*;
/** /**
* *
@ -78,4 +79,6 @@ public interface MedicinaConstants
public static final String LEMBRETE_DESMARCOU_SIPRP_STRING = "SIPRP Desmarcou"; public static final String LEMBRETE_DESMARCOU_SIPRP_STRING = "SIPRP Desmarcou";
public static final String LEMBRETE_DESMARCOU_TRABALHADOR_STRING = "Trabalhador Desmarcou"; public static final String LEMBRETE_DESMARCOU_TRABALHADOR_STRING = "Trabalhador Desmarcou";
public static final String LEMBRETE_FALTOU_TRABALHADOR_STRING = "Trabalhador Faltou"; public static final String LEMBRETE_FALTOU_TRABALHADOR_STRING = "Trabalhador Faltou";
public static final String LEMBRETE_RENOVACAO_FICHA_APTIDAO_STRING = "Renova" + ccedil + atilde + "o da Ficha";
} }

@ -1,8 +1,18 @@
package siprp.medicina.processo.ui; package siprp.medicina.processo.ui;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.*; import static siprp.medicina.processo.logic.MedicinaProcessoLogic.APAGAR_PROCESSO;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_CONSULTA;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_CONSULTA_MARCACAO;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_CONSULTA_MARCACAO_EMAIL;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_CONSULTA_MARCACAO_OBSERVACOES;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_EXAME; import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_EXAME;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_EXAME_MARCACAO;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_EXAME_MARCACAO_EMAIL;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_EXAME_MARCACAO_OBSERVACOES;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_FICHA;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.CREATE_PROCESSO;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.LOAD_TRABALHADOR; import static siprp.medicina.processo.logic.MedicinaProcessoLogic.LOAD_TRABALHADOR;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.REFRESH;
import static siprp.medicina.processo.logic.MedicinaProcessoLogic.SELECT_TREE_NODE; import static siprp.medicina.processo.logic.MedicinaProcessoLogic.SELECT_TREE_NODE;
import info.clearthought.layout.TableLayout; import info.clearthought.layout.TableLayout;
import info.clearthought.layout.TableLayoutConstraints; import info.clearthought.layout.TableLayoutConstraints;
@ -21,7 +31,6 @@ import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath; import javax.swing.tree.TreePath;
import leaf.LeafWindow; import leaf.LeafWindow;
import leaf.LeafLogic.LeafLogicActionBinding;
import leaf.LeafLogic.LeafUIActionBinding; import leaf.LeafLogic.LeafUIActionBinding;
import leaf.LeafWindow.ActionActivation; import leaf.LeafWindow.ActionActivation;
@ -38,7 +47,6 @@ import siprp.database.cayenne.objects.TrabalhadoresEcdsDatasEmails;
import siprp.database.cayenne.objects.TrabalhadoresEcdsDatasObservacoes; import siprp.database.cayenne.objects.TrabalhadoresEcdsDatasObservacoes;
import siprp.database.cayenne.objects.TrabalhadoresFichasAptidao; import siprp.database.cayenne.objects.TrabalhadoresFichasAptidao;
import siprp.database.cayenne.objects.TrabalhadoresProcesso; import siprp.database.cayenne.objects.TrabalhadoresProcesso;
import siprp.medicina.MarcacaoConsultaExtendedPanel;
import siprp.medicina.processo.ProcessoDataProvider; import siprp.medicina.processo.ProcessoDataProvider;
import siprp.medicina.processo.estrutura.ConsultaMutableTreeNode; import siprp.medicina.processo.estrutura.ConsultaMutableTreeNode;
import siprp.medicina.processo.estrutura.DataMutableTreeNode; import siprp.medicina.processo.estrutura.DataMutableTreeNode;
@ -46,7 +54,6 @@ import siprp.medicina.processo.estrutura.ECDsMutableTreeNode;
import siprp.medicina.processo.estrutura.EstruturaProcessoRenderer; import siprp.medicina.processo.estrutura.EstruturaProcessoRenderer;
import siprp.medicina.processo.estrutura.FichaAptidaoMutableTreeNode; import siprp.medicina.processo.estrutura.FichaAptidaoMutableTreeNode;
import siprp.medicina.processo.estrutura.MailMutableTreeNode; import siprp.medicina.processo.estrutura.MailMutableTreeNode;
import siprp.medicina.processo.estrutura.MarcacaoMutableTreeNode;
import siprp.medicina.processo.estrutura.ObservacoesMutableTreeNode; import siprp.medicina.processo.estrutura.ObservacoesMutableTreeNode;
import siprp.medicina.processo.estrutura.ProcessoMutableTreeNode; import siprp.medicina.processo.estrutura.ProcessoMutableTreeNode;
import siprp.medicina.processo.estrutura.TrabalhadorMutableTreeNode; import siprp.medicina.processo.estrutura.TrabalhadorMutableTreeNode;

Loading…
Cancel
Save