details:   https://code.openbravo.com/erp/devel/pi/rev/fc4fc420b639
changeset: 15245:fc4fc420b639
user:      Jon Alegría <jon.alegria <at> openbravo.com>
date:      Mon Jan 30 11:51:35 2012 +0100
summary:   Fixes issue 0019433: Net Unit Price wrong calculated with discount

diffstat:

 src/org/openbravo/erpCommon/ad_callouts/SL_Order_Amt.java |  30 ++++++++++-----
 1 files changed, 20 insertions(+), 10 deletions(-)

diffs (67 lines):

diff -r 578ff14a16ee -r fc4fc420b639 
src/org/openbravo/erpCommon/ad_callouts/SL_Order_Amt.java
--- a/src/org/openbravo/erpCommon/ad_callouts/SL_Order_Amt.java Mon Jan 30 
07:43:43 2012 +0000
+++ b/src/org/openbravo/erpCommon/ad_callouts/SL_Order_Amt.java Mon Jan 30 
11:51:35 2012 +0100
@@ -114,13 +114,15 @@
 
     stockSecurity = new BigDecimal(strStockSecurity);
     qtyOrdered = (strQtyOrdered.equals("") ? ZERO : new 
BigDecimal(strQtyOrdered));
-    priceActual = (strPriceActual.equals("") ? ZERO : (new 
BigDecimal(strPriceActual)));
+    priceActual = (strPriceActual.equals("") ? ZERO : (new 
BigDecimal(strPriceActual))).setScale(
+        PricePrecision, BigDecimal.ROUND_HALF_UP);
     discount = (strDiscount.equals("") ? ZERO : new BigDecimal(strDiscount));
     priceLimit = (strPriceLimit.equals("") ? ZERO : (new 
BigDecimal(strPriceLimit))).setScale(
         PricePrecision, BigDecimal.ROUND_HALF_UP);
     priceList = (strPriceList.equals("") ? ZERO : (new 
BigDecimal(strPriceList))).setScale(
         PricePrecision, BigDecimal.ROUND_HALF_UP);
-    priceStd = (strPriceStd.equals("") ? ZERO : (new BigDecimal(strPriceStd)));
+    priceStd = (strPriceStd.equals("") ? ZERO : (new 
BigDecimal(strPriceStd))).setScale(
+        PricePrecision, BigDecimal.ROUND_HALF_UP);
     LineNetAmt = (strLineNetAmt.equals("") ? ZERO : (new 
BigDecimal(strLineNetAmt))).setScale(
         PricePrecision, BigDecimal.ROUND_HALF_UP);
     /*
@@ -150,17 +152,21 @@
         resultado.append("new Array(\"inppricestd\", " + priceStd.toString() + 
"),");
       } else {
         // priceStd needs to be changed?
-        BigDecimal expectedPriceActual = new 
BigDecimal(SLOrderAmtData.getOffersPrice(this,
+        BigDecimal expectedPriceActual = new 
BigDecimal(SLOrderProductData.getOffersPrice(this,
             dataOrder[0].dateordered, dataOrder[0].cBpartnerId, strProduct, 
priceStd.toString(),
-            strQty, dataOrder[0].mPricelistId));
+            strQty, dataOrder[0].mPricelistId, dataOrder[0].id));
+        if (expectedPriceActual.scale() > PricePrecision)
+          expectedPriceActual = expectedPriceActual.setScale(PricePrecision,
+              BigDecimal.ROUND_HALF_UP);
 
         // To avoid rounding issues if the expected priceActual is equals to 
the current
         // priceActual.
         // Do not do anything.
         if (!priceActual.equals(expectedPriceActual)) {
-          priceStd = new BigDecimal(SLOrderAmtData.getOffersStdPrice(this,
+          priceStd = new BigDecimal(SLOrderProductData.getOffersStdPrice(this,
               dataOrder[0].cBpartnerId, 
expectedPriceActual.toString().replace("\"", ""),
-              strProduct, dataOrder[0].dateordered, strQty, 
dataOrder[0].mPricelistId));
+              strProduct, dataOrder[0].dateordered, strQty, 
dataOrder[0].mPricelistId,
+              dataOrder[0].id));
         }
         // priceList
         resultado.append("new Array(\"inppricestd\", " + priceStd.toString() + 
"),");
@@ -236,11 +242,15 @@
       if (discount1.compareTo(discount2) != 0) // checks if rounded
       // discount has changed
       {
-       priceStd = priceList.subtract(priceList.multiply(discount).divide(new 
BigDecimal("100"),
-                   12, BigDecimal.ROUND_HALF_EVEN));
-        priceActual = new BigDecimal(SLOrderAmtData.getOffersPrice(this,
+        priceStd = priceList.subtract(priceList.multiply(discount).divide(new 
BigDecimal("100"),
+            12, BigDecimal.ROUND_HALF_EVEN));
+        priceActual = new BigDecimal(SLOrderProductData.getOffersPrice(this,
             dataOrder[0].dateordered, dataOrder[0].cBpartnerId, strProduct,
-            priceStd.toPlainString(), strQty, dataOrder[0].mPricelistId));
+            priceStd.toPlainString(), strQty, dataOrder[0].mPricelistId, 
dataOrder[0].id));
+        if (priceStd.scale() > PricePrecision)
+          priceStd = priceStd.setScale(PricePrecision, 
BigDecimal.ROUND_HALF_UP);
+        if (priceActual.scale() > PricePrecision)
+          priceActual = priceActual.setScale(PricePrecision, 
BigDecimal.ROUND_HALF_UP);
         resultado.append("new Array(\"inppriceactual\", " + 
priceActual.toString() + "),");
         resultado.append("new Array(\"inppricestd\", " + priceStd.toString() + 
"),");
       }

------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to