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);