From: <vp...@us...> - 2010-12-29 08:04:36
|
Revision: 14645 http://adempiere.svn.sourceforge.net/adempiere/?rev=14645&view=rev Author: vpj-cd Date: 2010-12-29 08:04:30 +0000 (Wed, 29 Dec 2010) Log Message: ----------- Fix the issue Cost Amt is not update when the MCostDetail exist. Modified Paths: -------------- branches/cost_engine/extension/costengine/src/main/java/org/adempiere/engine/AverageInvoiceCostingMethod.java branches/cost_engine/extension/costengine/src/main/java/org/adempiere/engine/AveragePOCostingMethod.java branches/cost_engine/extension/costengine/src/main/java/org/adempiere/engine/CostEngine.java Modified: branches/cost_engine/extension/costengine/src/main/java/org/adempiere/engine/AverageInvoiceCostingMethod.java =================================================================== --- branches/cost_engine/extension/costengine/src/main/java/org/adempiere/engine/AverageInvoiceCostingMethod.java 2010-12-21 22:18:03 UTC (rev 14644) +++ branches/cost_engine/extension/costengine/src/main/java/org/adempiere/engine/AverageInvoiceCostingMethod.java 2010-12-29 08:04:30 UTC (rev 14645) @@ -72,7 +72,6 @@ m_CumulatedAmtLL = getNewCumulatedAmtLL(m_last_costdetail).add(m_AmountLL); m_CurrentCostPrice = m_CumulatedAmt.divide(m_CumulatedQty.signum() != 0 ? m_CumulatedQty : BigDecimal.ONE, m_as.getCostingPrecision(), BigDecimal.ROUND_HALF_UP); m_CurrentCostPriceLL = m_CumulatedAmtLL.divide(m_CumulatedQty.signum() != 0 ? m_CumulatedQty : BigDecimal.ONE, m_as.getCostingPrecision(), BigDecimal.ROUND_HALF_UP); - if(!m_costdetail.isProcessing()) { m_AdjustCost = m_costThisLevel.multiply(m_trx.getMovementQty()).subtract(m_costdetail.getCostAmt()); @@ -125,8 +124,6 @@ m_costdetail.setCumulatedQty(getNewCumulatedQty(m_last_costdetail)); m_costdetail.setCurrentCostPrice(getNewCurrentCostPrice(m_last_costdetail,m_as.getCostingPrecision(), BigDecimal.ROUND_HALF_UP)); m_costdetail.setAmt(m_CurrentCostPrice.multiply(m_trx.getMovementQty()).abs()); - if(m_trx.getMovementType().contains("-")) - m_costdetail.setCostAmt(m_costdetail.getAmt()); } if(m_AdjustCostLL.signum() != 0) { @@ -142,9 +139,8 @@ m_costdetail.setCumulatedQty(getNewCumulatedQty(m_last_costdetail)); m_costdetail.setCurrentCostPriceLL(getNewCurrentCostPriceLL(m_last_costdetail,m_as.getCostingPrecision(), BigDecimal.ROUND_HALF_UP)); m_costdetail.setAmtLL(m_CurrentCostPriceLL.multiply(m_trx.getMovementQty())); - if(m_trx.getMovementType().contains("-")) - m_costdetail.setCostAmtLL(m_costdetail.getAmtLL()); - } + } + updateAmtCost(); m_costdetail.saveEx(); return; } @@ -154,16 +150,7 @@ else m_costdetail.setIsSOTrx(m_model.isSOTrx()); - if(m_trx.getMovementType().contains("+")) - { - m_costdetail.setCostAmt(m_costThisLevel.multiply(m_trx.getMovementQty()).abs()); - m_costdetail.setCostAmtLL(m_costLowLevel.multiply(m_trx.getMovementQty()).abs()); - } - if(m_trx.getMovementType().contains("-")) - { - m_costdetail.setCostAmt(m_costdetail.getAmt()); - m_costdetail.setCostAmtLL(m_costdetail.getAmtLL()); - } + updateAmtCost(); m_costdetail.setCumulatedQty(getNewCumulatedQty(m_last_costdetail)); m_costdetail.setCumulatedAmt(getNewCumulatedAmt(m_last_costdetail)); @@ -260,7 +247,7 @@ public BigDecimal getNewCurrentCostPrice(MCostDetail cd, int scale, int roundingMode) { - if(getNewCumulatedQty(cd).signum() != 0) + if(getNewCumulatedQty(cd).signum() != 0 && getNewCumulatedAmt(cd).signum() != 0) return getNewCumulatedAmt(cd).divide(getNewCumulatedQty(cd), scale , roundingMode); else return BigDecimal.ZERO; } @@ -294,7 +281,7 @@ */ public BigDecimal getNewCurrentCostPriceLL(MCostDetail cd, int scale, int roundingMode) { - if(getNewCumulatedQty(cd).signum() != 0) + if(getNewCumulatedQty(cd).signum() != 0 && getNewCumulatedAmtLL(cd).signum() != 0) return getNewCumulatedAmtLL(cd).divide(getNewCumulatedQty(cd), scale , roundingMode); else return BigDecimal.ZERO; } @@ -325,4 +312,21 @@ public BigDecimal getNewCumulatedQty(MCostDetail cd) { return cd.getCumulatedQty().add(cd.getQty()); } + + /** + * Update Cost Amt + */ + private void updateAmtCost() + { + if(m_trx.getMovementType().contains("+")) + { + m_costdetail.setCostAmt(m_costThisLevel.multiply(m_trx.getMovementQty()).abs()); + m_costdetail.setCostAmtLL(m_costLowLevel.multiply(m_trx.getMovementQty()).abs()); + } + if(m_trx.getMovementType().contains("-")) + { + m_costdetail.setCostAmt(m_costdetail.getAmt()); + m_costdetail.setCostAmtLL(m_costdetail.getAmtLL()); + } + } } Modified: branches/cost_engine/extension/costengine/src/main/java/org/adempiere/engine/AveragePOCostingMethod.java =================================================================== --- branches/cost_engine/extension/costengine/src/main/java/org/adempiere/engine/AveragePOCostingMethod.java 2010-12-21 22:18:03 UTC (rev 14644) +++ branches/cost_engine/extension/costengine/src/main/java/org/adempiere/engine/AveragePOCostingMethod.java 2010-12-29 08:04:30 UTC (rev 14645) @@ -123,8 +123,6 @@ m_costdetail.setCumulatedQty(getNewCumulatedQty(m_last_costdetail)); m_costdetail.setCurrentCostPrice(getNewCurrentCostPrice(m_last_costdetail,m_as.getCostingPrecision(), BigDecimal.ROUND_HALF_UP)); m_costdetail.setAmt(m_CurrentCostPrice.multiply(m_trx.getMovementQty()).abs()); - if(m_trx.getMovementType().contains("-")) - m_costdetail.setCostAmt(m_costdetail.getAmt()); } if(m_AdjustCostLL.signum() != 0) { @@ -140,9 +138,8 @@ m_costdetail.setCumulatedQty(getNewCumulatedQty(m_last_costdetail)); m_costdetail.setCurrentCostPriceLL(getNewCurrentCostPriceLL(m_last_costdetail,m_as.getCostingPrecision(), BigDecimal.ROUND_HALF_UP)); m_costdetail.setAmtLL(m_CurrentCostPriceLL.multiply(m_trx.getMovementQty())); - if(m_trx.getMovementType().contains("-")) - m_costdetail.setCostAmtLL(m_costdetail.getAmtLL()); - } + } + updateAmtCost(); m_costdetail.saveEx(); return; } @@ -152,16 +149,7 @@ else m_costdetail.setIsSOTrx(m_model.isSOTrx()); - if(m_trx.getMovementType().contains("+")) - { - m_costdetail.setCostAmt(m_costThisLevel.multiply(m_trx.getMovementQty()).abs()); - m_costdetail.setCostAmtLL(m_costLowLevel.multiply(m_trx.getMovementQty()).abs()); - } - if(m_trx.getMovementType().contains("-")) - { - m_costdetail.setCostAmt(m_costdetail.getAmt()); - m_costdetail.setCostAmtLL(m_costdetail.getAmtLL()); - } + updateAmtCost(); m_costdetail.setCumulatedQty(getNewCumulatedQty(m_last_costdetail)); m_costdetail.setCumulatedAmt(getNewCumulatedAmt(m_last_costdetail)); @@ -259,7 +247,7 @@ public BigDecimal getNewCurrentCostPrice(MCostDetail cd, int scale, int roundingMode) { - if(getNewCumulatedQty(cd).signum() != 0) + if(getNewCumulatedQty(cd).signum() != 0 && getNewCumulatedAmt(cd).signum() != 0) return getNewCumulatedAmt(cd).divide(getNewCumulatedQty(cd), scale , roundingMode); else return BigDecimal.ZERO; } @@ -293,7 +281,7 @@ */ public BigDecimal getNewCurrentCostPriceLL(MCostDetail cd, int scale, int roundingMode) { - if(getNewCumulatedQty(cd).signum() != 0) + if(getNewCumulatedQty(cd).signum() != 0 && getNewCumulatedAmtLL(cd).signum() != 0) return getNewCumulatedAmtLL(cd).divide(getNewCumulatedQty(cd), scale , roundingMode); else return BigDecimal.ZERO; } @@ -324,4 +312,21 @@ public BigDecimal getNewCumulatedQty(MCostDetail cd) { return cd.getCumulatedQty().add(cd.getQty()); } + + /** + * Update Cost Amt + */ + private void updateAmtCost() + { + if(m_trx.getMovementType().contains("+")) + { + m_costdetail.setCostAmt(m_costThisLevel.multiply(m_trx.getMovementQty()).abs()); + m_costdetail.setCostAmtLL(m_costLowLevel.multiply(m_trx.getMovementQty()).abs()); + } + if(m_trx.getMovementType().contains("-")) + { + m_costdetail.setCostAmt(m_costdetail.getAmt()); + m_costdetail.setCostAmtLL(m_costdetail.getAmtLL()); + } + } } Modified: branches/cost_engine/extension/costengine/src/main/java/org/adempiere/engine/CostEngine.java =================================================================== --- branches/cost_engine/extension/costengine/src/main/java/org/adempiere/engine/CostEngine.java 2010-12-21 22:18:03 UTC (rev 14644) +++ branches/cost_engine/extension/costengine/src/main/java/org/adempiere/engine/CostEngine.java 2010-12-29 08:04:30 UTC (rev 14645) @@ -307,7 +307,9 @@ if (model instanceof MInventoryLine && costThisLevel.signum() == 0 ) { MInventoryLine inventoryLine = (MInventoryLine) model; - costThisLevel = inventoryLine.getCurrentCostPrice(); + //Use the cost only for Physical Inventory + if(inventoryLine.getQtyInternalUse().signum() == 0) + costThisLevel = inventoryLine.getCurrentCostPrice(); } //do not exist cost detail by some purchase then get the cost from other other warehouse if(model instanceof MMovementLine && costThisLevel.signum() == 0) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |