Author: jacopoc
Date: Mon Apr 20 15:25:02 2015
New Revision: 1674927

URL: http://svn.apache.org/r1674927
Log:
Applied fix from trunk for revision: 1674908 
===

OFBIZ-6269: "Pro-rate shipping calculation is generating incorrect invoice in 
case of order with subtotal $0.00"
The solution provided in this commit is to use, in these cases, the quantities 
instead of the amounts for pro rating of misc and shipping adjustments.
Thanks to Mohammad Kathawala for the bug report, great analysis and tests that 
have helped me a lot to implement this fix.



Modified:
    ofbiz/branches/release12.04/   (props changed)
    
ofbiz/branches/release12.04/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java

Propchange: ofbiz/branches/release12.04/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Apr 20 15:25:02 2015
@@ -4,4 +4,4 @@
 /ofbiz/branches/jquery:952958-1044489
 /ofbiz/branches/multitenant20100310:921280-927264
 /ofbiz/branches/release13.07:1668198,1668272,1668283
-/ofbiz/trunk:1332097,1333439,1333885,1334201,1334336,1334483,1335047,1335343,1335347,1335351,1335946,1336921,1337046,1337057-1337059,1337202,1337502,1337524,1337644,1337789,1337800,1338065,1338101,1338224,1338570,1338591,1338700,1338831,1338845,1338974,1339081,1339122,1340273,1340352,1340357,1340400,1340405,1340415,1340657,1340661,1340774,1340821,1340826,1340943,1341314,1341399,1342852,1342875,1342893,1342980,1343088,1345473,1345484,1345532,1345547,1345553,1347559,1347762,1351778,1351999,1353135,1353681,1355660,1355801,1355859,1355975,1358735,1359500,1359599-1359600,1360689,1361056,1361073,1361476,1361662,1361931,1361944,1361958,1364046,1364052,1364216,1364218,1366660,1366960,1369555,1369561,1377253,1377382,1377386,1377388,1379334,1379340,1379345,1381146,1384251,1384894,1387878,1387884,1388832,1389802,1392773,1393948,1394995,1395104,1395460,1395953,1396105,1399539,1399761,1400388,1400393,1400421,1402766,1403370,1406727,1407634,1408408,1413307,1421662,1422207,1423117,1425155,1425662,
 
1426231,1426734,1426787,1430332,1430336,1431191,1432392,1432833,1435528,1435701,1438498,1444356,1446575,1446876,1447107,1451183,1451879,1452382,1458429,1459220,1459222,1460116,1460276,1461551,1462948,1463989,1465351,1470151,1470483,1471283-1471284,1471687,1471739,1476296,1480407,1481287,1484279,1485432,1487130,1487854,1488000,1488127,1488188,1489461,1492112,1492673,1493352,1493393,1493658,1493683,1494202,1494682,1497376,1497822,1497839,1499732,1500760,1500772,1502121,1502944,1502946,1504864,1506269,1506499,1506504,1506828,1509164,1510042,1512376,1512573,1517629,1517702,1517780,1517947,1518336,1518950,1519245,1524361,1524676,1524704,1524769,1524950,1525523,1526387,1526463,1527254,1528144,1528146,1528149,1528298,1529412,1529418,1531848,1532342,1532366,1535961,1536656,1537023,1537179,1537996,1538096,1539147,1539156,1543744,1543766,1543781,1544444,1547548,1548143,1550255,1550515,1551744,1552290,1552500,1552901,1552908,1554290,1554536,1554681,1554685,1554706,1554764,1554787,1555142,15574
 
09-1557410,1557440,1557447,1557457,1557462,1557593,1558373,1559814,1560048,1560056,1560176,1560203,1560205,1560699,1561286,1561290,1561305,1561311,1561327,1561467,1562767,1563238,1563683,1563958,1564111,1564113,1564463,1564473,1564493,1566096,1566273,1569078,1569743,1571219,1573161,1573498,1573639,1574019,1575508,1576259,1576331,1576378,1576506,1576511,1576757,1576839,1577268,1579155,1579161,1579309,1580455,1581386,1581997,1582762,1583040,1583427-1583428,1583551,1583674,1583681,1583689,1583696,1584873,1585033,1585574,1585958-1585959,1586987,1587841,1587843,1588733,1589602,1589606,1589612,1589625,1589669,1592530,1592588,1592745,1592977,1593902,1593908,1593952,1597464,1598544,1598913,1603732,1603739,1604357,1604363,1604522,1604554,1605348,1605354,1605707,1607457,1608355,1608491,1608495,1608698,1609047,1609065,1609076,1609087,1609167,1609184,1609389,1609394,1609406,1609418,1609885,1610355,1610385,1610425,1610685,1610918,1610925,1611321,1612190,1612205,1613121,1614019,1614025,1614355,16
 
14366,1614556,1615296-1615297,1616684,1616940,1617229,1618354,1618411,1618570,1619098,1622050,1622672,1623370,1627230,1627776,1628096,1629391,1631203,1632733,1632745,1632764,1632797,1632801,1632803,1633100,1636493,1639835,1639840-1639841,1639846,1639863,1639867,1639873,1639884,1639887,1639892,1640288,1640515,1640717,1641066,1641131,1641165,1641548,1641804,1642409,1642423,1643341,1644904,1646204,1646977,1646984,1647266,1647338,1647559,1648668,1649393,1650583,1650642,1650678,1650882,1650887,1650938,1651593,1652361,1652604,1652611,1652617,1652627,1652725,1652731,1652739,1653456,1654175,1654273,1655795,1656983,1660444,1661287,1661358,1661612,1661778,1661853,1661864,1661873,1661940,1661951,1661977,1662361,1662500,1663912,1666633,1666836,1667253,1668214,1668246,1668258,1668265,1668314,1669317,1670952,1673764,1674447,1674491,1674496
+/ofbiz/trunk:1332097,1333439,1333885,1334201,1334336,1334483,1335047,1335343,1335347,1335351,1335946,1336921,1337046,1337057-1337059,1337202,1337502,1337524,1337644,1337789,1337800,1338065,1338101,1338224,1338570,1338591,1338700,1338831,1338845,1338974,1339081,1339122,1340273,1340352,1340357,1340400,1340405,1340415,1340657,1340661,1340774,1340821,1340826,1340943,1341314,1341399,1342852,1342875,1342893,1342980,1343088,1345473,1345484,1345532,1345547,1345553,1347559,1347762,1351778,1351999,1353135,1353681,1355660,1355801,1355859,1355975,1358735,1359500,1359599-1359600,1360689,1361056,1361073,1361476,1361662,1361931,1361944,1361958,1364046,1364052,1364216,1364218,1366660,1366960,1369555,1369561,1377253,1377382,1377386,1377388,1379334,1379340,1379345,1381146,1384251,1384894,1387878,1387884,1388832,1389802,1392773,1393948,1394995,1395104,1395460,1395953,1396105,1399539,1399761,1400388,1400393,1400421,1402766,1403370,1406727,1407634,1408408,1413307,1421662,1422207,1423117,1425155,1425662,
 
1426231,1426734,1426787,1430332,1430336,1431191,1432392,1432833,1435528,1435701,1438498,1444356,1446575,1446876,1447107,1451183,1451879,1452382,1458429,1459220,1459222,1460116,1460276,1461551,1462948,1463989,1465351,1470151,1470483,1471283-1471284,1471687,1471739,1476296,1480407,1481287,1484279,1485432,1487130,1487854,1488000,1488127,1488188,1489461,1492112,1492673,1493352,1493393,1493658,1493683,1494202,1494682,1497376,1497822,1497839,1499732,1500760,1500772,1502121,1502944,1502946,1504864,1506269,1506499,1506504,1506828,1509164,1510042,1512376,1512573,1517629,1517702,1517780,1517947,1518336,1518950,1519245,1524361,1524676,1524704,1524769,1524950,1525523,1526387,1526463,1527254,1528144,1528146,1528149,1528298,1529412,1529418,1531848,1532342,1532366,1535961,1536656,1537023,1537179,1537996,1538096,1539147,1539156,1543744,1543766,1543781,1544444,1547548,1548143,1550255,1550515,1551744,1552290,1552500,1552901,1552908,1554290,1554536,1554681,1554685,1554706,1554764,1554787,1555142,15574
 
09-1557410,1557440,1557447,1557457,1557462,1557593,1558373,1559814,1560048,1560056,1560176,1560203,1560205,1560699,1561286,1561290,1561305,1561311,1561327,1561467,1562767,1563238,1563683,1563958,1564111,1564113,1564463,1564473,1564493,1566096,1566273,1569078,1569743,1571219,1573161,1573498,1573639,1574019,1575508,1576259,1576331,1576378,1576506,1576511,1576757,1576839,1577268,1579155,1579161,1579309,1580455,1581386,1581997,1582762,1583040,1583427-1583428,1583551,1583674,1583681,1583689,1583696,1584873,1585033,1585574,1585958-1585959,1586987,1587841,1587843,1588733,1589602,1589606,1589612,1589625,1589669,1592530,1592588,1592745,1592977,1593902,1593908,1593952,1597464,1598544,1598913,1603732,1603739,1604357,1604363,1604522,1604554,1605348,1605354,1605707,1607457,1608355,1608491,1608495,1608698,1609047,1609065,1609076,1609087,1609167,1609184,1609389,1609394,1609406,1609418,1609885,1610355,1610385,1610425,1610685,1610918,1610925,1611321,1612190,1612205,1613121,1614019,1614025,1614355,16
 
14366,1614556,1615296-1615297,1616684,1616940,1617229,1618354,1618411,1618570,1619098,1622050,1622672,1623370,1627230,1627776,1628096,1629391,1631203,1632733,1632745,1632764,1632797,1632801,1632803,1633100,1636493,1639835,1639840-1639841,1639846,1639863,1639867,1639873,1639884,1639887,1639892,1640288,1640515,1640717,1641066,1641131,1641165,1641548,1641804,1642409,1642423,1643341,1644904,1646204,1646977,1646984,1647266,1647338,1647559,1648668,1649393,1650583,1650642,1650678,1650882,1650887,1650938,1651593,1652361,1652604,1652611,1652617,1652627,1652725,1652731,1652739,1653456,1654175,1654273,1655795,1656983,1660444,1661287,1661358,1661612,1661778,1661853,1661864,1661873,1661940,1661951,1661977,1662361,1662500,1663912,1666633,1666836,1667253,1668214,1668246,1668258,1668265,1668314,1669317,1670952,1673764,1674447,1674491,1674496,1674908

Modified: 
ofbiz/branches/release12.04/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java
URL: 
http://svn.apache.org/viewvc/ofbiz/branches/release12.04/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java?rev=1674927&r1=1674926&r2=1674927&view=diff
==============================================================================
--- 
ofbiz/branches/release12.04/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java
 (original)
+++ 
ofbiz/branches/release12.04/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java
 Mon Apr 20 15:25:02 2015
@@ -203,10 +203,13 @@ public class InvoiceServices {
 
             // get some price totals
             BigDecimal shippableAmount = orh.getShippableTotal(null);
+            BigDecimal shippableQuantity = orh.getShippableQuantity(null);
             BigDecimal orderSubTotal = orh.getOrderItemsSubTotal();
+            BigDecimal orderQuantity = orh.getTotalOrderItemsQuantity();
 
             // these variables are for pro-rating order amounts across 
invoices, so they should not be rounded off for maximum accuracy
             BigDecimal invoiceShipProRateAmount = ZERO;
+            BigDecimal invoiceShippableQuantity = ZERO;
             BigDecimal invoiceSubTotal = ZERO;
             BigDecimal invoiceQuantity = ZERO;
 
@@ -450,6 +453,7 @@ public class InvoiceServices {
                 // add to the ship amount only if it applies to this item
                 if (shippingApplies) {
                     invoiceShipProRateAmount = 
invoiceShipProRateAmount.add(thisAmount).setScale(invoiceTypeDecimals, 
ROUNDING);
+                    invoiceShippableQuantity = 
invoiceQuantity.add(billingQuantity).setScale(invoiceTypeDecimals, ROUNDING);
                 }
 
                 // increment the invoice subtotal
@@ -666,7 +670,16 @@ public class InvoiceServices {
                 } else {
                     // these will effect the shipping pro-rate (unless 
commented)
                     // other adjustment type
-                    calcHeaderAdj(delegator, adj, invoiceType, invoiceId, 
invoiceItemSeqId, orderSubTotal, invoiceSubTotal,
+                    BigDecimal divisor = orderSubTotal;
+                    BigDecimal multiplier = invoiceSubTotal;
+                    if (BigDecimal.ZERO.compareTo(multiplier) == 0 && 
BigDecimal.ZERO.compareTo(divisor) == 0) {
+                        // if multiplier and divisor are equal to zero then 
use the quantities instead of the amounts
+                        // this is useful when the order has free items and 
misc charges
+                        divisor = orderQuantity;
+                        multiplier = invoiceQuantity;
+                    }
+
+                    calcHeaderAdj(delegator, adj, invoiceType, invoiceId, 
invoiceItemSeqId, divisor, multiplier,
                             
adj.getBigDecimal("amount").setScale(invoiceTypeDecimals, ROUNDING), 
invoiceTypeDecimals, ROUNDING, userLogin, dispatcher, locale);
                     // invoiceShipProRateAmount += adjAmount;
                     // do adjustments compound or are they based off subtotal? 
Here we will (unless commented)
@@ -699,6 +712,12 @@ public class InvoiceServices {
                     // Pro-rate the shipping amount based on shippable 
information
                     BigDecimal divisor = shippableAmount;
                     BigDecimal multiplier = invoiceShipProRateAmount;
+                    if (BigDecimal.ZERO.compareTo(multiplier) == 0 && 
BigDecimal.ZERO.compareTo(divisor) == 0) {
+                        // if multiplier and divisor are equal to zero then 
use the quantities instead of the amounts
+                        // this is useful when the order has free items and 
shipping charges
+                        divisor = shippableQuantity;
+                        multiplier = invoiceShippableQuantity;
+                    }
 
                     // The base amount in this case is the adjustment amount, 
since we want to prorate based on the full amount
                     BigDecimal baseAmount = 
adj.getBigDecimal("amount").setScale(invoiceTypeDecimals, ROUNDING);


Reply via email to