package com.fp.viaticos.task; import java.util.HashMap; import java.util.Map; import javax.persistence.NoResultException; import javax.persistence.Query; 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.ViaCiudadUsuario; import com.fp.persistence.pviaticos.solicitud.ViaSolicitud; import com.fp.persistence.pviaticos.solicitud.ViaSolicitudKey; import com.fp.simple.action.TaskAction; import com.fp.viaticos.rules.exception.ViaticosException; /** * Clase que se encarga de obtener y fijar el usuario responsable de ejecutar la tarea de tesoreria.. * * @version 2.1 */ public class AsignarTesoreria 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 m = (HashMap) pParam; Map mrequest = (Map) 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")); EmpleadoJpql ejpql = new EmpleadoJpql(); Empleado e = ejpql.find(vsol.getCod_empleado()); if (e.getCodigoLocalidad() == null) { throw new ViaticosException("VIA-0001", "CODIGO DE LOCALIDAD NO ASOCIADO AL EMPLEADO: {0} {1}", e.getCodigo(), e.getNombre()); } // El userID va en mayusculas asi esta definido en las tablas de jbpm y maia. m.put("userId", this.getUsuario(e.getCodigoLocalidad(), "TESORERIA")); m.put("action", "A"); } /** * Busca en la tabla ViaCiudadUsuario, el codigo de usuario asociado a una localidad a la que pertence un * funcionario de la SBS. * * @param ciudad Codigo de ciudad a obtener el usuario. * @return String * @throws Exception */ private String getUsuario(String ciudad, String actividad) throws Exception { Query qry = PersistenceHelper.getEntityManager().createQuery( "from ViaCiudadUsuario t where t.pk.cod_actividad_catalog = :actividad and t.pk.cod_ciudad_catalog = :ciudad "); qry.setParameter("ciudad", ciudad); qry.setParameter("actividad", actividad); ViaCiudadUsuario obj = null; try { obj = (ViaCiudadUsuario) qry.getSingleResult(); } catch (NoResultException e) { throw new ViaticosException("VIA-0002", "USUARIO NO DEFINIDO EN VIA_CIUDAD_USUARIO CIUDAD: {0} ACTIVIDAD: {1} ", ciudad, actividad); } return obj.getCod_usuario(); } }