protected boolean itemMatches(DiscreteOrderItem item1, DiscreteOrderItem item2) { // Must match on SKU and options if (item1.getSku() != null && item2.getSku() != null) { if (item1.getSku().getId().equals(item2.getSku().getId())) { // TODO: Compare options if product has product options return true; } } else { if (item1.getProduct() != null && item2.getProduct() != null) { if (item1.getProduct().getId().equals(item2.getProduct().getId())) { return true; } } } return false; }
@Override public Map<String, Object> populateModelVariables(String tagName, Map<String, String> tagAttributes, BroadleafTemplateContext context) { HashMap<String, String> productOptionDisplayValues = new HashMap<>(); Object item = context.parseExpression(tagAttributes.get("orderItem")); if (item instanceof DiscreteOrderItem) { DiscreteOrderItem orderItem = (DiscreteOrderItem) item; for (String i : orderItem.getOrderItemAttributes().keySet()) { for (ProductOption option : orderItem.getProduct().getProductOptions()) { if (option.getAttributeName().equals(i) && !StringUtils.isEmpty(orderItem.getOrderItemAttributes().get(i).toString())) { productOptionDisplayValues.put(option.getLabel(), orderItem.getOrderItemAttributes().get(i).toString()); } } } } return ImmutableMap.of("productOptionDisplayValues", (Object) productOptionDisplayValues); }
protected List<String> gatherProductCartMessages(OrderItem orderItem) { List<String> cartMessages = new ArrayList<>(); if (DiscreteOrderItem.class.isAssignableFrom(orderItem.getClass())) { DiscreteOrderItem discreteOrderItem = (DiscreteOrderItem) orderItem; Product product = discreteOrderItem.getProduct(); for (PromotionMessageGenerator generator : generators) { Map<String, List<PromotionMessageDTO>> promotionMessages = generator.generatePromotionMessages(product); List<PromotionMessageDTO> messageDTOs = new ArrayList<>(); addPromotionMessagesForType(messageDTOs, promotionMessages.get(PromotionMessagePlacementType.CART.getType())); addPromotionMessagesForType(messageDTOs, promotionMessages.get(PromotionMessagePlacementType.EVERYWHERE.getType())); BLCPromotionMessageUtils.sortMessagesByPriority(messageDTOs); cartMessages.addAll(BLCPromotionMessageUtils.gatherMessagesFromDTOs(messageDTOs)); } } return cartMessages; }
/** * @param orderItem * @return whether or not the discrete order item's sku is active */ protected boolean checkActive(DiscreteOrderItem orderItem) { return orderItem.getSku().isActive(orderItem.getProduct(), orderItem.getCategory()); }
@Override public OrderItem findLastMatchingItem(Order order, Long skuId, Long productId) { if (order.getOrderItems() != null) { for (int i=(order.getOrderItems().size()-1); i >= 0; i--) { OrderItem currentItem = (order.getOrderItems().get(i)); if (currentItem instanceof DiscreteOrderItem) { DiscreteOrderItem discreteItem = (DiscreteOrderItem) currentItem; if (skuId != null) { if (discreteItem.getSku() != null && skuId.equals(discreteItem.getSku().getId())) { return discreteItem; } } else if (productId != null && discreteItem.getProduct() != null && productId.equals(discreteItem.getProduct().getId())) { return discreteItem; } } else if (currentItem instanceof BundleOrderItem) { BundleOrderItem bundleItem = (BundleOrderItem) currentItem; if (skuId != null) { if (bundleItem.getSku() != null && skuId.equals(bundleItem.getSku().getId())) { return bundleItem; } } else if (productId != null && bundleItem.getProduct() != null && productId.equals(bundleItem.getProduct().getId())) { return bundleItem; } } } } return null; }
@Override public OrderItem updateDiscreteOrderItem(OrderItem item, final DiscreteOrderItemRequest itemRequest) { List<ProductOption> productOptions = null; if (item instanceof DiscreteOrderItem) { productOptions = ((DiscreteOrderItem) item).getProduct().getProductOptions(); } else if (item instanceof BundleOrderItem) { productOptions = ((BundleOrderItem) item).getProduct().getProductOptions(); } List<String> removeKeys = new ArrayList<String>(); if (productOptions != null && itemRequest.getItemAttributes() != null) { for (String name : itemRequest.getItemAttributes().keySet()) { //we do not let them update all product options. //Only allow them to update those options that can have validation to take place at later time //if option.getProductOptionValidationType() is null then it might change the sku, so we dont allow those for (ProductOption option : productOptions) { if (option.getAttributeName().equals(name) && option.getProductOptionValidationStrategyType() == null) { removeKeys.add(name); break; } } } } for (String name : removeKeys) { itemRequest.getItemAttributes().remove(name); } populateProductOptionAttributes(item, itemRequest.getItemAttributes()); applyAdditionalOrderItemProperties(item); return item; }
/** * Takes an order item id and rebuilds the dependant order item tree with the current quantities and options set. * * If the method was invoked via an AJAX call, it will render the "ajax/configure" template. * Otherwise, it will perform a 302 redirect to "/cart/configure" * * @param request * @param response * @param model * @param orderItemId * @throws IOException * @throws AddToCartException * @throws PricingException */ public String reconfigure(HttpServletRequest request, HttpServletResponse response, Model model, Long orderItemId) throws IOException, AddToCartException, PricingException, Exception { DiscreteOrderItem orderItem = (DiscreteOrderItem) orderItemService.readOrderItemById(orderItemId); Long productId = orderItem.getProduct().getId(); Product product = catalogService.findProductById(productId); ConfigurableOrderItemRequest itemRequest = orderItemService.createConfigurableOrderItemRequestFromProduct(product); orderItemService.modifyOrderItemRequest(itemRequest); orderItemService.mergeOrderItemRequest(itemRequest, orderItem); // update quantities and product options itemRequest.setQuantity(orderItem.getQuantity()); model.addAttribute("baseItem", itemRequest); model.addAttribute("isUpdateRequest", Boolean.TRUE); model.addAttribute("originalOrderItem", orderItemId); model.addAttribute(ALL_PRODUCTS_ATTRIBUTE_NAME, orderItemService.findAllProductsInRequest(itemRequest)); return isAjaxRequest(request) ? getConfigureView() : getConfigurePageRedirect(); }
if (discreteOrderItem.getSku().getActiveStartDate() != null) { if (!discreteOrderItem.getSku().isActive( discreteOrderItem.getProduct(), orderItem.getCategory())) { itemsToRemove.add(orderItem); if (!discreteOrderItem.getProduct().isActive() || !orderItem.getCategory().isActive()) { itemsToRemove.add(orderItem); if (discreteOrderItem.getSku().getActiveStartDate() != null) { if (!discreteOrderItem.getSku().isActive( discreteOrderItem.getProduct(), orderItem.getCategory())) { if (!discreteOrderItem.getProduct().isActive() || !orderItem.getCategory().isActive()) { removeBundle = true; break;
protected boolean orderItemsSemanticallyEqual(DiscreteOrderItem one, DiscreteOrderItem two) { if ((one == null && two != null) || (one != null && two == null)) { return false; } if (!one.getClass().equals(two.getClass())) { return false; } if (!one.getSku().getId().equals(two.getSku().getId())) { return false; } if (one.getQuantity() != two.getQuantity()) { return false; } if (((one.getProduct() == null && two.getProduct() != null) || (one.getProduct() != null && two.getProduct() == null)) && !one.getProduct().getId().equals(two.getProduct().getId())) { return false; } if (((one.getCategory() == null && two.getCategory() != null) || (one.getCategory() != null && two.getCategory() == null)) && !one.getCategory().getId().equals(two.getCategory().getId())) { return false; } return true; }
if(checkAvailabilityInLocale(doi, currency)){ OrderItemRequestDTO itemRequest = new OrderItemRequestDTO(); itemRequest.setProductId(doi.getProduct().getId()); itemRequest.setQuantity(doi.getQuantity()); itemsToReprice.add(itemRequest); if(checkAvailabilityInLocale(doi, currency)){ OrderItemRequestDTO itemRequest = new OrderItemRequestDTO(); itemRequest.setProductId(doi.getProduct().getId()); itemRequest.setQuantity(doi.getQuantity()); itemsToReprice.add(itemRequest);
if (doi.getProduct() != null) { orderItemRequest.setProductId(doi.getProduct().getId());
protected DiscreteOrderItemRequest createDiscreteOrderItemRequest(DiscreteOrderItem discreteOrderItem) { DiscreteOrderItemRequest itemRequest = new DiscreteOrderItemRequest(); itemRequest.setCategory(discreteOrderItem.getCategory()); itemRequest.setProduct(discreteOrderItem.getProduct()); itemRequest.setQuantity(discreteOrderItem.getQuantity()); itemRequest.setSku(discreteOrderItem.getSku()); if (discreteOrderItem.getPersonalMessage() != null) { PersonalMessage personalMessage = orderItemService.createPersonalMessage(); try { BeanUtils.copyProperties(personalMessage, discreteOrderItem.getPersonalMessage()); personalMessage.setId(null); } catch (IllegalAccessException e) { throw new RuntimeException(e); } catch (InvocationTargetException e) { throw new RuntimeException(e); } itemRequest.setPersonalMessage(personalMessage); } return itemRequest; }
DiscreteOrderItem discreteOrderItem = (DiscreteOrderItem) orderItem; if (discreteOrderItem.getSku().getActiveStartDate() != null) { if (discreteOrderItem.getSku().isActive(discreteOrderItem.getProduct(), orderItem.getCategory())) { OrderItem newItem = addOrderItemToOrder(customerCart, discreteOrderItem.clone(), false); mergeCartResponse.getAddedItems().add(newItem); if (discreteOrderItem.getProduct().isActive() && orderItem.getCategory().isActive()) { OrderItem newItem = addOrderItemToOrder(customerCart, discreteOrderItem.clone(), false); mergeCartResponse.getAddedItems().add(newItem); discreteOrderItem.removeAllCandidateItemOffers(); if (discreteOrderItem.getSku().getActiveStartDate() != null) { if (!discreteOrderItem.getSku().isActive(discreteOrderItem.getProduct(), orderItem.getCategory())) { if (!discreteOrderItem.getProduct().isActive() || !orderItem.getCategory().isActive()) { removeBundle = true;
protected OrderItem findMatchingItem(Order order, OrderItemRequestDTO itemToFind) { if (order == null) { return null; } for (OrderItem currentItem : order.getOrderItems()) { if (currentItem instanceof DiscreteOrderItem) { DiscreteOrderItem discreteItem = (DiscreteOrderItem) currentItem; if (itemMatches(discreteItem.getSku(), discreteItem.getProduct(), discreteItem.getOrderItemAttributes(), itemToFind)) { return discreteItem; } } else if (currentItem instanceof BundleOrderItem) { BundleOrderItem bundleItem = (BundleOrderItem) currentItem; if (itemMatches(bundleItem.getSku(), bundleItem.getProduct(), null, itemToFind)) { return bundleItem; } } } return null; }
Product product = discreteOI.getProduct();
Product product = discreteItem.getProduct(); itemRequest.setContainerSize((USPSContainerSizeType) product.getSize()); itemRequest.setContainerShape((USPSContainerShapeType) product.getContainer());