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; } |
Free forum by Nabble | Edit this page |