package fr.cvf.vodoo.zne.web.controller.page; import fr.cvf.pgc.dao.DAOException; import fr.cvf.vodoo.ihm.zne.ajax.dto.AbstractBclMenuItem; import fr.cvf.vodoo.ihm.zne.ajax.dto.MovieInfosBean; import fr.cvf.vodoo.ihm.zne.ajax.dto.MovieInfosBeanFactory; import fr.cvf.vodoo.ihm.zne.ajax.dto.PaymentModeBclMenuItem; import fr.cvf.vodoo.ihm.zne.domain.service.BasketService; import fr.cvf.vodoo.ihm.zne.domain.service.payment.IPaymentStrategyFactory; import fr.cvf.vodoo.pgc.facade.Movie; import fr.cvf.vodoo.pgc.facade.User; import fr.cvf.vodoo.pgc.facade.impl.basket.PaymentMethod; import fr.cvf.vodoo.zne.web.bean.PaymentModeResult; import fr.cvf.vodoo.zne.web.security.CheckSession; import fr.cvf.vodoo.zne.web.service.ZneUrlFactory; import fr.cvf.vodoo.zne.web.session.Visit; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONArray; import org.springframework.beans.factory.annotation.Required; import org.springframework.validation.BindException; import org.springframework.validation.Errors; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.SimpleFormController; /** * @author ecruciani */ @CheckSession public class PaymentChoiceController extends SimpleFormController { /** Movie infos bean Factory */ private MovieInfosBeanFactory movieInfosBeanFactory; /** Payment Strategy Factory */ private IPaymentStrategyFactory paymentStrategyFactory; /** Basket Service */ private BasketService basketService; /** User vist */ private Visit visit; /** ZneUrlFactory*/ private ZneUrlFactory zneUrlFactory; /** * indique si l'utilisateur peut passer la phase de paiement * @param user * @return * @throws DAOException */ private boolean isFreePaymentApplicable() throws DAOException { boolean freePaymentApplicable = false; User user = visit.getUser(); if (user.isWhiteUser() ) { if ((user.isDemoUser() && user.isDemoUserUnderCeiling()) || user.isTestUser()) { freePaymentApplicable = true; } } return freePaymentApplicable; } /** * (non-Javadoc) * * @see org.springframework.web.servlet.mvc.SimpleFormController#showForm(javax.servlet.http.HttpServletRequest, * javax.servlet.http.HttpServletResponse, org.springframework.validation.BindException, * java.util.Map) */ @Override protected ModelAndView showForm(HttpServletRequest request, HttpServletResponse response, BindException errors, Map controlModel) throws Exception { Movie m = this.basketService.getMovie(); // only display form is price > 0, otherwise confirm directly if (m.getLowestPrice() == 0) { return goConfirmationWithPayment(PaymentType.FREE_ITEM); } else if(isFreePaymentApplicable()) { return goConfirmationWithPayment(PaymentType.FREE); } else { return goConfirmationWithPayment(PaymentType.WPMS); } //return super.showForm(request, response, errors, controlModel); } /** * @param paymentMode * @return */ private ModelAndView goConfirmationWithPayment(PaymentType paymentMode) { PaymentMethod payment = this.paymentStrategyFactory.createPaymentStrategy(paymentMode).choosePaymentMode(); this.visit.getBasket().setPrimaryPaymentMethod(payment); return new ModelAndView("redirect:/paymentConfirmation.do", new HashMap()); } /** * @see org.springframework.web.servlet.mvc.SimpleFormController#onSubmit(java.lang.Object) */ @Override protected ModelAndView onSubmit(Object commandObject) throws Exception { PaymentModeResult paymentModeResult = (PaymentModeResult) commandObject; if (this.logger.isDebugEnabled()) { this.logger.debug("paymentModeResult : " + paymentModeResult.toString()); this.logger.debug("Visit is null ? " + (this.visit == null)); this.logger.debug("user is null ?: " + (this.visit.getUser() == null)); } return goConfirmationWithPayment(paymentModeResult.getPaymentMode()); } /** * @see org.springframework.web.servlet.mvc.AbstractFormController#formBackingObject(javax.servlet.http.HttpServletRequest) */ @Override protected Object formBackingObject(HttpServletRequest request) throws Exception { this.logger.debug("formBackingObject() return new PaymentModeResult "); return new PaymentModeResult(); } /** * initailisation de la vue * * @see org.springframework.web.servlet.mvc.SimpleFormController#referenceData(javax.servlet.http.HttpServletRequest, * java.lang.Object, org.springframework.validation.Errors) */ @Override protected Map referenceData(HttpServletRequest request, Object commandObject, Errors errors) throws Exception { Map model = new HashMap(); String jsonItems = buildMenuItems(request).toString(); model.put("jsonItems", jsonItems); int marqueurFilm = this.basketService.getMovie().getMarqueur(); int marqueurOrigine = this.basketService.getOrigine().getMarqueur(); MovieInfosBean movieInfosBean = this.movieInfosBeanFactory.createMovieInfosBean(marqueurFilm, marqueurOrigine); model.put("backUrl", this.zneUrlFactory.buildMovieUrl()); model.put("movieInfosBean", movieInfosBean); return model; } /** * @param request * @return */ private JSONArray buildMenuItems(HttpServletRequest request) { List items = new ArrayList(); items.add(new PaymentModeBclMenuItem("facture Orange", PaymentType.WPMS)); items.add(new PaymentModeBclMenuItem("code cadeau", PaymentType.OTA)); return JSONArray.fromObject(items); } /** * @param movieInfosBeanFactory */ @Required public void setMovieInfosBeanFactory(MovieInfosBeanFactory movieInfosBeanFactory) { this.movieInfosBeanFactory = movieInfosBeanFactory; } /** * @param paymentStrategyFactory */ @Required public void setPaymentStrategyFactory(IPaymentStrategyFactory paymentStrategyFactory) { this.paymentStrategyFactory = paymentStrategyFactory; } /** * @param basketService */ @Required public void setBasketService(BasketService basketService) { this.basketService = basketService; } /** * @param visit */ @Required public void setVisit(Visit visit) { this.visit = visit; } @Required public void setZneUrlFactory(ZneUrlFactory zneUrlFactory) { this.zneUrlFactory = zneUrlFactory; } }