package com.fp.persistence.pviaticos.hra;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.persistence.Query;

import com.fp.bpm.query.QueryJsf;
import com.fp.dto.query.DtoQuery;
import com.fp.persistence.commondb.PersistenceHelper;

/**
 * Clase que se encarga de consultar información de la vista HRA.VWDATOSEMPLEADOS.
 * 
 * @author Jorge Vaca.
 * @version 2.1
 */
public class EmpleadoJpql extends QueryJsf {

    private static String SQL = "select codigo_empleado, apellidos ||' '||nombres as nombre, cedula, codigo_puesto as cargo, nombre_puesto as nomcargo, correo, "
            + "banco, tipo_cuenta,cuenta, codigo_area, nombre_area, codigo_jefe, codigo_responsable,"
            + "( select unique(apellidos ||' '||nombres) from HRA.VWDATOSEMPLEADOS i where i.codigo_empleado = t.codigo_jefe) as njefe, "
            + "( select unique(apellidos ||' '||nombres) from HRA.VWDATOSEMPLEADOS i where i.codigo_empleado = t.codigo_responsable) as nrespunidad, "
            + "(select i.nombre_puesto from HRA.VWDATOSEMPLEADOS i where i.CODIGO_EMPLEADO = t.CODIGO_JEFE) as cargo_jefe, "
            + "(select i.nombre_puesto from HRA.VWDATOSEMPLEADOS i where i.CODIGO_EMPLEADO = t.CODIGO_RESPONSABLE) as cargo_supervisor, "
            + "usuario_web, codigo_localidad, estado, "
            + "(select cd.description from tgenecatalogdetail cd where cd.catalogcode = 'CUDADORIGEN' and cd.catalog = t.codigo_localidad) as localidad"
            + " from HRA.VWDATOSEMPLEADOS t";

    /**
     * 
     * @param codigoEmpleado Codigo de empleado
     * @return Empleado
     * @throws Exception
     */
    public Empleado find(String codigoEmpleado) throws Exception {
        Map<String, String> mcriterios = new HashMap<>();
        mcriterios.put("codigo_empleado", codigoEmpleado);
        DtoQuery dtoquery = new DtoQuery("com.fp.persistence.pviaticos.hra.Empleado", mcriterios);
        Empleado emp = this.find(dtoquery).get(0);
        return emp;
    }

    /**
     * 
     * @param codigoUsuarioWeb Codigo de usuario web.
     * @return Empleado
     * @throws Exception
     */
    public Empleado findPorUsuarioWeb(String codigoUsuarioWeb) throws Exception {
        Map<String, String> mcriterios = new HashMap<>();
        mcriterios.put("usuario_web", codigoUsuarioWeb.toLowerCase());
        DtoQuery dtoquery = new DtoQuery("com.fp.persistence.pviaticos.hra.Empleado", mcriterios);
        List<Empleado> empleados = this.find(dtoquery);
        Empleado emp = null;
        if (!empleados.isEmpty()) {
            emp = empleados.get(0);
        }
        return emp;
    }

    @SuppressWarnings("unchecked")
    public List<Empleado> find(DtoQuery dtoquery) throws Exception {
        List<Empleado> ldata = new ArrayList<>();
        where = new StringBuffer(46);
        super.mparameter.clear();
        super.buildCriteria(dtoquery);
        Query qry = PersistenceHelper.getEntityManager().createNativeQuery(EmpleadoJpql.SQL + (super.where == null ? "" : super.where.toString()));
        super.setParameters(dtoquery, qry);
        List<Object[]> lresp = qry.getResultList();
        for (Object[] obj : lresp) {
            ldata.add(Empleado.cerar(obj));
        }
        return ldata;
    }

}
