You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by le...@apache.org on 2011/08/20 10:51:25 UTC
svn commit: r1159862 -
/ofbiz/trunk/applications/product/src/org/ofbiz/product/price/PriceServices.java
Author: lektran
Date: Sat Aug 20 08:51:25 2011
New Revision: 1159862
URL: http://svn.apache.org/viewvc?rev=1159862&view=rev
Log:
Extract a method to filter the price list by type to reduce the amount of redundant code
Modified:
ofbiz/trunk/applications/product/src/org/ofbiz/product/price/PriceServices.java
Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/price/PriceServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/price/PriceServices.java?rev=1159862&r1=1159861&r2=1159862&view=diff
==============================================================================
--- ofbiz/trunk/applications/product/src/org/ofbiz/product/price/PriceServices.java (original)
+++ ofbiz/trunk/applications/product/src/org/ofbiz/product/price/PriceServices.java Sat Aug 20 08:51:25 2011
@@ -229,17 +229,9 @@ public class PriceServices {
productPrices = EntityUtil.filterByDate(productPrices, true);
// ===== get the prices we need: list, default, average cost, promo, min, max =====
- List<GenericValue> listPrices = EntityUtil.filterByAnd(productPrices, UtilMisc.toMap("productPriceTypeId", "LIST_PRICE"));
- GenericValue listPriceValue = EntityUtil.getFirst(listPrices);
- if (listPrices != null && listPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one LIST_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + productId + ", using the latest found with price: " + listPriceValue.getBigDecimal("price"), module);
- }
-
- List<GenericValue> defaultPrices = EntityUtil.filterByAnd(productPrices, UtilMisc.toMap("productPriceTypeId", "DEFAULT_PRICE"));
- GenericValue defaultPriceValue = EntityUtil.getFirst(defaultPrices);
- if (defaultPrices != null && defaultPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one DEFAULT_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + productId + ", using the latest found with price: " + defaultPriceValue.getBigDecimal("price"), module);
- }
+ // if any of these prices is missing and this product is a variant, default to the corresponding price on the virtual product
+ GenericValue listPriceValue = getPriceValueForType("LIST_PRICE", productPrices, virtualProductPrices);
+ GenericValue defaultPriceValue = getPriceValueForType("DEFAULT_PRICE", productPrices, virtualProductPrices);
// If there is an agreement between the company and the client, and there is
// a price for the product in it, it will override the default price of the
@@ -258,107 +250,13 @@ public class PriceServices {
}
}
- List<GenericValue> competitivePrices = EntityUtil.filterByAnd(productPrices, UtilMisc.toMap("productPriceTypeId", "COMPETITIVE_PRICE"));
- GenericValue competitivePriceValue = EntityUtil.getFirst(competitivePrices);
- if (competitivePrices != null && competitivePrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one COMPETITIVE_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + productId + ", using the latest found with price: " + competitivePriceValue.getBigDecimal("price"), module);
- }
-
- List<GenericValue> averageCosts = EntityUtil.filterByAnd(productPrices, UtilMisc.toMap("productPriceTypeId", "AVERAGE_COST"));
- GenericValue averageCostValue = EntityUtil.getFirst(averageCosts);
- if (averageCosts != null && averageCosts.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one AVERAGE_COST with the currencyUomId " + currencyDefaultUomId + " and productId " + productId + ", using the latest found with price: " + averageCostValue.getBigDecimal("price"), module);
- }
-
- List<GenericValue> promoPrices = EntityUtil.filterByAnd(productPrices, UtilMisc.toMap("productPriceTypeId", "PROMO_PRICE"));
- GenericValue promoPriceValue = EntityUtil.getFirst(promoPrices);
- if (promoPrices != null && promoPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one PROMO_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + productId + ", using the latest found with price: " + promoPriceValue.getBigDecimal("price"), module);
- }
-
- List<GenericValue> minimumPrices = EntityUtil.filterByAnd(productPrices, UtilMisc.toMap("productPriceTypeId", "MINIMUM_PRICE"));
- GenericValue minimumPriceValue = EntityUtil.getFirst(minimumPrices);
- if (minimumPrices != null && minimumPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one MINIMUM_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + productId + ", using the latest found with price: " + minimumPriceValue.getBigDecimal("price"), module);
- }
-
- List<GenericValue> maximumPrices = EntityUtil.filterByAnd(productPrices, UtilMisc.toMap("productPriceTypeId", "MAXIMUM_PRICE"));
- GenericValue maximumPriceValue = EntityUtil.getFirst(maximumPrices);
- if (maximumPrices != null && maximumPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one MAXIMUM_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + productId + ", using the latest found with price: " + maximumPriceValue.getBigDecimal("price"), module);
- }
-
- List<GenericValue> wholesalePrices = EntityUtil.filterByAnd(productPrices, UtilMisc.toMap("productPriceTypeId", "WHOLESALE_PRICE"));
- GenericValue wholesalePriceValue = EntityUtil.getFirst(wholesalePrices);
- if (wholesalePrices != null && wholesalePrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one WHOLESALE_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + productId + ", using the latest found with price: " + wholesalePriceValue.getBigDecimal("price"), module);
- }
-
- List<GenericValue> specialPromoPrices = EntityUtil.filterByAnd(productPrices, UtilMisc.toMap("productPriceTypeId", "SPECIAL_PROMO_PRICE"));
- GenericValue specialPromoPriceValue = EntityUtil.getFirst(specialPromoPrices);
- if (specialPromoPrices != null && specialPromoPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one SPECIAL_PROMO_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + productId + ", using the latest found with price: " + specialPromoPriceValue.getBigDecimal("price"), module);
- }
-
- // if any of these prices is missing and this product is a variant, default to the corresponding price on the virtual product
- if (UtilValidate.isNotEmpty(virtualProductPrices)) {
- if (listPriceValue == null) {
- List<GenericValue> virtualTempPrices = EntityUtil.filterByAnd(virtualProductPrices, UtilMisc.toMap("productPriceTypeId", "LIST_PRICE"));
- listPriceValue = EntityUtil.getFirst(virtualTempPrices);
- if (virtualTempPrices != null && virtualTempPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one LIST_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + virtualProductId + ", using the latest found with price: " + listPriceValue.getBigDecimal("price"), module);
- }
- }
- if (defaultPriceValue == null) {
- List<GenericValue> virtualTempPrices = EntityUtil.filterByAnd(virtualProductPrices, UtilMisc.toMap("productPriceTypeId", "DEFAULT_PRICE"));
- defaultPriceValue = EntityUtil.getFirst(virtualTempPrices);
- if (virtualTempPrices != null && virtualTempPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one DEFAULT_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + virtualProductId + ", using the latest found with price: " + defaultPriceValue.getBigDecimal("price"), module);
- }
- }
- if (averageCostValue == null) {
- List<GenericValue> virtualTempPrices = EntityUtil.filterByAnd(virtualProductPrices, UtilMisc.toMap("productPriceTypeId", "AVERAGE_COST"));
- averageCostValue = EntityUtil.getFirst(virtualTempPrices);
- if (virtualTempPrices != null && virtualTempPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one AVERAGE_COST with the currencyUomId " + currencyDefaultUomId + " and productId " + virtualProductId + ", using the latest found with price: " + averageCostValue.getBigDecimal("price"), module);
- }
- }
- if (promoPriceValue == null) {
- List<GenericValue> virtualTempPrices = EntityUtil.filterByAnd(virtualProductPrices, UtilMisc.toMap("productPriceTypeId", "PROMO_PRICE"));
- promoPriceValue = EntityUtil.getFirst(virtualTempPrices);
- if (virtualTempPrices != null && virtualTempPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one PROMO_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + virtualProductId + ", using the latest found with price: " + promoPriceValue.getBigDecimal("price"), module);
- }
- }
- if (minimumPriceValue == null) {
- List<GenericValue> virtualTempPrices = EntityUtil.filterByAnd(virtualProductPrices, UtilMisc.toMap("productPriceTypeId", "MINIMUM_PRICE"));
- minimumPriceValue = EntityUtil.getFirst(virtualTempPrices);
- if (virtualTempPrices != null && virtualTempPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one MINIMUM_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + virtualProductId + ", using the latest found with price: " + minimumPriceValue.getBigDecimal("price"), module);
- }
- }
- if (maximumPriceValue == null) {
- List<GenericValue> virtualTempPrices = EntityUtil.filterByAnd(virtualProductPrices, UtilMisc.toMap("productPriceTypeId", "MAXIMUM_PRICE"));
- maximumPriceValue = EntityUtil.getFirst(virtualTempPrices);
- if (virtualTempPrices != null && virtualTempPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one MAXIMUM_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + virtualProductId + ", using the latest found with price: " + maximumPriceValue.getBigDecimal("price"), module);
- }
- }
- if (wholesalePriceValue == null) {
- List<GenericValue> virtualTempPrices = EntityUtil.filterByAnd(virtualProductPrices, UtilMisc.toMap("productPriceTypeId", "WHOLESALE_PRICE"));
- wholesalePriceValue = EntityUtil.getFirst(virtualTempPrices);
- if (virtualTempPrices != null && virtualTempPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one WHOLESALE_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + virtualProductId + ", using the latest found with price: " + wholesalePriceValue.getBigDecimal("price"), module);
- }
- }
- if (specialPromoPriceValue == null) {
- List<GenericValue> virtualTempPrices = EntityUtil.filterByAnd(virtualProductPrices, UtilMisc.toMap("productPriceTypeId", "SPECIAL_PROMO_PRICE"));
- specialPromoPriceValue = EntityUtil.getFirst(virtualTempPrices);
- if (virtualTempPrices != null && virtualTempPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one SPECIAL_PROMO_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + virtualProductId + ", using the latest found with price: " + specialPromoPriceValue.getBigDecimal("price"), module);
- }
- }
- }
+ GenericValue competitivePriceValue = getPriceValueForType("COMPETITIVE_PRICE", productPrices, virtualProductPrices);
+ GenericValue averageCostValue = getPriceValueForType("AVERAGE_COST", productPrices, virtualProductPrices);
+ GenericValue promoPriceValue = getPriceValueForType("PROMO_PRICE", productPrices, virtualProductPrices);
+ GenericValue minimumPriceValue = getPriceValueForType("MINIMUM_PRICE", productPrices, virtualProductPrices);
+ GenericValue maximumPriceValue = getPriceValueForType("MAXIMUM_PRICE", productPrices, virtualProductPrices);
+ GenericValue wholesalePriceValue = getPriceValueForType("WHOLESALE_PRICE", productPrices, virtualProductPrices);
+ GenericValue specialPromoPriceValue = getPriceValueForType("SPECIAL_PROMO_PRICE", productPrices, virtualProductPrices);
// now if this is a virtual product check each price type, if doesn't exist get from variant with lowest DEFAULT_PRICE
if ("Y".equals(product.getString("isVirtual"))) {
@@ -398,67 +296,31 @@ public class PriceServices {
if (variantProductPrices != null) {
// we have some other options, give 'em a go...
if (listPriceValue == null) {
- List<GenericValue> virtualTempPrices = EntityUtil.filterByAnd(variantProductPrices, UtilMisc.toMap("productPriceTypeId", "LIST_PRICE"));
- listPriceValue = EntityUtil.getFirst(virtualTempPrices);
- if (virtualTempPrices != null && virtualTempPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one LIST_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + variantProductId + ", using the latest found with price: " + listPriceValue.getBigDecimal("price"), module);
- }
+ listPriceValue = getPriceValueForType("LIST_PRICE", variantProductPrices, null);
}
if (defaultPriceValue == null) {
- List<GenericValue> virtualTempPrices = EntityUtil.filterByAnd(variantProductPrices, UtilMisc.toMap("productPriceTypeId", "DEFAULT_PRICE"));
- defaultPriceValue = EntityUtil.getFirst(virtualTempPrices);
- if (virtualTempPrices != null && virtualTempPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one DEFAULT_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + variantProductId + ", using the latest found with price: " + defaultPriceValue.getBigDecimal("price"), module);
- }
+ defaultPriceValue = getPriceValueForType("DEFAULT_PRICE", variantProductPrices, null);
}
if (competitivePriceValue == null) {
- List<GenericValue> virtualTempPrices = EntityUtil.filterByAnd(variantProductPrices, UtilMisc.toMap("productPriceTypeId", "COMPETITIVE_PRICE"));
- competitivePriceValue = EntityUtil.getFirst(virtualTempPrices);
- if (virtualTempPrices != null && virtualTempPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one COMPETITIVE_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + variantProductId + ", using the latest found with price: " + competitivePriceValue.getBigDecimal("price"), module);
- }
+ competitivePriceValue = getPriceValueForType("COMPETITIVE_PRICE", variantProductPrices, null);
}
if (averageCostValue == null) {
- List<GenericValue> virtualTempPrices = EntityUtil.filterByAnd(variantProductPrices, UtilMisc.toMap("productPriceTypeId", "AVERAGE_COST"));
- averageCostValue = EntityUtil.getFirst(virtualTempPrices);
- if (virtualTempPrices != null && virtualTempPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one AVERAGE_COST with the currencyUomId " + currencyDefaultUomId + " and productId " + variantProductId + ", using the latest found with price: " + averageCostValue.getBigDecimal("price"), module);
- }
+ averageCostValue = getPriceValueForType("AVERAGE_COST", variantProductPrices, null);
}
if (promoPriceValue == null) {
- List<GenericValue> virtualTempPrices = EntityUtil.filterByAnd(variantProductPrices, UtilMisc.toMap("productPriceTypeId", "PROMO_PRICE"));
- promoPriceValue = EntityUtil.getFirst(virtualTempPrices);
- if (virtualTempPrices != null && virtualTempPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one PROMO_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + variantProductId + ", using the latest found with price: " + promoPriceValue.getBigDecimal("price"), module);
- }
+ promoPriceValue = getPriceValueForType("PROMO_PRICE", variantProductPrices, null);
}
if (minimumPriceValue == null) {
- List<GenericValue> virtualTempPrices = EntityUtil.filterByAnd(variantProductPrices, UtilMisc.toMap("productPriceTypeId", "MINIMUM_PRICE"));
- minimumPriceValue = EntityUtil.getFirst(virtualTempPrices);
- if (virtualTempPrices != null && virtualTempPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one MINIMUM_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + variantProductId + ", using the latest found with price: " + minimumPriceValue.getBigDecimal("price"), module);
- }
+ minimumPriceValue = getPriceValueForType("MINIMUM_PRICE", variantProductPrices, null);
}
if (maximumPriceValue == null) {
- List<GenericValue> virtualTempPrices = EntityUtil.filterByAnd(variantProductPrices, UtilMisc.toMap("productPriceTypeId", "MAXIMUM_PRICE"));
- maximumPriceValue = EntityUtil.getFirst(virtualTempPrices);
- if (virtualTempPrices != null && virtualTempPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one MAXIMUM_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + variantProductId + ", using the latest found with price: " + maximumPriceValue.getBigDecimal("price"), module);
- }
+ maximumPriceValue = getPriceValueForType("MAXIMUM_PRICE", variantProductPrices, null);
}
if (wholesalePriceValue == null) {
- List<GenericValue> virtualTempPrices = EntityUtil.filterByAnd(variantProductPrices, UtilMisc.toMap("productPriceTypeId", "WHOLESALE_PRICE"));
- wholesalePriceValue = EntityUtil.getFirst(virtualTempPrices);
- if (virtualTempPrices != null && virtualTempPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one WHOLESALE_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + variantProductId + ", using the latest found with price: " + wholesalePriceValue.getBigDecimal("price"), module);
- }
+ wholesalePriceValue = getPriceValueForType("WHOLESALE_PRICE", variantProductPrices, null);
}
if (specialPromoPriceValue == null) {
- List<GenericValue> virtualTempPrices = EntityUtil.filterByAnd(variantProductPrices, UtilMisc.toMap("productPriceTypeId", "SPECIAL_PROMO_PRICE"));
- specialPromoPriceValue = EntityUtil.getFirst(virtualTempPrices);
- if (virtualTempPrices != null && virtualTempPrices.size() > 1) {
- if (Debug.infoOn()) Debug.logInfo("There is more than one SPECIAL_PROMO_PRICE with the currencyUomId " + currencyDefaultUomId + " and productId " + variantProductId + ", using the latest found with price: " + wholesalePriceValue.getBigDecimal("price"), module);
- }
+ specialPromoPriceValue = getPriceValueForType("SPECIAL_PROMO_PRICE", variantProductPrices, null);
}
}
} catch (GenericEntityException e) {
@@ -715,6 +577,18 @@ public class PriceServices {
return result;
}
+ private static GenericValue getPriceValueForType(String productPriceTypeId, List<GenericValue> productPriceList, List<GenericValue> secondaryPriceList) {
+ List<GenericValue> filteredPrices = EntityUtil.filterByAnd(productPriceList, UtilMisc.toMap("productPriceTypeId", productPriceTypeId));
+ GenericValue priceValue = EntityUtil.getFirst(filteredPrices);
+ if (filteredPrices != null && filteredPrices.size() > 1) {
+ if (Debug.infoOn()) Debug.logInfo("There is more than one " + productPriceTypeId + " with the currencyUomId " + priceValue.getString("currencyUomId") + " and productId " + priceValue.getString("productId") + ", using the latest found with price: " + priceValue.getBigDecimal("price"), module);
+ }
+ if (priceValue == null && secondaryPriceList != null) {
+ return getPriceValueForType(productPriceTypeId, secondaryPriceList, null);
+ }
+ return priceValue;
+ }
+
public static Map<String, Object> addGeneralResults(Map<String, Object> result, GenericValue competitivePriceValue, GenericValue specialPromoPriceValue, GenericValue productStore,
String checkIncludeVat, String currencyUomId, String productId, BigDecimal quantity, String partyId, LocalDispatcher dispatcher, Locale locale) {
result.put("competitivePrice", competitivePriceValue != null ? competitivePriceValue.getBigDecimal("price") : null);