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