/****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * * 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. * * For the text or an alternative of this public license, you may reach us * * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * * or via info@compiere.org or http://www.compiere.org/license.html * *****************************************************************************/ package org.compiere.acct; import java.math.BigDecimal; import java.sql.ResultSet; import java.util.ArrayList; import java.util.logging.Level; import org.compiere.model.MAccount; import org.compiere.model.MAcctSchema; import org.compiere.model.MJournal; import org.compiere.model.MJournalLine; import org.compiere.util.Env; /** * Post GL Journal Documents. *
 *  Table:              GL_Journal (224)
 *  Document Types:     GLJ
 *  
* @author Jorg Janke * @version $Id: Doc_GLJournal.java,v 1.3 2006/07/30 00:53:33 jjanke Exp $ */ public class Doc_GLJournal extends Doc { /** * Constructor * @param as accounting schema * @param rs record * @param trxName trx */ public Doc_GLJournal (MAcctSchema as, ResultSet rs, String trxName) { super(as, MJournal.class, rs, null, trxName); } // Doc_GL_Journal /** Posting Type */ protected String m_PostingType = null; protected int m_C_AcctSchema_ID = 0; /** * Load Specific Document Details * @return error message or null */ @Override protected String loadDocumentDetails () { MJournal journal = (MJournal)getPO(); m_PostingType = journal.getPostingType(); m_C_AcctSchema_ID = journal.getC_AcctSchema_ID(); // Contained Objects p_lines = loadLines(journal); if (log.isLoggable(Level.FINE)) log.fine("Lines=" + p_lines.length); return null; } // loadDocumentDetails /** * Load GL journal lines * @param journal journal * @return DocLine Array */ protected DocLine[] loadLines(MJournal journal) { ArrayList list = new ArrayList(); MJournalLine[] lines = journal.getLines(false); for (int i = 0; i < lines.length; i++) { MJournalLine line = lines[i]; DocLine docLine = new DocLine (line, this); // -- Quantity docLine.setQty(line.getQty(), false); // -- Source Amounts docLine.setAmount (line.getAmtSourceDr(), line.getAmtSourceCr()); // -- Converted Amounts docLine.setConvertedAmt (m_C_AcctSchema_ID, line.getAmtAcctDr(), line.getAmtAcctCr()); // -- Account MAccount account = line.getAccount_Combi(); docLine.setAccount (account); // -- Organization of Line was set to Org of Account list.add(docLine); if (docLine.getC_Currency_ID() != getC_Currency_ID()) setIsMultiCurrency(true); } // Return Array int size = list.size(); DocLine[] dls = new DocLine[size]; list.toArray(dls); return dls; } // loadLines /** * Get Source Currency Balance - subtracts line and tax amounts from total - no rounding * @return positive amount, if total invoice is bigger than lines */ @Override public BigDecimal getBalance() { BigDecimal retValue = Env.ZERO; StringBuilder sb = new StringBuilder (" ["); // Lines for (int i = 0; i < p_lines.length; i++) { retValue = retValue.add(p_lines[i].getAmtSource()); sb.append("+").append(p_lines[i].getAmtSource()); } sb.append("]"); // if (log.isLoggable(Level.FINE)) log.fine(toString() + " Balance=" + retValue + sb.toString()); return retValue; } // getBalance /** * Create Facts (the accounting logic) for * GLJ. * (only for the accounting scheme, it was created) *
	 *      account     DR          CR
	 *  
* @param as acct schema * @return Fact */ @Override public ArrayList createFacts (MAcctSchema as) { ArrayList facts = new ArrayList(); // Other Acct Schema if (as.getC_AcctSchema_ID() != m_C_AcctSchema_ID) return facts; // create Fact Header Fact fact = new Fact (this, as, m_PostingType); // GLJ if (getDocumentType().equals(DOCTYPE_GLJournal)) { // account DR CR for (int i = 0; i < p_lines.length; i++) { if (p_lines[i].getC_AcctSchema_ID () == as.getC_AcctSchema_ID ()) { @SuppressWarnings("unused") FactLine line = fact.createLine (p_lines[i], p_lines[i].getAccount (), p_lines[i].getC_Currency_ID(), p_lines[i].getAmtSourceDr (), p_lines[i].getAmtSourceCr ()); } } // for all lines } else { p_Error = "DocumentType unknown: " + getDocumentType(); log.log(Level.SEVERE, p_Error); fact = null; } // facts.add(fact); return facts; } // createFact } // Doc_GLJournal