maia/.svn/pristine/ce/ce0dcd32e0448aced02ad25105d...

128 lines
4.1 KiB
Plaintext
Executable File

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<Object> integrantes = (List<Object>)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<Object> 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;
}
}