IDEMPIERE-215 Costing: Drop M_Product_Costing.

This commit is contained in:
Heng Sin Low 2012-04-04 18:11:01 +08:00
parent 1982a8b331
commit 32c0db8136
17 changed files with 7 additions and 1696 deletions

View File

@ -60,7 +60,6 @@ public class CostUpdate extends SvrProcess
private static final String TO_FutureStandardCost = "f";
private static final String TO_LastInvoicePrice = "i";
private static final String TO_LastPOPrice = "p";
private static final String TO_OldStandardCost = "x";
/** Standard Cost Element */
private MCostElement m_ce = null;
@ -464,10 +463,6 @@ public class CostUpdate extends SvrProcess
retValue = xCost.getCurrentCostPrice();
}
// Old Std Costs
else if (to.equals(TO_OldStandardCost))
retValue = getOldCurrentCostPrice(cost);
// Price List
else if (to.equals(TO_PriceListLimit))
retValue = getPrice(cost);
@ -496,51 +491,6 @@ public class CostUpdate extends SvrProcess
return ce;
} // getCostElement
/**
* Get Old Current Cost Price
* @param cost costs
* @return price if found
*/
private BigDecimal getOldCurrentCostPrice(MCost cost)
{
BigDecimal retValue = null;
String sql = "SELECT CostStandard, CurrentCostPrice "
+ "FROM M_Product_Costing "
+ "WHERE M_Product_ID=? AND C_AcctSchema_ID=?";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, null);
pstmt.setInt (1, cost.getM_Product_ID());
pstmt.setInt (2, cost.getC_AcctSchema_ID());
ResultSet rs = pstmt.executeQuery ();
if (rs.next ())
{
retValue = rs.getBigDecimal(1);
if (retValue == null || retValue.signum() == 0)
retValue = rs.getBigDecimal(2);
}
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
log.log (Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
return retValue;
} // getOldCurrentCostPrice
/**
* Get Price from Price List
* @param cost cost record

View File

@ -1,293 +0,0 @@
/******************************************************************************
* 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 *
* Portions created by Carlos Ruiz are Copyright (C) 2005 QSS Ltda.
* Contributor(s): Carlos Ruiz (globalqss)
*****************************************************************************/
package org.compiere.process;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import org.compiere.util.AdempiereUserError;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
import org.compiere.util.ValueNamePair;
/**
* Title: Create the (new) costing information
* Description:
* - (optionally) update FutureCostPrice according to Parameter
* - (optionally) set CostStandard to FutureCostPrice
* - set CurrentCostPrice to cost depending on primary AcctSchema
*
* @author Carlos Ruiz (globalqss)
* @version $Id: M_Product_CostingUpdate.java,v 1.0 2005/09/26 22:28:00 globalqss Exp $
*/
public class M_Product_CostingUpdate extends SvrProcess
{
/** The Record */
private int p_Record_ID = 0;
private int p_AD_Client_ID = -1;
private int p_M_Product_Category_ID = -1;
private String p_SetFutureCostTo;
private int p_M_PriceList_Version_ID = -1;
private String p_SetStandardCost;
private String v_CostingMethod;
/**
* Prepare - e.g., get Parameters.
*/
protected void prepare()
{
ProcessInfoParameter[] para = getParameter();
for (int i = 0; i < para.length; i++)
{
String name = para[i].getParameterName();
if (para[i].getParameter() == null)
;
else if (name.equals("AD_Client_ID"))
p_AD_Client_ID = para[i].getParameterAsInt();
else if (name.equals("M_Product_Category_ID"))
p_M_Product_Category_ID = para[i].getParameterAsInt();
else if (name.equals("SetFutureCostTo"))
p_SetFutureCostTo = (String) para[i].getParameter();
else if (name.equals("M_PriceList_Version_ID"))
p_M_PriceList_Version_ID = para[i].getParameterAsInt();
else if (name.equals("SetStandardCost"))
p_SetStandardCost = (String) para[i].getParameter();
else
log.log(Level.SEVERE, "Unknown Parameter: " + name);
}
p_Record_ID = getRecord_ID();
} // prepare
/**
* Process
* @return message
* @throws Exception
*/
protected String doIt() throws Exception
{
StringBuffer sql = null;
int no = 0;
int no1 = 0;
int no2 = 0;
log.info("Create the (new) costing information");
// ========== (1) Set Future Cost To ==========
if (p_SetFutureCostTo.equals("S")) {
// S - Standard Cost
log.info("Set to Standard Cost");
sql = new StringBuffer(
"UPDATE M_Product_Costing " +
"SET FutureCostPrice = CostStandard " +
"WHERE AD_Client_ID=" + p_AD_Client_ID + " AND " +
"("+ p_M_Product_Category_ID + " = -1 OR " +
"EXISTS (SELECT * FROM M_Product p " +
"WHERE p.M_Product_Category_ID= " + p_M_Product_Category_ID + " " +
"AND p.M_Product_ID=M_Product_Costing.M_Product_ID))");
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no == -1) raiseError("Set to Standard Cost:ERROR", sql.toString());
} else if (p_SetFutureCostTo.equals("DP")) {
// DP - Difference PO
log.info("Set to Difference PO");
sql = new StringBuffer(
"UPDATE M_Product_Costing " +
"SET FutureCostPrice = CostStandard + (CostStandardPOAmt/CostStandardPOQty) " +
"WHERE CostStandardPOQty <> 0 AND " +
"CostStandardPOAmt <> 0 AND " +
"AD_Client_ID="+p_AD_Client_ID+" AND " +
"("+ p_M_Product_Category_ID + " = -1 OR " +
"EXISTS (SELECT * FROM M_Product p " +
"WHERE p.M_Product_Category_ID="+p_M_Product_Category_ID+" AND " +
"p.M_Product_ID=M_Product_Costing.M_Product_ID))");
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no == -1) raiseError("Set to Difference PO:ERROR", sql.toString());
} else if (p_SetFutureCostTo.equals("DI")) {
// DI - Difference Invoice
log.info("Set to Difference Inv");
sql = new StringBuffer(
"UPDATE M_Product_Costing " +
"SET FutureCostPrice = CostStandard + (CostStandardCumAmt/CostStandardCumQty) " +
"WHERE CostStandardCumQty <> 0 AND " +
"CostStandardCumAmt <> 0 AND " +
"AD_Client_ID="+p_AD_Client_ID+" AND " +
"("+ p_M_Product_Category_ID + " = -1 OR " +
"EXISTS (SELECT * FROM M_Product p " +
"WHERE p.M_Product_Category_ID="+p_M_Product_Category_ID+" AND " +
"p.M_Product_ID=M_Product_Costing.M_Product_ID))");
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no == -1) raiseError("Set to Difference Inv:ERROR", sql.toString());
} else if (p_SetFutureCostTo.equals("P")) {
// P - Last PO Price
log.info("Set to PO Price");
sql = new StringBuffer(
"UPDATE M_Product_Costing " +
"SET FutureCostPrice = PriceLastPO " +
"WHERE PriceLastPO <> 0 AND " +
"AD_Client_ID="+p_AD_Client_ID+" AND " +
"("+ p_M_Product_Category_ID + " = -1 OR " +
"EXISTS (SELECT * FROM M_Product p " +
"WHERE p.M_Product_Category_ID="+p_M_Product_Category_ID+" AND " +
"p.M_Product_ID=M_Product_Costing.M_Product_ID))");
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no == -1) raiseError("Set to PO Price:ERROR", sql.toString());
} else if (p_SetFutureCostTo.equals("I")) {
// L - Last Inv Price
log.info("Set to Inv Price");
sql = new StringBuffer(
"UPDATE M_Product_Costing " +
"SET FutureCostPrice = PriceLastInv " +
"WHERE PriceLastInv <> 0 AND " +
"AD_Client_ID="+p_AD_Client_ID+" AND " +
"("+ p_M_Product_Category_ID + " = -1 OR " +
"EXISTS (SELECT * FROM M_Product p " +
"WHERE p.M_Product_Category_ID="+p_M_Product_Category_ID+" AND " +
"p.M_Product_ID=M_Product_Costing.M_Product_ID))");
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no == -1) raiseError("Set to Inv Price:ERROR", sql.toString());
} else if (p_SetFutureCostTo.equals("A")) {
// A - Average Cost
log.info("Set to Average Cost");
sql = new StringBuffer(
"UPDATE M_Product_Costing " +
"SET FutureCostPrice = CostAverage " +
"WHERE CostAverage <> 0 AND " +
"AD_Client_ID="+p_AD_Client_ID+" AND " +
"("+ p_M_Product_Category_ID + " = -1 OR " +
"EXISTS (SELECT * FROM M_Product p " +
"WHERE p.M_Product_Category_ID="+p_M_Product_Category_ID+" AND " +
"p.M_Product_ID=M_Product_Costing.M_Product_ID))");
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no == -1) raiseError("Set to Average Cost:ERROR", sql.toString());
} else if (p_SetFutureCostTo.equals("LL") && p_M_PriceList_Version_ID > 0) {
// A - Average Cost
log.info("Set to PriceList " + p_M_PriceList_Version_ID);
sql = new StringBuffer(
"UPDATE M_Product_Costing " +
"SET FutureCostPrice = " +
"(SELECT pp.PriceLimit " +
"FROM M_ProductPrice pp " +
"WHERE pp.M_PriceList_Version_ID="+p_M_PriceList_Version_ID+" AND " +
"pp.M_Product_ID=M_Product_Costing.M_Product_ID)" +
/** SET FutureCostPrice = C_Currency_Convert (
-- Amount
(SELECT pp.PriceLimit FROM M_ProductPrice pp
WHERE pp.M_PriceList_Version_ID=11
AND pp.M_Product_ID=M_Product_Costing.M_Product_ID),
-- Cur From
(SELECT C_Currency_ID FROM M_PriceList pl, M_PriceList_Version pv
WHERE pv.M_PriceList_ID=pl.M_PriceList_ID
AND pv.M_PriceList_Version_ID=11),
-- Cur To
(SELECT a.C_Currency_ID FROM C_AcctSchema a WHERE a.C_AcctSchema_ID=M_Product_Costing.C_AcctSchema_ID))
**/
"WHERE AD_Client_ID="+p_AD_Client_ID+ " " +
// we have a price
"AND EXISTS (SELECT * FROM M_ProductPrice pp " +
"WHERE pp.M_PriceList_Version_ID="+p_M_PriceList_Version_ID+" " +
"AND pp.M_Product_ID=M_Product_Costing.M_Product_ID) " +
// and the same currency
"AND EXISTS (SELECT * FROM C_AcctSchema a, M_PriceList pl, M_PriceList_Version pv " +
"WHERE a.C_AcctSchema_ID=M_Product_CostingUpdate.C_AcctSchema_ID " +
"AND pv.M_PriceList_Version_ID="+p_M_PriceList_Version_ID+" " +
"AND pv.M_PriceList_ID=pl.M_PriceList_ID " +
"AND pl.C_Currency_ID=a.C_Currency_ID) " +
"AND ("+p_M_Product_Category_ID+" = -1 OR " +
"EXISTS (SELECT * FROM M_Product p " +
"WHERE p.M_Product_Category_ID="+p_M_Product_Category_ID+" " +
"AND p.M_Product_ID=M_Product_Costing.M_Product_ID))");
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no == -1) raiseError("Set to Average Cost:ERROR", sql.toString());
} else {
log.info("SetFutureCostTo=" + p_SetFutureCostTo + " ?");
}
log.info(" - Updated: " + no);
// ========== (2) SetStandardCost ==========
if (p_SetStandardCost.equals("Y")) {
// A - Average Cost
log.info("Set Standard Cost");
sql = new StringBuffer(
"UPDATE M_Product_Costing " +
"SET CostStandard = FutureCostPrice " +
"WHERE AD_Client_ID="+ p_AD_Client_ID + " AND " +
"(" + p_M_Product_Category_ID + " = -1 OR " +
"EXISTS (SELECT * FROM M_Product p " +
"WHERE p.M_Product_Category_ID="+p_M_Product_Category_ID+ " AND " +
"p.M_Product_ID=M_Product_Costing.M_Product_ID))");
no1 = DB.executeUpdate(sql.toString(), get_TrxName());
if (no1 == -1) raiseError("Set Standard Cost", sql.toString());
}
// ========== (3) Update CurrentCostPrice depending on Costing Method ==========
try
{
PreparedStatement pstmt = DB.prepareStatement
("SELECT a.CostingMethod " +
"FROM C_AcctSchema a, AD_ClientInfo ci " +
"WHERE a.C_AcctSchema_ID=ci.C_AcctSchema1_ID AND " +
"ci.AD_Client_ID="+p_AD_Client_ID, get_TrxName());
ResultSet rs = pstmt.executeQuery();
if (rs.next())
v_CostingMethod = rs.getString(1);
rs.close();
pstmt.close();
}
catch (SQLException e)
{
throw new Exception ("select CostingMethod", e);
}
// (A)verage (S)tandard
log.info("Update Current Cost " + v_CostingMethod);
log.info("Set Standard Cost");
sql = new StringBuffer(
"UPDATE M_Product_Costing " +
"SET CurrentCostPrice = " +
"DECODE ('"+ v_CostingMethod + "', 'A', CostAverage, CostStandard) " +
"WHERE AD_Client_ID="+p_AD_Client_ID);
no2 = DB.executeUpdate(sql.toString(), get_TrxName());
if (no2 == -1) raiseError("Set Standard Cost", sql.toString());
log.info(" - Updated: " + no2);
return "@Updated@: " + no + "/" + no1;
} // doIt
private void raiseError(String string, String sql) throws Exception {
DB.rollback(false, get_TrxName());
String msg = string;
ValueNamePair pp = CLogger.retrieveError();
if (pp != null)
msg = pp.getName() + " - ";
msg += sql;
throw new AdempiereUserError (msg);
}
} // M_Product_CostingUpdate

View File

@ -284,12 +284,6 @@ public class OrgOwnership extends SvrProcess
if (no != 0)
log.fine("generalOwnership - C_BP_Withholding=" + no);
// Costing
sql = "UPDATE M_Product_Costing " + set;
no = DB.executeUpdate(sql, get_TrxName());
if (no != 0)
log.fine("generalOwnership - M_Product_Costing=" + no);
// Replenish
sql = "UPDATE M_Replenish " + set;
no = DB.executeUpdate(sql, get_TrxName());

View File

@ -189,9 +189,11 @@ public class T_InventoryValue_Create extends SvrProcess
+ "AND plv.M_PriceList_ID=pl.M_PriceList_ID), "
+ "CostStandard = "
+ "(SELECT currencyConvert(pc.CurrentCostPrice,acs.C_Currency_ID,T_InventoryValue.C_Currency_ID,T_InventoryValue.DateValue, null, T_InventoryValue.AD_Client_ID, T_InventoryValue.AD_Org_ID) "
+ "FROM AD_ClientInfo ci, C_AcctSchema acs, M_Product_Costing pc "
+ "FROM AD_ClientInfo ci, C_AcctSchema acs, M_Cost pc, M_CostElement ce "
+ "WHERE T_InventoryValue.AD_Client_ID=ci.AD_Client_ID AND ci.C_AcctSchema1_ID=acs.C_AcctSchema_ID "
+ "AND acs.C_AcctSchema_ID=pc.C_AcctSchema_ID "
+ "AND acs.C_AcctSchema_ID=pc.C_AcctSchema_ID "
+ "AND pc.M_CostElement_ID=ce.M_CostElement_ID "
+ "AND ce.CostingMethod='S'"
+ "AND T_InventoryValue.M_Product_ID=pc.M_Product_ID) "
+ "WHERE T_InventoryValue.M_Warehouse_ID = " + p_M_Warehouse_ID;
cntu = DB.executeUpdate(sqlupd, get_TrxName());

View File

@ -257,7 +257,6 @@ public class Doc_InOut extends Doc
}
}
} // for all lines
updateProductInfo(as.getC_AcctSchema_ID()); // only for SO!
/** Commitment release ****/
if (as.isAccrual() && as.isCreateSOCommitment())
@ -368,7 +367,6 @@ public class Doc_InOut extends Doc
}
}
} // for all lines
updateProductInfo(as.getC_AcctSchema_ID()); // only for SO!
} // Sales Return
// *** Purchasing - Receipt
@ -614,35 +612,4 @@ public class Doc_InOut extends Doc
&& m_Reversal_ID !=0 && line.getReversalLine_ID() != 0;
}
/**
* Update Sales Order Costing Product Info (old).
* Purchase side handled in Invoice Matching.
* <br>
* decrease average cumulatives
* @param C_AcctSchema_ID accounting schema
* @deprecated old costing
*/
private void updateProductInfo (int C_AcctSchema_ID)
{
log.fine("M_InOut_ID=" + get_ID());
// Old Model
StringBuffer sql = new StringBuffer(
//FYRACLE add pc. everywhere
"UPDATE M_Product_Costing pc "
+ "SET (CostAverageCumQty, CostAverageCumAmt)="
+ "(SELECT pc.CostAverageCumQty - SUM(il.MovementQty),"
+ " pc.CostAverageCumAmt - SUM(il.MovementQty*pc.CurrentCostPrice) "
+ "FROM M_InOutLine il "
+ "WHERE pc.M_Product_ID=il.M_Product_ID"
+ " AND il.M_InOut_ID=").append(get_ID()).append(") ")
.append("WHERE EXISTS (SELECT * "
+ "FROM M_InOutLine il "
+ "WHERE pc.M_Product_ID=il.M_Product_ID"
+ " AND il.M_InOut_ID=").append(get_ID()).append(")");
int no = DB.executeUpdate(sql.toString(), getTrxName());
log.fine("M_Product_Costing - Updated=" + no);
//
} // updateProductInfo
} // Doc_InOut

View File

@ -580,7 +580,6 @@ public class Doc_Invoice extends Doc
getC_Currency_ID(), null, serviceAmt);
//
updateProductPO(as); // Only API
updateProductInfo (as.getC_AcctSchema_ID()); // only API
}
// APC
else if (getDocumentType().equals(DOCTYPE_APCredit))
@ -918,72 +917,4 @@ public class Doc_Invoice extends Doc
log.fine("Updated=" + no);
} // updateProductPO
/**
* Update Product Info (old).
* - Costing (PriceLastInv)
* - PO (PriceLastInv)
* @param C_AcctSchema_ID accounting schema
* @deprecated old costing
*/
private void updateProductInfo (int C_AcctSchema_ID)
{
log.fine("C_Invoice_ID=" + get_ID());
/** @todo Last.. would need to compare document/last updated date
* would need to maintain LastPriceUpdateDate on _PO and _Costing */
// update Product Costing
// requires existence of currency conversion !!
// if there are multiple lines of the same product last price uses first
// -> TotalInvAmt is sometimes NULL !! -> error
// begin globalqss 2005-10-19
// postgresql doesn't support LIMIT on UPDATE or DELETE statements
/*
StringBuffer sql = new StringBuffer (
"UPDATE M_Product_Costing pc "
+ "SET (PriceLastInv, TotalInvAmt,TotalInvQty) = "
// select
+ "(SELECT currencyConvert(il.PriceActual,i.C_Currency_ID,a.C_Currency_ID,i.DateInvoiced,i.C_ConversionType_ID,i.AD_Client_ID,i.AD_Org_ID),"
+ " currencyConvert(il.LineNetAmt,i.C_Currency_ID,a.C_Currency_ID,i.DateInvoiced,i.C_ConversionType_ID,i.AD_Client_ID,i.AD_Org_ID),il.QtyInvoiced "
+ "FROM C_Invoice i, C_InvoiceLine il, C_AcctSchema a "
+ "WHERE i.C_Invoice_ID=il.C_Invoice_ID"
+ " AND pc.M_Product_ID=il.M_Product_ID AND pc.C_AcctSchema_ID=a.C_AcctSchema_ID"
+ " AND ROWNUM=1"
+ " AND pc.C_AcctSchema_ID=").append(C_AcctSchema_ID).append(" AND i.C_Invoice_ID=")
.append(get_ID()).append(") ")
// update
.append("WHERE EXISTS (SELECT * "
+ "FROM C_Invoice i, C_InvoiceLine il, C_AcctSchema a "
+ "WHERE i.C_Invoice_ID=il.C_Invoice_ID"
+ " AND pc.M_Product_ID=il.M_Product_ID AND pc.C_AcctSchema_ID=a.C_AcctSchema_ID"
+ " AND pc.C_AcctSchema_ID=").append(C_AcctSchema_ID).append(" AND i.C_Invoice_ID=")
.append(get_ID()).append(")");
*/
// the next command is equivalent and works in postgresql and oracle
StringBuffer sql = new StringBuffer (
"UPDATE M_Product_Costing pc "
+ "SET (PriceLastInv, TotalInvAmt,TotalInvQty) = "
// select
+ "(SELECT currencyConvert(il.PriceActual,i.C_Currency_ID,a.C_Currency_ID,i.DateInvoiced,i.C_ConversionType_ID,i.AD_Client_ID,i.AD_Org_ID),"
+ " currencyConvert(il.LineNetAmt,i.C_Currency_ID,a.C_Currency_ID,i.DateInvoiced,i.C_ConversionType_ID,i.AD_Client_ID,i.AD_Org_ID),il.QtyInvoiced "
+ "FROM C_Invoice i, C_InvoiceLine il, C_AcctSchema a "
+ "WHERE i.C_Invoice_ID=il.C_Invoice_ID"
+ " AND il.c_invoiceline_id = (SELECT MIN(C_InvoiceLine_ID) FROM C_InvoiceLine il2" +
" WHERE il2.M_PRODUCT_ID=il.M_PRODUCT_ID AND C_Invoice_ID=")
.append(get_ID()).append(")"
+ " AND pc.M_Product_ID=il.M_Product_ID AND pc.C_AcctSchema_ID=a.C_AcctSchema_ID"
+ " AND pc.C_AcctSchema_ID=").append(C_AcctSchema_ID).append(" AND i.C_Invoice_ID=")
.append(get_ID()).append(") ")
// update
.append("WHERE EXISTS (SELECT * "
+ "FROM C_Invoice i, C_InvoiceLine il, C_AcctSchema a "
+ "WHERE i.C_Invoice_ID=il.C_Invoice_ID"
+ " AND pc.M_Product_ID=il.M_Product_ID AND pc.C_AcctSchema_ID=a.C_AcctSchema_ID"
+ " AND pc.C_AcctSchema_ID=").append(C_AcctSchema_ID).append(" AND i.C_Invoice_ID=")
.append(get_ID()).append(")");
// end globalqss 2005-10-19
int no = DB.executeUpdate(sql.toString(), getTrxName());
log.fine("M_Product_Costing - Updated=" + no);
} // updateProductInfo
} // Doc_Invoice

View File

@ -31,7 +31,6 @@ import org.compiere.model.MInvoice;
import org.compiere.model.MInvoiceLine;
import org.compiere.model.MMatchInv;
import org.compiere.model.ProductCost;
import org.compiere.util.DB;
import org.compiere.util.Env;
/**
@ -312,10 +311,6 @@ public class Doc_MatchInv extends Doc
p_Error = error;
return null;
}
// Update Costing
updateProductInfo(as.getC_AcctSchema_ID(),
MAcctSchema.COSTINGMETHOD_StandardCosting.equals(as.getCostingMethod()));
//
facts.add(fact);
@ -417,64 +412,4 @@ public class Doc_MatchInv extends Doc
return "";
}
/**
* Update Product Info (old).
* - Costing (CostStandardCumQty, CostStandardCumAmt, CostAverageCumQty, CostAverageCumAmt)
* @param C_AcctSchema_ID accounting schema
* @param standardCosting true if std costing
* @return true if updated
* @deprecated old costing
*/
private boolean updateProductInfo (int C_AcctSchema_ID, boolean standardCosting)
{
log.fine("M_MatchInv_ID=" + get_ID());
// update Product Costing Qty/Amt
// requires existence of currency conversion !!
StringBuffer sql = new StringBuffer (
"UPDATE M_Product_Costing pc "
+ "SET (CostStandardCumQty,CostStandardCumAmt, CostAverageCumQty,CostAverageCumAmt) = "
+ "(SELECT pc.CostStandardCumQty + m.Qty,"
+ "pc.CostStandardCumAmt + currencyConvert(il.PriceActual,i.C_Currency_ID,a.C_Currency_ID,i.DateInvoiced,i.C_ConversionType_ID,i.AD_Client_ID,i.AD_Org_ID)*m.Qty, "
+ "pc.CostAverageCumQty + m.Qty,"
+ "pc.CostAverageCumAmt + currencyConvert(il.PriceActual,i.C_Currency_ID,a.C_Currency_ID,i.DateInvoiced,i.C_ConversionType_ID,i.AD_Client_ID,i.AD_Org_ID)*m.Qty "
+ "FROM M_MatchInv m"
+ " INNER JOIN C_InvoiceLine il ON (m.C_InvoiceLine_ID=il.C_InvoiceLine_ID)"
+ " INNER JOIN C_Invoice i ON (il.C_Invoice_ID=i.C_Invoice_ID),"
+ " C_AcctSchema a "
+ "WHERE pc.C_AcctSchema_ID=a.C_AcctSchema_ID"
+ " AND pc.M_Product_ID=m.M_Product_ID"
+ " AND m.M_MatchInv_ID=").append(get_ID()).append(")"
//
+ "WHERE pc.C_AcctSchema_ID=").append(C_AcctSchema_ID).append(
" AND EXISTS (SELECT * FROM M_MatchInv m "
+ "WHERE pc.M_Product_ID=m.M_Product_ID"
+ " AND m.M_MatchInv_ID=").append(get_ID()).append(")");
int no = DB.executeUpdate(sql.toString(), getTrxName());
log.fine("M_Product_Costing - Qty/Amt Updated #=" + no);
// Update Average Cost
sql = new StringBuffer (
"UPDATE M_Product_Costing "
+ "SET CostAverage = CostAverageCumAmt/DECODE(CostAverageCumQty, 0,1, CostAverageCumQty) "
+ "WHERE C_AcctSchema_ID=").append(C_AcctSchema_ID)
.append(" AND M_Product_ID=").append(getM_Product_ID());
no = DB.executeUpdate(sql.toString(), getTrxName());
log.fine("M_Product_Costing - AvgCost Updated #=" + no);
// Update Current Cost
if (!standardCosting)
{
sql = new StringBuffer (
"UPDATE M_Product_Costing "
+ "SET CurrentCostPrice = CostAverage "
+ "WHERE C_AcctSchema_ID=").append(C_AcctSchema_ID)
.append(" AND M_Product_ID=").append(getM_Product_ID());
no = DB.executeUpdate(sql.toString(), getTrxName());
log.fine("M_Product_Costing - CurrentCost Updated=" + no);
}
return true;
} // updateProductInfo
} // Doc_MatchInv

View File

@ -37,7 +37,6 @@ import org.compiere.model.MProduct;
import org.compiere.model.MTax;
import org.compiere.model.ProductCost;
import org.compiere.model.X_M_InOut;
import org.compiere.util.DB;
import org.compiere.util.Env;
/**
@ -289,34 +288,6 @@ public class Doc_MatchPO extends Doc
return false;
}
/**
* Update Product Info (old).
* - Costing (CostStandardPOQty, CostStandardPOAmt)
* @param C_AcctSchema_ID accounting schema
* @deprecated old costing
*/
private void updateProductInfo (int C_AcctSchema_ID)
{
log.fine("M_MatchPO_ID=" + get_ID());
// update Product Costing
// requires existence of currency conversion !!
StringBuffer sql = new StringBuffer (
"UPDATE M_Product_Costing pc "
+ "SET (CostStandardPOQty,CostStandardPOAmt) = "
+ "(SELECT CostStandardPOQty + m.Qty,"
+ " CostStandardPOAmt + currencyConvert(ol.PriceActual,ol.C_Currency_ID,a.C_Currency_ID,ol.DateOrdered,null,ol.AD_Client_ID,ol.AD_Org_ID)*m.Qty "
+ "FROM M_MatchPO m, C_OrderLine ol, C_AcctSchema a "
+ "WHERE m.C_OrderLine_ID=ol.C_OrderLine_ID"
+ " AND pc.M_Product_ID=ol.M_Product_ID"
+ " AND pc.C_AcctSchema_ID=a.C_AcctSchema_ID"
+ " AND m.M_MatchPO_ID=").append(get_ID()).append(") ")
.append("WHERE pc.C_AcctSchema_ID=").append(C_AcctSchema_ID)
.append(" AND pc.M_Product_ID=").append(getM_Product_ID());
int no = DB.executeUpdate(sql.toString(), getTrxName());
log.fine("M_Product_Costing - Updated=" + no);
} // updateProductInfo
// Elaine 2008/6/20
private String createMatchPOCostDetail(MAcctSchema as)
{

View File

@ -343,7 +343,6 @@ public class Doc_Order extends Doc
if (getDocumentType().equals(DOCTYPE_POrder))
{
updateProductPO(as);
updateProductInfo(as.getC_AcctSchema_ID());
BigDecimal grossAmt = getAmount(Doc.AMTTYPE_Gross);
@ -773,52 +772,5 @@ public class Doc_Order extends Doc
fact.createLine (null, offset,
C_Currency_ID, null, total);
return fact;
} // getCommitmentSalesRelease
/**************************************************************************
* Update Product Info (old)
* - Costing (PriceLastPO)
* - PO (PriceLastPO)
* @param C_AcctSchema_ID accounting schema
* @deprecated old costing
*/
private void updateProductInfo (int C_AcctSchema_ID)
{
log.fine("C_Order_ID=" + get_ID());
/** @todo Last.. would need to compare document/last updated date
* would need to maintain LastPriceUpdateDate on _PO and _Costing */
// update Product Costing
// requires existence of currency conversion !!
// if there are multiple lines of the same product last price uses first
StringBuffer sql = new StringBuffer (
"UPDATE M_Product_Costing pc "
+ "SET PriceLastPO = "
+ "(SELECT currencyConvert(ol.PriceActual,ol.C_Currency_ID,a.C_Currency_ID,o.DateOrdered,o.C_ConversionType_ID,o.AD_Client_ID,o.AD_Org_ID) "
+ "FROM C_Order o, C_OrderLine ol, C_AcctSchema a "
+ "WHERE o.C_Order_ID=ol.C_Order_ID"
+ " AND pc.M_Product_ID=ol.M_Product_ID AND pc.C_AcctSchema_ID=a.C_AcctSchema_ID ");
if (DB.isOracle()) //jz
{
sql.append(" AND ROWNUM=1 ");
}
else
sql.append(" AND ol.C_OrderLine_ID = (SELECT MIN(ol1.C_OrderLine_ID) "
+ "FROM C_Order o1, C_OrderLine ol1 "
+ "WHERE o1.C_Order_ID=ol1.C_Order_ID"
+ " AND pc.M_Product_ID=ol1.M_Product_ID ")
.append(" AND o1.C_Order_ID=").append(get_ID()).append(") ");
sql.append(" AND pc.C_AcctSchema_ID=").append(C_AcctSchema_ID).append(" AND o.C_Order_ID=")
.append(get_ID()).append(") ")
.append("WHERE EXISTS (SELECT * "
+ "FROM C_Order o, C_OrderLine ol, C_AcctSchema a "
+ "WHERE o.C_Order_ID=ol.C_Order_ID"
+ " AND pc.M_Product_ID=ol.M_Product_ID AND pc.C_AcctSchema_ID=a.C_AcctSchema_ID"
+ " AND pc.C_AcctSchema_ID=").append(C_AcctSchema_ID).append(" AND o.C_Order_ID=")
.append(get_ID()).append(")");
int no = DB.executeUpdate(sql.toString(), getTrxName());
log.fine("M_Product_Costing - Updated=" + no);
} // updateProductInfo
} // getCommitmentSalesRelease
} // Doc_Order

View File

@ -228,70 +228,6 @@ public class ProductInfo
return m_qty;
} // getQty
/**
* Update/Create initial Cost Record.
* Check first for Purchase Price List,
* then Product Purchase Costs
* and then Price List
* @param as accounting schema
* @param create create record
* @return costs
*/
private BigDecimal updateCosts (MAcctSchema as, boolean create)
{
// Create Zero Record
if (create)
{
StringBuffer sql = new StringBuffer ("INSERT INTO M_Product_Costing "
+ "(M_Product_ID,C_AcctSchema_ID,"
+ " AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,"
+ " CurrentCostPrice,CostStandard,FutureCostPrice,"
+ " CostStandardPOQty,CostStandardPOAmt,CostStandardCumQty,CostStandardCumAmt,"
+ " CostAverage,CostAverageCumQty,CostAverageCumAmt,"
+ " PriceLastPO,PriceLastInv, TotalInvQty,TotalInvAmt) "
+ "VALUES (");
sql.append(m_M_Product_ID).append(",").append(as.getC_AcctSchema_ID()).append(",")
.append(m_AD_Client_ID).append(",").append(m_AD_Org_ID).append(",")
.append("'Y',SysDate,0,SysDate,0, 0,0,0, 0,0,0,0, 0,0,0, 0,0, 0,0)");
int no = DB.executeUpdate(sql.toString(), m_trxName);
if (no == 1)
log.fine("CostingCreated");
}
// Try to find non ZERO Price
String costSource = "PriceList-PO";
BigDecimal costs = getPriceList (as, true);
if (costs == null || costs.compareTo(Env.ZERO)==0)
{
costSource = "PO Cost";
costs = getPOCost(as);
}
if (costs == null || costs.compareTo(Env.ZERO)==0)
{
costSource = "PriceList";
costs = getPriceList (as, false);
}
// if not found use $1 (to be able to do material transactions)
if (costs == null || costs.compareTo(Env.ZERO)==0)
{
costSource = "Not Found";
costs = new BigDecimal("1");
}
// update current costs
StringBuffer sql = new StringBuffer ("UPDATE M_Product_Costing ");
sql.append("SET CurrentCostPrice=").append(costs)
.append(" WHERE M_Product_ID=").append(m_M_Product_ID)
.append(" AND C_AcctSchema_ID=").append(as.getC_AcctSchema_ID());
int no = DB.executeUpdate(sql.toString(), m_trxName);
if (no == 1)
log.fine(costSource + " - " + costs);
return costs;
} // createCosts
/**
* Get PO Price from PriceList - and convert it to AcctSchema Currency
* @param as accounting schema

View File

@ -1,317 +0,0 @@
/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution *
* Copyright (C) 1999-2007 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.model;
import java.math.BigDecimal;
import java.sql.Timestamp;
import org.compiere.util.KeyNamePair;
/** Generated Interface for M_Product_Costing
* @author Adempiere (generated)
* @version Release 3.6.0LTS
*/
public interface I_M_Product_Costing
{
/** TableName=M_Product_Costing */
public static final String Table_Name = "M_Product_Costing";
/** AD_Table_ID=327 */
public static final int Table_ID = MTable.getTable_ID(Table_Name);
KeyNamePair Model = new KeyNamePair(Table_ID, Table_Name);
/** AccessLevel = 3 - Client - Org
*/
BigDecimal accessLevel = BigDecimal.valueOf(3);
/** Load Meta Data */
/** Column name AD_Client_ID */
public static final String COLUMNNAME_AD_Client_ID = "AD_Client_ID";
/** Get Client.
* Client/Tenant for this installation.
*/
public int getAD_Client_ID();
/** Column name AD_Org_ID */
public static final String COLUMNNAME_AD_Org_ID = "AD_Org_ID";
/** Set Organization.
* Organizational entity within client
*/
public void setAD_Org_ID (int AD_Org_ID);
/** Get Organization.
* Organizational entity within client
*/
public int getAD_Org_ID();
/** Column name C_AcctSchema_ID */
public static final String COLUMNNAME_C_AcctSchema_ID = "C_AcctSchema_ID";
/** Set Accounting Schema.
* Rules for accounting
*/
public void setC_AcctSchema_ID (int C_AcctSchema_ID);
/** Get Accounting Schema.
* Rules for accounting
*/
public int getC_AcctSchema_ID();
public I_C_AcctSchema getC_AcctSchema() throws RuntimeException;
/** Column name CostAverage */
public static final String COLUMNNAME_CostAverage = "CostAverage";
/** Set Average Cost.
* Weighted average costs
*/
public void setCostAverage (BigDecimal CostAverage);
/** Get Average Cost.
* Weighted average costs
*/
public BigDecimal getCostAverage();
/** Column name CostAverageCumAmt */
public static final String COLUMNNAME_CostAverageCumAmt = "CostAverageCumAmt";
/** Set Average Cost Amount Sum.
* Cumulative average cost amounts (internal)
*/
public void setCostAverageCumAmt (BigDecimal CostAverageCumAmt);
/** Get Average Cost Amount Sum.
* Cumulative average cost amounts (internal)
*/
public BigDecimal getCostAverageCumAmt();
/** Column name CostAverageCumQty */
public static final String COLUMNNAME_CostAverageCumQty = "CostAverageCumQty";
/** Set Average Cost Quantity Sum.
* Cumulative average cost quantities (internal)
*/
public void setCostAverageCumQty (BigDecimal CostAverageCumQty);
/** Get Average Cost Quantity Sum.
* Cumulative average cost quantities (internal)
*/
public BigDecimal getCostAverageCumQty();
/** Column name CostStandard */
public static final String COLUMNNAME_CostStandard = "CostStandard";
/** Set Standard Cost.
* Standard Costs
*/
public void setCostStandard (BigDecimal CostStandard);
/** Get Standard Cost.
* Standard Costs
*/
public BigDecimal getCostStandard();
/** Column name CostStandardCumAmt */
public static final String COLUMNNAME_CostStandardCumAmt = "CostStandardCumAmt";
/** Set Std Cost Amount Sum.
* Standard Cost Invoice Amount Sum (internal)
*/
public void setCostStandardCumAmt (BigDecimal CostStandardCumAmt);
/** Get Std Cost Amount Sum.
* Standard Cost Invoice Amount Sum (internal)
*/
public BigDecimal getCostStandardCumAmt();
/** Column name CostStandardCumQty */
public static final String COLUMNNAME_CostStandardCumQty = "CostStandardCumQty";
/** Set Std Cost Quantity Sum.
* Standard Cost Invoice Quantity Sum (internal)
*/
public void setCostStandardCumQty (BigDecimal CostStandardCumQty);
/** Get Std Cost Quantity Sum.
* Standard Cost Invoice Quantity Sum (internal)
*/
public BigDecimal getCostStandardCumQty();
/** Column name CostStandardPOAmt */
public static final String COLUMNNAME_CostStandardPOAmt = "CostStandardPOAmt";
/** Set Std PO Cost Amount Sum.
* Standard Cost Purchase Order Amount Sum (internal)
*/
public void setCostStandardPOAmt (BigDecimal CostStandardPOAmt);
/** Get Std PO Cost Amount Sum.
* Standard Cost Purchase Order Amount Sum (internal)
*/
public BigDecimal getCostStandardPOAmt();
/** Column name CostStandardPOQty */
public static final String COLUMNNAME_CostStandardPOQty = "CostStandardPOQty";
/** Set Std PO Cost Quantity Sum.
* Standard Cost Purchase Order Quantity Sum (internal)
*/
public void setCostStandardPOQty (BigDecimal CostStandardPOQty);
/** Get Std PO Cost Quantity Sum.
* Standard Cost Purchase Order Quantity Sum (internal)
*/
public BigDecimal getCostStandardPOQty();
/** Column name Created */
public static final String COLUMNNAME_Created = "Created";
/** Get Created.
* Date this record was created
*/
public Timestamp getCreated();
/** Column name CreatedBy */
public static final String COLUMNNAME_CreatedBy = "CreatedBy";
/** Get Created By.
* User who created this records
*/
public int getCreatedBy();
/** Column name CurrentCostPrice */
public static final String COLUMNNAME_CurrentCostPrice = "CurrentCostPrice";
/** Set Current Cost Price.
* The currently used cost price
*/
public void setCurrentCostPrice (BigDecimal CurrentCostPrice);
/** Get Current Cost Price.
* The currently used cost price
*/
public BigDecimal getCurrentCostPrice();
/** Column name FutureCostPrice */
public static final String COLUMNNAME_FutureCostPrice = "FutureCostPrice";
/** Set Future Cost Price */
public void setFutureCostPrice (BigDecimal FutureCostPrice);
/** Get Future Cost Price */
public BigDecimal getFutureCostPrice();
/** Column name IsActive */
public static final String COLUMNNAME_IsActive = "IsActive";
/** Set Active.
* The record is active in the system
*/
public void setIsActive (boolean IsActive);
/** Get Active.
* The record is active in the system
*/
public boolean isActive();
/** Column name M_Product_ID */
public static final String COLUMNNAME_M_Product_ID = "M_Product_ID";
/** Set Product.
* Product, Service, Item
*/
public void setM_Product_ID (int M_Product_ID);
/** Get Product.
* Product, Service, Item
*/
public int getM_Product_ID();
public I_M_Product getM_Product() throws RuntimeException;
/** Column name PriceLastInv */
public static final String COLUMNNAME_PriceLastInv = "PriceLastInv";
/** Set Last Invoice Price.
* Price of the last invoice for the product
*/
public void setPriceLastInv (BigDecimal PriceLastInv);
/** Get Last Invoice Price.
* Price of the last invoice for the product
*/
public BigDecimal getPriceLastInv();
/** Column name PriceLastPO */
public static final String COLUMNNAME_PriceLastPO = "PriceLastPO";
/** Set Last PO Price.
* Price of the last purchase order for the product
*/
public void setPriceLastPO (BigDecimal PriceLastPO);
/** Get Last PO Price.
* Price of the last purchase order for the product
*/
public BigDecimal getPriceLastPO();
/** Column name TotalInvAmt */
public static final String COLUMNNAME_TotalInvAmt = "TotalInvAmt";
/** Set Total Invoice Amount.
* Cumulative total lifetime invoice amount
*/
public void setTotalInvAmt (BigDecimal TotalInvAmt);
/** Get Total Invoice Amount.
* Cumulative total lifetime invoice amount
*/
public BigDecimal getTotalInvAmt();
/** Column name TotalInvQty */
public static final String COLUMNNAME_TotalInvQty = "TotalInvQty";
/** Set Total Invoice Quantity.
* Cumulative total lifetime invoice quantity
*/
public void setTotalInvQty (BigDecimal TotalInvQty);
/** Get Total Invoice Quantity.
* Cumulative total lifetime invoice quantity
*/
public BigDecimal getTotalInvQty();
/** Column name Updated */
public static final String COLUMNNAME_Updated = "Updated";
/** Get Updated.
* Date this record was updated
*/
public Timestamp getUpdated();
/** Column name UpdatedBy */
public static final String COLUMNNAME_UpdatedBy = "UpdatedBy";
/** Get Updated By.
* User who updated this records
*/
public int getUpdatedBy();
}

View File

@ -290,14 +290,6 @@ public class MCost extends X_M_Cost
if (retValue == null || retValue.signum() == 0)
retValue = getLastPOPrice(product, M_ASI_ID, Org_ID, as.getC_Currency_ID());
}
else if (MCostElement.COSTINGMETHOD_StandardCosting.equals(costingMethod))
{
// migrate old costs
MProductCosting pc = MProductCosting.get(product.getCtx(), product.getM_Product_ID(),
as.getC_AcctSchema_ID(), product.get_TrxName());
if (pc != null)
retValue = pc.getCurrentCostPrice();
}
else if (MCostElement.COSTINGMETHOD_UserDefined.equals(costingMethod))
;
else

View File

@ -689,14 +689,6 @@ public class MProduct extends X_M_Product
insert_Accounting("M_Product_Acct", "M_Product_Category_Acct",
"p.M_Product_Category_ID=" + getM_Product_Category_ID());
insert_Tree(X_AD_Tree.TREETYPE_Product);
//
MAcctSchema[] mass = MAcctSchema.getClientAcctSchema(getCtx(), getAD_Client_ID(), get_TrxName());
for (int i = 0; i < mass.length; i++)
{
// Old
MProductCosting pcOld = new MProductCosting(this, mass[i].getC_AcctSchema_ID());
pcOld.saveEx();
}
}
// New Costing
@ -740,11 +732,7 @@ public class MProduct extends X_M_Product
}
}
// delete costing
MProductCosting[] costings = MProductCosting.getOfProduct(getCtx(), get_ID(), get_TrxName());
for (int i = 0; i < costings.length; i++)
costings[i].delete(true, get_TrxName());
// delete costing
MCost.delete(this);
// [ 1674225 ] Delete Product: Costing deletion error

View File

@ -1,133 +0,0 @@
/******************************************************************************
* 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.model;
import java.sql.ResultSet;
import java.util.List;
import java.util.Properties;
import org.compiere.util.Env;
/**
* Product Costing Model (old).
* deprecated old costing
*
* @author Jorg Janke
* @version $Id: MProductCosting.java,v 1.3 2006/07/30 00:51:05 jjanke Exp $
*/
public class MProductCosting extends X_M_Product_Costing
{
/**
*
*/
private static final long serialVersionUID = 5563448335633481151L;
/**
* Get Costing Of Product
* @param ctx context
* @param M_Product_ID product
* @param trxName trx
* @return array of costs
*/
public static MProductCosting[] getOfProduct (Properties ctx, int M_Product_ID, String trxName)
{
final String whereClause = "M_Product_ID=?";
List<MProductCosting> costs =new Query(ctx, I_M_Product_Costing.Table_Name,whereClause, trxName )
.setParameters(M_Product_ID)
.list();
return costs.toArray(new MProductCosting[costs.size()]);
} // getOfProduct
/**
* Get Costing
* @param ctx context
* @param M_Product_ID product
* @param C_AcctSchema_ID as
* @param trxName trx
* @return first product cosnting
*/
public static MProductCosting get (Properties ctx, int M_Product_ID,
int C_AcctSchema_ID, String trxName)
{
final String whereClause = "M_Product_ID=? AND C_AcctSchema_ID=?";
return new Query(ctx, I_M_Product_Costing.Table_Name,whereClause, trxName )
.setParameters(M_Product_ID, C_AcctSchema_ID)
.firstOnly();
} // get
/**************************************************************************
* Standard Constructor (odl)
* @param ctx context
* @param ignored (multi key)
* @param trxName transaction
*/
public MProductCosting (Properties ctx, int ignored, String trxName)
{
super (ctx, ignored, trxName);
if (ignored != 0)
throw new IllegalArgumentException("Multi-Key");
else
{
// setM_Product_ID (0);
// setC_AcctSchema_ID (0);
//
setCostAverage (Env.ZERO);
setCostAverageCumAmt (Env.ZERO);
setCostAverageCumQty (Env.ZERO);
setCostStandard (Env.ZERO);
setCostStandardCumAmt (Env.ZERO);
setCostStandardCumQty (Env.ZERO);
setCostStandardPOAmt (Env.ZERO);
setCostStandardPOQty (Env.ZERO);
setCurrentCostPrice (Env.ZERO);
setFutureCostPrice (Env.ZERO);
setPriceLastInv (Env.ZERO);
setPriceLastPO (Env.ZERO);
setTotalInvAmt (Env.ZERO);
setTotalInvQty (Env.ZERO);
}
} // MProductCosting
/**
* Parent Constructor (old)
* @param product parent
* @param C_AcctSchema_ID accounting schema
*/
public MProductCosting (MProduct product, int C_AcctSchema_ID)
{
super (product.getCtx(), 0, product.get_TrxName());
setClientOrg(product);
setM_Product_ID (product.getM_Product_ID());
setC_AcctSchema_ID (C_AcctSchema_ID);
} // MProductCosting
/**
* Load Constructor (old)
* @param ctx context
* @param rs result set
* @param trxName transaction
*/
public MProductCosting (Properties ctx, ResultSet rs, String trxName)
{
super(ctx, rs, trxName);
} // MProductCosting
} // MProductCosting

View File

@ -283,17 +283,6 @@ public class ProductCost
log.fine("No Qty");
return null;
}
/** Old Costing
MClient client = MClient.get(as.getCtx(), as.getAD_Client_ID());
if (!client.isUseBetaFunctions())
{
BigDecimal itemCost = getProductItemCostOld(as, costingMethod);
BigDecimal cost = m_qty.multiply(itemCost);
cost = cost.setScale(as.getCostingPrecision(), BigDecimal.ROUND_HALF_UP);
log.fine("Qty(" + m_qty + ") * Cost(" + itemCost + ") = " + cost);
return cost;
}
**/
// No Product
if (m_product == null)
@ -312,138 +301,6 @@ public class ProductCost
return cost;
} // getProductCosts
/**
* Get Product Costs per UOM for Accounting Schema in Accounting Schema Currency.
* - if costType defined - cost
* - else CurrentCosts
* @param as accounting schema
* @param costType - if null uses Accounting Schema Costs - see AcctSchema.COSTING_*
* @return product costs
*/
private BigDecimal getProductItemCostOld (MAcctSchema as, String costType)
{
BigDecimal current = null;
BigDecimal cost = null;
String cm = as.getCostingMethod();
StringBuffer sql = new StringBuffer("SELECT CurrentCostPrice,"); // 1
//
if ((costType == null && MAcctSchema.COSTINGMETHOD_AveragePO.equals(cm))
|| MAcctSchema.COSTINGMETHOD_AveragePO.equals(costType))
sql.append("COSTAVERAGE"); // 2
// else if (AcctSchema.COSTING_FIFO.equals(cm))
// sql.append("COSTFIFO");
// else if (AcctSchema.COSTING_LIFO.equals(cm))
// sql.append("COSTLIFO");
else if ((costType == null && MAcctSchema.COSTINGMETHOD_LastPOPrice.equals(cm))
|| MAcctSchema.COSTINGMETHOD_LastPOPrice.equals(costType))
sql.append("PRICELASTPO");
else // AcctSchema.COSTING_STANDARD
sql.append("COSTSTANDARD");
sql.append(" FROM M_Product_Costing WHERE M_Product_ID=? AND C_AcctSchema_ID=?");
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
pstmt = DB.prepareStatement(sql.toString(), null);
pstmt.setInt(1, m_M_Product_ID);
pstmt.setInt(2, as.getC_AcctSchema_ID());
rs = pstmt.executeQuery();
if (rs.next())
{
current = rs.getBigDecimal(1);
cost = rs.getBigDecimal(2);
}
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql.toString(), e);
}
finally {
DB.close(rs, pstmt);
rs = null; pstmt = null;
}
// Return Costs
if (costType != null && cost != null && cost.compareTo(Env.ZERO)!=0)
{
log.fine("Costs=" + cost);
return cost;
}
else if (current != null && current.compareTo(Env.ZERO)!=0)
{
log.fine("Current=" + current);
return current;
}
// Create/Update Cost Record
boolean create = (cost == null && current == null);
return updateCostsOld (as, create);
} // getProductCostOld
/**
* Update/Create initial Cost Record.
* Check first for Purchase Price List,
* then Product Purchase Costs
* and then Price List
* @param as accounting schema
* @param create create record
* @return costs
*/
private BigDecimal updateCostsOld (MAcctSchema as, boolean create)
{
// Create Zero Record
if (create)
{
StringBuffer sql = new StringBuffer ("INSERT INTO M_Product_Costing "
+ "(M_Product_ID,C_AcctSchema_ID,"
+ " AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,"
+ " CurrentCostPrice,CostStandard,FutureCostPrice,"
+ " CostStandardPOQty,CostStandardPOAmt,CostStandardCumQty,CostStandardCumAmt,"
+ " CostAverage,CostAverageCumQty,CostAverageCumAmt,"
+ " PriceLastPO,PriceLastInv, TotalInvQty,TotalInvAmt) "
+ "VALUES (");
sql.append(m_M_Product_ID).append(",").append(as.getC_AcctSchema_ID()).append(",")
.append(as.getAD_Client_ID()).append(",").append(as.getAD_Org_ID()).append(",")
.append("'Y',SysDate,0,SysDate,0, 0,0,0, 0,0,0,0, 0,0,0, 0,0, 0,0)");
int no = DB.executeUpdate(sql.toString(), m_trxName);
if (no == 1)
log.fine("CostingCreated");
}
// Try to find non ZERO Price
String costSource = "PriceList-PO";
BigDecimal costs = getPriceList (as, true);
if (costs == null || costs.compareTo(Env.ZERO)==0)
{
costSource = "PO Cost";
costs = getPOCost(as);
}
if (costs == null || costs.compareTo(Env.ZERO)==0)
{
costSource = "PriceList";
costs = getPriceList (as, false);
}
// if not found use $1 (to be able to do material transactions)
if (costs == null || costs.compareTo(Env.ZERO)==0)
{
costSource = "Not Found";
costs = new BigDecimal("1");
}
// update current costs
StringBuffer sql = new StringBuffer ("UPDATE M_Product_Costing ");
sql.append("SET CurrentCostPrice=").append(costs)
.append(" WHERE M_Product_ID=").append(m_M_Product_ID)
.append(" AND C_AcctSchema_ID=").append(as.getC_AcctSchema_ID());
int no = DB.executeUpdate(sql.toString(), m_trxName);
if (no == 1)
log.fine(costSource + " - " + costs);
return costs;
} // createCosts
/**
* Get PO Price from PriceList - and convert it to AcctSchema Currency
* @param as accounting schema

View File

@ -1,421 +0,0 @@
/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution *
* Copyright (C) 1999-2007 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 *
*****************************************************************************/
/** Generated Model - DO NOT CHANGE */
package org.compiere.model;
import java.math.BigDecimal;
import java.sql.ResultSet;
import java.util.Properties;
import org.compiere.util.Env;
/** Generated Model for M_Product_Costing
* @author Adempiere (generated)
* @version Release 3.6.0LTS - $Id$ */
public class X_M_Product_Costing extends PO implements I_M_Product_Costing, I_Persistent
{
/**
*
*/
private static final long serialVersionUID = 20100614L;
/** Standard Constructor */
public X_M_Product_Costing (Properties ctx, int M_Product_Costing_ID, String trxName)
{
super (ctx, M_Product_Costing_ID, trxName);
/** if (M_Product_Costing_ID == 0)
{
setC_AcctSchema_ID (0);
setCostAverage (Env.ZERO);
setCostAverageCumAmt (Env.ZERO);
setCostAverageCumQty (Env.ZERO);
setCostStandard (Env.ZERO);
setCostStandardCumAmt (Env.ZERO);
setCostStandardCumQty (Env.ZERO);
setCostStandardPOAmt (Env.ZERO);
setCostStandardPOQty (Env.ZERO);
setCurrentCostPrice (Env.ZERO);
setFutureCostPrice (Env.ZERO);
setM_Product_ID (0);
setPriceLastInv (Env.ZERO);
setPriceLastPO (Env.ZERO);
setTotalInvAmt (Env.ZERO);
setTotalInvQty (Env.ZERO);
} */
}
/** Load Constructor */
public X_M_Product_Costing (Properties ctx, ResultSet rs, String trxName)
{
super (ctx, rs, trxName);
}
/** AccessLevel
* @return 3 - Client - Org
*/
protected int get_AccessLevel()
{
return accessLevel.intValue();
}
/** Load Meta Data */
protected POInfo initPO (Properties ctx)
{
POInfo poi = POInfo.getPOInfo (ctx, Table_ID, get_TrxName());
return poi;
}
public String toString()
{
StringBuffer sb = new StringBuffer ("X_M_Product_Costing[")
.append(get_ID()).append("]");
return sb.toString();
}
public I_C_AcctSchema getC_AcctSchema() throws RuntimeException
{
return (I_C_AcctSchema)MTable.get(getCtx(), I_C_AcctSchema.Table_Name)
.getPO(getC_AcctSchema_ID(), get_TrxName()); }
/** Set Accounting Schema.
@param C_AcctSchema_ID
Rules for accounting
*/
public void setC_AcctSchema_ID (int C_AcctSchema_ID)
{
if (C_AcctSchema_ID < 1)
set_ValueNoCheck (COLUMNNAME_C_AcctSchema_ID, null);
else
set_ValueNoCheck (COLUMNNAME_C_AcctSchema_ID, Integer.valueOf(C_AcctSchema_ID));
}
/** Get Accounting Schema.
@return Rules for accounting
*/
public int getC_AcctSchema_ID ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_C_AcctSchema_ID);
if (ii == null)
return 0;
return ii.intValue();
}
/** Set Average Cost.
@param CostAverage
Weighted average costs
*/
public void setCostAverage (BigDecimal CostAverage)
{
set_ValueNoCheck (COLUMNNAME_CostAverage, CostAverage);
}
/** Get Average Cost.
@return Weighted average costs
*/
public BigDecimal getCostAverage ()
{
BigDecimal bd = (BigDecimal)get_Value(COLUMNNAME_CostAverage);
if (bd == null)
return Env.ZERO;
return bd;
}
/** Set Average Cost Amount Sum.
@param CostAverageCumAmt
Cumulative average cost amounts (internal)
*/
public void setCostAverageCumAmt (BigDecimal CostAverageCumAmt)
{
set_ValueNoCheck (COLUMNNAME_CostAverageCumAmt, CostAverageCumAmt);
}
/** Get Average Cost Amount Sum.
@return Cumulative average cost amounts (internal)
*/
public BigDecimal getCostAverageCumAmt ()
{
BigDecimal bd = (BigDecimal)get_Value(COLUMNNAME_CostAverageCumAmt);
if (bd == null)
return Env.ZERO;
return bd;
}
/** Set Average Cost Quantity Sum.
@param CostAverageCumQty
Cumulative average cost quantities (internal)
*/
public void setCostAverageCumQty (BigDecimal CostAverageCumQty)
{
set_ValueNoCheck (COLUMNNAME_CostAverageCumQty, CostAverageCumQty);
}
/** Get Average Cost Quantity Sum.
@return Cumulative average cost quantities (internal)
*/
public BigDecimal getCostAverageCumQty ()
{
BigDecimal bd = (BigDecimal)get_Value(COLUMNNAME_CostAverageCumQty);
if (bd == null)
return Env.ZERO;
return bd;
}
/** Set Standard Cost.
@param CostStandard
Standard Costs
*/
public void setCostStandard (BigDecimal CostStandard)
{
set_ValueNoCheck (COLUMNNAME_CostStandard, CostStandard);
}
/** Get Standard Cost.
@return Standard Costs
*/
public BigDecimal getCostStandard ()
{
BigDecimal bd = (BigDecimal)get_Value(COLUMNNAME_CostStandard);
if (bd == null)
return Env.ZERO;
return bd;
}
/** Set Std Cost Amount Sum.
@param CostStandardCumAmt
Standard Cost Invoice Amount Sum (internal)
*/
public void setCostStandardCumAmt (BigDecimal CostStandardCumAmt)
{
set_ValueNoCheck (COLUMNNAME_CostStandardCumAmt, CostStandardCumAmt);
}
/** Get Std Cost Amount Sum.
@return Standard Cost Invoice Amount Sum (internal)
*/
public BigDecimal getCostStandardCumAmt ()
{
BigDecimal bd = (BigDecimal)get_Value(COLUMNNAME_CostStandardCumAmt);
if (bd == null)
return Env.ZERO;
return bd;
}
/** Set Std Cost Quantity Sum.
@param CostStandardCumQty
Standard Cost Invoice Quantity Sum (internal)
*/
public void setCostStandardCumQty (BigDecimal CostStandardCumQty)
{
set_ValueNoCheck (COLUMNNAME_CostStandardCumQty, CostStandardCumQty);
}
/** Get Std Cost Quantity Sum.
@return Standard Cost Invoice Quantity Sum (internal)
*/
public BigDecimal getCostStandardCumQty ()
{
BigDecimal bd = (BigDecimal)get_Value(COLUMNNAME_CostStandardCumQty);
if (bd == null)
return Env.ZERO;
return bd;
}
/** Set Std PO Cost Amount Sum.
@param CostStandardPOAmt
Standard Cost Purchase Order Amount Sum (internal)
*/
public void setCostStandardPOAmt (BigDecimal CostStandardPOAmt)
{
set_ValueNoCheck (COLUMNNAME_CostStandardPOAmt, CostStandardPOAmt);
}
/** Get Std PO Cost Amount Sum.
@return Standard Cost Purchase Order Amount Sum (internal)
*/
public BigDecimal getCostStandardPOAmt ()
{
BigDecimal bd = (BigDecimal)get_Value(COLUMNNAME_CostStandardPOAmt);
if (bd == null)
return Env.ZERO;
return bd;
}
/** Set Std PO Cost Quantity Sum.
@param CostStandardPOQty
Standard Cost Purchase Order Quantity Sum (internal)
*/
public void setCostStandardPOQty (BigDecimal CostStandardPOQty)
{
set_ValueNoCheck (COLUMNNAME_CostStandardPOQty, CostStandardPOQty);
}
/** Get Std PO Cost Quantity Sum.
@return Standard Cost Purchase Order Quantity Sum (internal)
*/
public BigDecimal getCostStandardPOQty ()
{
BigDecimal bd = (BigDecimal)get_Value(COLUMNNAME_CostStandardPOQty);
if (bd == null)
return Env.ZERO;
return bd;
}
/** Set Current Cost Price.
@param CurrentCostPrice
The currently used cost price
*/
public void setCurrentCostPrice (BigDecimal CurrentCostPrice)
{
set_Value (COLUMNNAME_CurrentCostPrice, CurrentCostPrice);
}
/** Get Current Cost Price.
@return The currently used cost price
*/
public BigDecimal getCurrentCostPrice ()
{
BigDecimal bd = (BigDecimal)get_Value(COLUMNNAME_CurrentCostPrice);
if (bd == null)
return Env.ZERO;
return bd;
}
/** Set Future Cost Price.
@param FutureCostPrice Future Cost Price */
public void setFutureCostPrice (BigDecimal FutureCostPrice)
{
set_Value (COLUMNNAME_FutureCostPrice, FutureCostPrice);
}
/** Get Future Cost Price.
@return Future Cost Price */
public BigDecimal getFutureCostPrice ()
{
BigDecimal bd = (BigDecimal)get_Value(COLUMNNAME_FutureCostPrice);
if (bd == null)
return Env.ZERO;
return bd;
}
public I_M_Product getM_Product() throws RuntimeException
{
return (I_M_Product)MTable.get(getCtx(), I_M_Product.Table_Name)
.getPO(getM_Product_ID(), get_TrxName()); }
/** Set Product.
@param M_Product_ID
Product, Service, Item
*/
public void setM_Product_ID (int M_Product_ID)
{
if (M_Product_ID < 1)
set_ValueNoCheck (COLUMNNAME_M_Product_ID, null);
else
set_ValueNoCheck (COLUMNNAME_M_Product_ID, Integer.valueOf(M_Product_ID));
}
/** Get Product.
@return Product, Service, Item
*/
public int getM_Product_ID ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_M_Product_ID);
if (ii == null)
return 0;
return ii.intValue();
}
/** Set Last Invoice Price.
@param PriceLastInv
Price of the last invoice for the product
*/
public void setPriceLastInv (BigDecimal PriceLastInv)
{
set_ValueNoCheck (COLUMNNAME_PriceLastInv, PriceLastInv);
}
/** Get Last Invoice Price.
@return Price of the last invoice for the product
*/
public BigDecimal getPriceLastInv ()
{
BigDecimal bd = (BigDecimal)get_Value(COLUMNNAME_PriceLastInv);
if (bd == null)
return Env.ZERO;
return bd;
}
/** Set Last PO Price.
@param PriceLastPO
Price of the last purchase order for the product
*/
public void setPriceLastPO (BigDecimal PriceLastPO)
{
set_ValueNoCheck (COLUMNNAME_PriceLastPO, PriceLastPO);
}
/** Get Last PO Price.
@return Price of the last purchase order for the product
*/
public BigDecimal getPriceLastPO ()
{
BigDecimal bd = (BigDecimal)get_Value(COLUMNNAME_PriceLastPO);
if (bd == null)
return Env.ZERO;
return bd;
}
/** Set Total Invoice Amount.
@param TotalInvAmt
Cumulative total lifetime invoice amount
*/
public void setTotalInvAmt (BigDecimal TotalInvAmt)
{
set_ValueNoCheck (COLUMNNAME_TotalInvAmt, TotalInvAmt);
}
/** Get Total Invoice Amount.
@return Cumulative total lifetime invoice amount
*/
public BigDecimal getTotalInvAmt ()
{
BigDecimal bd = (BigDecimal)get_Value(COLUMNNAME_TotalInvAmt);
if (bd == null)
return Env.ZERO;
return bd;
}
/** Set Total Invoice Quantity.
@param TotalInvQty
Cumulative total lifetime invoice quantity
*/
public void setTotalInvQty (BigDecimal TotalInvQty)
{
set_ValueNoCheck (COLUMNNAME_TotalInvQty, TotalInvQty);
}
/** Get Total Invoice Quantity.
@return Cumulative total lifetime invoice quantity
*/
public BigDecimal getTotalInvQty ()
{
BigDecimal bd = (BigDecimal)get_Value(COLUMNNAME_TotalInvQty);
if (bd == null)
return Env.ZERO;
return bd;
}
}

View File

@ -59,7 +59,7 @@ public class Merge
/** Tables to delete (not update) for M_Product */
public static String[] s_delete_Product = new String[]
{"M_Product_PO", "M_Replenish", "T_Replenish",
"M_ProductPrice", "M_Product_Costing",
"M_ProductPrice",
"M_Cost", // teo_sarca [ 1704554 ]
"M_Product_Trl", "M_Product_Acct"}; // M_Storage