/* * [y] hybris Platform * * Copyright (c) 2000-2015 hybris AG * All rights reserved. * * This software is the confidential and proprietary information of hybris * ("Confidential Information"). You shall not disclose such Confidential * Information and shall use it only in accordance with the terms of the * license agreement you entered into with hybris. * * */ package de.hybris.merchandise.storefront.controllers.pages; import de.hybris.merchandise.core.voucher.VoucherCodeResult; import de.hybris.merchandise.facades.order.MerchandiseCartFacade; import de.hybris.merchandise.storefront.controllers.ControllerConstants; import de.hybris.platform.acceleratorfacades.flow.impl.SessionOverrideCheckoutFlowFacade; import de.hybris.platform.acceleratorservices.controllers.page.PageType; import de.hybris.platform.acceleratorservices.enums.CheckoutFlowEnum; import de.hybris.platform.acceleratorservices.enums.CheckoutPciOptionEnum; import de.hybris.platform.acceleratorstorefrontcommons.annotations.RequireHardLogIn; import de.hybris.platform.acceleratorstorefrontcommons.breadcrumb.ResourceBreadcrumbBuilder; import de.hybris.platform.acceleratorstorefrontcommons.constants.WebConstants; import de.hybris.platform.acceleratorstorefrontcommons.controllers.pages.AbstractCartPageController; import de.hybris.platform.acceleratorstorefrontcommons.controllers.util.GlobalMessages; import de.hybris.platform.acceleratorstorefrontcommons.forms.UpdateQuantityForm; import de.hybris.platform.cms2.exceptions.CMSItemNotFoundException; import de.hybris.platform.commercefacades.order.data.CartData; import de.hybris.platform.commercefacades.order.data.CartModificationData; import de.hybris.platform.commercefacades.order.data.OrderEntryData; import de.hybris.platform.commercefacades.product.ProductFacade; import de.hybris.platform.commercefacades.product.ProductOption; import de.hybris.platform.commercefacades.product.data.ProductData; import de.hybris.platform.commerceservices.order.CommerceCartModificationException; import de.hybris.platform.enumeration.EnumerationService; import de.hybris.platform.order.exceptions.CalculationException; import java.util.Arrays; import java.util.Collections; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.ObjectError; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.mvc.support.RedirectAttributes; /** * Controller for cart page. */ @Controller @Scope("tenant") @RequestMapping(value = "/cart") public class CartPageController extends AbstractCartPageController { /** * Redeem voucher code. * * @param model * the model * @param voucherCode * the voucher code * @param redirectModel * the redirect model * @return the string * @throws CMSItemNotFoundException * the CMS item not found exception * @throws CommerceCartModificationException * the commerce cart modification exception * @throws CalculationException * the calculation exception */ @RequestMapping(value = "/redeemVoucherCode", method = RequestMethod.POST) public String redeemVoucherCode(final Model model, @RequestParam("voucherCode") final String voucherCode, final RedirectAttributes redirectModel) throws CMSItemNotFoundException, CommerceCartModificationException, CalculationException { if (StringUtils.isEmpty(voucherCode)) { redirectModel.addFlashAttribute("errorMessageKeys", Collections.singleton("basket.vouchercode.required")); } else { final VoucherCodeResult voucherCodeResult = cartFacade.applyVoucherCode(voucherCode); model.addAttribute("voucherCodeResult", voucherCodeResult); if (!voucherCodeResult.isApplied()) { redirectModel.addFlashAttribute("errorMessageKeys", Collections.singleton(voucherCodeResult.getRejectMessage())); } else { redirectModel.addFlashAttribute("infoMessageKeys", Collections.singleton("basket.vouchercode.added")); redirectModel.addFlashAttribute("voucherCode", voucherCode); } } prepareDataForPage(model); return REDIRECT_PREFIX + "/cart"; } /** * Release voucher code. * * @param model * the model * @param voucherCode * the voucher code * @param redirectModel * the redirect model * @return the string * @throws CMSItemNotFoundException * the CMS item not found exception * @throws CommerceCartModificationException * the commerce cart modification exception */ @RequestMapping(value = "/releaseVoucherCode", method = RequestMethod.POST) public String releaseVoucherCode(final Model model, @RequestParam("voucherCode") final String voucherCode, final RedirectAttributes redirectModel) throws CMSItemNotFoundException, CommerceCartModificationException { final boolean releasedVoucherCode = cartFacade.releaseVoucherCode(voucherCode); if (!releasedVoucherCode) { redirectModel.addFlashAttribute("errorMessageKeys", Collections.singleton("basket.vouchercode.notreleased")); } else { redirectModel.addFlashAttribute("infoMessageKeys", Collections.singleton("basket.vouchercode.released")); } redirectModel.addFlashAttribute("releasedVoucherCode", releasedVoucherCode); prepareDataForPage(model); return REDIRECT_PREFIX + "/cart"; } }