Author: jleroux
Date: Mon Feb 24 09:29:45 2014
New Revision: 1571198
URL: http://svn.apache.org/r1571198
Log:
A slightly modified patch from Praveen Agrawal for "The getFeatureIdQtyMap
function doesn't include the DISTINGUISHING_FEAT into the featureMap"
https://issues.apache.org/jira/browse/OFBIZ-5544
The getFeatureIdQtyMap function in ShoppingCartItem.java doesn't include the
DISTINGUISHING_FEAT in featureMap so if we want to calculate the Shipping
amount based on Distinguishing feature, this method doesn't return the
Distinguishing Feature in Feature Map. If we add DISTINGUISHING_FEAT as
productFeatureApplTypeId in filterExprs then the feature map would contain the
Distinguishing feature in addition to Standard and Required Feature.
Also in ShoppingCartItem.java, putAdditionalProductFeatureAndAppl method, i
think the OrderAdjustment should only be included when the amount is not null.
jleroux: When the amount is null it's now not added in the adjustement (I moved
that in the block above where the amount is already tested for null). But the
OrderAdjustment is still created because a recurringAmount could still exist .
I just added a warning for when both amounts are null. We could decide to not
create an adjustement when there are no amounts at all. But I preferred a
warning, because it's a weird situation and people could prefer to be aware...
Modified:
ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartItem.java
Modified:
ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartItem.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartItem.java?rev=1571198&r1=1571197&r2=1571198&view=diff
==============================================================================
---
ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartItem.java
(original)
+++
ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartItem.java
Mon Feb 24 09:29:45 2014
@@ -79,7 +79,7 @@ public class ShoppingCartItem implements
public static final String resource = "OrderUiLabels";
public static final String resource_error = "OrderErrorUiLabels";
public static String[] attributeNames = { "shoppingListId",
"shoppingListItemSeqId", "surveyResponses",
- "itemDesiredDeliveryDate",
"itemComment", "fromInventoryItemId"};
+ "itemDesiredDeliveryDate", "itemComment", "fromInventoryItemId"};
public static final MathContext generalRounding = new MathContext(10);
@@ -143,7 +143,7 @@ public class ShoppingCartItem implements
private Map<String, String> contactMechIdsMap = FastMap.newInstance();
private List<GenericValue> orderItemPriceInfos = null;
- private List<GenericValue> itemAdjustments = FastList.newInstance();
+ private final List<GenericValue> itemAdjustments = FastList.newInstance();
private boolean isPromo = false;
private BigDecimal promoQuantityUsed = BigDecimal.ZERO;
private Map<GenericPK, BigDecimal> quantityUsedPerPromoCandidate = new
HashMap<GenericPK, BigDecimal>();
@@ -177,7 +177,7 @@ public class ShoppingCartItem implements
public static ShoppingCartItem makePurchaseOrderItem(Integer cartLocation,
String productId, BigDecimal selectedAmount, BigDecimal quantity,
Map<String, GenericValue> additionalProductFeatureAndAppls,
Map<String, Object> attributes, String prodCatalogId, ProductConfigWrapper
configWrapper, String itemType, ShoppingCart.ShoppingCartItemGroup itemGroup,
LocalDispatcher dispatcher, ShoppingCart cart, GenericValue
supplierProduct, Timestamp shipBeforeDate, Timestamp shipAfterDate, Timestamp
cancelBackOrderDate)
- throws CartItemModifyException, ItemNotFoundException {
+ throws CartItemModifyException, ItemNotFoundException {
Delegator delegator = cart.getDelegator();
GenericValue product = null;
@@ -191,7 +191,7 @@ public class ShoppingCartItem implements
Map<String, Object> messageMap = UtilMisc.<String,
Object>toMap("productId", productId);
String excMsg = UtilProperties.getMessage(resource_error,
"item.product_not_found",
- messageMap , cart.getLocale());
+ messageMap , cart.getLocale());
Debug.logWarning(excMsg, module);
throw new ItemNotFoundException(excMsg);
@@ -201,10 +201,10 @@ public class ShoppingCartItem implements
// check to see if product is virtual
if ("Y".equals(product.getString("isVirtual"))) {
Map<String, Object> messageMap = UtilMisc.<String,
Object>toMap("productName", product.getString("productName"),
- "productId",
product.getString("productId"));
+ "productId", product.getString("productId"));
String excMsg = UtilProperties.getMessage(resource_error,
"item.cannot_add_product_virtual",
- messageMap , cart.getLocale());
+ messageMap , cart.getLocale());
Debug.logWarning(excMsg, module);
throw new CartItemModifyException(excMsg);
@@ -216,10 +216,10 @@ public class ShoppingCartItem implements
if ("AGGREGATED".equals(product.getString("productTypeId")) ||
"AGGREGATED_SERVICE".equals(product.getString("productTypeId"))) {
if (configWrapper == null || !configWrapper.isCompleted()) {
Map<String, Object> messageMap = UtilMisc.<String,
Object>toMap("productName", product.getString("productName"),
- "productId",
product.getString("productId"));
+ "productId", product.getString("productId"));
String excMsg = UtilProperties.getMessage(resource_error,
"item.cannot_add_product_not_configured_correctly",
- messageMap , cart.getLocale());
+ messageMap , cart.getLocale());
Debug.logWarning(excMsg, module);
throw new CartItemModifyException(excMsg);
@@ -298,7 +298,7 @@ public class ShoppingCartItem implements
Timestamp reservStart, BigDecimal reservLength, BigDecimal
reservPersons, Timestamp shipBeforeDate, Timestamp shipAfterDate,
Map<String, GenericValue> additionalProductFeatureAndAppls,
Map<String, Object> attributes, String prodCatalogId, ProductConfigWrapper
configWrapper,
String itemType, ShoppingCart.ShoppingCartItemGroup itemGroup,
LocalDispatcher dispatcher, ShoppingCart cart, Boolean triggerExternalOpsBool,
Boolean triggerPriceRulesBool, String parentProductId, Boolean
skipInventoryChecks, Boolean skipProductChecks)
- throws CartItemModifyException, ItemNotFoundException {
+ throws CartItemModifyException, ItemNotFoundException {
return
makeItem(cartLocation,productId,selectedAmount,quantity,unitPrice,
reservStart,reservLength,reservPersons,null,null,shipBeforeDate,shipAfterDate,
@@ -317,7 +317,7 @@ public class ShoppingCartItem implements
Timestamp reservStart, BigDecimal reservLength, BigDecimal
reservPersons,String accommodationMapId,String accommodationSpotId, Timestamp
shipBeforeDate, Timestamp shipAfterDate,
Map<String, GenericValue> additionalProductFeatureAndAppls,
Map<String, Object> attributes, String prodCatalogId, ProductConfigWrapper
configWrapper,
String itemType, ShoppingCart.ShoppingCartItemGroup itemGroup,
LocalDispatcher dispatcher, ShoppingCart cart, Boolean triggerExternalOpsBool,
Boolean triggerPriceRulesBool, String parentProductId, Boolean
skipInventoryChecks, Boolean skipProductChecks)
- throws CartItemModifyException, ItemNotFoundException {
+ throws CartItemModifyException, ItemNotFoundException {
Delegator delegator = cart.getDelegator();
GenericValue product = findProduct(delegator,
skipProductChecks.booleanValue(), prodCatalogId, productId, cart.getLocale());
GenericValue parentProduct = null;
@@ -373,17 +373,17 @@ public class ShoppingCartItem implements
ShoppingCart cart, Boolean triggerExternalOpsBool, Boolean
triggerPriceRulesBool, GenericValue parentProduct, Boolean skipInventoryChecks,
Boolean skipProductChecks) throws CartItemModifyException {
return makeItem(cartLocation,product,selectedAmount,
- quantity,unitPrice,reservStart,reservLength,reservPersons,
-
null,null,shipBeforeDate,shipAfterDate,additionalProductFeatureAndAppls,attributes,
- prodCatalogId,configWrapper,itemType,itemGroup,dispatcher,cart,
-
triggerExternalOpsBool,triggerPriceRulesBool,parentProduct,skipInventoryChecks,skipProductChecks);
+ quantity,unitPrice,reservStart,reservLength,reservPersons,
+
null,null,shipBeforeDate,shipAfterDate,additionalProductFeatureAndAppls,attributes,
+ prodCatalogId,configWrapper,itemType,itemGroup,dispatcher,cart,
+
triggerExternalOpsBool,triggerPriceRulesBool,parentProduct,skipInventoryChecks,skipProductChecks);
}
/**
* Makes a ShoppingCartItem and adds it to the cart.
* @param accommodationMapId Optional. reservations add into workeffort
* @param accommodationSpotId Optional. reservations add into workeffort
- */
+ */
public static ShoppingCartItem makeItem(Integer cartLocation, GenericValue
product, BigDecimal selectedAmount,
BigDecimal quantity, BigDecimal unitPrice, Timestamp reservStart,
BigDecimal reservLength, BigDecimal reservPersons,
String accommodationMapId,String accommodationSpotId,
@@ -392,7 +392,7 @@ public class ShoppingCartItem implements
ShoppingCart cart, Boolean triggerExternalOpsBool, Boolean
triggerPriceRulesBool, GenericValue parentProduct, Boolean skipInventoryChecks,
Boolean skipProductChecks) throws CartItemModifyException {
ShoppingCartItem newItem = new ShoppingCartItem(product,
additionalProductFeatureAndAppls, attributes, prodCatalogId, configWrapper,
cart.getLocale(), itemType, itemGroup, parentProduct);
-
+
selectedAmount = selectedAmount == null ? BigDecimal.ZERO :
selectedAmount;
unitPrice = unitPrice == null ? BigDecimal.ZERO : unitPrice;
reservLength = reservLength == null ? BigDecimal.ZERO : reservLength;
@@ -403,10 +403,10 @@ public class ShoppingCartItem implements
// check to see if product is virtual
if ("Y".equals(product.getString("isVirtual"))) {
Map<String, Object> messageMap = UtilMisc.<String,
Object>toMap("productName", product.getString("productName"),
- "productId",
product.getString("productId"));
+ "productId", product.getString("productId"));
String excMsg = UtilProperties.getMessage(resource_error,
"item.cannot_add_product_virtual",
- messageMap , cart.getLocale());
+ messageMap , cart.getLocale());
Debug.logWarning(excMsg, module);
throw new CartItemModifyException(excMsg);
@@ -422,55 +422,55 @@ public class ShoppingCartItem implements
if ("ASSET_USAGE".equals(product.getString("productTypeId")) ||
"ASSET_USAGE_OUT_IN".equals(product.getString("productTypeId"))) {
if (reservStart == null) {
String excMsg = UtilProperties.getMessage(resource_error,
"item.missing_reservation_starting_date",
- cart.getLocale());
+ cart.getLocale());
throw new CartItemModifyException(excMsg);
}
if (reservStart.before(UtilDateTime.nowTimestamp())) {
String excMsg = UtilProperties.getMessage(resource_error,
"item.reservation_from_tomorrow",
- cart.getLocale());
+ cart.getLocale());
throw new CartItemModifyException(excMsg);
}
newItem.setReservStart(reservStart);
if (reservLength.compareTo(BigDecimal.ONE) < 0) {
String excMsg = UtilProperties.getMessage(resource_error,
"item.number_of_days",
- cart.getLocale());
+ cart.getLocale());
throw new CartItemModifyException(excMsg);
}
newItem.setReservLength(reservLength);
if (product.get("reservMaxPersons") != null) {
BigDecimal reservMaxPersons =
product.getBigDecimal("reservMaxPersons");
- if (reservMaxPersons.compareTo(reservPersons) < 0) {
- Map<String, Object> messageMap = UtilMisc.<String,
Object>toMap("reservMaxPersons", product.getString("reservMaxPersons"),
- "reservPersons",
reservPersons);
- String excMsg = UtilProperties.getMessage(resource_error,
"item.maximum_number_of_person_renting",
- messageMap,
cart.getLocale());
-
- Debug.logInfo(excMsg,module);
- throw new CartItemModifyException(excMsg);
- }
- }
- newItem.setReservPersons(reservPersons);
+ if (reservMaxPersons.compareTo(reservPersons) < 0) {
+ Map<String, Object> messageMap = UtilMisc.<String,
Object>toMap("reservMaxPersons", product.getString("reservMaxPersons"),
+ "reservPersons", reservPersons);
+ String excMsg = UtilProperties.getMessage(resource_error,
"item.maximum_number_of_person_renting",
+ messageMap, cart.getLocale());
- if (product.get("reserv2ndPPPerc") != null)
-
newItem.setReserv2ndPPPerc(product.getBigDecimal("reserv2ndPPPerc"));
+ Debug.logInfo(excMsg,module);
+ throw new CartItemModifyException(excMsg);
+ }
+ }
+ newItem.setReservPersons(reservPersons);
- if (product.get("reservNthPPPerc") != null)
-
newItem.setReservNthPPPerc(product.getBigDecimal("reservNthPPPerc"));
+ if (product.get("reserv2ndPPPerc") != null)
+
newItem.setReserv2ndPPPerc(product.getBigDecimal("reserv2ndPPPerc"));
- if ((accommodationMapId != null) && (accommodationSpotId !=
null)) {
+ if (product.get("reservNthPPPerc") != null)
+
newItem.setReservNthPPPerc(product.getBigDecimal("reservNthPPPerc"));
+
+ if ((accommodationMapId != null) && (accommodationSpotId != null))
{
newItem.setAccommodationId(accommodationMapId,accommodationSpotId);
- }
+ }
// check to see if the related fixed asset is available for rent
String isAvailable =
checkAvailability(product.getString("productId"), quantity, reservStart,
reservLength, cart);
if (isAvailable.compareTo("OK") != 0) {
Map<String, Object> messageMap = UtilMisc.<String,
Object>toMap("productId", product.getString("productId"),
- "availableMessage",
isAvailable);
+ "availableMessage", isAvailable);
String excMsg = UtilProperties.getMessage(resource_error,
"item.product_not_available",
- messageMap, cart.getLocale());
+ messageMap, cart.getLocale());
Debug.logInfo(excMsg, module);
throw new CartItemModifyException(isAvailable);
}
@@ -542,30 +542,30 @@ public class ShoppingCartItem implements
}
public static void isValidCartProduct(ProductConfigWrapper configWrapper,
GenericValue product, Timestamp nowTimestamp, Locale locale) throws
CartItemModifyException {
- // check to see if introductionDate hasn't passed yet
- if (product.get("introductionDate") != null &&
nowTimestamp.before(product.getTimestamp("introductionDate"))) {
- Map<String, Object> messageMap = UtilMisc.<String,
Object>toMap("productName", product.getString("productName"),
- "productId",
product.getString("productId"));
+ // check to see if introductionDate hasn't passed yet
+ if (product.get("introductionDate") != null &&
nowTimestamp.before(product.getTimestamp("introductionDate"))) {
+ Map<String, Object> messageMap = UtilMisc.<String,
Object>toMap("productName", product.getString("productName"),
+ "productId", product.getString("productId"));
- String excMsg = UtilProperties.getMessage(resource_error,
"item.cannot_add_product_not_yet_available",
- messageMap , locale);
+ String excMsg = UtilProperties.getMessage(resource_error,
"item.cannot_add_product_not_yet_available",
+ messageMap , locale);
- Debug.logWarning(excMsg, module);
- throw new CartItemModifyException(excMsg);
- }
+ Debug.logWarning(excMsg, module);
+ throw new CartItemModifyException(excMsg);
+ }
- // check to see if salesDiscontinuationDate has passed
- if (product.get("salesDiscontinuationDate") != null &&
nowTimestamp.after(product.getTimestamp("salesDiscontinuationDate"))) {
- Map<String, Object> messageMap = UtilMisc.<String,
Object>toMap("productName", product.getString("productName"),
- "productId",
product.getString("productId"));
+ // check to see if salesDiscontinuationDate has passed
+ if (product.get("salesDiscontinuationDate") != null &&
nowTimestamp.after(product.getTimestamp("salesDiscontinuationDate"))) {
+ Map<String, Object> messageMap = UtilMisc.<String,
Object>toMap("productName", product.getString("productName"),
+ "productId", product.getString("productId"));
- String excMsg = UtilProperties.getMessage(resource_error,
"item.cannot_add_product_no_longer_available",
- messageMap , locale);
+ String excMsg = UtilProperties.getMessage(resource_error,
"item.cannot_add_product_no_longer_available",
+ messageMap , locale);
- Debug.logWarning(excMsg, module);
- throw new CartItemModifyException(excMsg);
- }
- /*
+ Debug.logWarning(excMsg, module);
+ throw new CartItemModifyException(excMsg);
+ }
+ /*
if (product.get("salesDiscWhenNotAvail") != null &&
"Y".equals(product.getString("salesDiscWhenNotAvail"))) {
// check atp and if <= 0 then the product is no more available
because
// all the units in warehouse are reserved by other sales
orders and no new purchase orders will be done
@@ -581,19 +581,19 @@ public class ShoppingCartItem implements
throw new CartItemModifyException(excMsg);
}
}
- */
+ */
- // check to see if the product is fully configured
- if ("AGGREGATED".equals(product.getString("productTypeId"))||
"AGGREGATED_SERVICE".equals(product.getString("productTypeId"))) {
- if (configWrapper == null || !configWrapper.isCompleted()) {
- Map<String, Object> messageMap = UtilMisc.<String,
Object>toMap("productName", product.getString("productName"),
- "productId",
product.getString("productId"));
- String excMsg = UtilProperties.getMessage(resource_error,
"item.cannot_add_product_not_configured_correctly",
- messageMap , locale);
- Debug.logWarning(excMsg, module);
- throw new CartItemModifyException(excMsg);
- }
+ // check to see if the product is fully configured
+ if ("AGGREGATED".equals(product.getString("productTypeId"))||
"AGGREGATED_SERVICE".equals(product.getString("productTypeId"))) {
+ if (configWrapper == null || !configWrapper.isCompleted()) {
+ Map<String, Object> messageMap = UtilMisc.<String,
Object>toMap("productName", product.getString("productName"),
+ "productId", product.getString("productId"));
+ String excMsg = UtilProperties.getMessage(resource_error,
"item.cannot_add_product_not_configured_correctly",
+ messageMap , locale);
+ Debug.logWarning(excMsg, module);
+ throw new CartItemModifyException(excMsg);
}
+ }
}
/**
@@ -728,7 +728,7 @@ public class ShoppingCartItem implements
/** Creates new ShoppingCartItem object. */
protected ShoppingCartItem(GenericValue product, Map<String, GenericValue>
additionalProductFeatureAndAppls, Map<String, Object> attributes, String
prodCatalogId, Locale locale, String itemType,
ShoppingCart.ShoppingCartItemGroup itemGroup) {
this(product, additionalProductFeatureAndAppls, attributes,
prodCatalogId, null, locale, itemType, itemGroup, null);
- if (product != null) {
+ if (product != null) {
String productName =
ProductContentWrapper.getProductContentAsText(product, "PRODUCT_NAME",
this.locale, null);
// if the productName is null or empty, see if there is an
associated virtual product and get the productName of that product
if (UtilValidate.isEmpty(productName)) {
@@ -947,7 +947,7 @@ public class ShoppingCartItem implements
return msg;
} else {
Map<String, Object> messageMap = UtilMisc.<String,
Object>toMap("quantityReq", quantity,
- "quantityAvail",
fixedAsset.getString("productionCapacity"));
+ "quantityAvail",
fixedAsset.getString("productionCapacity"));
String msg = UtilProperties.getMessage(resource_error,
"item.availableQnt", messageMap , cart.getLocale());
return msg;
}
@@ -1027,7 +1027,7 @@ public class ShoppingCartItem implements
if (this.isPromo) {
Map<String, Object> messageMap = UtilMisc.<String,
Object>toMap("productName", this.getName(),
- "productId", productId);
+ "productId", productId);
String excMsg = UtilProperties.getMessage(resource,
"OrderCannotChangeQuantityInPromotion", messageMap , cart.getLocale());
throw new CartItemModifyException(excMsg);
}
@@ -1040,8 +1040,8 @@ public class ShoppingCartItem implements
if (_product != null && quantity.compareTo(this.quantity) > 0) {
if (!isInventoryAvailableOrNotRequired(quantity,
productStoreId, dispatcher)) {
Map<String, Object> messageMap = UtilMisc.<String,
Object>toMap("requestedQuantity",
UtilFormatOut.formatQuantity(quantity.doubleValue()),
- "productName",
this.getName(),
- "productId",
productId);
+ "productName", this.getName(),
+ "productId", productId);
String excMsg = UtilProperties.getMessage(resource,
"OrderDoNotHaveEnoughProducts", messageMap , cart.getLocale());
Debug.logWarning(excMsg, module);
throw new CartItemModifyException(excMsg);
@@ -1132,7 +1132,7 @@ public class ShoppingCartItem implements
}
}
cart.setItemShipGroupQty(this, quantity, shipGroupIndex);
- */
+ */
cart.setItemShipGroupQty(this, quantity, 0);
}
}
@@ -1158,10 +1158,10 @@ public class ShoppingCartItem implements
}else{
priceContext.put("product", this.getProduct());
}
-
+
priceContext.put("quantity", this.getQuantity());
priceContext.put("amount", this.getSelectedAmount());
-
+
if (cart.getOrderType().equals("PURCHASE_ORDER")) {
priceContext.put("currencyUomId", cart.getCurrency());
Map<String, Object> priceResult =
dispatcher.runSync("calculatePurchasePrice", priceContext);
@@ -1172,13 +1172,13 @@ public class ShoppingCartItem implements
if (!validPriceFound.booleanValue()) {
throw new CartItemModifyException("Could not find a
valid price for the product with ID [" + this.getProductId() + "] and supplier
with ID [" + partyId + "], not adding to cart.");
}
-
+
if(isAlternativePacking){
this.setBasePrice(((BigDecimal)
priceResult.get("price")).divide(pieces, RoundingMode.HALF_UP));
}else{
this.setBasePrice(((BigDecimal)
priceResult.get("price")));
}
-
+
this.setDisplayPrice(this.basePrice);
this.orderItemPriceInfos =
UtilGenerics.checkList(priceResult.get("orderItemPriceInfos"));
} else {
@@ -1221,7 +1221,7 @@ public class ShoppingCartItem implements
if (Boolean.FALSE.equals(validPriceFound)) {
throw new CartItemModifyException("Could not find a
valid price for the product with ID [" + this.getProductId() + "], not adding
to cart.");
}
-
+
//set alternative product price
if(isAlternativePacking){
int decimals = 2;
@@ -1252,10 +1252,10 @@ public class ShoppingCartItem implements
if (priceResult.get("price") != null) {
this.setDisplayPrice(((BigDecimal)
priceResult.get("price")));
}
-
+
this.setSpecialPromoPrice((BigDecimal)
priceResult.get("specialPromoPrice"));
}
-
+
this.orderItemPriceInfos =
UtilGenerics.checkList(priceResult.get("orderItemPriceInfos"));
// If product is configurable, the price is taken from the
configWrapper.
@@ -1312,7 +1312,7 @@ public class ShoppingCartItem implements
/** Returns the reservation start date with a number of days added. */
public Timestamp getReservStart(BigDecimal addDays) {
if (addDays.compareTo(BigDecimal.ZERO) == 0)
- return this.reservStart;
+ return this.reservStart;
else {
if (this.reservStart != null)
return new Timestamp((long)(this.reservStart.getTime() +
(addDays.doubleValue() * 86400000.0)));
@@ -1751,26 +1751,26 @@ public class ShoppingCartItem implements
}
/** Returns the item's description. */
public String getName() {
- if (itemDescription != null) {
- return itemDescription;
- } else {
- GenericValue product = getProduct();
- if (product != null) {
- String productName =
ProductContentWrapper.getProductContentAsText(product, "PRODUCT_NAME",
this.locale, null);
- // if the productName is null or empty, see if there is an
associated virtual product and get the productName of that product
- if (UtilValidate.isEmpty(productName)) {
- GenericValue parentProduct = this.getParentProduct();
- if (parentProduct != null) {
- productName =
ProductContentWrapper.getProductContentAsText(parentProduct, "PRODUCT_NAME",
this.locale, null);
+ if (itemDescription != null) {
+ return itemDescription;
+ } else {
+ GenericValue product = getProduct();
+ if (product != null) {
+ String productName =
ProductContentWrapper.getProductContentAsText(product, "PRODUCT_NAME",
this.locale, null);
+ // if the productName is null or empty, see if there is an
associated virtual product and get the productName of that product
+ if (UtilValidate.isEmpty(productName)) {
+ GenericValue parentProduct = this.getParentProduct();
+ if (parentProduct != null) {
+ productName =
ProductContentWrapper.getProductContentAsText(parentProduct, "PRODUCT_NAME",
this.locale, null);
+ }
+ }
+ if (productName == null) {
+ return "";
+ } else {
+ return productName;
}
- }
- if (productName == null) {
- return "";
} else {
- return productName;
- }
- } else {
- return "";
+ return "";
}
}
}
@@ -1893,18 +1893,18 @@ public class ShoppingCartItem implements
}
/** Returns a List of the item's features for supplier*/
- public List<GenericValue> getFeaturesForSupplier(LocalDispatcher
dispatcher,String partyId) {
- List<GenericValue> featureAppls = getStandardFeatureList();
- if (UtilValidate.isNotEmpty(featureAppls)) {
- try {
- Map<String, Object> result =
dispatcher.runSync("convertFeaturesForSupplier", UtilMisc.toMap("partyId",
partyId, "productFeatures", featureAppls));
- featuresForSupplier =
UtilGenerics.checkList(result.get("convertedProductFeatures"));
- } catch (GenericServiceException e) {
- Debug.logError(e, "Unable to get features for supplier from
product : " + this.productId, module);
- }
- }
- return featuresForSupplier;
- }
+ public List<GenericValue> getFeaturesForSupplier(LocalDispatcher
dispatcher,String partyId) {
+ List<GenericValue> featureAppls = getStandardFeatureList();
+ if (UtilValidate.isNotEmpty(featureAppls)) {
+ try {
+ Map<String, Object> result =
dispatcher.runSync("convertFeaturesForSupplier", UtilMisc.toMap("partyId",
partyId, "productFeatures", featureAppls));
+ featuresForSupplier =
UtilGenerics.checkList(result.get("convertedProductFeatures"));
+ } catch (GenericServiceException e) {
+ Debug.logError(e, "Unable to get features for supplier from
product : " + this.productId, module);
+ }
+ }
+ return featuresForSupplier;
+ }
/** Returns the item's size (length + girth) */
public BigDecimal getSize() {
@@ -2077,8 +2077,8 @@ public class ShoppingCartItem implements
/** Returns the total line price. */
public BigDecimal getItemSubTotal(BigDecimal quantity) {
-// Debug.logInfo("Price" + getBasePrice() + " quantity" + quantity + "
Rental adj:" + getRentalAdjustment() + " other adj:" + getOtherAdjustments(),
module);
- return
getBasePrice().multiply(quantity).multiply(getRentalAdjustment()).add(getOtherAdjustments());
+ // Debug.logInfo("Price" + getBasePrice() + " quantity" +
quantity + " Rental adj:" + getRentalAdjustment() + " other adj:" +
getOtherAdjustments(), module);
+ return
getBasePrice().multiply(quantity).multiply(getRentalAdjustment()).add(getOtherAdjustments());
}
public BigDecimal getItemSubTotal() {
@@ -2136,8 +2136,8 @@ public class ShoppingCartItem implements
BigDecimal amount = (BigDecimal)
additionalProductFeatureAndAppl.get("amount");
if (amount != null) {
amount = amount.multiply(this.getQuantity());
+ orderAdjustment.set("amount", amount);
}
- orderAdjustment.set("amount", amount);
BigDecimal recurringAmount = (BigDecimal)
additionalProductFeatureAndAppl.get("recurringAmount");
if (recurringAmount != null) {
@@ -2146,6 +2146,10 @@ public class ShoppingCartItem implements
//Debug.logInfo("Setting recurringAmount " + recurringAmount + "
for " + orderAdjustment, module);
}
+ if (amount == null && recurringAmount == null) {
+ Debug.logWarning("In putAdditionalProductFeatureAndAppl the amount
and recurringAmount are null for this adjustment: " + orderAdjustment, module);
+ }
+
this.addAdjustment(orderAdjustment);
}
@@ -2181,6 +2185,7 @@ public class ShoppingCartItem implements
featureAppls = product.getRelated("ProductFeatureAppl", null,
null, false);
List<EntityExpr> filterExprs =
UtilMisc.toList(EntityCondition.makeCondition("productFeatureApplTypeId",
EntityOperator.EQUALS, "STANDARD_FEATURE"));
filterExprs.add(EntityCondition.makeCondition("productFeatureApplTypeId",
EntityOperator.EQUALS, "REQUIRED_FEATURE"));
+
filterExprs.add(EntityCondition.makeCondition("productFeatureApplTypeId",
EntityOperator.EQUALS, "DISTINGUISHING_FEAT"));
featureAppls = EntityUtil.filterByOr(featureAppls,
filterExprs);
} catch (GenericEntityException e) {
Debug.logError(e, "Unable to get features from product : " +
product.get("productId"), module);
@@ -2474,7 +2479,7 @@ public class ShoppingCartItem implements
throw new IllegalStateException("Bad product id");
}
- this._parentProduct = ProductWorker.getParentProduct(productId,
this.getDelegator());
+ this._parentProduct = ProductWorker.getParentProduct(productId,
this.getDelegator());
return this._parentProduct;
}