rendered paste bodypackage 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<String, Object>());
}
/**
* @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<String, Object> referenceData(HttpServletRequest request, Object commandObject, Errors errors)
throws Exception {
Map<String, Object> model = new HashMap<String, Object>();
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<AbstractBclMenuItem> items = new ArrayList<AbstractBclMenuItem>();
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;
}
}
<!-- VOD_PAY_LS001 -->
<bean name="/paymentChoice.do" class="fr.cvf.vodoo.zne.web.controller.page.PaymentChoiceController" >
<property name="formView" value="VOD_PAY_LS001"/>
<property name="commandName" value="paymentModeResult"/>
<property name="commandClass" value="fr.cvf.vodoo.zne.web.bean.PaymentModeResult"/>
<property name="movieInfosBeanFactory" ref="movieInfosBeanFactory"/>
<property name="paymentStrategyFactory" ref="paymentStrategyFactory"/>
<property name="basketService" ref="basketService"/>
<property name="zneUrlFactory" ref="zneUrlFactory"/>
<property name="visit" ref="visit"/>
</bean>