package com.fitbank.bpm.common; import org.hibernate.SQLQuery; import org.hibernate.ScrollMode; import org.hibernate.ScrollableResults; import com.fitbank.common.ApplicationDates; import com.fitbank.common.Helper; import com.fitbank.common.RequestData; import com.fitbank.dto.management.Detail; import com.fitbank.dto.management.Field; public class Notify extends AbstractFitSend { private static final long serialVersionUID = 1L; private final static String SELECT_QUERY = "SELECT CUSUARIO FROM TCOMPANIAUSUARIOS " + "WHERE CROL = :rol " + "AND FHASTA = :fhasta " + "AND CPERSONA_COMPANIA = 2"; private final static String AUTH = "_USER_NOTIFY"; public Detail execute(Detail pDetail, String pClass, String pRule, Detail pOrigin) throws Exception { if (RequestData.getOrigin() == null) { return pDetail; } for (Field f : pDetail.getFields()) { if (f.getName().indexOf("_ROL") == 0) { String rol = (String) f.getValue(); if (rol.compareTo("X") == 0) { String autorizador = null; ScrollableResults rsLote = null; SQLQuery sqlQry = Helper.getSession().createSQLQuery( SELECT_QUERY); sqlQry.setInteger("rol", Integer.parseInt((String) pDetail .findFieldByNameCreate(AUTH).getValue())); sqlQry.setDate("fhasta", ApplicationDates.DEFAULT_EXPIRY_DATE); rsLote = sqlQry.scroll(ScrollMode.FORWARD_ONLY); if (rsLote.next()) { Object[] obj = rsLote.get(); autorizador = (String) (obj[0]); RequestData.getOrigin().findFieldByNameCreate(AUTH) .setValue(autorizador); } } } } RequestData.getOrigin().findFieldByNameCreate("__NTPCLASS__") .setValue(pClass); RequestData.getOrigin().findFieldByNameCreate("__NTPRULE__") .setValue(pRule); RequestData.getOrigin().findFieldByNameCreate("__POSTEVENT__") .setValue("com.fitbank.bpm.common.Notify"); RequestData.getOrigin().findFieldByNameCreate(AUTH) .setValue(pDetail.findFieldByNameCreate(AUTH).getValue()); RequestData .getOrigin() .findFieldByNameCreate("BPMInstanceName") .setValue( pDetail.findFieldByNameCreate("BPMInstanceName") .getValue()); if (pDetail.findFieldByNameCreate("_MESSAGE_").getValue() != null) { RequestData .getOrigin() .findFieldByNameCreate("_MESSAGE") .setValue( pDetail.findFieldByNameCreate("_MESSAGE_") .getValue()); RequestData.getOrigin().findFieldByNameCreate("_MESSAGE_") .setValue(null); } else { RequestData.getOrigin().findFieldByNameCreate("_MESSAGE") .setValue(pClass); } if (RequestData.getOrigin() != null) { Detail origindetail = RequestData.getOrigin(); this.copyControlFields(origindetail, pDetail); this.setInOriginDetail(origindetail, "APPLYRULE", pRule); this.setInOriginDetail(origindetail, "_ORIGIN_MESSAGE", pOrigin.getMessageId()); this.setInOriginDetail(origindetail, "_ORIGIN_SUBSYSTEM", pOrigin.getSubsystem()); this.setInOriginDetail(origindetail, "_ORIGIN_TRANSACTION", pOrigin.getTransaction()); this.setInOriginDetail(origindetail, "_ORIGIN_VERSION", pOrigin.getVersion()); this.setInOriginDetail(origindetail, "_ORIGIN_USER", pOrigin.getUser()); this.setInOriginDetail(origindetail, "_ORIGIN_TERMINAL", pOrigin.getTerminal()); this.setInOriginDetail(origindetail, "_ORIGIN_BRANCH", pOrigin.getOriginBranch()); this.setInOriginDetail(origindetail, "_ORIGIN_OFFICE", pOrigin.getOriginOffice()); this.setInOriginDetail(origindetail, "__BPMAUTHUSERS__", pDetail .findFieldByNameCreate("_USER_NOTIFY").getValue()); this.setInOriginDetail(origindetail, "_NOTIFY_TIME", ApplicationDates.getDBTimestamp()); } else { RequestData.setOrigin(pDetail); } return pDetail; } private void copyControlFields(Detail dorigin, Detail detail) { for (Field field : detail.getFields()) { dorigin.findFieldByNameCreate(field.getName()).setValue( field.getValue()); } } private void setInOriginDetail(Detail detail, String field, Object value) { detail.findFieldByNameCreate(field).setValue(value); } }