www.pudn.com > code_source_compiere_erp_crm_logiciel_java.zip > Account.java


/****************************************************************************** 
 * 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  Business Solution 
 * The Initial Developer of the Original Code is Jorg Janke  and ComPiere, Inc. 
 * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts 
 * created by ComPiere are Copyright (C) ComPiere, Inc.;   All Rights Reserved. 
 * Contributor(s): ______________________________________. 
 *****************************************************************************/ 
package org.compiere.model; 
 
import java.sql.*; 
import java.util.*; 
 
import org.compiere.util.*; 
import java.io.*; 
 
/** 
 *  Account Object Entity to maintain all segment values 
 * 
 *  @author		Jorg Janke 
 *  @version 	$Id: Account.java,v 1.8 2003/04/15 05:03:15 jjanke Exp $ 
 */ 
public final class Account implements Serializable 
{ 
	/** 
	 *  Basic constructor 
	 */ 
	public Account() 
	{ 
	}   //  Account 
 
	/** 
	 *  Default constructor 
	 *  @param C_ValidCombination_ID combination 
	 */ 
	public Account (int C_ValidCombination_ID) 
	{ 
		if (C_ValidCombination_ID == 0) 
			return; 
		load(C_ValidCombination_ID); 
	}   //  Account 
 
 
	/** database field              */ 
	private int C_ValidCombination_ID = 0; 
	/** database field              */ 
	private int C_AcctSchema_ID = 0; 
	// 
	/** database field              */ 
	private int AD_Client_ID = 0; 
	/** database field              */ 
	private int AD_Org_ID = 0; 
	/** database field              */ 
	private int Account_ID = 0; 
	/** database field              */ 
	private int M_Product_ID = 0; 
	/** database field              */ 
	private int C_BPartner_ID = 0; 
	/** database field              */ 
	private int AD_OrgTrx_ID = 0; 
	/** database field              */ 
	private int C_LocFrom_ID = 0; 
	/** database field              */ 
	private int C_LocTo_ID = 0; 
	/** database field              */ 
	private int C_SalesRegion_ID = 0; 
	/** database field              */ 
	private int C_Project_ID = 0; 
	/** database field              */ 
	private int C_Channel_ID = 0; 
	/** database field              */ 
	private int C_Campaign_ID = 0; 
	/** database field              */ 
	private int C_Activity_ID = 0; 
	/** database field              */ 
	private int User1_ID = 0; 
	/** database field              */ 
	private int User2_ID = 0; 
	// 
	private String alias = ""; 
	private String combination = ""; 
	private String description = ""; 
	private boolean active = true; 
	private int updatedBy = 0; 
	private boolean fullyQualified = false; 
 
 
	/** Account Type - Asset,..     */ 
	private char        m_AcctType = ' '; 
	/** Account definition valid?   */ 
	private Boolean     m_IsValid = null; 
	/** Previous checked account    */ 
	private int         m_OldAccount_ID = 0; 
 
	/** Has the current Account been changed    */ 
	private boolean     m_changed = true; 
 
 
	/** 
	 * Load Account with Combination_ID 
	 * @param C_ValidCombination_ID combination 
	 */ 
	public void load (int C_ValidCombination_ID) 
	{ 
		String sql = "SELECT AD_CLIENT_ID,AD_ORG_ID, ISACTIVE, UPDATED,UPDATEDBY,"  //  1..5 
			+ "ALIAS, COMBINATION, DESCRIPTION, ISFULLYQUALIFIED,"                  //  1..9 
			+ "C_ACCTSCHEMA_ID, ACCOUNT_ID, M_PRODUCT_ID, C_BPARTNER_ID,"           //  10..13 
			+ "AD_ORGTRX_ID, C_LOCFROM_ID, C_LOCTO_ID, C_SALESREGION_ID,"           //  14..17 
			+ "C_PROJECT_ID, C_CAMPAIGN_ID, C_ACTIVITY_ID, USER1_ID,USER2_ID "      //  18..22 
			+ "FROM C_ValidCombination " 
			+ "WHERE C_ValidCombination_ID=?"; 
		try 
		{ 
			PreparedStatement pstmt = DB.prepareStatement(sql); 
			pstmt.setInt(1, C_ValidCombination_ID); 
			ResultSet rs = pstmt.executeQuery(); 
			if (rs.next()) 
			{ 
				//	Minimum values 
				setAD_Client_ID(rs.getInt(1)); 
				setAD_Org_ID(rs.getInt(2)); 
				setActive(rs.getString(3).equals("Y")); 
				//  Updated 
				setUpdatedBy(rs.getInt(5)); 
				// 
				setAlias(rs.getString(6)); 
				setCombination(rs.getString(7)); 
				setDescription(rs.getString(8)); 
				setFullyQualified(rs.getString(9).equals("Y")); 
				// 
				setC_AcctSchema_ID(rs.getInt(10)); 
				setAccount_ID(rs.getInt(11)); 
				setM_Product_ID(rs.getInt(12)); 
				setC_BPartner_ID(rs.getInt(13)); 
				// 
				setAD_OrgTrx_ID(rs.getInt(14)); 
				setC_LocFrom_ID(rs.getInt(15)); 
				setC_LocTo_ID(rs.getInt(16)); 
				setC_SalesRegion_ID(rs.getInt(17)); 
				// 
				setC_Project_ID(rs.getInt(18)); 
				setC_Campaign_ID(rs.getInt(19)); 
				setC_Activity_ID(rs.getInt(20)); 
				setUser1_ID(rs.getInt(21)); 
				setUser2_ID(rs.getInt(22)); 
				// 
				setC_ValidCombination_ID(C_ValidCombination_ID); 
				m_changed = false; 
			} 
			else 
				Log.error("Account.getAccount - " + C_ValidCombination_ID + " not found"); 
			rs.close(); 
			pstmt.close(); 
		} 
		catch (SQLException e) 
		{ 
			C_ValidCombination_ID = 0; 
			Log.error ("Account.load", e); 
		} 
	}	//	load 
 
	/** 
	 *  Factory: default combination 
	 *  @param C_AcctSchema_ID accounting schema 
	 *  @return Account 
	 */ 
	public static Account getDefault (int C_AcctSchema_ID) 
	{ 
		AcctSchema acctSchema = new AcctSchema(C_AcctSchema_ID); 
		return getDefault(acctSchema); 
	}   //  getDefault 
 
	/** 
	 *  Factory: default combination 
	 *  @param acctSchema accounting schema 
	 *  @return Account 
	 */ 
	public static Account getDefault (AcctSchema acctSchema) 
	{ 
		Account vc = new Account(); 
		vc.setC_AcctSchema_ID(acctSchema.getC_AcctSchema_ID()); 
		//  Active Elements 
		ArrayList list = acctSchema.getAcctSchemaElementList(); 
		for (int i = 0; i < list.size(); i++) 
		{ 
			AcctSchemaElement ase = (AcctSchemaElement)list.get(i); 
			String segmentType = ase.getSegmentType(); 
			int defaultValue = ase.getDefaultValue(); 
			// 
			if (segmentType.equals(AcctSchemaElement.SEGMENT_Org)) 
				vc.setAD_Org_ID(defaultValue); 
			else if (segmentType.equals(AcctSchemaElement.SEGMENT_Account)) 
				vc.setAccount_ID(defaultValue); 
			else if (segmentType.equals(AcctSchemaElement.SEGMENT_BPartner)) 
				vc.setC_BPartner_ID(defaultValue); 
			else if (segmentType.equals(AcctSchemaElement.SEGMENT_Product)) 
				vc.setM_Product_ID(defaultValue); 
			else if (segmentType.equals(AcctSchemaElement.SEGMENT_Activity)) 
				vc.setC_Activity_ID(defaultValue); 
			else if (segmentType.equals(AcctSchemaElement.SEGMENT_LocationFrom)) 
				vc.setC_LocFrom_ID(defaultValue); 
			else if (segmentType.equals(AcctSchemaElement.SEGMENT_LocationTo)) 
				vc.setC_LocTo_ID(defaultValue); 
			else if (segmentType.equals(AcctSchemaElement.SEGMENT_Campaign)) 
				vc.setC_Campaign_ID(defaultValue); 
			else if (segmentType.equals(AcctSchemaElement.SEGMENT_TrxOrg)) 
				vc.setAD_OrgTrx_ID(defaultValue); 
			else if (segmentType.equals(AcctSchemaElement.SEGMENT_Project)) 
				vc.setC_Project_ID(defaultValue); 
			else if (segmentType.equals(AcctSchemaElement.SEGMENT_SalesRegion)) 
				vc.setC_SalesRegion_ID(defaultValue); 
			else if (segmentType.equals(AcctSchemaElement.SEGMENT_User1)) 
				vc.setUser1_ID(defaultValue); 
			else if (segmentType.equals(AcctSchemaElement.SEGMENT_User2)) 
				vc.setUser2_ID(defaultValue); 
		} 
		Log.trace(Log.l3_Util, "Account.getDefault - 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 
 
	/** 
	 *  Factory: get Account 
	 *  @param C_ValidCombination_ID combination 
	 *  @return Account 
	 */ 
	public static Account getAccount (int C_ValidCombination_ID) 
	{ 
		return new Account(C_ValidCombination_ID); 
	}   //  getAccount 
 
	/** 
	 *  Save 
	 *  @param AD_Client_ID new client 
	 *  @param UpdatedBy updated 
	 *  @return true if saved 
	 */ 
	public boolean save (int AD_Client_ID, int UpdatedBy) 
	{ 
		setAD_Client_ID(AD_Client_ID); 
		setUpdatedBy(UpdatedBy); 
		return save(); 
	}   //  save 
 
	/** 
	 *  Save and reload 
	 *  @return true if saved 
	 */ 
	public boolean save() 
	{ 
		Log.trace(Log.l4_Data, "Account.save - Client_ID=" 
			+ AD_Client_ID + ", Org_ID=" + AD_Org_ID, 
			"AcctSchema_ID=" + C_AcctSchema_ID + ", Account_ID=" + Account_ID); 
 
		int C_ValidCombination_ID = 0; 
		boolean saved = false; 
		try 
		{ 
			String SQL = "{CALL C_ValidCombination_Get(?,?,?,?,?, ?,?,?,?,?, ?,?,?,?,?, ?,?,?,?,?)}"; 
			CallableStatement cstmt = DB.prepareCall(SQL); 
			//  1 - ID 
			cstmt.registerOutParameter(1, Types.NUMERIC); 
 
			//  --  Mandatory Accounting fields 
			//	2 - AD_Client_ID 
			cstmt.setInt(2, AD_Client_ID); 
			//	3 - AD_Org_ID 
			cstmt.setInt(3, AD_Org_ID); 
			//  4- C_AcctSchema_ID 
			cstmt.setInt(4, C_AcctSchema_ID); 
			//  5 - Account_ID 
			cstmt.setInt(5, Account_ID); 
 
			//  --  Optional 
			//  6 - Base C_ValidCombination_ID 
			cstmt.setNull(6, Types.NUMERIC); 
			//  7 - MustBeFullyQualified 
			cstmt.setString(7, "Y"); 
			//  8 - Alias 
			if (alias != null && alias.length() > 0) 
				cstmt.setString(8, alias); 
			else 
				cstmt.setNull(8, Types.VARCHAR); 
			//  9 - CreatedBy 
			cstmt.setInt(9, getUpdatedBy()); 
 
			//	--  Optional Accounting fields 
			//  10 - M_Product_ID 
			if (M_Product_ID != 0) 
				cstmt.setInt(10, M_Product_ID); 
			else 
				cstmt.setNull(10, Types.NUMERIC); 
			//  11 - C_BPartner_ID 
			if (C_BPartner_ID != 0) 
				cstmt.setInt(11, C_BPartner_ID); 
			else 
				cstmt.setNull(11, Types.NUMERIC); 
			//  12 - AD_OrgTrx_ID 
			if (AD_OrgTrx_ID != 0) 
				cstmt.setInt(12, AD_OrgTrx_ID); 
			else 
				cstmt.setNull(12, Types.NUMERIC); 
			//  13 - C_LocFrom_ID 
			if (C_LocFrom_ID != 0) 
				cstmt.setInt(13, C_LocFrom_ID); 
			else 
				cstmt.setNull(13, Types.NUMERIC); 
			//  14 - C_LocTo_ID 
			if (C_LocTo_ID != 0) 
				cstmt.setInt(14, C_LocTo_ID); 
			else 
				cstmt.setNull(14, Types.NUMERIC); 
			//  15 - C_SalesRegion_ID 
			if (C_SalesRegion_ID != 0) 
				cstmt.setInt(15, C_SalesRegion_ID); 
			else 
				cstmt.setNull(15, Types.NUMERIC); 
			//  16 - C_Project_ID 
			if (C_Project_ID != 0) 
				cstmt.setInt(16, C_Project_ID); 
			else 
				cstmt.setNull(16, Types.NUMERIC); 
			//  17 - C_Campaign_ID 
			if (C_Campaign_ID != 0) 
				cstmt.setInt(17, C_Campaign_ID); 
			else 
				cstmt.setNull(17, Types.NUMERIC); 
			//  18 - C_Activity_ID 
			if (C_Activity_ID != 0) 
				cstmt.setInt(18, C_Activity_ID); 
			else 
				cstmt.setNull(18, Types.NUMERIC); 
			//  19 - User1_ID 
			if (User1_ID != 0) 
				cstmt.setInt(19, User1_ID); 
			else 
				cstmt.setNull(19, Types.NUMERIC); 
			//  20 - User2_ID 
			if (User2_ID != 0) 
				cstmt.setInt(20, User2_ID); 
			else 
				cstmt.setNull(20, Types.NUMERIC); 
 
			// 
			cstmt.executeUpdate(); 
			C_ValidCombination_ID = cstmt.getInt(1);     //  1 - ID 
			cstmt.close(); 
			m_changed = true; 
			saved = true; 
		} 
		catch(SQLException e) 
		{ 
			Log.error("Account.save", e); 
			m_changed = false; 
		} 
 
		// 
		load(C_ValidCombination_ID); 
		return saved; 
	}   //  save 
 
	/*************************************************************************/ 
 
	/** 
	 * Return String representation 
	 * @return String 
	 */ 
	public String toString() 
	{ 
		StringBuffer sb = new StringBuffer("Account=["); 
		sb.append(C_ValidCombination_ID) 
			.append(",Client=").append(AD_Client_ID) 
			.append(",Org=").append(AD_Org_ID) 
			.append(",Acct=").append(Account_ID); 
	//	sb.append(",U1=").append(User1_ID); 
		sb.append("]"); 
		return sb.toString(); 
	}	//	toString 
 
	/** 
	 * Is this a Balance Sheet Account 
	 * @return boolean 
	 */ 
	public boolean isBalanceSheet() 
	{ 
		return (m_AcctType == 'A' || m_AcctType == 'L' || m_AcctType == 'O'); 
	}	//	isBalanceSheet 
 
	/** 
	 * Is this an Activa Account 
	 * @return boolean 
	 */ 
	public boolean isActiva() 
	{ 
		return m_AcctType == 'A'; 
	}	//	isActive 
 
	/** 
	 * Is this a Passiva Account 
	 * @return boolean 
	 */ 
	public boolean isPassiva() 
	{ 
		return m_AcctType == 'L' || m_AcctType == 'O'; 
	}	//	isPassiva 
 
 
	/*************************************************************************/ 
 
	/** 
	 * Check Account Validity. 
	 * 
	 * Reads information from C_ElementValue 
	 * - Set Account Type - A,L,O,E,R 
	 * - Set Post... 
	 * - Set Is ForeignCurrenvy 
	 * @return boolean 
	 */ 
	public boolean isValid() 
	{ 
		if (m_OldAccount_ID == Account_ID && m_IsValid != null) 
			return m_IsValid.booleanValue(); 
		m_OldAccount_ID = Account_ID; 
 
		String sql = "SELECT AccountType,PostActual,PostBudget,PostEncumbrance,PostStatistical,IsForeignCurrency,C_Currency_ID " 
			+ "FROM C_ElementValue " 
			+ "WHERE C_ElementValue_ID=? AND IsActive='Y' AND IsSummary='N'"; 
		String	str = null; 
		try 
		{ 
			PreparedStatement pstmt = DB.prepareStatement(sql); 
			pstmt.setInt(1, Account_ID); 
			ResultSet rs = pstmt.executeQuery(); 
			if (rs.next()) 
				str = rs.getString(1); 
			rs.close(); 
			pstmt.close(); 
		} 
		catch (SQLException e) 
		{ 
			Log.error ("Account.getAccountType", e); 
		} 
		catch (Exception e2) 
		{ 
			Log.error("Account.getAccountType", e2); 
		} 
		if (str == null || str.length() == 0) 
		{ 
			Log.error("Account.getAccountType - Type not found"); 
			m_IsValid = new Boolean (false); 
			m_AcctType = '?'; 
		} 
		else 
		{ 
			m_IsValid = new Boolean (true); 
			m_AcctType = str.charAt(0); 
		} 
		return m_IsValid.booleanValue(); 
	}	//	isValid 
 
	/*************************************************************************/ 
 
	/** 
	 *  Get VC 
	 *  @param newC_ValidCombination_ID combination 
	 */ 
	public void setC_ValidCombination_ID(int newC_ValidCombination_ID) 
	{ 
		C_ValidCombination_ID = newC_ValidCombination_ID; 
		m_changed = true; 
	} 
	public int getC_ValidCombination_ID() 
	{ 
		return C_ValidCombination_ID; 
	} 
	public void setAD_Client_ID(int newAD_Client_ID) 
	{ 
		AD_Client_ID = newAD_Client_ID; 
		m_changed = true; 
	} 
	public int getAD_Client_ID() 
	{ 
		return AD_Client_ID; 
	} 
	public void setAD_Org_ID(int newAD_Org_ID) 
	{ 
		AD_Org_ID = newAD_Org_ID; 
		m_changed = true; 
	} 
	public int getAD_Org_ID() 
	{ 
		return AD_Org_ID; 
	} 
	public void setActive(boolean newActive) 
	{ 
		active = newActive; 
		m_changed = true; 
	} 
	public boolean isActive() 
	{ 
		return active; 
	} 
	public void setUpdatedBy(int newUpdatedBy) 
	{ 
		updatedBy = newUpdatedBy; 
		m_changed = true; 
	} 
	public int getUpdatedBy() 
	{ 
		return updatedBy; 
	} 
	public void setAlias(String newAlias) 
	{ 
		alias = newAlias; 
		m_changed = true; 
	} 
	public String getAlias() 
	{ 
		return alias; 
	} 
	public void setCombination(String newCombination) 
	{ 
		combination = newCombination; 
		m_changed = true; 
	} 
	public String getCombination() 
	{ 
		return combination; 
	} 
	public void setDescription(String newDescription) 
	{ 
		description = newDescription; 
		m_changed = true; 
	} 
	public String getDescription() 
	{ 
		return description; 
	} 
	public void setFullyQualified(boolean newFullyQualified) 
	{ 
		fullyQualified = newFullyQualified; 
		m_changed = true; 
	} 
	public boolean isFullyQualified() 
	{ 
		return fullyQualified; 
	} 
	public void setC_AcctSchema_ID(int newC_AcctSchema_ID) 
	{ 
		C_AcctSchema_ID = newC_AcctSchema_ID; 
		m_changed = true; 
	} 
	public int getC_AcctSchema_ID() 
	{ 
		return C_AcctSchema_ID; 
	} 
	public void setAccount_ID(int newAccount_ID) 
	{ 
		Account_ID = newAccount_ID; 
		m_changed = true; 
	} 
	public int getAccount_ID() 
	{ 
		return Account_ID; 
	} 
	public void setM_Product_ID(int newM_Product_ID) 
	{ 
		M_Product_ID = newM_Product_ID; 
		m_changed = true; 
	} 
	public int getM_Product_ID() 
	{ 
		return M_Product_ID; 
	} 
	public void setC_BPartner_ID(int newC_BPartner_ID) 
	{ 
		C_BPartner_ID = newC_BPartner_ID; 
		m_changed = true; 
	} 
	public int getC_BPartner_ID() 
	{ 
		return C_BPartner_ID; 
	} 
	public void setAD_OrgTrx_ID(int newAD_OrgTrx_ID) 
	{ 
		AD_OrgTrx_ID = newAD_OrgTrx_ID; 
		m_changed = true; 
	} 
	public int getAD_OrgTrx_ID() 
	{ 
		return AD_OrgTrx_ID; 
	} 
	public void setC_LocFrom_ID(int newC_LocFrom_ID) 
	{ 
		C_LocFrom_ID = newC_LocFrom_ID; 
		m_changed = true; 
	} 
	public int getC_LocFrom_ID() 
	{ 
		return C_LocFrom_ID; 
	} 
	public void setC_LocTo_ID(int newC_LocTo_ID) 
	{ 
		C_LocTo_ID = newC_LocTo_ID; 
		m_changed = true; 
	} 
	public int getC_LocTo_ID() 
	{ 
		return C_LocTo_ID; 
	} 
	public void setC_SalesRegion_ID(int newC_SalesRegion_ID) 
	{ 
		C_SalesRegion_ID = newC_SalesRegion_ID; 
		m_changed = true; 
	} 
	public int getC_SalesRegion_ID() 
	{ 
		return C_SalesRegion_ID; 
	} 
	public void setC_Project_ID(int newC_Project_ID) 
	{ 
		C_Project_ID = newC_Project_ID; 
		m_changed = true; 
	} 
	public int getC_Project_ID() 
	{ 
		return C_Project_ID; 
	} 
	public void setC_Campaign_ID(int newC_Campaign_ID) 
	{ 
		C_Campaign_ID = newC_Campaign_ID; 
		m_changed = true; 
	} 
	public int getC_Campaign_ID() 
	{ 
		return C_Campaign_ID; 
	} 
	public void setC_Activity_ID(int newC_Activity_ID) 
	{ 
		C_Activity_ID = newC_Activity_ID; 
		m_changed = true; 
	} 
	public int getC_Activity_ID() 
	{ 
		return C_Activity_ID; 
	} 
	public void setUser1_ID(int newUser1_ID) 
	{ 
		User1_ID = newUser1_ID; 
		m_changed = true; 
	} 
	public int getUser1_ID() 
	{ 
		return User1_ID; 
	} 
	public void setUser2_ID(int newUser2_ID) 
	{ 
		User2_ID = newUser2_ID; 
		m_changed = true; 
	} 
	public int getUser2_ID() 
	{ 
		return User2_ID; 
	} 
	public boolean isChanged() 
	{ 
		return m_changed; 
	} 
	private void writeObject(ObjectOutputStream oos) throws IOException 
	{ 
		oos.defaultWriteObject(); 
	} 
	private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException 
	{ 
		ois.defaultReadObject(); 
	} 
}	//	Account