From 1fb15740803a2b67e1791b6fbec21e7dfd950044 Mon Sep 17 00:00:00 2001 From: phib Date: Wed, 3 Dec 2008 23:59:07 +0000 Subject: [PATCH] FR [ 1840016 ] Avoid usage of clearing accounts Support for avoiding PPV and PPV Offset use https://sourceforge.net/tracker/?func=detail&group_id=176962&atid=879335&aid=1840016 --- base/src/org/compiere/acct/Doc_MatchPO.java | 45 +++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/base/src/org/compiere/acct/Doc_MatchPO.java b/base/src/org/compiere/acct/Doc_MatchPO.java index e8af65dcab..9c69f7ab53 100644 --- a/base/src/org/compiere/acct/Doc_MatchPO.java +++ b/base/src/org/compiere/acct/Doc_MatchPO.java @@ -50,7 +50,9 @@ public class Doc_MatchPO extends Doc private MOrderLine m_oLine = null; // private int m_M_InOutLine_ID = 0; + private MInOutLine m_ioLine = null; private int m_C_InvoiceLine_ID = 0; + private ProductCost m_pc; private int m_M_AttributeSetInstance_ID = 0; @@ -71,7 +73,10 @@ public class Doc_MatchPO extends Doc m_oLine = new MOrderLine (getCtx(), m_C_OrderLine_ID, getTrxName()); // m_M_InOutLine_ID = matchPO.getM_InOutLine_ID(); + m_ioLine = new MInOutLine (getCtx(), m_M_InOutLine_ID, null); + m_C_InvoiceLine_ID = matchPO.getC_InvoiceLine_ID(); + // m_pc = new ProductCost (Env.getCtx(), getM_Product_ID(), m_M_AttributeSetInstance_ID, getTrxName()); @@ -116,6 +121,7 @@ public class Doc_MatchPO extends Doc // create Fact Header Fact fact = new Fact(this, as, Fact.POST_Actual); setC_Currency_ID(as.getC_Currency_ID()); + boolean isInterOrg = isInterOrg(as); // Purchase Order Line BigDecimal poCost = m_oLine.getPriceCost(); @@ -206,6 +212,26 @@ public class Doc_MatchPO extends Doc dr.setUser2_ID(m_oLine.getUser2_ID()); } + // Avoid usage of clearing accounts + // If both accounts Purchase Price Variance and Purchase Price Variance Offset are equal + // then remove the posting + + MAccount acct_db = dr.getAccount(); // PPV + MAccount acct_cr = cr.getAccount(); // PPV Offset + + if ((!as.isPostIfClearingEqual()) && acct_db.equals(acct_cr) && (!isInterOrg)) { + + BigDecimal debit = dr.getAmtSourceDr(); + BigDecimal credit = cr.getAmtSourceCr(); + + if (debit.compareTo(credit) == 0) { + fact.remove(dr); + fact.remove(cr); + } + + } + // End Avoid usage of clearing accounts + // facts.add(fact); return facts; @@ -215,6 +241,25 @@ public class Doc_MatchPO extends Doc return facts; } } // createFact + + /** Verify if the posting involves two or more organizations + @return true if there are more than one org involved on the posting + */ + private boolean isInterOrg(MAcctSchema as) { + MAcctSchemaElement elementorg = as.getAcctSchemaElement(MAcctSchemaElement.ELEMENTTYPE_Organization); + if (elementorg == null || !elementorg.isBalanced()) { + // no org element or not need to be balanced + return false; + } + + // verify if org of receipt line is different from org of order line + // ignoring invoice line org as not used in posting + if (m_ioLine != null && m_oLine != null + && m_ioLine.getAD_Org_ID() != m_oLine.getAD_Org_ID()) + return true; + + return false; + } /** * Update Product Info (old).