package com.fp.viaticos.rules.query.informe; import java.util.ArrayList; import java.util.List; import com.fp.bpm.query.QueryJsf; import com.fp.dto.Response; import com.fp.dto.query.DtoQuery; import com.fp.dto.query.Filter; 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.pviaticos.solicitud.ViaSolicitud; import com.fp.persistence.pviaticos.solicitud.ViaSolicitudIntegrantes; import com.fp.persistence.pviaticos.solicitud.ViaSolicitudKey; import com.fp.persistence.pviaticos.solicitud.ViaSolicitudTransporte; import com.fp.viaticos.rules.consulta.solicitud.ConsultaSolicitud; import com.fp.viaticos.rules.enums.EnumCodigos; public class Informe extends QueryRule{ /** * Clase que clona los objetos de la solicitud para el informe */ private static final long serialVersionUID = 1L; /** * Metodo sobreescrito para gestionar la respuesta de la consulta */ @SuppressWarnings("unchecked") @Override public QueryRequest process(QueryRequest pQueryRequest) throws Exception { String codSolicitud = (String)pQueryRequest.get("csolicitud"); ViaSolicitud informe = ViaSolicitud.find(PersistenceHelper.getEntityManager(), new ViaSolicitudKey(codSolicitud, EnumCodigos.INFORME.getCodigo())); if(informe!=null){ return pQueryRequest; } this.fijaFiltrosSolicitud(pQueryRequest); Response response = pQueryRequest.getResponse(); QueryJsf query = new QueryJsf(); query.execute(pQueryRequest); Object object=response.get("SOLICITUD"); List objectIntegrantes=(List)response.get("SOLICITUDINTEGRANTES"); List objectTransporte=(List)response.get("SOLICITUDTRANSPORTE"); if(object == null){ return pQueryRequest; } ViaSolicitud solicitud = (ViaSolicitud) object; solicitud = (ViaSolicitud)solicitud.cloneMe(); solicitud.setIsnew(true); ConsultaSolicitud data = new ConsultaSolicitud(); solicitud.setFec_creacion(FormatDates.getInstance().getDataBaseDate()); data.completeInfoSolicitud(solicitud); response.put("SOLICITUD", solicitud); response.put("SOLICITUDINTEGRANTES", this.cloneIntegrantes(objectIntegrantes)); response.put("SOLICITUDTRANSPORTE", this.cloneTransporte(objectTransporte)); response.put("CLONE", "Y"); return pQueryRequest; } /** * Método para cambio de filtros */ public void fijaFiltrosSolicitud(QueryRequest pQueryRequest) throws Exception{ DtoQuery dtoQuery = (DtoQuery)pQueryRequest.getQueryTables().get("SOLICITUD"); DtoQuery dtoQueryInt = (DtoQuery)pQueryRequest.getQueryTables().get("SOLICITUDINTEGRANTES"); DtoQuery dtoQueryTra = (DtoQuery)pQueryRequest.getQueryTables().get("SOLICITUDTRANSPORTE"); List filtros = dtoQuery.getLfilter(); List filtrosInt = dtoQueryInt.getLfilter(); List filtrosTra = dtoQueryTra.getLfilter(); for(Filter filtro: filtros){ if(filtro.getField().equals("pk.cod_tipo")){ filtro.setValue(EnumCodigos.SOLICITUD.getCodigo()); break; } } for(Filter filtro: filtrosInt){ if(filtro.getField().equals("pk.cod_tipo")){ filtro.setValue(EnumCodigos.SOLICITUD.getCodigo()); break; } } for(Filter filtro: filtrosTra){ if(filtro.getField().equals("pk.cod_tipo")){ filtro.setValue(EnumCodigos.SOLICITUD.getCodigo()); break; } } } /** * Método para clonar la lista de objetos ViaSolicitudIntegrantes * @param object */ private List cloneIntegrantes(List objects) throws Exception { List listIntegrantes = new ArrayList(); ViaSolicitudIntegrantes integrante; for(Object objeto:objects) { integrante = (ViaSolicitudIntegrantes)objeto; ViaSolicitudIntegrantes inte = (ViaSolicitudIntegrantes)integrante.cloneMe(); listIntegrantes.add(inte); } ConsultaSolicitud data = new ConsultaSolicitud(); data.completeInfoIntegrantes(objects); return listIntegrantes; } /** * Método para clonar la lista de objetos ViaSolicitudTransporte * @param object */ private List cloneTransporte(List objects) throws Exception { List listTransporte = new ArrayList(); ViaSolicitudTransporte transporte; for(Object objeto:objects) { transporte = (ViaSolicitudTransporte)objeto; ViaSolicitudTransporte trans = (ViaSolicitudTransporte)transporte.cloneMe(); trans.getPk().setCod_secuencia(null); listTransporte.add(trans); } return listTransporte; } }