reserve.xhtml 8.61 KB
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core"
      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:c="http://java.sun.com/jsp/jstl/core"
      xmlns:p="http://primefaces.org/ui">


<h:body>

    <ui:composition template="#{sessionHandler.template}">
        <f:metadata>
            <f:event type="preRenderView" listener="#{ajaxMapView.initReserveMap()}"/>
        </f:metadata>
        <ui:define name="content">
            <h:form>
                <p:remoteCommand name="updateWholePage" update="@all" action="#{ajaxMapView.initReserveMap()}"/>
            </h:form>


            <h:outputScript target="head" library="seatjs" name="d3.min.js"/>
            <h:outputScript target="head" library="seatjs" name="d3-tip.js"/>
            <h:outputScript target="head" library="seatjs" name="seatmap.js"/>
            <h:outputStylesheet library="seatjs" name="placemap.css"/>


            <ui:fragment rendered="#{layoutView.manageContent}">
                <h:link rendered="#{layoutView.manageContent}" styleClass="editorlink" value="Edit content for users in queue" outcome="/pages/manage">
                    <f:param name="pagename" value="#{layoutView.pagepath}:inqueue"/>
                </h:link>
                <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/>



			<!-- Place slot count -->
            <h3><h:outputText value="#{i18n['mapView.yourPlaces']}"/></h3>
			<h:form>
				<p:remoteCommand name="updateSlottable" action="#{ajaxMapView.initPlacecount()}" update=":slottable" />
			</h:form>
            <p:dataTable id="slottable" 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:column headerText="#{i18n['mapView.productcount.unused']}">
                    <h:outputText value="#{cnt.unused}"/>
                </p:column>
            </p:dataTable>
            
            <br /><br />
            <ui:fragment rendered="#{ajaxMapView.reserving}">
                <div style="margin: 5px;">
                    <h:form id="placeselectform">
                        <p:commandButton  onclick="$(window).unbind('beforeunload');"  rendered="#{ajaxMapView.canUserBuy()}" value="#{i18n['mapView.buyPlaces']}" actionListener="#{ajaxMapView.buySelectedPlaces()}" />
                    </h:form>
                </div>
                <ui:fragment rendered="#{ajaxMapView.queueEnabled}">
                    <h:outputText value="#{i18n['mapView.reserveTimeLeft']}: "/>
                    <span id="reserveTimeLeft"/><br/>
                </ui:fragment>
            </ui:fragment>

			<!-- Print queue status -->
            <ui:fragment rendered="#{ajaxMapView.queueEnabled and not ajaxMapView.reserving}">

                <h3><h:outputText value="#{i18n['mapView.youAreInQueue']}"/></h3>
                <h4><h:outputText rendered="#{ajaxMapView.biggestFirst}" value="#{i18n['queuemgmt.biggestIsFirst']}" /> </h4>

                <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"};
                var queueSelectingPlaces = #{(ajaxMapView.queueEnabled and 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();
                                });
                    } else if(queueSelectingPlaces) {

                        $.getJSON("#{request.contextPath}/rest/placemap/v1/queueStillReserving/#{ajaxMapView.map.id}/#{ajaxMapView.eventuser.id}")
                            .done(function (data) {
                                if(data.value == 0) {
                                    alert("#{i18n['reservequeue.reservingTimeIsUpAlert']}");
                                    $(window).unbind('beforeunload');
                                    location.href = "/";
                                }

                                var secsLeft = (#{ajaxMapView.reservingTimeslotEndtime}/1000) - ((new Date()).getTime()/1000 );

                                $("#reserveTimeLeft").text( Math.floor(secsLeft/60) + ":" + Math.round(secsLeft - (60 * Math.floor(secsLeft/60) ) ) );

                            }).fail(function () {
                            location.reload();
                        });
                    }
                }


                function updateQueue(data) {
                    if (data === undefined) {
                        alert('not in queue');
                        return;
                    }

                    if (data.value == 0) {
                    	alert("#{i18n['reservequeue.nowReservingAlert']}");
                       //updateWholePage();
                       location.reload();
                    } else {
                        $("#queuepos").text(data.value);
                        $("#queueupdated").text(new Date().toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1"));
                    }
                }


                setInterval(function () {
                    updateMap()
                }, 5000);

                var pageEscapeAlert = queueReserving;

                $().ready(function () {
                    reloadQueue();
                });
            </script>

            <script type="text/javascript">
                px = placemap({
                    element: document.getElementById("seatmap"),
                    moyaurl: "#{request.contextPath}",
                    map_id: #{ajaxMapView.map.id},
                    placeurl : "/rest/placemap/v1/#{ajaxMapView.map.id}/#{ajaxMapView.reserving?'places':'allplaces'}",
                });
                
                px.toggleaction = function(d){
                	px.toggle_place(d);
                	updateSlottable();
                }
            </script>

			<map:legend />

            <ui:fragment rendered="#{ajaxMapView.reserving}">
                <div style="margin: 5px;">
                    <h:form id="placeselectformBottom">
                        <p:commandButton onclick="$(window).unbind('beforeunload');" rendered="#{ajaxMapView.canUserBuy()}" value="#{i18n['mapView.buyPlaces']}" actionListener="#{ajaxMapView.buySelectedPlaces()}"/>
                    </h:form>
                </div>
            </ui:fragment>
        </ui:define>
    </ui:composition>
</h:body>
</html>