@Override public BundleOrderItem createBundleOrderItem(final BundleOrderItemRequest itemRequest) { final BundleOrderItem item = (BundleOrderItem) orderItemDao.create(OrderItemType.BUNDLE); item.setQuantity(itemRequest.getQuantity()); item.setCategory(itemRequest.getCategory()); item.setName(itemRequest.getName()); item.setBundleOrderItemFeePrices(itemRequest.getBundleOrderItemFeePrices()); item.setOrder(itemRequest.getOrder()); item.setSalePriceOverride(Boolean.TRUE); item.setSalePrice(itemRequest.getSalePriceOverride()); item.setBaseSalePrice(itemRequest.getSalePriceOverride()); item.setRetailPriceOverride(Boolean.TRUE); item.setRetailPrice(itemRequest.getRetailPriceOverride()); item.setBaseRetailPrice(itemRequest.getRetailPriceOverride()); discreteOrderItem = createDiscreteOrderItem(discreteItemRequest); item.getDiscreteOrderItems().add(discreteOrderItem);
if (InventoryType.CHECK_QUANTITY.equals(bundleItem.getSku().getInventoryType())) { skuInventoryMap.put(bundleItem.getSku(), bundleItem.getQuantity()); List<DiscreteOrderItem> discreteItems = bundleItem.getDiscreteOrderItems(); for (DiscreteOrderItem discreteItem : discreteItems) { if (InventoryType.CHECK_QUANTITY.equals(discreteItem.getSku().getInventoryType())) { Integer quantity = skuInventoryMap.get(discreteItem.getSku()); if (quantity == null) { quantity = (discreteItem.getQuantity() * bundleItem.getQuantity()); } else { quantity += (discreteItem.getQuantity() * bundleItem.getQuantity());
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(); }
@Override public CreateResponse<BundleOrderItem> createOrRetrieveCopyInstance(MultiTenantCopyContext context) throws CloneNotSupportedException { CreateResponse<BundleOrderItem> createResponse = super.createOrRetrieveCopyInstance(context); if (createResponse.isAlreadyPopulated()) { return createResponse; } BundleOrderItem cloned = createResponse.getClone(); cloned.setBaseRetailPrice(getBaseRetailPrice()); cloned.setBaseSalePrice(getBaseSalePrice()); cloned.setProductBundle(productBundle); cloned.setSku(sku); return createResponse; }
protected BundleOrderItemRequest createBundleOrderItemRequest(BundleOrderItem bundleOrderItem, List<DiscreteOrderItemRequest> discreteOrderItemRequests) { BundleOrderItemRequest bundleOrderItemRequest = new BundleOrderItemRequest(); bundleOrderItemRequest.setCategory(bundleOrderItem.getCategory()); bundleOrderItemRequest.setName(bundleOrderItem.getName()); bundleOrderItemRequest.setQuantity(bundleOrderItem.getQuantity()); bundleOrderItemRequest.setDiscreteOrderItems(discreteOrderItemRequests); return bundleOrderItemRequest; }
/** * Removes all automatic bundles from the order and replaces with DiscreteOrderItems. * * @param order * @throws PricingException */ private Order removeAutomaticBundles(Order order) throws PricingException { List<BundleOrderItem> bundlesToRemove = new ArrayList<BundleOrderItem>(); for (OrderItem orderItem : order.getOrderItems()) { if (orderItem instanceof BundleOrderItem) { BundleOrderItem bundleOrderItem = (BundleOrderItem) orderItem; if (bundleOrderItem.getProductBundle() != null && bundleOrderItem.getProductBundle().getAutoBundle()) { bundlesToRemove.add(bundleOrderItem); } } } for (BundleOrderItem bundleOrderItem : bundlesToRemove) { try { order = orderService.removeItem(order.getId(), bundleOrderItem.getId(), false); } catch (RemoveFromCartException e) { throw new PricingException("Could not remove item", e); } } return order; }
ProductBundle productBundle = itemRequest.getProductBundle(); BundleOrderItem bundleOrderItem = (BundleOrderItem) orderItemDao.create(OrderItemType.BUNDLE); bundleOrderItem.setQuantity(itemRequest.getQuantity()); bundleOrderItem.setCategory(itemRequest.getCategory()); bundleOrderItem.setSku(itemRequest.getSku()); bundleOrderItem.setName(itemRequest.getName()); bundleOrderItem.setProductBundle(productBundle); bundleOrderItem.setOrder(itemRequest.getOrder()); bundleOrderItem.setSalePriceOverride(Boolean.TRUE); bundleOrderItem.setSalePrice(itemRequest.getSalePriceOverride()); bundleOrderItem.setBaseSalePrice(itemRequest.getSalePriceOverride()); bundleOrderItem.setRetailPriceOverride(Boolean.TRUE); bundleOrderItem.setRetailPrice(itemRequest.getRetailPriceOverride()); bundleOrderItem.setBaseRetailPrice(itemRequest.getRetailPriceOverride()); bundleOrderItem.getDiscreteOrderItems().add(bundleDiscreteItem);
ProductBundle bundle = (ProductBundle) product; BundleOrderItem bundleOrderItem = (BundleOrderItem) orderItemDao.create(OrderItemType.BUNDLE); bundleOrderItem.setQuantity(orderItemRequestDTO.getQuantity()); bundleOrderItem.setCategory(category); bundleOrderItem.setSku(sku); bundleOrderItem.setName(product.getName()); bundleOrderItem.setProductBundle(bundle); bundleOrderItem.setOrder(order); bundleDiscreteItem.setBundleOrderItem(bundleOrderItem); bundleDiscreteItem.setSkuBundleItem(skuBundleItem); bundleOrderItem.getDiscreteOrderItems().add(bundleDiscreteItem);
protected List<DiscreteOrderItem> getOrderItems(Order order) { List<DiscreteOrderItem> orderItems = new ArrayList<>(); for (OrderItem oi : order.getOrderItems()) { if (oi instanceof DiscreteOrderItem) { orderItems.add((DiscreteOrderItem) oi); } else if (oi instanceof BundleOrderItem) { orderItems.addAll(((BundleOrderItem) oi).getDiscreteOrderItems()); } } return orderItems; }
bundleOrderItem.setCategory(category1); bundleOrderItem.setName("test1"); bundleOrderItem.setOrder(order); bundleOrderItem.setOrderItemType(OrderItemType.DISCRETE); bundleOrderItem.setQuantity(2); bundleOrderItem.setId(getOrderItemId()); bundleOrderItem.setOrder(order); bundleOrderItem.setRetailPrice(new Money(10D)); bundleOrderItem.setProductBundle(pb); bundleOrderItem.getOrderItemPriceDetails().add(priceDetail); orderItem1.getOrderItemPriceDetails().add(priceDetail1); bundleOrderItem.getDiscreteOrderItems().add(orderItem1); orderItem2.getOrderItemPriceDetails().add(priceDetail2); bundleOrderItem.getDiscreteOrderItems().add(orderItem2);
/** * 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; }
protected boolean bundleItemMatches(BundleOrderItem item1, BundleOrderItem item2) { if (item1.getSku() != null && item2.getSku() != null) { return item1.getSku().getId().equals(item2.getSku().getId()); for(DiscreteOrderItem item : item1.getDiscreteOrderItems()) { if (skuMap.get(item.getSku().getId()) == null) { skuMap.put(item.getSku().getId(), Integer.valueOf(item.getQuantity())); for(DiscreteOrderItem item : item2.getDiscreteOrderItems()) { if (skuMap.containsKey(item.getSku().getId())) { Integer qty = skuMap.get(item.getSku().getId());
@Test(groups = { "addBundleToOrder" }, dependsOnGroups = { "addAnotherItemToOrder" }) @Rollback(false) @Transactional public void addBundleToOrder() throws AddToCartException { numOrderItems++; Sku sku = skuDao.readFirstSku(); Order order = orderService.findOrderById(orderId); assert order != null; assert sku.getId() != null; ProductBundle bundleItem = addProductBundle(); OrderItemRequestDTO orderItemRequestDTO = new OrderItemRequestDTO(); orderItemRequestDTO.setProductId(bundleItem.getId()); orderItemRequestDTO.setSkuId(bundleItem.getDefaultSku().getId()); orderItemRequestDTO.setQuantity(1); order = orderService.addItem(order.getId(), orderItemRequestDTO, true); BundleOrderItem item = (BundleOrderItem) orderService.findLastMatchingItem(order, bundleItem.getDefaultSku().getId(), null); bundleOrderItemId = item.getId(); assert item != null; assert item.getQuantity() == 1; assert item.getDiscreteOrderItems().size() == 1; }
for (DiscreteOrderItem doi : ((BundleOrderItem) oi).getDiscreteOrderItems()) { expandedOrderItems.add(doi); oiQuantity += ((DiscreteOrderItem) oi).getBundleOrderItem().getQuantity() * oi.getQuantity(); } else { oiQuantity += oi.getQuantity();
@Test(groups = { "removeBundleFromOrder" }, dependsOnGroups = { "addBundleToOrder" }) @Rollback(false) @Transactional public void removeBundleFromOrder() throws RemoveFromCartException { Order order = orderService.findOrderById(orderId); List<OrderItem> orderItems = order.getOrderItems(); assert orderItems.size() == numOrderItems; int startingSize = orderItems.size(); BundleOrderItem bundleOrderItem = (BundleOrderItem) orderItemService.readOrderItemById(bundleOrderItemId); assert bundleOrderItem != null; assert bundleOrderItem.getDiscreteOrderItems() != null; assert bundleOrderItem.getDiscreteOrderItems().size() == 1; order = orderService.removeItem(order.getId(), bundleOrderItem.getId(), true); List<OrderItem> items = order.getOrderItems(); assert items != null; assert items.size() == startingSize - 1; }
@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; }
orderItem.removeAllCandidateItemOffers(); boolean removeBundle = false; for (DiscreteOrderItem discreteOrderItem : bundleOrderItem.getDiscreteOrderItems()){ discreteOrderItem.removeAllAdjustments(); discreteOrderItem.removeAllCandidateItemOffers(); OrderItem newItem = addOrderItemToOrder(customerCart, bundleOrderItem.clone(), false); mergeCartResponse.getAddedItems().add(newItem); oldNewItemMap.put(orderItem, newItem);
@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; }
protected int countExistingUsesOfBundle(Order order, ProductBundle bundle) { int existingUses=0; for (OrderItem orderItem : order.getOrderItems()) { if (orderItem instanceof BundleOrderItem) { BundleOrderItem bundleOrderItem = (BundleOrderItem) orderItem; if (bundleOrderItem.getProductBundle() != null) { if (bundleOrderItem.getProductBundle().getId().equals(bundle.getId())) { existingUses = existingUses+1; } } } } return existingUses; }
bundleOrderItem.setQuantity(numApplications); bundleOrderItem.setCategory(productBundle.getDefaultCategory()); bundleOrderItem.setSku(productBundle.getDefaultSku()); bundleOrderItem.setName(productBundle.getName()); bundleOrderItem.setProductBundle(productBundle); bundleOrderItem.setOrder(order); newSkuBundleItem.setOrder(null); bundleOrderItem.getDiscreteOrderItems().add(newSkuBundleItem); bundleOrderItem.updateSaleAndRetailPrices(); if (orderItem instanceof BundleOrderItem) { BundleOrderItem bundleItem = (BundleOrderItem) orderItem; for (DiscreteOrderItem discreteOrderItem : bundleItem.getDiscreteOrderItems()) {