Commit 7d3b0ab0 by Tuukka Kivilahti, TKffTK

Merge branch 'master' of codecrew.fi:bortal

Conflicts:
	code/LanBortalDatabase/src/fi/insomnia/bortal/model/FoodWave.java
2 parents 9066cb2c d27bb797
......@@ -41,6 +41,9 @@ public class FoodWave extends GenericEntity {
@Temporal(TemporalType.TIMESTAMP)
private Calendar time;
@Column(name = "max_foods")
private Integer maximumFoods;
@Column(name = "wave_closed", nullable = false, columnDefinition = "boolean default false")
private boolean closed = false;
......@@ -147,6 +150,9 @@ public class FoodWave extends GenericEntity {
public List<BillLine> getBillLines() {
return billLines;
}
public Integer getMaximumFoods() {
return maximumFoods;
}
public void setBillLines(List<BillLine> billLines) {
this.billLines = billLines;
......@@ -165,5 +171,8 @@ public class FoodWave extends GenericEntity {
return retval;
}
public void setMaximumFoods(Integer maximumFoods) {
this.maximumFoods = maximumFoods;
}
}
......@@ -7,6 +7,7 @@ package fi.insomnia.bortal.model;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
......@@ -27,7 +28,7 @@ import org.eclipse.persistence.annotations.OptimisticLockingType;
@Table(name = "food_wave_templates")
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class FoodWaveTemplate extends GenericEntity {
private static final long serialVersionUID = 1L;
private static final String EVENT_ID = "event_id";
......@@ -42,13 +43,16 @@ public class FoodWaveTemplate extends GenericEntity {
@Column(name = "template_description")
private String description;
@ManyToMany(mappedBy = "foodWaveTemplates")
@ManyToMany(mappedBy = "foodWaveTemplates", cascade=CascadeType.ALL)
private List<Product> products;
@OneToMany(mappedBy = "template")
@OrderBy(value = "time")
private List<FoodWave> foodwaves;
@Column(name = "max_foods")
private Integer maximumFoods;
public FoodWaveTemplate() {
}
......@@ -103,26 +107,17 @@ public class FoodWaveTemplate extends GenericEntity {
public void setEvent(LanEvent event) {
this.event = event;
}
public List<FoodWave> getOrderableFoodwaves() {
List<FoodWave> returnList = new ArrayList<FoodWave>();
for(FoodWave wave : getFoodwaves()) {
if(wave.isOrderable()) {
for (FoodWave wave : getFoodwaves()) {
if (wave.isOrderable()) {
returnList.add(wave);
}
}
return returnList;
}
}
......@@ -20,6 +20,7 @@ import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
......@@ -53,6 +54,9 @@ public class Product extends GenericEntity {
@Column(name = "product_name")
private String name;
@Column(name = "description")
@Lob
private String description;
@Column(name = "price", nullable = false, precision = 24, scale = 4)
private BigDecimal price = BigDecimal.ZERO;
......@@ -281,4 +285,12 @@ public class Product extends GenericEntity {
this.productLimits = productLimits;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
<!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">
<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"
xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:composition
template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:event type="preRenderView" listener="#{foodWaveView.initCreateTemplate()}" />
<f:event type="preRenderView"
listener="#{foodWaveView.initCreateTemplate()}" />
</f:metadata>
<ui:define name="title">
......@@ -15,14 +23,99 @@
<ui:define name="content">
<h:form>
<h:panelGrid columns="3">
<h:outputLabel for="name" value="#{i18n['foodwavetemplate.name']}" />
<h:inputText id="name" value="#{foodWaveView.template.name}" />
<h:message for="name" />
</h:panelGrid>
<h:commandButton action="#{foodWaveView.saveTemplate()}" value="#{i18n['foowavetemplate.create']}" />
<p:wizard>
<p:tab id="basicinfo" title="#{i18n['foodwavetemplate.basicinfo']}">
<h:panelGrid columns="3">
<h:outputLabel for="name"
value="#{i18n['foodwavetemplate.name']}" />
<h:inputText id="name" required="true"
value="#{foodWaveView.template.name}" />
<h:message for="name" />
<h:outputLabel for="description"
value="#{i18n['foodwavetemplate.description']}" />
<h:inputText id="description" required="true"
value="#{foodWaveView.template.description}" />
<h:message for="description" />
</h:panelGrid>
</p:tab>
<p:tab id="selectproducts"
title="#{i18n['foodwavetemplate.selectproducts']}">
<h:messages />
<h:panelGrid columns="4">
<h:outputText value="#{i18n['foodwavetemplate.productname']}" />
<h:outputText
value="#{i18n['foodwavetemplate.productdescription']}" />
<h:outputText value="#{i18n['foodwavetemplate.price']}" />
<h:outputText value="&nbsp;" />
<h:inputText id="productname" required="true"
value="#{foodWaveView.currentProduct.name}" />
<h:inputText id="productdescription" required="true"
value="#{foodWaveView.currentProduct.description}" />
<h:inputText id="price" required="true"
value="#{foodWaveView.currentProduct.price}" />
<p:commandButton value="#{i18n['foodwavetemplate.addproduct']}"
actionListener="#{foodWaveView.addProductToTemplate}"
update="productTable" />
</h:panelGrid>
<p:dataTable name="productTable" id="productTable"
value="#{foodWaveView.template.products}" var="product"
editable="true">
<p:column headerText="#{i18n['foodwavetemplate.productname']}">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{product.name}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{product.name}" style="width:100%" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column
headerText="#{i18n['foodwavetemplate.productdescription']}">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{product.description}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{product.description}" style="width:100%" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="#{i18n['foodwavetemplate.price']}">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{product.price}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{product.price}" style="width:100%" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="#{i18n['foodwavetemplate.editRow']}"
style="width:20px">
<p:rowEditor />
</p:column>
<p:column headerText="#{i18n['foodwavetemplate.actions']}"
style="width:20px;">
<p:commandButton
value="#{i18n['foodwavetemplate.removeFromList']}"
action="#{foodWaveView.removeProductFromList(product)}"
update="productTable" />
</p:column>
</p:dataTable>
<h:commandButton action="#{foodWaveView.saveTemplate()}"
value="#{i18n['foodwavetemplate.savetemplate']}" />
</p:tab>
</p:wizard>
</h:form>
</ui:define>
......
......@@ -11,7 +11,7 @@
<f:event type="preRenderView" listener="#{userView.initCreateView}" />
</f:metadata>
<ui:define name="content">
<users:create creating="true" commitaction="#{userView.createUser()}" commitvalue="#{i18n['user.create']}" />
<users:create creating="true" commitaction="#{userView.createUser()}" commitvalue="#{i18n['user.create']}" />
</ui:define>
</ui:composition>
......
......@@ -12,7 +12,7 @@
</f:metadata>
<ui:param name="thispage" value="page.user.create" />
<ui:define name="content">
<users:create creating="true" commitaction="#{userView.createUser()}" commitvalue="#{i18n['user.create']}" />
<users:create creating="true" commitaction="#{userView.createAdminUser()}" commitvalue="#{i18n['user.create']}" />
</ui:define>
</ui:composition>
......
......@@ -49,7 +49,7 @@
<div id="usercart" style="display: #{((userCartView.isEmpty())?'none':'block')};">
<h:outputText value="#{i18n['usercart.cartsize']}" />
<h:outputText value=" #{userCartView.userCartSize}" />
<h:commandButton action="#{userCartView.clearCart}" value="#{i18n['usercart.clear']}" />
<h:commandButton action="#{userCartView.clearCart()}" value="#{i18n['usercart.clear']}" />
<br />
<h:commandButton actionListener="#{userSearchView.addToCart}" value="#{i18n['usercart.addSearcherUsers']}" />
<h:commandButton action="#{userCartView.traverse}" value="#{i18n['usercart.traverse']}" />
......
#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
#Bill number
# Validationmessages
actionlog.create.header = Create new actionmessage
actionlog.create.message = Message
actionlog.create.role = Target role
actionlog.create.submitbutton = Send
actionlog.create.taskradio = Task
actionlog.crew = Crew
actionlog.message = Event
actionlog.messagelist.description = You can follow and create new action messages in this view
actionlog.messagelist.header = Messagelist
actionlog.state = State
actionlog.task = Task
actionlog.tasklist.header = Tasklist
actionlog.time = Time
actionlog.user = User
bill.billMarkedPaidMail.message = Your deposit number {0} has been marked as paid.
bill.billMarkedPaidMail.subject = [Streamparty] Your credits have been updated
error.contact = If this happens again, contact Info with the following code:
error.error = You have encountered an error.
eventorg.create = Create
eventorg.edit = Edit
global.cancel = Cancel
global.copyright = Codecrew Ry
global.infomail = info@streamparty.org
global.notAuthorizedExecute = You are not authorized to execute that!!
global.notauthorized = You don't have enough rights to enter this site.
global.save = Save
global.webpage = http://www.streamparty.org
httpsession.creationTime = Created
login.login = Login
login.logout = Logout
login.logoutmessage = You have logged out of the system
login.password = Password
login.submit = Login
login.username = Username
loginerror.header = Login failed
loginerror.message = Username of password incorrect.
loginerror.resetpassword = Reset password
passwordChanged.body = You can now login with the new password.
passwordChanged.header = Password changed successfully.
passwordReset.errorChanging = Unexpected error whilst password reset. Contact your administrator.
passwordReset.hashNotFound = Password change token has expired. Please send the query again.
permissiondenied.alreadyLoggedIn = You don't have enough rights
permissiondenied.header = Access denied
permissiondenied.notLoggedIn = You don't have enough rights to enter this site.
resetMail.body = You can change a forgotten password by inserting your username to the field below. A link where you can change the password will be sent to the email address associated to that.
resetMail.header = Reset lost password
resetMail.send = Send email
resetMail.username = Username
resetmailSent.body = Email has been sent containing a link where you can change the password.
resetmailSent.header = Email sent
#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
#Bill number
# Validationmessages
actionlog.create.header = Create new actionmessage
actionlog.create.message = Message
actionlog.create.role = Target role
actionlog.create.submitbutton = Send
actionlog.create.taskradio = Task
actionlog.crew = Crew
actionlog.message = Event
actionlog.messagelist.description = You can follow and create new action messages in this view
actionlog.messagelist.header = Messagelist
actionlog.state = State
actionlog.task = Task
actionlog.tasklist.header = Tasklist
actionlog.time = Time
actionlog.user = User
bill.billMarkedPaidMail.message = Your deposit number {0} has been marked as paid.
bill.billMarkedPaidMail.subject = [Streamparty] Your credits have been updated
error.contact = If this happens again, contact Info with the following code:
error.error = You have encountered an error.
eventorg.create = Create
eventorg.edit = Edit
global.cancel = Cancel
global.copyright = Codecrew Ry
global.infomail = info@streamparty.org
global.notAuthorizedExecute = You are not authorized to execute that!!
global.notauthorized = You don't have enough rights to enter this site.
global.save = Save
global.webpage = http://www.streamparty.org
httpsession.creationTime = Created
login.login = Login
login.logout = Logout
login.logoutmessage = You have logged out of the system
login.password = Password
login.submit = Login
login.username = Username
loginerror.header = Login failed
loginerror.message = Username of password incorrect.
loginerror.resetpassword = Reset password
passwordChanged.body = You can now login with the new password.
passwordChanged.header = Password changed successfully.
passwordReset.errorChanging = Unexpected error whilst password reset. Contact your administrator.
passwordReset.hashNotFound = Password change token has expired. Please send the query again.
permissiondenied.alreadyLoggedIn = You don't have enough rights
permissiondenied.header = Access denied
permissiondenied.notLoggedIn = You don't have enough rights to enter this site.
resetMail.body = You can change a forgotten password by inserting your username to the field below. A link where you can change the password will be sent to the email address associated to that.
resetMail.header = Reset lost password
resetMail.send = Send email
resetMail.username = Username
resetmailSent.body = Email has been sent containing a link where you can change the password.
resetmailSent.header = Email sent
#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
#Bill number
# Validationmessages
actionlog.create.header = Luo uusi ActionMessage
actionlog.create.message = Viesti
actionlog.create.role = Kohderooli
actionlog.create.submitbutton = L\u00E4het\u00E4
actionlog.create.taskradio = Teht\u00E4v\u00E4
actionlog.crew = Crew
actionlog.message = Tapahtuma
actionlog.messagelist.description = Voit seurata sek\u00E4 luoda uusia ActionMessageja t\u00E4ss\u00E4 n\u00E4kym\u00E4ss\u00E4.
actionlog.messagelist.header = Viestilista
actionlog.state = Tila
actionlog.task = Teht\u00E4v\u00E4
actionlog.tasklist.header = Teht\u00E4v\u00E4lista
actionlog.time = Aika
actionlog.user = Tekij\u00E4
bill.billMarkedPaidMail.message = Laskusi numero {0} on merkitty maksetuksi. Voit nyt siirty\u00E4 lippukauppaan varamaamaan haluamasi paikat. \nTervetuloa tapahtumaan!\n\nTerveisin,\nInsomnia lippupalvelu\nwww.insomnia.fi
bill.billMarkedPaidMail.subject = [INSOMNIA] Lasku merkitty maksetuksi
error.contact = Jos t\u00E4m\u00E4 toistuu, ota seuraava koodi talteen ja ota yhteys Infoon:
error.error = Olet kohdannut virheen.
eventorg.create = Luo
eventorg.edit = Muokkaa
global.cancel = Peruuta
global.copyright = Codecrew Ry
global.infomail = info@insomnia.fi
global.notAuthorizedExecute = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia suorittaa t\u00E4t\u00E4 toimenpidett\u00E4!
global.notauthorized = Sinulla ei ole riitt\u00E4vi\u00E4 oikeuksia t\u00E4lle sivulle.
global.save = Tallenna
global.webpage = http://www.insomnia.fi
httpsession.creationTime = Luotu
login.login = Kirjaudu sis\u00E4\u00E4n
login.logout = Kirjaudu ulos
login.logoutmessage = Olet kirjautunut ulos j\u00E4rjestelm\u00E4st\u00E4.
login.password = Salasana
login.submit = Kirjaudu sis\u00E4\u00E4n
login.username = K\u00E4ytt\u00E4j\u00E4tunnus
loginerror.header = Kirjautuminen ep\u00E4onnistui
loginerror.message = K\u00E4ytt\u00E4j\u00E4tunnus tai salasana ei ollut oikein.
loginerror.resetpassword = Salasana unohtunut?
passwordChanged.body = Voit nyt kirjautua k\u00E4ytt\u00E4j\u00E4tunnuksella ja uudella salasanalla sis\u00E4\u00E4n j\u00E4rjestelm\u00E4\u00E4n.
passwordChanged.header = Salasana vaihdettu onnistuneesti
passwordReset.errorChanging = Odotamaton virhe. Ota yhteytt\u00E4 yll\u00E4pitoon.
passwordReset.hashNotFound = Salasanan vaihto on vanhentunut. Jos haluat vaihtaa salasanan l\u00E4het\u00E4 vaihtopyynt\u00F6 uudelleen.
permissiondenied.alreadyLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia!
permissiondenied.header = P\u00E4\u00E4sy kielletty
permissiondenied.notLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia t\u00E4lle sivulle.
resetMail.body = Voit vaihtaa unohtuneen salasanan sy\u00F6tt\u00E4m\u00E4ll\u00E4 k\u00E4ytt\u00E4j\u00E4tunnuksesi allaolevaan kentt\u00E4\u00E4n. Tunnukseen liitettyyn s\u00E4hk\u00F6postiosoitteeseen l\u00E4hetet\u00E4\u00E4n kertak\u00E4ytt\u00F6inen osoite jossa voit vaihtaa sy\u00F6tt\u00E4m\u00E4si k\u00E4ytt\u00E4j\u00E4tunnuksen salasanan.
resetMail.header = Salasana unohtunut?
resetMail.send = L\u00E4het\u00E4 s\u00E4hk\u00F6posti
resetmailSent.body = Antamasi k\u00E4ytt\u00E4j\u00E4tunnuksen s\u00E4hk\u00F6postiosoitteeseen on l\u00E4hetetty osoite jossa voit vaihtaa tunnuksen salasanan.
resetmailSent.header = S\u00E4hk\u00F6posti l\u00E4hetetty
#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
#Bill number
# Validationmessages
actionlog.create.header = Luo uusi ActionMessage
actionlog.create.message = Viesti
actionlog.create.role = Kohderooli
actionlog.create.submitbutton = L\u00E4het\u00E4
actionlog.create.taskradio = Teht\u00E4v\u00E4
actionlog.crew = Crew
actionlog.message = Tapahtuma
actionlog.messagelist.description = Voit seurata sek\u00E4 luoda uusia ActionMessageja t\u00E4ss\u00E4 n\u00E4kym\u00E4ss\u00E4.
actionlog.messagelist.header = Viestilista
actionlog.state = Tila
actionlog.task = Teht\u00E4v\u00E4
actionlog.tasklist.header = Teht\u00E4v\u00E4lista
actionlog.time = Aika
actionlog.user = Tekij\u00E4
bill.billMarkedPaidMail.message = Laskusi numero {0} on merkitty maksetuksi. Voit nyt siirty\u00E4 lippukauppaan varamaamaan haluamasi paikat. \nTervetuloa tapahtumaan!\n\nTerveisin,\nInsomnia lippupalvelu\nwww.insomnia.fi
bill.billMarkedPaidMail.subject = [INSOMNIA] Lasku merkitty maksetuksi
error.contact = Jos t\u00E4m\u00E4 toistuu, ota seuraava koodi talteen ja ota yhteys Infoon:
error.error = Olet kohdannut virheen.
eventorg.create = Luo
eventorg.edit = Muokkaa
global.cancel = Peruuta
global.copyright = Codecrew Ry
global.infomail = info@insomnia.fi
global.notAuthorizedExecute = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia suorittaa t\u00E4t\u00E4 toimenpidett\u00E4!
global.notauthorized = Sinulla ei ole riitt\u00E4vi\u00E4 oikeuksia t\u00E4lle sivulle.
global.save = Tallenna
global.webpage = http://www.insomnia.fi
httpsession.creationTime = Luotu
login.login = Kirjaudu sis\u00E4\u00E4n
login.logout = Kirjaudu ulos
login.logoutmessage = Olet kirjautunut ulos j\u00E4rjestelm\u00E4st\u00E4.
login.password = Salasana
login.submit = Kirjaudu sis\u00E4\u00E4n
login.username = K\u00E4ytt\u00E4j\u00E4tunnus
loginerror.header = Kirjautuminen ep\u00E4onnistui
loginerror.message = K\u00E4ytt\u00E4j\u00E4tunnus tai salasana ei ollut oikein.
loginerror.resetpassword = Salasana unohtunut?
passwordChanged.body = Voit nyt kirjautua k\u00E4ytt\u00E4j\u00E4tunnuksella ja uudella salasanalla sis\u00E4\u00E4n j\u00E4rjestelm\u00E4\u00E4n.
passwordChanged.header = Salasana vaihdettu onnistuneesti
passwordReset.errorChanging = Odotamaton virhe. Ota yhteytt\u00E4 yll\u00E4pitoon.
passwordReset.hashNotFound = Salasanan vaihto on vanhentunut. Jos haluat vaihtaa salasanan l\u00E4het\u00E4 vaihtopyynt\u00F6 uudelleen.
permissiondenied.alreadyLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia!
permissiondenied.header = P\u00E4\u00E4sy kielletty
permissiondenied.notLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia t\u00E4lle sivulle.
resetMail.body = Voit vaihtaa unohtuneen salasanan sy\u00F6tt\u00E4m\u00E4ll\u00E4 k\u00E4ytt\u00E4j\u00E4tunnuksesi allaolevaan kentt\u00E4\u00E4n. Tunnukseen liitettyyn s\u00E4hk\u00F6postiosoitteeseen l\u00E4hetet\u00E4\u00E4n kertak\u00E4ytt\u00F6inen osoite jossa voit vaihtaa sy\u00F6tt\u00E4m\u00E4si k\u00E4ytt\u00E4j\u00E4tunnuksen salasanan.
resetMail.header = Salasana unohtunut?
resetMail.send = L\u00E4het\u00E4 s\u00E4hk\u00F6posti
resetmailSent.body = Antamasi k\u00E4ytt\u00E4j\u00E4tunnuksen s\u00E4hk\u00F6postiosoitteeseen on l\u00E4hetetty osoite jossa voit vaihtaa tunnuksen salasanan.
resetmailSent.header = S\u00E4hk\u00F6posti l\u00E4hetetty
package fi.insomnia.bortal.web.cdiview.shop;
import java.util.ArrayList;
import java.util.TreeSet;
import java.util.Vector;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel;
......@@ -11,6 +15,8 @@ import fi.insomnia.bortal.beans.FoodWaveBeanLocal;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.model.FoodWave;
import fi.insomnia.bortal.model.FoodWaveTemplate;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.ProductFlag;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
......@@ -33,6 +39,8 @@ public class FoodWaveView extends GenericCDIView {
private ListDataModel<FoodWave> foodWaves;
private FoodWave selectedFoodWave = null;
private Product currentProduct;
public void initTemplateList() {
if (super.requirePermissions(ShopPermission.LIST_USERPRODUCTS)) {
......@@ -58,10 +66,36 @@ public class FoodWaveView extends GenericCDIView {
if (super.requirePermissions(ShopPermission.MANAGE_PRODUCTS) && template == null)
{
template = new FoodWaveTemplate();
template.setProducts(new ArrayList<Product>());
template.setEvent(eventbean.getCurrentEvent());
createNewProductSkeleton();
super.beginConversation();
}
}
private void createNewProductSkeleton() {
TreeSet<ProductFlag> ts = new TreeSet<ProductFlag>();
ts.add(ProductFlag.PREPAID_INSTANT_CREATE);
currentProduct = new Product();
currentProduct.setProductFlags(ts);
currentProduct.setEvent(eventbean.getCurrentEvent());
}
public void addProductToTemplate() {
template.getProducts().add(currentProduct);
createNewProductSkeleton();
}
public Product getCurrentProduct() {
return currentProduct;
}
public void setCurrentProduct(Product currentProduct) {
this.currentProduct = currentProduct;
}
public void initUserFoodWaveList() {
this.foodWaves = new ListDataModel<FoodWave>(foodWaveBean.getOpenFoodWaves());
......@@ -145,4 +179,8 @@ public class FoodWaveView extends GenericCDIView {
this.templateId = templateId;
}
public void removeProductFromList(Product product) {
template.getProducts().remove(product);
}
}
......@@ -69,7 +69,8 @@ public class UserCartView extends GenericCDIView {
updateCurrent();
return "/useradmin/userCartShow";
}
else return "/useradmin/list";
else
return "/useradmin/list";
}
public String saveUser() {
......@@ -102,12 +103,12 @@ public class UserCartView extends GenericCDIView {
}
public void clearCart() {
public String clearCart() {
if (usercart != null)
usercart.clear();
//return null;
return null;
}
public boolean isEmpty() {
return usercart == null || usercart.isEmpty();
}
......
......@@ -14,7 +14,9 @@ import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.utilities.I18n;
@Named
......@@ -29,12 +31,15 @@ public class UserValidator implements Serializable {
private static final Integer PASSWORD_MIN_LENGTH = 8;
@EJB
private transient UserBeanLocal userbean;
@EJB
private transient PermissionBeanLocal permbean;
private static final Logger logger = LoggerFactory.getLogger(UserValidator.class);
public void validateEmail(FacesContext context, UIComponent ui, Object value) {
String email = (String) value;
if (email.indexOf('@') == -1) {
if (!permbean.hasPermission(UserPermission.MODIFY) && (email == null || email.indexOf('@') == -1)) {
message(context, ui, "userview.invalidEmail");
}
}
......@@ -53,21 +58,25 @@ public class UserValidator implements Serializable {
public void password(FacesContext context, UIComponent ui, Object object) {
logger.info("Executing pwd, firstpwd {}", firstpwd);
if (object == null) {
message(context, ui, "user.passwordlengthMessage");
return;
}
if (firstpwd == null) {
firstpwd = object.toString();
if (PASSWORD_MIN_LENGTH.compareTo(firstpwd.length()) > 0) {
message(context, ui, "userview.passwordTooShort", PASSWORD_MIN_LENGTH);
if (!permbean.hasPermission(UserPermission.MODIFY))
{
if (object == null) {
message(context, ui, "user.passwordlengthMessage");
return;
}
if (firstpwd == null) {
firstpwd = object.toString();
if (PASSWORD_MIN_LENGTH.compareTo(firstpwd.length()) > 0) {
message(context, ui, "userview.passwordTooShort", PASSWORD_MIN_LENGTH);
}
logger.info("Setting firstpwd to {} as {}", firstpwd, object.getClass());
return;
}
logger.info("Checking length");
if (!firstpwd.equals(object)) {
message(context, ui, "userview.passwordsDontMatch");
}
logger.info("Setting firstpwd to {} as {}", firstpwd, object.getClass());
return;
}
logger.info("Checking length");
if (!firstpwd.equals(object)) {
message(context, ui, "userview.passwordsDontMatch");
}
logger.info("Done pwd");
}
......
......@@ -85,10 +85,10 @@ public class UserView extends GenericCDIView {
private transient EventBeanLocal eventbean;
@EJB
private transient CardPrintBeanLocal cardPrintBean;
private File file;
private StreamedContent streamedFile;
private MassPrintResult mpr = null;
private boolean waitForAcceptance = false;
......@@ -142,13 +142,13 @@ public class UserView extends GenericCDIView {
// user = userbean.getEventUser(img.getUser());
// croppedImage = null;
if(croppedImage == null) return null;
if (croppedImage == null)
return null;
logger.info("Cropped image {}x{}", croppedImage.getLeft(), croppedImage.getTop());
logger.info("Cropped data bytesize {}, type {}", croppedImage.getBytes().length, croppedImage.getOriginalFilename());
try {
try {
UserImage newImage =
userbean.saveCroppedImage(user.getUser().getCurrentImage(),
croppedImage.getLeft(), croppedImage.getTop(),
......@@ -160,29 +160,29 @@ public class UserView extends GenericCDIView {
}
return null;
}
public void prepareCardDownload() {
file = null;
try {
mpr = cardPrintBean.getUserCardAsPrintablePdf(this.user.getId());
file = File.createTempFile("cardprintout",null);
file = File.createTempFile("cardprintout", null);
FileOutputStream fostream = new FileOutputStream(file);
fostream.write(mpr.getPdf());
fostream.close();
setStreamedFile(new DefaultStreamedContent(new FileInputStream(this.file)));
} catch(Exception e) {
} catch (Exception e) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(e.getMessage()));
}
}
public String acceptPrintedCard() {
if(mpr != null && mpr.getAffectedUsers().size() > 0) {
if (mpr != null && mpr.getAffectedUsers().size() > 0) {
cardPrintBean.acceptMassPrintResult(mpr);
return "accepted";
} else {
return "failure";
}
}
......@@ -290,6 +290,12 @@ public class UserView extends GenericCDIView {
return "/user/created";
}
public String createAdminUser() {
userbean.createNewUser(user, getPassword());
canSave = permbean.hasPermission(UserPermission.MODIFY);
return "/useradmin/edit";
}
public void setUserid(Integer userid) {
this.userid = userid;
}
......@@ -357,7 +363,7 @@ public class UserView extends GenericCDIView {
public void raiseWaitForAcceptance() {
waitForAcceptance = true;
}
public boolean isWaitForAcceptance() {
return waitForAcceptance;
}
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!