Author: apatel
Date: Fri Oct 28 02:14:28 2011 New Revision: 1190135 URL: http://svn.apache.org/viewvc?rev=1190135&view=rev Log: Applied fix from trunk for revision: 1190134 === [OFBIZ-4519] Bug fix while Prorating adjustments for orderItem when its partially canceled. Martin Kreidenweis, Thanks for the fix and helping me understand the problem. Modified: ofbiz/branches/release11.04/ (props changed) ofbiz/branches/release11.04/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java Propchange: ofbiz/branches/release11.04/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Oct 28 02:14:28 2011 @@ -2,4 +2,4 @@ /ofbiz/branches/dojo1.4:951708-952957 /ofbiz/branches/jquery:952958-1044489 /ofbiz/branches/multitenant20100310:921280-927264 -/ofbiz/trunk:1100197,1100880,1104423,1131144,1131396,1132496,1132749,1133353,1134990,1135199,1135686,1135929,1137201,1137433,1137435,1138463,1138485,1139346,1139385,1139504,1139521,1140358,1140362,1140375,1140469,1144537,1144791,1153073,1153768,1158124,1158126,1158608,1159080,1163036,1163093,1163533,1165130,1166591,1167116,1167314,1167480,1167501,1167510,1167517,1167606,1172213,1172243,1174964,1175130,1175135,1175143,1177128,1178175,1178199,1180398,1181878,1182259,1182310,1182731,1182858,1183651,1184906,1184996,1184999,1185179,1187515,1187528,1187933,1187944,1188042,1188564,1189592,1189601 +/ofbiz/trunk:1100197,1100880,1104423,1131144,1131396,1132496,1132749,1133353,1134990,1135199,1135686,1135929,1137201,1137433,1137435,1138463,1138485,1139346,1139385,1139504,1139521,1140358,1140362,1140375,1140469,1144537,1144791,1153073,1153768,1158124,1158126,1158608,1159080,1163036,1163093,1163533,1165130,1166591,1167116,1167314,1167480,1167501,1167510,1167517,1167606,1172213,1172243,1174964,1175130,1175135,1175143,1177128,1178175,1178199,1180398,1181878,1182259,1182310,1182731,1182858,1183651,1184906,1184996,1184999,1185179,1187515,1187528,1187933,1187944,1188042,1188564,1189592,1189601,1190134 Modified: ofbiz/branches/release11.04/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release11.04/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java?rev=1190135&r1=1190134&r2=1190135&view=diff ============================================================================== --- ofbiz/branches/release11.04/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java (original) +++ ofbiz/branches/release11.04/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java Fri Oct 28 02:14:28 2011 @@ -522,27 +522,30 @@ public class InvoiceServices { continue; } + BigDecimal originalOrderItemQuantity = OrderReadHelper.getOrderItemQuantity(originalOrderItem); BigDecimal amount = ZERO; - if (adj.get("amount") != null) { - // pro-rate the amount - // set decimals = 100 means we don't round this intermediate value, which is very important - amount = adj.getBigDecimal("amount").divide(originalOrderItem.getBigDecimal("quantity"), 100, ROUNDING); - amount = amount.multiply(billingQuantity); - // Tax needs to be rounded differently from other order adjustments - if (adj.getString("orderAdjustmentTypeId").equals("SALES_TAX")) { - amount = amount.setScale(TAX_DECIMALS, TAX_ROUNDING); - } else { + if (originalOrderItemQuantity.signum() != 0) { + if (adj.get("amount") != null) { + // pro-rate the amount + // set decimals = 100 means we don't round this intermediate value, which is very important + amount = adj.getBigDecimal("amount").divide(originalOrderItemQuantity, 100, ROUNDING); + amount = amount.multiply(billingQuantity); + // Tax needs to be rounded differently from other order adjustments + if (adj.getString("orderAdjustmentTypeId").equals("SALES_TAX")) { + amount = amount.setScale(TAX_DECIMALS, TAX_ROUNDING); + } else { + amount = amount.setScale(invoiceTypeDecimals, ROUNDING); + } + } else if (adj.get("sourcePercentage") != null) { + // pro-rate the amount + // set decimals = 100 means we don't round this intermediate value, which is very important + BigDecimal percent = adj.getBigDecimal("sourcePercentage"); + percent = percent.divide(new BigDecimal(100), 100, ROUNDING); + amount = billingAmount.multiply(percent); + amount = amount.divide(originalOrderItemQuantity, 100, ROUNDING); + amount = amount.multiply(billingQuantity); amount = amount.setScale(invoiceTypeDecimals, ROUNDING); } - } else if (adj.get("sourcePercentage") != null) { - // pro-rate the amount - // set decimals = 100 means we don't round this intermediate value, which is very important - BigDecimal percent = adj.getBigDecimal("sourcePercentage"); - percent = percent.divide(new BigDecimal(100), 100, ROUNDING); - amount = billingAmount.multiply(percent); - amount = amount.divide(originalOrderItem.getBigDecimal("quantity"), 100, ROUNDING); - amount = amount.multiply(billingQuantity); - amount = amount.setScale(invoiceTypeDecimals, ROUNDING); } if (amount.signum() != 0) { Map<String, Object> createInvoiceItemAdjContext = FastMap.newInstance(); |
Free forum by Nabble | Edit this page |