Search in sources :

Example 1 with MAlertRule

use of org.compiere.model.MAlertRule in project adempiere by adempiere.

the class AlertProcessor method processAlert.

//	doWork
/**
	 * 	Process Alert
	 *	@param alert alert
	 *	@return true if processed
	 */
private boolean processAlert(MAlert alert) {
    if (!alert.isValid())
        return false;
    log.info("" + alert);
    StringBuffer message = new StringBuffer(alert.getAlertMessage()).append(Env.NL);
    //
    boolean valid = true;
    boolean processed = false;
    ArrayList<File> attachments = new ArrayList<File>();
    MAlertRule[] rules = alert.getRules(false);
    for (int i = 0; i < rules.length; i++) {
        if (i > 0)
            message.append(Env.NL);
        //	assume r/o
        String trxName = null;
        MAlertRule rule = rules[i];
        if (!rule.isValid())
            continue;
        log.fine("" + rule);
        //	Pre
        String sql = rule.getPreProcessing();
        if (sql != null && sql.length() > 0) {
            int no = DB.executeUpdate(sql, false, trxName);
            if (no == -1) {
                ValueNamePair error = CLogger.retrieveError();
                rule.setErrorMsg("Pre=" + error.getName());
                m_errors.append("Pre=" + error.getName());
                rule.setIsValid(false);
                rule.saveEx();
                valid = false;
                break;
            }
        }
        //	Pre
        //	The processing
        sql = rule.getSql(true);
        try {
            String text = null;
            if (MSysConfig.getBooleanValue("ALERT_SEND_ATTACHMENT_AS_XLS", true, Env.getAD_Client_ID(getCtx())))
                text = getExcelReport(rule, sql, trxName, attachments);
            else
                text = getPlainTextReport(rule, sql, trxName, attachments);
            if (text != null && text.length() > 0) {
                message.append(text);
                processed = true;
            }
        } catch (Exception e) {
            rule.setErrorMsg("Select=" + e.getLocalizedMessage());
            m_errors.append("Select=" + e.getLocalizedMessage());
            rule.setIsValid(false);
            rule.saveEx();
            valid = false;
            break;
        }
        //	Post
        sql = rule.getPostProcessing();
        if (sql != null && sql.length() > 0) {
            int no = DB.executeUpdate(sql, false, trxName);
            if (no == -1) {
                ValueNamePair error = CLogger.retrieveError();
                rule.setErrorMsg("Post=" + error.getName());
                m_errors.append("Post=" + error.getName());
                rule.setIsValid(false);
                rule.saveEx();
                valid = false;
                break;
            }
        }
        /**	Trx				*/
        if (trxName != null) {
            Trx trx = Trx.get(trxName, false);
            if (trx != null) {
                trx.commit();
                trx.close();
            }
        }
    }
    //	Update header if error
    if (!valid) {
        alert.setIsValid(false);
        alert.saveEx();
        return false;
    }
    //	Nothing to report
    if (!processed) {
        m_summary.append(alert.getName()).append("=No Result - ");
        return true;
    }
    //
    // Report footer - Date Generated
    DateFormat df = DisplayType.getDateFormat(DisplayType.DateTime);
    message.append("\n\n");
    message.append(Msg.translate(getCtx(), "Date")).append(" : ").append(df.format(new Timestamp(System.currentTimeMillis())));
    Collection<Integer> users = alert.getRecipientUsers();
    int countMail = notifyUsers(users, alert.getAlertSubject(), message.toString(), attachments);
    m_summary.append(alert.getName()).append(" (EMails+Notes=").append(countMail).append(") - ");
    return valid;
}
Also used : ArrayList(java.util.ArrayList) Timestamp(java.sql.Timestamp) MAlertRule(org.compiere.model.MAlertRule) DateFormat(java.text.DateFormat) ValueNamePair(org.compiere.util.ValueNamePair) Trx(org.compiere.util.Trx) File(java.io.File)

Aggregations

File (java.io.File)1 Timestamp (java.sql.Timestamp)1 DateFormat (java.text.DateFormat)1 ArrayList (java.util.ArrayList)1 MAlertRule (org.compiere.model.MAlertRule)1 Trx (org.compiere.util.Trx)1 ValueNamePair (org.compiere.util.ValueNamePair)1