();
+ return facts;
+ }
}
\ No newline at end of file
diff --git a/andromeida.midsuit.project/src/balinusa/midsuit/doc/MID_DocMatchInv.java b/balinusa.midsuit.project/src/balinusa/midsuit/doc/MID_DocMatchInv.java
similarity index 97%
rename from andromeida.midsuit.project/src/balinusa/midsuit/doc/MID_DocMatchInv.java
rename to balinusa.midsuit.project/src/balinusa/midsuit/doc/MID_DocMatchInv.java
index 45eec34..4b801d1 100644
--- a/andromeida.midsuit.project/src/balinusa/midsuit/doc/MID_DocMatchInv.java
+++ b/balinusa.midsuit.project/src/balinusa/midsuit/doc/MID_DocMatchInv.java
@@ -1,587 +1,587 @@
-/******************************************************************************
- * 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 andromedia.midsuit.doc;
-
-import java.math.BigDecimal;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Savepoint;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.logging.Level;
-
-import org.adempiere.exceptions.AverageCostingZeroQtyException;
-import org.compiere.acct.Doc;
-import org.compiere.acct.Fact;
-import org.compiere.acct.FactLine;
-import org.compiere.model.I_C_Order;
-import org.compiere.model.I_C_OrderLine;
-import org.compiere.model.MAccount;
-import org.compiere.model.MAcctSchema;
-import org.compiere.model.MAcctSchemaElement;
-import org.compiere.model.MConversionRate;
-import org.compiere.model.MCostDetail;
-import org.compiere.model.MInOut;
-import org.compiere.model.MInOutLine;
-import org.compiere.model.MInvoice;
-import org.compiere.model.MInvoiceLine;
-import org.compiere.model.MMatchInv;
-import org.compiere.model.MOrderLandedCostAllocation;
-import org.compiere.model.ProductCost;
-import org.compiere.model.X_M_Cost;
-import org.compiere.util.Env;
-import org.compiere.util.Trx;
-
-/**
- * Post MatchInv Documents.
- *
- * Table: M_MatchInv (472)
- * Document Types: MXI
- *
- * Update Costing Records
- * @author Jorg Janke
- * @version $Id: Doc_MatchInv.java,v 1.3 2006/07/30 00:53:33 jjanke Exp $
- *
- * FR [ 1840016 ] Avoid usage of clearing accounts - subject to C_AcctSchema.IsPostIfClearingEqual
- * Avoid posting if both accounts Not Invoiced Receipts and Inventory Clearing are equal
- * BF [ 2789949 ] Multicurrency in matching posting
- */
-public class MID_DocMatchInv extends Doc
-{
- /**
- * Constructor
- * @param ass accounting schema
- * @param rs record
- * @param trxName trx
- */
- public MID_DocMatchInv (MAcctSchema as, ResultSet rs, String trxName)
- {
- super(as, MMatchInv.class, rs, DOCTYPE_MatMatchInv, trxName);
- } // Doc_MatchInv
-
- /** Invoice Line */
- private MInvoiceLine m_invoiceLine = null;
- /** Material Receipt */
- private MInOutLine m_receiptLine = null;
-
- private ProductCost m_pc = null;
- private MMatchInv m_matchInv;
-
- /** Commitments */
-// private DocLine[] m_commitments = null;
-
- /**
- * Load Specific Document Details
- * @return error message or null
- */
- protected String loadDocumentDetails ()
- {
- setC_Currency_ID (Doc.NO_CURRENCY);
- m_matchInv = (MMatchInv)getPO();
- setDateDoc(m_matchInv.getDateTrx());
- setQty (m_matchInv.getQty());
- // Invoice Info
- int C_InvoiceLine_ID = m_matchInv.getC_InvoiceLine_ID();
- m_invoiceLine = new MInvoiceLine (getCtx(), C_InvoiceLine_ID, getTrxName());
- // BP for NotInvoicedReceipts
- int C_BPartner_ID = m_invoiceLine.getParent().getC_BPartner_ID();
- setC_BPartner_ID(C_BPartner_ID);
- //
- int M_InOutLine_ID = m_matchInv.getM_InOutLine_ID();
- m_receiptLine = new MInOutLine (getCtx(), M_InOutLine_ID, getTrxName());
- //
- m_pc = new ProductCost (Env.getCtx(),
- getM_Product_ID(), m_matchInv.getM_AttributeSetInstance_ID(), getTrxName());
- m_pc.setQty(getQty());
-
- return null;
- } // loadDocumentDetails
-
-
- /**************************************************************************
- * Get Source Currency Balance - subtracts line and tax amounts from total - no rounding
- * @return Zero (always balanced)
- */
- public BigDecimal getBalance()
- {
- return Env.ZERO;
- } // getBalance
-
-
- /**
- * Create Facts (the accounting logic) for
- * MXI.
- * (single line)
- *
- * NotInvoicedReceipts DR (Receipt Org)
- * InventoryClearing CR
- * InvoicePV DR CR (difference)
- * Commitment
- * Expense CR
- * Offset DR
- *
- * @param as accounting schema
- * @return Fact
- */
- public ArrayList createFacts (MAcctSchema as)
- {
- ArrayList facts = new ArrayList();
- // Nothing to do
- if (getM_Product_ID() == 0 // no Product
- || getQty().signum() == 0
- || m_receiptLine.getMovementQty().signum() == 0) // Qty = 0
- {
- if (log.isLoggable(Level.FINE)) log.fine("No Product/Qty - M_Product_ID=" + getM_Product_ID()
- + ",Qty=" + getQty() + ",InOutQty=" + m_receiptLine.getMovementQty());
- return facts;
- }
-// MMatchInv matchInv = (MMatchInv)getPO();
-
- // create Fact Header
- Fact fact = new Fact(this, as, Fact.POST_Actual);
- setC_Currency_ID (as.getC_Currency_ID());
- boolean isInterOrg = isInterOrg(as);
-
- /** Needs to be handeled in PO Matching as no Receipt info
- if (m_pc.isService())
- {
- log.fine("Service - skipped");
- return fact;
- }
- **/
-
-
- // NotInvoicedReceipt DR
- // From Receipt
- BigDecimal multiplier = getQty()
- .divide(m_receiptLine.getMovementQty(), 12, BigDecimal.ROUND_HALF_UP)
- .abs();
- FactLine dr = fact.createLine (null,
- getAccount(Doc.ACCTTYPE_NotInvoicedReceipts, as),
- as.getC_Currency_ID(), Env.ONE, null); // updated below
- if (dr == null)
- {
- p_Error = "No Product Costs";
- return null;
- }
- dr.setQty(getQty());
- BigDecimal temp = dr.getAcctBalance();
- // Set AmtAcctCr/Dr from Receipt (sets also Project)
- //if (m_matchInv.getReversal_ID() > 0) //@win
- if (m_matchInv.getReversal_ID() > 0 && m_matchInv.getCreated().after(m_matchInv.getReversal().getCreated()))
- {
- if (!dr.updateReverseLine (MMatchInv.Table_ID, // Amt updated
- m_matchInv.getReversal_ID(), 0, BigDecimal.ONE))
- {
- p_Error = "Failed to create reversal entry";
- return null;
- }
- }
- else
- {
- BigDecimal effMultiplier = multiplier;
- if (getQty().signum() < 0)
- effMultiplier = effMultiplier.negate();
- if (!dr.updateReverseLine (MInOut.Table_ID, // Amt updated
- m_receiptLine.getM_InOut_ID(), m_receiptLine.getM_InOutLine_ID(),
- effMultiplier))
- {
- p_Error = "Mat.Receipt not posted yet";
- return null;
- }
- }
- if (log.isLoggable(Level.FINE)) log.fine("CR - Amt(" + temp + "->" + dr.getAcctBalance()
- + ") - " + dr.toString());
-
- // InventoryClearing CR
- // From Invoice
- MAccount expense = m_pc.getAccount(ProductCost.ACCTTYPE_P_InventoryClearing, as);
- if (m_pc.isService())
- expense = m_pc.getAccount(ProductCost.ACCTTYPE_P_Expense, as);
- BigDecimal LineNetAmt = m_invoiceLine.getLineNetAmt();
- multiplier = getQty()
- .divide(m_invoiceLine.getQtyInvoiced(), 12, BigDecimal.ROUND_HALF_UP)
- .abs();
- if (multiplier.compareTo(Env.ONE) != 0)
- LineNetAmt = LineNetAmt.multiply(multiplier);
- if (m_pc.isService())
- LineNetAmt = dr.getAcctBalance(); // book out exact receipt amt
- FactLine cr = null;
- if (as.isAccrual())
- {
- cr = fact.createLine (null, expense,
- as.getC_Currency_ID(), null, LineNetAmt); // updated below
- if (cr == null)
- {
- if (log.isLoggable(Level.FINE)) log.fine("Line Net Amt=0 - M_Product_ID=" + getM_Product_ID()
- + ",Qty=" + getQty() + ",InOutQty=" + m_receiptLine.getMovementQty());
-
- cr = fact.createLine (null, expense, as.getC_Currency_ID(), null, Env.ONE);
- cr.setAmtAcctCr(BigDecimal.ZERO);
- cr.setAmtSourceCr(BigDecimal.ZERO);
- }
- temp = cr.getAcctBalance();
- //if (m_matchInv.getReversal_ID() > 0)
- if (m_matchInv.getReversal_ID() > 0 && m_matchInv.getCreated().after(m_matchInv.getReversal().getCreated()))
- {
- if (!cr.updateReverseLine (MMatchInv.Table_ID, // Amt updated
- m_matchInv.getReversal_ID(), 0, BigDecimal.ONE))
- {
- p_Error = "Failed to create reversal entry";
- return null;
- }
- }
- else
- {
- cr.setQty(getQty().negate());
- BigDecimal effMultiplier = multiplier;
- if (getQty().signum() < 0)
- effMultiplier = effMultiplier.negate();
-
- // Set AmtAcctCr/Dr from Invoice (sets also Project)
- if (!cr.updateReverseLine (MInvoice.Table_ID, // Amt updated
- m_invoiceLine.getC_Invoice_ID(), m_invoiceLine.getC_InvoiceLine_ID(), effMultiplier))
- {
- p_Error = "Invoice not posted yet";
- return null;
- }
- }
- if (log.isLoggable(Level.FINE)) log.fine("DR - Amt(" + temp + "->" + cr.getAcctBalance()
- + ") - " + cr.toString());
- }
- else // Cash Acct
- {
- MInvoice invoice = m_invoiceLine.getParent();
- if (as.getC_Currency_ID() != invoice.getC_Currency_ID())
- LineNetAmt = MConversionRate.convert(getCtx(), LineNetAmt,
- invoice.getC_Currency_ID(), as.getC_Currency_ID(),
- invoice.getDateAcct(), invoice.getC_ConversionType_ID(),
- invoice.getAD_Client_ID(), invoice.getAD_Org_ID());
- cr = fact.createLine (null, expense,
- as.getC_Currency_ID(), null, LineNetAmt);
- //if (m_matchInv.getReversal_ID() > 0)
- if (m_matchInv.getReversal_ID() > 0 && m_matchInv.getCreated().after(m_matchInv.getReversal().getCreated()))
- {
- if (!cr.updateReverseLine (MMatchInv.Table_ID, // Amt updated
- m_matchInv.getReversal_ID(), 0, BigDecimal.ONE))
- {
- p_Error = "Failed to create reversal entry";
- return null;
- }
- }
- else
- {
- cr.setQty(getQty().multiply(multiplier).negate());
- }
- }
- if (m_matchInv.getReversal_ID() == 0)
- {
- cr.setC_Activity_ID(m_invoiceLine.getC_Activity_ID());
- cr.setC_Campaign_ID(m_invoiceLine.getC_Campaign_ID());
- cr.setC_Project_ID(m_invoiceLine.getC_Project_ID());
- cr.setC_ProjectPhase_ID(m_invoiceLine.getC_ProjectPhase_ID());
- cr.setC_ProjectTask_ID(m_invoiceLine.getC_ProjectTask_ID());
- cr.setC_UOM_ID(m_invoiceLine.getC_UOM_ID());
- cr.setUser1_ID(m_invoiceLine.getUser1_ID());
- cr.setUser2_ID(m_invoiceLine.getUser2_ID());
- }
- else
- {
- updateFactLine(cr);
- }
-
- //AZ Goodwill
- //Desc: Source Not Balanced problem because Currency is Difference - PO=CNY but AP=USD
- //see also Fact.java: checking for isMultiCurrency()
- if (dr.getC_Currency_ID() != cr.getC_Currency_ID())
- setIsMultiCurrency(true);
- //end AZ
-
- // Avoid usage of clearing accounts
- // If both accounts Not Invoiced Receipts and Inventory Clearing are equal
- // then remove the posting
-
- MAccount acct_db = dr.getAccount(); // not_invoiced_receipts
- MAccount acct_cr = cr.getAccount(); // inventory_clearing
-
- 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
-
-
- // Invoice Price Variance difference
- BigDecimal ipv = cr.getAcctBalance().add(dr.getAcctBalance()).negate();
- processInvoicePriceVariance(as, fact, ipv);
-
- String error = createMatchInvCostDetail(as);
- if (error != null && error.trim().length() > 0)
- {
- p_Error = error;
- return null;
- }
- //
- facts.add(fact);
-
- /** Commitment release ****/
-// if (as.isAccrual() && as.isCreatePOCommitment())
-// {
-// fact = Doc_Order.getCommitmentRelease(as, this,
-// getQty(), m_invoiceLine.getC_InvoiceLine_ID(), Env.ONE);
-// if (fact == null)
-// return null;
-// facts.add(fact);
-// } // Commitment
-
- return facts;
- } // createFact
-
-
- /**
- * @param as
- * @param fact
- * @param ipv
- */
- protected void processInvoicePriceVariance(MAcctSchema as, Fact fact,
- BigDecimal ipv) {
- if (ipv.signum() == 0) return;
-
- FactLine pv = fact.createLine(null,
- m_pc.getAccount(ProductCost.ACCTTYPE_P_IPV, as),
- as.getC_Currency_ID(), ipv);
- updateFactLine(pv);
-
- MMatchInv matchInv = (MMatchInv)getPO();
- Trx trx = Trx.get(getTrxName(), false);
- Savepoint savepoint = null;
- boolean zeroQty = false;
- try {
- savepoint = trx.setSavepoint(null);
-
- if (!MCostDetail.createMatchInvoice(as, m_invoiceLine.getAD_Org_ID(),
- m_invoiceLine.getM_Product_ID(), m_invoiceLine.getM_AttributeSetInstance_ID(),
- matchInv.getM_MatchInv_ID(), 0,
- ipv, BigDecimal.ZERO, "Invoice Price Variance", getTrxName())) {
- throw new RuntimeException("Failed to create cost detail record.");
- }
- } catch (SQLException e) {
- throw new RuntimeException(e.getLocalizedMessage(), e);
- } catch (AverageCostingZeroQtyException e) {
- zeroQty = true;
- try {
- trx.rollback(savepoint);
- savepoint = null;
- } catch (SQLException e1) {
- throw new RuntimeException(e1.getLocalizedMessage(), e1);
- }
- } finally {
- if (savepoint != null) {
- try {
- trx.releaseSavepoint(savepoint);
- } catch (SQLException e) {}
- }
- }
-
- String costingMethod = m_pc.getProduct().getCostingMethod(as);
- MAccount account = m_pc.getAccount(ProductCost.ACCTTYPE_P_Asset, as);
- if (m_pc.isService())
- account = m_pc.getAccount(ProductCost.ACCTTYPE_P_Expense, as);
- if (X_M_Cost.COSTINGMETHOD_AveragePO.equals(costingMethod)) {
- if (zeroQty)
- account = m_pc.getAccount(ProductCost.ACCTTYPE_P_AverageCostVariance, as);
-// FactLine line = fact.createLine(null,
-// m_pc.getAccount(ProductCost.ACCTTYPE_P_IPV, as),
-// as.getC_Currency_ID(), ipv.negate());
-// updateFactLine(line);
-
-// line = fact.createLine(null, account, as.getC_Currency_ID(), ipv);
-// updateFactLine(line);
- } else if (X_M_Cost.COSTINGMETHOD_AverageInvoice.equals(costingMethod) && !zeroQty) {
- FactLine line = fact.createLine(null,
- m_pc.getAccount(ProductCost.ACCTTYPE_P_IPV, as),
- as.getC_Currency_ID(), ipv.negate());
- updateFactLine(line);
-
- line = fact.createLine(null, account, as.getC_Currency_ID(), ipv);
- updateFactLine(line);
- }
- }
-
- /** 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 invoice line
- if (m_receiptLine != null && m_invoiceLine != null && m_receiptLine.getAD_Org_ID() != m_invoiceLine.getAD_Org_ID())
- return true;
-
- return false;
- }
-
- // Elaine 2008/6/20
- private String createMatchInvCostDetail(MAcctSchema as)
- {
- if (m_invoiceLine != null && m_invoiceLine.get_ID() > 0
- && m_receiptLine != null && m_receiptLine.get_ID() > 0)
- {
- MMatchInv matchInv = (MMatchInv)getPO();
-
- BigDecimal LineNetAmt = m_invoiceLine.getLineNetAmt();
- BigDecimal multiplier = getQty()
- .divide(m_invoiceLine.getQtyInvoiced(), 12, BigDecimal.ROUND_HALF_UP)
- .abs();
- if (multiplier.compareTo(Env.ONE) != 0)
- LineNetAmt = LineNetAmt.multiply(multiplier);
-
- // MZ Goodwill
- // Create Cost Detail Matched Invoice using Total Amount and Total Qty based on InvoiceLine
- MMatchInv[] mInv = MMatchInv.getInvoiceLine(getCtx(), m_invoiceLine.getC_InvoiceLine_ID(), getTrxName());
- BigDecimal tQty = Env.ZERO;
- BigDecimal tAmt = Env.ZERO;
- for (int i = 0 ; i < mInv.length ; i++)
- {
- if (mInv[i].isPosted() && mInv[i].getM_MatchInv_ID() != get_ID() && mInv[i].getM_AttributeSetInstance_ID() == matchInv.getM_AttributeSetInstance_ID())
- {
- tQty = tQty.add(mInv[i].getQty());
- multiplier = mInv[i].getQty()
- .divide(m_invoiceLine.getQtyInvoiced(), 12, BigDecimal.ROUND_HALF_UP).abs();
- tAmt = tAmt.add(m_invoiceLine.getLineNetAmt().multiply(multiplier));
- }
- }
- tAmt = tAmt.add(LineNetAmt); //Invoice Price
-
- // Different currency
- MInvoice invoice = m_invoiceLine.getParent();
- if (as.getC_Currency_ID() != invoice.getC_Currency_ID())
- {
- tAmt = MConversionRate.convert(getCtx(), tAmt,
- invoice.getC_Currency_ID(), as.getC_Currency_ID(),
- invoice.getDateAcct(), invoice.getC_ConversionType_ID(),
- invoice.getAD_Client_ID(), invoice.getAD_Org_ID());
- if (tAmt == null)
- {
- return "AP Invoice not convertible - " + as.getName();
- }
- }
-
- // set Qty to negative value when MovementType is Vendor Returns
- MInOut receipt = m_receiptLine.getParent();
- if (receipt.getMovementType().equals(MInOut.MOVEMENTTYPE_VendorReturns))
- tQty = tQty.add(getQty().negate()); // Qty is set to negative value
- else
- tQty = tQty.add(getQty());
-
- // Set Total Amount and Total Quantity from Matched Invoice
- if (!MCostDetail.createInvoice(as, getAD_Org_ID(),
- getM_Product_ID(), matchInv.getM_AttributeSetInstance_ID(),
- m_invoiceLine.getC_InvoiceLine_ID(), 0, // No cost element
- tAmt, tQty, getDescription(), getTrxName()))
- {
- return "Failed to create cost detail record";
- }
-
- Map landedCostMap = new LinkedHashMap();
- I_C_OrderLine orderLine = m_receiptLine.getC_OrderLine();
- if (orderLine == null)
- return "";
-
- int C_OrderLine_ID = orderLine.getC_OrderLine_ID();
- MOrderLandedCostAllocation[] allocations = MOrderLandedCostAllocation.getOfOrderLine(C_OrderLine_ID, getTrxName());
- for(MOrderLandedCostAllocation allocation : allocations)
- {
- BigDecimal totalAmt = allocation.getAmt();
- BigDecimal totalQty = allocation.getQty();
- BigDecimal amt = totalAmt.multiply(tQty).divide(totalQty, 12, BigDecimal.ROUND_HALF_UP);
- if (orderLine.getC_Currency_ID() != as.getC_Currency_ID())
- {
- I_C_Order order = orderLine.getC_Order();
- Timestamp dateAcct = order.getDateAcct();
- BigDecimal rate = MConversionRate.getRate(
- order.getC_Currency_ID(), as.getC_Currency_ID(),
- dateAcct, order.getC_ConversionType_ID(),
- order.getAD_Client_ID(), order.getAD_Org_ID());
- if (rate == null)
- {
- p_Error = "Purchase Order not convertible - " + as.getName();
- return null;
- }
- amt = amt.multiply(rate);
- if (amt.scale() > as.getCostingPrecision())
- amt = amt.setScale(as.getCostingPrecision(), BigDecimal.ROUND_HALF_UP);
- }
- int elementId = allocation.getC_OrderLandedCost().getM_CostElement_ID();
- BigDecimal elementAmt = landedCostMap.get(elementId);
- if (elementAmt == null)
- {
- elementAmt = amt;
- }
- else
- {
- elementAmt = elementAmt.add(amt);
- }
- landedCostMap.put(elementId, elementAmt);
- }
-
- for(Integer elementId : landedCostMap.keySet())
- {
- BigDecimal amt = landedCostMap.get(elementId);
- if (!MCostDetail.createShipment(as, getAD_Org_ID(),
- getM_Product_ID(), matchInv.getM_AttributeSetInstance_ID(),
- m_receiptLine.getM_InOutLine_ID(), elementId,
- amt, tQty, getDescription(), false, getTrxName()))
- {
- return "Failed to create cost detail record";
- }
- }
- // end MZ
- }
-
- return "";
- }
-
- /**
- * @param factLine
- */
- protected void updateFactLine(FactLine factLine) {
- factLine.setC_Activity_ID(m_invoiceLine.getC_Activity_ID());
- factLine.setC_Campaign_ID(m_invoiceLine.getC_Campaign_ID());
- factLine.setC_Project_ID(m_invoiceLine.getC_Project_ID());
- factLine.setC_ProjectPhase_ID(m_invoiceLine.getC_ProjectPhase_ID());
- factLine.setC_ProjectTask_ID(m_invoiceLine.getC_ProjectTask_ID());
- factLine.setC_UOM_ID(m_invoiceLine.getC_UOM_ID());
- factLine.setUser1_ID(m_invoiceLine.getUser1_ID());
- factLine.setUser2_ID(m_invoiceLine.getUser2_ID());
- factLine.setM_Product_ID(m_invoiceLine.getM_Product_ID());
- factLine.setQty(getQty());
- }
-} // Doc_MatchInv
+/******************************************************************************
+ * 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 balinusa.midsuit.doc;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Savepoint;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.logging.Level;
+
+import org.adempiere.exceptions.AverageCostingZeroQtyException;
+import org.compiere.acct.Doc;
+import org.compiere.acct.Fact;
+import org.compiere.acct.FactLine;
+import org.compiere.model.I_C_Order;
+import org.compiere.model.I_C_OrderLine;
+import org.compiere.model.MAccount;
+import org.compiere.model.MAcctSchema;
+import org.compiere.model.MAcctSchemaElement;
+import org.compiere.model.MConversionRate;
+import org.compiere.model.MCostDetail;
+import org.compiere.model.MInOut;
+import org.compiere.model.MInOutLine;
+import org.compiere.model.MInvoice;
+import org.compiere.model.MInvoiceLine;
+import org.compiere.model.MMatchInv;
+import org.compiere.model.MOrderLandedCostAllocation;
+import org.compiere.model.ProductCost;
+import org.compiere.model.X_M_Cost;
+import org.compiere.util.Env;
+import org.compiere.util.Trx;
+
+/**
+ * Post MatchInv Documents.
+ *
+ * Table: M_MatchInv (472)
+ * Document Types: MXI
+ *
+ * Update Costing Records
+ * @author Jorg Janke
+ * @version $Id: Doc_MatchInv.java,v 1.3 2006/07/30 00:53:33 jjanke Exp $
+ *
+ * FR [ 1840016 ] Avoid usage of clearing accounts - subject to C_AcctSchema.IsPostIfClearingEqual
+ * Avoid posting if both accounts Not Invoiced Receipts and Inventory Clearing are equal
+ * BF [ 2789949 ] Multicurrency in matching posting
+ */
+public class MID_DocMatchInv extends Doc
+{
+ /**
+ * Constructor
+ * @param ass accounting schema
+ * @param rs record
+ * @param trxName trx
+ */
+ public MID_DocMatchInv (MAcctSchema as, ResultSet rs, String trxName)
+ {
+ super(as, MMatchInv.class, rs, DOCTYPE_MatMatchInv, trxName);
+ } // Doc_MatchInv
+
+ /** Invoice Line */
+ private MInvoiceLine m_invoiceLine = null;
+ /** Material Receipt */
+ private MInOutLine m_receiptLine = null;
+
+ private ProductCost m_pc = null;
+ private MMatchInv m_matchInv;
+
+ /** Commitments */
+// private DocLine[] m_commitments = null;
+
+ /**
+ * Load Specific Document Details
+ * @return error message or null
+ */
+ protected String loadDocumentDetails ()
+ {
+ setC_Currency_ID (Doc.NO_CURRENCY);
+ m_matchInv = (MMatchInv)getPO();
+ setDateDoc(m_matchInv.getDateTrx());
+ setQty (m_matchInv.getQty());
+ // Invoice Info
+ int C_InvoiceLine_ID = m_matchInv.getC_InvoiceLine_ID();
+ m_invoiceLine = new MInvoiceLine (getCtx(), C_InvoiceLine_ID, getTrxName());
+ // BP for NotInvoicedReceipts
+ int C_BPartner_ID = m_invoiceLine.getParent().getC_BPartner_ID();
+ setC_BPartner_ID(C_BPartner_ID);
+ //
+ int M_InOutLine_ID = m_matchInv.getM_InOutLine_ID();
+ m_receiptLine = new MInOutLine (getCtx(), M_InOutLine_ID, getTrxName());
+ //
+ m_pc = new ProductCost (Env.getCtx(),
+ getM_Product_ID(), m_matchInv.getM_AttributeSetInstance_ID(), getTrxName());
+ m_pc.setQty(getQty());
+
+ return null;
+ } // loadDocumentDetails
+
+
+ /**************************************************************************
+ * Get Source Currency Balance - subtracts line and tax amounts from total - no rounding
+ * @return Zero (always balanced)
+ */
+ public BigDecimal getBalance()
+ {
+ return Env.ZERO;
+ } // getBalance
+
+
+ /**
+ * Create Facts (the accounting logic) for
+ * MXI.
+ * (single line)
+ *
+ * NotInvoicedReceipts DR (Receipt Org)
+ * InventoryClearing CR
+ * InvoicePV DR CR (difference)
+ * Commitment
+ * Expense CR
+ * Offset DR
+ *
+ * @param as accounting schema
+ * @return Fact
+ */
+ public ArrayList createFacts (MAcctSchema as)
+ {
+ ArrayList facts = new ArrayList();
+ // Nothing to do
+ if (getM_Product_ID() == 0 // no Product
+ || getQty().signum() == 0
+ || m_receiptLine.getMovementQty().signum() == 0) // Qty = 0
+ {
+ if (log.isLoggable(Level.FINE)) log.fine("No Product/Qty - M_Product_ID=" + getM_Product_ID()
+ + ",Qty=" + getQty() + ",InOutQty=" + m_receiptLine.getMovementQty());
+ return facts;
+ }
+// MMatchInv matchInv = (MMatchInv)getPO();
+
+ // create Fact Header
+ Fact fact = new Fact(this, as, Fact.POST_Actual);
+ setC_Currency_ID (as.getC_Currency_ID());
+ boolean isInterOrg = isInterOrg(as);
+
+ /** Needs to be handeled in PO Matching as no Receipt info
+ if (m_pc.isService())
+ {
+ log.fine("Service - skipped");
+ return fact;
+ }
+ **/
+
+
+ // NotInvoicedReceipt DR
+ // From Receipt
+ BigDecimal multiplier = getQty()
+ .divide(m_receiptLine.getMovementQty(), 12, BigDecimal.ROUND_HALF_UP)
+ .abs();
+ FactLine dr = fact.createLine (null,
+ getAccount(Doc.ACCTTYPE_NotInvoicedReceipts, as),
+ as.getC_Currency_ID(), Env.ONE, null); // updated below
+ if (dr == null)
+ {
+ p_Error = "No Product Costs";
+ return null;
+ }
+ dr.setQty(getQty());
+ BigDecimal temp = dr.getAcctBalance();
+ // Set AmtAcctCr/Dr from Receipt (sets also Project)
+ //if (m_matchInv.getReversal_ID() > 0) //@win
+ if (m_matchInv.getReversal_ID() > 0 && m_matchInv.getCreated().after(m_matchInv.getReversal().getCreated()))
+ {
+ if (!dr.updateReverseLine (MMatchInv.Table_ID, // Amt updated
+ m_matchInv.getReversal_ID(), 0, BigDecimal.ONE))
+ {
+ p_Error = "Failed to create reversal entry";
+ return null;
+ }
+ }
+ else
+ {
+ BigDecimal effMultiplier = multiplier;
+ if (getQty().signum() < 0)
+ effMultiplier = effMultiplier.negate();
+ if (!dr.updateReverseLine (MInOut.Table_ID, // Amt updated
+ m_receiptLine.getM_InOut_ID(), m_receiptLine.getM_InOutLine_ID(),
+ effMultiplier))
+ {
+ p_Error = "Mat.Receipt not posted yet";
+ return null;
+ }
+ }
+ if (log.isLoggable(Level.FINE)) log.fine("CR - Amt(" + temp + "->" + dr.getAcctBalance()
+ + ") - " + dr.toString());
+
+ // InventoryClearing CR
+ // From Invoice
+ MAccount expense = m_pc.getAccount(ProductCost.ACCTTYPE_P_InventoryClearing, as);
+ if (m_pc.isService())
+ expense = m_pc.getAccount(ProductCost.ACCTTYPE_P_Expense, as);
+ BigDecimal LineNetAmt = m_invoiceLine.getLineNetAmt();
+ multiplier = getQty()
+ .divide(m_invoiceLine.getQtyInvoiced(), 12, BigDecimal.ROUND_HALF_UP)
+ .abs();
+ if (multiplier.compareTo(Env.ONE) != 0)
+ LineNetAmt = LineNetAmt.multiply(multiplier);
+ if (m_pc.isService())
+ LineNetAmt = dr.getAcctBalance(); // book out exact receipt amt
+ FactLine cr = null;
+ if (as.isAccrual())
+ {
+ cr = fact.createLine (null, expense,
+ as.getC_Currency_ID(), null, LineNetAmt); // updated below
+ if (cr == null)
+ {
+ if (log.isLoggable(Level.FINE)) log.fine("Line Net Amt=0 - M_Product_ID=" + getM_Product_ID()
+ + ",Qty=" + getQty() + ",InOutQty=" + m_receiptLine.getMovementQty());
+
+ cr = fact.createLine (null, expense, as.getC_Currency_ID(), null, Env.ONE);
+ cr.setAmtAcctCr(BigDecimal.ZERO);
+ cr.setAmtSourceCr(BigDecimal.ZERO);
+ }
+ temp = cr.getAcctBalance();
+ //if (m_matchInv.getReversal_ID() > 0)
+ if (m_matchInv.getReversal_ID() > 0 && m_matchInv.getCreated().after(m_matchInv.getReversal().getCreated()))
+ {
+ if (!cr.updateReverseLine (MMatchInv.Table_ID, // Amt updated
+ m_matchInv.getReversal_ID(), 0, BigDecimal.ONE))
+ {
+ p_Error = "Failed to create reversal entry";
+ return null;
+ }
+ }
+ else
+ {
+ cr.setQty(getQty().negate());
+ BigDecimal effMultiplier = multiplier;
+ if (getQty().signum() < 0)
+ effMultiplier = effMultiplier.negate();
+
+ // Set AmtAcctCr/Dr from Invoice (sets also Project)
+ if (!cr.updateReverseLine (MInvoice.Table_ID, // Amt updated
+ m_invoiceLine.getC_Invoice_ID(), m_invoiceLine.getC_InvoiceLine_ID(), effMultiplier))
+ {
+ p_Error = "Invoice not posted yet";
+ return null;
+ }
+ }
+ if (log.isLoggable(Level.FINE)) log.fine("DR - Amt(" + temp + "->" + cr.getAcctBalance()
+ + ") - " + cr.toString());
+ }
+ else // Cash Acct
+ {
+ MInvoice invoice = m_invoiceLine.getParent();
+ if (as.getC_Currency_ID() != invoice.getC_Currency_ID())
+ LineNetAmt = MConversionRate.convert(getCtx(), LineNetAmt,
+ invoice.getC_Currency_ID(), as.getC_Currency_ID(),
+ invoice.getDateAcct(), invoice.getC_ConversionType_ID(),
+ invoice.getAD_Client_ID(), invoice.getAD_Org_ID());
+ cr = fact.createLine (null, expense,
+ as.getC_Currency_ID(), null, LineNetAmt);
+ //if (m_matchInv.getReversal_ID() > 0)
+ if (m_matchInv.getReversal_ID() > 0 && m_matchInv.getCreated().after(m_matchInv.getReversal().getCreated()))
+ {
+ if (!cr.updateReverseLine (MMatchInv.Table_ID, // Amt updated
+ m_matchInv.getReversal_ID(), 0, BigDecimal.ONE))
+ {
+ p_Error = "Failed to create reversal entry";
+ return null;
+ }
+ }
+ else
+ {
+ cr.setQty(getQty().multiply(multiplier).negate());
+ }
+ }
+ if (m_matchInv.getReversal_ID() == 0)
+ {
+ cr.setC_Activity_ID(m_invoiceLine.getC_Activity_ID());
+ cr.setC_Campaign_ID(m_invoiceLine.getC_Campaign_ID());
+ cr.setC_Project_ID(m_invoiceLine.getC_Project_ID());
+ cr.setC_ProjectPhase_ID(m_invoiceLine.getC_ProjectPhase_ID());
+ cr.setC_ProjectTask_ID(m_invoiceLine.getC_ProjectTask_ID());
+ cr.setC_UOM_ID(m_invoiceLine.getC_UOM_ID());
+ cr.setUser1_ID(m_invoiceLine.getUser1_ID());
+ cr.setUser2_ID(m_invoiceLine.getUser2_ID());
+ }
+ else
+ {
+ updateFactLine(cr);
+ }
+
+ //AZ Goodwill
+ //Desc: Source Not Balanced problem because Currency is Difference - PO=CNY but AP=USD
+ //see also Fact.java: checking for isMultiCurrency()
+ if (dr.getC_Currency_ID() != cr.getC_Currency_ID())
+ setIsMultiCurrency(true);
+ //end AZ
+
+ // Avoid usage of clearing accounts
+ // If both accounts Not Invoiced Receipts and Inventory Clearing are equal
+ // then remove the posting
+
+ MAccount acct_db = dr.getAccount(); // not_invoiced_receipts
+ MAccount acct_cr = cr.getAccount(); // inventory_clearing
+
+ 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
+
+
+ // Invoice Price Variance difference
+ BigDecimal ipv = cr.getAcctBalance().add(dr.getAcctBalance()).negate();
+ processInvoicePriceVariance(as, fact, ipv);
+
+ String error = createMatchInvCostDetail(as);
+ if (error != null && error.trim().length() > 0)
+ {
+ p_Error = error;
+ return null;
+ }
+ //
+ facts.add(fact);
+
+ /** Commitment release ****/
+// if (as.isAccrual() && as.isCreatePOCommitment())
+// {
+// fact = Doc_Order.getCommitmentRelease(as, this,
+// getQty(), m_invoiceLine.getC_InvoiceLine_ID(), Env.ONE);
+// if (fact == null)
+// return null;
+// facts.add(fact);
+// } // Commitment
+
+ return facts;
+ } // createFact
+
+
+ /**
+ * @param as
+ * @param fact
+ * @param ipv
+ */
+ protected void processInvoicePriceVariance(MAcctSchema as, Fact fact,
+ BigDecimal ipv) {
+ if (ipv.signum() == 0) return;
+
+ FactLine pv = fact.createLine(null,
+ m_pc.getAccount(ProductCost.ACCTTYPE_P_IPV, as),
+ as.getC_Currency_ID(), ipv);
+ updateFactLine(pv);
+
+ MMatchInv matchInv = (MMatchInv)getPO();
+ Trx trx = Trx.get(getTrxName(), false);
+ Savepoint savepoint = null;
+ boolean zeroQty = false;
+ try {
+ savepoint = trx.setSavepoint(null);
+
+ if (!MCostDetail.createMatchInvoice(as, m_invoiceLine.getAD_Org_ID(),
+ m_invoiceLine.getM_Product_ID(), m_invoiceLine.getM_AttributeSetInstance_ID(),
+ matchInv.getM_MatchInv_ID(), 0,
+ ipv, BigDecimal.ZERO, "Invoice Price Variance", getTrxName())) {
+ throw new RuntimeException("Failed to create cost detail record.");
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException(e.getLocalizedMessage(), e);
+ } catch (AverageCostingZeroQtyException e) {
+ zeroQty = true;
+ try {
+ trx.rollback(savepoint);
+ savepoint = null;
+ } catch (SQLException e1) {
+ throw new RuntimeException(e1.getLocalizedMessage(), e1);
+ }
+ } finally {
+ if (savepoint != null) {
+ try {
+ trx.releaseSavepoint(savepoint);
+ } catch (SQLException e) {}
+ }
+ }
+
+ String costingMethod = m_pc.getProduct().getCostingMethod(as);
+ MAccount account = m_pc.getAccount(ProductCost.ACCTTYPE_P_Asset, as);
+ if (m_pc.isService())
+ account = m_pc.getAccount(ProductCost.ACCTTYPE_P_Expense, as);
+ if (X_M_Cost.COSTINGMETHOD_AveragePO.equals(costingMethod)) {
+ if (zeroQty)
+ account = m_pc.getAccount(ProductCost.ACCTTYPE_P_AverageCostVariance, as);
+// FactLine line = fact.createLine(null,
+// m_pc.getAccount(ProductCost.ACCTTYPE_P_IPV, as),
+// as.getC_Currency_ID(), ipv.negate());
+// updateFactLine(line);
+
+// line = fact.createLine(null, account, as.getC_Currency_ID(), ipv);
+// updateFactLine(line);
+ } else if (X_M_Cost.COSTINGMETHOD_AverageInvoice.equals(costingMethod) && !zeroQty) {
+ FactLine line = fact.createLine(null,
+ m_pc.getAccount(ProductCost.ACCTTYPE_P_IPV, as),
+ as.getC_Currency_ID(), ipv.negate());
+ updateFactLine(line);
+
+ line = fact.createLine(null, account, as.getC_Currency_ID(), ipv);
+ updateFactLine(line);
+ }
+ }
+
+ /** 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 invoice line
+ if (m_receiptLine != null && m_invoiceLine != null && m_receiptLine.getAD_Org_ID() != m_invoiceLine.getAD_Org_ID())
+ return true;
+
+ return false;
+ }
+
+ // Elaine 2008/6/20
+ private String createMatchInvCostDetail(MAcctSchema as)
+ {
+ if (m_invoiceLine != null && m_invoiceLine.get_ID() > 0
+ && m_receiptLine != null && m_receiptLine.get_ID() > 0)
+ {
+ MMatchInv matchInv = (MMatchInv)getPO();
+
+ BigDecimal LineNetAmt = m_invoiceLine.getLineNetAmt();
+ BigDecimal multiplier = getQty()
+ .divide(m_invoiceLine.getQtyInvoiced(), 12, BigDecimal.ROUND_HALF_UP)
+ .abs();
+ if (multiplier.compareTo(Env.ONE) != 0)
+ LineNetAmt = LineNetAmt.multiply(multiplier);
+
+ // MZ Goodwill
+ // Create Cost Detail Matched Invoice using Total Amount and Total Qty based on InvoiceLine
+ MMatchInv[] mInv = MMatchInv.getInvoiceLine(getCtx(), m_invoiceLine.getC_InvoiceLine_ID(), getTrxName());
+ BigDecimal tQty = Env.ZERO;
+ BigDecimal tAmt = Env.ZERO;
+ for (int i = 0 ; i < mInv.length ; i++)
+ {
+ if (mInv[i].isPosted() && mInv[i].getM_MatchInv_ID() != get_ID() && mInv[i].getM_AttributeSetInstance_ID() == matchInv.getM_AttributeSetInstance_ID())
+ {
+ tQty = tQty.add(mInv[i].getQty());
+ multiplier = mInv[i].getQty()
+ .divide(m_invoiceLine.getQtyInvoiced(), 12, BigDecimal.ROUND_HALF_UP).abs();
+ tAmt = tAmt.add(m_invoiceLine.getLineNetAmt().multiply(multiplier));
+ }
+ }
+ tAmt = tAmt.add(LineNetAmt); //Invoice Price
+
+ // Different currency
+ MInvoice invoice = m_invoiceLine.getParent();
+ if (as.getC_Currency_ID() != invoice.getC_Currency_ID())
+ {
+ tAmt = MConversionRate.convert(getCtx(), tAmt,
+ invoice.getC_Currency_ID(), as.getC_Currency_ID(),
+ invoice.getDateAcct(), invoice.getC_ConversionType_ID(),
+ invoice.getAD_Client_ID(), invoice.getAD_Org_ID());
+ if (tAmt == null)
+ {
+ return "AP Invoice not convertible - " + as.getName();
+ }
+ }
+
+ // set Qty to negative value when MovementType is Vendor Returns
+ MInOut receipt = m_receiptLine.getParent();
+ if (receipt.getMovementType().equals(MInOut.MOVEMENTTYPE_VendorReturns))
+ tQty = tQty.add(getQty().negate()); // Qty is set to negative value
+ else
+ tQty = tQty.add(getQty());
+
+ // Set Total Amount and Total Quantity from Matched Invoice
+ if (!MCostDetail.createInvoice(as, getAD_Org_ID(),
+ getM_Product_ID(), matchInv.getM_AttributeSetInstance_ID(),
+ m_invoiceLine.getC_InvoiceLine_ID(), 0, // No cost element
+ tAmt, tQty, getDescription(), getTrxName()))
+ {
+ return "Failed to create cost detail record";
+ }
+
+ Map landedCostMap = new LinkedHashMap();
+ I_C_OrderLine orderLine = m_receiptLine.getC_OrderLine();
+ if (orderLine == null)
+ return "";
+
+ int C_OrderLine_ID = orderLine.getC_OrderLine_ID();
+ MOrderLandedCostAllocation[] allocations = MOrderLandedCostAllocation.getOfOrderLine(C_OrderLine_ID, getTrxName());
+ for(MOrderLandedCostAllocation allocation : allocations)
+ {
+ BigDecimal totalAmt = allocation.getAmt();
+ BigDecimal totalQty = allocation.getQty();
+ BigDecimal amt = totalAmt.multiply(tQty).divide(totalQty, 12, BigDecimal.ROUND_HALF_UP);
+ if (orderLine.getC_Currency_ID() != as.getC_Currency_ID())
+ {
+ I_C_Order order = orderLine.getC_Order();
+ Timestamp dateAcct = order.getDateAcct();
+ BigDecimal rate = MConversionRate.getRate(
+ order.getC_Currency_ID(), as.getC_Currency_ID(),
+ dateAcct, order.getC_ConversionType_ID(),
+ order.getAD_Client_ID(), order.getAD_Org_ID());
+ if (rate == null)
+ {
+ p_Error = "Purchase Order not convertible - " + as.getName();
+ return null;
+ }
+ amt = amt.multiply(rate);
+ if (amt.scale() > as.getCostingPrecision())
+ amt = amt.setScale(as.getCostingPrecision(), BigDecimal.ROUND_HALF_UP);
+ }
+ int elementId = allocation.getC_OrderLandedCost().getM_CostElement_ID();
+ BigDecimal elementAmt = landedCostMap.get(elementId);
+ if (elementAmt == null)
+ {
+ elementAmt = amt;
+ }
+ else
+ {
+ elementAmt = elementAmt.add(amt);
+ }
+ landedCostMap.put(elementId, elementAmt);
+ }
+
+ for(Integer elementId : landedCostMap.keySet())
+ {
+ BigDecimal amt = landedCostMap.get(elementId);
+ if (!MCostDetail.createShipment(as, getAD_Org_ID(),
+ getM_Product_ID(), matchInv.getM_AttributeSetInstance_ID(),
+ m_receiptLine.getM_InOutLine_ID(), elementId,
+ amt, tQty, getDescription(), false, getTrxName()))
+ {
+ return "Failed to create cost detail record";
+ }
+ }
+ // end MZ
+ }
+
+ return "";
+ }
+
+ /**
+ * @param factLine
+ */
+ protected void updateFactLine(FactLine factLine) {
+ factLine.setC_Activity_ID(m_invoiceLine.getC_Activity_ID());
+ factLine.setC_Campaign_ID(m_invoiceLine.getC_Campaign_ID());
+ factLine.setC_Project_ID(m_invoiceLine.getC_Project_ID());
+ factLine.setC_ProjectPhase_ID(m_invoiceLine.getC_ProjectPhase_ID());
+ factLine.setC_ProjectTask_ID(m_invoiceLine.getC_ProjectTask_ID());
+ factLine.setC_UOM_ID(m_invoiceLine.getC_UOM_ID());
+ factLine.setUser1_ID(m_invoiceLine.getUser1_ID());
+ factLine.setUser2_ID(m_invoiceLine.getUser2_ID());
+ factLine.setM_Product_ID(m_invoiceLine.getM_Product_ID());
+ factLine.setQty(getQty());
+ }
+} // Doc_MatchInv
diff --git a/andromeida.midsuit.project/src/balinusa/midsuit/doc/MID_DocMidRequsiition.java b/balinusa.midsuit.project/src/balinusa/midsuit/doc/MID_DocMidRequsiition.java
similarity index 91%
rename from andromeida.midsuit.project/src/balinusa/midsuit/doc/MID_DocMidRequsiition.java
rename to balinusa.midsuit.project/src/balinusa/midsuit/doc/MID_DocMidRequsiition.java
index 3e97aaf..203e9da 100644
--- a/andromeida.midsuit.project/src/balinusa/midsuit/doc/MID_DocMidRequsiition.java
+++ b/balinusa.midsuit.project/src/balinusa/midsuit/doc/MID_DocMidRequsiition.java
@@ -1,4 +1,4 @@
-package andromedia.midsuit.doc;
+package balinusa.midsuit.doc;
import java.math.BigDecimal;
import java.sql.ResultSet;
@@ -9,7 +9,7 @@ import org.compiere.acct.Fact;
import org.compiere.model.MAcctSchema;
import org.compiere.util.Env;
-import andromedia.midsuit.model.MID_MRequisitionTrx;
+import balinusa.midsuit.model.MID_MRequisitionTrx;
public class MID_DocMidRequsiition extends Doc {
diff --git a/andromeida.midsuit.project/src/balinusa/midsuit/doc/MID_DocMovement.java b/balinusa.midsuit.project/src/balinusa/midsuit/doc/MID_DocMovement.java
similarity index 96%
rename from andromeida.midsuit.project/src/balinusa/midsuit/doc/MID_DocMovement.java
rename to balinusa.midsuit.project/src/balinusa/midsuit/doc/MID_DocMovement.java
index 78b0fc4..3b63ef9 100644
--- a/andromeida.midsuit.project/src/balinusa/midsuit/doc/MID_DocMovement.java
+++ b/balinusa.midsuit.project/src/balinusa/midsuit/doc/MID_DocMovement.java
@@ -1,272 +1,272 @@
-/******************************************************************************
- * 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 andromedia.midsuit.doc;
-
-import java.math.BigDecimal;
-import java.sql.ResultSet;
-import java.util.ArrayList;
-import java.util.logging.Level;
-
-import org.compiere.acct.Doc;
-import org.compiere.acct.DocLine;
-import org.compiere.acct.Fact;
-import org.compiere.acct.FactLine;
-import org.compiere.model.MAcctSchema;
-import org.compiere.model.MCostDetail;
-import org.compiere.model.MMovement;
-import org.compiere.model.MMovementLine;
-import org.compiere.model.MMovementLineMA;
-import org.compiere.model.MProduct;
-import org.compiere.model.ProductCost;
-import org.compiere.util.Env;
-
-/**
- * Post Invoice Documents.
- *
- * Table: M_Movement (323)
- * Document Types: MMM
- *
- * @author Jorg Janke
- * @author Armen Rizal, Goodwill Consulting
- * BF [ 1745154 ] Cost in Reversing Material Related Docs
- * @version $Id: Doc_Movement.java,v 1.3 2006/07/30 00:53:33 jjanke Exp $
- */
-public class MID_DocMovement extends Doc
-{
- private int m_Reversal_ID = 0;
- @SuppressWarnings("unused")
- private String m_DocStatus = "";
-
- /**
- * Constructor
- * @param as accounting schema
- * @param rs record
- * @param trxName trx
- */
- public MID_DocMovement (MAcctSchema as, ResultSet rs, String trxName)
- {
- super (as, MMovement.class, rs, DOCTYPE_MatMovement, trxName);
- } // Doc_Movement
-
- /**
- * Load Document Details
- * @return error message or null
- */
- protected String loadDocumentDetails()
- {
- setC_Currency_ID(NO_CURRENCY);
- MMovement move = (MMovement)getPO();
- setDateDoc (move.getMovementDate());
- setDateAcct(move.getMovementDate());
- m_Reversal_ID = move.getReversal_ID();//store original (voided/reversed) document
- m_DocStatus = move.getDocStatus();
- // Contained Objects
- p_lines = loadLines(move);
- if (log.isLoggable(Level.FINE)) log.fine("Lines=" + p_lines.length);
- return null;
- } // loadDocumentDetails
-
- /**
- * Load Invoice Line
- * @param move move
- * @return document lines (DocLine_Material)
- */
- private DocLine[] loadLines(MMovement move)
- {
- ArrayList list = new ArrayList();
- MMovementLine[] lines = move.getLines(false);
- if(move.get_ValueAsBoolean("IsAsset"))
- return new DocLine[0];
- for (int i = 0; i < lines.length; i++)
- {
- MMovementLine line = lines[i];
- DocLine docLine = new DocLine (line, this);
- docLine.setQty(line.getMovementQty(), false);
- docLine.setReversalLine_ID(line.getReversalLine_ID());
- if (log.isLoggable(Level.FINE)) log.fine(docLine.toString());
- list.add (docLine);
- }
-
- // Return Array
- DocLine[] dls = new DocLine[list.size()];
- list.toArray(dls);
- return dls;
- } // loadLines
-
- /**
- * Get Balance
- * @return balance (ZERO) - always balanced
- */
- public BigDecimal getBalance()
- {
- BigDecimal retValue = Env.ZERO;
- return retValue;
- } // getBalance
-
- /**
- * Create Facts (the accounting logic) for
- * MMM.
- *
- * Movement
- * Inventory DR CR
- * InventoryTo DR CR
- *
- * @param as account schema
- * @return Fact
- */
- public ArrayList createFacts (MAcctSchema as)
- {
- // create Fact Header
- Fact fact = new Fact(this, as, Fact.POST_Actual);
- setC_Currency_ID(as.getC_Currency_ID());
-
- // Line pointers
- FactLine dr = null;
- FactLine cr = null;
-
- for (int i = 0; i < p_lines.length; i++)
- {
- DocLine line = p_lines[i];
- BigDecimal costs = null;
-
- if (!isReversal(line))
- {
- MProduct product = (MProduct) line.getProduct();
- String costingLevel = product.getCostingLevel(as);
- if (MAcctSchema.COSTINGLEVEL_BatchLot.equals(costingLevel) )
- {
- if (line.getM_AttributeSetInstance_ID() == 0 )
- {
- MMovementLine mLine = (MMovementLine) line.getPO();
- MMovementLineMA mas[] = MMovementLineMA.get(getCtx(), mLine.get_ID(), getTrxName());
- if (mas != null && mas.length > 0 )
- {
- costs = BigDecimal.ZERO;
- for (int j = 0; j < mas.length; j++)
- {
- MMovementLineMA ma = mas[j];
- BigDecimal QtyMA = ma.getMovementQty();
- ProductCost pc = line.getProductCost();
- pc.setQty(QtyMA);
- pc.setM_M_AttributeSetInstance_ID(ma.getM_AttributeSetInstance_ID());
- BigDecimal maCosts = line.getProductCosts(as, line.getAD_Org_ID(), true, "M_MovementLine_ID=? AND IsSOTrx='N'");
-
- costs = costs.add(maCosts);
- }
- }
- }
- else
- {
- costs = line.getProductCosts(as, line.getAD_Org_ID(), true, "M_MovementLine_ID=? AND IsSOTrx='N'");
- }
- }
- else
- {
- // MZ Goodwill
- // if Inventory Move CostDetail exist then get Cost from Cost Detail
- costs = line.getProductCosts(as, line.getAD_Org_ID(), true, "M_MovementLine_ID=? AND IsSOTrx='N'");
- // end MZ
- }
- }
- else
- {
- costs = BigDecimal.ZERO;
- }
-
- // ** Inventory DR CR
- dr = fact.createLine(line,
- line.getAccount(ProductCost.ACCTTYPE_P_Asset, as),
- as.getC_Currency_ID(), costs.negate()); // from (-) CR
- if (dr == null)
- continue;
- dr.setM_Locator_ID(line.getM_Locator_ID());
- dr.setQty(line.getQty().negate()); // outgoing
- if (isReversal(line))
- {
- // Set AmtAcctDr from Original Movement
- if (!dr.updateReverseLine (MMovement.Table_ID,
- m_Reversal_ID, line.getReversalLine_ID(),Env.ONE))
- {
- p_Error = "Original Inventory Move not posted yet";
- return null;
- }
- }
-
- // ** InventoryTo DR CR
- cr = fact.createLine(line,
- line.getAccount(ProductCost.ACCTTYPE_P_Asset, as),
- as.getC_Currency_ID(), costs); // to (+) DR
- if (cr == null)
- continue;
- cr.setM_Locator_ID(line.getM_LocatorTo_ID());
- cr.setQty(line.getQty());
- if (isReversal(line))
- {
- // Set AmtAcctCr from Original Movement
- if (!cr.updateReverseLine (MMovement.Table_ID,
- m_Reversal_ID, line.getReversalLine_ID(),Env.ONE))
- {
- p_Error = "Original Inventory Move not posted yet";
- return null;
- }
- costs = cr.getAcctBalance(); //get original cost
- }
-
- // Only for between-org movements
- if (dr.getAD_Org_ID() != cr.getAD_Org_ID())
- {
- String costingLevel = line.getProduct().getCostingLevel(as);
- if (!MAcctSchema.COSTINGLEVEL_Organization.equals(costingLevel))
- continue;
- //
- String description = line.getDescription();
- if (description == null)
- description = "";
- // Cost Detail From
- if (!MCostDetail.createMovement(as, dr.getAD_Org_ID(), // locator org
- line.getM_Product_ID(), line.getM_AttributeSetInstance_ID(),
- line.get_ID(), 0,
- costs.negate(), line.getQty().negate(), true,
- description + "(|->)", getTrxName()))
- {
- p_Error = "Failed to create cost detail record";
- return null;
- }
- // Cost Detail To
- if (!MCostDetail.createMovement(as, cr.getAD_Org_ID(), // locator org
- line.getM_Product_ID(), line.getM_AttributeSetInstance_ID(),
- line.get_ID(), 0,
- costs, line.getQty(), false,
- description + "(|<-)", getTrxName()))
- {
- p_Error = "Failed to create cost detail record";
- return null;
- }
- }
- }
-
- //
- ArrayList facts = new ArrayList();
- facts.add(fact);
- return facts;
- } // createFact
-
- private boolean isReversal(DocLine line) {
- return m_Reversal_ID !=0 && line.getReversalLine_ID() != 0;
- }
-
-} // Doc_Movement
+/******************************************************************************
+ * 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 balinusa.midsuit.doc;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.logging.Level;
+
+import org.compiere.acct.Doc;
+import org.compiere.acct.DocLine;
+import org.compiere.acct.Fact;
+import org.compiere.acct.FactLine;
+import org.compiere.model.MAcctSchema;
+import org.compiere.model.MCostDetail;
+import org.compiere.model.MMovement;
+import org.compiere.model.MMovementLine;
+import org.compiere.model.MMovementLineMA;
+import org.compiere.model.MProduct;
+import org.compiere.model.ProductCost;
+import org.compiere.util.Env;
+
+/**
+ * Post Invoice Documents.
+ *
+ * Table: M_Movement (323)
+ * Document Types: MMM
+ *
+ * @author Jorg Janke
+ * @author Armen Rizal, Goodwill Consulting
+ * BF [ 1745154 ] Cost in Reversing Material Related Docs
+ * @version $Id: Doc_Movement.java,v 1.3 2006/07/30 00:53:33 jjanke Exp $
+ */
+public class MID_DocMovement extends Doc
+{
+ private int m_Reversal_ID = 0;
+ @SuppressWarnings("unused")
+ private String m_DocStatus = "";
+
+ /**
+ * Constructor
+ * @param as accounting schema
+ * @param rs record
+ * @param trxName trx
+ */
+ public MID_DocMovement (MAcctSchema as, ResultSet rs, String trxName)
+ {
+ super (as, MMovement.class, rs, DOCTYPE_MatMovement, trxName);
+ } // Doc_Movement
+
+ /**
+ * Load Document Details
+ * @return error message or null
+ */
+ protected String loadDocumentDetails()
+ {
+ setC_Currency_ID(NO_CURRENCY);
+ MMovement move = (MMovement)getPO();
+ setDateDoc (move.getMovementDate());
+ setDateAcct(move.getMovementDate());
+ m_Reversal_ID = move.getReversal_ID();//store original (voided/reversed) document
+ m_DocStatus = move.getDocStatus();
+ // Contained Objects
+ p_lines = loadLines(move);
+ if (log.isLoggable(Level.FINE)) log.fine("Lines=" + p_lines.length);
+ return null;
+ } // loadDocumentDetails
+
+ /**
+ * Load Invoice Line
+ * @param move move
+ * @return document lines (DocLine_Material)
+ */
+ private DocLine[] loadLines(MMovement move)
+ {
+ ArrayList list = new ArrayList();
+ MMovementLine[] lines = move.getLines(false);
+ if(move.get_ValueAsBoolean("IsAsset"))
+ return new DocLine[0];
+ for (int i = 0; i < lines.length; i++)
+ {
+ MMovementLine line = lines[i];
+ DocLine docLine = new DocLine (line, this);
+ docLine.setQty(line.getMovementQty(), false);
+ docLine.setReversalLine_ID(line.getReversalLine_ID());
+ if (log.isLoggable(Level.FINE)) log.fine(docLine.toString());
+ list.add (docLine);
+ }
+
+ // Return Array
+ DocLine[] dls = new DocLine[list.size()];
+ list.toArray(dls);
+ return dls;
+ } // loadLines
+
+ /**
+ * Get Balance
+ * @return balance (ZERO) - always balanced
+ */
+ public BigDecimal getBalance()
+ {
+ BigDecimal retValue = Env.ZERO;
+ return retValue;
+ } // getBalance
+
+ /**
+ * Create Facts (the accounting logic) for
+ * MMM.
+ *
+ * Movement
+ * Inventory DR CR
+ * InventoryTo DR CR
+ *
+ * @param as account schema
+ * @return Fact
+ */
+ public ArrayList createFacts (MAcctSchema as)
+ {
+ // create Fact Header
+ Fact fact = new Fact(this, as, Fact.POST_Actual);
+ setC_Currency_ID(as.getC_Currency_ID());
+
+ // Line pointers
+ FactLine dr = null;
+ FactLine cr = null;
+
+ for (int i = 0; i < p_lines.length; i++)
+ {
+ DocLine line = p_lines[i];
+ BigDecimal costs = null;
+
+ if (!isReversal(line))
+ {
+ MProduct product = (MProduct) line.getProduct();
+ String costingLevel = product.getCostingLevel(as);
+ if (MAcctSchema.COSTINGLEVEL_BatchLot.equals(costingLevel) )
+ {
+ if (line.getM_AttributeSetInstance_ID() == 0 )
+ {
+ MMovementLine mLine = (MMovementLine) line.getPO();
+ MMovementLineMA mas[] = MMovementLineMA.get(getCtx(), mLine.get_ID(), getTrxName());
+ if (mas != null && mas.length > 0 )
+ {
+ costs = BigDecimal.ZERO;
+ for (int j = 0; j < mas.length; j++)
+ {
+ MMovementLineMA ma = mas[j];
+ BigDecimal QtyMA = ma.getMovementQty();
+ ProductCost pc = line.getProductCost();
+ pc.setQty(QtyMA);
+ pc.setM_M_AttributeSetInstance_ID(ma.getM_AttributeSetInstance_ID());
+ BigDecimal maCosts = line.getProductCosts(as, line.getAD_Org_ID(), true, "M_MovementLine_ID=? AND IsSOTrx='N'");
+
+ costs = costs.add(maCosts);
+ }
+ }
+ }
+ else
+ {
+ costs = line.getProductCosts(as, line.getAD_Org_ID(), true, "M_MovementLine_ID=? AND IsSOTrx='N'");
+ }
+ }
+ else
+ {
+ // MZ Goodwill
+ // if Inventory Move CostDetail exist then get Cost from Cost Detail
+ costs = line.getProductCosts(as, line.getAD_Org_ID(), true, "M_MovementLine_ID=? AND IsSOTrx='N'");
+ // end MZ
+ }
+ }
+ else
+ {
+ costs = BigDecimal.ZERO;
+ }
+
+ // ** Inventory DR CR
+ dr = fact.createLine(line,
+ line.getAccount(ProductCost.ACCTTYPE_P_Asset, as),
+ as.getC_Currency_ID(), costs.negate()); // from (-) CR
+ if (dr == null)
+ continue;
+ dr.setM_Locator_ID(line.getM_Locator_ID());
+ dr.setQty(line.getQty().negate()); // outgoing
+ if (isReversal(line))
+ {
+ // Set AmtAcctDr from Original Movement
+ if (!dr.updateReverseLine (MMovement.Table_ID,
+ m_Reversal_ID, line.getReversalLine_ID(),Env.ONE))
+ {
+ p_Error = "Original Inventory Move not posted yet";
+ return null;
+ }
+ }
+
+ // ** InventoryTo DR CR
+ cr = fact.createLine(line,
+ line.getAccount(ProductCost.ACCTTYPE_P_Asset, as),
+ as.getC_Currency_ID(), costs); // to (+) DR
+ if (cr == null)
+ continue;
+ cr.setM_Locator_ID(line.getM_LocatorTo_ID());
+ cr.setQty(line.getQty());
+ if (isReversal(line))
+ {
+ // Set AmtAcctCr from Original Movement
+ if (!cr.updateReverseLine (MMovement.Table_ID,
+ m_Reversal_ID, line.getReversalLine_ID(),Env.ONE))
+ {
+ p_Error = "Original Inventory Move not posted yet";
+ return null;
+ }
+ costs = cr.getAcctBalance(); //get original cost
+ }
+
+ // Only for between-org movements
+ if (dr.getAD_Org_ID() != cr.getAD_Org_ID())
+ {
+ String costingLevel = line.getProduct().getCostingLevel(as);
+ if (!MAcctSchema.COSTINGLEVEL_Organization.equals(costingLevel))
+ continue;
+ //
+ String description = line.getDescription();
+ if (description == null)
+ description = "";
+ // Cost Detail From
+ if (!MCostDetail.createMovement(as, dr.getAD_Org_ID(), // locator org
+ line.getM_Product_ID(), line.getM_AttributeSetInstance_ID(),
+ line.get_ID(), 0,
+ costs.negate(), line.getQty().negate(), true,
+ description + "(|->)", getTrxName()))
+ {
+ p_Error = "Failed to create cost detail record";
+ return null;
+ }
+ // Cost Detail To
+ if (!MCostDetail.createMovement(as, cr.getAD_Org_ID(), // locator org
+ line.getM_Product_ID(), line.getM_AttributeSetInstance_ID(),
+ line.get_ID(), 0,
+ costs, line.getQty(), false,
+ description + "(|<-)", getTrxName()))
+ {
+ p_Error = "Failed to create cost detail record";
+ return null;
+ }
+ }
+ }
+
+ //
+ ArrayList facts = new ArrayList();
+ facts.add(fact);
+ return facts;
+ } // createFact
+
+ private boolean isReversal(DocLine line) {
+ return m_Reversal_ID !=0 && line.getReversalLine_ID() != 0;
+ }
+
+} // Doc_Movement
diff --git a/andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_CalloutFactory.java b/balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_CalloutFactory.java
similarity index 62%
rename from andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_CalloutFactory.java
rename to balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_CalloutFactory.java
index 8649c6f..922f31d 100644
--- a/andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_CalloutFactory.java
+++ b/balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_CalloutFactory.java
@@ -1,4 +1,4 @@
-package andromedia.midsuit.factory;
+package balinusa.midsuit.factory;
import java.util.ArrayList;
import java.util.List;
@@ -16,35 +16,35 @@ import org.compiere.model.MProductionLine;
import org.compiere.model.X_C_OrderLine;
import org.compiere.model.X_M_RequisitionLine;
-import andromedia.midsuit.callout.MID_CalloutAnalysisQC;
-import andromedia.midsuit.callout.MID_CalloutCeisaUpload;
-import andromedia.midsuit.callout.MID_CalloutInOut;
-import andromedia.midsuit.callout.MID_CalloutInOutLine;
-import andromedia.midsuit.callout.MID_CalloutInventoryLine;
-import andromedia.midsuit.callout.MID_CalloutInventoryLineMA;
-import andromedia.midsuit.callout.MID_CalloutIsReturnCeisa;
-import andromedia.midsuit.callout.MID_CalloutMovement;
-import andromedia.midsuit.callout.MID_CalloutMovementLineMA;
-import andromedia.midsuit.callout.MID_CalloutOrder;
-import andromedia.midsuit.callout.MID_CalloutOrderCeisa;
-import andromedia.midsuit.callout.MID_CalloutOrderLine;
-import andromedia.midsuit.callout.MID_CalloutOrderLineMA;
-import andromedia.midsuit.callout.MID_CalloutPPO;
-import andromedia.midsuit.callout.MID_CalloutProduction;
-import andromedia.midsuit.callout.MID_CalloutProductionLine;
-import andromedia.midsuit.callout.MID_CalloutRMALineMA;
-import andromedia.midsuit.callout.MID_CalloutRequisition;
-import andromedia.midsuit.callout.MID_CalloutRequisitionLine;
-import andromedia.midsuit.callout.MID_CalloutRequisitionTrxLine;
-import andromedia.midsuit.model.MID_Analysis;
-import andromedia.midsuit.model.MID_MMovement;
-import andromedia.midsuit.model.X_C_OrderLineMA;
-import andromedia.midsuit.model.X_MID_Requisition;
-import andromedia.midsuit.model.X_MID_RequisitionLine;
-import andromedia.midsuit.model.X_M_RMAMA;
-import andromedia.midsuit.model.X_mid_ceisa_order;
-import andromedia.midsuit.model.X_mid_ceisa_upload;
-import andromedia.midsuit.model.X_ps_ppo;
+import balinusa.midsuit.callout.MID_CalloutAnalysisQC;
+import balinusa.midsuit.callout.MID_CalloutCeisaUpload;
+import balinusa.midsuit.callout.MID_CalloutInOut;
+import balinusa.midsuit.callout.MID_CalloutInOutLine;
+import balinusa.midsuit.callout.MID_CalloutInventoryLine;
+import balinusa.midsuit.callout.MID_CalloutInventoryLineMA;
+import balinusa.midsuit.callout.MID_CalloutIsReturnCeisa;
+import balinusa.midsuit.callout.MID_CalloutMovement;
+import balinusa.midsuit.callout.MID_CalloutMovementLineMA;
+import balinusa.midsuit.callout.MID_CalloutOrder;
+import balinusa.midsuit.callout.MID_CalloutOrderCeisa;
+import balinusa.midsuit.callout.MID_CalloutOrderLine;
+import balinusa.midsuit.callout.MID_CalloutOrderLineMA;
+import balinusa.midsuit.callout.MID_CalloutPPO;
+import balinusa.midsuit.callout.MID_CalloutProduction;
+import balinusa.midsuit.callout.MID_CalloutProductionLine;
+import balinusa.midsuit.callout.MID_CalloutRMALineMA;
+import balinusa.midsuit.callout.MID_CalloutRequisition;
+import balinusa.midsuit.callout.MID_CalloutRequisitionLine;
+import balinusa.midsuit.callout.MID_CalloutRequisitionTrxLine;
+import balinusa.midsuit.model.MID_Analysis;
+import balinusa.midsuit.model.MID_MMovement;
+import balinusa.midsuit.model.X_C_OrderLineMA;
+import balinusa.midsuit.model.X_MID_Requisition;
+import balinusa.midsuit.model.X_MID_RequisitionLine;
+import balinusa.midsuit.model.X_M_RMAMA;
+import balinusa.midsuit.model.X_mid_ceisa_order;
+import balinusa.midsuit.model.X_mid_ceisa_upload;
+import balinusa.midsuit.model.X_ps_ppo;
public class MID_CalloutFactory implements IColumnCalloutFactory{
diff --git a/andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_CreateFromFactory.java b/balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_CreateFromFactory.java
similarity index 80%
rename from andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_CreateFromFactory.java
rename to balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_CreateFromFactory.java
index aee2003..9330704 100644
--- a/andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_CreateFromFactory.java
+++ b/balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_CreateFromFactory.java
@@ -1,4 +1,4 @@
-package andromedia.midsuit.factory;
+package balinusa.midsuit.factory;
import java.util.logging.Logger;
@@ -11,10 +11,10 @@ import org.compiere.model.X_M_InOut;
import org.compiere.model.X_M_RMA;
import org.compiere.util.CLogger;
-import andromedia.midsuit.form.MID_WCreateFromInvoice;
-import andromedia.midsuit.form.MID_WCreateFromOrder;
-import andromedia.midsuit.form.MID_WCreateFromRMA;
-import andromedia.midsuit.form.MID_WCreateFromShipment;
+import balinusa.midsuit.form.MID_WCreateFromInvoice;
+import balinusa.midsuit.form.MID_WCreateFromOrder;
+import balinusa.midsuit.form.MID_WCreateFromRMA;
+import balinusa.midsuit.form.MID_WCreateFromShipment;
public class MID_CreateFromFactory implements ICreateFromFactory{
private CLogger log = CLogger.getCLogger(getClass());
diff --git a/andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_DocFactory.java b/balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_DocFactory.java
similarity index 80%
rename from andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_DocFactory.java
rename to balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_DocFactory.java
index b847508..7189443 100644
--- a/andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_DocFactory.java
+++ b/balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_DocFactory.java
@@ -1,4 +1,4 @@
-package andromedia.midsuit.factory;
+package balinusa.midsuit.factory;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@@ -16,18 +16,18 @@ import org.compiere.util.DB;
import org.compiere.util.Env;
import org.eevolution.model.MDDOrder;
-import andromedia.midsuit.doc.MID_DocAllocationHdr;
-import andromedia.midsuit.doc.MID_DocAnalysis;
-import andromedia.midsuit.doc.MID_DocDDOrder;
-import andromedia.midsuit.doc.MID_DocInvoice;
-import andromedia.midsuit.doc.MID_DocMRPPPO;
-import andromedia.midsuit.doc.MID_DocMatchInv;
-import andromedia.midsuit.doc.MID_DocMidRequsiition;
-import andromedia.midsuit.doc.MID_DocMovement;
-import andromedia.midsuit.model.MID_Analysis;
-import andromedia.midsuit.model.MID_MMovement;
-import andromedia.midsuit.model.MID_MRequisitionTrx;
-import andromedia.midsuit.model.MID_PPO;
+import balinusa.midsuit.doc.MID_DocAllocationHdr;
+import balinusa.midsuit.doc.MID_DocAnalysis;
+import balinusa.midsuit.doc.MID_DocDDOrder;
+import balinusa.midsuit.doc.MID_DocInvoice;
+import balinusa.midsuit.doc.MID_DocMRPPPO;
+import balinusa.midsuit.doc.MID_DocMatchInv;
+import balinusa.midsuit.doc.MID_DocMidRequsiition;
+import balinusa.midsuit.doc.MID_DocMovement;
+import balinusa.midsuit.model.MID_Analysis;
+import balinusa.midsuit.model.MID_MMovement;
+import balinusa.midsuit.model.MID_MRequisitionTrx;
+import balinusa.midsuit.model.MID_PPO;
public class MID_DocFactory implements IDocFactory{
diff --git a/andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_FormFactory.java b/balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_FormFactory.java
similarity index 97%
rename from andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_FormFactory.java
rename to balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_FormFactory.java
index 36ab0cd..3907991 100644
--- a/andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_FormFactory.java
+++ b/balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_FormFactory.java
@@ -1,4 +1,4 @@
-package andromedia.midsuit.factory;
+package balinusa.midsuit.factory;
import java.util.logging.Level;
diff --git a/andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_ModelFactory.java b/balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_ModelFactory.java
similarity index 73%
rename from andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_ModelFactory.java
rename to balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_ModelFactory.java
index c42e3eb..c6f540e 100644
--- a/andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_ModelFactory.java
+++ b/balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_ModelFactory.java
@@ -1,4 +1,4 @@
-package andromedia.midsuit.factory;
+package balinusa.midsuit.factory;
import java.lang.reflect.Constructor;
import java.sql.ResultSet;
@@ -11,47 +11,47 @@ import org.compiere.model.MMovementLine;
import org.compiere.model.PO;
import org.compiere.util.Env;
-import andromedia.midsuit.model.MID_Aging;
-import andromedia.midsuit.model.MID_Analysis;
-import andromedia.midsuit.model.MID_AnalysisLine;
-import andromedia.midsuit.model.MID_AnalysisPro;
-import andromedia.midsuit.model.MID_Ceisa_Order;
-import andromedia.midsuit.model.MID_MAssetAddition;
-import andromedia.midsuit.model.MID_MAssetDisposed;
-import andromedia.midsuit.model.MID_MBillingList;
-import andromedia.midsuit.model.MID_MBillingListLine;
-import andromedia.midsuit.model.MID_MDDOrder;
-import andromedia.midsuit.model.MID_MDDOrderLine;
-import andromedia.midsuit.model.MID_MDepreciationEntry;
-import andromedia.midsuit.model.MID_MInventory;
-import andromedia.midsuit.model.MID_MInvoice;
-import andromedia.midsuit.model.MID_MOrder;
-import andromedia.midsuit.model.MID_MOrderLine;
-import andromedia.midsuit.model.MID_MPayment;
-import andromedia.midsuit.model.MID_MProductionConfirm;
-import andromedia.midsuit.model.MID_MRequisition;
-import andromedia.midsuit.model.MID_MRequisitionLine;
-import andromedia.midsuit.model.MID_MRequisitionTrx;
-import andromedia.midsuit.model.MID_MRequisitionTrxLine;
-import andromedia.midsuit.model.MID_MRequsitionTax;
-import andromedia.midsuit.model.MID_PPO;
-import andromedia.midsuit.model.MID_PPOLine;
-import andromedia.midsuit.model.MID_UnrealizedRate;
-import andromedia.midsuit.model.MID_UnrealizedRateLine;
-import andromedia.midsuit.model.MWarehouse;
-import andromedia.midsuit.model.X_C_OrderLineMA;
-import andromedia.midsuit.model.X_MID_UploadPEB;
-import andromedia.midsuit.model.X_MID_UploadPEBLine;
-import andromedia.midsuit.model.X_MID_UploadTPB;
-import andromedia.midsuit.model.X_MID_UploadTPBLine;
-import andromedia.midsuit.model.X_MID_UploadTPBLineDet;
-import andromedia.midsuit.model.X_M_RMAMA;
-import andromedia.midsuit.model.X_M_RequisitionTax;
-import andromedia.midsuit.model.X_mid_ceisa_entitas;
-import andromedia.midsuit.model.X_mid_ceisa_order;
-import andromedia.midsuit.model.X_mid_ceisa_orderline;
-import andromedia.midsuit.model.X_mid_ceisa_upload;
-import andromedia.midsuit.model.X_zpos_Cashier;
+import balinusa.midsuit.model.MID_Aging;
+import balinusa.midsuit.model.MID_Analysis;
+import balinusa.midsuit.model.MID_AnalysisLine;
+import balinusa.midsuit.model.MID_AnalysisPro;
+import balinusa.midsuit.model.MID_Ceisa_Order;
+import balinusa.midsuit.model.MID_MAssetAddition;
+import balinusa.midsuit.model.MID_MAssetDisposed;
+import balinusa.midsuit.model.MID_MBillingList;
+import balinusa.midsuit.model.MID_MBillingListLine;
+import balinusa.midsuit.model.MID_MDDOrder;
+import balinusa.midsuit.model.MID_MDDOrderLine;
+import balinusa.midsuit.model.MID_MDepreciationEntry;
+import balinusa.midsuit.model.MID_MInventory;
+import balinusa.midsuit.model.MID_MInvoice;
+import balinusa.midsuit.model.MID_MOrder;
+import balinusa.midsuit.model.MID_MOrderLine;
+import balinusa.midsuit.model.MID_MPayment;
+import balinusa.midsuit.model.MID_MProductionConfirm;
+import balinusa.midsuit.model.MID_MRequisition;
+import balinusa.midsuit.model.MID_MRequisitionLine;
+import balinusa.midsuit.model.MID_MRequisitionTrx;
+import balinusa.midsuit.model.MID_MRequisitionTrxLine;
+import balinusa.midsuit.model.MID_MRequsitionTax;
+import balinusa.midsuit.model.MID_PPO;
+import balinusa.midsuit.model.MID_PPOLine;
+import balinusa.midsuit.model.MID_UnrealizedRate;
+import balinusa.midsuit.model.MID_UnrealizedRateLine;
+import balinusa.midsuit.model.MWarehouse;
+import balinusa.midsuit.model.X_C_OrderLineMA;
+import balinusa.midsuit.model.X_MID_UploadPEB;
+import balinusa.midsuit.model.X_MID_UploadPEBLine;
+import balinusa.midsuit.model.X_MID_UploadTPB;
+import balinusa.midsuit.model.X_MID_UploadTPBLine;
+import balinusa.midsuit.model.X_MID_UploadTPBLineDet;
+import balinusa.midsuit.model.X_M_RMAMA;
+import balinusa.midsuit.model.X_M_RequisitionTax;
+import balinusa.midsuit.model.X_mid_ceisa_entitas;
+import balinusa.midsuit.model.X_mid_ceisa_order;
+import balinusa.midsuit.model.X_mid_ceisa_orderline;
+import balinusa.midsuit.model.X_mid_ceisa_upload;
+import balinusa.midsuit.model.X_zpos_Cashier;
public class MID_ModelFactory implements IModelFactory{
private static HashMap mapTableModels = new HashMap();
diff --git a/andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_ProcessFactory.java b/balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_ProcessFactory.java
similarity index 93%
rename from andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_ProcessFactory.java
rename to balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_ProcessFactory.java
index e4ae2cb..f1205f6 100644
--- a/andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_ProcessFactory.java
+++ b/balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_ProcessFactory.java
@@ -1,4 +1,4 @@
-package andromedia.midsuit.factory;
+package balinusa.midsuit.factory;
import org.adempiere.base.IProcessFactory;
import org.compiere.process.ProcessCall;
diff --git a/andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_ValidatorFactory.java b/balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_ValidatorFactory.java
similarity index 87%
rename from andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_ValidatorFactory.java
rename to balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_ValidatorFactory.java
index 85c16da..fa391e5 100644
--- a/andromeida.midsuit.project/src/balinusa/midsuit/factory/MID_ValidatorFactory.java
+++ b/balinusa.midsuit.project/src/balinusa/midsuit/factory/MID_ValidatorFactory.java
@@ -1,4 +1,4 @@
-package andromedia.midsuit.factory;
+package balinusa.midsuit.factory;
import org.adempiere.base.event.AbstractEventHandler;
import org.adempiere.base.event.IEventTopics;
@@ -26,23 +26,23 @@ import org.compiere.model.PO;
import org.compiere.util.CLogger;
import org.osgi.service.event.Event;
-import andromedia.midsuit.model.X_M_RequisitionTax;
-import andromedia.midsuit.validator.MID_CurrencyRateValidator;
-import andromedia.midsuit.validator.MID_DeprWorkfileValidator;
-import andromedia.midsuit.validator.MID_InOutValidator;
-import andromedia.midsuit.validator.MID_InventoryLineMAValidator;
-import andromedia.midsuit.validator.MID_InventoryLineValidator;
-import andromedia.midsuit.validator.MID_InventoryValidator;
-import andromedia.midsuit.validator.MID_InvoiceTaxValidator;
-import andromedia.midsuit.validator.MID_JournalValidator;
-import andromedia.midsuit.validator.MID_OrderLineValidator;
-import andromedia.midsuit.validator.MID_OrderTaxValidator;
-import andromedia.midsuit.validator.MID_OrderValidator;
-import andromedia.midsuit.validator.MID_PaymentValidator;
-import andromedia.midsuit.validator.MID_ProductValidator;
-import andromedia.midsuit.validator.MID_ProductionLineValidator;
-import andromedia.midsuit.validator.MID_ProductionValidator;
-import andromedia.midsuit.validator.MID_RequisitionTaxValidator;
+import balinusa.midsuit.model.X_M_RequisitionTax;
+import balinusa.midsuit.validator.MID_CurrencyRateValidator;
+import balinusa.midsuit.validator.MID_DeprWorkfileValidator;
+import balinusa.midsuit.validator.MID_InOutValidator;
+import balinusa.midsuit.validator.MID_InventoryLineMAValidator;
+import balinusa.midsuit.validator.MID_InventoryLineValidator;
+import balinusa.midsuit.validator.MID_InventoryValidator;
+import balinusa.midsuit.validator.MID_InvoiceTaxValidator;
+import balinusa.midsuit.validator.MID_JournalValidator;
+import balinusa.midsuit.validator.MID_OrderLineValidator;
+import balinusa.midsuit.validator.MID_OrderTaxValidator;
+import balinusa.midsuit.validator.MID_OrderValidator;
+import balinusa.midsuit.validator.MID_PaymentValidator;
+import balinusa.midsuit.validator.MID_ProductValidator;
+import balinusa.midsuit.validator.MID_ProductionLineValidator;
+import balinusa.midsuit.validator.MID_ProductionValidator;
+import balinusa.midsuit.validator.MID_RequisitionTaxValidator;
public class MID_ValidatorFactory extends AbstractEventHandler {
public CLogger log = CLogger.getCLogger(MID_ValidatorFactory.class);
diff --git a/andromeida.midsuit.project/src/balinusa/midsuit/form/BillingListGenerate.java b/balinusa.midsuit.project/src/balinusa/midsuit/form/BillingListGenerate.java
similarity index 98%
rename from andromeida.midsuit.project/src/balinusa/midsuit/form/BillingListGenerate.java
rename to balinusa.midsuit.project/src/balinusa/midsuit/form/BillingListGenerate.java
index bfd0b63..88514ad 100644
--- a/andromeida.midsuit.project/src/balinusa/midsuit/form/BillingListGenerate.java
+++ b/balinusa.midsuit.project/src/balinusa/midsuit/form/BillingListGenerate.java
@@ -1,4 +1,4 @@
-package andromedia.midsuit.form;
+package balinusa.midsuit.form;
import java.math.BigDecimal;
import java.security.Timestamp;
@@ -23,8 +23,8 @@ import org.compiere.util.KeyNamePair;
import org.compiere.util.Msg;
import org.compiere.util.Trx;
-import andromedia.midsuit.model.MID_MBillingList;
-import andromedia.midsuit.model.MID_MBillingListLine;
+import balinusa.midsuit.model.MID_MBillingList;
+import balinusa.midsuit.model.MID_MBillingListLine;
public class BillingListGenerate extends GenForm {
diff --git a/andromeida.midsuit.project/src/balinusa/midsuit/form/MID_CreateFromInvoice.java b/balinusa.midsuit.project/src/balinusa/midsuit/form/MID_CreateFromInvoice.java
similarity index 97%
rename from andromeida.midsuit.project/src/balinusa/midsuit/form/MID_CreateFromInvoice.java
rename to balinusa.midsuit.project/src/balinusa/midsuit/form/MID_CreateFromInvoice.java
index 6f87d13..071c8d8 100644
--- a/andromeida.midsuit.project/src/balinusa/midsuit/form/MID_CreateFromInvoice.java
+++ b/balinusa.midsuit.project/src/balinusa/midsuit/form/MID_CreateFromInvoice.java
@@ -1,635 +1,635 @@
-package andromedia.midsuit.form;
-
-import java.math.BigDecimal;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Vector;
-import java.util.logging.Level;
-
-import org.compiere.apps.IStatusBar;
-import org.compiere.grid.CreateFrom;
-import org.compiere.minigrid.IMiniTable;
-import org.compiere.model.GridTab;
-import org.compiere.model.MCurrency;
-import org.compiere.model.MInOut;
-import org.compiere.model.MInOutLine;
-import org.compiere.model.MInvoice;
-import org.compiere.model.MInvoiceLine;
-import org.compiere.model.MInvoicePaySchedule;
-import org.compiere.model.MOrder;
-import org.compiere.model.MOrderLine;
-import org.compiere.model.MOrderPaySchedule;
-import org.compiere.model.MOrg;
-import org.compiere.model.MProduct;
-import org.compiere.model.MRMA;
-import org.compiere.model.MRMALine;
-import org.compiere.model.MUOMConversion;
-import org.compiere.model.PO;
-import org.compiere.util.DB;
-import org.compiere.util.DisplayType;
-import org.compiere.util.Env;
-import org.compiere.util.KeyNamePair;
-import org.compiere.util.Msg;
-
-public abstract class MID_CreateFromInvoice extends CreateFrom {
-
- protected MInOut m_inout = null;
- MOrg org = new MOrg(Env.getCtx(), Env.getAD_Org_ID(Env.getCtx()), null);
-
- /**
- * Protected Constructor
- * @param mTab MTab
- */
- public MID_CreateFromInvoice(GridTab mTab)
- {
- super(mTab);
- if (log.isLoggable(Level.INFO)) log.info(mTab.toString());
- } // VCreateFromInvoice
-
- /**
- * Dynamic Init
- * @return true if initialized
- */
- public boolean dynInit() throws Exception
- {
- log.config("");
- setTitle(Msg.getElement(Env.getCtx(), "C_Invoice_ID", false) + " .. " + Msg.translate(Env.getCtx(), "CreateFrom"));
-
- return true;
- } // dynInit
-
- /**
- * Load PBartner dependent Order/Invoice/Shipment Field.
- * @param C_BPartner_ID
- */
- protected ArrayList loadShipmentData (int C_BPartner_ID)
- {
- String isSOTrxParam = isSOTrx ? "Y":"N";
- ArrayList list = new ArrayList();
-
- // Display
- StringBuffer display = new StringBuffer("s.DocumentNo||' - '||")
- .append(DB.TO_CHAR("s.MovementDate", DisplayType.Date, Env.getAD_Language(Env.getCtx())));
- //
- StringBuffer sql = new StringBuffer("SELECT s.M_InOut_ID,").append(display)
- .append(" FROM M_InOut s "
- + "WHERE s.C_BPartner_ID=? AND s.IsSOTrx=? AND s.DocStatus IN ('CL','CO')"
- + " AND s.M_InOut_ID IN "
- + "(SELECT sl.M_InOut_ID FROM M_InOutLine sl");
- if(!isSOTrx)
- sql.append(" LEFT OUTER JOIN M_MatchInv mi ON (sl.M_InOutLine_ID=mi.M_InOutLine_ID) "
- + " JOIN M_InOut s2 ON (sl.M_InOut_ID=s2.M_InOut_ID) "
- + " WHERE s2.C_BPartner_ID=? AND s2.IsSOTrx=? AND s2.DocStatus IN ('CL','CO') "
- + " GROUP BY sl.M_InOut_ID,sl.MovementQty,mi.M_InOutLine_ID"
- + " HAVING (sl.MovementQty<>SUM(mi.Qty) AND mi.M_InOutLine_ID IS NOT NULL)"
- + " OR mi.M_InOutLine_ID IS NULL ");
- else
- sql.append(" INNER JOIN M_InOut s2 ON (sl.M_InOut_ID=s2.M_InOut_ID)"
- + " LEFT JOIN C_InvoiceLine il ON sl.M_InOutLine_ID = il.M_InOutLine_ID"
- + " WHERE s2.C_BPartner_ID=? AND s2.IsSOTrx=? AND s2.DocStatus IN ('CL','CO')"
- + " GROUP BY sl.M_InOutLine_ID"
- + " HAVING sl.MovementQty - sum(COALESCE(il.QtyInvoiced,0)) > 0");
- sql.append(") ORDER BY s.MovementDate");
- PreparedStatement pstmt = null;
- ResultSet rs = null;
- try
- {
- pstmt = DB.prepareStatement(sql.toString(), null);
- pstmt.setInt(1, C_BPartner_ID);
- pstmt.setString(2, isSOTrxParam);
- pstmt.setInt(3, C_BPartner_ID);
- pstmt.setString(4, isSOTrxParam);
- rs = pstmt.executeQuery();
- while (rs.next())
- {
- list.add(new KeyNamePair(rs.getInt(1), rs.getString(2)));
- }
- }
- catch (SQLException e)
- {
- log.log(Level.SEVERE, sql.toString(), e);
- }
- finally
- {
- DB.close(rs, pstmt);
- rs = null;
- pstmt = null;
- }
-
- return list;
- }
-
- /**
- * Load PBartner dependent Order/Invoice/Shipment Field.
- * @param C_BPartner_ID BPartner
- */
- protected ArrayList loadRMAData(int C_BPartner_ID) {
- ArrayList list = new ArrayList();
-
- String sqlStmt = "SELECT r.M_RMA_ID, r.DocumentNo || '-' || r.Amt from M_RMA r "
- + "WHERE ISSOTRX=? AND r.DocStatus in ('CO', 'CL') "
- + "AND r.C_BPartner_ID=? "
- + "AND NOT EXISTS (SELECT * FROM C_Invoice inv "
- + "WHERE inv.M_RMA_ID=r.M_RMA_ID AND inv.DocStatus IN ('CO', 'CL'))";
-
- PreparedStatement pstmt = null;
- ResultSet rs = null;
- try {
- pstmt = DB.prepareStatement(sqlStmt, null);
- pstmt.setString(1, isSOTrx? "Y" : "N");
- pstmt.setInt(2, C_BPartner_ID);
- rs = pstmt.executeQuery();
- while (rs.next()) {
- list.add(new KeyNamePair(rs.getInt(1), rs.getString(2)));
- }
- } catch (SQLException e) {
- log.log(Level.SEVERE, sqlStmt.toString(), e);
- } finally{
- DB.close(rs, pstmt);
- rs = null;
- pstmt = null;
- }
-
- return list;
- }
-
- /**
- * Load Data - Shipment not invoiced
- * @param M_InOut_ID InOut
- */
- protected Vector> getShipmentData(int M_InOut_ID)
- {
- if (log.isLoggable(Level.CONFIG)) log.config("M_InOut_ID=" + M_InOut_ID);
- MInOut inout = new MInOut(Env.getCtx(), M_InOut_ID, null);
- p_order = null;
- m_inout = inout;
- if (inout.getC_Order_ID() != 0)
- p_order = new MOrder (Env.getCtx(), inout.getC_Order_ID(), null);
-
- m_rma = null;
- if (inout.getM_RMA_ID() != 0)
- m_rma = new MRMA (Env.getCtx(), inout.getM_RMA_ID(), null);
-
- //
- Vector> data = new Vector>();
- StringBuilder sql = new StringBuilder("SELECT "); // QtyEntered
- if(!isSOTrx)
- sql.append("l.MovementQty-SUM(COALESCE(mi.Qty, 0)),");
- else
- sql.append("l.MovementQty-SUM(COALESCE(il.QtyInvoiced,0)),");
- sql.append(" l.QtyEntered/l.MovementQty,"
- + " l.C_UOM_ID, COALESCE(uom.UOMSymbol, uom.Name)," // 3..4
- + " l.M_Product_ID, p.Name, po.VendorProductNo, l.M_InOutLine_ID, l.Line," // 5..9
- + " l.C_OrderLine_ID " // 10
- + " FROM M_InOutLine l "
- );
- if (Env.isBaseLanguage(Env.getCtx(), "C_UOM"))
- sql.append(" LEFT OUTER JOIN C_UOM uom ON (l.C_UOM_ID=uom.C_UOM_ID)");
- else
- sql.append(" LEFT OUTER JOIN C_UOM_Trl uom ON (l.C_UOM_ID=uom.C_UOM_ID AND uom.AD_Language='")
- .append(Env.getAD_Language(Env.getCtx())).append("')");
-
- sql.append(" LEFT OUTER JOIN M_Product p ON (l.M_Product_ID=p.M_Product_ID)")
- .append(" INNER JOIN M_InOut io ON (l.M_InOut_ID=io.M_InOut_ID)");
- if(!isSOTrx)
- sql.append(" LEFT OUTER JOIN M_MatchInv mi ON (l.M_InOutLine_ID=mi.M_InOutLine_ID)");
- else
- sql.append(" LEFT JOIN C_InvoiceLine il ON l.M_InOutLine_ID = il.M_InOutLine_ID");
- sql.append(" LEFT OUTER JOIN M_Product_PO po ON (l.M_Product_ID = po.M_Product_ID AND io.C_BPartner_ID = po.C_BPartner_ID)")
-
- .append(" WHERE l.M_InOut_ID=? AND l.MovementQty<>0 ")
- .append("GROUP BY l.MovementQty, l.QtyEntered/l.MovementQty, "
- + "l.C_UOM_ID, COALESCE(uom.UOMSymbol, uom.Name), "
- + "l.M_Product_ID, p.Name, po.VendorProductNo, l.M_InOutLine_ID, l.Line, l.C_OrderLine_ID ");
- if(!isSOTrx)
- sql.append(" HAVING l.MovementQty-SUM(COALESCE(mi.Qty, 0)) <>0");
- else
- sql.append(" HAVING l.MovementQty-SUM(COALESCE(il.QtyInvoiced,0)) <>0");
- sql.append("ORDER BY l.Line");
- PreparedStatement pstmt = null;
- ResultSet rs = null;
- try
- {
- pstmt = DB.prepareStatement(sql.toString(), null);
- pstmt.setInt(1, M_InOut_ID);
- rs = pstmt.executeQuery();
- while (rs.next())
- {
- Vector