Commit 89e4394b by Riku Silvola

productflags and foodshop

1 parent a515e62b
...@@ -24,6 +24,7 @@ import fi.insomnia.bortal.model.DiscountInstance; ...@@ -24,6 +24,7 @@ import fi.insomnia.bortal.model.DiscountInstance;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Product; import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.ProductFlag;
/** /**
* Session Bean implementation class ProductBean * Session Bean implementation class ProductBean
...@@ -181,6 +182,11 @@ public class ProductBean implements ProductBeanLocal { ...@@ -181,6 +182,11 @@ public class ProductBean implements ProductBeanLocal {
public List<Product> findForStaffshop() { public List<Product> findForStaffshop() {
return productFacade.findAll(); return productFacade.findAll();
} }
@RolesAllowed(ShopPermission.S_MANAGE_PRODUCTS)
public List<Product> findProductsByFlag(ProductFlag ... productFlags) {
return productFacade.findProductsByFlag(productFlags);
}
@RolesAllowed(ShopPermission.S_MANAGE_PRODUCTS) @RolesAllowed(ShopPermission.S_MANAGE_PRODUCTS)
@Override @Override
......
package fi.insomnia.bortal.facade; package fi.insomnia.bortal.facade;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List; import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
...@@ -12,6 +13,7 @@ import javax.persistence.criteria.Root; ...@@ -12,6 +13,7 @@ import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBeanLocal; import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.Product; import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.ProductFlag;
import fi.insomnia.bortal.model.Product_; import fi.insomnia.bortal.model.Product_;
@Stateless @Stateless
...@@ -51,6 +53,17 @@ public class ProductFacade extends IntegerPkGenericFacade<Product> { ...@@ -51,6 +53,17 @@ public class ProductFacade extends IntegerPkGenericFacade<Product> {
return getEm().createQuery(cq).getResultList(); return getEm().createQuery(cq).getResultList();
} }
public List<Product> findProductsByFlag(ProductFlag ... productFlags) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Product> cq = cb.createQuery(Product.class);
Root<Product> root = cq.from(Product.class);
cq.where(cb.equal(root.get(Product_.event), eventbean.getCurrentEvent()),
root.get(Product_.productFlags).in(Arrays.asList(productFlags)));
return getEm().createQuery(cq).getResultList();
}
public List<Product> findPrepaidProducts() { public List<Product> findPrepaidProducts() {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); CriteriaBuilder cb = getEm().getCriteriaBuilder();
......
...@@ -10,11 +10,15 @@ import fi.insomnia.bortal.model.AccountEvent; ...@@ -10,11 +10,15 @@ import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.Discount; import fi.insomnia.bortal.model.Discount;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.Product; import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.ProductFlag;
import fi.insomnia.bortal.model.Role;
@Local @Local
public interface ProductBeanLocal { public interface ProductBeanLocal {
List<Product> listUserShoppableProducts(); List<Product> listUserShoppableProducts();
List<Product> findProductsByFlag(ProductFlag ... productFlags);
void create(Product prod); void create(Product prod);
...@@ -39,5 +43,5 @@ public interface ProductBeanLocal { ...@@ -39,5 +43,5 @@ public interface ProductBeanLocal {
Discount save(Discount discount); Discount save(Discount discount);
BigDecimal calculateTotal(Product product, BigDecimal quantity, Calendar date); BigDecimal calculateTotal(Product product, BigDecimal quantity, Calendar date);
} }
...@@ -7,7 +7,7 @@ import javax.persistence.metamodel.ListAttribute; ...@@ -7,7 +7,7 @@ import javax.persistence.metamodel.ListAttribute;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel; import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2012-08-18T16:24:21.254+0300") @Generated(value="Dali", date="2012-08-18T20:20:22.190+0300")
@StaticMetamodel(AccountEvent.class) @StaticMetamodel(AccountEvent.class)
public class AccountEvent_ extends GenericEntity_ { public class AccountEvent_ extends GenericEntity_ {
public static volatile SingularAttribute<AccountEvent, Boolean> cash; public static volatile SingularAttribute<AccountEvent, Boolean> cash;
......
...@@ -7,6 +7,7 @@ package fi.insomnia.bortal.model; ...@@ -7,6 +7,7 @@ package fi.insomnia.bortal.model;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
...@@ -62,7 +63,7 @@ public class Product extends GenericEntity { ...@@ -62,7 +63,7 @@ public class Product extends GenericEntity {
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)
@PrivateOwned @PrivateOwned
@ElementCollection() @ElementCollection()
private Set<ProductFlag> productFlags; private Set<ProductFlag> productFlags = new HashSet<ProductFlag>();
@Column(name = "instant_shop") @Column(name = "instant_shop")
private boolean prepaidInstant = false; private boolean prepaidInstant = false;
......
...@@ -2,7 +2,20 @@ package fi.insomnia.bortal.model; ...@@ -2,7 +2,20 @@ package fi.insomnia.bortal.model;
public enum ProductFlag { public enum ProductFlag {
FOODWAVE_ITEM FOODWAVE_ITEM,
PREPAID_CREDIT
;
private static final String KEY_PREFIX = "productFlag.";
private final String key;
private ProductFlag() {
key = KEY_PREFIX + name();
}
public String getI18nkey()
{
return key;
}
} }
...@@ -7,7 +7,7 @@ import javax.persistence.metamodel.SetAttribute; ...@@ -7,7 +7,7 @@ import javax.persistence.metamodel.SetAttribute;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel; import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2012-08-18T16:43:37.124+0300") @Generated(value="Dali", date="2012-08-19T19:24:42.761+0300")
@StaticMetamodel(Product.class) @StaticMetamodel(Product.class)
public class Product_ extends GenericEntity_ { public class Product_ extends GenericEntity_ {
public static volatile SingularAttribute<Product, LanEvent> event; public static volatile SingularAttribute<Product, LanEvent> event;
...@@ -17,6 +17,7 @@ public class Product_ extends GenericEntity_ { ...@@ -17,6 +17,7 @@ public class Product_ extends GenericEntity_ {
public static volatile SingularAttribute<Product, Integer> sort; public static volatile SingularAttribute<Product, Integer> sort;
public static volatile SingularAttribute<Product, String> barcode; public static volatile SingularAttribute<Product, String> barcode;
public static volatile SingularAttribute<Product, Boolean> prepaid; public static volatile SingularAttribute<Product, Boolean> prepaid;
public static volatile SetAttribute<Product, ProductFlag> productFlags;
public static volatile SingularAttribute<Product, Boolean> prepaidInstant; public static volatile SingularAttribute<Product, Boolean> prepaidInstant;
public static volatile SingularAttribute<Product, Role> provides; public static volatile SingularAttribute<Product, Role> provides;
public static volatile ListAttribute<Product, Place> places; public static volatile ListAttribute<Product, Place> places;
...@@ -25,5 +26,4 @@ public class Product_ extends GenericEntity_ { ...@@ -25,5 +26,4 @@ public class Product_ extends GenericEntity_ {
public static volatile SingularAttribute<Product, BigDecimal> vat; public static volatile SingularAttribute<Product, BigDecimal> vat;
public static volatile SingularAttribute<Product, String> unitName; public static volatile SingularAttribute<Product, String> unitName;
public static volatile ListAttribute<Product, FoodWaveTemplate> foodWaveTemplates; public static volatile ListAttribute<Product, FoodWaveTemplate> foodWaveTemplates;
public static volatile SetAttribute<Product, ProductFlag> productFlags;
} }
<!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:viewParam name="userid" value="#{userView.userid}" />
<f:event type="preRenderView" listener="#{userView.initView}" />
<f:event type="preRenderView" listener="#{foodShopView.initShopView}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['user.shop.title']}</h1>
<users:usertabs tabId="foodshop" />
</ui:define>
<ui:define name="content">
<h:form id="shoppingcartform">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['shop.accountBalance']}" />
<h:outputText value="#{productShopView.accountBalance}">
<f:convertNumber />
</h:outputText>
<h:outputLabel value="#{i18n['shop.totalPrice']}" />
<h:outputText value="#{productShopView.totalPrice}">
<f:convertNumber />
</h:outputText>
<h:outputLabel value="#{i18n['shop.cash']}" />
<h:inputText value="#{productShopView.cash}">
<f:ajax render="@form" event="valueChange" />
<f:convertNumber />
</h:inputText>
</h:panelGrid>
<h:outputText value="#{i18n['product.shopInstant']}" />
<h:selectBooleanCheckbox value="#{productShopView.payInstant}">
<f:ajax render="@form" execute="@form" />
</h:selectBooleanCheckbox>
<products:shop commitaction="#{productShopView.commitShoppingCart()}" items="#{productShopView.shoppingcart}" commitValue="#{i18n['productshop.commit']}" />
</h:form>
</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/food" 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:viewParam name="userid" value="#{userView.userid}" />
<f:event type="preRenderView" listener="#{userView.initView}" />
<f:event type="preRenderView" listener="#{foodShopView.initShopView}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['user.shop.title']}</h1>
<users:usertabs tabId="foodshop" />
</ui:define>
<ui:define name="content">
<h:form id="shoppingcartform">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['shop.accountBalance']}" />
<h:outputText value="#{foodShopView.accountBalance}">
<f:convertNumber />
</h:outputText>
<h:outputLabel value="#{i18n['shop.totalPrice']}" />
<h:outputText value="#{foodShopView.totalPrice}">
<f:convertNumber />
</h:outputText>
<h:outputLabel value="#{i18n['shop.cash']}" />
<h:inputText value="#{foodShopView.cash}">
<f:ajax render="@form" event="valueChange" />
<f:convertNumber />
</h:inputText>
</h:panelGrid>
<h:outputText value="#{i18n['product.shopInstant']}" />
<h:selectBooleanCheckbox value="#{foodShopView.payInstant}">
<f:ajax render="@form" execute="@form" />
</h:selectBooleanCheckbox>
<products:shop commitaction="#{foodShopView.commitShoppingCart()}" items="#{foodShopView.shoppingcart}" commitValue="#{i18n['productshop.commit']}" />
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
<composite:attribute name="items" required="true" />
<composite:attribute name="commitValue" required="true" />
<composite:attribute name="commitaction" method-signature="java.lang.String action()" required="true" />
</composite:interface>
<composite:implementation>
<!-- <h:outputScript target="head" library="script" name="jquery.min.js" /> -->
<!-- <h:outputScript target="head" library="script" name="shopscript.js" /> -->
<h:outputScript library="primefaces" name="jquery/jquery.js" />
<div style="margin-top: 5px;">
<h:commandButton action="#{cc.attrs.commitaction}" id="commitbutton-top" value="#{cc.attrs.commitValue}" />
</div>
<h:dataTable styleClass="bordertable" id="billcart" value="#{cc.attrs.items}" var="cart">
<h:column>
<f:facet name="header">
<h:outputText id="name" value="${i18n['product.name']}" />
</f:facet>
<h:outputText value="#{cart.product.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['product.price']}" />
</f:facet>
<h:outputText id="price" value="#{cart.product.price.abs()}">
<f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['product.totalPrice']}" />
</f:facet>
<h:outputText id="total" value="#{cart.price}">
<f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText id="count" value="${i18n['product.cart.count']}" />
</f:facet>
<h:commandButton action="#{foodShopView.add(-10)}" value="#{i18n['productshop.minusTen']}">
<f:ajax render="@form" />
</h:commandButton>
<h:commandButton action="#{foodShopView.add(-1)}" value="#{i18n['productshop.minusOne']}">
<f:ajax render="@form" />
</h:commandButton>
<h:inputText size="4" id="cartcount" value="#{cart.count}">
<f:ajax render="@form" event="valueChange" />
</h:inputText>
<h:commandButton action="#{foodShopView.add(1)}" value="#{i18n['productshop.plusOne']}">
<f:ajax render="@form" />
</h:commandButton>
<h:commandButton action="#{foodShopView.add(10)}" value="#{i18n['productshop.plusTen']}">
<f:ajax render="@form" />
</h:commandButton>
</h:column>
<h:column>
<h:dataTable border="0" var="disc" value="#{cart.discounts}">
<h:column>
<h:outputText value="#{disc.shortdesc}" />
</h:column>
<h:column>
<h:outputText value="#{cart.getDiscount(disc.id)}">
<f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
</h:outputText>
</h:column>
</h:dataTable>
</h:column>
</h:dataTable>
<div>
<h:outputText value="#{i18n['productshop.total']} " />
<h:outputText value="#{foodShopView.totalPrice}">
<f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
</h:outputText>
</div>
<h:commandButton action="#{cc.attrs.commitaction}" id="commitbutton-botton" value="#{cc.attrs.commitValue}" />
</composite:implementation>
</html>
...@@ -61,8 +61,13 @@ ...@@ -61,8 +61,13 @@
/> />
</h:selectOneMenu> </h:selectOneMenu>
<h:message for="provides" /> <h:message for="provides" />
<h:selectManyCheckbox layout="pageDirection" id="productFlags" value="#{productView.product.productFlags}" converter="#{productFlagConverter}" label="Product Flags">
<f:selectItems var="flag" itemLabel="#{i18n[flag.i18nkey]}" value="#{productView.productFlags}" />
</h:selectManyCheckbox>
<h:message for="productFlags" />
<h:commandButton id="commitbtn" action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}" /> <h:commandButton id="commitbtn" action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}" />
</h:panelGrid> </h:panelGrid>
......
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
<composite:attribute name="items" required="true" />
<composite:attribute name="commitValue" required="true" />
<composite:attribute name="commitaction" method-signature="java.lang.String action()" required="true" />
</composite:interface>
<composite:implementation>
<!-- <h:outputScript target="head" library="script" name="jquery.min.js" /> -->
<!-- <h:outputScript target="head" library="script" name="shopscript.js" /> -->
<h:outputScript library="primefaces" name="jquery/jquery.js" />
<div style="margin-top: 5px;">
<h:commandButton action="#{cc.attrs.commitaction}" id="commitbutton-top" value="#{cc.attrs.commitValue}" />
</div>
<h:dataTable styleClass="bordertable" id="billcart" value="#{cc.attrs.items}" var="cart">
<h:column>
<f:facet name="header">
<h:outputText id="name" value="${i18n['product.name']}" />
</f:facet>
<h:outputText value="#{cart.product.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['product.price']}" />
</f:facet>
<h:outputText id="price" value="#{cart.product.price.abs()}">
<f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['product.totalPrice']}" />
</f:facet>
<h:outputText id="total" value="#{cart.price}">
<f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText id="count" value="${i18n['product.cart.count']}" />
</f:facet>
<h:commandButton action="#{foodShopView.add(-10)}" value="#{i18n['productshop.minusTen']}">
<f:ajax render="@form" />
</h:commandButton>
<h:commandButton action="#{foodShopView.add(-1)}" value="#{i18n['productshop.minusOne']}">
<f:ajax render="@form" />
</h:commandButton>
<h:inputText size="4" id="cartcount" value="#{cart.count}">
<f:ajax render="@form" event="valueChange" />
</h:inputText>
<h:commandButton action="#{foodShopView.add(1)}" value="#{i18n['productshop.plusOne']}">
<f:ajax render="@form" />
</h:commandButton>
<h:commandButton action="#{foodShopView.add(10)}" value="#{i18n['productshop.plusTen']}">
<f:ajax render="@form" />
</h:commandButton>
</h:column>
<h:column>
<h:dataTable border="0" var="disc" value="#{cart.discounts}">
<h:column>
<h:outputText value="#{disc.shortdesc}" />
</h:column>
<h:column>
<h:outputText value="#{cart.getDiscount(disc.id)}">
<f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
</h:outputText>
</h:column>
</h:dataTable>
</h:column>
</h:dataTable>
<div>
<h:outputText value="#{i18n['productshop.total']} " />
<h:outputText value="#{foodShopView.totalPrice}">
<f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
</h:outputText>
</div>
<h:commandButton action="#{cc.attrs.commitaction}" id="commitbutton-botton" value="#{cc.attrs.commitValue}" />
</composite:implementation>
</html>
<!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:viewParam name="userid" value="#{userView.userid}" />
<f:event type="preRenderView" listener="#{userView.initView}" />
<f:event type="preRenderView" listener="#{foodShopView.initShopView}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['user.shop.food']}</h1>
<users:usertabs tabId="foodshop" />
</ui:define>
<ui:define name="content">
<h:form id="shoppingcartform">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['shop.accountBalance']}" />
<h:outputText value="#{foodShopView.accountBalance}">
<f:convertNumber />
</h:outputText>
<h:outputLabel value="#{i18n['shop.totalPrice']}" />
<h:outputText value="#{foodShopView.totalPrice}">
<f:convertNumber />
</h:outputText>
<h:outputLabel value="#{i18n['shop.cash']}" />
<h:inputText value="#{foodShopView.cash}">
<f:ajax render="@form" event="valueChange" />
<f:convertNumber />
</h:inputText>
</h:panelGrid>
<h:outputText value="#{i18n['product.shopInstant']}" />
<h:selectBooleanCheckbox value="#{foodShopView.payInstant}">
<f:ajax render="@form" execute="@form" />
</h:selectBooleanCheckbox>
<products:food commitaction="#{foodShopView.commitShoppingCart()}" items="#{foodShopView.shoppingcart}" commitValue="#{i18n['productshop.commit']}" />
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
package fi.insomnia.bortal.web.cdiview.shop;
import java.math.BigDecimal;
import java.util.Iterator;
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.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.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;
@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() {
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();
}
}
public String add(Integer count)
{
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)
{
ret = ret.add(cart.getPrice());
}
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()
{
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)
{
Product credProd = productBean.findCreditProduct();
retuser = productBean.createAccountEvent(credProd, cash, user).getUser();
}
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;
}
}
...@@ -19,11 +19,11 @@ public class ProductListView extends PaginationView<Product> { ...@@ -19,11 +19,11 @@ public class ProductListView extends PaginationView<Product> {
private static final long serialVersionUID = -5621674984772482156L; private static final long serialVersionUID = -5621674984772482156L;
@EJB @EJB
private transient ProductBeanLocal prodbean; private transient ProductBeanLocal pizzabean;
public void initView() { public void initView() {
if (super.requirePermissions(ShopPermission.LIST_ALL_PRODUCTS)) { if (super.requirePermissions(ShopPermission.LIST_ALL_PRODUCTS)) {
super.setResults(prodbean.getProducts()); super.setResults(pizzabean.getProducts());
} }
} }
......
...@@ -5,6 +5,10 @@ import javax.enterprise.context.ConversationScoped; ...@@ -5,6 +5,10 @@ import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel; import javax.faces.model.ListDataModel;
import javax.inject.Named; import javax.inject.Named;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -13,6 +17,7 @@ import fi.insomnia.bortal.beans.ProductBeanLocal; ...@@ -13,6 +17,7 @@ import fi.insomnia.bortal.beans.ProductBeanLocal;
import fi.insomnia.bortal.enums.apps.ShopPermission; import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.model.Discount; import fi.insomnia.bortal.model.Discount;
import fi.insomnia.bortal.model.Product; import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.ProductFlag;
import fi.insomnia.bortal.web.cdiview.GenericCDIView; import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named @Named
...@@ -30,6 +35,8 @@ public class ProductView extends GenericCDIView { ...@@ -30,6 +35,8 @@ public class ProductView extends GenericCDIView {
private Discount discount; private Discount discount;
private Integer productId; private Integer productId;
private Set<ProductFlag> productFlags;
private ListDataModel<Discount> productDiscounts; private ListDataModel<Discount> productDiscounts;
...@@ -111,5 +118,9 @@ public class ProductView extends GenericCDIView { ...@@ -111,5 +118,9 @@ public class ProductView extends GenericCDIView {
productDiscounts = new ListDataModel<Discount>(product.getDiscounts()); productDiscounts = new ListDataModel<Discount>(product.getDiscounts());
return productDiscounts; return productDiscounts;
} }
public List<ProductFlag> getProductFlags()
{
return Arrays.asList(ProductFlag.values());
}
} }
package fi.insomnia.bortal.web.converter;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.inject.Named;
import fi.insomnia.bortal.beans.ProductBeanLocal;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.ProductFlag;
import fi.insomnia.bortal.utilities.jsf.GenericIntegerEntityConverter;
@Named("productFlagConverter")
@RequestScoped()
public class ProductFlagConverter implements Converter {
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
// TODO Auto-generated method stub
return ProductFlag.valueOf(arg2);
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
// TODO Auto-generated method stub
return arg2.toString();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>RemoteSystemsTempFiles</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
<nature>org.eclipse.rse.ui.remoteSystemsTempNature</nature>
</natures>
</projectDescription>
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!