* [ 1647734 ] incorrect cost used in Shipment and MM (Avg PO costing)
This commit is contained in:
parent
7227891daa
commit
f1a78ab8c9
|
@ -21,6 +21,7 @@ import java.sql.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import org.compiere.model.*;
|
import org.compiere.model.*;
|
||||||
|
|
||||||
import java.util.logging.*;
|
import java.util.logging.*;
|
||||||
import org.compiere.util.*;
|
import org.compiere.util.*;
|
||||||
|
|
||||||
|
@ -62,7 +63,7 @@ public class Doc_InOut extends Doc
|
||||||
} // loadDocumentDetails
|
} // loadDocumentDetails
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load Invoice Line
|
* Load InOut Line
|
||||||
* @param inout shipment/receipt
|
* @param inout shipment/receipt
|
||||||
* @return DocLine Array
|
* @return DocLine Array
|
||||||
*/
|
*/
|
||||||
|
@ -199,8 +200,25 @@ public class Doc_InOut extends Doc
|
||||||
for (int i = 0; i < p_lines.length; i++)
|
for (int i = 0; i < p_lines.length; i++)
|
||||||
{
|
{
|
||||||
DocLine line = p_lines[i];
|
DocLine line = p_lines[i];
|
||||||
BigDecimal costs = line.getProductCosts(as, line.getAD_Org_ID(), false); // non-zero costs
|
BigDecimal costs = null;
|
||||||
MProduct product = line.getProduct();
|
MProduct product = line.getProduct();
|
||||||
|
//get costing method for product
|
||||||
|
String costingMethod = as.getCostingMethod();
|
||||||
|
MProductCategoryAcct pca = MProductCategoryAcct.get(getCtx(),
|
||||||
|
product.getM_Product_Category_ID(), as.getC_AcctSchema_ID(), getTrxName());
|
||||||
|
if (pca.getCostingMethod() != null)
|
||||||
|
costingMethod = pca.getCostingMethod();
|
||||||
|
if (MAcctSchema.COSTINGMETHOD_AveragePO.equals(costingMethod) ||
|
||||||
|
MAcctSchema.COSTINGMETHOD_LastPOPrice.equals(costingMethod) )
|
||||||
|
{
|
||||||
|
int C_OrderLine_ID = line.getC_OrderLine_ID();
|
||||||
|
MOrderLine orderLine = new MOrderLine (getCtx(), C_OrderLine_ID, getTrxName());
|
||||||
|
costs = orderLine.getPriceCost();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
costs = line.getProductCosts(as, line.getAD_Org_ID(), false); // current costs
|
||||||
|
}
|
||||||
if (costs == null || costs.signum() == 0)
|
if (costs == null || costs.signum() == 0)
|
||||||
{
|
{
|
||||||
p_Error = "Resubmit - No Costs for " + product.getName();
|
p_Error = "Resubmit - No Costs for " + product.getName();
|
||||||
|
|
|
@ -147,69 +147,77 @@ public class Doc_MatchPO extends Doc
|
||||||
poCost, getQty(), // Delivered
|
poCost, getQty(), // Delivered
|
||||||
m_oLine.getDescription(), getTrxName());
|
m_oLine.getDescription(), getTrxName());
|
||||||
|
|
||||||
// Current Costs
|
// Calculate PPV for standard costing
|
||||||
String costingMethod = as.getCostingMethod();
|
String costingMethod = as.getCostingMethod();
|
||||||
MProduct product = MProduct.get(getCtx(), getM_Product_ID());
|
MProduct product = MProduct.get(getCtx(), getM_Product_ID());
|
||||||
MProductCategoryAcct pca = MProductCategoryAcct.get(getCtx(),
|
MProductCategoryAcct pca = MProductCategoryAcct.get(getCtx(),
|
||||||
product.getM_Product_Category_ID(), as.getC_AcctSchema_ID(), getTrxName());
|
product.getM_Product_Category_ID(), as.getC_AcctSchema_ID(), getTrxName());
|
||||||
if (pca.getCostingMethod() != null)
|
if (pca.getCostingMethod() != null)
|
||||||
costingMethod = pca.getCostingMethod();
|
costingMethod = pca.getCostingMethod();
|
||||||
|
|
||||||
|
//get standard cost and also makesure cost for other costing method is updated
|
||||||
BigDecimal costs = m_pc.getProductCosts(as, getAD_Org_ID(),
|
BigDecimal costs = m_pc.getProductCosts(as, getAD_Org_ID(),
|
||||||
costingMethod, m_C_OrderLine_ID, false); // non-zero costs
|
MAcctSchema.COSTINGMETHOD_StandardCosting, m_C_OrderLine_ID, false); // non-zero costs
|
||||||
|
|
||||||
// No Costs yet - no PPV
|
if (MAcctSchema.COSTINGMETHOD_StandardCosting.equals(costingMethod))
|
||||||
if (costs == null || costs.signum() == 0)
|
|
||||||
{
|
{
|
||||||
p_Error = "Resubmit - No Costs for " + product.getName();
|
// No Costs yet - no PPV
|
||||||
log.log(Level.SEVERE, p_Error);
|
if (costs == null || costs.signum() == 0)
|
||||||
return null;
|
{
|
||||||
}
|
p_Error = "Resubmit - No Costs for " + product.getName();
|
||||||
|
log.log(Level.SEVERE, p_Error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
// Difference
|
// Difference
|
||||||
BigDecimal difference = poCost.subtract(costs);
|
BigDecimal difference = poCost.subtract(costs);
|
||||||
// Nothing to post
|
// Nothing to post
|
||||||
if (difference.signum() == 0)
|
if (difference.signum() == 0)
|
||||||
{
|
{
|
||||||
log.log(Level.FINE, "No Cost Difference for M_Product_ID=" + getM_Product_ID());
|
log.log(Level.FINE, "No Cost Difference for M_Product_ID=" + getM_Product_ID());
|
||||||
|
return facts;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Product PPV
|
||||||
|
FactLine cr = fact.createLine(null,
|
||||||
|
m_pc.getAccount(ProductCost.ACCTTYPE_P_PPV, as),
|
||||||
|
as.getC_Currency_ID(), difference);
|
||||||
|
if (cr != null)
|
||||||
|
{
|
||||||
|
cr.setQty(getQty());
|
||||||
|
cr.setC_BPartner_ID(m_oLine.getC_BPartner_ID());
|
||||||
|
cr.setC_Activity_ID(m_oLine.getC_Activity_ID());
|
||||||
|
cr.setC_Campaign_ID(m_oLine.getC_Campaign_ID());
|
||||||
|
cr.setC_Project_ID(m_oLine.getC_Project_ID());
|
||||||
|
cr.setC_UOM_ID(m_oLine.getC_UOM_ID());
|
||||||
|
cr.setUser1_ID(m_oLine.getUser1_ID());
|
||||||
|
cr.setUser2_ID(m_oLine.getUser2_ID());
|
||||||
|
}
|
||||||
|
|
||||||
|
// PPV Offset
|
||||||
|
FactLine dr = fact.createLine(null,
|
||||||
|
getAccount(Doc.ACCTTYPE_PPVOffset, as),
|
||||||
|
as.getC_Currency_ID(), difference.negate());
|
||||||
|
if (dr != null)
|
||||||
|
{
|
||||||
|
dr.setQty(getQty().negate());
|
||||||
|
dr.setC_BPartner_ID(m_oLine.getC_BPartner_ID());
|
||||||
|
dr.setC_Activity_ID(m_oLine.getC_Activity_ID());
|
||||||
|
dr.setC_Campaign_ID(m_oLine.getC_Campaign_ID());
|
||||||
|
dr.setC_Project_ID(m_oLine.getC_Project_ID());
|
||||||
|
dr.setC_UOM_ID(m_oLine.getC_UOM_ID());
|
||||||
|
dr.setUser1_ID(m_oLine.getUser1_ID());
|
||||||
|
dr.setUser2_ID(m_oLine.getUser2_ID());
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
facts.add(fact);
|
facts.add(fact);
|
||||||
return facts;
|
return facts;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
// Product PPV
|
|
||||||
FactLine cr = fact.createLine(null,
|
|
||||||
m_pc.getAccount(ProductCost.ACCTTYPE_P_PPV, as),
|
|
||||||
as.getC_Currency_ID(), difference);
|
|
||||||
if (cr != null)
|
|
||||||
{
|
{
|
||||||
cr.setQty(getQty());
|
return facts;
|
||||||
cr.setC_BPartner_ID(m_oLine.getC_BPartner_ID());
|
|
||||||
cr.setC_Activity_ID(m_oLine.getC_Activity_ID());
|
|
||||||
cr.setC_Campaign_ID(m_oLine.getC_Campaign_ID());
|
|
||||||
cr.setC_Project_ID(m_oLine.getC_Project_ID());
|
|
||||||
cr.setC_UOM_ID(m_oLine.getC_UOM_ID());
|
|
||||||
cr.setUser1_ID(m_oLine.getUser1_ID());
|
|
||||||
cr.setUser2_ID(m_oLine.getUser2_ID());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// PPV Offset
|
|
||||||
FactLine dr = fact.createLine(null,
|
|
||||||
getAccount(Doc.ACCTTYPE_PPVOffset, as),
|
|
||||||
as.getC_Currency_ID(), difference.negate());
|
|
||||||
if (dr != null)
|
|
||||||
{
|
|
||||||
dr.setQty(getQty().negate());
|
|
||||||
dr.setC_BPartner_ID(m_oLine.getC_BPartner_ID());
|
|
||||||
dr.setC_Activity_ID(m_oLine.getC_Activity_ID());
|
|
||||||
dr.setC_Campaign_ID(m_oLine.getC_Campaign_ID());
|
|
||||||
dr.setC_Project_ID(m_oLine.getC_Project_ID());
|
|
||||||
dr.setC_UOM_ID(m_oLine.getC_UOM_ID());
|
|
||||||
dr.setUser1_ID(m_oLine.getUser1_ID());
|
|
||||||
dr.setUser2_ID(m_oLine.getUser2_ID());
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
facts.add(fact);
|
|
||||||
return facts;
|
|
||||||
} // createFact
|
} // createFact
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue