package com.fp.viaticos.task;

import java.util.HashMap;
import java.util.Map;

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.solicitud.ViaSolicitud;
import com.fp.persistence.pviaticos.solicitud.ViaSolicitudKey;
import com.fp.simple.action.TaskAction;

/**
 * Clase que se encarga de fijar el codigo de jefe del empleado que realiza una solicitud de viaticos, en el request
 * campo userId, para asignar una tarea.
 * 
 * @version 2.1
 */
public class AsignarJefe extends TaskAction {

    /*
     * (non-Javadoc)
     * 
     * @see com.fp.simple.action.TaskAction#assignOwner(com.fp.simple.flow.DataMap)
     */
    @SuppressWarnings("unchecked")
    @Override
    public void assignOwner(Object pParam) throws Exception {
        HashMap<String, Object> m = (HashMap<String, Object>) pParam;
        Map<String, Object> mrequest = (Map<String, Object>) m.get("request");
        if (mrequest.get("csolicitud") == null) {
            return;
        }
        String solicitud = (String) mrequest.get("csolicitud");
        ViaSolicitud vsol = ViaSolicitud.find(PersistenceHelper.getEntityManager(), new ViaSolicitudKey(solicitud, "S"));

        String codigoJefe = vsol.getCod_jefe();
        EmpleadoJpql ejpql = new EmpleadoJpql();
        Empleado emp = ejpql.find(vsol.getCod_empleado());
        if (codigoJefe == null) {
            codigoJefe = emp.getCodigoJefe();
        }

        // El userID va en mayusculas asi esta definido en las tablas de jbpm y maia.

        m.put("userId", ejpql.find(codigoJefe).getUsuarioweb().toUpperCase());
        if (emp.getCodigoJefe().equals(emp.getCodigoResponsableUnidad())) {
            m.put("action", "N"); // Va con N para que no le asigane la tarea al jefe inmediato solo asigana al
                                  // responsable de la unidad.
        } else {
            m.put("action", "A");
        }

    }

}
