IDEMPIERE-3082 Production posting not balanced when serializing finished product
This commit is contained in:
parent
3379872f0a
commit
7bf6ef3296
|
@ -196,7 +196,7 @@ public class InventoryCountCreate extends SvrProcess
|
||||||
.append(" AND COALESCE(il.M_AttributeSetInstance_ID,0)=COALESCE(s.M_AttributeSetInstance_ID,0))");
|
.append(" AND COALESCE(il.M_AttributeSetInstance_ID,0)=COALESCE(s.M_AttributeSetInstance_ID,0))");
|
||||||
// + " AND il.M_AttributeSetInstance_ID=s.M_AttributeSetInstance_ID)");
|
// + " AND il.M_AttributeSetInstance_ID=s.M_AttributeSetInstance_ID)");
|
||||||
//
|
//
|
||||||
sql.append(" ORDER BY l.Value, p.Value, s.QtyOnHand DESC"); // Locator/Product
|
sql.append(" ORDER BY l.Value, p.Value, s.M_AttributeSetInstance_ID, s.DateMaterialPolicy, s.QtyOnHand DESC"); // Locator/Product
|
||||||
//
|
//
|
||||||
int count = 0;
|
int count = 0;
|
||||||
PreparedStatement pstmt = null;
|
PreparedStatement pstmt = null;
|
||||||
|
@ -280,13 +280,14 @@ public class InventoryCountCreate extends SvrProcess
|
||||||
if (QtyOnHand.signum() == 0)
|
if (QtyOnHand.signum() == 0)
|
||||||
M_AttributeSetInstance_ID = 0;
|
M_AttributeSetInstance_ID = 0;
|
||||||
|
|
||||||
|
// TODO???? This is not working --- must create one line and multiple MA
|
||||||
if (m_line != null
|
if (m_line != null
|
||||||
&& m_line.getM_Locator_ID() == M_Locator_ID
|
&& m_line.getM_Locator_ID() == M_Locator_ID
|
||||||
&& m_line.getM_Product_ID() == M_Product_ID)
|
&& m_line.getM_Product_ID() == M_Product_ID)
|
||||||
{
|
{
|
||||||
if (QtyOnHand.signum() == 0)
|
if (QtyOnHand.signum() == 0)
|
||||||
return 0;
|
return 0;
|
||||||
// Same ASI (usually 0)
|
// Same ASI and Date
|
||||||
if (m_line.getM_AttributeSetInstance_ID() == M_AttributeSetInstance_ID && ((dateMPolicy==null && oldDateMPolicy==null) || (dateMPolicy!=null && dateMPolicy.equals(oldDateMPolicy)) || (oldDateMPolicy!=null && oldDateMPolicy.equals(dateMPolicy))))
|
if (m_line.getM_AttributeSetInstance_ID() == M_AttributeSetInstance_ID && ((dateMPolicy==null && oldDateMPolicy==null) || (dateMPolicy!=null && dateMPolicy.equals(oldDateMPolicy)) || (oldDateMPolicy!=null && oldDateMPolicy.equals(dateMPolicy))))
|
||||||
{
|
{
|
||||||
m_line.setQtyBook(m_line.getQtyBook().add(QtyOnHand));
|
m_line.setQtyBook(m_line.getQtyBook().add(QtyOnHand));
|
||||||
|
@ -316,7 +317,7 @@ public class InventoryCountCreate extends SvrProcess
|
||||||
}
|
}
|
||||||
// new line
|
// new line
|
||||||
m_line = new MInventoryLine (m_inventory, M_Locator_ID,
|
m_line = new MInventoryLine (m_inventory, M_Locator_ID,
|
||||||
M_Product_ID, M_AttributeSetInstance_ID,
|
M_Product_ID, 0,
|
||||||
QtyOnHand, QtyOnHand); // book/count
|
QtyOnHand, QtyOnHand); // book/count
|
||||||
|
|
||||||
oldDateMPolicy = dateMPolicy;
|
oldDateMPolicy = dateMPolicy;
|
||||||
|
|
|
@ -68,6 +68,7 @@ public class Doc_Production extends Doc
|
||||||
return null;
|
return null;
|
||||||
} // loadDocumentDetails
|
} // loadDocumentDetails
|
||||||
|
|
||||||
|
private BigDecimal m_qtyProduced;
|
||||||
/**
|
/**
|
||||||
* Load Invoice Line
|
* Load Invoice Line
|
||||||
* @param prod production
|
* @param prod production
|
||||||
|
@ -76,6 +77,7 @@ public class Doc_Production extends Doc
|
||||||
private DocLine[] loadLines(X_M_Production prod)
|
private DocLine[] loadLines(X_M_Production prod)
|
||||||
{
|
{
|
||||||
ArrayList<DocLine> list = new ArrayList<DocLine>();
|
ArrayList<DocLine> list = new ArrayList<DocLine>();
|
||||||
|
m_qtyProduced = Env.ZERO;
|
||||||
String sqlPL = null;
|
String sqlPL = null;
|
||||||
if (prod.isUseProductionPlan()){
|
if (prod.isUseProductionPlan()){
|
||||||
// Production
|
// Production
|
||||||
|
@ -115,6 +117,9 @@ public class Doc_Production extends Doc
|
||||||
docLine.setProductionBOM(line.getM_Product_ID() == line.getM_ProductionPlan().getM_Product_ID());
|
docLine.setProductionBOM(line.getM_Product_ID() == line.getM_ProductionPlan().getM_Product_ID());
|
||||||
else
|
else
|
||||||
docLine.setProductionBOM(line.getM_Product_ID() == prod.getM_Product_ID());
|
docLine.setProductionBOM(line.getM_Product_ID() == prod.getM_Product_ID());
|
||||||
|
if (docLine.isProductionBOM()) {
|
||||||
|
m_qtyProduced = m_qtyProduced.add(line.getMovementQty());
|
||||||
|
}
|
||||||
//
|
//
|
||||||
if (log.isLoggable(Level.FINE)) log.fine(docLine.toString());
|
if (log.isLoggable(Level.FINE)) log.fine(docLine.toString());
|
||||||
list.add (docLine);
|
list.add (docLine);
|
||||||
|
@ -195,9 +200,22 @@ public class Doc_Production extends Doc
|
||||||
|
|
||||||
if (!parentBomPro.equals(parentEndPro))
|
if (!parentBomPro.equals(parentEndPro))
|
||||||
continue;
|
continue;
|
||||||
//pb changed this 20/10/06
|
if (!line0.isProductionBOM()) {
|
||||||
if (!line0.isProductionBOM())
|
// get cost of children
|
||||||
bomCost = bomCost.add(line0.getProductCosts(as, line.getAD_Org_ID(), false).setScale(2,BigDecimal.ROUND_HALF_UP));
|
MCostDetail cd0 = MCostDetail.get (as.getCtx(), "M_ProductionLine_ID=?",
|
||||||
|
line0.get_ID(), line0.getM_AttributeSetInstance_ID(), as.getC_AcctSchema_ID(), getTrxName());
|
||||||
|
BigDecimal costs0;
|
||||||
|
if (cd0 != null) {
|
||||||
|
costs0 = cd0.getAmt();
|
||||||
|
} else {
|
||||||
|
costs0 = line0.getProductCosts(as, line0.getAD_Org_ID(), false);
|
||||||
|
}
|
||||||
|
bomCost = bomCost.add(costs0.setScale(2,BigDecimal.ROUND_HALF_UP));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (line.getQty().compareTo(m_qtyProduced) != 0) {
|
||||||
|
BigDecimal factor = line.getQty().divide(m_qtyProduced, 12, BigDecimal.ROUND_HALF_UP);
|
||||||
|
bomCost = bomCost.multiply(factor).setScale(2,BigDecimal.ROUND_HALF_UP);
|
||||||
}
|
}
|
||||||
int precision = as.getStdPrecision();
|
int precision = as.getStdPrecision();
|
||||||
BigDecimal variance = (costs.setScale(precision, BigDecimal.ROUND_HALF_UP)).subtract(bomCost.negate());
|
BigDecimal variance = (costs.setScale(precision, BigDecimal.ROUND_HALF_UP)).subtract(bomCost.negate());
|
||||||
|
|
Loading…
Reference in New Issue