⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maccount.java

📁 大家共享愉快, 共享愉快, 共享愉快, 共享愉快,共享愉快
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************
 * The contents of this file are subject to the   Compiere License  Version 1.1
 * ("License"); You may not use this file except in compliance with the License
 * You may obtain a copy of the License at http://www.compiere.org/license.html
 * Software distributed under the License is distributed on an  "AS IS"  basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 * the specific language governing rights and limitations under the License.
 * The Original Code is Compiere ERP & CRM Smart Business Solution. The Initial
 * Developer of the Original Code is Jorg Janke. Portions created by Jorg Janke
 * are Copyright (C) 1999-2005 Jorg Janke.
 * All parts are Copyright (C) 1999-2005 ComPiere, Inc.  All Rights Reserved.
 * Contributor(s): ______________________________________.
 *****************************************************************************/
package org.compiere.model;

import java.sql.*;
import java.util.*;
import java.util.logging.*;
import org.compiere.util.*;

/**
 *  Account Object Entity to maintain all segment values.
 * 	C_ValidCombination
 *
 *  @author		Jorg Janke
 *  @version 	$Id: MAccount.java,v 1.17 2005/12/19 01:20:41 jjanke Exp $
 */
public class MAccount extends X_C_ValidCombination
{
	/**
	 * 	Get existing Account or create it 
	 *	@return account or null
	 */
	public static MAccount get (Properties ctx, 
		int AD_Client_ID, int AD_Org_ID, int C_AcctSchema_ID, 
		int Account_ID, int C_SubAcct_ID,
		int M_Product_ID, int C_BPartner_ID, int AD_OrgTrx_ID, 
		int C_LocFrom_ID, int C_LocTo_ID, int C_SalesRegion_ID, 
		int C_Project_ID, int C_Campaign_ID, int C_Activity_ID,
		int User1_ID, int User2_ID, int UserElement1_ID, int UserElement2_ID)
	{
		MAccount existingAccount = null;
		//
		StringBuffer info = new StringBuffer();
		StringBuffer sql = new StringBuffer("SELECT * FROM C_ValidCombination "
			//	Mandatory fields
			+ "WHERE AD_Client_ID=?"		//	#1
			+ " AND AD_Org_ID=?"
			+ " AND C_AcctSchema_ID=?"
			+ " AND Account_ID=?");			//	#4
		//	Optional fields
		if (C_SubAcct_ID == 0)
			sql.append(" AND C_SubAcct_ID IS NULL");
		else
			sql.append(" AND C_SubAcct_ID=?");
		if (M_Product_ID == 0)
			sql.append(" AND M_Product_ID IS NULL");
		else
			sql.append(" AND M_Product_ID=?");
		if (C_BPartner_ID == 0)
			sql.append(" AND C_BPartner_ID IS NULL");
		else
			sql.append(" AND C_BPartner_ID=?");
		if (AD_OrgTrx_ID == 0)
			sql.append(" AND AD_OrgTrx_ID IS NULL");
		else
			sql.append(" AND AD_OrgTrx_ID=?");
		if (C_LocFrom_ID == 0)
			sql.append(" AND C_LocFrom_ID IS NULL");
		else
			sql.append(" AND C_LocFrom_ID=?");
		if (C_LocTo_ID == 0)
			sql.append(" AND C_LocTo_ID IS NULL");
		else
			sql.append(" AND C_LocTo_ID=?");
		if (C_SalesRegion_ID == 0)
			sql.append(" AND C_SalesRegion_ID IS NULL");
		else
			sql.append(" AND C_SalesRegion_ID=?");
		if (C_Project_ID == 0)
			sql.append(" AND C_Project_ID IS NULL");
		else
			sql.append(" AND C_Project_ID=?");
		if (C_Campaign_ID == 0)
			sql.append(" AND C_Campaign_ID IS NULL");
		else
			sql.append(" AND C_Campaign_ID=?");
		if (C_Activity_ID == 0)
			sql.append(" AND C_Activity_ID IS NULL");
		else
			sql.append(" AND C_Activity_ID=?");
		if (User1_ID == 0)
			sql.append(" AND User1_ID IS NULL");
		else
			sql.append(" AND User1_ID=?");
		if (User2_ID == 0)
			sql.append(" AND User2_ID IS NULL");
		else
			sql.append(" AND User2_ID=?");
		if (UserElement1_ID == 0)
			sql.append(" AND UserElement1_ID IS NULL");
		else
			sql.append(" AND UserElement1_ID=?");
		if (UserElement2_ID == 0)
			sql.append(" AND UserElement2_ID IS NULL");
		else
			sql.append(" AND UserElement2_ID=?");
		sql.append(" AND IsActive='Y'");
	//	sql.append(" ORDER BY IsFullyQualified DESC");
		try
		{
			PreparedStatement pstmt = DB.prepareStatement(sql.toString(), null);
			//  --  Mandatory Accounting fields
			int index = 1;
			pstmt.setInt(index++, AD_Client_ID);
			pstmt.setInt(index++, AD_Org_ID);
			info.append("AD_Client_ID=").append(AD_Client_ID).append(",AD_Org_ID=").append(AD_Org_ID);
			//	Schema
			pstmt.setInt(index++, C_AcctSchema_ID);
			info.append(",C_AcctSchema_ID=").append(C_AcctSchema_ID);
			//	Account
			pstmt.setInt(index++, Account_ID);
			info.append(",Account_ID=").append(Account_ID).append(" ");
			
			//	--  Optional Accounting fields
			if (C_SubAcct_ID != 0)
				pstmt.setInt(index++, C_SubAcct_ID);
			if (M_Product_ID != 0)
				pstmt.setInt(index++, M_Product_ID);
			if (C_BPartner_ID != 0)
				pstmt.setInt(index++, C_BPartner_ID);
			if (AD_OrgTrx_ID != 0)
				pstmt.setInt(index++, AD_OrgTrx_ID);
			if (C_LocFrom_ID != 0)
				pstmt.setInt(index++, C_LocFrom_ID);
			if (C_LocTo_ID != 0)
				pstmt.setInt(index++, C_LocTo_ID);
			if (C_SalesRegion_ID != 0)
				pstmt.setInt(index++, C_SalesRegion_ID);
			if (C_Project_ID != 0)
				pstmt.setInt(index++, C_Project_ID);
			if (C_Campaign_ID != 0)
				pstmt.setInt(index++, C_Campaign_ID);
			if (C_Activity_ID != 0)
				pstmt.setInt(index++, C_Activity_ID);
			if (User1_ID != 0)
				pstmt.setInt(index++, User1_ID);
			if (User2_ID != 0)
				pstmt.setInt(index++, User2_ID);
			if (UserElement1_ID != 0)
				pstmt.setInt(index++, UserElement1_ID);
			if (UserElement2_ID != 0)
				pstmt.setInt(index++, UserElement2_ID);
			//
			ResultSet rs = pstmt.executeQuery();
			if (rs.next())
				existingAccount = new MAccount (ctx, rs, null);
			rs.close();
			pstmt.close();
		}
		catch(SQLException e)
		{
			s_log.log(Level.SEVERE, info + "\n" + sql, e);
		}
		//	Existing
		if (existingAccount != null)
			return existingAccount;

		//	New
		MAccount newAccount = new MAccount (ctx, 0, null);
		newAccount.setClientOrg(AD_Client_ID, AD_Org_ID);
		newAccount.setC_AcctSchema_ID(C_AcctSchema_ID);
		newAccount.setAccount_ID(Account_ID);
		//	--  Optional Accounting fields
		newAccount.setC_SubAcct_ID(C_SubAcct_ID);
		newAccount.setM_Product_ID(M_Product_ID);
		newAccount.setC_BPartner_ID(C_BPartner_ID);
		newAccount.setAD_OrgTrx_ID(AD_OrgTrx_ID);
		newAccount.setC_LocFrom_ID(C_LocFrom_ID);
		newAccount.setC_LocTo_ID(C_LocTo_ID);
		newAccount.setC_SalesRegion_ID(C_SalesRegion_ID);
		newAccount.setC_Project_ID(C_Project_ID);
		newAccount.setC_Campaign_ID(C_Campaign_ID);
		newAccount.setC_Activity_ID(C_Activity_ID);
		newAccount.setUser1_ID(User1_ID);
		newAccount.setUser2_ID(User2_ID);
		newAccount.setUserElement1_ID(UserElement1_ID);
		newAccount.setUserElement2_ID(UserElement2_ID);
		//
		if (!newAccount.save())
		{
			s_log.log(Level.SEVERE, "Could not create new account - " + info);
			return null;
		}
		s_log.fine("New: " + newAccount);
		return newAccount;
	}	//	get
	
	/**
	 * 	Get first with Alias
	 *	@param ctx context
	 *	@param C_AcctSchema_ID as
 	 *	@param alias alias
	 *	@return account
	 */
	public static MAccount get (Properties ctx, int C_AcctSchema_ID, String alias)
	{
		MAccount retValue = null;
		String sql = "SELECT * FROM C_ValidCombination WHERE C_AcctSchema_ID=? AND Alias=?";
		PreparedStatement pstmt = null;
		try
		{
			pstmt = DB.prepareStatement (sql, null);
			pstmt.setInt(1, C_AcctSchema_ID);
			pstmt.setString (2, alias);
			ResultSet rs = pstmt.executeQuery ();
			if (rs.next ())
				retValue = new MAccount (ctx, rs, null);
			rs.close ();
			pstmt.close ();
			pstmt = null;
		}
		catch (Exception e)
		{
			s_log.log (Level.SEVERE, sql, e);
		}
		try
		{
			if (pstmt != null)
				pstmt.close ();
			pstmt = null;
		}
		catch (Exception e)
		{
			pstmt = null;
		}
		return retValue;
	}	//	get
	
	/**
	 * 	Get from existing Accounting fact
	 *	@param fa accounting fact
	 *	@return account
	 */
	public static MAccount get (X_Fact_Acct fa)
	{
		MAccount acct = get (fa.getCtx(),
			fa.getAD_Client_ID(), fa.getAD_Org_ID(), fa.getC_AcctSchema_ID(), 
			fa.getAccount_ID(), fa.getC_SubAcct_ID(),
			fa.getM_Product_ID(), fa.getC_BPartner_ID(), fa.getAD_OrgTrx_ID(), 
			fa.getC_LocFrom_ID(), fa.getC_LocTo_ID(), fa.getC_SalesRegion_ID(), 
			fa.getC_Project_ID(), fa.getC_Campaign_ID(), fa.getC_Activity_ID(),
			fa.getUser1_ID(), fa.getUser2_ID(), fa.getUserElement1_ID(), fa.getUserElement2_ID());
		return acct;
	}	//	get
	
	/**************************************************************************
	 *  Factory: default combination
	 *  @param C_AcctSchema_ID accounting schema
	 * 	@param optionalNull if true the optional values are null
	 *  @return Account
	 */
	public static MAccount getDefault (Properties ctx, int C_AcctSchema_ID, boolean optionalNull, String trxName)
	{
		MAcctSchema acctSchema = new MAcctSchema (ctx, C_AcctSchema_ID, trxName);
		return getDefault (acctSchema, optionalNull);
	}   //  getDefault

	/**
	 *  Factory: default combination
	 *  @param acctSchema accounting schema
	 * 	@param optionalNull if true, the optional values are null
	 *  @return Account
	 */
	public static MAccount getDefault (MAcctSchema acctSchema, boolean optionalNull)
	{
		MAccount vc = new MAccount(acctSchema);
		//  Active Elements
		MAcctSchemaElement[] elements = acctSchema.getAcctSchemaElements();
		for (int i = 0; i < elements.length; i++)
		{
			MAcctSchemaElement ase = elements[i];
			String elementType = ase.getElementType();
			int defaultValue = ase.getDefaultValue();
			boolean setValue = ase.isMandatory() || (!ase.isMandatory() && !optionalNull);
			//
			if (elementType.equals(MAcctSchemaElement.ELEMENTTYPE_Organization))
				vc.setAD_Org_ID(defaultValue);
			else if (elementType.equals(MAcctSchemaElement.ELEMENTTYPE_Account))
				vc.setAccount_ID(defaultValue);
			else if (elementType.equals(MAcctSchemaElement.ELEMENTTYPE_SubAccount) && setValue)
				vc.setC_SubAcct_ID(defaultValue);
			else if (elementType.equals(MAcctSchemaElement.ELEMENTTYPE_BPartner) && setValue)
				vc.setC_BPartner_ID(defaultValue);
			else if (elementType.equals(MAcctSchemaElement.ELEMENTTYPE_Product) && setValue)
				vc.setM_Product_ID(defaultValue);
			else if (elementType.equals(MAcctSchemaElement.ELEMENTTYPE_Activity) && setValue)
				vc.setC_Activity_ID(defaultValue);
			else if (elementType.equals(MAcctSchemaElement.ELEMENTTYPE_LocationFrom) && setValue)
				vc.setC_LocFrom_ID(defaultValue);
			else if (elementType.equals(MAcctSchemaElement.ELEMENTTYPE_LocationTo) && setValue)
				vc.setC_LocTo_ID(defaultValue);
			else if (elementType.equals(MAcctSchemaElement.ELEMENTTYPE_Campaign) && setValue)
				vc.setC_Campaign_ID(defaultValue);
			else if (elementType.equals(MAcctSchemaElement.ELEMENTTYPE_OrgTrx) && setValue)
				vc.setAD_OrgTrx_ID(defaultValue);
			else if (elementType.equals(MAcctSchemaElement.ELEMENTTYPE_Project) && setValue)
				vc.setC_Project_ID(defaultValue);
			else if (elementType.equals(MAcctSchemaElement.ELEMENTTYPE_SalesRegion) && setValue)
				vc.setC_SalesRegion_ID(defaultValue);
			else if (elementType.equals(MAcctSchemaElement.ELEMENTTYPE_UserList1) && setValue)
				vc.setUser1_ID(defaultValue);
			else if (elementType.equals(MAcctSchemaElement.ELEMENTTYPE_UserList2) && setValue)
				vc.setUser2_ID(defaultValue);
			else if (elementType.equals(MAcctSchemaElement.ELEMENTTYPE_UserElement1) && setValue)
				vc.setUserElement1_ID(defaultValue);
			else if (elementType.equals(MAcctSchemaElement.ELEMENTTYPE_UserElement2) && setValue)
				vc.setUserElement2_ID(defaultValue);
		}
		s_log.fine("Client_ID="
			+ vc.getAD_Client_ID() + ", Org_ID=" + vc.getAD_Org_ID()
			+ " - AcctSchema_ID=" + vc.getC_AcctSchema_ID() + ", Account_ID=" + vc.getAccount_ID());
		return vc;
	}   //  getDefault

	
	/**
	 *  Get Account
	 *  @param C_ValidCombination_ID combination
	 *  @return Account
	 */
	public static MAccount get (Properties ctx, int C_ValidCombination_ID)
	{
		//	Maybe later cache
		return new MAccount(ctx, C_ValidCombination_ID, null);
	}   //  getAccount

	/**
	 * 	Update Value/Description after change of 
	 * 	account element value/description.
	 *	@param ctx context
	 *	@param where where clause
	 */
	public static void updateValueDescription (Properties ctx, String where, String trxName)
	{
		String sql = "SELECT * FROM C_ValidCombination";
		if (where != null && where.length() > 0)
			sql += " WHERE " + where;
		sql += " ORDER BY C_ValidCombination_ID";
		int count = 0;
		int errors = 0;
		PreparedStatement pstmt = null;
		try
		{
			pstmt = DB.prepareStatement (sql, trxName);
			ResultSet rs = pstmt.executeQuery ();
			while (rs.next ())
			{
				MAccount account = new MAccount (ctx, rs, trxName);
				account.setValueDescription();
				if (account.save())
					count++;
				else
					errors++;
			}
			rs.close ();
			pstmt.close ();
			pstmt = null;
		}
		catch (Exception e)
		{
			s_log.log(Level.SEVERE, sql, e);
		}
		try
		{
			if (pstmt != null)
				pstmt.close ();
			pstmt = null;
		}
		catch (Exception e)
		{
			pstmt = null;
		}
		s_log.info(where + " #" + count + ", Errors=" + errors);
	}	//	updateValueDescription
	
	/**	Logger						*/
	private static CLogger		s_log = CLogger.getCLogger (MAccount.class);


	
	/**************************************************************************
	 *  Default constructor
	 * 	@param ctx context
	 *  @param C_ValidCombination_ID combination
	 */
	public MAccount (Properties ctx, int C_ValidCombination_ID, String trxName)
	{
		super (ctx, C_ValidCombination_ID, trxName);
		if (C_ValidCombination_ID == 0)
		{
		//	setAccount_ID (0);
		//	setC_AcctSchema_ID (0);
			setIsFullyQualified (false);
		}
	}   //  MAccount

	/**
	 *  Load constructor
	 * 	@param ctx context
	 *  @param rs result set
	 */
	public MAccount (Properties ctx, ResultSet rs, String trxName)
	{
		super(ctx, rs, trxName);
	}   //  MAccount

	/**

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -