maia/.svn/pristine/01/01129fd7a427ee2aa8163b6ba4e...

474 lines
19 KiB
Plaintext
Executable File

package com.fp.general.db;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.List;
import java.util.Map;
import com.fp.common.helper.CalculationBase;
import com.fp.common.helper.Constant;
import com.fp.persistence.commondb.PersistenceHelper;
import com.fp.persistence.commondb.cache.CacheManager;
import com.fp.persistence.commondb.helper.APPDates;
import com.fp.persistence.commondb.helper.FormatDates;
import com.fp.persistence.pgeneral.acco.TgeneAccount;
import com.fp.persistence.pgeneral.acco.TgeneAccountStatus;
import com.fp.persistence.pgeneral.acco.TgeneAccountStatusKey;
import com.fp.persistence.pgeneral.auth.TgeneSolicitudeClientdata;
import com.fp.persistence.pgeneral.auth.TgeneSolicitudeExceptions;
import com.fp.persistence.pgeneral.charge.TgeneCharges;
import com.fp.persistence.pgeneral.charge.TgeneSubProductCharges;
import com.fp.persistence.pgeneral.gene.TgeneBranch;
import com.fp.persistence.pgeneral.gene.TgeneSolicitude;
import com.fp.persistence.pgeneral.gene.TgeneSolicitudeRelationship;
import com.fp.persistence.pgeneral.menu.TgeneMenuLevel;
import com.fp.persistence.pgeneral.menu.TgeneMenuLevelDesc;
import com.fp.persistence.pgeneral.menu.TgeneMenuLevelTran;
import com.fp.persistence.pgeneral.menu.TgeneMenuProfile;
import com.fp.persistence.pgeneral.menu.TgeneMenuSubLevel;
import com.fp.persistence.pgeneral.menu.TgeneMenuSubLevelDesc;
import com.fp.persistence.pgeneral.product.TgeneModule;
import com.fp.persistence.pgeneral.product.TgeneProduct;
import com.fp.persistence.pgeneral.product.TgeneSubProduct;
import com.fp.persistence.pgeneral.product.TgeneSubprodClientData;
import com.fp.persistence.pgeneral.safe.TsafeUserDetail;
import com.fp.persistence.pgeneral.safe.TsafeUserProfile;
import com.fp.persistence.pgeneral.score.TgenePercentScore;
import com.fp.persistence.pgeneral.score.TgenePercentScoreKey;
import com.fp.persistence.pgeneral.score.TgeneScoreRank;
/**
* Clase utilitaria que maneje sql y hql utiliada en el proyecto general.
*
* @author Jorge Vaca
* @version 2.1
*/
public final class DataHelper {
/** Almacena una instancia de DataHelper. */
private static DataHelper cache;
/**
* Entrega una instancia de DataHelper.
*
* @return DataHelper
*/
public static DataHelper getInstance() {
if (DataHelper.cache != null) {
return DataHelper.cache;
}
synchronized (DataHelper.class) {
if (DataHelper.cache == null) {
DataHelper.cache = new DataHelper();
}
}
return DataHelper.cache;
}
/**
* Metodo que entrega datos de una sucursal definidos en TgeneBranch.
*
* @param pBranch Codigo de sucursal.
* @param pCompany Compania a la que pertenece la cuenta.
* @return TgeneBranch
* @throws Exception
*/
public TgeneBranch getTgeneBranch(Integer pBranch, Integer pCompany) throws Exception {
return TgeneBranch.find(PersistenceHelper.getEntityManager(), pBranch, pCompany);
}
/**
* Metodo que entrega datos de TgeneMenuProfile.
*
* @param pProfile Codigo de perfil del usuario.
* @return TgeneMenuProfile
* @throws Exception
*/
public TgeneMenuProfile getTgeneMenuProfile(String pProfile) throws Exception {
return TgeneMenuProfile.findByCodePerfilUsuario(PersistenceHelper.getEntityManager(), pProfile);
}
/**
* Metodo que entrega descripcion del primer nivel del menu.
*
* @param pmenucode Codigo de menu.
* @param pLevel Codigo de nivel.
* @param planguagecode Codigo de lenguaje del usuario.
* @return TgeneMenuLevelDesc
* @throws Exception
*/
public TgeneMenuLevelDesc getTgeneMenuLevelDesc(Integer pmenucode, Integer pLevel, String planguagecode) throws Exception {
return TgeneMenuLevelDesc.find(PersistenceHelper.getEntityManager(), pmenucode, pLevel, planguagecode);
}
/**
* Metodo que entrega la definicion del primer nivel del menu.
*
* @param pMenucode Codigo de menu.
* @return List<TgeneMenuLevel>
* @throws Exception
*/
public List<TgeneMenuLevel> getTgeneMenuLevel(Integer pMenucode) throws Exception {
return TgeneMenuLevel.findByMenuCode(PersistenceHelper.getEntityManager(), pMenucode);
}
/**
* Metodo que entrega uns lista de definicion del menu de segundo nivel.
*
* @param pMenucode Codigo de menu.
* @param pLevel Codigo del primer nivel.
* @return List<TgeneMenuSubLevel>
* @throws Exception
*/
public List<TgeneMenuSubLevel> getTgeneMenuSuLevels(Integer pMenucode, Integer pLevel) throws Exception {
return TgeneMenuSubLevel.find(PersistenceHelper.getEntityManager(), pMenucode, pLevel);
}
/**
* Metodo que emtrega la descripcion de un subnivel del menu.
*
* @param pmenucode Codigo de menu.
* @param pLevel Codigo de nivel de menu.
* @param pSublevel Codigo de subnivel de menu.
* @param planguagecode Codigo de lenguaje.
* @return TgeneMenuSubLevelDesc
* @throws Exception
*/
public TgeneMenuSubLevelDesc getTgeneMenuSubLevelDesc(Integer pmenucode, Integer pLevel, Integer pSublevel, String planguagecode)
throws Exception {
return TgeneMenuSubLevelDesc.find(PersistenceHelper.getEntityManager(), pmenucode, pLevel, pSublevel, planguagecode);
}
/**
* Metodo que entrega transacciones asociadas al codigo de menu y codigo de nivel.
*
* @param pMenucode Codigo de menu.
* @param pLevel Codigo de Nivel.
* @return List<TgeneMenuLevelTran>
* @throws Exception
*/
public List<TgeneMenuLevelTran> getTgeneMenuLevelTran(Integer pMenucode, Integer pLevel) throws Exception {
return TgeneMenuLevelTran.findByCodeMenuNivel(PersistenceHelper.getEntityManager(), pMenucode, pLevel);
}
/**
* Metodo que obtiene datos del perfil del usuario.
*
* @param pusercode Codigo de usuario.
* @return TsafeUserProfile
* @throws Exception
*/
public List<TsafeUserProfile> getTsafeUserProfile(String pusercode) throws Exception {
return TsafeUserProfile.find(PersistenceHelper.getEntityManager(), pusercode);
}
/**
* Metodo que obtiene datos de un registro del modulo.
*
* @param pModulecode Codigo de modulo a obtener datos de la base.
* @return TgeneModule
* @throws Exception
*/
public TgeneModule getTgeneModule(String pModulecode) throws Exception {
return TgeneModule.find(PersistenceHelper.getEntityManager(), pModulecode);
}
/**
* Metodo que obtiene datos de un registro del producto.
*
* @param pModulecode Codigo de modulo a obtener datos de la base.
* @param pProductcode Codigo de producto a obtener datos de la base.
* @return TgeneProduct
* @throws Exception
*/
public TgeneProduct getTgeneProduct(String pModulecode, String pProductcode) throws Exception {
return TgeneProduct.find(PersistenceHelper.getEntityManager(), pModulecode, pProductcode);
}
/**
* Metodo que obtiene datos de un registro del subproducto.
*
* @param pModulecode Codigo de modulo a obtener datos de la base.
* @param pProductcode Codigo de producto a obtener datos de la base.
* @param pSubproductcode Codigo de subproducto a obtener datos de la base.
* @return TgeneSubProduct
* @throws Exception
*/
public TgeneSubProduct getTgeneSubProduct(String pModulecode, String pProductcode, String pSubproductcode) throws Exception {
return TgeneSubProduct.find(PersistenceHelper.getEntityManager(), pModulecode, pProductcode, pSubproductcode);
}
/**
* Metodo que devuelve un registro de la tabla TGENEACCOUNT
*
* @param account Numero de la cuenta
* @param company Compania a la que pertenece la cuenta
* @param dateto Fecha de vigencia de la tarjeta
* @return
*/
public TgeneAccount getTgeneAccount(String account, Integer company, Timestamp dateto) throws Exception {
return TgeneAccount.findByFechaVigenciaTarjeta(PersistenceHelper.getEntityManager(), account, company, dateto);
}
/**
* Entrega una lista de excepciones de solicitud.
*
* @param pSolicitudenumber Numero de solicitud.
* @param pSolicitudesequence Secuencia interna de la solicitud.
* @return List<TgeneSolicitudeExceptions>
* @throws Exception
*/
public List<TgeneSolicitudeExceptions> getTgeneSolicitudeExceptions(String pSolicitudenumber, Integer pSolicitudesequence) throws Exception {
return TgeneSolicitudeExceptions.findBySolicitudeNumber(PersistenceHelper.getEntityManager(), pSolicitudenumber, pSolicitudesequence);
}
/**
* Metodo que entrega una lista de datos requeridos de clientes por producto.
*
* @param pModuleCode Codigo de modulo.
* @param pProductCode Codigo de producto.
* @param pSubproductCode Codigo de subproducto.
* @param pPersontype Tipo de persona.
* @return List<TgeneSubprodClientData>
* @throws Exception
*/
public List<TgeneSubprodClientData> getTgeneSubprodClientData(String pModuleCode, String pProductCode, String pSubproductCode,
String pPersontype, String pRelationshipcode) throws Exception {
return TgeneSubprodClientData.findByProduct(PersistenceHelper.getEntityManager(), pModuleCode, pProductCode, pSubproductCode, pPersontype,
pRelationshipcode);
}
/**
* Metodo que entrega una lista de datos activos requeridos de clientes por producto.
*
* @param pModuleCode Codigo de modulo.
* @param pProductCode Codigo de producto.
* @param pSubproductCode Codigo de subproducto.
* @param pPersontype Tipo de persona.
* @return List<TgeneSubprodClientData>
* @throws Exception
*/
public List<TgeneSubprodClientData> getTgeneSubprodClientDataActive(String pModuleCode, String pProductCode, String pSubproductCode,
String pPersontype, String pRelationshipcode) throws Exception {
return TgeneSubprodClientData.findByProductActive(PersistenceHelper.getEntityManager(), pModuleCode, pProductCode, pSubproductCode,
pPersontype, pRelationshipcode);
}
/**
* Entrega una lista de clientes relacionados a la solicitud.
*
* @param pSolicitudenumber Numero de solicitud.
* @param pSolicitudesequence Secuencia interna de la solicitud.
* @return List<TgeneSolicitudeRelationship>
* @throws Exception
*/
public List<TgeneSolicitudeRelationship> getTgeneSolicitudeRelationship(String pSolicitudenumber, Integer pSolicitudesequence) throws Exception {
return TgeneSolicitudeRelationship.findBySolicitudeNumber(PersistenceHelper.getEntityManager(), pSolicitudenumber, pSolicitudesequence);
}
/**
* Metodo que devuelve un objeto de tipo TgeneSolicitudeClientdata
*
* @param solicitudnumber
* @param solicitudsequence
* @param title
* @param personcode
* @return
* @throws Exception
*/
public TgeneSolicitudeClientdata getTgeneSolicitudeClientdata(String solicitudnumber, Integer solicitudsequence, String title, Integer personcode)
throws Exception {
return TgeneSolicitudeClientdata.find(PersistenceHelper.getEntityManager(), solicitudnumber, solicitudsequence, title, personcode);
}
/**
* Metodo que devuelve un objeto de tipo TgeneSolicitude
*
* @param solicitudnumber
* @param solicitudsequence
* @return
* @throws Exception
*/
public TgeneSolicitude getTgeneSolicitude(String solicitudnumber, Integer solicitudsequence) throws Exception {
return TgeneSolicitude.find(PersistenceHelper.getEntityManager(), solicitudnumber, solicitudsequence);
}
/**
* Metodo que devuelve un objeto de tipo TgeneSubprodClientData
*
* @param modulecode
* @param productcode
* @param subproductcode
* @param persontype
* @param relationshipcode
* @param title
* @return
* @throws Exception
*/
public TgeneSubprodClientData getTgeneSubprodClientData(String modulecode, String productcode, String subproductcode, String persontype,
String relationshipcode, String title) throws Exception {
return TgeneSubprodClientData.find(PersistenceHelper.getEntityManager(), modulecode, productcode, subproductcode, persontype,
relationshipcode, title);
}
/**
* Metodo que obtiene datos de un registro del subproducto.
*
* @param pModulecode Codigo de modulo a obtener datos de la base.
* @param pProductcode Codigo de producto a obtener datos de la base.
* @param pSubproductcode Codigo de subproducto a obtener datos de la base.
* @return TgeneSubProduct
* @throws Exception
*/
public TsafeUserDetail getTsafeUserDetail(String usercode) throws Exception {
return TsafeUserDetail.findByUserCode(PersistenceHelper.getEntityManager(), usercode);
}
/**
* Entrega un objeto con la calificacion a asociar a un prestamo, dado el tipo de credito, estatus operativo y el
* numero de dias de vencida una operacion.
*
* @param pCreditType Codigo de tipo de credito Consumo, Comercial.
* @param pOperationStatus Cordo de estatus de operacion, Original, restructurada
* @param pModuleCode Modulo al que pertenece el estado operativo.
* @param processdate Fecha en la cual se realiza la calificacion.
* @param expirationdate Fecha desde la cual esta vencido el credito.
* @return TgeneScoreRank
* @throws Exception
*/
public TgeneScoreRank getTgeneScoreRank(String pCreditType, String pOperationStatus, String pModuleCode, Date processdate, Date expirationdate)
throws Exception {
APPDates datefrom = null;
APPDates dateto = null;
int days = 0; // Si la fvencimiento esta en el futuro, indica que el prestamo tiene la mejor calificacion.
if (processdate.compareTo(expirationdate) >= 0) {
dateto = new APPDates(processdate);
datefrom = new APPDates(expirationdate);
dateto.setBase(CalculationBase.B365365);
days = dateto.substract(datefrom);
}
TgeneScoreRank obj = null;
List<TgeneScoreRank> ldata = this.getTgeneScoreRank(pCreditType, pOperationStatus, pModuleCode);
if ((ldata == null) || ldata.isEmpty()) {
return obj;
}
obj = ldata.get(0);
for (TgeneScoreRank object : ldata) {
if ((days >= object.getDaysfrom()) && (days <= object.getDaysto())) {
obj = object;
break;
}
}
return obj;
}
/**
* Entrega una lista con la calificacion a asociar a un prestamo, dado el tipo de credito, estatus operativo y el
* numero de dias de vencida una operacion.
*
* @param pCreditType Codigo de tipo de credito Consumo, Comercial.
* @param pOperationStatus Cordo de estatus de operacion, Original, restructurada
* @param pModuleCode Modulo al que pertenece el estado operativo.
* @return List<TgeneScoreRank>
* @throws Exception
*/
@SuppressWarnings("unchecked")
public List<TgeneScoreRank> getTgeneScoreRank(String pCreditType, String pOperationStatus, String pModuleCode) throws Exception {
List<TgeneScoreRank> ldata = null;
String key = pCreditType + pOperationStatus + pModuleCode;
CacheManager cm = CacheManager.getInstance();
ldata = (List<TgeneScoreRank>) cm.getData("TgeneScoreRank", key);
if (ldata == null) {
Map<String, Object> mTgeneScoreRank = cm.getMapDefinition("TgeneScoreRank");
ldata = TgeneScoreRank.find(PersistenceHelper.getEntityManager(), pCreditType, pOperationStatus, pModuleCode);
mTgeneScoreRank.put(key, ldata);
cm.putData("TgeneScoreRank", mTgeneScoreRank);
}
return ldata;
}
/**
* Entrega un objeto con el porcentaje de provision de acuerdo a la calificacion tipo de credito.
*
* @param pScoreScode Codigo de calificacion de cartera. A,B,C,D
* @param pCreditType Codigo de tipo de credito, Consumo, COmercial.
* @return TgenePercentScore
* @throws Exception
*/
public TgenePercentScore getTgenePercentScore(String pScoreScode, String pCreditType) throws Exception {
TgenePercentScore obj = null;
String key = pScoreScode + pCreditType;
CacheManager cm = CacheManager.getInstance();
obj = (TgenePercentScore) cm.getData("TgenePercentScore", key);
if (obj == null) {
Map<String, Object> mTgenePercentScore = cm.getMapDefinition("TgenePercentScore");
TgenePercentScoreKey k = new TgenePercentScoreKey(pScoreScode, pCreditType, FormatDates.getDefaultExpiryTimestamp());
obj = TgenePercentScore.find(PersistenceHelper.getEntityManager(), k);
mTgenePercentScore.put(key, obj);
cm.putData("TgenePercentScore", mTgenePercentScore);
}
return obj;
}
/**
* Entrega una lista de cargos por subproducto.
*
* @param pSolicitudenumber Numero de solicitud.
* @param pSolicitudesequence Secuencia interna de la solicitud.
* @return List<TgeneSolicitudeRelationship>
* @throws Exception
*/
public List<TgeneSubProductCharges> getTgeneSubProductChargesByCompany(Integer pCompany) throws Exception {
return TgeneSubProductCharges.findByCompany(PersistenceHelper.getEntityManager(), pCompany);
}
/**
* Entrega una lista de cargos por modulo.
*
* @param pModuleCode
* @return
* @throws Exception
*/
public List<TgeneSubProductCharges> getTgeneSubProductChargesByModule(String pModuleCode) throws Exception {
return TgeneSubProductCharges.findByModule(PersistenceHelper.getEntityManager(), pModuleCode);
}
/**
* Entrega una lista de cargos por modulo.
*
* @param pModuleCode
* @return
* @throws Exception
*/
public List<TgeneCharges> getTgeneChargesByModule(String pModuleCode) throws Exception {
return TgeneCharges.findByModule(PersistenceHelper.getEntityManager(), pModuleCode);
}
/**
* Metodo que entrega la descripcion del status de una garantia
*
* @param pModuleCode
* @param pStatuscode
* @return
* @throws Exception
*/
public TgeneAccountStatus getTgeneAccountStatus(String pModuleCode, String pStatuscode) throws Exception {
TgeneAccountStatus obj = null;
String key = pModuleCode + Constant.SEPARATOR + pStatuscode;
CacheManager cm = CacheManager.getInstance();
obj = (TgeneAccountStatus) cm.getData("TgeneAccountStatus", key);
if (obj == null) {
Map<String, Object> mTgeneAccountStatus = cm.getMapDefinition("TgeneAccountStatus");
TgeneAccountStatusKey keyp = new TgeneAccountStatusKey(pModuleCode, pStatuscode);
obj = TgeneAccountStatus.find(PersistenceHelper.getEntityManager(), keyp);
mTgeneAccountStatus.put(key, obj);
cm.putData("TgeneAccountStatus", (Object) mTgeneAccountStatus);
}
return obj;
}
}