@RequestMapping(value = "/cart/add", method = RequestMethod.POST, produces = "application/json")
  public String addToCart(
      @RequestParam("productCodePost") final String code,
      final Model model,
      @Valid final AddToCartForm form,
      final BindingResult bindingErrors) {
    if (bindingErrors.hasErrors()) {
      return getViewWithBindingErrorMessages(model, bindingErrors);
    }

    final long qty = form.getQty();

    if (qty <= 0) {
      model.addAttribute(ERROR_MSG_TYPE, "basket.error.quantity.invalid");
      model.addAttribute("quantity", Long.valueOf(0L));
    } else {
      try {
        final CartModificationData cartModification = cartFacade.addToCart(code, qty);
        model.addAttribute("quantity", Long.valueOf(cartModification.getQuantityAdded()));
        model.addAttribute("entry", cartModification.getEntry());
        model.addAttribute("cartCode", cartModification.getCartCode());

        if (cartModification.getQuantityAdded() == 0L) {
          model.addAttribute(
              ERROR_MSG_TYPE,
              "basket.information.quantity.noItemsAdded." + cartModification.getStatusCode());
        } else if (cartModification.getQuantityAdded() < qty) {
          model.addAttribute(
              ERROR_MSG_TYPE,
              "basket.information.quantity.reducedNumberOfItemsAdded."
                  + cartModification.getStatusCode());
        }
      } catch (final CommerceCartModificationException ex) {
        model.addAttribute(ERROR_MSG_TYPE, "basket.error.occurred");
        model.addAttribute("quantity", Long.valueOf(0L));
      }
    }

    model.addAttribute(
        "product",
        productFacade.getProductForCodeAndOptions(code, Arrays.asList(ProductOption.BASIC)));

    return ControllerConstants.Views.Fragments.Cart.AddToCartPopup;
  }