Commit f54af4f9 by Tuomas Riihimäki

Complete viplist

1 parent ba482559
package fi.codecrew.moya.beans; package fi.codecrew.moya.beans;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
import fi.codecrew.moya.model.Vip; import fi.codecrew.moya.model.Vip;
import fi.codecrew.moya.model.VipProduct;
import fi.codecrew.moya.model.VipProductDelivery;
import fi.codecrew.moya.utilities.SearchQuery; import fi.codecrew.moya.utilities.SearchQuery;
import fi.codecrew.moya.utilities.SearchResult; import fi.codecrew.moya.utilities.SearchResult;
...@@ -19,4 +22,14 @@ public interface VipBeanLocal { ...@@ -19,4 +22,14 @@ public interface VipBeanLocal {
Vip find(Integer id); Vip find(Integer id);
Vip createProduct(VipProduct l);
Vip save(Vip vip);
Vip saveProduct(VipProduct rowData);
Vip deleteProduct(VipProduct l);
VipProductDelivery createDelivery(VipProduct prod, BigDecimal quantity, String notes);
} }
...@@ -43,6 +43,7 @@ import fi.codecrew.moya.enums.apps.SpecialPermission; ...@@ -43,6 +43,7 @@ import fi.codecrew.moya.enums.apps.SpecialPermission;
import fi.codecrew.moya.enums.apps.TerminalPermission; import fi.codecrew.moya.enums.apps.TerminalPermission;
import fi.codecrew.moya.enums.apps.TournamentPermission; import fi.codecrew.moya.enums.apps.TournamentPermission;
import fi.codecrew.moya.enums.apps.UserPermission; import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.enums.apps.VipPermission;
import fi.codecrew.moya.facade.MenuNavigationFacade; import fi.codecrew.moya.facade.MenuNavigationFacade;
import fi.codecrew.moya.facade.MenuitemFacade; import fi.codecrew.moya.facade.MenuitemFacade;
import fi.codecrew.moya.model.LanEvent; import fi.codecrew.moya.model.LanEvent;
...@@ -125,7 +126,6 @@ public class MenuBean implements MenuBeanLocal { ...@@ -125,7 +126,6 @@ public class MenuBean implements MenuBeanLocal {
usermenu.addPage(menuitemfacade.findOrCreate("/auth/passwordChanged"), null).setVisible(false); usermenu.addPage(menuitemfacade.findOrCreate("/auth/passwordChanged"), null).setVisible(false);
usermenu.addPage(menuitemfacade.findOrCreate("/auth/notauthorized"), null).setVisible(false); usermenu.addPage(menuitemfacade.findOrCreate("/auth/notauthorized"), null).setVisible(false);
MenuNavigation userEvent = usermenu.addPage(null, null); MenuNavigation userEvent = usermenu.addPage(null, null);
userEvent.setKey("topnavi.userevent"); userEvent.setKey("topnavi.userevent");
userEvent.addPage(menuitemfacade.findOrCreate("/poll/index"), PollPermission.ANSWER); userEvent.addPage(menuitemfacade.findOrCreate("/poll/index"), PollPermission.ANSWER);
...@@ -142,7 +142,8 @@ public class MenuBean implements MenuBeanLocal { ...@@ -142,7 +142,8 @@ public class MenuBean implements MenuBeanLocal {
userkauppa.setKey("topnavi.usershop"); userkauppa.setKey("topnavi.usershop");
userkauppa.addPage(menuitemfacade.findOrCreate("/shop/createBill"), BillPermission.CREATE_BILL); userkauppa.addPage(menuitemfacade.findOrCreate("/shop/createBill"), BillPermission.CREATE_BILL);
userkauppa.addPage(menuitemfacade.findOrCreate("/neomap/reserve"), MapPermission.BUY_PLACES); userkauppa.addPage(menuitemfacade.findOrCreate("/neomap/reserve"), MapPermission.BUY_PLACES);
userkauppa.addPage(menuitemfacade.findOrCreate("/neomap/notenoughslots"), UserPermission.ANYUSER).setVisible(false);; userkauppa.addPage(menuitemfacade.findOrCreate("/neomap/notenoughslots"), UserPermission.ANYUSER).setVisible(false);
;
userkauppa.addPage(menuitemfacade.findOrCreate("/foodwave/list"), ShopPermission.SHOP_FOODWAVE); userkauppa.addPage(menuitemfacade.findOrCreate("/foodwave/list"), ShopPermission.SHOP_FOODWAVE);
userkauppa.addPage(menuitemfacade.findOrCreate("/foodwave/listProducts"), ShopPermission.SHOP_FOODWAVE).setVisible(false); userkauppa.addPage(menuitemfacade.findOrCreate("/foodwave/listProducts"), ShopPermission.SHOP_FOODWAVE).setVisible(false);
userkauppa.addPage(menuitemfacade.findOrCreate("/foodwave/ThanksForOrderingFromCounter"), ShopPermission.SHOP_FOODWAVE).setVisible(false); userkauppa.addPage(menuitemfacade.findOrCreate("/foodwave/ThanksForOrderingFromCounter"), ShopPermission.SHOP_FOODWAVE).setVisible(false);
...@@ -242,10 +243,19 @@ public class MenuBean implements MenuBeanLocal { ...@@ -242,10 +243,19 @@ public class MenuBean implements MenuBeanLocal {
adminEventCards.addPage(menuitemfacade.findOrCreate("/shop/shopToUser"), null).setVisible(false); adminEventCards.addPage(menuitemfacade.findOrCreate("/shop/shopToUser"), null).setVisible(false);
adminEventCards.addPage(menuitemfacade.findOrCreate("/shop/assocToUser"), null).setVisible(false); adminEventCards.addPage(menuitemfacade.findOrCreate("/shop/assocToUser"), null).setVisible(false);
MenuNavigation vips = adminuser.addPage(null, null);
vips.setKey("subnavi.vips");
vips.addPage(menuitemfacade.findOrCreate("/vip/viplist"), VipPermission.VIEW);
vips.addPage(menuitemfacade.findOrCreate("/vip/create"), VipPermission.VIEW).setVisible(false);
vips.addPage(menuitemfacade.findOrCreate("/vip/edit"), VipPermission.VIEW).setVisible(false);
MenuNavigation adminAssociation = adminmenu.addPage(null, null); MenuNavigation adminAssociation = adminmenu.addPage(null, null);
adminAssociation.setKey("topnavi.adminassoc"); adminAssociation.setKey("topnavi.adminassoc");
adminAssociation.addPage(menuitemfacade.findOrCreate("/networkassociation/index"), NetworkAssociationPermission.CAN_ADMINISTER_ASSOCIATIONS); adminAssociation.addPage(menuitemfacade.findOrCreate("/networkassociation/index"), NetworkAssociationPermission.CAN_ADMINISTER_ASSOCIATIONS);
// shop // shop
MenuNavigation adminshop = adminmenu.addPage(null, null); MenuNavigation adminshop = adminmenu.addPage(null, null);
adminshop.setKey("topnavi.adminshop"); adminshop.setKey("topnavi.adminshop");
...@@ -320,8 +330,6 @@ public class MenuBean implements MenuBeanLocal { ...@@ -320,8 +330,6 @@ public class MenuBean implements MenuBeanLocal {
adminevent.addPage(menuitemfacade.findOrCreate("/reports/basicStatistics"), EventPermission.VIEW_STATISTICS); adminevent.addPage(menuitemfacade.findOrCreate("/reports/basicStatistics"), EventPermission.VIEW_STATISTICS);
MenuNavigation tournamentsadm = adminmenu.addPage(null, null); MenuNavigation tournamentsadm = adminmenu.addPage(null, null);
tournamentsadm.setKey("tournaments.menutitle"); tournamentsadm.setKey("tournaments.menutitle");
tournamentsadm.addPage(menuitemfacade.findOrCreate("/tournaments/admin/index"), TournamentPermission.MANAGE_ALL); tournamentsadm.addPage(menuitemfacade.findOrCreate("/tournaments/admin/index"), TournamentPermission.MANAGE_ALL);
...@@ -332,8 +340,6 @@ public class MenuBean implements MenuBeanLocal { ...@@ -332,8 +340,6 @@ public class MenuBean implements MenuBeanLocal {
tournamentsadm.addPage(menuitemfacade.findOrCreate("/tournaments/admin/delete"), TournamentPermission.MANAGE_ALL).setVisible(false); tournamentsadm.addPage(menuitemfacade.findOrCreate("/tournaments/admin/delete"), TournamentPermission.MANAGE_ALL).setVisible(false);
tournamentsadm.addPage(menuitemfacade.findOrCreate("/tournaments/admin/editrules"), TournamentPermission.MANAGE_ALL).setVisible(false); tournamentsadm.addPage(menuitemfacade.findOrCreate("/tournaments/admin/editrules"), TournamentPermission.MANAGE_ALL).setVisible(false);
MenuNavigation adminlectures = adminmenu.addPage(null, null); MenuNavigation adminlectures = adminmenu.addPage(null, null);
adminlectures.setKey("topnavi.adminlectures"); adminlectures.setKey("topnavi.adminlectures");
adminlectures.addPage(menuitemfacade.findOrCreate("/lectureadmin/manageLectureGroups"), LecturePermission.MANAGE); adminlectures.addPage(menuitemfacade.findOrCreate("/lectureadmin/manageLectureGroups"), LecturePermission.MANAGE);
...@@ -341,7 +347,6 @@ public class MenuBean implements MenuBeanLocal { ...@@ -341,7 +347,6 @@ public class MenuBean implements MenuBeanLocal {
adminlectures.addPage(menuitemfacade.findOrCreate("/lectureadmin/manageLectures"), LecturePermission.MANAGE).setVisible(false); adminlectures.addPage(menuitemfacade.findOrCreate("/lectureadmin/manageLectures"), LecturePermission.MANAGE).setVisible(false);
adminlectures.addPage(menuitemfacade.findOrCreate("/lectureadmin/manageParticipants"), LecturePermission.MANAGE).setVisible(false); adminlectures.addPage(menuitemfacade.findOrCreate("/lectureadmin/manageParticipants"), LecturePermission.MANAGE).setVisible(false);
MenuNavigation infoviews = adminmenu.addPage(null, null); MenuNavigation infoviews = adminmenu.addPage(null, null);
infoviews.setKey("topnavi.infoviews"); infoviews.setKey("topnavi.infoviews");
infoviews.addPage(menuitemfacade.findOrCreate("/admin/adduser/index"), TerminalPermission.INFO); infoviews.addPage(menuitemfacade.findOrCreate("/admin/adduser/index"), TerminalPermission.INFO);
......
...@@ -2,9 +2,14 @@ package fi.codecrew.moya.beans; ...@@ -2,9 +2,14 @@ package fi.codecrew.moya.beans;
import fi.codecrew.moya.enums.apps.VipPermission; import fi.codecrew.moya.enums.apps.VipPermission;
import fi.codecrew.moya.facade.VipFacade; import fi.codecrew.moya.facade.VipFacade;
import fi.codecrew.moya.facade.VipProductDeliveryFacade;
import fi.codecrew.moya.facade.VipProductFacade;
import fi.codecrew.moya.model.Vip; import fi.codecrew.moya.model.Vip;
import fi.codecrew.moya.model.VipProduct;
import fi.codecrew.moya.model.VipProductDelivery;
import fi.codecrew.moya.utilities.SearchQuery; import fi.codecrew.moya.utilities.SearchQuery;
import fi.codecrew.moya.utilities.SearchResult; import fi.codecrew.moya.utilities.SearchResult;
import fi.codecrew.moya.utilities.jpa.GenericFacade;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -15,6 +20,7 @@ import javax.ejb.EJB; ...@@ -15,6 +20,7 @@ import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -39,6 +45,10 @@ public class VipBean implements VipBeanLocal { ...@@ -39,6 +45,10 @@ public class VipBean implements VipBeanLocal {
@EJB @EJB
private EventBeanLocal eventbean; private EventBeanLocal eventbean;
@EJB
private VipProductFacade vipProductFacade;
@EJB
private VipProductDeliveryFacade vpdFacade;
@Override @Override
@RolesAllowed({ VipPermission.S_VIEW }) @RolesAllowed({ VipPermission.S_VIEW })
...@@ -62,4 +72,66 @@ public class VipBean implements VipBeanLocal { ...@@ -62,4 +72,66 @@ public class VipBean implements VipBeanLocal {
public Vip find(Integer id) { public Vip find(Integer id) {
return vipFacade.find(id); return vipFacade.find(id);
} }
// @Override
// public SearchResult<Vip> search(SearchQuery sq) {
// // TODO Auto-generated method stub
// return null;
// }
@Override
public Vip createProduct(VipProduct l) {
Vip vip = vipFacade.reload(l.getVip());
l.setVip(vip);
if (!vip.getProducts().contains(l))
vip.getProducts().add(0, l);
vipProductFacade.create(l);
return vip;
}
@Override
public SearchResult<Vip> search(SearchQuery sq) {
// TODO Auto-generated method stub
return null;
}
@Override
public Vip save(Vip vip) {
return vipFacade.merge(vip);
}
@Override
public Vip saveProduct(VipProduct prod) {
VipProduct ret = vipProductFacade.merge(prod);
return ret.getVip();
}
@Override
public Vip deleteProduct(VipProduct l) {
l = vipProductFacade.reload(l);
Vip vip = l.getVip();
vip.getProducts().remove(l);
vipProductFacade.remove(l);
return vip;
}
@Override
public VipProductDelivery createDelivery(VipProduct prod, BigDecimal quantity, String notes) {
prod = vipProductFacade.reload(prod);
VipProductDelivery vpd = new VipProductDelivery();
vpd.setVipProduct(prod);
vpd.setDeliverer(permbean.getCurrentUser());
vpd.setNotes(notes);
vpd.setDeliveryTime(new Date());
vpd.setQuantity(quantity);
vpdFacade.create(vpd);
prod.getDeliveries().add(vpd);
return vpd;
}
} }
package fi.codecrew.moya.facade;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import fi.codecrew.moya.model.VipProduct;
import fi.codecrew.moya.model.VipProductDelivery;
@Stateless
@LocalBean
public class VipProductDeliveryFacade extends IntegerPkGenericFacade<VipProductDelivery> {
public VipProductDeliveryFacade() {
super(VipProductDelivery.class);
}
}
package fi.codecrew.moya.facade;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.Vip;
import fi.codecrew.moya.model.VipProduct;
import fi.codecrew.moya.model.Vip_;
@Stateless
@LocalBean
public class VipProductFacade extends IntegerPkGenericFacade<VipProduct> {
public VipProductFacade() {
super(VipProduct.class);
}
}
...@@ -82,6 +82,16 @@ public class Vip extends GenericEntity { ...@@ -82,6 +82,16 @@ public class Vip extends GenericEntity {
return ret; return ret;
} }
public String getSearchableProductnames()
{
StringBuilder sb = new StringBuilder();
for (VipProduct p : products) {
sb.append(p.getProductName());
sb.append(" ");
}
return sb.toString();
}
public String getDescription() { public String getDescription() {
return description; return description;
} }
......
...@@ -45,6 +45,15 @@ public class VipProduct extends GenericEntity { ...@@ -45,6 +45,15 @@ public class VipProduct extends GenericEntity {
@OneToMany(mappedBy = "vipProduct") @OneToMany(mappedBy = "vipProduct")
private List<VipProductDelivery> deliveries = new ArrayList<>(); private List<VipProductDelivery> deliveries = new ArrayList<>();
public VipProduct() {
super();
}
public VipProduct(Vip v) {
this();
this.vip = v;
}
/** /**
* Returns name of the product. If @Field product is empty, use @Field name * Returns name of the product. If @Field product is empty, use @Field name
* *
...@@ -53,7 +62,7 @@ public class VipProduct extends GenericEntity { ...@@ -53,7 +62,7 @@ public class VipProduct extends GenericEntity {
@Transient @Transient
public String getProductName() { public String getProductName() {
String ret = name; String ret = name;
if (product == null) { if (product != null) {
ret = product.getName(); ret = product.getName();
} }
return ret; return ret;
......
...@@ -13,6 +13,10 @@ ...@@ -13,6 +13,10 @@
<default-locale>fi</default-locale> <default-locale>fi</default-locale>
<supported-locale>en</supported-locale> <supported-locale>en</supported-locale>
</locale-config> </locale-config>
<action-listener>org.primefaces.application.DialogActionListener</action-listener>
<navigation-handler>org.primefaces.application.DialogNavigationHandler</navigation-handler>
<view-handler>org.primefaces.application.DialogViewHandler</view-handler>
</application> </application>
<!-- <navigation-rule> --> <!-- <navigation-rule> -->
......
...@@ -11,17 +11,18 @@ ...@@ -11,17 +11,18 @@
<ui:define name="content"> <ui:define name="content">
<h:form id="vipcreate"> <h:form id="vipcreate">
<h:panelGrid columns="2"> <h:panelGrid columns="2">
<h:outputLabel for="hostselect" /> <h:outputLabel value="#{i18n['vip.host']}" for="hostselect" />
<p:autoComplete label="#{i18n['vip.host']}" id="hostselect" value="#{vipView.vip.host}" completeMethod="#{vipView.usersearch}" converter="#{eventUserConverter}" var="usr" itemValue="#{usr}" itemLabel="#{usr.wholeName}" /> <p:autoComplete id="hostselect" value="#{vipView.vip.host}" completeMethod="#{vipView.usersearch}" converter="#{eventUserConverter}" var="usr" itemValue="#{usr}" itemLabel="#{usr.wholeName}" />
</h:panelGrid> <h:outputLabel for="shortdescr" value="#{i18n['vip.shortdescr']}" />
<p:inputTextarea cols="50" rows="3" value="#{vipView.vip.description}" /> <p:inputTextarea id="shortdescr" cols="50" rows="3" value="#{vipView.vip.shortdescr}" />
<br />
<p:inputTextarea cols="50" rows="6" value="#{vipView.vip.description}" /> <h:outputLabel for="description" value="#{i18n['vip.description']}" />
<br /> <p:inputTextarea id="description" cols="50" rows="6" value="#{vipView.vip.description}" />
</h:panelGrid>
<p:commandButton action="#{vipView.create()}" value="#{i18n['vip.create']}" /> <p:commandButton action="#{vipView.create()}" value="#{i18n['vip.create']}" />
</h:form> </h:form>
......
<?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:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<!-- p:panel here because of http://forum.primefaces.org/viewtopic.php?f=3&t=37866 -->
<p:panel>
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['vip.host']}" for="host" />
<h:outputText id="host" value="#{vipDeliverView.vip.host.wholeName}" />
<h:outputLabel for="description" value="#{i18n['vip.description']}" />
<h:outputText id="description" value="#{vipDeliverView.vip.description}" />
</h:panelGrid>
<h:form>
<p:dataTable value="#{vipDeliverView.products}" var="wra">
<p:column headerText="#{i18n['vipProduct.name']}">
<h:outputText value="#{wra.product.productName}" />
</p:column>
<p:column headerText="#{i18n['vipProduct.quantity']}">
<h:outputText value="#{wra.product.quantity}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="3" />
</h:outputText>
</p:column>
<p:column headerText="#{i18n['vipProduct.delivered']}">
<h:outputText value="#{wra.product.delivered}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="3" />
</h:outputText>
</p:column>
<p:column headerText="#{i18n['vipProduct.deliver']}">
<h:inputText size="7" value="#{wra.deliver}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="2" />
</h:inputText>
</p:column>
</p:dataTable>
<h:outputText value="#{i18n['vipProduct.deliverNotes']}" />
<p:inputTextarea cols="40" rows="3" value="#{vipDeliverView.notes}" />
<br />
<p:commandButton action="#{vipDeliverView.deliverProducts}" value="#{i18n['vipProduct.deliver']}" />
</h:form>
</p:panel>
</h:body>
</html>
\ No newline at end of file
...@@ -14,54 +14,80 @@ ...@@ -14,54 +14,80 @@
<h:form id="vipcreate"> <h:form id="vipcreate">
<h:panelGrid columns="2"> <h:panelGrid columns="2">
<h:outputLabel for="hostselect" /> <h:outputLabel value="#{i18n['vip.host']}" for="hostselect" />
<p:autoComplete label="#{i18n['vip.host']}" id="hostselect" value="#{vipView.vip.host}" completeMethod="#{vipView.usersearch}" converter="#{eventUserConverter}" var="usr" itemValue="#{usr}" itemLabel="#{usr.wholeName}" /> <p:autoComplete id="hostselect" value="#{vipView.vip.host}" completeMethod="#{vipView.usersearch}" converter="#{eventUserConverter}" var="usr" itemValue="#{usr}" itemLabel="#{usr.wholeName}" />
<h:outputLabel for="shortdescr" value="#{i18n['vip.shortdescr']}" />
<p:inputTextarea id="shortdescr" cols="50" rows="3" value="#{vipView.vip.shortdescr}" />
<h:outputLabel for="description" value="#{i18n['vip.description']}" />
<p:inputTextarea id="description" cols="50" rows="6" value="#{vipView.vip.description}" />
</h:panelGrid> </h:panelGrid>
<p:inputTextarea cols="50" rows="3" value="#{vipView.vip.description}" />
<br />
<p:inputTextarea cols="50" rows="6" value="#{vipView.vip.description}" />
<br /> <br />
<p:commandButton action="#{vipView.create()}" value="#{i18n['vip.save']}" /> <p:commandButton action="#{vipView.save()}" value="#{i18n['vip.save']}" />
<br />
<p:dataTable var="prod" value="#{vipView.vipProducts}"> </h:form>
<br />
<h:form>
<p:dataTable editable="true" styleClass="bordertable" id="vipProdList" var="prod" value="#{vipView.vipProducts}">
<p:ajax event="rowEdit" listener="#{vipView.productRowEdit}" /> <p:ajax event="rowEdit" listener="#{vipView.productRowEdit}" />
<p:ajax event="rowEditCancel" listener="#{vipView.productRowEditCancel}" /> <p:ajax event="rowEditCancel" listener="#{vipView.productRowEditCancel}" />
<p:column> <p:column headerText="#{i18n['vipProduct.name']}">
<p:cellEditor> <ui:fragment rendered="#{empty prod.id}">
<p:inputText value="#{prod.name}" />
<br />
<p:selectOneMenu value="#{prod.product}" converter="#{productConverter}">
<f:selectItem itemLabel="---" itemValue="0" />
<f:selectItems value="#{vipView.eventProducts}" var="p" itemLabel="#{p.name}" />
</p:selectOneMenu>
</ui:fragment>
<p:cellEditor rendered="#{not empty prod.id}">
<f:facet name="output"> <f:facet name="output">
<h:outputText value="#{prod.productName}" /> <h:outputText value="#{prod.productName}" />
</f:facet> </f:facet>
<f:facet name="input"> <f:facet name="input">
<p:inputText value="#{prod.name}" /> <p:inputText value="#{prod.name}" />
<br /> <br />
<p:selectOneMenu value="#{prod.product}" var="p" converter="#{productConverter}"> <p:selectOneMenu value="#{prod.product}" converter="#{productConverter}">
<f:selectItem itemLabel="---" itemValue="0" /> <f:selectItem itemLabel="---" itemValue="0" />
<f:selectItems value="#{vipView.eventProducts}" itemValue="#{p.name}" /> <f:selectItems value="#{vipView.eventProducts}" var="p" itemLabel="#{p.name}" />
</p:selectOneMenu> </p:selectOneMenu>
</f:facet> </f:facet>
</p:cellEditor> </p:cellEditor>
</p:column> </p:column>
<p:column> <p:column style="width: 120px;" headerText="#{i18n['vipProduct.quantity']}">
<p:cellEditor> <h:inputText size="15" rendered="#{empty prod.id}" value="#{prod.quantity}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="3" />
</h:inputText>
<p:cellEditor rendered="#{not empty prod.id}">
<f:facet name="output"> <f:facet name="output">
<h:outputText value="#{prod.quantity}"> <h:outputText value="#{prod.quantity}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="3" /> <f:convertNumber minFractionDigits="0" maxFractionDigits="3" />
</h:outputText> </h:outputText>
</f:facet> </f:facet>
<f:facet name="input"> <f:facet name="input">
<h:outputText value="#{prod.quantity}" /> <h:inputText size="15" value="#{prod.quantity}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="3" />
</h:inputText>
</f:facet> </f:facet>
</p:cellEditor> </p:cellEditor>
</p:column> </p:column>
<p:column headerText="#{i18n['vipProduct.delivered']}">
<p:column style="width:32px"> <h:outputText rendered="#{not empty prod.id}" value="#{prod.delivered}">
<p:rowEditor /> <f:convertNumber minFractionDigits="0" maxFractionDigits="3" />
</h:outputText>
</p:column>
<p:column style="width: 90px;">
<p:rowEditor rendered="#{not empty prod.id}" />
<p:commandButton action="#{vipView.createProduct()}" update="vipProdList" value="#{i18n['vipProduct.create']}" rendered="#{empty prod.id}" />
</p:column>
<p:column style="width: 35px;">
<p:commandButton rendered="#{not empty prod.id}" onclick="return confirm('#{i18n['vipProduct.deleteProductConfirm']}')" action="#{vipView.deleteProduct()}" update="vipProdList" icon="ui-icon-close" />
</p:column> </p:column>
</p:dataTable> </p:dataTable>
</h:form> </h:form>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
......
...@@ -11,7 +11,10 @@ ...@@ -11,7 +11,10 @@
<ui:define name="content"> <ui:define name="content">
<h:form>
<h:link rendered="#{vipListView.canCreate()}" outcome="/vip/create" value="#{i18n['vip.createNew']}" />
<br />
<h:form id="vipform">
<p:dataTable id="vip" value="#{vipListView.viplist}" widgetVar="viplist" styleClass="moya_datatable4" var="vip" filteredValue="#{vipListView.filteredVips}"> <p:dataTable id="vip" value="#{vipListView.viplist}" widgetVar="viplist" styleClass="moya_datatable4" var="vip" filteredValue="#{vipListView.filteredVips}">
<f:facet name="header"> <f:facet name="header">
<p:outputPanel> <p:outputPanel>
...@@ -23,10 +26,13 @@ ...@@ -23,10 +26,13 @@
<h:outputText value="#{vip.host.wholeName}" /> <h:outputText value="#{vip.host.wholeName}" />
</p:column> </p:column>
<p:column headerText="#{i18n['vip.description']}" filterBy="#{vip.description}" filterMatchMode="contains"> <p:column headerText="#{i18n['vip.description']}" filterBy="#{vip.description}" filterMatchMode="contains">
<h:outputText value="#{vip.shortDisplayDescr}" title="#{vip.description}" /> <h:outputText id="vipdescr" value="#{vip.shortDisplayDescr}" title="#{vip.description}" />
<p:tooltip id="toolTipVipdescr" for="vipdescr" value="#{vip.description}" />
</p:column> </p:column>
<p:column headerText="#{i18n['vip.products']} | #{i18n['vip.productQuantity']} | #{i18n['vip.productDelivered']}"> <p:column filterBy="#{vip.searchableProductnames}" filterMatchMode="contains" headerText="#{i18n['vip.products']} | #{i18n['vip.productQuantity']} | #{i18n['vip.productDelivered']}">
<h:dataTable border="0" var="prod" value="#{vip.products}" > <h:dataTable border="0" var="prod" value="#{vip.products}">
<p:column> <p:column>
<h:outputText title="#{prod.notes}" value="#{prod.productName}" /> <h:outputText title="#{prod.notes}" value="#{prod.productName}" />
</p:column> </p:column>
...@@ -42,6 +48,12 @@ ...@@ -42,6 +48,12 @@
</p:column> </p:column>
</h:dataTable> </h:dataTable>
</p:column> </p:column>
<p:column>
<p:commandButton id="delivebtn" rendered="#{not empty vip.id}" value="#{i18n['vip.deliver']}" actionListener="#{vipListView.deliverDialog}">
<p:ajax event="dialogReturn" listener="#{vipListView.updateViplist()}" update="vip" />
</p:commandButton>
</p:column>
<p:column> <p:column>
<h:link outcome="/vip/edit" value="#{i18n['vip.edit']}"> <h:link outcome="/vip/edit" value="#{i18n['vip.edit']}">
<f:param name="id" value="#{vip.id}" /> <f:param name="id" value="#{vip.id}" />
......
...@@ -40,7 +40,7 @@ public abstract class GenericCDIView implements Serializable { ...@@ -40,7 +40,7 @@ public abstract class GenericCDIView implements Serializable {
private static final long serialVersionUID = -4000065015178815761L; private static final long serialVersionUID = -4000065015178815761L;
@Inject @Inject
private Conversation conversation; protected Conversation conversation;
private static final Logger logger = LoggerFactory.getLogger(GenericCDIView.class); private static final Logger logger = LoggerFactory.getLogger(GenericCDIView.class);
......
package fi.codecrew.moya.web.cdiview.vip;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Named;
import org.primefaces.context.RequestContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.VipBeanLocal;
import fi.codecrew.moya.model.Vip;
import fi.codecrew.moya.model.VipProduct;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
/**
* Created by jkj on 2015-01-11.
*/
@Named
@ConversationScoped
public class VipDeliverView extends GenericCDIView {
/**
*
*/
private static final long serialVersionUID = 1L;
private List<VipProductWrapper> products;
@EJB
private VipBeanLocal vipbean;
public List<VipProductWrapper> getProducts() {
if (products == null && vip != null) {
products = VipProductWrapper.wrap(vip.getProducts());
}
return products;
}
private Vip vip;
private static final Logger logger = LoggerFactory.getLogger(VipDeliverView.class);
private String notes;
public Vip getVip() {
return vip;
}
public void deliverProducts() {
for (VipProductWrapper p : products) {
logger.info("Product {}, count: {}", p.getProduct().getProductName(), p.getDeliver());
if (p.getDeliver().compareTo(BigDecimal.ZERO) > 0) {
vipbean.createDelivery(p.getProduct(), p.getDeliver(), notes);
}
}
notes = null;
vip = null;
products = null;
RequestContext.getCurrentInstance().closeDialog(null);
}
public void setVip(Vip vip) {
this.vip = vip;
products = null;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
public static class VipProductWrapper
{
private final VipProduct product;
private BigDecimal deliver;
public VipProductWrapper(VipProduct prod) {
this.product = prod;
setDeliver(product.getQuantity().subtract(product.getDelivered()));
}
public static List<VipProductWrapper> wrap(List<VipProduct> products) {
List<VipProductWrapper> ret = new ArrayList<>();
for (VipProduct p : products) {
ret.add(new VipProductWrapper(p));
}
return ret;
}
public VipProduct getProduct() {
return product;
}
public BigDecimal getDeliver() {
return deliver;
}
public void setDeliver(BigDecimal deliver) {
this.deliver = deliver;
}
}
}
package fi.codecrew.moya.web.cdiview.vip; package fi.codecrew.moya.web.cdiview.vip;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
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;
import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import org.primefaces.context.RequestContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.VipBeanLocal; import fi.codecrew.moya.beans.VipBeanLocal;
import fi.codecrew.moya.enums.apps.VipPermission; import fi.codecrew.moya.enums.apps.VipPermission;
import fi.codecrew.moya.model.Vip; import fi.codecrew.moya.model.Vip;
...@@ -27,13 +35,42 @@ public class VipListView extends PaginationView<Vip> { ...@@ -27,13 +35,42 @@ public class VipListView extends PaginationView<Vip> {
private ListDataModel<Vip> viplist; private ListDataModel<Vip> viplist;
private List<Vip> filteredVips; private List<Vip> filteredVips;
@Inject
private VipDeliverView deliverView;
private static final Logger logger = LoggerFactory.getLogger(VipListView.class);
public void initView() { public void initView() {
if (super.requirePermissions(VipPermission.VIEW) && viplist == null) { if (super.requirePermissions(VipPermission.VIEW) && viplist == null) {
viplist = new ListDataModel<Vip>(vipBean.getAvailableVips()); viplist = new ListDataModel<Vip>(vipBean.getAvailableVips());
filteredVips = null;
super.beginConversation(); super.beginConversation();
} }
} }
public boolean canCreate() {
return super.hasPermission(VipPermission.EDIT);
}
public void updateViplist() {
viplist = null;
initView();
}
public void deliverDialog() {
getDeliverView().setVip(viplist.getRowData());
logger.info("Set vip in deliverView to {}", deliverView.getVip());
Map<String, Object> options = new HashMap<>();
options.put("modal", true);
Map<String, List<String>> params = null;
if (conversation.getId() != null) {
params = new HashMap<>();
params.put("cid", Arrays.asList(conversation.getId()));
}
RequestContext.getCurrentInstance().openDialog("/vip/deliver", options, params);
}
public ListDataModel<Vip> getViplist() { public ListDataModel<Vip> getViplist() {
return viplist; return viplist;
} }
...@@ -50,4 +87,12 @@ public class VipListView extends PaginationView<Vip> { ...@@ -50,4 +87,12 @@ public class VipListView extends PaginationView<Vip> {
this.filteredVips = filteredVips; this.filteredVips = filteredVips;
} }
public VipDeliverView getDeliverView() {
return deliverView;
}
public void setDeliverView(VipDeliverView deliverView) {
this.deliverView = deliverView;
}
} }
package fi.codecrew.moya.web.cdiview.vip; package fi.codecrew.moya.web.cdiview.vip;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped; import javax.enterprise.context.ConversationScoped;
import javax.enterprise.context.RequestScoped;
import javax.faces.model.ListDataModel; import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -42,6 +43,7 @@ public class VipView extends GenericCDIView { ...@@ -42,6 +43,7 @@ public class VipView extends GenericCDIView {
private Vip vip; private Vip vip;
private Integer id; private Integer id;
@EJB @EJB
private UserBeanLocal userbean; private UserBeanLocal userbean;
@EJB @EJB
...@@ -59,6 +61,19 @@ public class VipView extends GenericCDIView { ...@@ -59,6 +61,19 @@ public class VipView extends GenericCDIView {
} }
} }
public void createProduct() {
VipProduct l = vipProducts.getRowData();
vip = vipBean.createProduct(l);
vipProducts = null;
}
public void deleteProduct() {
VipProduct l = vipProducts.getRowData();
logger.info("Deleting product {}", l);
vip = vipBean.deleteProduct(l);
vipProducts = null;
}
public List<Product> getEventProducts() { public List<Product> getEventProducts() {
return productBean.getProducts(); return productBean.getProducts();
} }
...@@ -67,7 +82,10 @@ public class VipView extends GenericCDIView { ...@@ -67,7 +82,10 @@ public class VipView extends GenericCDIView {
public ListDataModel<VipProduct> getVipProducts() { public ListDataModel<VipProduct> getVipProducts() {
if (vipProducts == null && vip != null) { if (vipProducts == null && vip != null) {
vipProducts = new ListDataModel<>(vip.getProducts()); ArrayList<VipProduct> li = new ArrayList<>();
li.add(new VipProduct(vip));
li.addAll(vip.getProducts());
vipProducts = new ListDataModel<>(li);
} }
return vipProducts; return vipProducts;
} }
...@@ -81,7 +99,8 @@ public class VipView extends GenericCDIView { ...@@ -81,7 +99,8 @@ public class VipView extends GenericCDIView {
} }
public void productRowEdit() { public void productRowEdit() {
logger.warn("Editing product: {}", getVipProducts().getRowData()); vip = vipBean.saveProduct(getVipProducts().getRowData());
// logger.warn("Editing product: {}", getVipProducts().getRowData());
} }
...@@ -90,6 +109,11 @@ public class VipView extends GenericCDIView { ...@@ -90,6 +109,11 @@ public class VipView extends GenericCDIView {
} }
public void save() {
vip = vipBean.save(vip);
vipProducts = null;
}
public List<EventUser> usersearch(String search) { public List<EventUser> usersearch(String search) {
UserSearchQuery usq = new UserSearchQuery(); UserSearchQuery usq = new UserSearchQuery();
usq.setSearch(search); usq.setSearch(search);
...@@ -101,7 +125,7 @@ public class VipView extends GenericCDIView { ...@@ -101,7 +125,7 @@ public class VipView extends GenericCDIView {
public String create() public String create()
{ {
vipBean.create(vip); vipBean.create(vip);
return "/vip/edit?faces-redirect=true"; return "/vip/edit";
} }
public Vip getVip() { public Vip getVip() {
......
...@@ -27,6 +27,8 @@ adduser.update = Update profile picture ...@@ -27,6 +27,8 @@ adduser.update = Update profile picture
adduser.welcome = Welcome adduser.welcome = Welcome
adduser.welcometext = Here you can add new user or update your current user profile image. Please select desired action below. adduser.welcometext = Here you can add new user or update your current user profile image. Please select desired action below.
barcodeReader.readBarcode = Lue viivakoodi
bill.billAmount = Tilauksen summa (sis. alv) bill.billAmount = Tilauksen summa (sis. alv)
bill.billNumber = Tilausnumero bill.billNumber = Tilausnumero
bill.cancel = Cancel bill bill.cancel = Cancel bill
...@@ -141,6 +143,7 @@ error.contact = If this happens again, contact Info with the following code: ...@@ -141,6 +143,7 @@ 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.
etickets.eticketcode = Lippu etickets.eticketcode = Lippu
etickets.mailSended = Lippu l\u00E4hetetty s\u00E4hk\u00F6postiisi
etickets.place = Paikka etickets.place = Paikka
etickets.placeinfo = Paikkatiedot etickets.placeinfo = Paikkatiedot
etickets.placemap = Paikat kartalla etickets.placemap = Paikat kartalla
...@@ -215,25 +218,34 @@ global.save = Save ...@@ -215,25 +218,34 @@ global.save = Save
httpsession.creationTime = Created httpsession.creationTime = Created
incomingFlow.count = M\u00E4\u00E4r\u00E4
incomingFlow.leftCount = Noutamatta
incomingView.attach = Liit\u00E4 incomingView.attach = Liit\u00E4
incomingView.attachDialogTitle = Liit\u00E4 koodi k\u00E4ytt\u00E4j\u00E4\u00E4n incomingView.attachDialogTitle = Liit\u00E4 koodi k\u00E4ytt\u00E4j\u00E4\u00E4n
incomingView.cancel = Peruuta incomingView.cancel = Peruuta
incomingflow.allGiven = Merkitty {0} lippu(a) annetuksi.
incomingflow.alreadyShowingUser.message = Piipattu k\u00E4ytt\u00E4j\u00E4 on jo n\u00E4kyviss\u00E4 incomingflow.alreadyShowingUser.message = Piipattu k\u00E4ytt\u00E4j\u00E4 on jo n\u00E4kyviss\u00E4
incomingflow.alreadyShowingUser.title = Valmiiksi valittu incomingflow.alreadyShowingUser.title = Valmiiksi valittu
incomingflow.cardCodes = Kortin koodit incomingflow.cardCodes = Kortin koodit
incomingflow.cardfiling.label = Card filing: incomingflow.cardfiling.label = Card filing:
incomingflow.changereader = Vaihda / valitse lukija
incomingflow.codeattached.message = Piipattu koodi liitetty n\u00E4ytett\u00E4v\u00E4\u00E4n korttiin incomingflow.codeattached.message = Piipattu koodi liitetty n\u00E4ytett\u00E4v\u00E4\u00E4n korttiin
incomingflow.codeattached.title = Koodi liittetty incomingflow.codeattached.title = Koodi liittetty
incomingflow.giveplace = Merkitse annetuksi incomingflow.giveplace = Merkitse annetuksi
incomingflow.groupmemberships = Paikkakoodit incomingflow.groupmemberships = Paikkakoodit
incomingflow.invalidbarcode.message = Viivakoodilla ei l\u00F6ytynyt mit\u00E4\u00E4n incomingflow.invalidbarcode.message = Viivakoodilla ei l\u00F6ytynyt mit\u00E4\u00E4n
incomingflow.invalidbarcode.title = virheellinen koodi incomingflow.invalidbarcode.title = virheellinen koodi
incomingflow.markEverythingGiven = Anna kaikki antamattomat tuotteet
incomingflow.placesummary = Paikkayhteenveto
incomingflow.printedCard = Kortti incomingflow.printedCard = Kortti
incomingflow.usereditor = K\u00E4ytt\u00E4j\u00E4 incomingflow.usereditor = K\u00E4ytt\u00E4j\u00E4
incomingflow.usereditor.info = Tiedot incomingflow.usereditor.info = Tiedot
incomingflow.usereditor.picture = Kuvanotto incomingflow.usereditor.picture = Kuvanotto
infoview.multisearch = K\u00E4ytt\u00E4j\u00E4haku
invite.permissionDenied = Sinulla ei ole oikeutta luovuttaa paikkaa eteenp\u00E4in. invite.permissionDenied = Sinulla ei ole oikeutta luovuttaa paikkaa eteenp\u00E4in.
invite.userLoginSuccessfull = Kutsu vastaanotettu onnistuneesti invite.userLoginSuccessfull = Kutsu vastaanotettu onnistuneesti
invite.userLoginUnSuccessfull = Kirjautuminen ep\u00E4onnistui invite.userLoginUnSuccessfull = Kirjautuminen ep\u00E4onnistui
...@@ -381,6 +393,7 @@ productshop.plusOne = +1 ...@@ -381,6 +393,7 @@ productshop.plusOne = +1
productshop.plusTen = +10 productshop.plusTen = +10
reader.autopoll = Jatkuva lukijan seuraaminen reader.autopoll = Jatkuva lukijan seuraaminen
reader.noReader = Ei valittua lukijaa
refresh = P\u00E4ivit\u00E4 refresh = P\u00E4ivit\u00E4
...@@ -410,7 +423,9 @@ shop.unitdiscount = Alennus ...@@ -410,7 +423,9 @@ shop.unitdiscount = Alennus
submenu.NotImplementedYet = Not implemented submenu.NotImplementedYet = Not implemented
submenu.admin.adduser = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys submenu.admin.adduser = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys
submenu.admin.adduser.index = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys submenu.admin.adduser.index = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys
submenu.admin.incoming.index = Sis\u00E4\u00E4ntulo
submenu.frontpage = Frontpage submenu.frontpage = Frontpage
submenu.info.cardlessIncoming = Sis\u00E4\u00E4ntulo
submenu.info.foodwave.foodwaveshop = Ruokakauppa submenu.info.foodwave.foodwaveshop = Ruokakauppa
submenu.info.incoming = Laaja sis\u00E4\u00E4ntulon\u00E4kym\u00E4 submenu.info.incoming = Laaja sis\u00E4\u00E4ntulon\u00E4kym\u00E4
submenu.info.index = Infon\u00E4kym\u00E4 submenu.info.index = Infon\u00E4kym\u00E4
...@@ -426,6 +441,7 @@ submenu.shop.createBill = Osta lippuja ...@@ -426,6 +441,7 @@ submenu.shop.createBill = Osta lippuja
subnavi.cards = \u0009\u0009 subnavi.cards = \u0009\u0009
subnavi.info = Info subnavi.info = Info
subnavi.vips = Vippilista
success = Onnistui success = Onnistui
...@@ -447,6 +463,7 @@ user.imageUpload.imageNotFound = Select image to upload ...@@ -447,6 +463,7 @@ user.imageUpload.imageNotFound = Select image to upload
user.info = K\u00E4ytt\u00E4j\u00E4 user.info = K\u00E4ytt\u00E4j\u00E4
user.invite.placeInvite.header = Liit\u00E4 paikka itsellesi user.invite.placeInvite.header = Liit\u00E4 paikka itsellesi
user.meta.box.title = Metadata user.meta.box.title = Metadata
user.roles = Pakotetut roolit
user.saveUserSelectableRoles = Tallenna user.saveUserSelectableRoles = Tallenna
user.shirt.L = Unisex L user.shirt.L = Unisex L
user.shirt.LadyL = Ladyfit L user.shirt.LadyL = Ladyfit L
...@@ -470,21 +487,24 @@ usercart.showoverview = Vie tarkastusn\u00E4kym\u00E4\u00E4n ...@@ -470,21 +487,24 @@ usercart.showoverview = Vie tarkastusn\u00E4kym\u00E4\u00E4n
viewlectures.title = Kurssit ja luennot viewlectures.title = Kurssit ja luennot
vip.create = Luo
vip.createNew = Luo uusi
vip.deliver = Toimita
vip.description = Kuvaus
vip.edit = Muokkaa
vip.host = Is\u00E4nt\u00E4
vip.hostsName = Is\u00E4nt\u00E4
vip.productDelivered = Toimitettu
vip.productQuantity = Lkm
vip.products = Tuote
vip.save = Tallenna
vip.shortdescr = Lyhyt kuvaus
vipProduct.create = Lis\u00E4\u00E4
vipProduct.deliver = Toimita
vipProduct.deliverNotes = Huomiot
vipProduct.delivered = Toimitettu
vipProduct.name = Tuote
vipProduct.quantity = Lukum\u00E4\u00E4r\u00E4
yes = Kyll\u00E4 yes = Kyll\u00E4
infoview.multisearch=K\u00E4ytt\u00E4j\u00E4haku
incomingflow.placesummary=Paikkayhteenveto
incomingFlow.leftCount=Noutamatta
incomingflow.markEverythingGiven=Anna kaikki antamattomat tuotteet
submenu.admin.incoming.index=Sis\u00E4\u00E4ntulo
submenu.admin.incoming.printCard=
submenu.info.cardlessIncoming=Sis\u00E4\u00E4ntulo
incomingflow.changereader=Vaihda / valitse lukija
incomingFlow.count=M\u00E4\u00E4r\u00E4
user.birthday=
user.confirmUserToEventAdding=
user.invalidLoginCredentials=
barcodeReader.readBarcode=Lue viivakoodi
incomingflow.allGiven=Merkitty {0} lippu(a) annetuksi.
reader.noReader=Ei valittua lukijaa
etickets.mailSended=Lippu l\u00E4hetetty s\u00E4hk\u00F6postiisi
user.roles=Pakotetut roolit
...@@ -353,6 +353,7 @@ error.contact = If this happens again, contact Info with the following code: ...@@ -353,6 +353,7 @@ 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.
etickets.eticketcode = Ticket etickets.eticketcode = Ticket
etickets.mailSended = Ticket has been sended to your email
etickets.place = Place etickets.place = Place
etickets.placeinfo = Placeinfo etickets.placeinfo = Placeinfo
etickets.placemap = Places on map etickets.placemap = Places on map
...@@ -535,10 +536,14 @@ imagefile.file = Imagefile ...@@ -535,10 +536,14 @@ imagefile.file = Imagefile
importuser.file = File importuser.file = File
importuser.template = Template importuser.template = Template
incomingFlow.count = Count
incomingFlow.leftCount = Ungiven
incomingView.attach = Attach incomingView.attach = Attach
incomingView.attachDialogTitle = Attach code to user incomingView.attachDialogTitle = Attach code to user
incomingView.cancel = Cancel incomingView.cancel = Cancel
incomingflow.allGiven = Marked {0} tickets given.
incomingflow.alreadyShowingUser.message = We are already showing selected user incomingflow.alreadyShowingUser.message = We are already showing selected user
incomingflow.alreadyShowingUser.title = Already selected incomingflow.alreadyShowingUser.title = Already selected
incomingflow.barcode = Barcode incomingflow.barcode = Barcode
...@@ -551,7 +556,9 @@ incomingflow.giveplace = Mark given ...@@ -551,7 +556,9 @@ incomingflow.giveplace = Mark given
incomingflow.groupmemberships = Group memberships incomingflow.groupmemberships = Group memberships
incomingflow.invalidbarcode.message = Nothing found with barcode, you can now add it to the user incomingflow.invalidbarcode.message = Nothing found with barcode, you can now add it to the user
incomingflow.invalidbarcode.title = Invalid code incomingflow.invalidbarcode.title = Invalid code
incomingflow.markEverythingGiven = Give ewerything ungiven stuff
incomingflow.multisearch = Multisearch incomingflow.multisearch = Multisearch
incomingflow.placesummary = Placesummary
incomingflow.printedCard = Card incomingflow.printedCard = Card
incomingflow.search = Search incomingflow.search = Search
incomingflow.ungiveplace = Mark not given incomingflow.ungiveplace = Mark not given
...@@ -562,6 +569,7 @@ incomingflow.usereditor.picture = Picturetake ...@@ -562,6 +569,7 @@ incomingflow.usereditor.picture = Picturetake
infoview.back = Back infoview.back = Back
infoview.computerplace = Computer places infoview.computerplace = Computer places
infoview.multisearch = Usersearch
infoview.shop = Shop infoview.shop = Shop
inventory.product.info = Info inventory.product.info = Info
...@@ -1074,6 +1082,7 @@ reader.description = Description ...@@ -1074,6 +1082,7 @@ reader.description = Description
reader.edit = Edit reader.edit = Edit
reader.identification = Identification reader.identification = Identification
reader.name = Reader name reader.name = Reader name
reader.noReader = No selected reader
reader.save = Save reader.save = Save
reader.select = Select reader reader.select = Select reader
reader.tag = Tag reader.tag = Tag
...@@ -1254,6 +1263,7 @@ submenu.foodwave.list = Foodwaves ...@@ -1254,6 +1263,7 @@ submenu.foodwave.list = Foodwaves
submenu.foodwave.listTemplates = Food provides submenu.foodwave.listTemplates = Food provides
submenu.help = Ticket help submenu.help = Ticket help
submenu.index = Frontpage submenu.index = Frontpage
submenu.info.cardlessIncoming = Incoming
submenu.info.foodwave.foodwaveshop = Foodshop submenu.info.foodwave.foodwaveshop = Foodshop
submenu.info.incoming = Extendet Incomingview submenu.info.incoming = Extendet Incomingview
submenu.info.index = Infoview submenu.info.index = Infoview
...@@ -1328,6 +1338,7 @@ subnavi.info = Info ...@@ -1328,6 +1338,7 @@ subnavi.info = Info
subnavi.products = Products subnavi.products = Products
subnavi.readers = Readers subnavi.readers = Readers
subnavi.roles = Roles subnavi.roles = Roles
subnavi.vips = VIP-list
success = Success success = Success
...@@ -1598,6 +1609,7 @@ user.successfullySaved = Changes saved successfully ...@@ -1598,6 +1609,7 @@ user.successfullySaved = Changes saved successfully
user.superadmin = Superadmin user.superadmin = Superadmin
user.thisIsCurrentImage = Current image user.thisIsCurrentImage = Current image
user.town = City user.town = City
user.unauthenticated = Unauthenticated
user.uploadimage = Send image user.uploadimage = Send image
user.userSelectableRoles = Select one user.userSelectableRoles = Select one
user.username = Username user.username = Username
...@@ -1650,6 +1662,26 @@ viewexpired.title = Login expired. Please login again. ...@@ -1650,6 +1662,26 @@ viewexpired.title = Login expired. Please login again.
viewlectures.title = Courses and lectures viewlectures.title = Courses and lectures
vip.create = Create
vip.createNew = Create new
vip.deliver = Deliver
vip.description = Description
vip.edit = Edit
vip.host = Host
vip.hostsName = Host
vip.productDelivered = Delivered
vip.productQuantity = Qty
vip.products = Product
vip.save = Save
vip.shortdescr = Short description
vipProduct.create = Create
vipProduct.deliver = Deliver
vipProduct.deliverNotes = Notes
vipProduct.delivered = Delivered
vipProduct.name = Product
vipProduct.quantity = Quantity
voting.allcompos.curEntries = # of entries voting.allcompos.curEntries = # of entries
voting.allcompos.descri = Description voting.allcompos.descri = Description
voting.allcompos.description = List of all compos and theirs information. voting.allcompos.description = List of all compos and theirs information.
...@@ -1693,12 +1725,3 @@ voting.create.voteEnd = Voting close ...@@ -1693,12 +1725,3 @@ voting.create.voteEnd = Voting close
voting.create.voteStart = Voting start voting.create.voteStart = Voting start
yes = Yes yes = Yes
infoview.multisearch=Usersearch
incomingflow.placesummary=Placesummary
incomingFlow.leftCount=Ungiven
incomingflow.markEverythingGiven=Give ewerything ungiven stuff
submenu.info.cardlessIncoming=Incoming
incomingFlow.count=Count
incomingflow.allGiven=Marked {0} tickets given.
reader.noReader=No selected reader
etickets.mailSended=Ticket has been sended to your email
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
acc_line.eventuser = Asiakas acc_line.eventuser = Asiakas
acc_line.nick = Nimimerkki acc_line.nick = Nimimerkki
acc_line.place = Paikka
acc_line.product = Tuote acc_line.product = Tuote
acc_line.quantity = M\u00E4\u00E4r\u00E4 acc_line.quantity = M\u00E4\u00E4r\u00E4
acc_line.time = Ostoaika acc_line.time = Ostoaika
...@@ -354,6 +355,7 @@ error.contact = Jos t\u00E4m\u00E4 toistuu, ota seuraava koodi talteen ja ota yh ...@@ -354,6 +355,7 @@ error.contact = Jos t\u00E4m\u00E4 toistuu, ota seuraava koodi talteen ja ota yh
error.error = Olet kohdannut virheen. error.error = Olet kohdannut virheen.
etickets.eticketcode = Lippu etickets.eticketcode = Lippu
etickets.mailSended = Lippu l\u00E4hetetty s\u00E4hk\u00F6postiisi
etickets.place = Paikka etickets.place = Paikka
etickets.placeinfo = Paikkatiedot etickets.placeinfo = Paikkatiedot
etickets.placemap = Paikat kartalla etickets.placemap = Paikat kartalla
...@@ -543,10 +545,14 @@ imagefile.file = Kuvatiedosto ...@@ -543,10 +545,14 @@ imagefile.file = Kuvatiedosto
importuser.file = Tiedosto importuser.file = Tiedosto
importuser.template = Malli importuser.template = Malli
incomingFlow.count = M\u00E4\u00E4r\u00E4
incomingFlow.leftCount = Noutamatta
incomingView.attach = Liit\u00E4 incomingView.attach = Liit\u00E4
incomingView.attachDialogTitle = Liit\u00E4 koodi k\u00E4ytt\u00E4j\u00E4\u00E4n incomingView.attachDialogTitle = Liit\u00E4 koodi k\u00E4ytt\u00E4j\u00E4\u00E4n
incomingView.cancel = Peruuta incomingView.cancel = Peruuta
incomingflow.allGiven = Merkitty {0} lippu(a) annetuksi.
incomingflow.alreadyShowingUser.message = Piipattu k\u00E4ytt\u00E4j\u00E4 on jo n\u00E4kyviss\u00E4 incomingflow.alreadyShowingUser.message = Piipattu k\u00E4ytt\u00E4j\u00E4 on jo n\u00E4kyviss\u00E4
incomingflow.alreadyShowingUser.title = Valmiiksi valittu incomingflow.alreadyShowingUser.title = Valmiiksi valittu
incomingflow.barcode = Viivakoodi incomingflow.barcode = Viivakoodi
...@@ -559,7 +565,9 @@ incomingflow.giveplace = Merkitse annetuksi ...@@ -559,7 +565,9 @@ incomingflow.giveplace = Merkitse annetuksi
incomingflow.groupmemberships = Konepaikat sek\u00E4 liput incomingflow.groupmemberships = Konepaikat sek\u00E4 liput
incomingflow.invalidbarcode.message = Piipatulla koodilla ei l\u00F6ytynyt mit\u00E4\u00E4n, voit lis\u00E4t\u00E4 koodin k\u00E4ytt\u00E4j\u00E4\u00E4n incomingflow.invalidbarcode.message = Piipatulla koodilla ei l\u00F6ytynyt mit\u00E4\u00E4n, voit lis\u00E4t\u00E4 koodin k\u00E4ytt\u00E4j\u00E4\u00E4n
incomingflow.invalidbarcode.title = Virheellinen koodi incomingflow.invalidbarcode.title = Virheellinen koodi
incomingflow.markEverythingGiven = Anna kaikki antamattomat tuotteet
incomingflow.multisearch = Monihaku incomingflow.multisearch = Monihaku
incomingflow.placesummary = Paikkayhteenveto
incomingflow.printedCard = Kortti incomingflow.printedCard = Kortti
incomingflow.search = Etsi incomingflow.search = Etsi
incomingflow.ungiveplace = Ei olekkaan annettu incomingflow.ungiveplace = Ei olekkaan annettu
...@@ -572,6 +580,7 @@ index.title = Etusivu ...@@ -572,6 +580,7 @@ index.title = Etusivu
infoview.back = Takaisin infoview.back = Takaisin
infoview.computerplace = Tietokonepaikat infoview.computerplace = Tietokonepaikat
infoview.multisearch = K\u00E4ytt\u00E4j\u00E4haku
infoview.shop = Kauppa infoview.shop = Kauppa
inventory.product.info = Info inventory.product.info = Info
...@@ -1059,6 +1068,7 @@ reader.description = Kuvaus ...@@ -1059,6 +1068,7 @@ reader.description = Kuvaus
reader.edit = Muokkaa reader.edit = Muokkaa
reader.identification = Tunniste reader.identification = Tunniste
reader.name = Lukijan nimi reader.name = Lukijan nimi
reader.noReader = Ei valittua lukijaa
reader.save = Tallenna reader.save = Tallenna
reader.select = Valitse lukija reader.select = Valitse lukija
reader.tag = Tag reader.tag = Tag
...@@ -1234,6 +1244,7 @@ submenu.foodwave.list = Ruokatilaukset ...@@ -1234,6 +1244,7 @@ submenu.foodwave.list = Ruokatilaukset
submenu.frontpage = Etusivu submenu.frontpage = Etusivu
submenu.help = Lippuopas submenu.help = Lippuopas
submenu.index = Etusivu submenu.index = Etusivu
submenu.info.cardlessIncoming = Sis\u00E4\u00E4ntulo
submenu.info.foodwave.foodwaveshop = Ruokakauppa submenu.info.foodwave.foodwaveshop = Ruokakauppa
submenu.info.incoming = Laaja Sis\u00E4\u00E4ntulon\u00E4kym\u00E4 submenu.info.incoming = Laaja Sis\u00E4\u00E4ntulon\u00E4kym\u00E4
submenu.info.index = Infon\u00E4kym\u00E4 submenu.info.index = Infon\u00E4kym\u00E4
...@@ -1311,6 +1322,7 @@ subnavi.info = Info ...@@ -1311,6 +1322,7 @@ subnavi.info = Info
subnavi.products = Tuotteet subnavi.products = Tuotteet
subnavi.readers = Lukijat subnavi.readers = Lukijat
subnavi.roles = Roolit subnavi.roles = Roolit
subnavi.vips = Vippilista
success = Onnistui success = Onnistui
...@@ -1581,6 +1593,7 @@ user.successfullySaved = Tiedot tallennettu onnistuneesti ...@@ -1581,6 +1593,7 @@ user.successfullySaved = Tiedot tallennettu onnistuneesti
user.superadmin = Superadmin user.superadmin = Superadmin
user.thisIsCurrentImage = Nykyinen kuva user.thisIsCurrentImage = Nykyinen kuva
user.town = Kaupunki user.town = Kaupunki
user.unauthenticated = Kirjautumaton
user.uploadimage = L\u00E4het\u00E4 kuva user.uploadimage = L\u00E4het\u00E4 kuva
user.userSelectableRoles = Valitse yksi user.userSelectableRoles = Valitse yksi
user.username = K\u00E4ytt\u00E4j\u00E4tunnus user.username = K\u00E4ytt\u00E4j\u00E4tunnus
...@@ -1632,6 +1645,26 @@ viewexpired.title = N\u00E4kym\u00E4 on vanhentunut ...@@ -1632,6 +1645,26 @@ viewexpired.title = N\u00E4kym\u00E4 on vanhentunut
viewlectures.title = Kurssit ja luennot viewlectures.title = Kurssit ja luennot
vip.create = Luo
vip.createNew = Luo uusi
vip.deliver = Toimita
vip.description = Kuvaus
vip.edit = Muokkaa
vip.host = Is\u00E4nt\u00E4
vip.hostsName = Is\u00E4nt\u00E4
vip.productDelivered = Toimitettu
vip.productQuantity = Lkm
vip.products = Tuote
vip.save = Tallenna
vip.shortdescr = Lyhyt kuvaus
vipProduct.create = Lis\u00E4\u00E4
vipProduct.deliver = Toimita
vipProduct.deliverNotes = Huomiot
vipProduct.delivered = Toimitettu
vipProduct.name = Tuote
vipProduct.quantity = Lukum\u00E4\u00E4r\u00E4
voting.allcompos.curEntries = Entryja voting.allcompos.curEntries = Entryja
voting.allcompos.descri = Kuvaus voting.allcompos.descri = Kuvaus
voting.allcompos.description = Compojen informaatiot. voting.allcompos.description = Compojen informaatiot.
...@@ -1675,14 +1708,3 @@ voting.create.voteEnd = \u00C4\u00E4nestys kiinni ...@@ -1675,14 +1708,3 @@ voting.create.voteEnd = \u00C4\u00E4nestys kiinni
voting.create.voteStart = \u00C4\u00E4nestys auki voting.create.voteStart = \u00C4\u00E4nestys auki
yes = Kyll\u00E4 yes = Kyll\u00E4
acc_line.place=Paikka
infoview.multisearch=K\u00E4ytt\u00E4j\u00E4haku
incomingflow.placesummary=Paikkayhteenveto
incomingFlow.leftCount=Noutamatta
user.unauthenticated=
incomingflow.markEverythingGiven=Anna kaikki antamattomat tuotteet
submenu.info.cardlessIncoming=Sis\u00E4\u00E4ntulo
incomingFlow.count=M\u00E4\u00E4r\u00E4
incomingflow.allGiven=Merkitty {0} lippu(a) annetuksi.
reader.noReader=Ei valittua lukijaa
etickets.mailSended=Lippu l\u00E4hetetty s\u00E4hk\u00F6postiisi
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!