/*
   * This controller method is for demonstration purposes only. It contains a call to
   * catalogService.findActiveProductsByCategory, which may return a large list. A
   * more performant solution would be to utilize data paging techniques.
   */
  protected boolean addProductsToModel(
      HttpServletRequest request, ModelMap model, CatalogSort catalogSort) {
    boolean productFound = false;

    String productId = request.getParameter("productId");
    Product product = null;
    try {
      product = catalogService.findProductById(new Long(productId));
    } catch (Exception e) {
      // If product is not found, return all values in category
    }

    if (product != null && product.isActive()) {
      productFound = validateProductAndAddToModel(product, model);
      addRatingSummaryToModel(productId, model);
    } else {
      Category currentCategory = (Category) model.get("currentCategory");
      List<Product> productList =
          catalogService.findActiveProductsByCategory(currentCategory, SystemTime.asDate());
      SearchFilterUtil.filterProducts(
          productList, request.getParameterMap(), new String[] {"manufacturer", "sku.salePrice"});

      if ((catalogSort != null) && (catalogSort.getSort() != null)) {
        populateProducts(productList, currentCategory);
        model.addAttribute("displayProducts", sortProducts(catalogSort, productList));
      } else {
        catalogSort = new CatalogSort();
        catalogSort.setSort("featured");
        populateProducts(productList, currentCategory);
        model.addAttribute("displayProducts", sortProducts(catalogSort, productList));
      }
    }

    return productFound;
  }
  public Order setUpAnonymousCartWithGiftWrap() throws PricingException {
    Customer customer = customerService.saveCustomer(createNamedCustomer());

    Order order = cartService.createNewCartForCustomer(customer);

    Sku newSku = addTestSku("Small Plastic Crate", "Plastic Crate", "Crates");
    Sku newInactiveSku = addTestSku("Small Red Plastic Crate", "Plastic Crate", "Crates");
    Sku giftWrapSku = addTestSku("Gift Box", "Gift Box", "Gift Wraps");

    Product newProduct = newSku.getAllParentProducts().get(0);
    Category newCategory = newProduct.getDefaultCategory();

    List<OrderItem> addedItems = new ArrayList<OrderItem>();
    addedItems.add(
        orderService.addSkuToOrder(
            order.getId(), newSku.getId(), newProduct.getId(), newCategory.getId(), 2));
    addedItems.add(
        orderService.addSkuToOrder(
            order.getId(), newInactiveSku.getId(), newProduct.getId(), newCategory.getId(), 2));

    orderService.addGiftWrapItemToOrder(
        order, createGiftWrapOrderItemRequest(giftWrapSku, 1, addedItems));

    return order;
  }
 protected int findProductPositionInList(Product product, List<Product> products) {
   for (int i = 0; i < products.size(); i++) {
     Product currentProduct = products.get(i);
     if (product.getId().equals(currentProduct.getId())) {
       return i + 1;
     }
   }
   return 0;
 }
 public DiscreteOrderItemRequest createDiscreteOrderItemRequest(Sku sku, int quantity) {
   Product product = sku.getAllParentProducts().get(0);
   DiscreteOrderItemRequest request = new DiscreteOrderItemRequest();
   request.setSku(sku);
   request.setQuantity(quantity);
   request.setProduct(product);
   request.setCategory(product.getDefaultCategory());
   return request;
 }
  private void populateProducts(List<Product> productList, Category currentCategory) {

    for (FeaturedProduct featuredProduct : currentCategory.getFeaturedProducts()) {
      for (Product product : productList) {
        if ((product.equals(featuredProduct.getProduct()))) {
          product.setPromoMessage(featuredProduct.getPromotionMessage());
        }
      }
    }
  }
  public GiftWrapOrderItemRequest createGiftWrapOrderItemRequest(
      Sku sku, int quantity, List<OrderItem> wrappedItems) {
    Product product = sku.getAllParentProducts().get(0);
    GiftWrapOrderItemRequest request = new GiftWrapOrderItemRequest();
    request.setSku(sku);
    request.setQuantity(quantity);
    request.setProduct(product);
    request.setCategory(product.getDefaultCategory());
    request.setWrappedItems(wrappedItems);

    return request;
  }
  public Order setUpNamedOrder() throws PricingException {
    Customer customer = customerService.saveCustomer(createNamedCustomer());

    Sku newSku = addTestSku("Small Cube Box", "Cube Box", "Boxes");

    Order order = orderService.createNamedOrderForCustomer("Boxes Named Order", customer);

    Product newProduct = newSku.getAllParentProducts().get(0);
    Category newCategory = newProduct.getDefaultCategory();

    orderService.addSkuToOrder(
        order.getId(), newSku.getId(), newProduct.getId(), newCategory.getId(), 2);

    return order;
  }
  public Order setUpExistingCart(Customer customer) throws PricingException {
    Sku newSku = addTestSku("Large Plastic Crate", "Plastic Crate", "Crates");
    Sku newOtherSku = addTestSku("Large Red Plastic Crate", "Plastic Crate", "Crates");

    Product newProduct = newSku.getAllParentProducts().get(0);
    Category newCategory = newProduct.getDefaultCategory();

    Order order = cartService.createNewCartForCustomer(customer);

    orderService.addSkuToOrder(
        order.getId(), newSku.getId(), newProduct.getId(), newCategory.getId(), 2);
    orderService.addSkuToOrder(
        order.getId(), newOtherSku.getId(), newProduct.getId(), newCategory.getId(), 2);

    return order;
  }
Beispiel #9
0
 /*
  * The Heat Clinic does not support adding products with required product options from a category browse page
  * when JavaScript is disabled. When this occurs, we will redirect the user to the full product details page
  * for the given product so that the required options may be chosen.
  */
 @RequestMapping(
     value = "/add",
     produces = {"text/html", "*/*"})
 public String add(
     HttpServletRequest request,
     HttpServletResponse response,
     Model model,
     RedirectAttributes redirectAttributes,
     @ModelAttribute("addToCartItem") AddToCartItem addToCartItem)
     throws IOException, PricingException, AddToCartException {
   try {
     return super.add(request, response, model, addToCartItem);
   } catch (AddToCartException e) {
     Product product = catalogService.findProductById(addToCartItem.getProductId());
     return "redirect:" + product.getUrl();
   }
 }
  public Order setUpExistingCartWithInactiveSkuAndInactiveBundle(Customer customer)
      throws PricingException {
    Sku newSku = addTestSku("Large Plastic Crate", "Plastic Crate", "Crates");
    Sku newInactiveSku = addTestSku("Large Red Plastic Crate", "Plastic Crate", "Crates", false);

    Product newProduct = newSku.getAllParentProducts().get(0);
    Category newCategory = newProduct.getDefaultCategory();

    Order order = cartService.createNewCartForCustomer(customer);

    orderService.addSkuToOrder(
        order.getId(), newSku.getId(), newProduct.getId(), newCategory.getId(), 2);
    orderService.addSkuToOrder(
        order.getId(), newInactiveSku.getId(), newProduct.getId(), newCategory.getId(), 2);

    orderService.addBundleItemToOrder(order, createBundleOrderItemRequest());
    orderService.addBundleItemToOrder(order, createBundleOrderItemRequestWithInactiveSku());

    return order;
  }
  public Order setUpAnonymousCartWithBundleGiftWrapReferringToRootItems() throws PricingException {
    Customer customer = customerService.saveCustomer(createNamedCustomer());

    Order order = cartService.createNewCartForCustomer(customer);

    Sku newSku = addTestSku("Small Plastic Bowl", "Plastic Bowl", "Bowls");
    Sku newActiveSku = addTestSku("Small Red Plastic Bowl", "Plastic Bowl", "Bowls");

    Product newProduct = newSku.getAllParentProducts().get(0);
    Category newCategory = newProduct.getDefaultCategory();

    List<OrderItem> addedItems = new ArrayList<OrderItem>();
    addedItems.add(
        orderService.addSkuToOrder(
            order.getId(), newSku.getId(), newProduct.getId(), newCategory.getId(), 2));
    addedItems.add(
        orderService.addSkuToOrder(
            order.getId(), newActiveSku.getId(), newProduct.getId(), newCategory.getId(), 2));

    BundleOrderItem newBundle =
        (BundleOrderItem)
            orderService.addBundleItemToOrder(order, createBundleOrderItemRequestWithGiftWrap());
    GiftWrapOrderItem giftItem = null;
    for (DiscreteOrderItem addedItem : newBundle.getDiscreteOrderItems()) {
      if (addedItem instanceof GiftWrapOrderItem) {
        giftItem = (GiftWrapOrderItem) addedItem;
      }
    }
    for (OrderItem addedItem : addedItems) {
      addedItem.setGiftWrapOrderItem(giftItem);
    }
    giftItem.getWrappedItems().addAll(addedItems);
    order = orderService.save(order, false);

    return order;
  }
 protected boolean itemMatches(
     Sku item1Sku,
     Product item1Product,
     Map<String, OrderItemAttribute> item1Attributes,
     OrderItemRequestDTO item2) {
   // Must match on SKU and options
   if (item1Sku != null && item2.getSkuId() != null) {
     if (item1Sku.getId().equals(item2.getSkuId())) {
       return true;
     }
   } else {
     if (item1Product != null && item2.getProductId() != null) {
       if (item1Product.getId().equals(item2.getProductId())) {
         return compareAttributes(item1Attributes, item2);
       }
     }
   }
   return false;
 }
  /*
   * This controller method is for demonstration purposes only. It contains a call to
   * catalogService.findActiveProductsByCategory, which may return a large list. A
   * more performant solution would be to utilize data paging techniques.
   */
  protected boolean validateProductAndAddToModel(Product product, ModelMap model) {
    Category currentCategory = (Category) model.get("currentCategory");
    Category rootCategory = (Category) model.get("rootCategory");
    int productPosition = 0;

    List<Product> productList =
        catalogService.findActiveProductsByCategory(currentCategory, SystemTime.asDate());
    if (productList != null) {
      populateProducts(productList, currentCategory);
      model.addAttribute("products", productList);
    }
    productPosition = findProductPositionInList(product, productList);
    if (productPosition == 0) {
      // look for product in its default category and override category from request URL
      currentCategory = product.getDefaultCategory();
      if (currentCategory.isActive()) {
        model.put("currentCategory", currentCategory);
        productList =
            catalogService.findActiveProductsByCategory(currentCategory, SystemTime.asDate());
        if (productList != null) {
          model.put("currentProducts", productList);
        }
        String url = currentCategory.getGeneratedUrl();

        // override category list settings using this products default
        List<Long> categoryIdList =
            catalogService.getChildCategoryURLMapByCategoryId(rootCategory.getId()).get(url);
        List<Category> categoryList = null;
        if (categoryIdList != null) {
          categoryList = new ArrayList<Category>(categoryIdList.size());
          for (Long id : categoryIdList) {
            categoryList.add(catalogService.findCategoryById(id));
          }
        }
        if (categoryList != null
            && !addCategoryListToModel(categoryList, rootCategory, url, model)) {
          productPosition = findProductPositionInList(product, productList);
        }
      }
    }

    if (productPosition != 0) {
      model.addAttribute("productError", false);
      model.addAttribute("currentProduct", product);
      model.addAttribute("productPosition", productPosition);
      if (productPosition != 1) {
        model.addAttribute("previousProduct", productList.get(productPosition - 2));
      }
      if (productPosition < productList.size()) {
        model.addAttribute("nextProduct", productList.get(productPosition));
      }
      model.addAttribute("totalProducts", productList.size());
    } else {
      model.addAttribute("productError", true);
    }

    WishlistRequest wishlistRequest = new WishlistRequest();
    wishlistRequest.setAddCategoryId(currentCategory.getId());
    wishlistRequest.setAddProductId(product.getId());
    wishlistRequest.setQuantity(1);
    wishlistRequest.setAddSkuId(((ProductSku) product).getSku().getId());
    model.addAttribute("wishlistRequest", wishlistRequest);

    return (productPosition != 0);
  }