Commit 9914e624 by Tuukka Kivilahti

Merge branch 'productBuylimit' into 'master'

Product buylimit role

Add role field to product, which can limit wether user can buy the product from shop. This allows for example Assembly Oldcshool place limit.

See merge request !265
2 parents 9e0fc9cc 689ee963
......@@ -280,6 +280,10 @@ public class BootstrapBean implements BootstrapBeanLocal {
"ALTER TABLE vips ADD shortdescr TEXT"
});
dbUpdates.add(new String[] {
"ALTER TABLE products ADD shop_required_role INTEGER",
"ALTER TABLE products ADD CONSTRAINT FK_products_shop_required_role FOREIGN KEY (shop_required_role) REFERENCES roles (id)",
});
}
public BootstrapBean() {
......
......@@ -24,6 +24,7 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
......@@ -156,7 +157,15 @@ public class ProductBean implements ProductBeanLocal {
@Override
@RolesAllowed(ShopPermission.S_LIST_USERPRODUCTS)
public List<Product> listUserShoppableProducts() {
return productFacade.findProductsByFlag(ProductFlag.USER_SHOPPABLE);
List<Product> ret = productFacade.findProductsByFlag(ProductFlag.USER_SHOPPABLE);
Iterator<Product> i = ret.iterator();
while (i.hasNext()) {
Product p = i.next();
if (p.getShopRequiredRole() != null && !(userbean.isUserInRole(permbean.getCurrentUser(), p.getShopRequiredRole().getId()))) {
i.remove();
}
}
return ret;
}
@Override
......@@ -269,7 +278,7 @@ public class ProductBean implements ProductBeanLocal {
if (s.getBill() == null || s.getBill().isPaid()) {
++unusedSlotcount;
} else {
// If bill is paid, calculate only 'unpaidSlotpercent'% of slots
Integer billcnt = unpaidBills.get(s.getBill().getId());
if (billcnt == null) {
......
......@@ -86,6 +86,10 @@ public class Product extends GenericEntity {
@ManyToOne
private Role provides;
@ManyToOne
@JoinColumn(name = "shop_required_role", nullable = true)
private Role shopRequiredRole;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "product")
private List<Place> places;
......@@ -367,4 +371,12 @@ public class Product extends GenericEntity {
return getProductFlags().contains(ProductFlag.USERSHOP_AUTOPRODUCT);
}
public Role getShopRequiredRole() {
return shopRequiredRole;
}
public void setShopRequiredRole(Role shopRequiredRole) {
this.shopRequiredRole = shopRequiredRole;
}
}
......@@ -54,6 +54,11 @@
</h:selectOneMenu>
<h:message for="provides" />
<h:outputLabel for="shopRequired" value="#{i18n['product.shopRequired']}" />
<h:selectOneMenu id="shopRequired" layout="pageDirection" value="#{productView.product.shopRequiredRole}" converter="#{roleConverter}">
<f:selectItems var="role" itemLabel="#{role.name}" value="#{roleDataView.rolesWithEmpty}" noSelectionValue="#{roleDataView.noSelection}" />
</h:selectOneMenu>
<h:message for="shopRequired" />
<h:selectManyCheckbox layout="pageDirection" id="productFlags" value="#{productView.product.productFlags}" converter="#{productFlagConverter}" label="Product Flags">
<f:selectItems var="flag" itemLabel="#{i18n[flag.i18nkey]}" value="#{productView.productFlags}" />
......
......@@ -61,6 +61,7 @@ bortalApplication.SALESPOINT = Managing salespoint
bortalApplication.SHOP = Product % shop management
bortalApplication.TERMINAL = Sales and self help terminal roles
bortalApplication.USER = User management related
bortalApplication.VIP = VIP list
bortalApplication.bill.CREATE_BILL = Create bills for self
bortalApplication.bill.CREATE_VERKKOMAKSU = Can create web payment to self
bortalApplication.bill.READ_ALL = "Read all bills"
......@@ -76,6 +77,7 @@ bortalApplication.content.MANAGE_NEWS = Manage newsgroups
bortalApplication.content.MANAGE_PAGES = Manage pages
bortalApplication.event.MANAGE_PRIVATE_PROPERTIES = Can manage event private properties
bortalApplication.event.MANAGE_PROPERTIES = Can manage event properties
bortalApplication.event.VIEW_STATISTICS = View event statistics
bortalApplication.license.MANAGE = Can manage licenses
bortalApplication.license.VIEW_OWN_CODES = Can view own licenses
bortalApplication.map.BUY_PLACES = Reserve and buy places from map
......@@ -119,14 +121,24 @@ bortalApplication.user.VIEW_SELF = Can view self
bortalApplication.user.VITUTTAAKO = Can send feedback
bortalApplication.user.WRITE_ORGROLES = Modify organization roles
bortalApplication.user.WRITE_ROLES = Modify roles
bortalApplication.vip.EDIT = Edit VIP list
bortalApplication.vip.USAGE = Use VIP list
bortalApplication.vip.VIEW = View VIP list
card.massprint.title = Print all
cardCode.code = Koodi
cardCode.type = Tyyppi
cardObjectData.delete = Delete
cardObjectData.deleteQ = Delete object data from card template?
cardTemplate.clone = Clone
cardTemplate.emptyCardTemplate = ----
cardTextData.delete = Delete
cardTextData.deleteQ = Delete text data from card template?
code.inputfield = Sy\u00F6t\u00E4 viivakoodi
confirmation.message = Oletko varma?
......@@ -177,6 +189,9 @@ eventdomain.domainname = Domain
eventdomain.remove = Remove
eventmap.active = Active
eventmap.height = Kartan korkeus (px)
eventmap.uploaderror = Virhe lis\u00E4tess\u00E4 karttapohjaa
eventmap.width = Kartan leveys (px)
eventorg.basicDetails = Perustiedot
eventorg.create = Create
......@@ -362,13 +377,15 @@ permissiondenied.notLoggedIn = You don't have enough rights to enter this si
place.cancelSend = Peruuta siirto
place.send = Siirr\u00E4 paikka
placegroup.showEticket = N\u00E4yt\u00E4 lippu
placegroup.noPlacegroups = Sinulla t\u00E4ytyy olla paikkoja ett\u00E4 voit n\u00E4hd\u00E4 lippusi
placegroup.showEticket = N\u00E4yt\u00E4 lippu
placegroupview.groupCreator = Tilaaja
placegroupview.owner = Omistaja
placegroupview.placetransferred = Paikka annettu eteenp\u00E4in
placegroupview.toptext = \
placeslot.add = Lis\u00E4\u00E4 placeslot
placeslot.state.expired = Vanhentunut
poll.edit = edit
......@@ -430,6 +447,8 @@ submenu.info.foodwave.foodwaveshop = Ruokakauppa
submenu.info.incoming = Laaja sis\u00E4\u00E4ntulon\u00E4kym\u00E4
submenu.info.index = Infon\u00E4kym\u00E4
submenu.info.shop = Kauppa
submenu.info.usermapsearch = Karttahaku
submenu.info.viplist = Vippilista
submenu.lectureadmin.lectureParticipants = Tarkastele osallistujia
submenu.lectureadmin.manageLectureGroups = Hallinnoi
submenu.lectures.viewLectures = Ilmoittaudu
......@@ -487,17 +506,18 @@ usercart.showoverview = Vie tarkastusn\u00E4kym\u00E4\u00E4n
viewlectures.title = Kurssit ja luennot
vip.create = Luo
vip.createNew = Luo uusi
vip.deliver = Toimita
vip.backToList = Takaisin listaukseen
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.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.products = Tuote
vip.save = Tallenna
vip.shortdescr = Lyhyt kuvaus
vipProduct.create = Lis\u00E4\u00E4
......@@ -508,21 +528,3 @@ vipProduct.name = Tuote
vipProduct.quantity = Lukum\u00E4\u00E4r\u00E4
yes = Kyll\u00E4
vip.backToList=Takaisin listaukseen
submenu.info.viplist=Vippilista
submenu.info.usermapsearch=Karttahaku
cardTemplate.clone=Clone
cardObjectData.deleteQ=Delete object data from card template?
cardTextData.deleteQ=Delete text data from card template?
cardObjectData.delete=Delete
cardTextData.delete=Delete
placegroup.noPlacegroups=Sinulla t\u00E4ytyy olla paikkoja ett\u00E4 voit n\u00E4hd\u00E4 lippusi
bortalApplication.VIP=VIP list
bortalApplication.vip.VIEW=View VIP list
bortalApplication.vip.USAGE=Use VIP list
bortalApplication.vip.EDIT=Edit VIP list
bortalApplication.event.VIEW_STATISTICS=View event statistics
eventmap.width=Kartan leveys (px)
eventmap.height=Kartan korkeus (px)
eventmap.uploaderror=Virhe lis\u00E4tess\u00E4 karttapohjaa
placeslot.add=Lis\u00E4\u00E4 placeslot
......@@ -144,6 +144,7 @@ bortalApplication.SHOP = Product and shop management
bortalApplication.TERMINAL = Sales and self help terminal roles
bortalApplication.TOURNAMENT = Tournament permissions
bortalApplication.USER = User management related
bortalApplication.VIP = VIP list
bortalApplication.bill.CREATE_BILL = Create bills for self
bortalApplication.bill.CREATE_VERKKOMAKSU = Can create web payment to self
bortalApplication.bill.READ_ALL = Read all bills
......@@ -160,6 +161,7 @@ bortalApplication.content.MANAGE_PAGES = Manage pages
bortalApplication.event.MANAGE_EVENT = Can manage event
bortalApplication.event.MANAGE_PRIVATE_PROPERTIES = Can manage event private properties
bortalApplication.event.MANAGE_PROPERTIES = Can manage event properties
bortalApplication.event.VIEW_STATISTICS = View event statistics
bortalApplication.lecture.MANAGE = Can manage lectures and courses
bortalApplication.lecture.PARTICIPATE = Can participate to lectures and courses
bortalApplication.lecture.VIEW = Can view lectures and courses
......@@ -221,6 +223,9 @@ bortalApplication.user.VIEW_SELF = Can view self
bortalApplication.user.VITUTTAAKO = Can send feedback
bortalApplication.user.WRITE_ORGROLES = Modify organization roles
bortalApplication.user.WRITE_ROLES = Modify roles
bortalApplication.vip.EDIT = Edit VIP list
bortalApplication.vip.USAGE = Use VIP list
bortalApplication.vip.VIEW = View VIP list
card.massprint.title = Print all
......@@ -228,6 +233,8 @@ cardCode.code = Code
cardCode.type = Type
cardObjectData.create = Add object data
cardObjectData.delete = Delete
cardObjectData.deleteQ = Delete object data from card template?
cardObjectData.edit = Edit
cardObjectData.save = Save
cardObjectData.size = Width (px)
......@@ -240,19 +247,22 @@ cardObjectData.x = X coordinate
cardObjectData.y = Y coordinate
cardObjectData.zindex = Z index
cardTemplate.clone = Clone
cardTemplate.create = Create
cardTemplate.edit = Edit
cardTemplate.id = Id
cardTemplate.edit = Edit
cardTemplate.id = Id
cardTemplate.imageheader = Current Template
cardTemplate.name = Card template
cardTemplate.power = Card power
cardTemplate.roles = Associated roles
cardTemplate.save = Save
cardTemplate.name = Card template
cardTemplate.power = Card power
cardTemplate.roles = Associated roles
cardTemplate.save = Save
cardTemplate.sendImage = Upload Image
cardTemplateData.list = List datas
cardTextData.create = Add text data
cardTextData.delete = Delete
cardTextData.deleteQ = Delete text data from card template?
cardTextData.edit = Edit
cardTextData.fontcolor = Font color
cardTextData.fontname = Font name
......@@ -391,9 +401,12 @@ eventmap.active = Active
eventmap.buyable.like = Place name match
eventmap.buyable.lock = Lock places
eventmap.buyable.release = Release places
eventmap.height = Map height (px)
eventmap.name = Map name
eventmap.notes = Notes
eventmap.save = Save
eventmap.uploaderror = Error when adding map
eventmap.width = Map width (px)
eventorg.bankName1 = Bank name 2
eventorg.bankName2 = Bank name 2
......@@ -942,6 +955,7 @@ placegroup.details = Details
placegroup.edit = Show
placegroup.edited = Edited
placegroup.name = Name
placegroup.noPlacegroups = You must have placegroups that you can have places
placegroup.placename = Place
placegroup.places = Places
placegroup.printPdf = Print tickets
......@@ -961,8 +975,9 @@ placegroupview.reservationName = Place
placegroupview.reservationProduct = Ticket
placegroupview.token = Placecode / user
placeslot.add = Add placeslot
placeslot.bill = Bill
placeslot.id = ID
placeslot.id = ID
placeslot.lockSlot = Lock slot
placeslot.place = Place
placeslot.product = Slot product
......@@ -1023,6 +1038,7 @@ product.returnProductEdit = Return to product:
product.save = Save
product.saved = Product saved
product.shopInstant = Create automatic cashpayment
product.shopRequired = Role required to buy this product
product.sort = Sort nr
product.totalPrice = Total
product.unitName = Unit name
......@@ -1268,6 +1284,8 @@ submenu.info.foodwave.foodwaveshop = Foodshop
submenu.info.incoming = Extendet Incomingview
submenu.info.index = Infoview
submenu.info.shop = Shop
submenu.info.usermapsearch = Mapsearch
submenu.info.viplist = Viplist
submenu.lectureadmin.lectureParticipants = Lecture participants
submenu.lectureadmin.manageLectureGroups = Management
submenu.lectures.viewLectures = Participate
......@@ -1662,17 +1680,18 @@ viewexpired.title = Login expired. Please login again.
viewlectures.title = Courses and lectures
vip.create = Create
vip.createNew = Create new
vip.deliver = Deliver
vip.backToList = Back to viplist list
vip.create = Create
vip.createNew = Create new
vip.deliver = Deliver
vip.description = Description
vip.edit = Edit
vip.host = Host
vip.hostsName = Host
vip.edit = Edit
vip.host = Host
vip.hostsName = Host
vip.productDelivered = Delivered
vip.productQuantity = Qty
vip.products = Product
vip.save = Save
vip.products = Product
vip.save = Save
vip.shortdescr = Short description
vipProduct.create = Create
......@@ -1725,21 +1744,3 @@ voting.create.voteEnd = Voting close
voting.create.voteStart = Voting start
yes = Yes
vip.backToList=Back to viplist list
submenu.info.viplist=Viplist
submenu.info.usermapsearch=Mapsearch
cardTemplate.clone=Clone
cardObjectData.deleteQ=Delete object data from card template?
cardTextData.deleteQ=Delete text data from card template?
cardObjectData.delete=Delete
cardTextData.delete=Delete
placegroup.noPlacegroups=You must have placegroups that you can have places
bortalApplication.VIP=VIP list
bortalApplication.vip.VIEW=View VIP list
bortalApplication.vip.USAGE=Use VIP list
bortalApplication.vip.EDIT=Edit VIP list
bortalApplication.event.VIEW_STATISTICS=View event statistics
eventmap.width=Map width (px)
eventmap.height=Map height (px)
eventmap.uploaderror=Error when adding map
placeslot.add=Add placeslot
......@@ -146,6 +146,7 @@ bortalApplication.SHOP = Kaupan oikeudet
bortalApplication.TERMINAL = K\u00E4ytt\u00F6p\u00E4\u00E4tteiden roolit
bortalApplication.TOURNAMENT = Turnauksien oikeudet
bortalApplication.USER = K\u00E4ytt\u00E4j\u00E4oikeudet
bortalApplication.VIP = VIP-lista
bortalApplication.bill.CREATE_BILL = Voi luoda laskuja itselle
bortalApplication.bill.CREATE_VERKKOMAKSU = Voi luoda verkkomaksun itselleen
bortalApplication.bill.READ_ALL = Saa lukea kaikkia laskuja
......@@ -162,6 +163,7 @@ bortalApplication.content.MANAGE_PAGES = Saa hallinnoida sivuja
bortalApplication.event.MANAGE_EVENT = Saa hallinnoida tapahtumaa
bortalApplication.event.MANAGE_PRIVATE_PROPERTIES = Saa hallita tapahtuman yksityisi\u00E4 asetuksia
bortalApplication.event.MANAGE_PROPERTIES = Saa hallita tapahtuman asetuksia
bortalApplication.event.VIEW_STATISTICS = N\u00E4yt\u00E4 tapahtuman tilastot
bortalApplication.lecture.MANAGE = Saa hallinnoida kursseja ja luentoja
bortalApplication.lecture.PARTICIPATE = Saa osallistua kursseille ja luennoille
bortalApplication.lecture.VIEW = Saa n\u00E4hd\u00E4 kurssit ja luennot
......@@ -223,6 +225,9 @@ bortalApplication.user.VIEW_SELF = Voi katsella omaa tunnusta
bortalApplication.user.VITUTTAAKO = Saa avautua
bortalApplication.user.WRITE_ORGROLES = Saa muokata organisaation rooleja
bortalApplication.user.WRITE_ROLES = Saa muokata rooleja
bortalApplication.vip.EDIT = Muokkaa VIP-listaa
bortalApplication.vip.USAGE = K\u00E4yt\u00E4 VIP-listaa
bortalApplication.vip.VIEW = N\u00E4yt\u00E4 VIP-lista
card.massprint.title = Tulosta kaikki
......@@ -230,6 +235,8 @@ cardCode.code = Koodi
cardCode.type = Tyyppi
cardObjectData.create = Liit\u00E4 kuvia
cardObjectData.delete = Poista
cardObjectData.deleteQ = Poistetaanko objektidata korttipohjalta?
cardObjectData.edit = Muokkaa
cardObjectData.save = Tallenna
cardObjectData.size = Leveys (px)
......@@ -242,19 +249,22 @@ cardObjectData.x = X koordinaatti
cardObjectData.y = Y koordinaatti
cardObjectData.zindex = Z index
cardTemplate.clone = Kopioi
cardTemplate.create = Luo
cardTemplate.edit = Muokkaa
cardTemplate.id = Id
cardTemplate.edit = Muokkaa
cardTemplate.id = Id
cardTemplate.imageheader = Nykyinen pohja
cardTemplate.name = Korttipohja
cardTemplate.power = Teho
cardTemplate.roles = Yhdistetyt roolit
cardTemplate.save = Tallenna
cardTemplate.name = Korttipohja
cardTemplate.power = Teho
cardTemplate.roles = Yhdistetyt roolit
cardTemplate.save = Tallenna
cardTemplate.sendImage = Lataa kuva
cardTemplateData.list = Ohjeissis\u00E4ll\u00F6n listaus
cardTextData.create = Liit\u00E4 teksti\u00E4
cardTextData.delete = Poista
cardTextData.deleteQ = Poistetaanko tekstidata korttipohjalta?
cardTextData.edit = Muokkaa
cardTextData.fontcolor = Fontin v\u00E4ri
cardTextData.fontname = Fontin nimi
......@@ -393,9 +403,12 @@ eventmap.active = Aktiivinen\u0009
eventmap.buyable.like = Paikat
eventmap.buyable.lock = Lukitse paikat
eventmap.buyable.release = Vapauta paikat
eventmap.height = Kartan korkeus (px)
eventmap.name = Kartan nimi
eventmap.notes = Lis\u00E4tiedot
eventmap.save = Tallenna
eventmap.uploaderror = Virhe lis\u00E4tt\u00E4ess\u00E4 karttapohjaa
eventmap.width = Kartan leveys (px)
eventorg.bankName1 = Pankin nimi 1
eventorg.bankName2 = Pankin nimi 2
......@@ -662,6 +675,7 @@ lecture.participating = Osallistumassa
lecture.roles = Roolit
lecture.saveLecture = Muokkaa
lecture.selectgroup = Valitse aihealue
lecture.showParticipants = N\u00E4yt\u00E4 osallistujat
lecture.startTime = Aloitusaika
lecture.unparticipate = Poista ilmoittautuminen
lecture.unparticipate.confirm.message = Oletko varma ett\u00E4 haluat poistaa k\u00E4ytt\u00E4j\u00E4n kurssilta?
......@@ -926,6 +940,7 @@ placegroup.details = Tiedot
placegroup.edit = N\u00E4yt\u00E4
placegroup.edited = Muokattu
placegroup.name = Nimi
placegroup.noPlacegroups = Sinulla t\u00E4ytyy olla paikkoja ett\u00E4 voit n\u00E4hd\u00E4 lippusi
placegroup.placename = Paikka
placegroup.places = Paikat
placegroup.printPdf = Tulosta lipputositteet
......@@ -945,8 +960,9 @@ placegroupview.reservationName = Paikka
placegroupview.reservationProduct = Lippu
placegroupview.token = Paikkakoodi / k\u00E4ytt\u00E4j\u00E4
placeslot.add = Lis\u00E4\u00E4 placeslot
placeslot.bill = Lasku
placeslot.id = ID
placeslot.id = ID
placeslot.lockSlot = Lukitse
placeslot.place = Paikka
placeslot.product = Tuote
......@@ -1007,6 +1023,7 @@ product.returnProductEdit = Palaa tuotteeseen:
product.save = Tallenna
product.saved = Tuote tallennettu
product.shopInstant = Luo k\u00E4teismaksu tuotteille
product.shopRequired = Tuotteen ostamiseen vaadittu rooli
product.sort = J\u00E4rjestys luku
product.totalPrice = Summa
product.unitName = Tuoteyksikk\u00F6
......@@ -1249,6 +1266,8 @@ submenu.info.foodwave.foodwaveshop = Ruokakauppa
submenu.info.incoming = Laaja Sis\u00E4\u00E4ntulon\u00E4kym\u00E4
submenu.info.index = Infon\u00E4kym\u00E4
submenu.info.shop = Kauppa
submenu.info.usermapsearch = Karttahaku
submenu.info.viplist = Vippilista
submenu.lectureadmin.lectureParticipants = Kurssiosallistujat
submenu.lectureadmin.manageLectureGroups = Hallinnoi
submenu.lectures.viewLectures = Ilmoittaudu
......@@ -1645,17 +1664,18 @@ viewexpired.title = N\u00E4kym\u00E4 on vanhentunut
viewlectures.title = Kurssit ja luennot
vip.create = Luo
vip.createNew = Luo uusi
vip.deliver = Toimita
vip.backToList = Takaisin listaukseen
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.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.products = Tuote
vip.save = Tallenna
vip.shortdescr = Lyhyt kuvaus
vipProduct.create = Lis\u00E4\u00E4
......@@ -1708,22 +1728,3 @@ voting.create.voteEnd = \u00C4\u00E4nestys kiinni
voting.create.voteStart = \u00C4\u00E4nestys auki
yes = Kyll\u00E4
vip.backToList=Takaisin listaukseen
submenu.info.viplist=Vippilista
submenu.info.usermapsearch=Karttahaku
cardTemplate.clone=Kopioi
cardObjectData.deleteQ=Poistetaanko objektidata korttipohjalta?
cardTextData.deleteQ=Poistetaanko tekstidata korttipohjalta?
cardObjectData.delete=Poista
cardTextData.delete=Poista
placegroup.noPlacegroups=Sinulla t\u00E4ytyy olla paikkoja ett\u00E4 voit n\u00E4hd\u00E4 lippusi
bortalApplication.VIP=VIP-lista
bortalApplication.vip.VIEW=N\u00E4yt\u00E4 VIP-lista
bortalApplication.vip.USAGE=K\u00E4yt\u00E4 VIP-listaa
bortalApplication.vip.EDIT=Muokkaa VIP-listaa
bortalApplication.event.VIEW_STATISTICS=N\u00E4yt\u00E4 tapahtuman tilastot
lecture.showParticipants=N\u00E4yt\u00E4 osallistujat
eventmap.width=Kartan leveys (px)
eventmap.height=Kartan korkeus (px)
eventmap.uploaderror=Virhe lis\u00E4tt\u00E4ess\u00E4 karttapohjaa
placeslot.add=Lis\u00E4\u00E4 placeslot
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!