From 7198774813b43c99433e5a8fa78a61888bd84b7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20Sim=C3=A3o?= Date: Thu, 26 Jun 2008 14:10:29 +0000 Subject: [PATCH] git-svn-id: https://svn.coded.pt/svn/SIPRP@726 bb69d46d-e84e-40c8-a05a-06db0d633741 --- trunk/SIPRPSoft/src/siprp/Main.java | 2 + .../cayenne/providers/MedicinaDAO.java | 2 +- .../lembretes/LembretesDataProvider.java | 163 ++++++++++++++++-- .../src/siprp/lembretes/LembretesDemon.java | 109 ++++++++++++ .../src/siprp/medicina/MedicinaConstants.java | 3 + .../processo/ui/ProcessoTreePanel.java | 15 +- 6 files changed, 275 insertions(+), 19 deletions(-) create mode 100644 trunk/SIPRPSoft/src/siprp/lembretes/LembretesDemon.java diff --git a/trunk/SIPRPSoft/src/siprp/Main.java b/trunk/SIPRPSoft/src/siprp/Main.java index 3b3d11e9..f74fcfeb 100644 --- a/trunk/SIPRPSoft/src/siprp/Main.java +++ b/trunk/SIPRPSoft/src/siprp/Main.java @@ -29,6 +29,7 @@ import siprp.data.MarcacaoEstabelecimentoData; import siprp.data.MarcacaoSaveAndDeleteHandler; import siprp.data.MarcacaoTrabalhadorData; import siprp.data.TrabalhadorData; +import siprp.lembretes.LembretesDemon; import siprp.update.UpdateWindow; import com.evolute.utils.EVUtilsImageLib; @@ -209,6 +210,7 @@ public class Main implements com.evolute.utils.ui.window.Connector // } // catch( Exception ex ){} // new Exception().printStackTrace(); + LembretesDemon.go(); return true; } diff --git a/trunk/SIPRPSoft/src/siprp/database/cayenne/providers/MedicinaDAO.java b/trunk/SIPRPSoft/src/siprp/database/cayenne/providers/MedicinaDAO.java index 573a428e..93cdf6c7 100644 --- a/trunk/SIPRPSoft/src/siprp/database/cayenne/providers/MedicinaDAO.java +++ b/trunk/SIPRPSoft/src/siprp/database/cayenne/providers/MedicinaDAO.java @@ -18,6 +18,7 @@ import siprp.database.cayenne.objects.Trabalhadores; import siprp.database.cayenne.objects.TrabalhadoresConsultasDatas; import siprp.database.cayenne.objects.TrabalhadoresEcd; import siprp.database.cayenne.objects.TrabalhadoresEcdsDatas; +import siprp.database.cayenne.objects.TrabalhadoresFichasAptidao; import siprp.database.cayenne.objects.TrabalhadoresProcesso; import siprp.medicina.MedicinaConstants; import siprp.medicina.processo.ProcessoConstants; @@ -41,7 +42,6 @@ public class MedicinaDAO extends MainDAO implements MedicinaConstants { return (TrabalhadoresEcdsDatas) DataObjectUtils.objectForPK( context, TrabalhadoresEcdsDatas.class, id ); } - public List getAllEmpresas() { diff --git a/trunk/SIPRPSoft/src/siprp/lembretes/LembretesDataProvider.java b/trunk/SIPRPSoft/src/siprp/lembretes/LembretesDataProvider.java index 2ff231cb..a066651a 100644 --- a/trunk/SIPRPSoft/src/siprp/lembretes/LembretesDataProvider.java +++ b/trunk/SIPRPSoft/src/siprp/lembretes/LembretesDataProvider.java @@ -9,8 +9,21 @@ 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.arrays.Virtual2DArray; +import com.evolute.utils.db.DBException; import com.evolute.utils.db.DBManager; import com.evolute.utils.db.Executer; 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.Insert; import com.evolute.utils.sql.Select; -import java.util.Date; -import java.util.HashMap; +import com.evolute.utils.sql.Select2; /** * @@ -36,6 +48,8 @@ public class LembretesDataProvider new HashMap(); private TipoLembrete tiposLembrete[]; + private MedicinaDAO medicinaDAO = null ; + private Executer EXECUTER; /** Creates a new instance of LembretesDataProvider */ @@ -44,6 +58,7 @@ public class LembretesDataProvider { DBManager dbm = ( DBManager ) Singleton.getInstance( Singleton.DEFAULT_DBMANAGER ); EXECUTER = dbm.getSharedExecuter( this ); + medicinaDAO = new MedicinaDAO(); } public static LembretesDataProvider getProvider() @@ -164,18 +179,31 @@ public class LembretesDataProvider { try { - Insert insert = - new Insert( "lembretes", - new Assignment[]{ - new Assignment( new Field( "tipo_id" ), tipoID ), - new Assignment( new Field( "data" ), date ), - new Assignment( new Field( "descricao" ), descricao ), - new Assignment( new Field( "texto" ), texto ), - new Assignment( new Field( "empresa_id" ), empresaID ), - new Assignment( new Field( "estabelecimento_id" ), estabelecimentoID ), - new Assignment( new Field( "trabalhador_id" ), trabalhadorID ), - new Assignment( new Field( isConsulta ? "trabalhadores_consultas_datas_id" : "trabalhadores_ecds_datas_id" ), marcacaoID ) } ); - EXECUTER.executeQuery( insert ); + 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 = + new Insert( "lembretes", + new Assignment[]{ + new Assignment( new Field( "tipo_id" ), tipoID ), + new Assignment( new Field( "data" ), date ), + new Assignment( new Field( "descricao" ), descricao ), + new Assignment( new Field( "texto" ), texto ), + new Assignment( new Field( "empresa_id" ), empresaID ), + new Assignment( new Field( "estabelecimento_id" ), estabelecimentoID ), + new Assignment( new Field( "trabalhador_id" ), trabalhadorID ), + new Assignment( new Field( isConsulta ? "trabalhadores_consultas_datas_id" : "trabalhadores_ecds_datas_id" ), marcacaoID ) } ); + EXECUTER.executeQuery( insert ); + } } catch( Exception e ) { @@ -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 getFichasExpiradasID() + { + List fichasExpiradas = new LinkedList(); + 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 getFichasExpiradasSemData() + { + List fichasExpiradas = new LinkedList(); + 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 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; + } + } diff --git a/trunk/SIPRPSoft/src/siprp/lembretes/LembretesDemon.java b/trunk/SIPRPSoft/src/siprp/lembretes/LembretesDemon.java new file mode 100644 index 00000000..438f4ab7 --- /dev/null +++ b/trunk/SIPRPSoft/src/siprp/lembretes/LembretesDemon.java @@ -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 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 ); + } +} diff --git a/trunk/SIPRPSoft/src/siprp/medicina/MedicinaConstants.java b/trunk/SIPRPSoft/src/siprp/medicina/MedicinaConstants.java index fae9bbb4..5d7e19f9 100644 --- a/trunk/SIPRPSoft/src/siprp/medicina/MedicinaConstants.java +++ b/trunk/SIPRPSoft/src/siprp/medicina/MedicinaConstants.java @@ -11,6 +11,7 @@ package siprp.medicina; import com.evolute.utils.Singleton; 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_TRABALHADOR_STRING = "Trabalhador Desmarcou"; 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"; + } diff --git a/trunk/SIPRPSoft/src/siprp/medicina/processo/ui/ProcessoTreePanel.java b/trunk/SIPRPSoft/src/siprp/medicina/processo/ui/ProcessoTreePanel.java index 6a30fcda..16b942ff 100755 --- a/trunk/SIPRPSoft/src/siprp/medicina/processo/ui/ProcessoTreePanel.java +++ b/trunk/SIPRPSoft/src/siprp/medicina/processo/ui/ProcessoTreePanel.java @@ -1,8 +1,18 @@ 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_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.REFRESH; import static siprp.medicina.processo.logic.MedicinaProcessoLogic.SELECT_TREE_NODE; import info.clearthought.layout.TableLayout; import info.clearthought.layout.TableLayoutConstraints; @@ -21,7 +31,6 @@ import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; import leaf.LeafWindow; -import leaf.LeafLogic.LeafLogicActionBinding; import leaf.LeafLogic.LeafUIActionBinding; 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.TrabalhadoresFichasAptidao; import siprp.database.cayenne.objects.TrabalhadoresProcesso; -import siprp.medicina.MarcacaoConsultaExtendedPanel; import siprp.medicina.processo.ProcessoDataProvider; import siprp.medicina.processo.estrutura.ConsultaMutableTreeNode; 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.FichaAptidaoMutableTreeNode; import siprp.medicina.processo.estrutura.MailMutableTreeNode; -import siprp.medicina.processo.estrutura.MarcacaoMutableTreeNode; import siprp.medicina.processo.estrutura.ObservacoesMutableTreeNode; import siprp.medicina.processo.estrutura.ProcessoMutableTreeNode; import siprp.medicina.processo.estrutura.TrabalhadorMutableTreeNode;