/** * Resolves the fulfillment type based on the order item. The OOB implementation uses the {@link DiscreteOrderItem#getSku()} * to then invoke {@link #resolveFulfillmentType(Sku)}. * * @param discreteOrderItem * @return */ protected FulfillmentType resolveFulfillmentType(DiscreteOrderItem discreteOrderItem) { return resolveFulfillmentType(discreteOrderItem.getSku()); }
@Override public boolean containsSku(Sku sku) { for (OrderItem orderItem : getOrderItems()) { if (orderItem instanceof DiscreteOrderItem) { DiscreteOrderItem discreteOrderItem = (DiscreteOrderItem) orderItem; if (discreteOrderItem.getSku() != null && discreteOrderItem.getSku().equals(sku)) { return true; } } else if (orderItem instanceof BundleOrderItem) { BundleOrderItem bundleOrderItem = (BundleOrderItem) orderItem; if (bundleOrderItem.getSku() != null && bundleOrderItem.getSku().equals(sku)) { return true; } } } return false; }
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; }
protected int populateItemMatchesForSku(List<DiscreteOrderItem> matchingItems, Order order, List<DiscreteOrderItem> unbundledItems, Long skuId) { int skuMatches = 0; for (OrderItem orderItem : order.getOrderItems()) { if (orderItem instanceof DiscreteOrderItem) { DiscreteOrderItem item = (DiscreteOrderItem) orderItem; if (skuId.equals(item.getSku().getId())) { matchingItems.add(item); skuMatches = skuMatches + item.getQuantity(); } } } if (unbundledItems != null) { for (DiscreteOrderItem discreteOrderItem : unbundledItems) { if (skuId.equals(discreteOrderItem.getSku().getId())) { skuMatches = skuMatches + discreteOrderItem.getQuantity(); } } } return skuMatches; }
/** * @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()); }
protected List<OrderMultishipOption> createPopulatedOrderMultishipOption(Order order, DiscreteOrderItem item, Integer quantity) { List<OrderMultishipOption> orderMultishipOptions = new ArrayList<OrderMultishipOption>(); if (!fulfillmentGroupService.isShippable(item.getSku().getFulfillmentType()) || quantity == 0) { return orderMultishipOptions; } // for (int i = 0; i < quantity; i++) { OrderMultishipOption orderMultishipOption = new OrderMultishipOptionImpl(); orderMultishipOption.setOrder(order); orderMultishipOption.setOrderItem(item); orderMultishipOptions.add(orderMultishipOption); // } return orderMultishipOptions; } }
if (skuMap.get(item.getSku().getId()) == null) { skuMap.put(item.getSku().getId(), Integer.valueOf(item.getQuantity())); } else { Integer qty = skuMap.get(item.getSku().getId()); skuMap.put(item.getSku().getId(), Integer.valueOf(qty + item.getQuantity())); if (skuMap.containsKey(item.getSku().getId())) { Integer qty = skuMap.get(item.getSku().getId()); Integer newQty = Integer.valueOf(qty - item.getQuantity()); if (newQty.intValue() == 0) { skuMap.remove(item.getSku().getId()); } else if (newQty.intValue() > 0) { skuMap.put(item.getSku().getId(), newQty); } else { return false;
@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; }
Sku sku = ((DiscreteOrderItem) orderItem).getSku(); Integer quantity = skuInventoryMap.get(sku); if (quantity == null) { if (InventoryType.CHECK_QUANTITY.equals(discreteItem.getSku().getInventoryType())) { Integer quantity = skuInventoryMap.get(discreteItem.getSku()); if (quantity == null) { quantity = (discreteItem.getQuantity() * bundleItem.getQuantity()); quantity += (discreteItem.getQuantity() * bundleItem.getQuantity()); skuInventoryMap.put(discreteItem.getSku(), quantity);
protected void fixTranslations(Order cart) { for (DiscreteOrderItem orderItem : cart.getDiscreteOrderItems()) { Sku sku = orderItem.getSku(); translateOrderItem(orderItem, sku); } for (OrderItem orderItem : cart.getOrderItems()) { if (orderItem instanceof BundleOrderItem) { BundleOrderItem bundleItem = (BundleOrderItem) orderItem; Sku sku = bundleItem.getSku(); translateOrderItem(orderItem, sku); } } }
protected int countMaximumApplications(Order order, SkuBundleItem skuBundleItem, Set<Long> processedBundles) { int skuMatches = 0; Long skuId = skuBundleItem.getSku().getId(); for (OrderItem orderItem : order.getOrderItems()) { if (orderItem instanceof DiscreteOrderItem) { DiscreteOrderItem item = (DiscreteOrderItem) orderItem; if (skuId.equals(item.getSku().getId())) { skuMatches = skuMatches + item.getQuantity(); } } else if (orderItem instanceof BundleOrderItem) { BundleOrderItem bundleItem = (BundleOrderItem) orderItem; if (bundleItem.getProductBundle() != null && bundleItem.getProductBundle().getAutoBundle()) { if (! processedBundles.contains(bundleItem.getId())) { for(DiscreteOrderItem discreteItem : bundleItem.getDiscreteOrderItems()) { if (skuId.equals(discreteItem.getSku().getId())) { skuMatches = skuMatches + (discreteItem.getQuantity() * bundleItem.getQuantity()); } } } } } } return skuMatches / skuBundleItem.getQuantity(); }
OrderItem orderItem = orderItemService.readOrderItemById(orderItemId); if (orderItem instanceof DiscreteOrderItem) { sku = ((DiscreteOrderItem) orderItem).getSku(); } else if (orderItem instanceof BundleOrderItem) { sku = ((BundleOrderItem) orderItem).getSku(); Sku childSku = ((DiscreteOrderItem) child).getSku(); Integer childQuantity = child.getQuantity(); childQuantity = childQuantity / previousQty;
orderItem.removeAllCandidateItemOffers(); 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); discreteOrderItem.removeAllAdjustments(); discreteOrderItem.removeAllCandidateItemOffers(); if (discreteOrderItem.getSku().getActiveStartDate() != null) { if (!discreteOrderItem.getSku().isActive(discreteOrderItem.getProduct(), orderItem.getCategory())) {
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; }
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; }
public void testApplyAllItemOffers() throws Exception { replay(); Order order = dataProvider.createBasicOrder(); Offer offer1 = dataProvider.createItemBasedOfferWithItemCriteria( "order.subTotal.getAmount()>20", OfferDiscountType.PERCENT_OFF, "([MVEL.eval(\"toUpperCase()\",\"test1\"), MVEL.eval(\"toUpperCase()\",\"test2\")] contains MVEL.eval(\"toUpperCase()\", discreteOrderItem.category.name))", "([MVEL.eval(\"toUpperCase()\",\"test1\"), MVEL.eval(\"toUpperCase()\",\"test2\")] contains MVEL.eval(\"toUpperCase()\", discreteOrderItem.category.name))" ).get(0); offer1.setId(1L); List<Offer> offers = new ArrayList<Offer>(); offers.add(offer1); List<PromotableCandidateItemOffer> qualifiedOffers = new ArrayList<PromotableCandidateItemOffer>(); order.updatePrices(); offerService.applyAndSaveOffersToOrder(offers, order); assertTrue(order.getTotalAdjustmentsValue().getAmount().doubleValue() > 0); order = dataProvider.createBasicOrder(); qualifiedOffers = new ArrayList<PromotableCandidateItemOffer>(); offer1.setApplyDiscountToSalePrice(false); ((DiscreteOrderItem) order.getOrderItems().get(0)).getSku().setSalePrice(new Money(1D)); ((DiscreteOrderItem) order.getOrderItems().get(1)).getSku().setSalePrice(new Money(1D)); order.updatePrices(); offerService.applyAndSaveOffersToOrder(offers, order); assertTrue(order.getTotalAdjustmentsValue().getAmount().doubleValue() == 0); verify(); }
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; }
fees = ((BundleOrderItem)item.getOrderItem()).getSku().getFees(); } else if (item.getOrderItem() instanceof DiscreteOrderItem) { fees = ((DiscreteOrderItem)item.getOrderItem()).getSku().getFees();