package com.fp.viaticos.rules.consulta.solicitud; import java.math.BigDecimal; import java.util.Calendar; import java.util.List; import com.fp.bpm.query.QueryJsf; import com.fp.dto.Response; import com.fp.dto.query.QueryRequest; import com.fp.dto.rules.QueryRule; import com.fp.persistence.commondb.PersistenceHelper; import com.fp.persistence.pviaticos.hra.Empleado; import com.fp.persistence.pviaticos.hra.EmpleadoJpql; import com.fp.persistence.pviaticos.param.ViaDiasAcumulados; import com.fp.persistence.pviaticos.param.ViaDiasAcumuladosKey; import com.fp.persistence.pviaticos.solicitud.ViaSolicitud; import com.fp.persistence.pviaticos.solicitud.ViaSolicitudIntegrantes; import com.fp.viaticos.rules.query.destino.DestinoQuery; public class ConsultaSolicitud extends QueryRule{ /** * */ private static final long serialVersionUID = 1L; @Override public QueryRequest process(QueryRequest pQrequest) throws Exception { Response response = pQrequest.getResponse(); QueryJsf query = new QueryJsf(); query.execute(pQrequest); Object solicitud = (Object) response.get("SOLICITUD"); List integrantes = (List)response.get("SOLICITUDINTEGRANTES"); this.completeInfoSolicitud(solicitud); this.completeInfoIntegrantes(integrantes); return pQrequest; } /** * Completa los datos de la solicitud * @param object Objeto ViaSolicitud * @throws Exception */ public void completeInfoSolicitud(Object object) throws Exception{ if(object==null){ return; } ViaSolicitud solicitud = (ViaSolicitud)object; Empleado emp = null; EmpleadoJpql e = new EmpleadoJpql(); DestinoQuery qry = new DestinoQuery(); //Funcionario ingresa emp = e.findPorUsuarioWeb(solicitud.getCod_usuario().toLowerCase()); if(emp!=null){ solicitud.modifiedData.put("cod_ingreso", emp.getCodigo()); solicitud.modifiedData.put("nom_ingreso", emp.getNombre()); } //jefe if(solicitud.getCod_jefe()!=null){ emp = e.find(solicitud.getCod_jefe()); if(emp!=null){ solicitud.modifiedData.put("nombrejefe", emp.getNombre()); solicitud.modifiedData.put("cargojefe", emp.getNombreCargo()); } } //Responsable if(solicitud.getCod_responsable()!=null){ emp = e.find(solicitud.getCod_responsable()); if(emp!=null){ solicitud.modifiedData.put("nombreresponsable", emp.getNombre()); solicitud.modifiedData.put("cargoresponsable", emp.getNombreCargo()); } } //Destino Object obj = qry.find(solicitud.getCod_destino()); if(obj!=null){ Object[] destino = (Object[])obj; solicitud.modifiedData.put("destinoname", destino[1]); } //Dias acumulados por destino Calendar calendar = Calendar.getInstance(); calendar.setTime(solicitud.getFec_creacion()); BigDecimal dias = this.diasPorDestino(solicitud.getCod_empleado(), solicitud.getCod_destino(),calendar.get(Calendar.YEAR)); solicitud.modifiedData.put("comisionciudad", solicitud.getNum_dias().add(dias)); } /** * Completa la informacion de los integrantes * @param objeto */ public void completeInfoIntegrantes(List objetos)throws Exception{ if(objetos==null || objetos.isEmpty()){ return; } for(Object obj:objetos){ ViaSolicitudIntegrantes integrante = (ViaSolicitudIntegrantes)obj; EmpleadoJpql e = new EmpleadoJpql(); Empleado emp = e.find(integrante.getPk().getCod_empleado()); if(emp!=null){ integrante.modifiedData.put("empleado", emp.getNombre()); } } } /** * Entrega los dias acumulados por ciudad * @param codEmpleado * @param codDestino * @param periodo * @return * @throws Exception */ private BigDecimal diasPorDestino(String codEmpleado, String codDestino, Integer periodo)throws Exception{ BigDecimal valor = new BigDecimal("0.0"); ViaDiasAcumuladosKey key = new ViaDiasAcumuladosKey(); key.setCod_empleado(codEmpleado); key.setCod_destino(codDestino); key.setCod_ejercicio(periodo); ViaDiasAcumulados acumulados = ViaDiasAcumulados.find(PersistenceHelper.getEntityManager(), key); if(acumulados!=null){ valor.add(acumulados.getNum_dias()); } return valor; } }