Commit 4e4b9d82 by Tuomas Riihimäki

Foodwavea.

1 parent 20c3a322
package fi.insomnia.bortal.beans;
import java.util.List;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.facade.FoodWaveTemplateFacade;
import fi.insomnia.bortal.model.FoodWaveTemplate;
......@@ -12,29 +15,23 @@ import fi.insomnia.bortal.model.FoodWaveTemplate;
* Session Bean implementation class FoodWaveBean
*/
@Stateless
@DeclareRoles("SHOP/WRITE")
@DeclareRoles(ShopPermission.S_MANAGE_PRODUCTS)
public class FoodWaveBean implements FoodWaveBeanLocal {
@EJB
private FoodWaveTemplateFacade fwtFacade;
/**
* Default constructor.
*/
public FoodWaveBean() {
// TODO Auto-generated constructor stub
}
@Override
@RolesAllowed("SHOP/WRITE")
public void createTemplate(FoodWaveTemplate waveTemplate) {
fwtFacade.create(waveTemplate);
@RolesAllowed(ShopPermission.S_MANAGE_PRODUCTS)
public List<FoodWaveTemplate> getTemplates() {
return fwtFacade.findAllTemplates();
}
@Override
@RolesAllowed("SHOP/WRITE")
public FoodWaveTemplate saveTemplate(FoodWaveTemplate waveTemplate) {
return fwtFacade.merge(waveTemplate);
@RolesAllowed(ShopPermission.S_MANAGE_PRODUCTS)
public FoodWaveTemplate saveOrCreateTemplate(FoodWaveTemplate template) {
// TODO Auto-generated method stub
return null;
}
}
......@@ -5,6 +5,7 @@ import java.security.Principal;
import javax.annotation.Resource;
import javax.annotation.security.DeclareRoles;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.resource.spi.IllegalStateException;
......@@ -56,6 +57,7 @@ import fi.insomnia.bortal.model.User;
ShopPermission.S_SHOP_TO_OTHERS,
ShopPermission.S_MANAGE_PRODUCTS,
ShopPermission.S_SHOP_PRODUCTS,
ShopPermission.S_SHOP_FOODWAVE,
BillPermission.S_CREATE_BILL,
BillPermission.S_READ_ALL,
......@@ -88,6 +90,7 @@ import fi.insomnia.bortal.model.User;
EventPermission.S_MANAGE_PROPERTIES,
})
@LocalBean
public class PermissionBean implements PermissionBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(PermissionBean.class);
......
......@@ -25,6 +25,7 @@ public class ProductPBean {
@EJB
private PermissionBean permbean;
@EJB
private AccountEventFacade accounteventfacade;
/**
......
package fi.insomnia.bortal.facade;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBean;
import fi.insomnia.bortal.model.FoodWaveTemplate;
import fi.insomnia.bortal.model.FoodWaveTemplate_;
@Stateless
@LocalBean
public class FoodWaveTemplateFacade extends IntegerPkGenericFacade<FoodWaveTemplate> {
@EJB
private EventBean eventbean;
public FoodWaveTemplateFacade() {
super(FoodWaveTemplate.class);
}
public List<FoodWaveTemplate> findAllTemplates() {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<FoodWaveTemplate> cq = cb.createQuery(FoodWaveTemplate.class);
Root<FoodWaveTemplate> root = cq.from(FoodWaveTemplate.class);
cb.equal(root.get(FoodWaveTemplate_.event), eventbean.getCurrentEvent());
return getEm().createQuery(cq).getResultList();
}
}
package fi.insomnia.bortal.beans;
import java.util.List;
import javax.ejb.Local;
import fi.insomnia.bortal.model.FoodWave;
import fi.insomnia.bortal.model.FoodWaveTemplate;
@Local
public interface FoodWaveBeanLocal {
void createTemplate(FoodWaveTemplate waveTemplate);
List<FoodWaveTemplate> getTemplates();
FoodWaveTemplate saveOrCreateTemplate(FoodWaveTemplate template);
List<FoodWave> findShoppableFoodwaves();
FoodWaveTemplate saveTemplate(FoodWaveTemplate waveTemplate);
FoodWave findFoodwave(Integer foodwaveId);
}
......@@ -2,7 +2,7 @@ package fi.insomnia.bortal.model;
public enum ProductFlag {
FOODWAVE_ITEM,
// FOODWAVE_ITEM, Äy... Ei kai tämän täällä tarvitse olla....
PREPAID_CREDIT,
CREATE_NEW_PLACE_WHEN_BOUGHT,
RESERVE_PLACE_WHEN_BOUGHT,
......
......@@ -9,6 +9,7 @@ public enum ShopPermission implements IAppPermission {
SHOP_TO_OTHERS, // ("Shop to other users"),
SHOP_PRODUCTS, // ("Shop products to self"),
MANAGE_PRODUCTS, // ("Create and modify products"),
SHOP_FOODWAVE, // Shop for food
;
......@@ -17,6 +18,7 @@ public enum ShopPermission implements IAppPermission {
public static final String S_SHOP_TO_OTHERS = "SHOP/SHOP_TO_OTHERS";
public static final String S_SHOP_PRODUCTS = "SHOP/SHOP_PRODUCTS";
public static final String S_MANAGE_PRODUCTS = "SHOP/MANAGE_PRODUCTS";
public static final String S_SHOP_FOODWAVE = "SHOP/SHOP_FOODWAVE";
private final String fullName;
private final String key;
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:products="http://java.sun.com/jsf/composite/cditools/products" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:event type="preRenderView" listener="#{foodWaveView.initTemplateList()}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['foodwave.template.list.title']}</h1>
</ui:define>
<ui:define name="content">
<h:dataTable var="templ" value="#{foodWaveView.templates}">
<h:column>
<h:outputText value="#{templ.name}" />
</h:column>
<h:column>
<h:link outcome="/foodadmin/editTemplate">
<f:param value="#{templ.id}"/>
</h:link>
</h:column>
</h:dataTable>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:products="http://java.sun.com/jsf/composite/cditools/products" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:event type="preRenderView" listener="#{foodWaveView.initTemplateList()}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['foodwave.template.list.title']}</h1>
</ui:define>
<ui:define name="content">
<h:dataTable var="templ" value="#{foodWaveView.templates}">
<h:column>
<h:outputText value="#{templ.name}" />
</h:column>
<h:column>
<h:link outcome="/foodadmin/editTemplate">
<f:param value="#{templ.id}"/>
</h:link>
</h:column>
</h:dataTable>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -15,8 +15,6 @@
<ui:define name="content">
<h1>#{i18n['editplace.header']}</h1>
<h1>edit:</h1>
<h:form id="placeEdit">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['place.name']}:" />
......@@ -127,7 +125,7 @@
<h:outputLabel value="#{i18n['placegroup.creator']}" />
<h:link outcome="/useradmin/edit" value="#{placeView.place.group.creator.wholeName}" >
<f:param name="userid" value="#{placeView.place.group.creator.id}"/>
<f:param name="userid" value="#{placeView.place.group.creator.user.id}"/>
</h:link>
</h:panelGrid>
......
......@@ -330,6 +330,7 @@ permissiondenied.alreadyLoggedIn = You don't have enough rights
permissiondenied.header = Access denied
permissiondenied.notLoggedIn = You don't have enough rights to enter this site.
place.buyable = Buyable
place.code = Placecode
place.commit = Save
place.description = Description
......@@ -363,6 +364,7 @@ placegroup.details = Details
placegroup.edit = Show
placegroup.edited = Edited
placegroup.name = Name
placegroup.placename = Place
placegroup.places = Places
placegroup.printPdf = Print placecodes
......
......@@ -317,6 +317,7 @@ permissiondenied.alreadyLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksi
permissiondenied.header = P\u00E4\u00E4sy kielletty
permissiondenied.notLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia t\u00E4lle sivulle.
place.buyable = Ostettavissa
place.code = Paikkakoodi
place.commit = Tallenna
place.description = Kuvaus
......@@ -352,6 +353,7 @@ placegroup.details = Tiedot
placegroup.edit = N\u00E4yt\u00E4
placegroup.edited = Muokattu
placegroup.name = Nimi
placegroup.placename = Paikka
placegroup.places = Paikat
placegroup.printPdf = Tulosta paikkakoodit
......
package fi.insomnia.bortal.web.cdiview.shop;
import java.math.BigDecimal;
import java.util.Iterator;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.BillBeanLocal;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.ProductBeanLocal;
import fi.insomnia.bortal.beans.FoodWaveBeanLocal;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.ProductFlag;
import fi.insomnia.bortal.model.FoodWave;
import fi.insomnia.bortal.web.annotations.SelectedUser;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
import fi.insomnia.bortal.web.helpers.ProductShopItem;
@Named
@ConversationScoped
public class FoodShopView extends GenericCDIView {
private static final Logger logger = LoggerFactory.getLogger(FoodShopView.class);
/**
*
*/
private static final long serialVersionUID = 1288114954999406683L;
@EJB
private transient ProductBeanLocal productBean;
@EJB
private transient BillBeanLocal billbean;
@EJB
private transient EventBeanLocal eventbean;
private static final long serialVersionUID = 1288114954999406683L;
@Inject
@SelectedUser
private EventUser user;
private boolean payInstant;
private BigDecimal cash = BigDecimal.ZERO;
private transient ListDataModel<ProductShopItem> shoppingcart;
@Inject
private BillListView billListView;
@Inject
private BillReviewView billReviewView;
public void initBillView()
{
if (requirePermissions(ShopPermission.LIST_USERPRODUCTS) && shoppingcart == null) {
shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productList(productBean.listUserShoppableProducts()));
logger.debug("Initialized billing shoppingcart to {}", shoppingcart);
this.beginConversation();
}
}
public void initShopView() {
@EJB
private FoodWaveBeanLocal foodwavebean;
if (requirePermissions(ShopPermission.SHOP_TO_OTHERS) && shoppingcart == null) {
shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productGTList(productBean.findProductsByFlag(ProductFlag.FOODWAVE_ITEM)));
logger.debug("Initialized shoppingcart to {}", shoppingcart);
this.beginConversation();
}
private List<FoodWave> foodwaves;
private Integer foodwaveId;
private FoodWave foodwave;
}
public String add(Integer count)
public void initFoodwaves()
{
ProductShopItem item = shoppingcart.getRowData();
item.setCount(item.getCount().add(BigDecimal.valueOf(count)));
return null;
}
public BigDecimal getAccountBalance()
{
BigDecimal ret = user.getAccountBalance();
ret = ret.add(getCash());
ret = ret.subtract(getTotalPrice());
logger.info("User accountbalance {}, cash{}, total {}. retBalance {}", new Object[] {
user.getAccountBalance(), getCash(), getTotalPrice(), ret
});
return ret;
}
public BigDecimal getTotalPrice()
{
BigDecimal ret = BigDecimal.ZERO;
for (ProductShopItem cart : shoppingcart)
if (super.requirePermissions(ShopPermission.SHOP_FOODWAVE))
{
ret = ret.add(cart.getPrice());
foodwaves = foodwavebean.findShoppableFoodwaves();
}
return ret;
}
public String commitBillCart() {
logger.debug("Committing billCart");
if (!productsInCart()) {
super.addFaceMessage("productshop.noItemsInCart");
return null;
}
Bill bill = new Bill(eventbean.getCurrentEvent(), user);
bill.setOurReference(eventbean.getCurrentEvent().getName());
for (ProductShopItem shopitem : shoppingcart) {
if (shopitem.getCount().compareTo(BigDecimal.ZERO) > 0) {
bill.addProduct(shopitem.getProduct(), shopitem.getCount());
}
}
billbean.createBill(bill);
addFaceMessage("productshop.billCreated");
cash = BigDecimal.ZERO;
shoppingcart = null;
billReviewView.setBill(bill);
return "showCreatedBill";
}
public String commitShoppingCart()
public void initFoodwave()
{
EventUser retuser = null;
for (ProductShopItem shopitem : shoppingcart) {
if (shopitem.getCount().compareTo(BigDecimal.ZERO) > 0) {
retuser = productBean.createAccountEvent(shopitem.getProduct(), shopitem.getCount(), user).getUser();
}
}
if (cash != null && cash.compareTo(BigDecimal.ZERO) != 0)
if (super.requirePermissions(ShopPermission.SHOP_FOODWAVE) && foodwave == null)
{
Product credProd = productBean.findCreditProduct();
retuser = productBean.createAccountEvent(credProd, cash, user).getUser();
foodwave = foodwavebean.findFoodwave(foodwaveId);
super.beginConversation();
}
if (user != null)
{
user = retuser;
}
shoppingcart = null;
cash = BigDecimal.ZERO;
return null;
}
public void setUser(EventUser user) {
this.user = user;
}
public EventUser getUser() {
return user;
}
public void setShoppingcart(ListDataModel<ProductShopItem> shoppingcart) {
this.shoppingcart = shoppingcart;
}
public ListDataModel<ProductShopItem> getShoppingcart() {
return shoppingcart;
}
private boolean productsInCart() {
Iterator<ProductShopItem> nullcheckIter = shoppingcart.iterator();
while (nullcheckIter.hasNext()) {
if (nullcheckIter.next().getCount().compareTo(BigDecimal.ZERO) > 0) {
return true;
}
}
return false;
}
public void setPayInstant(boolean payInstant) {
if (payInstant)
{
getCash();
}
this.payInstant = payInstant;
}
public boolean isPayInstant() {
return payInstant;
}
public BillListView getBillListView() {
return billListView;
}
public void setBillListView(BillListView billListView) {
this.billListView = billListView;
}
public BigDecimal getCash() {
if (payInstant) {
cash = getTotalPrice();
logger.info("Getting instantcash as {}", cash);
}
if (cash == null) {
cash = BigDecimal.ZERO;
}
return cash;
}
public void setCash(BigDecimal cash) {
this.cash = cash;
}
}
package fi.insomnia.bortal.web.cdiview.shop;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Named;
import fi.insomnia.bortal.beans.FoodWaveBeanLocal;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.model.FoodWaveTemplate;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class FoodWaveView extends GenericCDIView {
private static final long serialVersionUID = 7281708393927365603L;
@EJB
private FoodWaveBeanLocal foodwaveBean;
private ListDataModel<FoodWaveTemplate> templates;
private FoodWaveTemplate template;
public void initTemplateList()
{
if (super.requirePermissions(ShopPermission.MANAGE_PRODUCTS))
{
templates = new ListDataModel<FoodWaveTemplate>(foodwaveBean.getTemplates());
super.beginConversation();
}
}
public void initCreateTemplate()
{
if (super.requirePermissions(ShopPermission.MANAGE_PRODUCTS) && getTemplate() == null)
{
setTemplate(new FoodWaveTemplate());
super.beginConversation();
}
}
public String editTemplate()
{
setTemplate(templates.getRowData());
return "/foodadmin/editTemplate";
}
public String saveTemplate()
{
setTemplate(foodwaveBean.saveOrCreateTemplate(getTemplate()));
return null;
}
public FoodWaveTemplate getTemplate() {
return template;
}
public void setTemplate(FoodWaveTemplate template) {
this.template = template;
}
}
......@@ -53,7 +53,7 @@ Huom! Lue komennot läpi ja muokkaa muuttujat sopiviksi!
12. Glassfish Default Principal to Role Mapping
403 asioista, ellei tätä ole ruksittu:
HUOM! 403 asioista, ellei tätä ole ruksittu:
Configurations -> server-config -> Security -> Default Principal To Role Mapping -> Enabled
13. Käynnistä glassfish uudelleen että kaikki asetukset tulevat voimaan...
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!