/** * @(#) PersistenciaTaprimer.java */ package com.tarisan.control; import com.tarisan.log.*; import com.tarisan.data.Usuario; import com.tarisan.excepcion.ExcepcionTarisan; import java.sql.*; import java.util.Calendar; /** * Controla los accesos a la persistencia para la entidad Taprimer. * @author Dpto. Informática. * @version 1.0, 24/09/2003 */ public class PersistenciaTaprimer { /** * Obtiene si se trata de la primera visita del paciente. * @param medico Código del médico. * @param colectivo Número de colectivo. * @param poliza Número de póliza. * @param beneficiario Número de beneficiario. * @return Valor booleano que nos indica si se trata de la primera visita del paciente. * @throws */ public boolean esPrimeraVisita(int medico, long colectivo, double poliza, int beneficiario) throws ExcepcionTarisan { StringBuffer strSql = new StringBuffer(); Object[] aCondiciones; boolean esPrimeraVisita = false; try { java.sql.Date dtFecha = this.obtenerFechaPrimeraVisita(medico, colectivo, poliza, beneficiario); if (dtFecha!=null) //existe registro. Se comprueba si es la primera visita { Calendar calFechaPrimeraVisita = Calendar.getInstance(); calFechaPrimeraVisita.setTime(dtFecha); Calendar calFechaActual = Calendar.getInstance(); if (ParametrosConfiguracion.periodoNatural.equalsIgnoreCase("si")) //se trata de un periodo natural { if (calFechaActual.get(Calendar.YEAR)>calFechaPrimeraVisita.get(Calendar.YEAR)) { //años diferentes esPrimeraVisita = true; } else { if (calFechaActual.get(Calendar.YEAR)==calFechaPrimeraVisita.get(Calendar.YEAR )) //mismo año { //le sumamos a la fecha obtenida el periodo de meses para conocer si es primera visita calFechaPrimeraVisita.add(Calendar.MONTH, ParametrosConfiguracion.periodoPrimeraVisita); if ( calFechaPrimeraVisita.getTime().compareTo( calFechaActual.getTime() ) < 0 ) { //la fecha de la primera visita mas el periodo es inferior a la fecha actual esPrimeraVisita = true; } } } } else //se trata de un periodo no natural { //le sumamos a la fecha obtenida el periodo de meses para conocer si es primera visita calFechaPrimeraVisita.add(Calendar.MONTH, ParametrosConfiguracion.periodoPrimeraVisita); if ( calFechaPrimeraVisita.getTime().compareTo( calFechaActual.getTime() ) < 0 ) //la fecha de la primera visita mas el periodo es inferior a la fecha actual esPrimeraVisita = true; } } else { //No existe registro. Es primera visita esPrimeraVisita = true; } //LogTarisan.logger.log(NivelLog.DEBUG, "Es primera visita: " + esPrimeraVisita +" (" + strSql.toString() + ")"); LogTarisan.logger.log(NivelLog.DEBUG, "Es primera visita: " + esPrimeraVisita); } catch (ExcepcionTarisan sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la selección de TAPRIMER: " + sqle + " (" + strSql.toString() + ")"); throw (ExcepcionTarisan)sqle; } catch(Exception sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la selección de TAPRIMER: " + sqle + " (" + strSql.toString() + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } catch(Throwable sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la selección de TAPRIMER: " + sqle + " (" + strSql.toString() + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } return esPrimeraVisita; } public boolean sePuedeAutoprescribible(int medico, int entidad, long colectivo, double poliza, int orden, int acto){ return sePuedeAutoprescribible(medico, entidad, colectivo, poliza, orden, acto, 0); } public boolean sePuedeAutoprescribible(int medico, int entidad, long colectivo, double poliza, int orden, int acto, int contrato) { boolean resultado = false; LogTarisan.logger.log(NivelLog.INFO, "Empezamos a comprobar si se puede imputar un acto autoprescribible"); //selecionamos entidad, colectivo, poliza, orden con la tarjeta StringBuffer strSql = new StringBuffer(); java.sql.Date dtFechaUltimoTamovext = null; Object[] aCondiciones; Connection conexion = null; Usuario usu = new Usuario(); PersistenciaUsuario perUsu= new PersistenciaUsuario(); try { usu = perUsu.seleccionar(medico); int especialidad = usu.getEspecialidad(); if((especialidad == Integer.parseInt(Constantes.PERFIL_DENTISTA)) || (especialidad == 19)) resultado = true; if(!resultado) { conexion = ParametrosConfiguracion.dataStore.obtenerConexion(); strSql = new StringBuffer(); strSql.append("select FECHA"); if(contrato==723){ strSql.append(" from tamovext_dental"); }else{ strSql.append(" from tamovext"); } strSql.append(" where entidad = ?"); strSql.append(" and colectivo = ?"); strSql.append(" and poliza = ?"); strSql.append(" and orden = ?"); strSql.append(" and medico = ?"); strSql.append(" and acto = ?"); strSql.append(" ORDER BY FECHA DESC"); aCondiciones = null; aCondiciones = new Object[6]; aCondiciones[0] = Integer.valueOf(entidad); aCondiciones[1] = Long.valueOf(colectivo); aCondiciones[2] = Double.valueOf(poliza); aCondiciones[3] = Integer.valueOf(orden); aCondiciones[4] = Integer.valueOf(medico); aCondiciones[5] = Integer.valueOf(acto); ResultSet rs = ParametrosConfiguracion.dataStore.seleccionar(conexion, strSql.toString(), aCondiciones); if(rs.next()) { dtFechaUltimoTamovext = rs.getDate("FECHA"); LogTarisan.logger.log(NivelLog.DEBUG, "PersistenciaTaprimer - sePuedeAutoprescribible - Llega a 132 fecha: "+dtFechaUltimoTamovext); } rs.close(); //si la fecha del movimiento es distinto de null es que hay movimientos comparamos el año, mes, día con la fecha actual y si corresponde ponemos resultado a cierto if(dtFechaUltimoTamovext != null) { Calendar calFechaUltTamovext = Calendar.getInstance(); Calendar hoy = Calendar.getInstance(); calFechaUltTamovext.setTime(dtFechaUltimoTamovext); if(hoy.get(Calendar.YEAR)>calFechaUltTamovext.get(Calendar.YEAR)) { resultado = true; } else if(hoy.get(Calendar.MONTH)>calFechaUltTamovext.get(Calendar.MONTH)) { resultado = true; } else if(hoy.get(Calendar.DAY_OF_MONTH)>calFechaUltTamovext.get(Calendar.DAY_OF_MONTH)) { resultado = true; } } else resultado = true; ParametrosConfiguracion.dataStore.liberarConexion(conexion); } } catch (ExcepcionTarisan sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la selección de sePuedeAutoprescribible: " + sqle + " (" + strSql.toString() + ")"); } catch (SQLException e) { LogTarisan.logger.log(NivelLog.ERROR, "Error SQL en la selección de sePuedeAutoprescribible: " + e + " (" + strSql.toString() + ")"); } LogTarisan.logger.log(NivelLog.INFO, "Terminamos de comprobar si se puede el acto: "+acto+" para ent, col, pol, ord: "+entidad+", "+colectivo+", "+poliza+", "+orden+" con resultado: "+resultado); return resultado; } /** * Devuelve la fecha más reciente de la primera visita realizada para el médico y paciente indicado. * En caso de que no exista ningún registro para el médico y paciente indicado, la función devolverá el valor null. * @param medico Código del médico. * @param colectivo Número de colectivo. * @param poliza Número de póliza. * @param beneficiario Número de beneficiario. * @return La Fecha más reciente perteneciente a la primera visita. En caso de no encontrar ningún registro, devolverá el valor null. * @throws * @param orden: si es cierto ordena descendentemente, sino ascendentemente (obtener primera visita o la última) */ public java.sql.Date obtenerFechaPrimeraVisita(int medico, long colectivo, double poliza, int beneficiario) throws ExcepcionTarisan { return this.obtenerFechaPrimeraVisita(medico,colectivo,poliza,beneficiario, true); } public java.sql.Date obtenerFechaPrimeraVisita(int medico, long colectivo, double poliza, int beneficiario, boolean orden) throws ExcepcionTarisan { StringBuffer strSql = new StringBuffer(); Object[] aCondiciones; boolean esPrimeraVisita = false; java.sql.Date dtFechaPrimeraVisita = null; try { strSql.append("SELECT FECHA"); strSql.append(" FROM TAPRIMER"); strSql.append(" WHERE MEDICO = ?"); strSql.append(" AND COLEC=?"); strSql.append(" AND POLIZA=?"); strSql.append(" AND ORDEN=?"); //strSql.append(" AND ACTO=1"); //strSql.append(" AND ACTO=1"); strSql.append(" AND ACTO<>1460"); if(orden) strSql.append(" ORDER BY FECHA DESC"); else strSql.append(" ORDER BY FECHA ASC"); aCondiciones = new Object[4]; aCondiciones[0] = Integer.valueOf(medico); aCondiciones[1] = Long.valueOf(colectivo); aCondiciones[2] = Double.valueOf(poliza); aCondiciones[3] = Integer.valueOf(beneficiario); Connection conexion = ParametrosConfiguracion.dataStore.obtenerConexion(); ResultSet rs = ParametrosConfiguracion.dataStore.seleccionar(conexion, strSql.toString(), aCondiciones); if (rs.next()) //existe registro. dtFechaPrimeraVisita = rs.getDate("FECHA"); rs.close(); ParametrosConfiguracion.dataStore.liberarConexion(conexion); LogTarisan.logger.log(NivelLog.DEBUG, "La fecha de la primera visita obtenida ha sido: " + dtFechaPrimeraVisita +" (" + strSql.toString() + ")"); } catch (ExcepcionTarisan sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la selección de TAPRIMER: " + sqle + " (" + strSql.toString() + ")"); throw (ExcepcionTarisan)sqle; } catch(SQLException sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la selección de TAPRIMER: " + sqle + " (" + strSql.toString() + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } catch(Exception sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la selección de TAPRIMER: " + sqle + " (" + strSql.toString() + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } catch(Throwable sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la selección de TAPRIMER: " + sqle + " (" + strSql.toString() + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } return dtFechaPrimeraVisita; } /** * Modifica la tabla TAPRIMER en función de la sentencia UPDATE indicada. * @param sqlSelect La sentencia UPDATE. * @param aValores Array que contiene los valores de los parámetros utilizados en la sentencia. * @param aCondiciones Array que contiene los parámetros de la condición utilizados en la sentencia. * @throws */ public void modificarPrimeraVisita(String sqlSelect, Object[] aValores, Object[] aCondiciones) throws ExcepcionTarisan { try { ParametrosConfiguracion.dataStore.actualizar(sqlSelect, aValores, aCondiciones); } catch (ExcepcionTarisan sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la modificacion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw (ExcepcionTarisan)sqle; } catch(Exception sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la modificacion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } catch(Throwable sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la modificacion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } } /** * Modifica la tabla TAPRIMER en función de la sentencia UPDATE indicada. * @param sqlSelect La sentencia UPDATE. * @param aValores Array que contiene los valores de los parámetros utilizados en la sentencia. * @param aCondiciones Array que contiene los parámetros de la condición utilizados en la sentencia. * @param conexion La conexión por la que se ejecuta la sentencia. Utilizado para el uso transacciones. * @throws */ public void modificarPrimeraVisita(String sqlSelect, Object[] aValores, Object[] aCondiciones, Connection conexion) throws ExcepcionTarisan { try { ParametrosConfiguracion.dataStore.actualizar(sqlSelect, aValores, aCondiciones, conexion); } catch (ExcepcionTarisan sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la modificacion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw (ExcepcionTarisan)sqle; } catch(Exception sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la modificacion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } catch(Throwable sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la modificacion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } } /** * Modifica la tabla TAPRIMER en función de la sentencia INSERT indicada. * @param sqlSelect La sentencia INSERT. * @param aValores Array que contiene los valores de los parámetros utilizados en la sentencia. * @throws */ public void insertarPrimeraVisita(String sqlSelect, Object[] aValores) throws ExcepcionTarisan { try { ParametrosConfiguracion.dataStore.insertar(sqlSelect, aValores); } catch (ExcepcionTarisan sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la insercion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw (ExcepcionTarisan)sqle; } catch(Exception sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la insercion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } catch(Throwable sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la insercion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } } /** * Modifica la tabla TAPRIMER en función de la sentencia INSERT indicada. * @param sqlSelect La sentencia INSERT. * @param aValores Array que contiene los valores de los parámetros utilizados en la sentencia. * @param conexion La conexión por la que se ejecuta la sentencia. Utilizado para el uso transacciones. * @throws */ public void insertarPrimeraVisita(String sqlSelect, Object[] aValores, Connection conexion) throws ExcepcionTarisan { try { ParametrosConfiguracion.dataStore.insertar(sqlSelect, aValores, conexion); } catch (ExcepcionTarisan sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la insercion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw (ExcepcionTarisan)sqle; } catch(Exception sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la insercion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } catch(Throwable sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la insercion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } } public java.sql.Date obtenerFechaPrimeraLimpieza(int medico, long colectivo, double poliza, int beneficiario) throws ExcepcionTarisan { return this.obtenerFechaPrimeraLimpieza(medico,colectivo,poliza,beneficiario, true); } public java.sql.Date obtenerFechaPrimeraLimpieza(int medico, long colectivo, double poliza, int beneficiario, boolean orden) throws ExcepcionTarisan { StringBuffer strSql = new StringBuffer(); Object[] aCondiciones; boolean esPrimeraLimpieza = false; java.sql.Date dtFechaPrimeraLimpieza = null; try { strSql.append("SELECT FECHA"); strSql.append(" FROM TAPRIMER"); strSql.append(" WHERE MEDICO = ?"); strSql.append(" AND COLEC=?"); strSql.append(" AND POLIZA=?"); strSql.append(" AND ORDEN=?"); strSql.append(" AND ACTO=?"); if(orden) strSql.append(" ORDER BY FECHA DESC"); else strSql.append(" ORDER BY FECHA ASC"); aCondiciones = new Object[5]; aCondiciones[0] = Integer.valueOf(medico); aCondiciones[1] = Long.valueOf(colectivo); aCondiciones[2] = Double.valueOf(poliza); aCondiciones[3] = Integer.valueOf(beneficiario); aCondiciones[4] = Integer.valueOf(ParametrosConfiguracion.codigoPrimeraLimpieza); Connection conexion = ParametrosConfiguracion.dataStore.obtenerConexion(); ResultSet rs = ParametrosConfiguracion.dataStore.seleccionar(conexion, strSql.toString(), aCondiciones); if (rs.next()) //existe registro. dtFechaPrimeraLimpieza = rs.getDate("FECHA"); rs.close(); ParametrosConfiguracion.dataStore.liberarConexion(conexion); LogTarisan.logger.log(NivelLog.DEBUG, "La fecha de la primera limpieza de boca obtenida ha sido: " + dtFechaPrimeraLimpieza +" (" + strSql.toString() + ")"); } catch (ExcepcionTarisan sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la selección de TAPRIMER: " + sqle + " (" + strSql.toString() + ")"); throw (ExcepcionTarisan)sqle; } catch(SQLException sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la selección de TAPRIMER: " + sqle + " (" + strSql.toString() + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } catch(Exception sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la selección de TAPRIMER: " + sqle + " (" + strSql.toString() + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } catch(Throwable sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la selección de TAPRIMER: " + sqle + " (" + strSql.toString() + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } return dtFechaPrimeraLimpieza; } public boolean esPrimeraLimpieza(int medico, long colectivo, double poliza, int beneficiario) throws ExcepcionTarisan { StringBuffer strSql = new StringBuffer(); Object[] aCondiciones; boolean esPrimeraLimpieza = false; try { java.sql.Date dtFecha = this.obtenerFechaPrimeraLimpieza(medico, colectivo, poliza, beneficiario); if (dtFecha!=null) //existe registro. Se comprueba si es la primera limpieza de boca { Calendar calFechaPrimeraLimpieza = Calendar.getInstance(); calFechaPrimeraLimpieza.setTime(dtFecha); Calendar calFechaActual = Calendar.getInstance(); if (ParametrosConfiguracion.periodoNatural.equalsIgnoreCase("si")) //se trata de un periodo natural { if (calFechaActual.get(Calendar.YEAR)>calFechaPrimeraLimpieza.get(Calendar.YEAR)) { //años diferentes esPrimeraLimpieza = true; } else { if (calFechaActual.get(Calendar.YEAR)==calFechaPrimeraLimpieza.get(Calendar.YEAR )) //mismo año { //le sumamos a la fecha obtenida el periodo de meses para conocer si es primera visita calFechaPrimeraLimpieza.add(Calendar.MONTH, ParametrosConfiguracion.periodoPrimeraVisita); if ( calFechaPrimeraLimpieza.getTime().compareTo( calFechaActual.getTime() ) < 0 ) { //la fecha de la primera limpieza de boca mas el periodo es inferior a la fecha actual esPrimeraLimpieza = true; } } } } else //se trata de un periodo no natural { //le sumamos a la fecha obtenida el periodo de meses para conocer si es primera limpieza de boca calFechaPrimeraLimpieza.add(Calendar.MONTH, ParametrosConfiguracion.periodoPrimeraVisita); if ( calFechaPrimeraLimpieza.getTime().compareTo( calFechaActual.getTime() ) < 0 ) //la fecha de la primera limpieza de boca mas el periodo es inferior a la fecha actual esPrimeraLimpieza = true; } } else { //No existe registro. Es primera limpieza de boca esPrimeraLimpieza = true; } LogTarisan.logger.log(NivelLog.DEBUG, "Es primera limpieza: " + esPrimeraLimpieza); } catch (ExcepcionTarisan sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la selección de TAPRIMER: " + sqle + " (" + strSql.toString() + ")"); throw (ExcepcionTarisan)sqle; } catch(Exception sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la selección de TAPRIMER: " + sqle + " (" + strSql.toString() + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } catch(Throwable sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la selección de TAPRIMER: " + sqle + " (" + strSql.toString() + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } return esPrimeraLimpieza; } public void modificarPrimeraLimpieza(String sqlSelect, Object[] aValores, Object[] aCondiciones, Connection conexion) throws ExcepcionTarisan { try { ParametrosConfiguracion.dataStore.actualizar(sqlSelect, aValores, aCondiciones, conexion); } catch (ExcepcionTarisan sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la modificacion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw (ExcepcionTarisan)sqle; } catch(Exception sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la modificacion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } catch(Throwable sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la modificacion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } } public void insertarPrimeraLimpieza(String sqlSelect, Object[] aValores, Connection conexion) throws ExcepcionTarisan { try { ParametrosConfiguracion.dataStore.insertar(sqlSelect, aValores, conexion); } catch (ExcepcionTarisan sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la insercion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw (ExcepcionTarisan)sqle; } catch(Exception sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la insercion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } catch(Throwable sqle) { LogTarisan.logger.log(NivelLog.ERROR, "Error en la insercion de TAPRIMER: " + sqle + " (" + sqlSelect + ")"); throw new ExcepcionTarisan(sqle.getMessage()); } } }