package com.fp.viaticos.mail.thread; import java.util.ArrayList; import java.util.List; import com.fp.bpmlib.flow.RuleUtil; import com.fp.common.logger.APPLogger; import com.fp.dto.Request; import com.fp.dto.save.SaveRequest; import com.fp.persistence.commondb.PersistenceHelper; import com.fp.persistence.commondb.PersistenceManager; import com.fp.persistence.commondb.data.SessionData; import com.fp.persistence.commondb.data.ThreadFacade; import com.fp.viaticos.mail.Empleado; import com.fp.viaticos.mail.Tesoreria; /** * Hilo que se encarga de enviar mail's al empleado y/o tesoreria por solicitud. El mail se envia si el usuario tiene * tareas en estatus aprobar o por ingresar informe. * * @author Jorge Vaca. * @version 2.1 */ public class MailPorSolicitud implements Runnable { /** * Request con el que inicia la transaccion de envio de correos. */ private final SaveRequest saverequest; /** * Numero de solicitud a obtener informacion asociada a la solicitud con la que se envia el mail. */ private final String csolicitud; /** * S solicitud. I informe. */ private final String tipo; /** * Numero de dias desde la fecha de vencimiento del viatico. */ private final Integer dias; /** * Crea una instancia de MailPorSolicitud. * * @param saverequest Objeto con el que inicia una solicitud. * @param csolicitud Numero de solicitus. * @param tipo Tipo de registro, S solicitud, I informe. * @throws Exception */ public MailPorSolicitud(SaveRequest saverequest, String csolicitud, String tipo, Integer dias) throws Exception { this.saverequest = saverequest; this.csolicitud = csolicitud; this.tipo = tipo; this.dias = dias; } /** * Metodo que se encarga de inicio de ejecucion del hilo. */ @Override public void run() { try { process(); } catch (Exception e) { APPLogger.getLogger().error(e); } } /** * Metodo que se encarga de la llamada al ejb para la ejecucion de una cuenta. * * @throws Exception Se presenta en el caso que la el proceso de la tarea no haya sido satisfactoria */ private void process() throws Exception { try { SessionData s = new SessionData(); s.setCompany(saverequest.getCompany()); ThreadFacade.setSaveRequest(s); PersistenceHelper.setEntityManager(PersistenceManager.getInstance().createEntityManagerLocal()); PersistenceHelper.beginNewTransaction(); this.sendMail(); PersistenceHelper.commitNewTransaction(); } catch (Exception e) { PersistenceHelper.rollbackNewTransaction(); APPLogger.getLogger().error(e); } } /** * Envia mail al empleado y a tesoria si tiene 4 dias de reteazo en tomar acciones en el flujo. * * @throws Exception */ private void sendMail() throws Exception { RuleUtil.setSubjectTemplate(1); RuleUtil.setContentTemplate(2); List lemail = new ArrayList(); Empleado emp = new Empleado(); lemail.addAll(emp.getEmail(csolicitud, tipo)); if (dias == 4) { Tesoreria t = new Tesoreria(); lemail.addAll(t.getEmail(csolicitud, tipo)); } for (String email : lemail) { RuleUtil.toAddress(email); } if (!lemail.isEmpty()) { Request request = new Request(); saverequest.copy(request); request.put("csolicitud", csolicitud); RuleUtil.sendMail(request); } } }