General Code

From iDempiere en


Chat

Quickly add a chat to any PO (table) record.

package za.co.ntier.common;

import java.util.Properties;
import java.util.logging.Level;

import org.compiere.model.MChat;
import org.compiere.model.MChatEntry;
import org.compiere.model.PO;
import org.compiere.model.Query;
import org.compiere.util.CLogger;
import org.compiere.util.Env;

/**
 * Description:	Chat support
 */
public class NTierChatUtils {
	
	/** Logger */
	private static CLogger log = CLogger.getCLogger(NTierChatUtils.class);
	
	/**
	 */
	public static MChat getChat(Properties ctx, String trxName, 
			PO po) {
		final String whereClause = "AD_Client_ID=? and AD_Table_ID=? AND Record_ID=? ";
		MChat retValue = new Query(ctx, MChat.Table_Name, whereClause,
				trxName).setParameters(Env.getAD_Client_ID(ctx), po.get_Table_ID(), po.get_ID())
				.firstOnly();
		return retValue;
	}
	
	/**
	 * Add chat
	 */
	public static void addChat(Properties ctx, String trxName, 
			PO po, String comments) {
		try {
			String descr = "";
			descr = comments;
			descr = NTierStringUtils.left(descr, 255);
			MChat chat = getChat(ctx, trxName, po);
			if (chat == null) {
				chat = new MChat (ctx, po.get_Table_ID(), po.get_ID(), descr, trxName);
				chat.saveEx(trxName);
			}
			log.info(String.format("Chat - %s - '%s'", po.get_TableName(), descr));
			MChatEntry chatEntry = new MChatEntry(chat, descr);
			chatEntry.saveEx(trxName);
		} catch (Exception e) {
			log.log(Level.SEVERE, "^^^", e);
			log.info(String.format("^^^ Failed to save chat record"));
		}
	}
}

Start a process (or report)

  • See FinReportJasper in the base code, for an example of how this is done.

Database

Call a database procedure

  • From FinReportJasper in the base
// CarlosRuiz - globalqss - allow procedure preprocess
	    if (proc.getProcedureName() != null && proc.getProcedureName().length() > 0) {
			//  execute on this thread/connection
			String sql = "{call " + proc.getProcedureName() + "(?)}";
			CallableStatement cstmt = null;
			try
			{
				cstmt = DB.prepareCall(sql);	//	ro??
				cstmt.setInt(1, getAD_PInstance_ID());
				cstmt.executeUpdate();
			}
			catch (Exception e)
			{
				log.log(Level.SEVERE, sql, e);
				poInfo.setSummary (Msg.getMsg(Env.getCtx(), "ProcessRunError") + " " + e.getLocalizedMessage());
			}
			finally
			{
				DB.close(cstmt);
				cstmt = null;
			}
	    }

nTierConfigurator

Example use

public static int getSequenceNumberNext(Properties ctx, String trxName) {
		MSysConfig config = NTierConfigurator.newOrGet(ctx, trxName, false, 
				"NTIER_SEQUENCE_NEXT", "5000", "Next sequence number");
		int r = config.get_ValueAsInt("Value");
		config.setValue( (new Integer(r+1)).toString() );
		config.saveEx();
		return r;
	}
	
	public static boolean isRequireUniqueSequence(Properties ctx, String trxName) {
		return NTierConfigurator.newOrGetBoolean(ctx, trxName, false, 
				"NTIER_REQUIRE_UNIQUE_SEQUENCE", "Y", "Require a unique sequence number?");
	}
	
	public static String getDevelopmentMode(Properties ctx, String trxName) {
		return NTierConfigurator.newOrGetString(ctx, trxName, false, 
				"NTIER_DEVELOPMENT_MODE", "Test", "Development mode - Test or Live");
	}
	
	public static Timestamp getFirstDayDateOfCurrentFinancialYear(Properties ctx, String trxName) {
		MSysConfig config = NTierConfigurator.newOrGet(ctx, trxName, false, 
				"NTIER_FIRST_DAY_CURRENT_YEAR", "2014-03-01", "First day of current financial year: for take-on");
		String v = config.get_ValueAsString("Value");
		Timestamp r = NTierDateUtils.parse(v, "yyyy-MM-dd") ;
		return r;
	}
	
	
	
	public static boolean isHasAssetAdditions(Properties ctx, String trxName, int assetID, String docStatus) {
		int i = getAssetAdditions(ctx, trxName, assetID, docStatus).length;
		return i>0;
	} 

Class

/******************************************************************************                                                                                                                                                                                                
 * Copyright (C) 2015 nTier Software Services http://www.ntier.co.za          *                                                                                                                                                                                                
 * This program is free software; you can redistribute it and/or modify it    *                                                                                                                                                                                                
 * under the terms version 2 of the GNU General Public License as published   *                                                                                                                                                                                                
 * by the Free Software Foundation. This program is distributed in the hope   *                                                                                                                                                                                                
 * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *                                                                                                                                                                                                
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.           *                                                                                                                                                                                                
 * See the GNU General Public License for more details.                       *                                                                                                                                                                                                
 * You should have received a copy of the GNU General Public License along    *                                                                                                                                                                                                
 * with this program; if not, write to the Free Software Foundation, Inc.,    *                                                                                                                                                                                                
 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.                     *                                                                                                                                                                                                
 *****************************************************************************/  
package za.co.ntier.common;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import java.util.logging.Level;

import org.adempiere.exceptions.AdempiereException;
import org.compiere.model.MSysConfig;
import org.compiere.model.Query;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
import org.compiere.util.Env;

/**
 * (c) 2015 nTier Software Services
 * @author Neil Gordon
 * Date: 24 Feb 2015
 * Description:	Manage configurator settings
 */
public class NTierConfigurator {

	/** Logger */
	private static CLogger log = CLogger.getCLogger(NTierConfigurator.class);
	/**
	 * 	Get specified MSysConfig record
	 *	@param ctx context 
	 *	@param ID
	 *	@return record
	 */
	public static MSysConfig getConfigurator(Properties ctx, String trxName, String name) {
		int AD_Client_ID = Env.getContextAsInt(ctx, "#AD_Client_ID");
		MSysConfig po = new Query(ctx, MSysConfig.Table_Name, "ad_client_id=? and name=?", trxName)
				.setParameters(AD_Client_ID, name).setOnlyActiveRecords(true).first();
		return po;
	}

	/**
	 * Get the configurator setting
	 */
	public static String getConfiguratorSettingValue(String name, String defaultValue) {
		String result = MSysConfig.getValue(name, defaultValue );
		return result;
	}

	/**
	 * Get the configurator setting - specified Client, or System Client. 
	 * 	Note, Client will override setting in System if both exist.
	 */
	public static String getConfiguratorSettingValue(String name, String defaultValue, int AD_Client_ID) {
		String result = MSysConfig.getValue(name, defaultValue, AD_Client_ID );
		return result;
	}
	
	/**
	 * Does the specified setting exist?
	 */
	public static boolean isSettingExists(Properties ctx, String trxName, String name)  {
		return isSettingExists(ctx, trxName, name, 0, 0);
	}
	
	/**
	 * Does the specified setting exist?
	 */
	public static boolean isSettingExists(Properties ctx, String trxName, String name, int AD_Client_ID, int AD_Org_ID)
	{
		//
		String sql = "SELECT Value FROM AD_SysConfig"
						+ " WHERE Name=? AND AD_Client_ID IN (0, ?) AND AD_Org_ID IN (0, ?) " //AND IsActive='Y'
						+ " ORDER BY AD_Client_ID DESC, AD_Org_ID DESC";
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try
		{
			pstmt = DB.prepareStatement(sql, null);
			pstmt.setString(1, name);
			pstmt.setInt(2, AD_Client_ID);
			pstmt.setInt(3, AD_Org_ID);
			rs = pstmt.executeQuery();
			if (rs.next())
				return true;
		}
		catch (SQLException e)
		{
			log.log(Level.SEVERE, "isSettingExists", e);
		}
		finally
		{
			DB.close(rs, pstmt);
			rs = null; pstmt = null;
		}
		
		return false;
	}
	
	/**
	 * Create the given configurator setting
	 */
	public static void createConfiguratorSetting(Properties ctx, String trxName, boolean isSystem, String name, String value, String description) {
		
		String confLevel;
		Properties ctx1;
		ctx1 = (Properties)ctx.clone();
		if ( isSystem ) {
			if (isSettingExists(ctx, trxName, name)) 
				return;
			ctx1.setProperty(Env.AD_CLIENT_ID, "0");
			confLevel = MSysConfig.CONFIGURATIONLEVEL_System;
		} else {
			if (isSettingExists(ctx, trxName, name, Env.getAD_Client_ID(ctx), 0)) 
				return;
			confLevel = MSysConfig.CONFIGURATIONLEVEL_Client;
		}
		
		ctx1.setProperty(Env.AD_ORG_ID, "0");
		MSysConfig conf = new MSysConfig(ctx1, 0, null);
		conf.setConfigurationLevel(confLevel);
		conf.setName(name);
		conf.setDescription(description);
		conf.setValue(value);
		conf.saveEx();
		//CacheMgt.get().reset(MSysConfig.Table_Name);
	}
	
	public static MSysConfig newOrGet(Properties ctx, String trxName, boolean isSystem, String name, String defaultValue, String description) {
		NTierUtils.resetCacheForTable( MSysConfig.Table_Name );
		MSysConfig config;
		Properties ctx1;
		createConfiguratorSetting(ctx, trxName, isSystem, name, defaultValue, description);
		ctx1 = (Properties)ctx.clone();
		if (isSystem) {
			ctx1.setProperty(Env.AD_CLIENT_ID, "0");
		} else {
		}
		config = getConfigurator(ctx1, trxName, name);
		if ( config==null ) {
			throw new AdempiereException( String.format("Returned configurator setting is null (should've been created) - '%s'", name) );
		}
		return config;
	}
	
	public static String newOrGetString(Properties ctx, String trxName, boolean isSystem, String name, String defaultValue, String description) {
		MSysConfig config;
		config = newOrGet(ctx, trxName, isSystem, name, defaultValue, description);
		String r = config.get_ValueAsString("Value");
		return r;
	}
	
	public static boolean newOrGetBoolean(Properties ctx, String trxName, boolean isSystem, String name, String defaultValue, String description) {
		MSysConfig config;
		config = newOrGet(ctx, trxName, isSystem, name, defaultValue, description);
		boolean r = config.get_ValueAsBoolean("Value");
		return r;
	}
	
	public static int newOrGetInt(Properties ctx, String trxName, boolean isSystem, String name, String defaultValue, String description) {
		MSysConfig config;
		config = newOrGet(ctx, trxName, isSystem, name, defaultValue, description);
		int r = config.get_ValueAsInt("Value");
		return r;
	}

}


Credits

Initial contribution by: nTier Software Services http://www.ntier.co.za

Add your credit here.

Cookies help us deliver our services. By using our services, you agree to our use of cookies.