VipBean.java 3.14 KB
package fi.codecrew.moya.beans;

import fi.codecrew.moya.enums.apps.VipPermission;
import fi.codecrew.moya.facade.VipFacade;
import fi.codecrew.moya.facade.VipProductDeliveryFacade;
import fi.codecrew.moya.facade.VipProductFacade;
import fi.codecrew.moya.model.Vip;
import fi.codecrew.moya.model.VipProduct;
import fi.codecrew.moya.model.VipProductDelivery;
import fi.codecrew.moya.utilities.SearchQuery;
import fi.codecrew.moya.utilities.SearchResult;
import fi.codecrew.moya.utilities.jpa.GenericFacade;

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

import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

@Stateless
@LocalBean
@DeclareRoles({
		VipPermission.S_VIEW,
		VipPermission.S_USAGE,
		VipPermission.S_EDIT
})
public class VipBean implements VipBeanLocal {

	private static final Logger log = LoggerFactory.getLogger(VipBean.class);

	//@EJB
	//private PermissionBeanLocal permissionBean;
	@EJB
	private VipFacade vipFacade;

	@EJB
	private PermissionBeanLocal permbean;

	@EJB
	private EventBeanLocal eventbean;
	@EJB
	private VipProductFacade vipProductFacade;
	@EJB
	private VipProductDeliveryFacade vpdFacade;

	@Override
	@RolesAllowed({ VipPermission.S_VIEW })
	public List<Vip> getAvailableVips() {
		return vipFacade.findForEvent();
	}

	@Override
	public void create(Vip vip) {
		vip.setCreated(new Date());
		vip.setCreator(permbean.getCurrentUser());
		vip.setEvent(eventbean.getCurrentEvent());
		if (vip.getHost() == null) {
			vip.setHost(vip.getCreator());
		}
		vipFacade.create(vip);

	}

	@Override
	public void delete(Vip vip) {
		vip = vipFacade.merge(vip);
		vipFacade.remove(vip);
	}

	@Override
	public Vip find(Integer id) {
		return vipFacade.find(id);
	}

	//	@Override
	//	public SearchResult<Vip> search(SearchQuery sq) {
	//		// TODO Auto-generated method stub
	//		return null;
	//	}

	@Override
	public Vip createProduct(VipProduct l) {
		Vip vip = vipFacade.reload(l.getVip());
		l.setVip(vip);
		if (!vip.getProducts().contains(l))
			vip.getProducts().add(0, l);

		vipProductFacade.create(l);

		return vip;
	}

	@Override
	public SearchResult<Vip> search(SearchQuery sq) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Vip save(Vip vip) {
		return vipFacade.merge(vip);
	}

	@Override
	public Vip saveProduct(VipProduct prod) {
		VipProduct ret = vipProductFacade.merge(prod);
		return ret.getVip();
	}

	@Override
	public Vip deleteProduct(VipProduct l) {
		l = vipProductFacade.reload(l);
		Vip vip = l.getVip();
		vip.getProducts().remove(l);
		vipProductFacade.remove(l);
		return vip;
	}

	@Override
	public VipProductDelivery createDelivery(VipProduct prod, BigDecimal quantity, String notes) {
		prod = vipProductFacade.reload(prod);

		VipProductDelivery vpd = new VipProductDelivery();
		vpd.setVipProduct(prod);

		vpd.setDeliverer(permbean.getCurrentUser());
		vpd.setNotes(notes);
		vpd.setDeliveryTime(new Date());
		vpd.setQuantity(quantity);

		vpdFacade.create(vpd);
		prod.getDeliveries().add(vpd);

		return vpd;
	}
}