Author: jacopoc
Date: Fri Mar 28 14:18:09 2014 New Revision: 1582755 URL: http://svn.apache.org/r1582755 Log: Only formatting changes. Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java?rev=1582755&r1=1582754&r2=1582755&view=diff ============================================================================== --- ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java (original) +++ ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java Fri Mar 28 14:18:09 2014 @@ -218,14 +218,14 @@ public class OrderReadHelper { List<GenericValue> payments = FastList.newInstance(); try { List<EntityExpr> exprs = UtilMisc.toList(EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "PMNT_RECEIVED"), - EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "PMNT_CONFIRMED")); + EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "PMNT_CONFIRMED")); payments = paymentPref.getRelated("Payment", null, null, false); payments = EntityUtil.filterByOr(payments, exprs); List<EntityExpr> conds = UtilMisc.toList(EntityCondition.makeCondition("paymentTypeId", EntityOperator.EQUALS, "CUSTOMER_PAYMENT"), - EntityCondition.makeCondition("paymentTypeId", EntityOperator.EQUALS, "CUSTOMER_DEPOSIT"), - EntityCondition.makeCondition("paymentTypeId", EntityOperator.EQUALS, "INTEREST_RECEIPT"), - EntityCondition.makeCondition("paymentTypeId", EntityOperator.EQUALS, "GC_DEPOSIT"), - EntityCondition.makeCondition("paymentTypeId", EntityOperator.EQUALS, "POS_PAID_IN")); + EntityCondition.makeCondition("paymentTypeId", EntityOperator.EQUALS, "CUSTOMER_DEPOSIT"), + EntityCondition.makeCondition("paymentTypeId", EntityOperator.EQUALS, "INTEREST_RECEIPT"), + EntityCondition.makeCondition("paymentTypeId", EntityOperator.EQUALS, "GC_DEPOSIT"), + EntityCondition.makeCondition("paymentTypeId", EntityOperator.EQUALS, "POS_PAID_IN")); payments = EntityUtil.filterByOr(payments, conds); } catch (GenericEntityException e) { Debug.logError(e, module); @@ -319,7 +319,7 @@ public class OrderReadHelper { public List<GenericValue> getOrderTerms() { try { - return orderHeader.getRelated("OrderTerm", null, null, false); + return orderHeader.getRelated("OrderTerm", null, null, false); } catch (GenericEntityException e) { Debug.logError(e, module); return null; @@ -1185,7 +1185,7 @@ public class OrderReadHelper { return piecesIncluded; } - public List<Map<String, Object>> getShippableItemInfo(String shipGroupSeqId) { + public List<Map<String, Object>> getShippableItemInfo(String shipGroupSeqId) { List<Map<String, Object>> shippableInfo = FastList.newInstance(); List<GenericValue> validItems = getValidOrderItems(shipGroupSeqId); @@ -1649,7 +1649,7 @@ public class OrderReadHelper { if (orderItem.get("productId") != null) { productIds.add(orderItem.getString("productId")); } - } + } return productIds; } @@ -1666,42 +1666,42 @@ public class OrderReadHelper { return this.orderReturnItems; } - /** - * Get the quantity returned per order item. - * In other words, this method will count the ReturnItems - * related to each OrderItem. - * - * @return Map of returned quantities as BigDecimals keyed to the orderItemSeqId - */ - public Map<String, BigDecimal> getOrderItemReturnedQuantities() { - List<GenericValue> returnItems = getOrderReturnItems(); - - // since we don't have a handy grouped view entity, we'll have to group the return items by hand - Map<String, BigDecimal> returnMap = FastMap.newInstance(); - for (GenericValue orderItem : this.getValidOrderItems()) { - List<GenericValue> group = EntityUtil.filterByAnd(returnItems, UtilMisc.toList( - EntityCondition.makeCondition("orderId", orderItem.get("orderId")), - EntityCondition.makeCondition("orderItemSeqId", orderItem.get("orderItemSeqId")), - EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "RETURN_CANCELLED"))); - - // add up the returned quantities for this group TODO: received quantity should be used eventually - BigDecimal returned = BigDecimal.ZERO; - for (GenericValue returnItem : group) { - if (returnItem.getBigDecimal("returnQuantity") != null) { - returned = returned.add(returnItem.getBigDecimal("returnQuantity")); - } - } - - // the quantity returned per order item - returnMap.put(orderItem.getString("orderItemSeqId"), returned); - } - return returnMap; - } - - /** - * Get the total quantity of returned items for an order. This will count - * only the ReturnItems that are directly correlated to an OrderItem. - */ + /** + * Get the quantity returned per order item. + * In other words, this method will count the ReturnItems + * related to each OrderItem. + * + * @return Map of returned quantities as BigDecimals keyed to the orderItemSeqId + */ + public Map<String, BigDecimal> getOrderItemReturnedQuantities() { + List<GenericValue> returnItems = getOrderReturnItems(); + + // since we don't have a handy grouped view entity, we'll have to group the return items by hand + Map<String, BigDecimal> returnMap = FastMap.newInstance(); + for (GenericValue orderItem : this.getValidOrderItems()) { + List<GenericValue> group = EntityUtil.filterByAnd(returnItems, UtilMisc.toList( + EntityCondition.makeCondition("orderId", orderItem.get("orderId")), + EntityCondition.makeCondition("orderItemSeqId", orderItem.get("orderItemSeqId")), + EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "RETURN_CANCELLED"))); + + // add up the returned quantities for this group TODO: received quantity should be used eventually + BigDecimal returned = BigDecimal.ZERO; + for (GenericValue returnItem : group) { + if (returnItem.getBigDecimal("returnQuantity") != null) { + returned = returned.add(returnItem.getBigDecimal("returnQuantity")); + } + } + + // the quantity returned per order item + returnMap.put(orderItem.getString("orderItemSeqId"), returned); + } + return returnMap; + } + + /** + * Get the total quantity of returned items for an order. This will count + * only the ReturnItems that are directly correlated to an OrderItem. + */ public BigDecimal getOrderReturnedQuantity() { List<GenericValue> returnedItemsBase = getOrderReturnItems(); List<GenericValue> returnedItems = new ArrayList<GenericValue>(returnedItemsBase.size()); @@ -2442,7 +2442,7 @@ public class OrderReadHelper { BigDecimal promoAdjTotal = ZERO; List<GenericValue> promoAdjustments = EntityUtil.filterByAnd(allOrderAdjustments, UtilMisc.toMap("orderAdjustmentTypeId", "PROMOTION_ADJUSTMENT")); - + if (UtilValidate.isNotEmpty(promoAdjustments)) { Iterator<GenericValue> promoAdjIter = promoAdjustments.iterator(); while (promoAdjIter.hasNext()) { @@ -2495,7 +2495,7 @@ public class OrderReadHelper { rentalAdjustment = rentalAdjustment.divide(new BigDecimal(100), scale, rounding).multiply(new BigDecimal(String.valueOf(length))); // Debug.logInfo("rental parameters....Nbr of persons:" + persons + " extra% 2nd person:" + secondPersonPerc + " extra% Nth person:" + nthPersonPerc + " Length: " + length + " total rental adjustment:" + rentalAdjustment ,module); return rentalAdjustment; // return total rental adjustment - } + } public static BigDecimal getAllOrderItemsAdjustmentsTotal(List<GenericValue> orderItems, List<GenericValue> adjustments, boolean includeOther, boolean includeTax, boolean includeShipping) { BigDecimal result = ZERO; @@ -2736,39 +2736,39 @@ public class OrderReadHelper { return isTax ? value.setScale(taxCalcScale, taxRounding) : value.setScale(scale, rounding); } - /** Get the quantity of order items that have been invoiced */ - public static BigDecimal getOrderItemInvoicedQuantity(GenericValue orderItem) { - BigDecimal invoiced = BigDecimal.ZERO; - try { - // this is simply the sum of quantity billed in all related OrderItemBillings - List<GenericValue> billings = orderItem.getRelated("OrderItemBilling", null, null, false); - for (GenericValue billing : billings) { - BigDecimal quantity = billing.getBigDecimal("quantity"); - if (quantity != null) { - invoiced = invoiced.add(quantity); - } - } - } catch (GenericEntityException e) { - Debug.logError(e, e.getMessage(), module); - } - return invoiced; - } - - public List<GenericValue> getOrderPaymentStatuses() { - return getOrderPaymentStatuses(getOrderStatuses()); - } - - public static List<GenericValue> getOrderPaymentStatuses(List<GenericValue> orderStatuses) { - List<EntityExpr> contraints1 = UtilMisc.toList(EntityCondition.makeCondition("orderItemSeqId", EntityOperator.EQUALS, null)); - contraints1.add(EntityCondition.makeCondition("orderItemSeqId", EntityOperator.EQUALS, DataModelConstants.SEQ_ID_NA)); - contraints1.add(EntityCondition.makeCondition("orderItemSeqId", EntityOperator.EQUALS, "")); - - List<EntityExpr> contraints2 = UtilMisc.toList(EntityCondition.makeCondition("orderPaymentPreferenceId", EntityOperator.NOT_EQUAL, null)); - List<GenericValue> newOrderStatuses = FastList.newInstance(); - newOrderStatuses.addAll(EntityUtil.filterByOr(orderStatuses, contraints1)); + /** Get the quantity of order items that have been invoiced */ + public static BigDecimal getOrderItemInvoicedQuantity(GenericValue orderItem) { + BigDecimal invoiced = BigDecimal.ZERO; + try { + // this is simply the sum of quantity billed in all related OrderItemBillings + List<GenericValue> billings = orderItem.getRelated("OrderItemBilling", null, null, false); + for (GenericValue billing : billings) { + BigDecimal quantity = billing.getBigDecimal("quantity"); + if (quantity != null) { + invoiced = invoiced.add(quantity); + } + } + } catch (GenericEntityException e) { + Debug.logError(e, e.getMessage(), module); + } + return invoiced; + } + + public List<GenericValue> getOrderPaymentStatuses() { + return getOrderPaymentStatuses(getOrderStatuses()); + } + + public static List<GenericValue> getOrderPaymentStatuses(List<GenericValue> orderStatuses) { + List<EntityExpr> contraints1 = UtilMisc.toList(EntityCondition.makeCondition("orderItemSeqId", EntityOperator.EQUALS, null)); + contraints1.add(EntityCondition.makeCondition("orderItemSeqId", EntityOperator.EQUALS, DataModelConstants.SEQ_ID_NA)); + contraints1.add(EntityCondition.makeCondition("orderItemSeqId", EntityOperator.EQUALS, "")); + + List<EntityExpr> contraints2 = UtilMisc.toList(EntityCondition.makeCondition("orderPaymentPreferenceId", EntityOperator.NOT_EQUAL, null)); + List<GenericValue> newOrderStatuses = FastList.newInstance(); + newOrderStatuses.addAll(EntityUtil.filterByOr(orderStatuses, contraints1)); - return EntityUtil.orderBy(EntityUtil.filterByAnd(newOrderStatuses, contraints2), UtilMisc.toList("-statusDatetime")); - } + return EntityUtil.orderBy(EntityUtil.filterByAnd(newOrderStatuses, contraints2), UtilMisc.toList("-statusDatetime")); + } public static String getOrderItemAttribute(GenericValue orderItem, String attributeName) { String attributeValue = null; @@ -2799,118 +2799,117 @@ public class OrderReadHelper { } return attributeValue; } - - public static Map<String, Object> getOrderTaxByTaxAuthGeoAndParty(List<GenericValue> orderAdjustments) { - BigDecimal taxGrandTotal = BigDecimal.ZERO; - List<Map<String, Object>> taxByTaxAuthGeoAndPartyList = FastList.newInstance(); - if (UtilValidate.isNotEmpty(orderAdjustments)) { - // get orderAdjustment where orderAdjustmentTypeId is SALES_TAX. - orderAdjustments = EntityUtil.filterByAnd(orderAdjustments, UtilMisc.toMap("orderAdjustmentTypeId","SALES_TAX")); - orderAdjustments = EntityUtil.orderBy(orderAdjustments, UtilMisc.toList("taxAuthGeoId","taxAuthPartyId")); - - // get the list of all distinct taxAuthGeoId and taxAuthPartyId. It is for getting the number of taxAuthGeo and taxAuthPartyId in adjustments. - List<String> distinctTaxAuthGeoIdList = EntityUtil.getFieldListFromEntityList(orderAdjustments, "taxAuthGeoId", true); - List<String> distinctTaxAuthPartyIdList = EntityUtil.getFieldListFromEntityList(orderAdjustments, "taxAuthPartyId", true); - - // Keep a list of amount that have been added to make sure none are missed (if taxAuth* information is missing) - List<GenericValue> processedAdjustments = FastList.newInstance(); - // For each taxAuthGeoId get and add amount from orderAdjustment - for (String taxAuthGeoId : distinctTaxAuthGeoIdList) { - for (String taxAuthPartyId : distinctTaxAuthPartyIdList) { - //get all records for orderAdjustments filtered by taxAuthGeoId and taxAurhPartyId - List<GenericValue> orderAdjByTaxAuthGeoAndPartyIds = EntityUtil.filterByAnd(orderAdjustments, UtilMisc.toMap("taxAuthGeoId", taxAuthGeoId, "taxAuthPartyId", taxAuthPartyId)); - if (UtilValidate.isNotEmpty(orderAdjByTaxAuthGeoAndPartyIds)) { - BigDecimal totalAmount = BigDecimal.ZERO; - //Now for each orderAdjustment record get and add amount. - for (GenericValue orderAdjustment : orderAdjByTaxAuthGeoAndPartyIds) { - BigDecimal amount = orderAdjustment.getBigDecimal("amount"); - if (amount == null) { - amount = ZERO; - } - totalAmount = totalAmount.add(amount).setScale(taxCalcScale, taxRounding); - processedAdjustments.add(orderAdjustment); - } - totalAmount = totalAmount.setScale(taxFinalScale, taxRounding); - taxByTaxAuthGeoAndPartyList.add(UtilMisc.<String, Object>toMap("taxAuthPartyId", taxAuthPartyId, "taxAuthGeoId", taxAuthGeoId, "totalAmount", totalAmount)); - taxGrandTotal = taxGrandTotal.add(totalAmount); - } - } - } - // Process any adjustments that got missed - List<GenericValue> missedAdjustments = FastList.newInstance(); - missedAdjustments.addAll(orderAdjustments); - missedAdjustments.removeAll(processedAdjustments); - for (GenericValue orderAdjustment : missedAdjustments) { - taxGrandTotal = taxGrandTotal.add(orderAdjustment.getBigDecimal("amount").setScale(taxCalcScale, taxRounding)); - } - taxGrandTotal = taxGrandTotal.setScale(taxFinalScale, taxRounding); - } - Map<String, Object> result = FastMap.newInstance(); - result.put("taxByTaxAuthGeoAndPartyList", taxByTaxAuthGeoAndPartyList); - result.put("taxGrandTotal", taxGrandTotal); - return result; - } - - public static Map<String, Object> getOrderItemTaxByTaxAuthGeoAndPartyForDisplay(GenericValue orderItem, List<GenericValue> orderAdjustmentsOriginal) { - return getOrderTaxByTaxAuthGeoAndPartyForDisplay(getOrderItemAdjustmentList(orderItem, orderAdjustmentsOriginal)); - } - - public static Map<String, Object> getOrderTaxByTaxAuthGeoAndPartyForDisplay(List<GenericValue> orderAdjustmentsOriginal) { - BigDecimal taxGrandTotal = BigDecimal.ZERO; - List<Map<String, Object>> taxByTaxAuthGeoAndPartyList = FastList.newInstance(); - List<GenericValue> orderAdjustmentsToUse = FastList.newInstance(); - if (UtilValidate.isNotEmpty(orderAdjustmentsOriginal)) { - // get orderAdjustment where orderAdjustmentTypeId is SALES_TAX. - orderAdjustmentsToUse.addAll(EntityUtil.filterByAnd(orderAdjustmentsOriginal, UtilMisc.toMap("orderAdjustmentTypeId", "SALES_TAX"))); - orderAdjustmentsToUse.addAll(EntityUtil.filterByAnd(orderAdjustmentsOriginal, UtilMisc.toMap("orderAdjustmentTypeId", "VAT_TAX"))); - orderAdjustmentsToUse = EntityUtil.orderBy(orderAdjustmentsToUse, UtilMisc.toList("taxAuthGeoId","taxAuthPartyId")); - - // get the list of all distinct taxAuthGeoId and taxAuthPartyId. It is for getting the number of taxAuthGeo and taxAuthPartyId in adjustments. - List<String> distinctTaxAuthGeoIdList = EntityUtil.getFieldListFromEntityList(orderAdjustmentsToUse, "taxAuthGeoId", true); - List<String> distinctTaxAuthPartyIdList = EntityUtil.getFieldListFromEntityList(orderAdjustmentsToUse, "taxAuthPartyId", true); - - // Keep a list of amount that have been added to make sure none are missed (if taxAuth* information is missing) - List<GenericValue> processedAdjustments = FastList.newInstance(); - // For each taxAuthGeoId get and add amount from orderAdjustment - for (String taxAuthGeoId : distinctTaxAuthGeoIdList) { - for (String taxAuthPartyId : distinctTaxAuthPartyIdList) { - //get all records for orderAdjustments filtered by taxAuthGeoId and taxAurhPartyId - List<GenericValue> orderAdjByTaxAuthGeoAndPartyIds = EntityUtil.filterByAnd(orderAdjustmentsToUse, UtilMisc.toMap("taxAuthGeoId", taxAuthGeoId, "taxAuthPartyId", taxAuthPartyId)); - if (UtilValidate.isNotEmpty(orderAdjByTaxAuthGeoAndPartyIds)) { - BigDecimal totalAmount = BigDecimal.ZERO; - //Now for each orderAdjustment record get and add amount. - for (GenericValue orderAdjustment : orderAdjByTaxAuthGeoAndPartyIds) { - BigDecimal amount = orderAdjustment.getBigDecimal("amount"); - if (amount != null) { - totalAmount = totalAmount.add(amount); - } - if ("VAT_TAX".equals(orderAdjustment.getString("orderAdjustmentTypeId")) && - orderAdjustment.get("amountAlreadyIncluded") != null) { - // this is the only case where the VAT_TAX amountAlreadyIncluded should be added in, and should just be for display and not to calculate the order grandTotal - totalAmount = totalAmount.add(orderAdjustment.getBigDecimal("amountAlreadyIncluded")); - } - totalAmount = totalAmount.setScale(taxCalcScale, taxRounding); - processedAdjustments.add(orderAdjustment); - } - totalAmount = totalAmount.setScale(taxFinalScale, taxRounding); - taxByTaxAuthGeoAndPartyList.add(UtilMisc.<String, Object>toMap("taxAuthPartyId", taxAuthPartyId, "taxAuthGeoId", taxAuthGeoId, "totalAmount", totalAmount)); - taxGrandTotal = taxGrandTotal.add(totalAmount); - } - } - } - // Process any adjustments that got missed - List<GenericValue> missedAdjustments = FastList.newInstance(); - missedAdjustments.addAll(orderAdjustmentsToUse); - missedAdjustments.removeAll(processedAdjustments); - for (GenericValue orderAdjustment : missedAdjustments) { - taxGrandTotal = taxGrandTotal.add(orderAdjustment.getBigDecimal("amount").setScale(taxCalcScale, taxRounding)); - } - taxGrandTotal = taxGrandTotal.setScale(taxFinalScale, taxRounding); - } - Map<String, Object> result = FastMap.newInstance(); - result.put("taxByTaxAuthGeoAndPartyList", taxByTaxAuthGeoAndPartyList); - result.put("taxGrandTotal", taxGrandTotal); - return result; - } + public static Map<String, Object> getOrderTaxByTaxAuthGeoAndParty(List<GenericValue> orderAdjustments) { + BigDecimal taxGrandTotal = BigDecimal.ZERO; + List<Map<String, Object>> taxByTaxAuthGeoAndPartyList = FastList.newInstance(); + if (UtilValidate.isNotEmpty(orderAdjustments)) { + // get orderAdjustment where orderAdjustmentTypeId is SALES_TAX. + orderAdjustments = EntityUtil.filterByAnd(orderAdjustments, UtilMisc.toMap("orderAdjustmentTypeId", "SALES_TAX")); + orderAdjustments = EntityUtil.orderBy(orderAdjustments, UtilMisc.toList("taxAuthGeoId", "taxAuthPartyId")); + + // get the list of all distinct taxAuthGeoId and taxAuthPartyId. It is for getting the number of taxAuthGeo and taxAuthPartyId in adjustments. + List<String> distinctTaxAuthGeoIdList = EntityUtil.getFieldListFromEntityList(orderAdjustments, "taxAuthGeoId", true); + List<String> distinctTaxAuthPartyIdList = EntityUtil.getFieldListFromEntityList(orderAdjustments, "taxAuthPartyId", true); + + // Keep a list of amount that have been added to make sure none are missed (if taxAuth* information is missing) + List<GenericValue> processedAdjustments = FastList.newInstance(); + // For each taxAuthGeoId get and add amount from orderAdjustment + for (String taxAuthGeoId : distinctTaxAuthGeoIdList) { + for (String taxAuthPartyId : distinctTaxAuthPartyIdList) { + //get all records for orderAdjustments filtered by taxAuthGeoId and taxAurhPartyId + List<GenericValue> orderAdjByTaxAuthGeoAndPartyIds = EntityUtil.filterByAnd(orderAdjustments, UtilMisc.toMap("taxAuthGeoId", taxAuthGeoId, "taxAuthPartyId", taxAuthPartyId)); + if (UtilValidate.isNotEmpty(orderAdjByTaxAuthGeoAndPartyIds)) { + BigDecimal totalAmount = BigDecimal.ZERO; + //Now for each orderAdjustment record get and add amount. + for (GenericValue orderAdjustment : orderAdjByTaxAuthGeoAndPartyIds) { + BigDecimal amount = orderAdjustment.getBigDecimal("amount"); + if (amount == null) { + amount = ZERO; + } + totalAmount = totalAmount.add(amount).setScale(taxCalcScale, taxRounding); + processedAdjustments.add(orderAdjustment); + } + totalAmount = totalAmount.setScale(taxFinalScale, taxRounding); + taxByTaxAuthGeoAndPartyList.add(UtilMisc.<String, Object>toMap("taxAuthPartyId", taxAuthPartyId, "taxAuthGeoId", taxAuthGeoId, "totalAmount", totalAmount)); + taxGrandTotal = taxGrandTotal.add(totalAmount); + } + } + } + // Process any adjustments that got missed + List<GenericValue> missedAdjustments = FastList.newInstance(); + missedAdjustments.addAll(orderAdjustments); + missedAdjustments.removeAll(processedAdjustments); + for (GenericValue orderAdjustment : missedAdjustments) { + taxGrandTotal = taxGrandTotal.add(orderAdjustment.getBigDecimal("amount").setScale(taxCalcScale, taxRounding)); + } + taxGrandTotal = taxGrandTotal.setScale(taxFinalScale, taxRounding); + } + Map<String, Object> result = FastMap.newInstance(); + result.put("taxByTaxAuthGeoAndPartyList", taxByTaxAuthGeoAndPartyList); + result.put("taxGrandTotal", taxGrandTotal); + return result; + } + + public static Map<String, Object> getOrderItemTaxByTaxAuthGeoAndPartyForDisplay(GenericValue orderItem, List<GenericValue> orderAdjustmentsOriginal) { + return getOrderTaxByTaxAuthGeoAndPartyForDisplay(getOrderItemAdjustmentList(orderItem, orderAdjustmentsOriginal)); + } + + public static Map<String, Object> getOrderTaxByTaxAuthGeoAndPartyForDisplay(List<GenericValue> orderAdjustmentsOriginal) { + BigDecimal taxGrandTotal = BigDecimal.ZERO; + List<Map<String, Object>> taxByTaxAuthGeoAndPartyList = FastList.newInstance(); + List<GenericValue> orderAdjustmentsToUse = FastList.newInstance(); + if (UtilValidate.isNotEmpty(orderAdjustmentsOriginal)) { + // get orderAdjustment where orderAdjustmentTypeId is SALES_TAX. + orderAdjustmentsToUse.addAll(EntityUtil.filterByAnd(orderAdjustmentsOriginal, UtilMisc.toMap("orderAdjustmentTypeId", "SALES_TAX"))); + orderAdjustmentsToUse.addAll(EntityUtil.filterByAnd(orderAdjustmentsOriginal, UtilMisc.toMap("orderAdjustmentTypeId", "VAT_TAX"))); + orderAdjustmentsToUse = EntityUtil.orderBy(orderAdjustmentsToUse, UtilMisc.toList("taxAuthGeoId", "taxAuthPartyId")); + + // get the list of all distinct taxAuthGeoId and taxAuthPartyId. It is for getting the number of taxAuthGeo and taxAuthPartyId in adjustments. + List<String> distinctTaxAuthGeoIdList = EntityUtil.getFieldListFromEntityList(orderAdjustmentsToUse, "taxAuthGeoId", true); + List<String> distinctTaxAuthPartyIdList = EntityUtil.getFieldListFromEntityList(orderAdjustmentsToUse, "taxAuthPartyId", true); + + // Keep a list of amount that have been added to make sure none are missed (if taxAuth* information is missing) + List<GenericValue> processedAdjustments = FastList.newInstance(); + // For each taxAuthGeoId get and add amount from orderAdjustment + for (String taxAuthGeoId : distinctTaxAuthGeoIdList) { + for (String taxAuthPartyId : distinctTaxAuthPartyIdList) { + //get all records for orderAdjustments filtered by taxAuthGeoId and taxAurhPartyId + List<GenericValue> orderAdjByTaxAuthGeoAndPartyIds = EntityUtil.filterByAnd(orderAdjustmentsToUse, UtilMisc.toMap("taxAuthGeoId", taxAuthGeoId, "taxAuthPartyId", taxAuthPartyId)); + if (UtilValidate.isNotEmpty(orderAdjByTaxAuthGeoAndPartyIds)) { + BigDecimal totalAmount = BigDecimal.ZERO; + //Now for each orderAdjustment record get and add amount. + for (GenericValue orderAdjustment : orderAdjByTaxAuthGeoAndPartyIds) { + BigDecimal amount = orderAdjustment.getBigDecimal("amount"); + if (amount != null) { + totalAmount = totalAmount.add(amount); + } + if ("VAT_TAX".equals(orderAdjustment.getString("orderAdjustmentTypeId")) && + orderAdjustment.get("amountAlreadyIncluded") != null) { + // this is the only case where the VAT_TAX amountAlreadyIncluded should be added in, and should just be for display and not to calculate the order grandTotal + totalAmount = totalAmount.add(orderAdjustment.getBigDecimal("amountAlreadyIncluded")); + } + totalAmount = totalAmount.setScale(taxCalcScale, taxRounding); + processedAdjustments.add(orderAdjustment); + } + totalAmount = totalAmount.setScale(taxFinalScale, taxRounding); + taxByTaxAuthGeoAndPartyList.add(UtilMisc.<String, Object>toMap("taxAuthPartyId", taxAuthPartyId, "taxAuthGeoId", taxAuthGeoId, "totalAmount", totalAmount)); + taxGrandTotal = taxGrandTotal.add(totalAmount); + } + } + } + // Process any adjustments that got missed + List<GenericValue> missedAdjustments = FastList.newInstance(); + missedAdjustments.addAll(orderAdjustmentsToUse); + missedAdjustments.removeAll(processedAdjustments); + for (GenericValue orderAdjustment : missedAdjustments) { + taxGrandTotal = taxGrandTotal.add(orderAdjustment.getBigDecimal("amount").setScale(taxCalcScale, taxRounding)); + } + taxGrandTotal = taxGrandTotal.setScale(taxFinalScale, taxRounding); + } + Map<String, Object> result = FastMap.newInstance(); + result.put("taxByTaxAuthGeoAndPartyList", taxByTaxAuthGeoAndPartyList); + result.put("taxGrandTotal", taxGrandTotal); + return result; + } } |
Free forum by Nabble | Edit this page |