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; }
protected void populateDiscreteOrderItem(DiscreteOrderItem item, AbstractOrderItemRequest itemRequest) { item.setSku(itemRequest.getSku()); item.setQuantity(itemRequest.getQuantity()); item.setCategory(itemRequest.getCategory()); item.setProduct(itemRequest.getProduct()); item.setOrder(itemRequest.getOrder()); Map<String, String> attributes = itemRequest.getItemAttributes(); populateProductOptionAttributes(item, attributes); applyAdditionalOrderItemProperties(item); }
@Test(groups = { "createDiscreteOrderItem" }, dataProvider = "basicDiscreteOrderItem", dataProviderClass = OrderItemDataProvider.class, dependsOnGroups = { "createOrder", "createSku" }) @Rollback(false) @Transactional public void createDiscreteOrderItem(DiscreteOrderItem orderItem) { Sku si = skuDao.readFirstSku(); assert si.getId() != null; orderItem.setSku(si); assert orderItem.getId() == null; orderItem = (DiscreteOrderItem) orderItemDao.save(orderItem); assert orderItem.getId() != null; orderItemId = orderItem.getId(); }
/** * @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 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 CreateResponse<DiscreteOrderItem> createOrRetrieveCopyInstance(MultiTenantCopyContext context) throws CloneNotSupportedException { CreateResponse<DiscreteOrderItem> createResponse = super.createOrRetrieveCopyInstance(context); if (createResponse.isAlreadyPopulated()) { return createResponse; } DiscreteOrderItem cloned = createResponse.getClone(); cloned.setBaseRetailPrice(getBaseRetailPrice()); cloned.setBaseSalePrice(getBaseSalePrice()); cloned.setProduct(product); cloned.setSku(sku); cloned.setCategory(category); ((DiscreteOrderItemImpl)cloned).discountsAllowed = discountsAllowed; cloned.setName(name); // dont clone cloned.setOrder(order); return createResponse; }
orderItem1.setCategory(category1); orderItem1.setName("test1"); orderItem1.setOrder(order); orderItem1.setOrderItemType(OrderItemType.DISCRETE); orderItem1.setProduct(product1); orderItem1.setQuantity(2); orderItem1.setSku(sku1); orderItem1.setId(getOrderItemId()); orderItem1.setOrder(order); orderItem1.getOrderItemPriceDetails().add(priceDetail1); orderItem2.setCategory(category2); orderItem2.setName("test2"); orderItem2.setOrder(order); orderItem2.setOrderItemType(OrderItemType.DISCRETE); orderItem2.setProduct(product2); orderItem2.setQuantity(3); orderItem2.setSku(sku2); orderItem2.setId(getOrderItemId()); orderItem2.setOrder(order); orderItem2.getOrderItemPriceDetails().add(priceDetail2);
if (fulfillmentGroupItem.getOrderItem() instanceof DiscreteOrderItem) { DiscreteOrderItem discreteOrderItem = (DiscreteOrderItem) fulfillmentGroupItem.getOrderItem(); skuIdFulfillmentGroupMap.put(discreteOrderItem.getSku().getId(), fulfillmentGroupItem); order = orderService.removeItem(order.getId(), item.getId(), false); } else { for (DiscreteOrderItem discreteOrderItem : unbundledItems) { if (discreteOrderItem.getSku().getId().equals(skuBundleItem.getSku().getId())) { baseItem = discreteOrderItem; DiscreteOrderItem newSkuBundleItem = (DiscreteOrderItem) baseItem.clone(); newSkuBundleItem.setSkuBundleItem(skuBundleItem); newSkuBundleItem.setBundleOrderItem(bundleOrderItem); newSkuBundleItem.setQuantity(skuBundleItem.getQuantity()); newSkuBundleItem.setOrder(null); DiscreteOrderItem newOrderItem = (DiscreteOrderItem) baseItem.clone(); newOrderItem.setBundleOrderItem(null); newOrderItem.setSkuBundleItem(null); newOrderItem.setQuantity(skuMatches - skusRequired); newOrderItem = (DiscreteOrderItem) orderItemDao.save(newOrderItem); newOrderItem.setOrder(order); newOrderItem.updateSaleAndRetailPrices(); FulfillmentGroupItem fulfillmentGroupItem = skuIdFulfillmentGroupMap.get(newSkuBundleItem.getSku().getId()); if (fulfillmentGroupItem != null) { FulfillmentGroupItem newFulfillmentGroupItem = fulfillmentGroupItem.clone(); newFulfillmentGroupItem.setOrderItem(newOrderItem);
@Override public DiscreteOrderItemDto createDto(final DiscreteOrderItem discreteOrderItem, final boolean embed, final boolean link) { final Money errCode = new Money(BigDecimal.valueOf(-1337)); final Sku sku = discreteOrderItem.getSku(); final long productId = sku.getProduct().getId(); .orElse(sku.getProduct().getDefaultSku().getExternalId()) .salePrice(discreteOrderItem.getSalePrice()) .retailPrice(discreteOrderItem.getRetailPrice()) .quantity(discreteOrderItem.getQuantity()) .productName(discreteOrderItem.getName()) .productHref(linkTo(methodOn(ProductController.class) .readOneProductById(productId, null, null)).toUri().toASCIIString() .price(Optional.ofNullable(discreteOrderItem.getTotalPrice()).orElse(errCode).getAmount()) .attributes( Optional.ofNullable(discreteOrderItem.getOrderItemAttributes()) .map(Map::values) .map(Collection::stream) orderItemDto.add(linkTo(methodOn(OrderController.class).getOneItemFromOrder(null, discreteOrderItem.getOrder().getId(), discreteOrderItem.getId(), null, null)).withSelfRel()); orderItemDto.add(linkTo(methodOn(ProductController.class).readOneProductById(productId, null, null)).withRel("product")); fullfillmentGroup.ifPresent(fulfillmentGroup -> { orderItemDto.add(linkTo(methodOn(FulfillmentController.class).getOrderFulfillmentById(null, discreteOrderItem.getOrder().getId(), fulfillmentGroup.getId(), null, null)).withRel(FULFILLMENT_REL)); });
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; }
private void addSampleItemToOrder(Order order, FulfillmentGroup group) { DiscreteOrderItem item = new DiscreteOrderItemImpl(); item.setOrder(order); item.setQuantity(1); Sku newSku = new SkuImpl(); newSku.setName("Under Armor T-Shirt -- Red"); newSku.setRetailPrice(new Money(14.99)); newSku.setActiveStartDate(SystemTime.asDate()); newSku.setDiscountable(false); newSku = catalogService.saveSku(newSku); item.setSku(newSku); item = (DiscreteOrderItem) orderItemService.saveOrderItem(item); List<OrderItem> items = new ArrayList<>(); items.add(item); order.setOrderItems(items); FulfillmentGroupItem fgItem = new FulfillmentGroupItemImpl(); fgItem.setFulfillmentGroup(group); fgItem.setOrderItem(item); fgItem.setQuantity(1); //fgItem.setPrice(new Money(0D)); group.addFulfillmentGroupItem(fgItem); }
/** * 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; }
@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; }
orderItem.setSku(sku); orderItem.setPrice(new Money(total.divide(new BigDecimal(orderItemsToCreate)))); } else if (option instanceof BandedWeightFulfillmentOption) { Weight weight = new Weight(); weight.setWeight(total.divide(new BigDecimal(orderItemsToCreate))); weight.setWeightUnitOfMeasure(WeightUnitOfMeasureType.POUNDS); orderItem.getSku().setWeight(weight); orderItem.setPrice(new Money(BigDecimal.ZERO)); orderItem.setOrder(result);
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; }
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); oldNewItemMap.put(orderItem, newItem); if (discreteOrderItem.getProduct().isActive() && orderItem.getCategory().isActive()) { OrderItem newItem = addOrderItemToOrder(customerCart, discreteOrderItem.clone(), false); mergeCartResponse.getAddedItems().add(newItem); oldNewItemMap.put(orderItem, newItem); boolean removeBundle = false; for (DiscreteOrderItem discreteOrderItem : bundleOrderItem.getDiscreteOrderItems()){ discreteOrderItem.removeAllAdjustments(); discreteOrderItem.removeAllCandidateItemOffers(); if (discreteOrderItem.getSku().getActiveStartDate() != null) { if (!discreteOrderItem.getSku().isActive(discreteOrderItem.getProduct(), orderItem.getCategory())) { if (!discreteOrderItem.getProduct().isActive() || !orderItem.getCategory().isActive()) { removeBundle = true;
orderItemRequest = new OrderItemRequestDTO(); if (doi.getCategory() != null) { orderItemRequest.setCategoryId(doi.getCategory().getId()); if (doi.getProduct() != null) { orderItemRequest.setProductId(doi.getProduct().getId()); if (doi.getSku() != null) { orderItemRequest.setSkuId(doi.getSku().getId()); if (doi.getAdditionalAttributes() != null) { for (Entry<String, String> entry : doi.getAdditionalAttributes().entrySet()) { orderItemRequest.getAdditionalAttributes().put(entry.getKey(), entry.getValue());
item1.setSku(sku); item1.setQuantity(2); item1.setOrder(order); item1.setOrderItemType(OrderItemType.DISCRETE); item.setSku(sku); item.setQuantity(1); item.setOrder(order); item.setOrderItemType(OrderItemType.DISCRETE);
/** * 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(); }