@Override public OrderItem addOrderItemToBundle(Order order, BundleOrderItem bundle, DiscreteOrderItem newOrderItem, boolean priceOrder) throws PricingException { List<DiscreteOrderItem> orderItems = bundle.getDiscreteOrderItems(); orderItems.add(newOrderItem); newOrderItem.setBundleOrderItem(bundle); order = updateOrder(order, priceOrder); return findMatchingItem(order, bundle); }
@Override public Order removeItemFromBundle(Order order, BundleOrderItem bundle, OrderItem item, boolean priceOrder) throws PricingException { DiscreteOrderItem itemFromBundle = bundle.getDiscreteOrderItems().remove(bundle.getDiscreteOrderItems().indexOf(item)); orderItemService.delete(itemFromBundle); itemFromBundle.setBundleOrderItem(null); order = updateOrder(order, priceOrder); return order; }
@Override public OrderItem clone() { DiscreteOrderItem orderItem = (DiscreteOrderItem) super.clone(); if (discreteOrderItemFeePrices != null) { for (DiscreteOrderItemFeePrice feePrice : discreteOrderItemFeePrices) { DiscreteOrderItemFeePrice cloneFeePrice = feePrice.clone(); cloneFeePrice.setDiscreteOrderItem(orderItem); orderItem.getDiscreteOrderItemFeePrices().add(cloneFeePrice); } } if (additionalAttributes != null) { orderItem.getAdditionalAttributes().putAll(additionalAttributes); } orderItem.setBaseRetailPrice(convertToMoney(baseRetailPrice)); orderItem.setBaseSalePrice(convertToMoney(baseSalePrice)); orderItem.setBundleOrderItem(bundleOrderItem); orderItem.setProduct(product); orderItem.setSku(sku); if (orderItem.getOrder() == null) { throw new IllegalStateException("Either an Order or a BundleOrderItem must be set on the DiscreteOrderItem"); } return orderItem; }
@Override public OrderItem clone() { BundleOrderItemImpl orderItem = (BundleOrderItemImpl) super.clone(); if (discreteOrderItems != null) { for (DiscreteOrderItem discreteOrderItem : discreteOrderItems) { DiscreteOrderItem temp = (DiscreteOrderItem) discreteOrderItem.clone(); temp.setBundleOrderItem(orderItem); orderItem.getDiscreteOrderItems().add(temp); } } if (bundleOrderItemFeePrices != null) { for (BundleOrderItemFeePrice feePrice : bundleOrderItemFeePrices) { BundleOrderItemFeePrice cloneFeePrice = feePrice.clone(); cloneFeePrice.setBundleOrderItem(orderItem); orderItem.getBundleOrderItemFeePrices().add(cloneFeePrice); } } orderItem.setBaseRetailPrice(convertToMoney(baseRetailPrice)); orderItem.setBaseSalePrice(convertToMoney(baseSalePrice)); orderItem.setSku(sku); orderItem.setProductBundle(productBundle); return orderItem; }
/** * Removes all automatic bundles from the order and replaces with DiscreteOrderItems. * * @param order */ private List<DiscreteOrderItem> unBundleItems(Order order) throws PricingException{ List<DiscreteOrderItem> unbundledItems = null; for (OrderItem orderItem : order.getOrderItems()) { if (orderItem instanceof BundleOrderItem) { BundleOrderItem bundleOrderItem = (BundleOrderItem) orderItem; if (bundleOrderItem.getProductBundle() != null && bundleOrderItem.getProductBundle().getAutoBundle()) { if (unbundledItems == null) { unbundledItems = new ArrayList<DiscreteOrderItem>(); } for(DiscreteOrderItem item : bundleOrderItem.getDiscreteOrderItems()) { DiscreteOrderItem newOrderItem = (DiscreteOrderItem) item.clone(); newOrderItem.setQuantity(item.getQuantity() * bundleOrderItem.getQuantity()); newOrderItem.setSkuBundleItem(null); newOrderItem.setBundleOrderItem(null); newOrderItem.updateSaleAndRetailPrices(); newOrderItem.setOrder(order); unbundledItems.add(newOrderItem); } } } } return unbundledItems; }
newSkuBundleItem.setBundleOrderItem(bundleOrderItem); newSkuBundleItem.setQuantity(skuBundleItem.getQuantity()); newSkuBundleItem.setOrder(null); newOrderItem.setBundleOrderItem(null); newOrderItem.setSkuBundleItem(null); newOrderItem.setQuantity(skuMatches - skusRequired);
bundleDiscreteItem.setBundleOrderItem(bundleOrderItem); bundleDiscreteItem.setSkuBundleItem(skuBundleItem); bundleOrderItem.getDiscreteOrderItems().add(bundleDiscreteItem);
@Override public DiscreteOrderItem createDiscreteOrderItem(final DiscreteOrderItemRequest itemRequest) { final DiscreteOrderItem item = (DiscreteOrderItem) orderItemDao.create(OrderItemType.DISCRETE); populateDiscreteOrderItem(item, itemRequest); item.setBundleOrderItem(itemRequest.getBundleOrderItem()); if (itemRequest.getSalePriceOverride() != null) { item.setBaseSalePrice(itemRequest.getSalePriceOverride()); } item.setDiscreteOrderItemFeePrices(itemRequest.getDiscreteOrderItemFeePrices()); if (itemRequest.getSalePriceOverride() != null) { item.setSalePriceOverride(Boolean.TRUE); item.setSalePrice(itemRequest.getSalePriceOverride()); item.setBaseSalePrice(itemRequest.getSalePriceOverride()); } if (itemRequest.getRetailPriceOverride() != null) { item.setRetailPriceOverride(Boolean.TRUE); item.setRetailPrice(itemRequest.getRetailPriceOverride()); item.setBaseRetailPrice(itemRequest.getRetailPriceOverride()); } for (DiscreteOrderItemFeePrice feePrice : item.getDiscreteOrderItemFeePrices()) { feePrice.setDiscreteOrderItem(item); } if (MapUtils.isNotEmpty(itemRequest.getAdditionalAttributes())) { item.setAdditionalAttributes(itemRequest.getAdditionalAttributes()); } item.setPersonalMessage(itemRequest.getPersonalMessage()); applyAdditionalOrderItemProperties(item); return item; }
@Override public DiscreteOrderItem createDynamicPriceDiscreteOrderItem(final DiscreteOrderItemRequest itemRequest, @SuppressWarnings("rawtypes") HashMap skuPricingConsiderations) { final DiscreteOrderItem item = (DiscreteOrderItem) orderItemDao.create(OrderItemType.EXTERNALLY_PRICED); populateDiscreteOrderItem(item, itemRequest); SkuPriceWrapper wrapper = new SkuPriceWrapper(itemRequest.getSku()); DynamicSkuPrices prices = dynamicSkuPricingService.getSkuPrices(wrapper, skuPricingConsiderations); item.setBundleOrderItem(itemRequest.getBundleOrderItem()); item.setBaseRetailPrice(prices.getRetailPrice()); item.setBaseSalePrice(prices.getSalePrice()); item.setSalePrice(prices.getSalePrice()); item.setRetailPrice(prices.getRetailPrice()); if (itemRequest.getSalePriceOverride() != null) { item.setSalePriceOverride(Boolean.TRUE); item.setSalePrice(itemRequest.getSalePriceOverride()); item.setBaseSalePrice(itemRequest.getSalePriceOverride()); } if (itemRequest.getRetailPriceOverride() != null) { item.setRetailPriceOverride(Boolean.TRUE); item.setRetailPrice(itemRequest.getRetailPriceOverride()); item.setBaseRetailPrice(itemRequest.getRetailPriceOverride()); } item.setDiscreteOrderItemFeePrices(itemRequest.getDiscreteOrderItemFeePrices()); for (DiscreteOrderItemFeePrice fee : itemRequest.getDiscreteOrderItemFeePrices()) { item.setSalePrice(item.getSalePrice().add(fee.getAmount())); item.setRetailPrice(item.getRetailPrice().add(fee.getAmount())); } item.setPersonalMessage(itemRequest.getPersonalMessage()); applyAdditionalOrderItemProperties(item); return item; }