Commit e004eb41 by Tuomas Riihimäki

Adding of multiple vip users with same products at once

1 parent 782938d5
...@@ -34,4 +34,6 @@ public interface VipBeanLocal { ...@@ -34,4 +34,6 @@ public interface VipBeanLocal {
VipProductDelivery createDelivery(VipProduct prod, BigDecimal quantity, String notes); VipProductDelivery createDelivery(VipProduct prod, BigDecimal quantity, String notes);
void create(List<Vip> vipList);
} }
...@@ -26,10 +26,25 @@ import javax.ejb.EJB; ...@@ -26,10 +26,25 @@ import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import fi.codecrew.moya.enums.apps.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.codecrew.moya.enums.apps.BillPermission;
import fi.codecrew.moya.enums.apps.CompoPermission;
import fi.codecrew.moya.enums.apps.ContentPermission;
import fi.codecrew.moya.enums.apps.EventPermission;
import fi.codecrew.moya.enums.apps.LecturePermission;
import fi.codecrew.moya.enums.apps.LicensePermission;
import fi.codecrew.moya.enums.apps.MapPermission;
import fi.codecrew.moya.enums.apps.NetworkAssociationPermission;
import fi.codecrew.moya.enums.apps.PmsCodePermission;
import fi.codecrew.moya.enums.apps.PollPermission;
import fi.codecrew.moya.enums.apps.ShopPermission;
import fi.codecrew.moya.enums.apps.SpecialPermission;
import fi.codecrew.moya.enums.apps.TerminalPermission;
import fi.codecrew.moya.enums.apps.TournamentPermission;
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;
...@@ -239,7 +254,9 @@ public class MenuBean implements MenuBeanLocal { ...@@ -239,7 +254,9 @@ public class MenuBean implements MenuBeanLocal {
MenuNavigation vips = adminuser.addPage(null, null); MenuNavigation vips = adminuser.addPage(null, null);
vips.setKey("subnavi.vips"); vips.setKey("subnavi.vips");
vips.addPage(menuitemfacade.findOrCreate("/vip/viplist"), VipPermission.VIEW); vips.addPage(menuitemfacade.findOrCreate("/vip/viplist"), VipPermission.VIEW);
vips.addPage(menuitemfacade.findOrCreate("/vip/create"), VipPermission.VIEW).setVisible(false); vips.addPage(menuitemfacade.findOrCreate("/vip/create"), VipPermission.EDIT);
vips.addPage(menuitemfacade.findOrCreate("/vip/multiadd"), VipPermission.EDIT);
vips.addPage(menuitemfacade.findOrCreate("/vip/deliver"), VipPermission.VIEW).setVisible(false);
vips.addPage(menuitemfacade.findOrCreate("/vip/edit"), 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);
......
package fi.codecrew.moya.beans; package fi.codecrew.moya.beans;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.VipProductDeliveryFacade;
...@@ -9,20 +22,6 @@ import fi.codecrew.moya.model.VipProduct; ...@@ -9,20 +22,6 @@ import fi.codecrew.moya.model.VipProduct;
import fi.codecrew.moya.model.VipProductDelivery; 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.LoggerFactory;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Stateless @Stateless
@LocalBean @LocalBean
...@@ -58,6 +57,14 @@ public class VipBean implements VipBeanLocal { ...@@ -58,6 +57,14 @@ public class VipBean implements VipBeanLocal {
@Override @Override
@RolesAllowed({ VipPermission.S_EDIT }) @RolesAllowed({ VipPermission.S_EDIT })
public void create(List<Vip> vipList) {
for (Vip v : vipList) {
create(v);
}
}
@Override
@RolesAllowed({ VipPermission.S_EDIT })
public void create(Vip vip) { public void create(Vip vip) {
vip.setCreated(new Date()); vip.setCreated(new Date());
vip.setCreator(permbean.getCurrentUser()); vip.setCreator(permbean.getCurrentUser());
...@@ -149,4 +156,6 @@ public class VipBean implements VipBeanLocal { ...@@ -149,4 +156,6 @@ public class VipBean implements VipBeanLocal {
return vpd; return vpd;
} }
} }
package fi.codecrew.moya.model; package fi.codecrew.moya.model;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date; import java.util.Date;
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;
...@@ -69,7 +69,7 @@ public class Vip extends GenericEntity { ...@@ -69,7 +69,7 @@ public class Vip extends GenericEntity {
@JoinColumn(name = HOST_EVENT_USER_ID_COLUMN, referencedColumnName = EventUser.ID_COLUMN, nullable = false) @JoinColumn(name = HOST_EVENT_USER_ID_COLUMN, referencedColumnName = EventUser.ID_COLUMN, nullable = false)
private EventUser host; private EventUser host;
@OneToMany(mappedBy = "vip") @OneToMany(mappedBy = "vip", cascade = CascadeType.PERSIST)
private List<VipProduct> products = new ArrayList<>(); private List<VipProduct> products = new ArrayList<>();
public String getShortDisplayDescr() { public String getShortDisplayDescr() {
......
...@@ -54,6 +54,14 @@ public class VipProduct extends GenericEntity { ...@@ -54,6 +54,14 @@ public class VipProduct extends GenericEntity {
this.vip = v; this.vip = v;
} }
public VipProduct(Vip vip, VipProduct prod) {
this.vip = vip;
this.name = prod.name;
this.notes = prod.notes;
this.product = prod.product;
this.quantity = prod.quantity;
}
/** /**
* 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
* *
...@@ -74,13 +82,11 @@ public class VipProduct extends GenericEntity { ...@@ -74,13 +82,11 @@ public class VipProduct extends GenericEntity {
* *
* @return * @return
*/ */
public boolean isAllDelivered() public boolean isAllDelivered() {
{
return quantity.compareTo(getDelivered()) <= 0; return quantity.compareTo(getDelivered()) <= 0;
} }
public BigDecimal getDelivered() public BigDecimal getDelivered() {
{
BigDecimal delivered = BigDecimal.ZERO; BigDecimal delivered = BigDecimal.ZERO;
if (deliveries != null) { if (deliveries != null) {
for (VipProductDelivery d : deliveries) { for (VipProductDelivery d : deliveries) {
......
...@@ -12,8 +12,6 @@ ...@@ -12,8 +12,6 @@
<ui:define name="content"> <ui:define name="content">
<h:link outcome="/vip/viplist" value="#{i18n['vip.backToList']}" />
<h:form id="vipcreate"> <h:form id="vipcreate">
<h:panelGrid columns="2"> <h:panelGrid columns="2">
<h:outputLabel value="#{i18n['vip.host']}" for="hostselect" /> <h:outputLabel value="#{i18n['vip.host']}" for="hostselect" />
......
<?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:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
<f:event type="preRenderView" listener="#{vipMultiadd.initMultiadd}" />
</f:metadata>
<ui:define name="content">
<h:form id="vipcreate">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['vip.host']}" for="hostselect" />
<p:autoComplete id="hostselect" value="#{vipMultiadd.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="#{vipMultiadd.vip.shortdescr}" />
<h:outputLabel for="description" value="#{i18n['vip.description']}" />
<p:inputTextarea id="description" cols="50" rows="6" value="#{vipMultiadd.vip.description}" />
</h:panelGrid>
<br />
<p:commandButton update=":viplist :vipcreate" action="#{vipMultiadd.addEntry()}" value="#{i18n['vip.addEntry']}" />
<br />
</h:form>
<h2>
<h:outputText value="#{i18n['viplist.multiaddUsers']}" />
</h2>
<h:form id="viplist">
<p:dataTable value="#{vipMultiadd.vips}" var="vip">
<p:column headerText="#{i18n['vip.hostsName']}" style="width: 140px;">
<h:outputText id="viphostsname" value="#{vip.host.wholeName}" />
<p:tooltip id="viphostsnamephone" for="viphostsname" value="#{vip.host.phone}" />
</p:column>
<!-- p:column headerText="#{i18n['vip.description']}" filterBy="#{vip.description}" filterMatchMode="contains" -->
<p:column headerText="#{i18n['vip.shortdescr']}" style="width: 170px;">
<h:outputText id="vipdescr" value="#{vip.shortDisplayDescr}" title="#{vip.description}" />
</p:column>
<p:column headerText="#{i18n['vip.description']}">
<h:outputText value="#{vip.description}" />
</p:column>
<p:column>
<p:commandButton update=":viplist :vipcreate" action="#{vipMultiadd.removeEntry()}" value="#{i18n['vip.deleteEntry']}" />
</p:column>
</p:dataTable>
</h:form>
<h2>
<h:outputText value="#{i18n['viplist.multiaddProducts']}" />
</h2>
<h:form>
<p:dataTable editable="true" styleClass="bordertable" id="vipProdList" var="prod" value="#{vipMultiadd.vipProducts}">
<p:column headerText="#{i18n['vipProduct.name']}">
<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">
<h:outputText value="#{prod.productName}" />
</f:facet>
<f:facet name="input">
<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>
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width: 120px;" headerText="#{i18n['vipProduct.quantity']}">
<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">
<h:outputText value="#{prod.quantity}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="3" />
</h:outputText>
</f:facet>
<f:facet name="input">
<h:inputText size="15" value="#{prod.quantity}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="3" />
</h:inputText>
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width: 90px;">
<p:rowEditor rendered="#{not empty prod.id}" />
<p:commandButton action="#{vipMultiadd.addProduct()}" 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="#{vipMultiadd.removeProduct()}" update="vipProdList"
icon="ui-icon-close" />
</p:column>
</p:dataTable>
</h:form>
<h:form>
<p:commandButton value="#{i18n['vipMultiadd.commitAll']}" action="#{vipMultiadd.commitAll}" />
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
...@@ -12,9 +12,6 @@ ...@@ -12,9 +12,6 @@
<ui:define name="content"> <ui:define name="content">
<h:link rendered="#{vipListView.canCreate()}" outcome="/vip/create" value="#{i18n['vip.createNew']}" />
<br />
<h:form id="vipform"> <h:form id="vipform">
<p:dataTable id="vipList" value="#{vipListView.viplist}" widgetVar="viplist" styleClass="moya_datatable4" var="vip" > <p:dataTable id="vipList" value="#{vipListView.viplist}" widgetVar="viplist" styleClass="moya_datatable4" var="vip" >
<!-- f:facet name="header"> <!-- f:facet name="header">
......
package fi.codecrew.moya.web.cdiview.vip;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.PermissionBeanLocal;
import fi.codecrew.moya.beans.ProductBeanLocal;
import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.beans.VipBeanLocal;
import fi.codecrew.moya.enums.apps.VipPermission;
import fi.codecrew.moya.model.Product;
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 VipMultiadd extends GenericCDIView {
/**
*
*/
private static final long serialVersionUID = 1L;
@EJB
private VipBeanLocal vipBean;
private List<Vip> vipList;
private ListDataModel<Vip> vips;
private List<VipProduct> productList;
private ListDataModel<VipProduct> vipProducts;
@EJB
private UserBeanLocal userbean;
@EJB
private PermissionBeanLocal permbean;
@EJB
private ProductBeanLocal productBean;
private Vip vip;
private static final Logger logger = LoggerFactory.getLogger(VipMultiadd.class);
public String commitAll() {
for (Vip v : vipList) {
ArrayList<VipProduct> l = new ArrayList<>();
v.setProducts(l);
for (VipProduct prod : vipProducts) {
if (prod.getProduct() != null || (prod.getName() != null && !prod.getName().trim().isEmpty())) {
l.add(new VipProduct(v, prod));
}
}
}
vipBean.create(vipList);
vipList = null;
initMultiadd();
return "/vip/viplist?faces-redirect=true";
}
public void initMultiadd() {
if (super.requirePermissions(VipPermission.EDIT) && vipList == null) {
setVip(new Vip());
vipList = new ArrayList<>();
vips = new ListDataModel<>(vipList);
productList = new ArrayList<>();
productList.add(new VipProduct());
vipProducts = new ListDataModel<>(productList);
super.beginConversation();
}
}
public void addProduct() {
VipProduct prod = vipProducts.getRowData();
prod.setId(-1);
productList.add(0, new VipProduct());
}
public void removeProduct() {
VipProduct l = vipProducts.getRowData();
logger.info("Removing product {}", l);
productList.remove(l);
}
public String addEntry() {
logger.info("added entry");
vipList.add(getVip());
setVip(new Vip());
return null;
}
public void removeEntry() {
vipList.remove(vips.getRowData());
}
public List<Product> getEventProducts() {
return productBean.getProducts();
}
public ListDataModel<VipProduct> getVipProducts() {
return vipProducts;
}
public void setVipProducts(ListDataModel<VipProduct> vipProducts) {
this.vipProducts = vipProducts;
}
public ListDataModel<Vip> getVips() {
return vips;
}
public void setVips(ListDataModel<Vip> vips) {
this.vips = vips;
}
public Vip getVip() {
return vip;
}
public void setVip(Vip vip) {
this.vip = vip;
}
}
...@@ -1135,6 +1135,9 @@ submenu.useradmin.sendPicture = Send picture ...@@ -1135,6 +1135,9 @@ submenu.useradmin.sendPicture = Send picture
submenu.useradmin.showTakePicture = Show webcam submenu.useradmin.showTakePicture = Show webcam
submenu.useradmin.validateUser = Validate user submenu.useradmin.validateUser = Validate user
submenu.utils.index = Administration tools submenu.utils.index = Administration tools
submenu.vip.create = Add entry
submenu.vip.multiadd = Add multiple
submenu.vip.viplist = Vip list
submenu.voting.admincompolist = Compos submenu.voting.admincompolist = Compos
submenu.voting.compolist = Compos submenu.voting.compolist = Compos
submenu.voting.create = Create new compo submenu.voting.create = Create new compo
...@@ -1475,10 +1478,12 @@ viewexpired.title = Login expired. Please login again. ...@@ -1475,10 +1478,12 @@ viewexpired.title = Login expired. Please login again.
viewlectures.title = Courses and lectures viewlectures.title = Courses and lectures
vip.addEntry = Add entry
vip.backToList = Back to VIP list vip.backToList = Back to VIP list
vip.create = Create vip.create = Create
vip.createNew = Create new vip.createNew = Create new
vip.delete = Delete vip.delete = Delete
vip.deleteEntry = Delete entry
vip.deliver = Deliver vip.deliver = Deliver
vip.description = Description vip.description = Description
vip.edit = Edit vip.edit = Edit
...@@ -1490,6 +1495,8 @@ vip.products = Product ...@@ -1490,6 +1495,8 @@ vip.products = Product
vip.save = Save vip.save = Save
vip.shortdescr = Name vip.shortdescr = Name
vipMultiadd.commitAll = Create entries
vipProduct.create = Create vipProduct.create = Create
vipProduct.deliver = Deliver vipProduct.deliver = Deliver
vipProduct.deliverNotes = Notes vipProduct.deliverNotes = Notes
...@@ -1497,6 +1504,9 @@ vipProduct.delivered = Delivered ...@@ -1497,6 +1504,9 @@ vipProduct.delivered = Delivered
vipProduct.name = Product vipProduct.name = Product
vipProduct.quantity = Quantity vipProduct.quantity = Quantity
viplist.multiaddProducts = Added products
viplist.multiaddUsers = Added users
voting.allcompos.curEntries = No. of entries voting.allcompos.curEntries = No. of entries
voting.allcompos.descri = Description voting.allcompos.descri = Description
voting.allcompos.description = List of all compos and their information. voting.allcompos.description = List of all compos and their information.
......
...@@ -1401,6 +1401,9 @@ submenu.useradmin.sendPicture = Send picture ...@@ -1401,6 +1401,9 @@ submenu.useradmin.sendPicture = Send picture
submenu.useradmin.showTakePicture = Show webcam submenu.useradmin.showTakePicture = Show webcam
submenu.useradmin.validateUser = Validate user submenu.useradmin.validateUser = Validate user
submenu.utils.index = Administration tools submenu.utils.index = Administration tools
submenu.vip.create = Add entry
submenu.vip.multiadd = Add multiple
submenu.vip.viplist = Vip list
submenu.voting.admincompolist = Compos submenu.voting.admincompolist = Compos
submenu.voting.compolist = Compos submenu.voting.compolist = Compos
submenu.voting.create = Create new compo submenu.voting.create = Create new compo
...@@ -1747,10 +1750,12 @@ viewexpired.title = Login expired. Please login again. ...@@ -1747,10 +1750,12 @@ viewexpired.title = Login expired. Please login again.
viewlectures.title = Courses and lectures viewlectures.title = Courses and lectures
vip.addEntry = Add entry
vip.backToList = Back to VIP list vip.backToList = Back to VIP list
vip.create = Create vip.create = Create
vip.createNew = Create new vip.createNew = Create new
vip.delete = Delete vip.delete = Delete
vip.deleteEntry = Delete entry
vip.deliver = Deliver vip.deliver = Deliver
vip.description = Description vip.description = Description
vip.edit = Edit vip.edit = Edit
...@@ -1762,6 +1767,8 @@ vip.products = Product ...@@ -1762,6 +1767,8 @@ vip.products = Product
vip.save = Save vip.save = Save
vip.shortdescr = Name vip.shortdescr = Name
vipMultiadd.commitAll = Create entries
vipProduct.create = Create vipProduct.create = Create
vipProduct.deliver = Deliver vipProduct.deliver = Deliver
vipProduct.deliverNotes = Notes vipProduct.deliverNotes = Notes
...@@ -1769,6 +1776,9 @@ vipProduct.delivered = Delivered ...@@ -1769,6 +1776,9 @@ vipProduct.delivered = Delivered
vipProduct.name = Product vipProduct.name = Product
vipProduct.quantity = Quantity vipProduct.quantity = Quantity
viplist.multiaddProducts = Added products
viplist.multiaddUsers = Added users
voting.allcompos.curEntries = No. of entries voting.allcompos.curEntries = No. of entries
voting.allcompos.descri = Description voting.allcompos.descri = Description
voting.allcompos.description = List of all compos and their information. voting.allcompos.description = List of all compos and their information.
......
...@@ -1388,6 +1388,9 @@ submenu.useradmin.sendPicture = L\u00E4het\u00E4 kuva ...@@ -1388,6 +1388,9 @@ submenu.useradmin.sendPicture = L\u00E4het\u00E4 kuva
submenu.useradmin.showTakePicture = N\u00E4yt\u00E4 webcam submenu.useradmin.showTakePicture = N\u00E4yt\u00E4 webcam
submenu.useradmin.validateUser = Validoi k\u00E4ytt\u00E4j\u00E4 submenu.useradmin.validateUser = Validoi k\u00E4ytt\u00E4j\u00E4
submenu.utils.index = Yll\u00E4pitoty\u00F6kalut submenu.utils.index = Yll\u00E4pitoty\u00F6kalut
submenu.vip.create = Lis\u00E4\u00E4 uusi
submenu.vip.multiadd = Lis\u00E4\u00E4 useita
submenu.vip.viplist = Vippilista
submenu.voting.admincompolist = Kilpailut submenu.voting.admincompolist = Kilpailut
submenu.voting.compolist = Kilpailut submenu.voting.compolist = Kilpailut
submenu.voting.create = Uusi kilpailu submenu.voting.create = Uusi kilpailu
...@@ -1734,10 +1737,12 @@ viewexpired.title = N\u00E4kym\u00E4 on vanhentunut ...@@ -1734,10 +1737,12 @@ viewexpired.title = N\u00E4kym\u00E4 on vanhentunut
viewlectures.title = Kurssit ja luennot viewlectures.title = Kurssit ja luennot
vip.addEntry = Lis\u00E4\u00E4 rivi
vip.backToList = Takaisin VIP-listaukseen vip.backToList = Takaisin VIP-listaukseen
vip.create = Luo vip.create = Luo
vip.createNew = Luo uusi vip.createNew = Luo uusi
vip.delete = Poista vip.delete = Poista
vip.deleteEntry = Poista rivi
vip.deliver = Toimita vip.deliver = Toimita
vip.description = Lis\u00E4tietoja vip.description = Lis\u00E4tietoja
vip.edit = Muokkaa vip.edit = Muokkaa
...@@ -1749,6 +1754,8 @@ vip.products = Tuote ...@@ -1749,6 +1754,8 @@ vip.products = Tuote
vip.save = Tallenna vip.save = Tallenna
vip.shortdescr = Nimi vip.shortdescr = Nimi
vipMultiadd.commitAll = Luo merkinn\u00E4t
vipProduct.create = Lis\u00E4\u00E4 vipProduct.create = Lis\u00E4\u00E4
vipProduct.deliver = Toimita vipProduct.deliver = Toimita
vipProduct.deliverNotes = Huomiot vipProduct.deliverNotes = Huomiot
...@@ -1756,6 +1763,9 @@ vipProduct.delivered = Toimitettu ...@@ -1756,6 +1763,9 @@ vipProduct.delivered = Toimitettu
vipProduct.name = Tuote vipProduct.name = Tuote
vipProduct.quantity = Lukum\u00E4\u00E4r\u00E4 vipProduct.quantity = Lukum\u00E4\u00E4r\u00E4
viplist.multiaddProducts = Lis\u00E4tyt tuotteet
viplist.multiaddUsers = Lis\u00E4tyt k\u00E4ytt\u00E4j\u00E4t
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.
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!