MapView.java 2.4 KB
package fi.codecrew.moya.web.cdiview.map;

import java.math.BigDecimal;

import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Named;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.beans.PlaceBeanLocal;
import fi.codecrew.moya.enums.apps.MapPermission;
import fi.codecrew.moya.model.EventMap;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.web.annotations.SelectedUser;
import fi.codecrew.moya.web.cdiview.GenericCDIView;

@Named
@RequestScoped
public class MapView extends GenericCDIView {

	private static final long serialVersionUID = 2374905512998240551L;

	@Inject
	@SelectedUser
	private EventUser user;

	private EventMap activeMap;

	@EJB
	private transient PlaceBeanLocal placeBean;
	@EJB
	private transient EventBeanLocal eventBean;
	private BigDecimal balance;

	private static final Logger logger = LoggerFactory.getLogger(MapView.class);

	public void initViewMap()
	{
		super.requirePermissions(MapPermission.VIEW);
	}

	public boolean canView() {
		return permbean.hasPermission(MapPermission.VIEW);
	}

	public boolean canUserBuy() {
		if (user == null) {
			return false;
		}
		return getAccountBalance().compareTo(BigDecimal.ZERO) > 0;
	}

	public BigDecimal getAccountBalance()
	{
		if (balance == null)
		{
			balance = user.getAccountBalance();
		}
		return balance;
	}

	public BigDecimal getReservationPrice() {
		BigDecimal ret = null;
		if (permbean.isCurrentUser(user))
			ret = placeBean.getTotalReservationPrice(null);
		else {
			ret = placeBean.getTotalReservationPrice(user, null);
		}
		return ret;

	}

	public Long getPlacesLeftToSelect() {
		Long ret = placeBean.selectablePlaceCount(getActiveMap());
		logger.debug("Got {} places left for map {}", ret, getActiveMap());

		return ret;
	}

	public Long getAvailablePlaces()
	{

		Long ret = placeBean.availablePlaceCount(getActiveMap());

		logger.debug("Got {} availbale places for map {}", ret, getActiveMap());
		return ret;

	}

	@Produces
	public EventMap getActiveMap() {
		if (activeMap == null) {
			activeMap = placeBean.getActiveMap();
		}

		return activeMap;
	}

	public void setActiveMap(EventMap activeMap) {
		this.activeMap = activeMap;
	}

	public void setUser(EventUser user) {
		this.user = user;
	}

	public EventUser getUser() {
		return user;
	}
}