Commit ba2bf449 by Tuomas Riihimäki

Placemap queue

1 parent c0ba0ad1
...@@ -122,4 +122,6 @@ public interface PlaceBeanLocal { ...@@ -122,4 +122,6 @@ public interface PlaceBeanLocal {
List<Place> findPlacePrintlistForUser(EventUser user); List<Place> findPlacePrintlistForUser(EventUser user);
List<PlaceSlot> getFreePlaceslots(EventUser u, EventMap map);
} }
...@@ -133,10 +133,11 @@ public class MenuBean implements MenuBeanLocal { ...@@ -133,10 +133,11 @@ public class MenuBean implements MenuBeanLocal {
userEvent.addPage(menuitemfacade.findOrCreate("/user/invite"), UserPermission.INVITE_USERS); userEvent.addPage(menuitemfacade.findOrCreate("/user/invite"), UserPermission.INVITE_USERS);
userEvent.addPage(menuitemfacade.findOrCreate("/feedback/index"), UserPermission.VITUTTAAKO); userEvent.addPage(menuitemfacade.findOrCreate("/feedback/index"), UserPermission.VITUTTAAKO);
MenuNavigation userkauppa = usermenu.addPage(null, null); MenuNavigation userkauppa = usermenu.addPage(null, null);
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/view"), MapPermission.BUY_PLACES); userkauppa.addPage(menuitemfacade.findOrCreate("/neomap/reserve"), MapPermission.BUY_PLACES);
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);
...@@ -151,7 +152,7 @@ public class MenuBean implements MenuBeanLocal { ...@@ -151,7 +152,7 @@ public class MenuBean implements MenuBeanLocal {
userPlaces.setKey("topnavi.userplaces"); userPlaces.setKey("topnavi.userplaces");
userPlaces.addPage(menuitemfacade.findOrCreate("/place/myGroups"), MapPermission.BUY_PLACES); userPlaces.addPage(menuitemfacade.findOrCreate("/place/myGroups"), MapPermission.BUY_PLACES);
userPlaces.addPage(menuitemfacade.findOrCreate("/place/viewplacemap"), MapPermission.VIEW); userPlaces.addPage(menuitemfacade.findOrCreate("/neomap/view"), MapPermission.VIEW);
userPlaces.addPage(menuitemfacade.findOrCreate("/place/myEtickets"), MapPermission.BUY_PLACES).setVisible(false); userPlaces.addPage(menuitemfacade.findOrCreate("/place/myEtickets"), MapPermission.BUY_PLACES).setVisible(false);
userPlaces.addPage(menuitemfacade.findOrCreate("/place/edit"), MapPermission.MANAGE_OTHERS).setVisible(false); userPlaces.addPage(menuitemfacade.findOrCreate("/place/edit"), MapPermission.MANAGE_OTHERS).setVisible(false);
userPlaces.addPage(menuitemfacade.findOrCreate("/place/eticketStandalone"), UserPermission.ANYUSER).setVisible(false); userPlaces.addPage(menuitemfacade.findOrCreate("/place/eticketStandalone"), UserPermission.ANYUSER).setVisible(false);
......
...@@ -48,8 +48,10 @@ import javax.ejb.Stateless; ...@@ -48,8 +48,10 @@ import javax.ejb.Stateless;
import javax.ejb.Timeout; import javax.ejb.Timeout;
import javax.ejb.Timer; import javax.ejb.Timer;
import javax.ejb.TimerService; import javax.ejb.TimerService;
import javax.xml.registry.infomodel.Slot;
import fi.codecrew.moya.model.*; import fi.codecrew.moya.model.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -246,7 +248,7 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -246,7 +248,7 @@ public class PlaceBean implements PlaceBeanLocal {
return false; return false;
} }
} else { } else {
List<PlaceSlot> slots = placeSlotFacade.findFreePlaceSlots(user, place.getProduct()); List<PlaceSlot> slots = placeSlotFacade.findFreePlaceSlotsForProduct(user, place.getProduct());
logger.info("Found free slots {} for user {}", Arrays.asList(slots.toArray()), user); logger.info("Found free slots {} for user {}", Arrays.asList(slots.toArray()), user);
if (slots != null && !slots.isEmpty()) { if (slots != null && !slots.isEmpty()) {
PlaceSlot slot = slots.get(0); PlaceSlot slot = slots.get(0);
...@@ -746,7 +748,7 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -746,7 +748,7 @@ public class PlaceBean implements PlaceBeanLocal {
if (!permbean.isCurrentUser(user) && !permbean.hasPermission(MapPermission.MANAGE_OTHERS)) if (!permbean.isCurrentUser(user) && !permbean.hasPermission(MapPermission.MANAGE_OTHERS))
throw new EJBAccessException("User " + permbean.getCurrentUser() + "tried to fetch free places for user " + user); throw new EJBAccessException("User " + permbean.getCurrentUser() + "tried to fetch free places for user " + user);
return placeSlotFacade.findFreePlaceSlots(user, product); return placeSlotFacade.findFreePlaceSlotsForProduct(user, product);
} }
@Override @Override
...@@ -783,4 +785,13 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -783,4 +785,13 @@ public class PlaceBean implements PlaceBeanLocal {
return placeFacade.getMapProducts(map); return placeFacade.getMapProducts(map);
} }
@Override
public List<PlaceSlot> getFreePlaceslots(EventUser user, EventMap map) {
user = eventUserFacade.reload(user);
if (!permbean.isCurrentUser(user) && !permbean.hasPermission(MapPermission.MANAGE_OTHERS))
throw new EJBAccessException("User " + permbean.getCurrentUser() + "tried to fetch free places for user " + user);
return placeSlotFacade.findFreePlaceSlots(user, map);
}
} }
...@@ -287,7 +287,7 @@ public class QueueBean implements QueueBeanLocal { ...@@ -287,7 +287,7 @@ public class QueueBean implements QueueBeanLocal {
logger.info("User {} already in queue"); logger.info("User {} already in queue");
ret = queue.getEntry(user); ret = queue.getEntry(user);
} else { } else {
List<PlaceSlot> slots = slotfacade.findFreePlaceSlots(user, null); List<PlaceSlot> slots = slotfacade.findFreePlaceSlotsForProduct(user, null);
logger.info("User {} not yet in queue. User has {} slots", user, slots.size()); logger.info("User {} not yet in queue. User has {} slots", user, slots.size());
if (!slots.isEmpty()) { if (!slots.isEmpty()) {
ret = queue.enter(user); ret = queue.enter(user);
......
...@@ -30,6 +30,7 @@ import javax.persistence.criteria.CriteriaQuery; ...@@ -30,6 +30,7 @@ import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path; import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import javax.persistence.criteria.Subquery;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -37,11 +38,15 @@ import org.slf4j.LoggerFactory; ...@@ -37,11 +38,15 @@ import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.EventBeanLocal; import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.model.Bill; import fi.codecrew.moya.model.Bill;
import fi.codecrew.moya.model.Bill_; import fi.codecrew.moya.model.Bill_;
import fi.codecrew.moya.model.EventMap;
import fi.codecrew.moya.model.EventMap_;
import fi.codecrew.moya.model.EventUser; import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.Place; import fi.codecrew.moya.model.Place;
import fi.codecrew.moya.model.PlaceSlot; import fi.codecrew.moya.model.PlaceSlot;
import fi.codecrew.moya.model.PlaceSlot_; import fi.codecrew.moya.model.PlaceSlot_;
import fi.codecrew.moya.model.Place_;
import fi.codecrew.moya.model.Product; import fi.codecrew.moya.model.Product;
import fi.codecrew.moya.model.Product_;
@Stateless @Stateless
@LocalBean @LocalBean
...@@ -64,7 +69,7 @@ public class PlaceSlotFacade extends IntegerPkGenericFacade<PlaceSlot> { ...@@ -64,7 +69,7 @@ public class PlaceSlotFacade extends IntegerPkGenericFacade<PlaceSlot> {
* @param product * @param product
* @return * @return
*/ */
public List<PlaceSlot> findFreePlaceSlots(EventUser user, Product product) { public List<PlaceSlot> findFreePlaceSlotsForProduct(EventUser user, Product product) {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<PlaceSlot> q = cb.createQuery(PlaceSlot.class); CriteriaQuery<PlaceSlot> q = cb.createQuery(PlaceSlot.class);
Root<PlaceSlot> root = q.from(PlaceSlot.class); Root<PlaceSlot> root = q.from(PlaceSlot.class);
...@@ -133,4 +138,27 @@ public class PlaceSlotFacade extends IntegerPkGenericFacade<PlaceSlot> { ...@@ -133,4 +138,27 @@ public class PlaceSlotFacade extends IntegerPkGenericFacade<PlaceSlot> {
Long count = super.getSingleNullableResult(getEm().createQuery(q)); Long count = super.getSingleNullableResult(getEm().createQuery(q));
return count; return count;
} }
public List<PlaceSlot> findFreePlaceSlots(EventUser user, EventMap map) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<PlaceSlot> q = cb.createQuery(PlaceSlot.class);
Root<PlaceSlot> root = q.from(PlaceSlot.class);
Path<Bill> bill = root.get(PlaceSlot_.bill);
final List<Predicate> preds = new ArrayList<>();
preds.add(cb.equal(bill.get(Bill_.user), user));
preds.add(cb.isNotNull(bill.get(Bill_.paidDate)));
preds.add(cb.isNull(root.get(PlaceSlot_.used)));
Subquery<Integer> mapProdq = q.subquery(Integer.class);
Root<EventMap> mapProdqRoot = mapProdq.from(EventMap.class);
mapProdq.select(mapProdqRoot.join(EventMap_.places).get(Place_.product).get(Product_.id));
mapProdq.where(cb.equal(mapProdqRoot, map));
mapProdq.distinct(true);
preds.add(root.get(PlaceSlot_.product).get(Product_.id).in(mapProdq));
q.where(preds.toArray(new Predicate[preds.size()]));
return getEm().createQuery(q).getResultList();
}
} }
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core" xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html" xmlns:h="http://java.sun.com/jsf/html"
xmlns:map="http://java.sun.com/jsf/composite/cditools/map"
xmlns:tools="http://java.sun.com/jsf/composite/cditools" xmlns:tools="http://java.sun.com/jsf/composite/cditools"
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui"> xmlns:p="http://primefaces.org/ui">
...@@ -15,13 +16,14 @@ ...@@ -15,13 +16,14 @@
<f:event type="preRenderView" <f:event type="preRenderView"
listener="#{ajaxMapView.initReserveMap()}" /> listener="#{ajaxMapView.initReserveMap()}" />
</f:metadata> </f:metadata>
<ui:param name="thispage" value="page.place.placemap" />
<ui:define name="content"> <ui:define name="content">
<h:form> <h:form>
<p:remoteCommand name="placeClicker" update=":fbdiag" <p:remoteCommand name="updateWholePage" update="@all"
action="#{ajaxMapView.placeClicked()}" /> action="#{ajaxMapView.initReserveMap()}" />
</h:form> </h:form>
<p:dialog rendered="#{ajaxMapView.isMgmtPermission()}"
<p:dialog visible="#{!empty ajaxMapView.place}" id="fbdiag"> visible="#{!empty ajaxMapView.place}" id="fbdiag">
Clicked place name : #{ajaxMapView.place.name}; Clicked place name : #{ajaxMapView.place.name};
<h:link rendered="#{!empty ajaxMapView.place}" outcome="/place/edit"> <h:link rendered="#{!empty ajaxMapView.place}" outcome="/place/edit">
<f:param name="placeid" value="#{ajaxMapView.place.id}" /> <f:param name="placeid" value="#{ajaxMapView.place.id}" />
...@@ -33,29 +35,203 @@ ...@@ -33,29 +35,203 @@
<h:outputScript target="head" library="seatjs" name="d3-tip.js" /> <h:outputScript target="head" library="seatjs" name="d3-tip.js" />
<h:outputScript target="head" library="seatjs" name="seatmap.js" /> <h:outputScript target="head" library="seatjs" name="seatmap.js" />
<h:outputStylesheet library="seatjs" name="placemap.css" /> <h:outputStylesheet library="seatjs" name="placemap.css" />
<h:form>
<h:commandButton rendered="#{mapView.canUserBuy()}"
value="#{i18n['mapView.buyPlaces']}"
action="#{placeView.buySelectedPlaces()}" />
</h:form>
<div> <ui:fragment rendered="#{layoutView.manageContent}">
<svg id="seatmap" <h:link rendered="#{layoutView.manageContent}"
style="margin: auto; border: 1px solid black; background-image: url()" styleClass="editorlink" value="Edit content for users in queue"
width="#{ajaxMapView.map.width}px" outcome="/pages/manage">
height="#{ajaxMapView.map.height}px" /> <f:param name="pagename" value="#{layoutView.pagepath}:inqueue" />
<script type="text/javascript"> </h:link>
px = placemap({ <br />
<h:link rendered="#{layoutView.manageContent}"
styleClass="editorlink"
value="Edit content for user reserving places"
outcome="/pages/manage">
<f:param name="pagename" value="#{layoutView.pagepath}:reserving" />
</h:link>
<br />
</ui:fragment>
<ui:repeat var="cont1"
rendered="#{ajaxMapView.queueEnabled and ajaxMapView.reserving}"
value="#{menuView.getPagecontent('reserving')}">
<h:outputText value="#{cont1.content}" escape="false" />
</ui:repeat>
<ui:repeat var="cont1"
rendered="#{ajaxMapView.queueEnabled and not ajaxMapView.reserving}"
value="#{menuView.getPagecontent('inqueue')}">
<h:outputText value="#{cont1.content}" escape="false" />
</ui:repeat>
<br />
<h3>
<h:outputText value="#{i18n['mapView.yourPlaces']}" />
</h3>
<p:dataTable tableStyle="
width: auto;" var="cnt"
value="#{ajaxMapView.slotcount}">
<p:column headerText="#{i18n['mapView.productcount.productname']}">
<h:outputText value="#{cnt.product.name}" />
</p:column>
<p:column headerText="#{i18n['mapView.productcount.productcount']}">
<h:outputText value="#{cnt.count}" />
</p:column>
</p:dataTable>
<ui:fragment rendered="#{ajaxMapView.reserving}">
<div style="margin: 5px;">
<h:form id="placeselectform">
<p:commandButton rendered="#{ajaxMapView.canUserBuy()}"
value="#{i18n['mapView.buyPlaces']}"
action="#{ajaxMapView.buySelectedPlaces()}" ajax="false" />
</h:form>
</div>
</ui:fragment>
<ui:fragment
rendered="#{ajaxMapView.queueEnabled and not ajaxMapView.reserving}">
<h3><h:outputText value="#{i18n['mapView.youAreInQueue']}" /></h3>
<div style="margin: 1em;">
<h:outputText value="#{i18n['mapView.queuePosition']}: " />
<span id="queuepos" /><br />
<h:outputText value=" #{i18n['mapView.queuePositionUpdated']}: " />
<span id="queueupdated" /> <br />
</div>
</ui:fragment>
<svg id="seatmap" style="margin: auto; border: 1px solid black;"
width="#{ajaxMapView.map.width}px"
height="#{ajaxMapView.map.height}px" />
<script type="text/javascript">
// Queue is enabled and we are reserving.
var queueReserving = #{(ajaxMapView.queueEnabled and not ajaxMapView.reserving)?"true":"false"};
function updateMap() {
px.update();
reloadQueue();
}
function reloadQueue(){
if(queueReserving){
$.getJSON("#{request.contextPath}/rest/placemap/v1/queue/#{ajaxMapView.map.id}/#{ajaxMapView.eventuser.id}")
.done(function(data){
updateQueue(data);
} ).fail(function(){
location.reload();
});
}
}
function updateQueue(data) {
if(data === undefined) {
alert('not in queue');
return;
}
if(data.value == 0) {
updateWholePage();
} else {
$("#queuepos").text(data.value);
var d = new Date();
$("#queueupdated").text(d.getHours() + ":" + d.getMinutes() + ":"+ d.getSeconds())
}
}
setInterval(function () { updateMap() }, 5000);
var pageEscapeAlert = queueReserving;
$().ready(function(){
reloadQueue();
});
$(window).bind('beforeunload', function() {
if(pageEscapeAlert) {
alert("#{i18n['mapView.lockPlacesBeforeLeaving']}");
}
});
</script>
<script type="text/javascript">
px = placemap({
element : document.getElementById("seatmap"), element : document.getElementById("seatmap"),
moyaurl : "#{request.contextPath}", moyaurl : "#{request.contextPath}",
map_id : #{ajaxMapView.map.id}, map_id : #{ajaxMapView.map.id},
placereserve: true,
onclick : function(d) { onclick : function(d) {
// placeClicker([{name: 'placeId', value: d}]) // px.update();
//alert(d);
// #{ajaxMapView.isMgmtPermission()?'placeClicker([{name: \'placeId\', value: d}])':''}
return false; return false;
} }
}); });
// document.getElementById("editbutton").addEventListener("click",
// function() {
// px.enable_edit();
// });
//px.enable_edit();
</script> </script>
</div>
<h:panelGrid columns="3" cellpadding="10">
<h:panelGrid columns="2">
<div
style="border-color: black; border-style: solid; border-width: 1px; background-color: grey; width: 10px; height: 10px;">&nbsp;</div>
<h:outputText value="#{i18n['placeSelect.legend.grey']}" />
<div
style="border-color: black; border-style: solid; border-width: 1px; background-color: white; width: 10px; height: 10px;">&nbsp;</div>
<h:outputText value="#{i18n['placeSelect.legend.white']}" />
<div
style="border-color: black; border-style: solid; border-width: 1px; background-color: red; width: 10px; height: 10px;">&nbsp;</div>
<h:outputText value="#{i18n['placeSelect.legend.red']}" />
<div
style="border-color: black; border-style: solid; border-width: 1px; background-color: green; width: 10px; height: 10px;">&nbsp;</div>
<h:outputText value="#{i18n['placeSelect.legend.green']}" />
<div
style="border-color: black; border-style: solid; border-width: 1px; background-color: blue; width: 10px; height: 10px;">&nbsp;</div>
<h:outputText value="#{i18n['placeSelect.legend.blue']}" />
</h:panelGrid>
<h:panelGrid columnClasses=",rightalign" columns="2">
<h:outputLabel value="#{i18n['placeSelect.totalPlaces']}:" />
<h:outputText value="#{ajaxMapView.availablePlaces}" />
<h:outputLabel value="#{i18n['placeSelect.placesleft']}:" />
<h:outputText value="#{ajaxMapView.placesLeftToSelect}" />
</h:panelGrid>
</h:panelGrid>
<ui:fragment rendered="#{ajaxMapView.reserving}">
<div style="margin: 5px;">
<h:form id="placeselectformBottom">
<p:commandButton rendered="#{ajaxMapView.canUserBuy()}"
value="#{i18n['mapView.buyPlaces']}"
action="#{ajaxMapView.buySelectedPlaces()}" ajax="false" />
</h:form>
</div>
</ui:fragment>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
</h:body> </h:body>
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
<p:remoteCommand name="placeClicker" update=":fbdiag" <p:remoteCommand name="placeClicker" update=":fbdiag"
action="#{ajaxMapView.placeClicked()}" /> action="#{ajaxMapView.placeClicked()}" />
</h:form> </h:form>
--> -->
<p:dialog rendered="#{ajaxMapView.isMgmtPermission()}" <p:dialog rendered="#{ajaxMapView.isMgmtPermission()}"
visible="#{!empty ajaxMapView.place}" id="fbdiag"> visible="#{!empty ajaxMapView.place}" id="fbdiag">
Clicked place name : #{ajaxMapView.place.name}; Clicked place name : #{ajaxMapView.place.name};
...@@ -36,57 +36,30 @@ ...@@ -36,57 +36,30 @@
<h:outputScript target="head" library="seatjs" name="seatmap.js" /> <h:outputScript target="head" library="seatjs" name="seatmap.js" />
<h:outputStylesheet library="seatjs" name="placemap.css" /> <h:outputStylesheet library="seatjs" name="placemap.css" />
<ui:fragment rendered="#{not ajaxMapView.queueEnabled}">
<div style="margin: 5px;">
<h:form id="placeselectform">
<p:commandButton rendered="#{ajaxMapView.canUserBuy()}"
value="#{i18n['mapView.buyPlaces']}"
action="#{ajaxMapView.buySelectedPlaces()}" ajax="false" />
</h:form>
</div>
</ui:fragment>
<div style="margin: 5px;"> <button onclick="px.update()">#{i18n['neomap.updateMap']}</button>
<h:form id="placeselectform"> <br />
<p:commandButton rendered="#{ajaxMapView.canUserBuy()}"
value="#{i18n['mapView.buyPlaces']}"
action="#{ajaxMapView.buySelectedPlaces()}" ajax="false" />
</h:form>
</div>
<p:outputPanel rendered="#{ajaxMapView.queueEnabled}">
<h:form>
<p:commandButton value="#{i18n['mapView.enterQueue']}"
action="#{ajaxMapView.enterQueue()}" ajax="false" />
<p:commandButton value="#{i18n['mapView.check']}"
action="#{ajaxMapView.checkReserving()}" ajax="false" />
</h:form>
queueEntry #{ajaxMapView.queueEntry} <br />
QueuePosition: #{ajaxMapView.queuePosition} <br />
Available places to select: #{ajaxMapView.placesLeftToSelect} <br />
isReserving #{ajaxMapView.reserving} <br />
</p:outputPanel>
<svg id="seatmap" style="margin: auto; border: 1px solid black;" <svg id="seatmap" style="margin: auto; border: 1px solid black;"
width="#{ajaxMapView.map.width}px" width="#{ajaxMapView.map.width}px"
height="#{ajaxMapView.map.height}px" /> height="#{ajaxMapView.map.height}px" />
<script type="text/javascript"> <script type="text/javascript">
function updateQueue(data) {
if(data.value === undefined) {
alert('not in queue');
} else if(data.value == 0) {
alert("Reserving");
} else {
alert("Quue position " + data.value);
}
}
function updateMap() {
px.update();
$.getJSON("#{request.contextPath}/rest/placemap/v1/queue/#{ajaxMapView.map.id}/#{ajaxMapView.eventuser.id}")
.done(function(data){ updateQueue(data); } );
}
// If queue is enabled, do not allow clicking of places.
px = placemap({ px = placemap({
element : document.getElementById("seatmap"), element : document.getElementById("seatmap"),
moyaurl : "#{request.contextPath}", moyaurl : "#{request.contextPath}",
map_id : #{ajaxMapView.map.id}, map_id : #{ajaxMapView.map.id},
placereserve: #{ajaxMapView.queueEnabled?"false":"true"},
onclick : function(d) { onclick : function(d) {
// px.update(); // px.update();
//alert(d); //alert(d);
...@@ -99,7 +72,7 @@ ...@@ -99,7 +72,7 @@
// px.enable_edit(); // px.enable_edit();
// }); // });
//px.enable_edit(); //px.enable_edit();
setInterval(function () { updateMap() }, 5000); // setInterval(function () { updateMap() }, 5000);
</script> </script>
......
<?xml version='1.0' encoding='UTF-8' ?> <?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> "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:composite="http://java.sun.com/jsf/composite" <html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools"> xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface> <composite:interface>
</composite:interface> </composite:interface>
<composite:implementation> <composite:implementation>
<h:outputText rendered="#{billListView.bills.rowCount le 0}" value="#{i18n['bills.noBills']}" /> <h:outputText rendered="#{billListView.bills.rowCount le 0}"
value="#{i18n['bills.noBills']}" />
<h:form rendered="#{billListView.canWriteBill}"> <h:form rendered="#{billListView.canWriteBill}">
<p:commandButton ajax="false" action="#{billListView.showPayButtonsAction()}" value="#{i18n['bill.showPayButtons']}" /> <p:commandButton ajax="false"
action="#{billListView.showPayButtonsAction()}"
value="#{i18n['bill.showPayButtons']}" />
</h:form> </h:form>
<h:form rendered="#{billListView.bills.rowCount gt 0}"> <h:form rendered="#{billListView.bills.rowCount gt 0}">
<p:dataTable styleClass="bordertable" id="billList" value="#{billListView.bills}" var="bill" rowStyleClass="#{bill.expired ? 'expired' : (bill.paidDate != null ? 'paid' : null)}" expandedRow="true"> <p:dataTable styleClass="bordertable" id="billList"
value="#{billListView.bills}" var="bill"
rowStyleClass="#{bill.expired ? 'expired' : (bill.paidDate != null ? 'paid' : null)}"
expandedRow="true">
<p:column style="width:16px" rendered="#{billListView.bills.rowCount lt 20}"> <p:column style="width:16px"
<p:rowToggler /> rendered="#{billListView.bills.rowCount lt 20}">
<p:rowToggler />
</p:column> </p:column>
<p:column rendered="#{billListView.canWriteBill}"> <p:column rendered="#{billListView.canWriteBill}">
<f:facet name="header"> <f:facet name="header">
<h:outputText value="#{i18n['bill.payer']}" /> <h:outputText value="#{i18n['bill.payer']}" />
</f:facet> </f:facet>
<h:link rendered="#{billListView.canWriteBill}" outcome="/useradmin/edit" value="#{bill.addr1}"> <h:link rendered="#{billListView.canWriteBill}"
outcome="/useradmin/edit" value="#{bill.addr1}">
<f:param name="userid" value="#{bill.user.user.id}" /> <f:param name="userid" value="#{bill.user.user.id}" />
</h:link> </h:link>
<h:outputText rendered="#{not billListView.canWriteBill}" value="#{bill.addr1}" /> <h:outputText rendered="#{not billListView.canWriteBill}"
value="#{bill.addr1}" />
</p:column> </p:column>
<p:column> <p:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['bill.sentDate']}" /> <h:outputText value="${i18n['bill.sentDate']}" />
</f:facet> </f:facet>
<h:outputText value="#{bill.sentDateTime}"> <h:outputText value="#{bill.sentDateTime}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" /> <f:convertDateTime pattern="#{sessionHandler.datetimeFormat}"
timeZone="#{sessionHandler.timezone}" />
</h:outputText> </h:outputText>
</p:column> </p:column>
<p:column> <p:column>
...@@ -54,30 +70,37 @@ ...@@ -54,30 +70,37 @@
<f:converter binding="#{referenceNumberConverter}" /> <f:converter binding="#{referenceNumberConverter}" />
</h:outputText> </h:outputText>
</p:column> </p:column>
<!--
<p:column headerText="#{i18n['bill.notes']}" rendered="#{productShopView.gatherBillInfo}"> <p:column headerText="#{i18n['bill.notes']}" rendered="#{productShopView.gatherBillInfo}">
<h:outputText value="#{bill.notes}" /> <h:outputText value="#{bill.notes}" />
</p:column> </p:column>
-->
<p:column> <p:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['bill.vat']}" /> <h:outputText value="${i18n['bill.totalPrice']}" />
</f:facet> </f:facet>
<h:outputText value="#{bill.totalVat()}"> <h:outputText value="#{bill.totalPrice()}">
<f:convertNumber currencyCode="EUR" maxFractionDigits="2" minFractionDigits="2" type="currency" locale="#{sessionHandler.locale}" /> <f:convertNumber currencyCode="EUR" maxFractionDigits="2"
minFractionDigits="2" type="currency"
locale="#{sessionHandler.locale}" />
</h:outputText> </h:outputText>
</p:column> </p:column>
<p:column> <p:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['bill.totalPrice']}" /> <h:outputText value="${i18n['bill.vat']}" />
</f:facet> </f:facet>
<h:outputText value="#{bill.totalPrice()}"> <h:outputText value="#{bill.totalVat()}">
<f:convertNumber currencyCode="EUR" maxFractionDigits="2" minFractionDigits="2" type="currency" locale="#{sessionHandler.locale}" /> <f:convertNumber currencyCode="EUR" maxFractionDigits="2"
minFractionDigits="2" type="currency"
locale="#{sessionHandler.locale}" />
</h:outputText> </h:outputText>
</p:column> </p:column>
<p:column rendered="#{(!bill.expired and sessionHandler.isEventBoolProperty('ALLOW_BILLING')) or billListView.canWriteBill}">
<p:column
rendered="#{(!bill.expired and sessionHandler.isEventBoolProperty('ALLOW_BILLING')) or billListView.canWriteBill}">
<ui:fragment> <ui:fragment>
<a href="#{request.contextPath}/PrintBill?billid=#{bill.id}" target="_blank">#{i18n['bill.printBill']}</a> <a href="#{request.contextPath}/PrintBill?billid=#{bill.id}"
target="_blank">#{i18n['bill.printBill']}</a>
</ui:fragment> </ui:fragment>
</p:column> </p:column>
<p:column> <p:column>
...@@ -91,23 +114,32 @@ ...@@ -91,23 +114,32 @@
</h:link> </h:link>
</p:column> </p:column>
<p:column rendered="#{billListView.canWriteBill}"> <p:column rendered="#{billListView.canWriteBill}">
<p:commandButton update="billList" onerror="location.reload(true)" rendered="#{bill.paidDate == null and billListView.showPayButtons}" action="#{billListView.markPaid()}" value="#{i18n['bill.markPaid']}" /> <p:commandButton update="billList" onerror="location.reload(true)"
<h:outputText rendered="#{bill.paidDate != null}" value="#{i18n['bill.isPaid']}" /> rendered="#{bill.paidDate == null and billListView.showPayButtons}"
<h:outputText rendered="#{bill.paidDate == null and !billListView.showPayButtons}" value="#{i18n['bill.isNotPaid']}" /> action="#{billListView.markPaid()}"
value="#{i18n['bill.markPaid']}" />
<h:outputText rendered="#{bill.paidDate != null}"
value="#{i18n['bill.isPaid']}" />
<h:outputText
rendered="#{bill.paidDate == null and !billListView.showPayButtons}"
value="#{i18n['bill.isNotPaid']}" />
</p:column> </p:column>
<p:column rendered="#{!billListView.canWriteBill}"> <p:column rendered="#{!billListView.canWriteBill}">
<h:outputText rendered="#{bill.paidDate != null}" value="#{i18n['bill.isPaid']}" /> <h:outputText rendered="#{bill.paidDate != null}"
<h:outputText rendered="#{bill.paidDate == null}" value="#{i18n['bill.isNotPaid']}" /> value="#{i18n['bill.isPaid']}" />
<h:outputText rendered="#{bill.paidDate == null}"
value="#{i18n['bill.isNotPaid']}" />
</p:column> </p:column>
<p:rowExpansion rendered="#{billListView.bills.rowCount lt 20}"> <p:rowExpansion rendered="#{billListView.bills.rowCount lt 20}">
<p:dataList value="#{bill.billLines}" var="line"> <p:dataList value="#{bill.billLines}" var="line">
<h:outputText value="#{line.name}" />: <h:outputText value="#{line.name}" />:
<h:outputText value="#{line.quantity}"> <h:outputText value="#{line.quantity}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="0" /> <f:convertNumber minFractionDigits="0" maxFractionDigits="0" />
</h:outputText> </h:outputText>
</p:dataList > </p:dataList>
</p:rowExpansion> </p:rowExpansion>
</p:dataTable> </p:dataTable>
</h:form> </h:form>
......
...@@ -31,6 +31,11 @@ function placemap(opts) ...@@ -31,6 +31,11 @@ function placemap(opts)
opts.editclick = function(x, y) {return false;}; opts.editclick = function(x, y) {return false;};
} }
if(opts.placereserve === undefined)
{
opts.placereserve = false;
}
// px is returned object // px is returned object
var px = { var px = {
...@@ -40,7 +45,8 @@ function placemap(opts) ...@@ -40,7 +45,8 @@ function placemap(opts)
onclick: opts.onclick, onclick: opts.onclick,
editclick: opts.editclick, editclick: opts.editclick,
clicked_place: undefined, clicked_place: undefined,
locale: opts.locale || 'fi' locale: opts.locale || 'fi',
placereserve: opts.placereserve,
}; };
if (px.locale == "und") px.locale == "fi"; if (px.locale == "und") px.locale == "fi";
...@@ -297,10 +303,13 @@ function placemap(opts) ...@@ -297,10 +303,13 @@ function placemap(opts)
{ {
places places
.on('mouseover', show_tooltip) .on('mouseover', show_tooltip)
.on('mouseout', hide_tooltip) .on('mouseout', hide_tooltip);
.on('click', function (d, i) {
toggle_clicked(d3.select(this)); if(px.placereserve) {
}); places.on('click', function (d, i) {
toggle_clicked(d3.select(this));
});
}
} }
} }
......
...@@ -122,11 +122,15 @@ public class IrcServlet extends HttpServlet { ...@@ -122,11 +122,15 @@ public class IrcServlet extends HttpServlet {
* response) * response)
*/ */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String msg = request.getParameter("msg"); for (IrcBot b : bots) {
if (msg != null && !msg.isEmpty()) b.start();
for (IrcBot b : bots) { }
b.say(msg);
} // String msg = request.getParameter("msg");
// if (msg != null && !msg.isEmpty())
// for (IrcBot b : bots) {
// b.say(msg);
// }
} }
/** /**
......
package fi.codecrew.moya.web.cdiview.map; package fi.codecrew.moya.web.cdiview.map;
import java.util.Collection;
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.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.faces.context.FacesContext; import javax.faces.context.FacesContext;
import javax.inject.Inject; import javax.inject.Inject;
...@@ -21,10 +21,12 @@ import fi.codecrew.moya.enums.apps.MapPermission; ...@@ -21,10 +21,12 @@ import fi.codecrew.moya.enums.apps.MapPermission;
import fi.codecrew.moya.exceptions.BortalCatchableException; import fi.codecrew.moya.exceptions.BortalCatchableException;
import fi.codecrew.moya.model.EventMap; import fi.codecrew.moya.model.EventMap;
import fi.codecrew.moya.model.EventUser; import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.Place; import fi.codecrew.moya.model.Place;
import fi.codecrew.moya.model.PlaceSlot;
import fi.codecrew.moya.model.Product;
import fi.codecrew.moya.model.map.MapReservationQueueEntry; import fi.codecrew.moya.model.map.MapReservationQueueEntry;
import fi.codecrew.moya.web.cdiview.GenericCDIView; import fi.codecrew.moya.web.cdiview.GenericCDIView;
import fi.codecrew.moya.web.cdiview.shop.ProductShopView;
import fi.codecrew.moya.web.cdiview.user.UserView; import fi.codecrew.moya.web.cdiview.user.UserView;
@Named @Named
...@@ -58,14 +60,67 @@ public class AjaxMapView extends GenericCDIView { ...@@ -58,14 +60,67 @@ public class AjaxMapView extends GenericCDIView {
@EJB @EJB
private QueueBeanLocal quebean; private QueueBeanLocal quebean;
private Collection<Slotcounter> slotcount;
public static class Slotcounter {
private final Product product;
private Integer count = 0;
public Slotcounter(Product prod)
{
this.product = prod;
}
public Integer getCount() {
return count;
}
public Product getProduct() {
return product;
}
public void increment() {
++count;
}
}
public void initReserveMap() { public void initReserveMap() {
initMap(); if (super.requirePermissions(MapPermission.BUY_PLACES) && map == null) {
map = placebean.findMap(mapId); EventUser u = userview.getSelectedUser();
EventMap map = initMap();
List<PlaceSlot> usersPlaceslots = placebean.getFreePlaceslots(u, map);
if (usersPlaceslots.isEmpty()) {
logger.info("There are no placeslots available for user");
map = null;
super.navihandler.forward("/shop/createBill?faces-redirect=true");
} else {
quebean.enterQueue(map, u);
countPlaceslots(usersPlaceslots);
}
}
}
private void countPlaceslots(List<PlaceSlot> slots)
{
HashMap<Product, Slotcounter> prodmap = new HashMap<Product, Slotcounter>();
for (PlaceSlot p : slots) {
if (!prodmap.containsKey(p.getProduct())) {
prodmap.put(p.getProduct(), new Slotcounter(p.getProduct()));
}
prodmap.get(p.getProduct()).increment();
}
slotcount = prodmap.values();
logger.info("Slotcount size {}", slotcount.size());
} }
public void initViewMap() { public void initViewMap() {
initMap(); if (super.requirePermissions(MapPermission.VIEW) && map == null) {
initMap();
}
} }
private Boolean queEnabled = null; private Boolean queEnabled = null;
...@@ -131,9 +186,14 @@ public class AjaxMapView extends GenericCDIView { ...@@ -131,9 +186,14 @@ public class AjaxMapView extends GenericCDIView {
} }
private Boolean reserving;
public boolean isReserving() public boolean isReserving()
{ {
return quebean.isReserving(initMap(), permbean.getCurrentUser()); if (reserving == null) {
reserving = quebean.isReserving(initMap(), permbean.getCurrentUser());
}
return reserving;
} }
public boolean canUserBuy() { public boolean canUserBuy() {
...@@ -221,4 +281,14 @@ public class AjaxMapView extends GenericCDIView { ...@@ -221,4 +281,14 @@ public class AjaxMapView extends GenericCDIView {
public void setQueueEntry(MapReservationQueueEntry queueEntry) { public void setQueueEntry(MapReservationQueueEntry queueEntry) {
this.queueEntry = queueEntry; this.queueEntry = queueEntry;
} }
public Collection<Slotcounter> getSlotcount() {
return slotcount;
}
public void setSlotcount(Collection<Slotcounter> slotcount) {
this.slotcount = slotcount;
}
} }
...@@ -32,6 +32,9 @@ bill.billNumber = Tilausnumero ...@@ -32,6 +32,9 @@ bill.billNumber = Tilausnumero
bill.cancel = Cancel bill bill.cancel = Cancel bill
bill.expires = Expires bill.expires = Expires
bill.isExpired = Bill is expired bill.isExpired = Bill is expired
bill.isNoPaid = Maksamatta
bill.isNotPaid = Maksamatta
bill.isPaid = Maksettu
bill.markPaid.cash = Maksa k\u00E4teisell\u00E4 bill.markPaid.cash = Maksa k\u00E4teisell\u00E4
bill.markPaid.cashOrCredit = K\u00E4teisell\u00E4 vai krediiteill\u00E4? bill.markPaid.cashOrCredit = K\u00E4teisell\u00E4 vai krediiteill\u00E4?
bill.markPaid.credits = Maksa krediiteill\u00E4 bill.markPaid.credits = Maksa krediiteill\u00E4
...@@ -41,6 +44,7 @@ bill.products = Tuotteet ...@@ -41,6 +44,7 @@ bill.products = Tuotteet
bill.save = Save bill.save = Save
bill.showPayButtons = Show pay buttons bill.showPayButtons = Show pay buttons
billine.name = Lippu
billine.vatp = vat-% billine.vatp = vat-%
bortalApplication.BILL = Creating, and managing bills bortalApplication.BILL = Creating, and managing bills
...@@ -136,6 +140,16 @@ error = Virhe ...@@ -136,6 +140,16 @@ error = Virhe
error.contact = If this happens again, contact Info with the following code: error.contact = If this happens again, contact Info with the following code:
error.error = You have encountered an error. error.error = You have encountered an error.
etickets.eticketcode = Lippu
etickets.place = Paikka
etickets.placeinfo = Paikkatiedot
etickets.placemap = Paikat kartalla
etickets.product = Lippu
etickets.sendAsMail = L\u00E4het\u00E4 s\u00E4hk\u00F6postina
etickets.showMap = N\u00E4yt\u00E4 kartta
etickets.title = Lippusi
etickets.user = Paikan omistaja
event.calendar.title = Tapahtumakalenteri event.calendar.title = Tapahtumakalenteri
event.domains.title = Domain event.domains.title = Domain
event.edit = Edit event.edit = Edit
...@@ -220,6 +234,10 @@ incomingflow.usereditor = K\u00E4ytt\u00E4j\u00E4 ...@@ -220,6 +234,10 @@ incomingflow.usereditor = K\u00E4ytt\u00E4j\u00E4
incomingflow.usereditor.info = Tiedot incomingflow.usereditor.info = Tiedot
incomingflow.usereditor.picture = Kuvanotto incomingflow.usereditor.picture = Kuvanotto
invite.permissionDenied = Sinulla ei ole oikeutta luovuttaa paikkaa eteenp\u00E4in.
invite.userLoginSuccessfull = Kutsu vastaanotettu onnistuneesti
invite.userLoginUnSuccessfull = Kirjautuminen ep\u00E4onnistui
lanEventPrivateProperty.defaultValue = Default value lanEventPrivateProperty.defaultValue = Default value
lanEventPrivateProperty.editProperty = Edit property lanEventPrivateProperty.editProperty = Edit property
lanEventPrivateProperty.save = Save lanEventPrivateProperty.save = Save
...@@ -290,6 +308,9 @@ manageparticipants.title = Osallistujat ...@@ -290,6 +308,9 @@ manageparticipants.title = Osallistujat
map.id = # map.id = #
mapView.check = P\u00E4ivit\u00E4 jonopaikka
mapView.enterQueue = Liity jonoon
menu = Valikko menu = Valikko
mode.admin = Yll\u00E4piton\u00E4kym\u00E4 mode.admin = Yll\u00E4piton\u00E4kym\u00E4
...@@ -312,6 +333,7 @@ page.bill.list.header = Bills ...@@ -312,6 +333,7 @@ page.bill.list.header = Bills
page.bill.listAll.header = Bills page.bill.listAll.header = Bills
page.bill.placemap.header = Place map page.bill.placemap.header = Place map
page.bill.show.header = Tilauksen tiedot page.bill.show.header = Tilauksen tiedot
page.svm.error.header = Verkkomaksu ep\u00E4onnistui
pagegroup.auth.login = frontpage pagegroup.auth.login = frontpage
...@@ -325,13 +347,24 @@ permissiondenied.alreadyLoggedIn = You don't have enough rights ...@@ -325,13 +347,24 @@ permissiondenied.alreadyLoggedIn = You don't have enough rights
permissiondenied.header = Access denied permissiondenied.header = Access denied
permissiondenied.notLoggedIn = You don't have enough rights to enter this site. permissiondenied.notLoggedIn = You don't have enough rights to enter this site.
placegroupview.toptext = \ place.cancelSend = Peruuta siirto
place.send = Siirr\u00E4 paikka
placegroup.showEticket = N\u00E4yt\u00E4 lippu
placegroupview.groupCreator = Tilaaja
placegroupview.owner = Omistaja
placegroupview.placetransferred = Paikka annettu eteenp\u00E4in
placegroupview.toptext = \
poll.edit = edit poll.edit = edit
print = Print print = Print
product.description = Kuvaus product.description = Kuvaus
product.expired = Vanhentuneet
product.name = Tuotteen nimi
product.price = Hinta (sis. alv)
product.providedRole = Product defines role product.providedRole = Product defines role
product.returnProductEdit = Return to product: product.returnProductEdit = Return to product:
product.saved = Product saved product.saved = Product saved
...@@ -368,6 +401,7 @@ roleView.showPermissioneditor = N\u00E4yt\u00E4 oikeusasetukset ...@@ -368,6 +401,7 @@ roleView.showPermissioneditor = N\u00E4yt\u00E4 oikeusasetukset
save = Tallenna save = Tallenna
shop.customPrice = Uusi hinta shop.customPrice = Uusi hinta
shop.product.name = Lippu
shop.unitdiscount = Alennus shop.unitdiscount = Alennus
submenu.NotImplementedYet = Not implemented submenu.NotImplementedYet = Not implemented
...@@ -381,7 +415,11 @@ submenu.info.shop = Kauppa ...@@ -381,7 +415,11 @@ submenu.info.shop = Kauppa
submenu.lectureadmin.lectureParticipants = Tarkastele osallistujia submenu.lectureadmin.lectureParticipants = Tarkastele osallistujia
submenu.lectureadmin.manageLectureGroups = Hallinnoi submenu.lectureadmin.manageLectureGroups = Hallinnoi
submenu.lectures.viewLectures = Ilmoittaudu submenu.lectures.viewLectures = Ilmoittaudu
submenu.neomap.view = Paikkakartta
submenu.place.placemap = Paikkakartta
submenu.place.viewplacemap = Paikkatilanne
submenu.reports.basicStatistics = Tilastoja submenu.reports.basicStatistics = Tilastoja
submenu.shop.createBill = Osta lippuja
subnavi.cards = \u0009\u0009 subnavi.cards = \u0009\u0009
subnavi.info = Info subnavi.info = Info
...@@ -390,6 +428,8 @@ success = Onnistui ...@@ -390,6 +428,8 @@ success = Onnistui
suffix.minutes = min suffix.minutes = min
svm.success.successMessage = Verkkomaksu onnistui.
topnavi.adminlectures = Kurssit ja luennot topnavi.adminlectures = Kurssit ja luennot
topnavi.license = Lisenssikoodit topnavi.license = Lisenssikoodit
topnavi.userlectures = Kurssit ja luennot topnavi.userlectures = Kurssit ja luennot
...@@ -428,92 +468,3 @@ usercart.showoverview = Vie tarkastusn\u00E4kym\u00E4\u00E4n ...@@ -428,92 +468,3 @@ usercart.showoverview = Vie tarkastusn\u00E4kym\u00E4\u00E4n
viewlectures.title = Kurssit ja luennot viewlectures.title = Kurssit ja luennot
yes = Kyll\u00E4 yes = Kyll\u00E4
user.emailAndUsername=Email (toimii k\u00E4ytt\u00E4j\u00E4tunnuksena)
user.emailtooshortmessage=
user.emailsunmatch=
user.emailAgain=S\u00E4hk\u00F6posti (uudelleen)
user.email=S\u00E4hk\u00F6postiosoite
required=Arvo vaaditaan
user.createdmessage=K\u00E4ytt\u00E4j\u00E4tunnus on luotu onnistuneesti.
product.vat=ALV-%
productFlag.CREATE_NEW_PLACE_WHEN_BOUGHT=Luo uusi paikka ostettaessa
submenu.neomap.view=Paikkakartta
user.cancelInvite=Peruuta kutsu
user.invite.placeInvite.header=Liit\u00E4 paikka itsellesi
userview.userExistsByEmail=
invite.permissionDenied=Sinulla ei ole oikeutta luovuttaa paikkaa eteenp\u00E4in.
invite.userLoginSuccessfull=Kutsu vastaanotettu onnistuneesti
invite.userLoginUnSuccessfull=Kirjautuminen ep\u00E4onnistui
placegroupview.placetransferred=Paikka annettu eteenp\u00E4in
shop.create=
submenu.shop.createBill=Osta lippuja
submenu.shop.listReaders=
submenu.shop.shopToUser=
submenu.shop.showReaderEvents=
submenu.tournaments.admin.index=
submenu.bill.billSummary=
placegroupview.reservationProduct=
bill.isNoPaid=Maksamatta
product.expired=Vanhentuneet
product.edit=
etickets.title=Lippusi
etickets.place=Paikka
etickets.user=Paikan omistaja
etickets.product=Lippu
etickets.placeinfo=Paikkatiedot
etickets.eticketcode=Lippu
etickets.placemap=Paikat kartalla
placegroup.showEticket=N\u00E4yt\u00E4 lippu
mapView.enterQueue=Liity jonoon
mapView.check=P\u00E4ivit\u00E4 jonopaikka
submenu.place.placemap=Paikkakartta
submenu.poll.index=
submenu.product.create=
submenu.product.list=
product.name=Tuotteen nimi
placeSelect.placeName=
shop.product.name=Lippu
placeSelect.placePrice=
printedCard.cardState=
product.cashed=
product.shopInstant=
productshop.billCreated=
shop.cartPrice=
shop.product=
product.price=Hinta (sis. alv)
billine.name=Lippu
bill.receiverAddress=
bill.referencenumber=
billine.linePrice=
bortalApplication.networkauthentication.OVERRIDE_PLACE_REQUIREMENT=
submenu.place.viewplacemap=Paikkatilanne
svm.success.successMessage=Verkkomaksu onnistui.
template.loggedInAs=
page.svm.error.header=Verkkomaksu ep\u00E4onnistui
bill.isNotPaid=Maksamatta
bill.isPaid=Maksettu
bill.addr3=
bill.addr4=
bill.billIsPaid=
page.account.edit.header=
page.auth.login.loginerror.pagegroup=
page.product.create.pagegroup=
page.product.validateBillProducts.header=
page.role.create.pagegroup=
page.role.edit.pagegroup=
page.role.list.pagegroup=
page.shop.readerevents.header=
page.product.list.pagegroup=
page.tests.placemap.pagegroup=
place.groupremove=
placegroupView.editplace=
placegroupview.owner=Omistaja
placegroupview.groupCreator=Tilaaja
placegroupview.placeReleased=
place.mapX=
place.send=Siirr\u00E4 paikka
place.mapY=
place.cancelSend=Peruuta siirto
place.buyable=
etickets.sendAsMail=L\u00E4het\u00E4 s\u00E4hk\u00F6postina
etickets.showMap=N\u00E4yt\u00E4 kartta
...@@ -76,6 +76,8 @@ bill.deliveryTerms = Delivery terms ...@@ -76,6 +76,8 @@ bill.deliveryTerms = Delivery terms
bill.edit = edit bill.edit = edit
bill.expires = Expires bill.expires = Expires
bill.isExpired = Bill is expired bill.isExpired = Bill is expired
bill.isNoPaid = Not paid
bill.isNotPaid = Not paid
bill.isPaid = Paid bill.isPaid = Paid
bill.markPaid = Mark paid bill.markPaid = Mark paid
bill.markPaid.cash = Buy with cash bill.markPaid.cash = Buy with cash
...@@ -348,6 +350,16 @@ error = Error ...@@ -348,6 +350,16 @@ error = Error
error.contact = If this happens again, contact Info with the following code: error.contact = If this happens again, contact Info with the following code:
error.error = You have encountered an error. error.error = You have encountered an error.
etickets.eticketcode = Ticket
etickets.place = Place
etickets.placeinfo = Placeinfo
etickets.placemap = Places on map
etickets.product = Ticket
etickets.sendAsMail = Send as mail
etickets.showMap = Show map
etickets.title = Your ticket
etickets.user = Place owner
event.calendar.title = Event calendar event.calendar.title = Event calendar
event.defaultRole = Default user role event.defaultRole = Default user role
event.domains.title = Domain event.domains.title = Domain
...@@ -561,8 +573,11 @@ invite.createNewUserHeader = Create new user ...@@ -561,8 +573,11 @@ invite.createNewUserHeader = Create new user
invite.emailexists = User with that email address already exists in the system. invite.emailexists = User with that email address already exists in the system.
invite.existingUserHeader = Login with existing username invite.existingUserHeader = Login with existing username
invite.notFound = Invite invalid or already used invite.notFound = Invite invalid or already used
invite.permissionDenied = You don't have permission to regive this place.
invite.successfull = Invite sent successfully invite.successfull = Invite sent successfully
invite.userCreateSuccessfull = User successfully created. You can now login. invite.userCreateSuccessfull = User successfully created. You can now login.
invite.userLoginSuccessfull = Invite accepted successfully
invite.userLoginUnSuccessfull = Login unsuccessfull
javax.validation.constraints.AssertFalse.message = must be false javax.validation.constraints.AssertFalse.message = must be false
javax.validation.constraints.AssertTrue.message = must be true javax.validation.constraints.AssertTrue.message = must be true
...@@ -695,10 +710,19 @@ mapManage.lockedPlaces = Locked {0} places. ...@@ -695,10 +710,19 @@ mapManage.lockedPlaces = Locked {0} places.
mapManage.releasedPlaces = Released {0} places mapManage.releasedPlaces = Released {0} places
mapView.buyPlaces = Lock selected places mapView.buyPlaces = Lock selected places
mapView.check = Check own queuestatus
mapView.enterQueue = Enter queue
mapView.errorWhenReleasingPlace = Error when releasing place mapView.errorWhenReleasingPlace = Error when releasing place
mapView.errorWhenReservingPlace = Error when reserving place! mapView.errorWhenReservingPlace = Error when reserving place!
mapView.errorWhileBuyingPlaces = Error when buying places. Please try again. If error reoccurs please contact organizers. mapView.errorWhileBuyingPlaces = Error when buying places. Please try again. If error reoccurs please contact organizers.
mapView.lockPlacesBeforeLeaving = Remember to lock the places before leaving this page
mapView.notEnoughCreditsToReserve = You don't have enough credits to reserve this place. mapView.notEnoughCreditsToReserve = You don't have enough credits to reserve this place.
mapView.productcount.productcount = Number of tickets
mapView.productcount.productname = Ticket type
mapView.queuePosition = Your position in queue
mapView.queuePositionUpdated = Queue position updated
mapView.youAreInQueue = You are in queue Wait for your turn to select places.
mapView.yourPlaces = Your unused places
mapedit.save = Save map changes mapedit.save = Save map changes
...@@ -725,6 +749,8 @@ mode.user = Usermode ...@@ -725,6 +749,8 @@ mode.user = Usermode
nasty.user = Go away! nasty.user = Go away!
neomap.updateMap = Update map
networkassociation.action = Action networkassociation.action = Action
networkassociation.create_association = Create association networkassociation.create_association = Create association
networkassociation.create_time = Created on networkassociation.create_time = Created on
...@@ -824,6 +850,7 @@ page.role.create.pagegroup = admin ...@@ -824,6 +850,7 @@ page.role.create.pagegroup = admin
page.role.edit.pagegroup = admin page.role.edit.pagegroup = admin
page.role.list.pagegroup = admin page.role.list.pagegroup = admin
page.shop.readerevents.header = RFID shop page.shop.readerevents.header = RFID shop
page.svm.error.header = Payment failed
page.svm.failure.header = Payment error page.svm.failure.header = Payment error
page.svm.notification.header = Suomen verkkomaksut notification page.svm.notification.header = Suomen verkkomaksut notification
page.svm.pending.header = Payment pending page.svm.pending.header = Payment pending
...@@ -864,6 +891,7 @@ permissiondenied.header = Access denied ...@@ -864,6 +891,7 @@ permissiondenied.header = Access denied
permissiondenied.notLoggedIn = You don't have enough rights to enter this site. permissiondenied.notLoggedIn = You don't have enough rights to enter this site.
place.buyable = Buyable place.buyable = Buyable
place.cancelSend = Cancel transfer
place.code = Placecode place.code = Placecode
place.commit = Save place.commit = Save
place.description = Description place.description = Description
...@@ -881,6 +909,7 @@ place.product = Product ...@@ -881,6 +909,7 @@ place.product = Product
place.release = Release this place place.release = Release this place
place.releasetime = Releasetime place.releasetime = Releasetime
place.reserveForUser = Reserve for the user place.reserveForUser = Reserve for the user
place.send = Transfer place
place.width = Width place.width = Width
placeSelect.legend.blue = My selected place placeSelect.legend.blue = My selected place
...@@ -905,14 +934,17 @@ placegroup.name = Name ...@@ -905,14 +934,17 @@ placegroup.name = Name
placegroup.placename = Place placegroup.placename = Place
placegroup.places = Places placegroup.places = Places
placegroup.printPdf = Print tickets placegroup.printPdf = Print tickets
placegroup.showEticket = Show eticket
placegroupView.editplace = Edit place placegroupView.editplace = Edit place
placegroupview.groupCreator = Orderer placegroupview.groupCreator = Orderer
placegroupview.header = My places placegroupview.header = My places
placegroupview.noMemberships = No places placegroupview.noMemberships = No places
placegroupview.owner = Owner
placegroupview.placeReleaseFailed = Releasing of place failed! placegroupview.placeReleaseFailed = Releasing of place failed!
placegroupview.placeReleased = Place {0} released placegroupview.placeReleased = Place {0} released
placegroupview.placetransferred = Place is transferred
placegroupview.releasePlace = Release placegroupview.releasePlace = Release
placegroupview.reservationName = Place placegroupview.reservationName = Place
placegroupview.reservationProduct = Ticket placegroupview.reservationProduct = Ticket
...@@ -954,6 +986,7 @@ product.createDiscount = Add volumediscount ...@@ -954,6 +986,7 @@ product.createDiscount = Add volumediscount
product.createLimit = Create product limitation product.createLimit = Create product limitation
product.description = Description product.description = Description
product.edit = edit product.edit = edit
product.expired = Expired
product.inventoryQuantity = Inventory count product.inventoryQuantity = Inventory count
product.name = Product name product.name = Product name
product.paid = Paid product.paid = Paid
...@@ -1110,6 +1143,7 @@ shop.currentBalance = Current balance ...@@ -1110,6 +1143,7 @@ shop.currentBalance = Current balance
shop.customPrice = new price shop.customPrice = new price
shop.price = price shop.price = price
shop.product = Product shop.product = Product
shop.product.name = Ticket
shop.readBarcode = Read shop.readBarcode = Read
shop.shop = Shop shop.shop = Shop
shop.shoppingcartCommitted = Products bought shop.shoppingcartCommitted = Products bought
...@@ -1203,6 +1237,8 @@ submenu.license.manageCodes = Manage codes ...@@ -1203,6 +1237,8 @@ submenu.license.manageCodes = Manage codes
submenu.license.viewCodes = View codes submenu.license.viewCodes = View codes
submenu.map.create = Create map submenu.map.create = Create map
submenu.map.list = List maps submenu.map.list = List maps
submenu.neomap.reserve = Reserve places
submenu.neomap.view = Map
submenu.networkassociation.index = Associations submenu.networkassociation.index = Associations
submenu.orgrole.create = Create organisationrole submenu.orgrole.create = Create organisationrole
submenu.orgrole.list = Organisation roles submenu.orgrole.list = Organisation roles
...@@ -1214,6 +1250,7 @@ submenu.place.editGroup = Edit group ...@@ -1214,6 +1250,7 @@ submenu.place.editGroup = Edit group
submenu.place.insertToken = Insert placecode submenu.place.insertToken = Insert placecode
submenu.place.myGroups = Place reservations submenu.place.myGroups = Place reservations
submenu.place.placemap = Placemap submenu.place.placemap = Placemap
submenu.place.viewplacemap = Places status
submenu.poll.index = Polls submenu.poll.index = Polls
submenu.product.create = Create product submenu.product.create = Create product
submenu.product.list = List products submenu.product.list = List products
...@@ -1627,40 +1664,3 @@ voting.create.voteEnd = Voting close ...@@ -1627,40 +1664,3 @@ voting.create.voteEnd = Voting close
voting.create.voteStart = Voting start voting.create.voteStart = Voting start
yes = Yes yes = Yes
shop.unitdiscount=Discount
shop.customPrice=new price
user.emailAndUsername=Email (works also as username)
user.emailtooshortmessage=Email must be atleast {0} characters long.
user.emailsunmatch=Email addresses does not match.
user.emailAgain=Email (again)
required=Required
usercart.showoverview=
submenu.neomap.view=Map
user.cancelInvite=Cancel invite
user.invite.placeInvite.header=Receive sendet place
userview.userExistsByEmail=Email already exists\! You may already have an account.
invite.permissionDenied=You don't have permission to regive this place.
invite.userLoginSuccessfull=Invite accepted successfully
invite.userLoginUnSuccessfull=Login unsuccessfull
placegroupview.placetransferred=Place is transferred
bill.isNoPaid=Not paid
product.expired=Expired
etickets.title=Your ticket
etickets.place=Place
etickets.user=Place owner
etickets.product=Ticket
etickets.placeinfo=Placeinfo
etickets.eticketcode=Ticket
etickets.placemap=Places on map
placegroup.showEticket=Show eticket
mapView.enterQueue=Enter queue
mapView.check=Check own queuestatus
shop.product.name=Ticket
submenu.place.viewplacemap=Places status
page.svm.error.header=Payment failed
bill.isNotPaid=Not paid
placegroupview.owner=Owner
place.send=Transfer place
place.cancelSend=Cancel transfer
etickets.sendAsMail=Send as mail
etickets.showMap=Show map
...@@ -32,7 +32,7 @@ actionlog.create.submitbutton = L\u00E4het\u00E4 ...@@ -32,7 +32,7 @@ actionlog.create.submitbutton = L\u00E4het\u00E4
actionlog.create.taskradio = Teht\u00E4v\u00E4 actionlog.create.taskradio = Teht\u00E4v\u00E4
actionlog.crew = Crew actionlog.crew = Crew
actionlog.message = Tapahtuma actionlog.message = Tapahtuma
actionlog.messagelist.description = Voit seurata sek\u00E4 luoda uusia ActionMessageja t\u00E4ss\u00E4 n\u00E4kym\u00E4ss\u00E4. actionlog.messagelist.description = Voit seurata sek\u00E4 luoda uusia ActionMessageja t\u00E4ss\u00E4 n\u00E4kym\u00E4ss\u00E4
actionlog.messagelist.header = Viestilista actionlog.messagelist.header = Viestilista
actionlog.messagestate.DONE = Tehty actionlog.messagestate.DONE = Tehty
actionlog.messagestate.NEW = Uusi actionlog.messagestate.NEW = Uusi
...@@ -67,7 +67,7 @@ bill.allowStatistics = Tietoni saa julkaista tilastoissa ...@@ -67,7 +67,7 @@ bill.allowStatistics = Tietoni saa julkaista tilastoissa
bill.billAmount = Tilauksen summa (sis. alv) bill.billAmount = Tilauksen summa (sis. alv)
bill.billIsPaid = Tilaus on maksettu bill.billIsPaid = Tilaus on maksettu
bill.billLines = Tuotteet bill.billLines = Tuotteet
bill.billMarkedPaidMail.message = Laskusi numero {0} on merkitty maksetuksi. Voit nyt siirty\u00E4 lippukauppaan varamaan haluamasi paikat. Tervetuloa tapahtumaan\! bill.billMarkedPaidMail.message = Laskusi numero {0} on merkitty maksetuksi. Voit nyt siirty\u00E4 lippukauppaan varamaan haluamasi paikat. Tervetuloa tapahtumaan!
bill.billMarkedPaidMail.subject = Lasku merkitty maksetuksi bill.billMarkedPaidMail.subject = Lasku merkitty maksetuksi
bill.billNumber = Tilausnumero bill.billNumber = Tilausnumero
bill.billPaidDate = Maksup\u00E4iv\u00E4 bill.billPaidDate = Maksup\u00E4iv\u00E4
...@@ -76,6 +76,8 @@ bill.deliveryTerms = Toimitusehdot ...@@ -76,6 +76,8 @@ bill.deliveryTerms = Toimitusehdot
bill.edit = Muokkaa bill.edit = Muokkaa
bill.expires = Vanhentuu bill.expires = Vanhentuu
bill.isExpired = Lasku on vanhentunut bill.isExpired = Lasku on vanhentunut
bill.isNoPaid = Maksamatta
bill.isNotPaid = Maksamatta
bill.isPaid = Maksettu bill.isPaid = Maksettu
bill.markPaid = Maksettu bill.markPaid = Maksettu
bill.markPaid.cash = Maksa k\u00E4teisell\u00E4 bill.markPaid.cash = Maksa k\u00E4teisell\u00E4
...@@ -349,6 +351,16 @@ error = Virhe ...@@ -349,6 +351,16 @@ error = Virhe
error.contact = Jos t\u00E4m\u00E4 toistuu, ota seuraava koodi talteen ja ota yhteys Infoon: error.contact = Jos t\u00E4m\u00E4 toistuu, ota seuraava koodi talteen ja ota yhteys Infoon:
error.error = Olet kohdannut virheen. error.error = Olet kohdannut virheen.
etickets.eticketcode = Lippu
etickets.place = Paikka
etickets.placeinfo = Paikkatiedot
etickets.placemap = Paikat kartalla
etickets.product = Lippu
etickets.sendAsMail = L\u00E4het\u00E4 s\u00E4hk\u00F6postiin
etickets.showMap = N\u00E4yt\u00E4 kartta
etickets.title = Lippusi
etickets.user = Paikan omistaja
event.calendar.title = Tapahtumakalenteri event.calendar.title = Tapahtumakalenteri
event.defaultRole = K\u00E4ytt\u00E4jien oletusrooli event.defaultRole = K\u00E4ytt\u00E4jien oletusrooli
event.domains.title = Verkkotunnus event.domains.title = Verkkotunnus
...@@ -571,8 +583,11 @@ invite.createNewUserHeader = Luo uusi k\u00E4ytt\u00E4j\u00E4tunnus ...@@ -571,8 +583,11 @@ invite.createNewUserHeader = Luo uusi k\u00E4ytt\u00E4j\u00E4tunnus
invite.emailexists = J\u00E4rjestelm\u00E4ss\u00E4 on jo k\u00E4ytt\u00E4j\u00E4tunnus samalla s\u00E4hk\u00F6postiosoitteella. invite.emailexists = J\u00E4rjestelm\u00E4ss\u00E4 on jo k\u00E4ytt\u00E4j\u00E4tunnus samalla s\u00E4hk\u00F6postiosoitteella.
invite.existingUserHeader = Kirjaudu sis\u00E4\u00E4n olemassaolevalla tunnuksella invite.existingUserHeader = Kirjaudu sis\u00E4\u00E4n olemassaolevalla tunnuksella
invite.notFound = Kutsu virheellinen tai jo k\u00E4ytetty. invite.notFound = Kutsu virheellinen tai jo k\u00E4ytetty.
invite.permissionDenied = Sinulla ei ole oikeutta luovuttaa paikkaa eteenp\u00E4in.
invite.successfull = Kutsu l\u00E4hetetty invite.successfull = Kutsu l\u00E4hetetty
invite.userCreateSuccessfull = K\u00E4ytt\u00E4j\u00E4tunnus luotu onnistuneesti. Voit nyt kirjautua sis\u00E4\u00E4n j\u00E4rjeselm\u00E4\u00E4n. invite.userCreateSuccessfull = K\u00E4ytt\u00E4j\u00E4tunnus luotu onnistuneesti. Voit nyt kirjautua sis\u00E4\u00E4n j\u00E4rjeselm\u00E4\u00E4n.
invite.userLoginSuccessfull = Kutsu vastaanotettu onnistuneesti
invite.userLoginUnSuccessfull = Kirjautuminen ep\u00E4onnistui
javax.validation.constraints.AssertFalse.message = must be false javax.validation.constraints.AssertFalse.message = must be false
javax.validation.constraints.AssertTrue.message = must be true javax.validation.constraints.AssertTrue.message = must be true
...@@ -704,10 +719,19 @@ mapManage.lockedPlaces = Lukittu kartasta {0} paikkaa. ...@@ -704,10 +719,19 @@ mapManage.lockedPlaces = Lukittu kartasta {0} paikkaa.
mapManage.releasedPlaces = Vapautettu kartasta {0} paikkaa mapManage.releasedPlaces = Vapautettu kartasta {0} paikkaa
mapView.buyPlaces = Lukitse valitut paikat mapView.buyPlaces = Lukitse valitut paikat
mapView.check = P\u00E4ivit\u00E4 jonopaikka
mapView.enterQueue = Liity jonoon
mapView.errorWhenReleasingPlace = Paikkaa vapauttassa tapahtui virhe. mapView.errorWhenReleasingPlace = Paikkaa vapauttassa tapahtui virhe.
mapView.errorWhenReservingPlace = Paikkaa varatessa tapahtui virhe. mapView.errorWhenReservingPlace = Paikkaa varatessa tapahtui virhe.
mapView.errorWhileBuyingPlaces = Virhe paikkojen ostossa. Ole hyv\u00E4 ja yrit\u00E4 uudelleen. Jos virhe toistuu ota yhteytt\u00E4 j\u00E4rjest\u00E4jiin. mapView.errorWhileBuyingPlaces = Virhe paikkojen ostossa. Ole hyv\u00E4 ja yrit\u00E4 uudelleen. Jos virhe toistuu ota yhteytt\u00E4 j\u00E4rjest\u00E4jiin.
mapView.lockPlacesBeforeLeaving = Lukitse paikat ennen sivulta poistumista
mapView.notEnoughCreditsToReserve = Sinulla ei ole riitt\u00E4v\u00E4sti suoritettuja konepaikkamaksuja t\u00E4m\u00E4n paikan varaamiseen. mapView.notEnoughCreditsToReserve = Sinulla ei ole riitt\u00E4v\u00E4sti suoritettuja konepaikkamaksuja t\u00E4m\u00E4n paikan varaamiseen.
mapView.productcount.productcount = Lippujen m\u00E4\u00E4r\u00E4
mapView.productcount.productname = Lipputyyppi
mapView.queuePosition = Paikkasi jonossa
mapView.queuePositionUpdated = Jonotustieto p\u00E4ivitetty
mapView.youAreInQueue = Olet jonossa. Odota vuoroasi valitaksesi haluamasi paikat.
mapView.yourPlaces = Varaamattomat paikkasi
mapedit.save = Tallenna muutokset mapedit.save = Tallenna muutokset
...@@ -734,6 +758,8 @@ mode.user = K\u00E4ytt\u00E4j\u00E4n\u00E4kym\u00E4 ...@@ -734,6 +758,8 @@ mode.user = K\u00E4ytt\u00E4j\u00E4n\u00E4kym\u00E4
nasty.user = Mene pois! nasty.user = Mene pois!
neomap.updateMap = P\u00E4ivit\u00E4 kartta
networkassociation.action = Toiminto networkassociation.action = Toiminto
networkassociation.create_association = Luo assosiaatio networkassociation.create_association = Luo assosiaatio
networkassociation.create_time = Luontiaika networkassociation.create_time = Luontiaika
...@@ -816,6 +842,7 @@ page.place.mygroups.header = Paikkaryhm\u00E4t ...@@ -816,6 +842,7 @@ page.place.mygroups.header = Paikkaryhm\u00E4t
page.place.placemap.header = Paikkakartta page.place.placemap.header = Paikkakartta
page.product.createBill.header = Osta tuotteita page.product.createBill.header = Osta tuotteita
page.product.validateBillProducts.header = Tilaus luotu page.product.validateBillProducts.header = Tilaus luotu
page.svm.error.header = Verkkomaksu ep\u00E4onnistui
page.svm.failure.header = Verkkomaksuvirhe page.svm.failure.header = Verkkomaksuvirhe
page.svm.notification.header = Maksutapahtuman rekister\u00F6inti page.svm.notification.header = Maksutapahtuman rekister\u00F6inti
page.svm.pending.header = Maksukuittausta odotetaan page.svm.pending.header = Maksukuittausta odotetaan
...@@ -846,6 +873,7 @@ permissiondenied.header = P\u00E4\u00E4sy kielletty ...@@ -846,6 +873,7 @@ permissiondenied.header = P\u00E4\u00E4sy kielletty
permissiondenied.notLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia t\u00E4lle sivulle. permissiondenied.notLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia t\u00E4lle sivulle.
place.buyable = Ostettavissa place.buyable = Ostettavissa
place.cancelSend = Peruuta siirto
place.code = Paikkakoodi place.code = Paikkakoodi
place.commit = Tallenna place.commit = Tallenna
place.description = Kuvaus place.description = Kuvaus
...@@ -864,6 +892,7 @@ place.product = Tuote ...@@ -864,6 +892,7 @@ place.product = Tuote
place.release = Vapauta paikka place.release = Vapauta paikka
place.releasetime = Vapautusaika place.releasetime = Vapautusaika
place.reserveForUser = Varaa k\u00E4ytt\u00E4j\u00E4lle place.reserveForUser = Varaa k\u00E4ytt\u00E4j\u00E4lle
place.send = Siirr\u00E4 paikka
place.width = Leveys place.width = Leveys
placeSelect.legend.blue = Oma valittu paikka placeSelect.legend.blue = Oma valittu paikka
...@@ -888,14 +917,17 @@ placegroup.name = Nimi ...@@ -888,14 +917,17 @@ placegroup.name = Nimi
placegroup.placename = Paikka placegroup.placename = Paikka
placegroup.places = Paikat placegroup.places = Paikat
placegroup.printPdf = Tulosta lipputositteet placegroup.printPdf = Tulosta lipputositteet
placegroup.showEticket = N\u00E4yt\u00E4 lippu
placegroupView.editplace = Muokkaa paikkaa placegroupView.editplace = Muokkaa paikkaa
placegroupview.groupCreator = Tilaaja placegroupview.groupCreator = Tilaaja
placegroupview.header = Omat paikat placegroupview.header = Omat paikat
placegroupview.noMemberships = Ei omia paikkoja placegroupview.noMemberships = Ei omia paikkoja
placegroupview.owner = Omistaja
placegroupview.placeReleaseFailed = Paikan vapauttaminen ep\u00E4onnistui! placegroupview.placeReleaseFailed = Paikan vapauttaminen ep\u00E4onnistui!
placegroupview.placeReleased = Paikka {0} vapautettu placegroupview.placeReleased = Paikka {0} vapautettu
placegroupview.placetransferred = Paikka on annettu eteenp\u00E4in.
placegroupview.releasePlace = Vapauta placegroupview.releasePlace = Vapauta
placegroupview.reservationName = Paikka placegroupview.reservationName = Paikka
placegroupview.reservationProduct = Lippu placegroupview.reservationProduct = Lippu
...@@ -937,6 +969,7 @@ product.createDiscount = Lis\u00E4\u00E4 m\u00E4\u00E4r\u00E4alennus ...@@ -937,6 +969,7 @@ product.createDiscount = Lis\u00E4\u00E4 m\u00E4\u00E4r\u00E4alennus
product.createLimit = Luo tuoterajoite product.createLimit = Luo tuoterajoite
product.description = Kuvaus product.description = Kuvaus
product.edit = Muokkaa product.edit = Muokkaa
product.expired = Vanhentuneet
product.inventoryQuantity = Varastotilanne product.inventoryQuantity = Varastotilanne
product.name = Tuotteen nimi product.name = Tuotteen nimi
product.paid = Maksettu product.paid = Maksettu
...@@ -1092,6 +1125,7 @@ shop.currentBalance = T\u00E4m\u00E4nhetkinen saldo ...@@ -1092,6 +1125,7 @@ shop.currentBalance = T\u00E4m\u00E4nhetkinen saldo
shop.customPrice = Uusi hinta shop.customPrice = Uusi hinta
shop.price = Hinta shop.price = Hinta
shop.product = Tuote shop.product = Tuote
shop.product.name = Lippu
shop.readBarcode = Lue shop.readBarcode = Lue
shop.shoppingcartCommitted = Tuotteet ostettu shop.shoppingcartCommitted = Tuotteet ostettu
shop.toAccountValue = Tilille shop.toAccountValue = Tilille
...@@ -1183,7 +1217,8 @@ submenu.license.manageCodes = Hallinnoi lisenssej\u00E4 ...@@ -1183,7 +1217,8 @@ submenu.license.manageCodes = Hallinnoi lisenssej\u00E4
submenu.license.viewCodes = N\u00E4yt\u00E4 koodit submenu.license.viewCodes = N\u00E4yt\u00E4 koodit
submenu.map.create = Uusi kartta submenu.map.create = Uusi kartta
submenu.map.list = N\u00E4yt\u00E4 kartat submenu.map.list = N\u00E4yt\u00E4 kartat
submenu.neomap.view = Varaa paikkasi submenu.neomap.reserve = Varaa paikkasi
submenu.neomap.view = Paikkakartta
submenu.networkassociation.index = Assosiaatiot submenu.networkassociation.index = Assosiaatiot
submenu.orgrole.create = Luo j\u00E4rjest\u00E4j\u00E4rooli submenu.orgrole.create = Luo j\u00E4rjest\u00E4j\u00E4rooli
submenu.orgrole.list = J\u00E4rjest\u00E4j\u00E4roolit submenu.orgrole.list = J\u00E4rjest\u00E4j\u00E4roolit
...@@ -1195,6 +1230,7 @@ submenu.place.editGroup = Muokkaa ryhm\u00E4\u00E4 ...@@ -1195,6 +1230,7 @@ submenu.place.editGroup = Muokkaa ryhm\u00E4\u00E4
submenu.place.insertToken = Sy\u00F6t\u00E4 paikkakoodi submenu.place.insertToken = Sy\u00F6t\u00E4 paikkakoodi
submenu.place.myGroups = Omat paikkavaraukset submenu.place.myGroups = Omat paikkavaraukset
submenu.place.placemap = Paikkakartta submenu.place.placemap = Paikkakartta
submenu.place.viewplacemap = Paikkatilanne
submenu.poll.index = Kyselyt submenu.poll.index = Kyselyt
submenu.product.create = Uusi tuote submenu.product.create = Uusi tuote
submenu.product.list = Listaa tuotteet submenu.product.list = Listaa tuotteet
...@@ -1610,38 +1646,3 @@ voting.create.voteEnd = \u00C4\u00E4nestys kiinni ...@@ -1610,38 +1646,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
shop.unitdiscount=Alennus
shop.customPrice=Uusi hinta
user.emailAndUsername=S\u00E4hk\u00F6posti (toimii my\u00F6s k\u00E4ytt\u00E4j\u00E4tunnuksena)
user.emailtooshortmessage=S\u00E4hk\u00F6postin tarvitsee olla v\u00E4hint\u00E4\u00E4n {0} merkki\u00E4 pitk\u00E4.
user.emailsunmatch=S\u00E4hk\u00F6postiosoitteet eiv\u00E4t t\u00E4sm\u00E4\u00E4.
user.emailAgain=S\u00E4hk\u00F6posti (uudelleen)
required=Vaaditaan
user.cancelInvite=Peruuta kutsu
user.invite.placeInvite.header=Vastaanota l\u00E4hetetty paikka
userview.userExistsByEmail=S\u00E4hk\u00F6posti on jo olemassa. Sinulla saattaa jo olla tunnus j\u00E4rjestelm\u00E4ss\u00E4.
invite.permissionDenied=Sinulla ei ole oikeutta luovuttaa paikkaa eteenp\u00E4in.
invite.userLoginSuccessfull=Kutsu vastaanotettu onnistuneesti
invite.userLoginUnSuccessfull=Kirjautuminen ep\u00E4onnistui
placegroupview.placetransferred=Paikka on annettu eteenp\u00E4in.
bill.isNoPaid=Maksamatta
product.expired=Vanhentuneet
etickets.title=Lippusi
etickets.place=Paikka
etickets.user=Paikan omistaja
etickets.product=Lippu
etickets.placeinfo=Paikkatiedot
etickets.eticketcode=Lippu
etickets.placemap=Paikat kartalla
placegroup.showEticket=N\u00E4yt\u00E4 lippu
mapView.enterQueue=Liity jonoon
mapView.check=P\u00E4ivit\u00E4 jonopaikka
shop.product.name=Lippu
submenu.place.viewplacemap=Paikkatilanne
page.svm.error.header=Verkkomaksu ep\u00E4onnistui
bill.isNotPaid=Maksamatta
placegroupview.owner=Omistaja
place.send=Siirr\u00E4 paikka
place.cancelSend=Peruuta siirto
etickets.sendAsMail=L\u00E4het\u00E4 s\u00E4hk\u00F6postiin
etickets.showMap=N\u00E4yt\u00E4 kartta
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!