package com.fp.armas.rules.query.webservices; import java.util.ArrayList; import java.util.List; import javax.persistence.Query; import com.fp.armas.rules.query.webservices.util.InstitucionSnapEnum; import com.fp.common.logger.APPLogger; import com.fp.dto.query.QueryRequest; import com.fp.dto.rules.QueryRule; import com.fp.persistence.commondb.PersistenceHelper; import com.fp.persistence.commondb.helper.FormatDates; import com.fp.persistence.parmas.dto.ws.DatosSnapDto; import com.fp.persistence.parmas.dto.ws.InfoGuardiaDto; import com.fp.persistence.parmas.dto.ws.TramiteDto; import com.fp.persistence.parmas.dto.ws.DatosArmaDto; import com.fp.persistence.parmas.eval.TarmEvaluacion; import com.fp.persistence.parmas.soli.TarmArmaPruebas; import com.fp.persistence.parmas.soli.TarmArmas; import com.fp.persistence.parmas.soli.TarmDocumentoHabilitante; import com.fp.persistence.parmas.soli.TarmGuardias; import com.fp.persistence.pcustomer.gene.TcustPersonAddress; import com.fp.persistence.pcustomer.gene.TcustPersonDetail; import com.fp.persistence.pcustomer.gene.TcustPersonPhone; import com.fp.persistence.pgeneral.gene.TgeneCatalogDetail; import com.fp.persistence.pgeneral.gene.TgeneParameters; /** * Componente que realiza la búsquedas de los datos de necesarios para el WS de la SNAP * @author Manuel Cepeda * */ public class DatosPerson extends QueryRule{ private static final long serialVersionUID = -3993166768741911053L; /** * Permite obtener todos los datos necesarios para el WS de SNAP * @param QueryRequest pRequest * @return QueryRequest */ @SuppressWarnings("unchecked") @Override public QueryRequest process(QueryRequest pRequest) throws Exception { Query query; try { DatosSnapDto personaSnapDto = new DatosSnapDto(); query = PersistenceHelper.getEntityManager().createQuery("select p from TgeneParameters p where pk.code= :code and pk.companycode=:companycode"); query.setParameter("code", "PATH.ALFRESCO.ARCHIVOS"); query.setParameter("companycode", 1); List lparametros = query.getResultList(); if(lparametros != null && !lparametros.isEmpty()){ personaSnapDto.setxPathLocation(lparametros.get(0).getTextvalue()); } String identificacion = (String) pRequest.get("identificacion"); String institucion = (String) pRequest.get("institucion"); String serie = (String) pRequest.get("serie"); query = PersistenceHelper.getEntityManager().createQuery("select pd from TcustPersonDetail pd where pd.identification= :identification and pd.pk.dateto=:dateto order by DATETO DESC"); query.setParameter("identification", identificacion); query.setParameter("dateto", FormatDates.getDefaultExpiryTimestamp()); List ltsafeUserDetails = query.getResultList(); if(ltsafeUserDetails != null && !ltsafeUserDetails.isEmpty()){ personaSnapDto.setCodigoPersona(ltsafeUserDetails.get(0).getPk().getPersoncode()); personaSnapDto.setRazonSocial(ltsafeUserDetails.get(0).getName()); } //direccion principal query=PersistenceHelper.getEntityManager().createQuery("select pa from TcustPersonAddress pa where pa.pk.personcode=:personcode and pa.pk.dateto=:dateto and pa.principal='Y'"); query.setParameter("personcode", ltsafeUserDetails.get(0).getPk().getPersoncode()); query.setParameter("dateto", FormatDates.getDefaultExpiryTimestamp()); List lcustPersonAddress = query.getResultList(); if(lcustPersonAddress != null && !lcustPersonAddress.isEmpty()){ personaSnapDto.setDireccion(lcustPersonAddress.get(0).getAddress()); } //email query=PersistenceHelper.getEntityManager().createQuery("select pa from TcustPersonAddress pa where pa.pk.personcode=:personcode and pa.pk.dateto=:dateto and pa.addresstypecatalog=3"); query.setParameter("personcode", ltsafeUserDetails.get(0).getPk().getPersoncode()); query.setParameter("dateto", FormatDates.getDefaultExpiryTimestamp()); List lcustPersonEmail = query.getResultList(); if(lcustPersonEmail != null && !lcustPersonEmail.isEmpty()){ personaSnapDto.setEmail(lcustPersonEmail.get(0).getAddress()); } //telefono query=PersistenceHelper.getEntityManager().createQuery("select pp from TcustPersonPhone pp where pp.pk.personcode=:personcode and pp.pk.dateto=:dateto and pp.phonetypecatalog=1"); query.setParameter("personcode", ltsafeUserDetails.get(0).getPk().getPersoncode()); query.setParameter("dateto", FormatDates.getDefaultExpiryTimestamp()); List lcustPersonTelefono = query.getResultList(); if(lcustPersonTelefono != null && !lcustPersonTelefono.isEmpty()){ personaSnapDto.setTelefonoFijo(lcustPersonTelefono.get(0).getPhonenumber()); } //celular query=PersistenceHelper.getEntityManager().createQuery("select pp from TcustPersonPhone pp where pp.pk.personcode=:personcode and pp.pk.dateto=:dateto and pp.phonetypecatalog=2"); query.setParameter("personcode", ltsafeUserDetails.get(0).getPk().getPersoncode()); query.setParameter("dateto", FormatDates.getDefaultExpiryTimestamp()); List lcustPersonCelular = query.getResultList(); if(lcustPersonCelular != null && !lcustPersonCelular.isEmpty()){ personaSnapDto.setTelefonoCelular(lcustPersonCelular.get(0).getPhonenumber()); } //test psocilogico query=PersistenceHelper.getEntityManager().createQuery("select te from TarmEvaluacion te where te.personcode=:personcode and te.tipoevaluacion = 'PSICOLOGICA' order by te.fechaexpiracion desc"); query.setParameter("personcode", ltsafeUserDetails.get(0).getPk().getPersoncode()); List listaEvaluacion = query.getResultList(); if(listaEvaluacion != null && !listaEvaluacion.isEmpty() && institucion.equals(InstitucionSnapEnum.COPS.getNombre())){ personaSnapDto.setTestPsicologico(listaEvaluacion.get(0).getInformexpath()); } //tramites List listaTramitesHabilitantes = new ArrayList<>(); query=PersistenceHelper.getEntityManager().createQuery("select dh from TarmDocumentoHabilitante dh where dh.pk.personcode=:personcode and dh.ctramite in(73, 179) order by dh.fechaexpiracion desc"); query.setParameter("personcode", ltsafeUserDetails.get(0).getPk().getPersoncode()); List listaTramiteCM = query.getResultList(); if(listaTramiteCM != null && !listaTramiteCM.isEmpty()){ listaTramitesHabilitantes.add(listaTramiteCM.get(0)); } query=PersistenceHelper.getEntityManager().createQuery("select dh from TarmDocumentoHabilitante dh where dh.pk.personcode=:personcode and dh.ctramite in(74, 180) order by dh.fechaexpiracion desc"); query.setParameter("personcode", ltsafeUserDetails.get(0).getPk().getPersoncode()); List listaTramiteMA = query.getResultList(); if(listaTramiteMA != null && !listaTramiteMA.isEmpty()){ listaTramitesHabilitantes.add(listaTramiteMA.get(0)); } query=PersistenceHelper.getEntityManager().createQuery("select dh from TarmDocumentoHabilitante dh where dh.pk.personcode=:personcode and dh.ctramite in(76, 182) order by dh.fechaexpiracion desc"); query.setParameter("personcode", ltsafeUserDetails.get(0).getPk().getPersoncode()); List listaTramiteSP = query.getResultList(); if(listaTramiteSP != null && !listaTramiteSP.isEmpty()){ listaTramitesHabilitantes.add(listaTramiteSP.get(0)); } List listaTramites = new ArrayList<>(); if(listaTramitesHabilitantes != null && !listaTramitesHabilitantes.isEmpty()){ for(TarmDocumentoHabilitante tramitesHabilitantes: listaTramitesHabilitantes){ TramiteDto tramiteDto = new TramiteDto(); tramiteDto.setTramite(tramitesHabilitantes.getCtramite().toString()); tramiteDto.setFechaEmision(tramitesHabilitantes.getFechaemision()); tramiteDto.setFechaExpiracion(tramitesHabilitantes.getFechaexpiracion()); //informacion del tramite query=PersistenceHelper.getEntityManager().createQuery("select CONCAT(tt.description, ' - ', ta.description, ' - ', ca.description, ' - ', ua.description) from TarmTramite t," + " TgeneCatalogDetail tt, TgeneCatalogDetail ta, TgeneCatalogDetail ca, TgeneCatalogDetail ua " + " where tt.pk.catalog = t.tipotramite and tt.pk.catalogcode = t.tipotramitecodigo" + " and ta.pk.catalog = t.tipoautorizacion and ta.pk.catalogcode = t.tipoautorizacioncodigo" + " and ca.pk.catalog = t.categoria and ca.pk.catalogcode = t.categoriacodigo" + " and ua.pk.catalog = t.usoactividad and ua.pk.catalogcode = t.usoactividadcodigo" + " and t.pk = :ctramite"); query.setParameter("ctramite", tramitesHabilitantes.getCtramite()); List tramiteDescripcion = query.getResultList(); if(tramiteDescripcion != null && !tramiteDescripcion.isEmpty()){ tramiteDto.setNumeroDocumento(tramiteDescripcion.get(0).toString()); } listaTramites.add(tramiteDto); } } personaSnapDto.setListaTramites(listaTramites); if(institucion.equals(InstitucionSnapEnum.CRIMINALISTICA.getNombre()) || institucion.equals(InstitucionSnapEnum.COPS.getNombre()) || institucion.equals(InstitucionSnapEnum.FISCALIA_GENERAL.getNombre())){ if("RUC".equals(ltsafeUserDetails.get(0).getIdentificationcatalog())){ query=PersistenceHelper.getEntityManager().createQuery("select g from TarmGuardias g where g.cempresa=:personcode"); query.setParameter("personcode", ltsafeUserDetails.get(0).getPk().getPersoncode()); List listaGuardias = query.getResultList(); if(listaGuardias != null && !listaGuardias.isEmpty()){ List listaInfoGuardias = new ArrayList<>(); for(TarmGuardias tarmGuardias : listaGuardias){ InfoGuardiaDto infoGuardiaDto = new InfoGuardiaDto(); infoGuardiaDto.setEstado(tarmGuardias.getEstado()); query=PersistenceHelper.getEntityManager().createQuery("select pd from TcustPersonDetail pd where pd.pk.personcode=:personcode"); query.setParameter("personcode", tarmGuardias.getPk()); List listaPeson = query.getResultList(); if(listaPeson != null && !listaPeson.isEmpty()){ infoGuardiaDto.setNombre(listaPeson.get(0).getName()); } listaInfoGuardias.add(infoGuardiaDto); } personaSnapDto.setListaGuardias(listaInfoGuardias); } }else{ query=PersistenceHelper.getEntityManager().createQuery("select g from TarmGuardias g where g.pk=:personcode"); query.setParameter("personcode", ltsafeUserDetails.get(0).getPk().getPersoncode()); List listaPersonaGuardia = query.getResultList(); if(listaPersonaGuardia != null && !listaPersonaGuardia.isEmpty() && listaPersonaGuardia.get(0).getCempresa() != null){ List listaInfoGuardias = new ArrayList<>(); InfoGuardiaDto infoGuardiaDto = new InfoGuardiaDto(); infoGuardiaDto.setEstado(listaPersonaGuardia.get(0).getEstado()); query=PersistenceHelper.getEntityManager().createQuery("select pd from TcustPersonDetail pd where pd.pk.personcode=:personcode"); query.setParameter("personcode", listaPersonaGuardia.get(0).getCempresa()); List listaEmpresa = query.getResultList(); if(listaEmpresa != null && !listaEmpresa.isEmpty()){ infoGuardiaDto.setEmpresa(listaEmpresa.get(0).getName()); } listaInfoGuardias.add(infoGuardiaDto); personaSnapDto.setListaGuardias(listaInfoGuardias); } } //datos del arma query=PersistenceHelper.getEntityManager().createQuery("select ta from TarmArmas ta, TarmRegistroArmas regarm, TcustPersonDetail pd " + " where ta.cregistro = regarm.pk and pd.pk.personcode = regarm.personcode and pd.pk.dateto = :dateto" + " and ta.lote = :lote and ta.ctipoarmaexplosivo in (select te.pk from TarmTipoArmaExplosivo te where te.clase = '0010000001')" + " and pd.pk.personcode = :personcode"); query.setParameter("lote", serie); query.setParameter("dateto", FormatDates.getDefaultExpiryTimestamp()); query.setParameter("personcode", ltsafeUserDetails.get(0).getPk().getPersoncode()); List listaArma = query.getResultList(); if(listaArma != null && !listaArma.isEmpty()){ List listaDatosArma = new ArrayList<>(); for(TarmArmas tarmArmas : listaArma){ DatosArmaDto datosArmaDto = new DatosArmaDto(); datosArmaDto.setLote(tarmArmas.getLote()); datosArmaDto.setTipoFabricacion(tarmArmas.getTipofabricacion()); //marca query=PersistenceHelper.getEntityManager().createQuery("select cat from TgeneCatalogDetail cat, TarmArmas arm " + "where cat.pk.catalog = arm.marca and cat.pk.catalogcode = arm.marcacodigo and arm.pk = :carma"); query.setParameter("carma", tarmArmas.getPk()); List listaCatalogoMarca = query.getResultList(); if(listaCatalogoMarca != null && !listaCatalogoMarca.isEmpty()){ datosArmaDto.setMarca(listaCatalogoMarca.get(0).getDescription()); } //datosArmaDto.setMarca(tarmArmas.getMarca()); datosArmaDto.setModelo(tarmArmas.getModelo()); datosArmaDto.setEstadoArma(tarmArmas.getEstado()); query=PersistenceHelper.getEntityManager().createQuery("select a from TarmArmaPruebas a where a.personcode = :personcode and a.carma = :carma"); query.setParameter("personcode", ltsafeUserDetails.get(0).getPk().getPersoncode()); query.setParameter("carma", tarmArmas.getPk()); List listaArmaPrueba = query.getResultList(); if(listaArmaPrueba != null && !listaArmaPrueba.isEmpty()){ if(institucion.equals(InstitucionSnapEnum.CRIMINALISTICA.getNombre())){ datosArmaDto.setImagenImpronta(listaArmaPrueba.get(0).getXpathimpronta()); datosArmaDto.setImagenArma(listaArmaPrueba.get(0).getXpathfotografia()); } datosArmaDto.setFichaTecnicaArma(listaArmaPrueba.get(0).getXpathfichatecarmas()); } //clase query=PersistenceHelper.getEntityManager().createQuery("select cat from TarmTipoArmaExplosivo tae, TgeneCatalogDetail cat, TarmArmas arm where cat.pk.catalog = tae.clase and cat.pk.catalogcode = tae.clasecodigo" + " and tae.pk = arm.ctipoarmaexplosivo and tae.pk = :ctipoarmaexplosivo and arm.pk = :carma"); query.setParameter("ctipoarmaexplosivo", tarmArmas.getCtipoarmaexplosivo()); query.setParameter("carma", tarmArmas.getPk()); List listaCatalogoClase = query.getResultList(); if(listaCatalogoClase != null && !listaCatalogoClase.isEmpty()){ datosArmaDto.setDescripcionClase(listaCatalogoClase.get(0).getDescription()); } //tipo query=PersistenceHelper.getEntityManager().createQuery("select cat from TarmTipoArmaExplosivo tae, TgeneCatalogDetail cat, TarmArmas arm where cat.pk.catalog = tae.tipoarmaexplosivo and cat.pk.catalogcode = tae.tipoarmaexplosivocodigo" + " and tae.pk = arm.ctipoarmaexplosivo and tae.pk = :ctipoarmaexplosivo and arm.pk = :carma"); query.setParameter("ctipoarmaexplosivo", tarmArmas.getCtipoarmaexplosivo()); query.setParameter("carma", tarmArmas.getPk()); List listaCatalogoTipo = query.getResultList(); if(listaCatalogoTipo != null && !listaCatalogoTipo.isEmpty()){ datosArmaDto.setDescripcionTipo(listaCatalogoTipo.get(0).getDescription()); } //calibre query=PersistenceHelper.getEntityManager().createQuery("select cat from TarmTipoArmaExplosivo tae, TgeneCatalogDetail cat, TarmArmas arm where cat.pk.catalog = tae.calibre and cat.pk.catalogcode = tae.calibrecodigo" + " and tae.pk = arm.ctipoarmaexplosivo and tae.pk = :ctipoarmaexplosivo and arm.pk = :carma"); query.setParameter("ctipoarmaexplosivo", tarmArmas.getCtipoarmaexplosivo()); query.setParameter("carma", tarmArmas.getPk()); List listaCatalogoCalibre = query.getResultList(); if(listaCatalogoCalibre != null && !listaCatalogoCalibre.isEmpty()){ datosArmaDto.setCalibre(listaCatalogoCalibre.get(0).getDescription()); } listaDatosArma.add(datosArmaDto); } personaSnapDto.setListaDatosArma(listaDatosArma); } } pRequest.getResponse().put("DATOSPERSONSNAP", personaSnapDto); } catch (Throwable e) { APPLogger.getLogger().error(e.getMessage(), e); } return pRequest; } }