Commit 17e0fb65 by Tuomas Riihimäki

Merge branch 'moarmoaretikettia' into 'master'

Moarmoaretikettia

Toivon että tässä on ny uusimmat, vähän spurdospardocommittia :P

See merge request !157
2 parents e4140e2a 5e903338
Showing with 974 additions and 70 deletions
...@@ -39,7 +39,11 @@ public interface BarcodeBeanLocal { ...@@ -39,7 +39,11 @@ public interface BarcodeBeanLocal {
public String getPlaceTextCode(Place place); public String getPlaceTextCode(Place place);
public Place getPlaceFromTextCode(String hexcode); public Place getPlaceFromTextCode(String hexcode);
public String checkVrAuthCode(String code); public String checkVrAuthCode(String code);
public String getUserTextCode(EventUser user); public String getUserTextCode(EventUser user);
public EventUser getUserFromTextCode(String textcode);
public String getUserLongTextCode(EventUser user);
public EventUser getUserFromLongTextCode(String textcode);
public Product getProduct(String barcode); public Product getProduct(String barcode);
public Place getPlaceFromBarcode(String barcode); public Place getPlaceFromBarcode(String barcode);
......
...@@ -54,5 +54,4 @@ public interface PlaceGroupBeanLocal { ...@@ -54,5 +54,4 @@ public interface PlaceGroupBeanLocal {
void markGrouMembershipNotEntered(GroupMembership row); void markGrouMembershipNotEntered(GroupMembership row);
List<GroupMembership> findMembershipPrintlistForUser(EventUser user);
} }
/*
* Copyright Codecrew Ry
*
* All rights reserved.
*
* This license applies to any software containing a notice placed by the
* copyright holder. Such software is herein referred to as the Software.
* This license covers modification, distribution and use of the Software.
*
* Any distribution and use in source and binary forms, with or without
* modification is not permitted without explicit written permission from the
* copyright owner.
*
* A non-exclusive royalty-free right is granted to the copyright owner of the
* Software to use, modify and distribute all modifications to the Software in
* future versions of the Software.
*
*/
package fi.codecrew.moya.beans;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.GroupMembership;
import fi.codecrew.moya.model.PlaceGroup;
import javax.ejb.Local;
import java.io.OutputStream;
import java.util.List;
@Local
public interface TicketBeanLocal {
List<GroupMembership> findMembershipPrintlistForUser(EventUser user);
void sendTicketEmail(EventUser user, String url);
}
...@@ -53,7 +53,7 @@ public class BarcodeBean implements BarcodeBeanLocal { ...@@ -53,7 +53,7 @@ public class BarcodeBean implements BarcodeBeanLocal {
private static final String EVENTUSER_TEXTCODEPREFIX = "12"; private static final String EVENTUSER_TEXTCODEPREFIX = "12";
private static final String TEXTCODE_CHARACTER_MAP = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ"; private static final String TEXTCODE_CHARACTER_MAP = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ";
private static final int TEXTCODE_ROTATE_COUNT = 128; private static final int TEXTCODE_ROTATE_COUNT = 500;
//private static final String NEXT_PREFIX = "265"; //2A //private static final String NEXT_PREFIX = "265"; //2A
...@@ -97,9 +97,47 @@ public class BarcodeBean implements BarcodeBeanLocal { ...@@ -97,9 +97,47 @@ public class BarcodeBean implements BarcodeBeanLocal {
return BarcodeUtils.getBarcodeEAN(barcode); return BarcodeUtils.getBarcodeEAN(barcode);
} }
@Override
public String getUserLongTextCode(EventUser user) {
return getUserTextCode(user,38,16);
}
@Override
public EventUser getUserFromLongTextCode(String textcode) {
return getUserFromTextCode(textcode,38,16);
}
@Override
public String getUserTextCode(EventUser user) { public String getUserTextCode(EventUser user) {
return getUserTextCode(user, 12, 5);
}
@Override
public EventUser getUserFromTextCode(String textcode) {
return getUserFromTextCode(textcode,12,5);
}
private String getUserTextCode(EventUser user, int lenght, int bytecount) {
int barcodeLenght = 12;
if(lenght < barcodeLenght)
barcodeLenght = lenght;
// barcode is still only 12 marks long
String barcode = generateBarcodeNumbers(EVENTUSER_TEXTCODEPREFIX, user.getId(), barcodeLenght);
// add some random -stuff to start of string
for (int i = lenght - barcode.length(); i > 0; --i) {
barcode = ((int) (Math.random() * 10.0)) + barcode;
}
logger.debug(barcode);
String barcode = generateBarcodeNumbers(EVENTUSER_TEXTCODEPREFIX, user.getId(), 12);
BigInteger intCode; BigInteger intCode;
try { try {
...@@ -109,11 +147,10 @@ public class BarcodeBean implements BarcodeBeanLocal { ...@@ -109,11 +147,10 @@ public class BarcodeBean implements BarcodeBeanLocal {
return "GenFail"; return "GenFail";
} }
String textCode = generateTextcode(intCode, 5); String textCode = generateTextcode(intCode, bytecount);
BigInteger checkCode = textcodeToNumber(textCode, 5); BigInteger checkCode = textcodeToNumber(textCode, bytecount);
logger.debug("CheckCode {} : Original {}", checkCode, intCode);
if(checkCode.compareTo(intCode) != 0) { if(checkCode.compareTo(intCode) != 0) {
logger.error("CheckCode {} : Original {}", checkCode, intCode); logger.error("CheckCode {} : Original {}", checkCode, intCode);
...@@ -125,6 +162,37 @@ public class BarcodeBean implements BarcodeBeanLocal { ...@@ -125,6 +162,37 @@ public class BarcodeBean implements BarcodeBeanLocal {
return textCode; return textCode;
} }
private EventUser getUserFromTextCode(String textcode, int lenght, int bytecount) {
BigInteger numbercode = textcodeToNumber(textcode, bytecount);
String barcode = numbercode.toString();
// remove random prefix
int barcodeLenght = 12;
if(lenght < barcodeLenght)
barcodeLenght = lenght;
// remove some random -stuff to start of string
for (int i = lenght - barcodeLenght; i > 0; --i) {
barcode = barcode.substring(1);
}
try {
if (barcode.startsWith(EVENTUSER_TEXTCODEPREFIX)) {
int id = Integer.parseInt(barcode.substring(PLACE_TEXTCODEPREFIX.length(), barcode.length()));
EventUser user = userBean.findByEventUserId(id);
return user;
}
} catch (NumberFormatException x) {
}
return null;
}
public String getPlaceTextCode(Place place) { public String getPlaceTextCode(Place place) {
String barcode = generateBarcodeNumbers(PLACE_TEXTCODEPREFIX, place.getId(), 8); String barcode = generateBarcodeNumbers(PLACE_TEXTCODEPREFIX, place.getId(), 8);
...@@ -140,8 +208,7 @@ public class BarcodeBean implements BarcodeBeanLocal { ...@@ -140,8 +208,7 @@ public class BarcodeBean implements BarcodeBeanLocal {
String textCode = generateTextcode(intCode, 3); String textCode = generateTextcode(intCode, 3);
BigInteger checkCode = textcodeToNumber(textCode, 3); BigInteger checkCode = textcodeToNumber(textCode, 3);
logger.debug("CheckCode {} : Original {}", checkCode, intCode);
if(checkCode.compareTo(intCode) != 0) { if(checkCode.compareTo(intCode) != 0) {
logger.error("CheckCode {} : Original {}", checkCode, intCode); logger.error("CheckCode {} : Original {}", checkCode, intCode);
......
...@@ -154,6 +154,7 @@ public class MenuBean implements MenuBeanLocal { ...@@ -154,6 +154,7 @@ public class MenuBean implements MenuBeanLocal {
userPlaces.addPage(menuitemfacade.findOrCreate("/place/viewplacemap"), MapPermission.VIEW); userPlaces.addPage(menuitemfacade.findOrCreate("/place/viewplacemap"), 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);
MenuNavigation usercompetitions = usermenu.addPage(null, null); MenuNavigation usercompetitions = usermenu.addPage(null, null);
usercompetitions.setKey("topnavi.competitions"); usercompetitions.setKey("topnavi.competitions");
......
...@@ -316,32 +316,5 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal { ...@@ -316,32 +316,5 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
} }
@Override
public List<GroupMembership> findMembershipPrintlistForUser(EventUser user) {
// TODO: get from placefacade. Sometimes it's easier to think loops then facadequeries
boolean printOnlyOwn = eventbean.getPropertyBoolean(LanEventPropertyKey.PLACECODE_PRINT_ONLY_OWN);
List<GroupMembership> gmems = gmemfacade.findMemberOrCreator(user);
List<GroupMembership> ret = new ArrayList<>();
for(GroupMembership gm : gmems) {
if(gm.getPlaceReservation() != null) {
// places with no user belongs to creator
if(gm.getUser() == null || !printOnlyOwn) {
ret.add(gm);
} else if(user.equals(gm.getUser())) {
ret.add(gm);
}
}
}
return ret;
}
} }
...@@ -74,7 +74,7 @@ public class StatisticsBean implements StatisticsBeanLocal { ...@@ -74,7 +74,7 @@ public class StatisticsBean implements StatisticsBeanLocal {
public Map<Long, Long> getHourlyIncomingStatistics(long startingFromMillis, int hourCount) { public Map<Long, Long> getHourlyIncomingStatistics(long startingFromMillis, int hourCount) {
List<GroupMembership> groupMemberships = groupMembershipFacade.findAllEnteredBetween(startingFromMillis, (startingFromMillis + ((long) hourCount)*60l*60l*1000l)); List<GroupMembership> groupMemberships = groupMembershipFacade.findAllEnteredBetween(startingFromMillis, (startingFromMillis + ((long) hourCount)*60l*60l*1000l));
HashMap<Long, Long> retMap = new HashMap<Long, Long>(); HashMap<Long, Long> retMap = new HashMap<>();
long currentTimestamp = startingFromMillis; long currentTimestamp = startingFromMillis;
long hour = (60l*60l*1000l); long hour = (60l*60l*1000l);
......
/*
* Copyright Codecrew Ry
*
* All rights reserved.
*
* This license applies to any software containing a notice placed by the
* copyright holder. Such software is herein referred to as the Software.
* This license covers modification, distribution and use of the Software.
*
* Any distribution and use in source and binary forms, with or without
* modification is not permitted without explicit written permission from the
* copyright owner.
*
* A non-exclusive royalty-free right is granted to the copyright owner of the
* Software to use, modify and distribute all modifications to the Software in
* future versions of the Software.
*
*/
package fi.codecrew.moya.beans;
import com.pdfjet.*;
import fi.codecrew.moya.enums.apps.MapPermission;
import fi.codecrew.moya.enums.apps.SpecialPermission;
import fi.codecrew.moya.facade.EventUserFacade;
import fi.codecrew.moya.facade.GroupMembershipFacade;
import fi.codecrew.moya.facade.PlaceGroupFacade;
import fi.codecrew.moya.model.*;
import fi.codecrew.moya.util.MailMessage;
import fi.codecrew.moya.utilities.BarcodeUtils;
import fi.codecrew.moya.utilities.moyamessage.MoyaEventType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.EJBAccessException;
import javax.ejb.Stateless;
import java.io.OutputStream;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
/**
* Session Bean implementation class PlaceGroupBean
*/
@Stateless
@DeclareRoles({ SpecialPermission.S_USER, MapPermission.S_BUY_PLACES, MapPermission.S_MANAGE_MAPS })
public class TicketBean implements TicketBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(TicketBean.class);
private static final int YSTART = 30;
@EJB
private EventBeanLocal eventbean;
@EJB
private BarcodeBeanLocal barcodeBean;
@EJB
private GroupMembershipFacade gmemfacade;
@EJB
private LoggingBeanLocal loggingbean;
@EJB
private PermissionBeanLocal permbean;
@EJB
private PlaceGroupFacade pgfacade;
@EJB
private EventUserFacade eventuserfacade;
@EJB
private UtilBean utilBean;
/**
* Default constructor.
*/
public TicketBean() {
// TODO Auto-generated constructor stub
}
@Override
public List<GroupMembership> findMembershipPrintlistForUser(EventUser user) {
// TODO: get from placefacade. Sometimes it's easier to think loops then facadequeries
boolean printOnlyOwn = eventbean.getPropertyBoolean(LanEventPropertyKey.PLACECODE_PRINT_ONLY_OWN);
List<GroupMembership> gmems = gmemfacade.findMemberOrCreator(user);
List<GroupMembership> ret = new ArrayList<>();
for(GroupMembership gm : gmems) {
if(gm.getPlaceReservation() != null) {
// places with no user belongs to creator
if(gm.getUser() == null || !printOnlyOwn) {
ret.add(gm);
} else if(user.equals(gm.getUser())) {
ret.add(gm);
}
}
}
return ret;
}
@Override
public void sendTicketEmail(EventUser user , String url) {
String token = barcodeBean.getUserLongTextCode(user);
MailMessage msg = new MailMessage();
msg.setSubject(eventbean.getPropertyString(LanEventPropertyKey.ETICKETMAIL_SUBJECT));
String formatUrl = MessageFormat.format(url, token);
logger.info("Sending eticket url {}", formatUrl);
msg.setMessage(MessageFormat.format(eventbean.getPropertyString(LanEventPropertyKey.ETICKETMAIL_CONTENT), formatUrl, user.getUser().getWholeName()));
msg.setToAddress(user.getEmail());
utilBean.sendMail(msg);
}
}
...@@ -80,6 +80,7 @@ public class UtilBean implements UtilBeanLocal { ...@@ -80,6 +80,7 @@ public class UtilBean implements UtilBeanLocal {
@Override @Override
public boolean sendMail(MailMessage message) { public boolean sendMail(MailMessage message) {
logger.info("Sending mail message {} ", message); logger.info("Sending mail message {} ", message);
if (message.getFromAddress() == null || message.getFromAddress().isEmpty()) { if (message.getFromAddress() == null || message.getFromAddress().isEmpty()) {
message.setFromAddress(eventbean.getPropertyString(LanEventPropertyKey.PORTAL_EMAIL_ADDRESS)); message.setFromAddress(eventbean.getPropertyString(LanEventPropertyKey.PORTAL_EMAIL_ADDRESS));
......
...@@ -44,6 +44,8 @@ public enum LanEventPropertyKey { ...@@ -44,6 +44,8 @@ public enum LanEventPropertyKey {
TEMPLATE_PROPERTY5(Type.TEXT, null), TEMPLATE_PROPERTY5(Type.TEXT, null),
INVITE_ONLY_EVENT(Type.BOOL, null), INVITE_ONLY_EVENT(Type.BOOL, null),
USE_ETICKET(Type.BOOL, null), USE_ETICKET(Type.BOOL, null),
ETICKETMAIL_SUBJECT(Type.TEXT, "Your etickets to Moya Online Youth Accumulator"),
ETICKETMAIL_CONTENT(Type.TEXT, "Hello {1},\n\nYou can find your etickets to an event from: {0}"),
MAP_QUEUE(Type.BOOL, null), MAP_QUEUE(Type.BOOL, null),
; ;
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:products="http://java.sun.com/jsf/composite/cditools/products"
xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="#{sessionHandler.fullscreen}">
<f:metadata>
<f:viewParam name="t" value="#{standaloneEticketView.token}" />
<f:event type="preRenderView" listener="#{standaloneEticketView.initView}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['etickets.title']}</h1>
</ui:define>
<ui:define name="content">
<h:form id="etickets">
<br /><br />
<p:commandButton value="#{i18n['print']}" type="button" icon="ui-icon-print" style="display:block;margin-bottom: 20px">
<p:printer target="eticketpanel"/>
</p:commandButton>
<p:outputPanel id="eticketpanel">
<p:fieldset legend="#{i18n['etickets.eticketcode']}" style="width: 250px; ">
<p:outputPanel style="text-align: center;">
<p:barcode id="userqrcode" value="#{standaloneEticketView.userTextCode}" type="qr" width="200" height="200"/><br />
<p:outputLabel for="userqrcode" value="#{standaloneEticketView.userTextCode}"/>
</p:outputPanel>
</p:fieldset>
<br /><br />
<p:fieldset legend="#{i18n['etickets.placeinfo']}">
<p:dataTable value="#{standaloneEticketView.groupMemberships}" var="member" id="placestable">
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['etickets.place']}"/>
</f:facet>
<h:outputText value="#{member.placeReservation.name}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['etickets.product']}"/>
</f:facet>
<h:outputText value="#{member.placeReservation.product.name}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['etickets.user']}"/>
</f:facet>
<h:outputText rendered="#{!empty member.user}" value="#{member.user.wholeName} (#{member.user.nick})"/>
<h:outputText rendered="#{empty member.user}" value="#{member.placeGroup.creator.firstnames} #{member.placeGroup.creator.lastname} (#{member.placeGroup.creator.nick})" />
</p:column>
</p:dataTable>
</p:fieldset>
<br /><br />
<p:outputPanel id="mapPanel">
<h2>#{i18n['etickets.placemap']}</h2>
<p:commandButton rendered="#{!standaloneEticketView.mapVisible}" value="#{i18n['etickets.showMap']}" actionListener="#{standaloneEticketView.showMap}" update="mapPanel" />
<p:graphicImage id="mapImage" rendered="#{standaloneEticketView.mapVisible}" url="/PlaceMap?mapid=#{mapView.activeMap.id}&amp;token=#{standaloneEticketView.token}" styleClass="printImage"/>
</p:outputPanel>
</p:outputPanel>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
</f:metadata> </f:metadata>
<ui:define rendered="#{lectureUserView.lectureGroupsVisible}" name="title"> <ui:define name="title">
<h1>#{i18n['etickets.title']}</h1> <h1>#{i18n['etickets.title']}</h1>
</ui:define> </ui:define>
...@@ -18,12 +18,12 @@ ...@@ -18,12 +18,12 @@
<h:form id="etickets"> <h:form id="etickets">
<br /><br /> <br /><br />
<p:commandButton value="Print" type="button" icon="ui-icon-print" style="display:block;margin-bottom: 20px"> <p:commandButton value="#{i18n['print']}" type="button" icon="ui-icon-print" style="display:block;margin-bottom: 20px">
<p:printer target="eticketpanel"/> <p:printer target="eticketpanel"/>
</p:commandButton>&lt;--Tarvitaanko?<br/> </p:commandButton>
<p:commandButton icon="ui-icon-mail-closed" value="Send as email (TODO)"/><br/><br/><br/> <p:commandButton update="messages" icon="ui-icon-mail-closed" value="#{i18n['etickets.sendAsMail']}" actionListener="#{eticketView.sendAsMail}" /><br/><br/><br/>
<p:outputPanel id="eticketpanel"> <p:outputPanel id="eticketpanel">
...@@ -64,9 +64,9 @@ ...@@ -64,9 +64,9 @@
</p:fieldset> </p:fieldset>
<br /><br /> <br /><br />
<p:fieldset legend="#{i18n['etickets.placemap']}" style="#{eticketView.mapFieldsetStyle}"> <h2>#{i18n['etickets.placemap']}</h2>
<p:graphicImage url="/PlaceMap?mapid=#{mapView.activeMap.id}&amp;userid=#{userView.selectedUser.user.id}"/> <p:graphicImage url="/PlaceMap?mapid=#{mapView.activeMap.id}&amp;userid=#{userView.selectedUser.user.id}" styleClass="printImage"/>
</p:fieldset>
</p:outputPanel> </p:outputPanel>
</h:form> </h:form>
......
...@@ -27,8 +27,6 @@ xmlns:reader="http://java.sun.com/jsf/composite/cditools/reader" ...@@ -27,8 +27,6 @@ xmlns:reader="http://java.sun.com/jsf/composite/cditools/reader"
<h:panelGroup id="reader_autopoll"> <h:panelGroup id="reader_autopoll">
<p:poll rendered="#{readerView.pollingMode}" interval="2" listener="#{cc.attrs.selectaction}" onerror="location.reload();" /> <p:poll rendered="#{readerView.pollingMode}" interval="2" listener="#{cc.attrs.selectaction}" onerror="location.reload();" />
</h:panelGroup> </h:panelGroup>
readerid:
#{readerNameContainer.readerId}
<p:dataTable rendered="#{empty readerNameContainer.readerId}" border="1" id="reader" value="#{readerListDataView.readers}" var="rr"> <p:dataTable rendered="#{empty readerNameContainer.readerId}" border="1" id="reader" value="#{readerListDataView.readers}" var="rr">
<p:column> <p:column>
...@@ -50,9 +48,13 @@ readerid: ...@@ -50,9 +48,13 @@ readerid:
<p:outputLabel value="#{i18n['reader.autopoll']}" />&nbsp; <p:outputLabel value="#{i18n['reader.autopoll']}" />&nbsp;
<p:selectBooleanButton offLabel="#{i18n['off']}" onLabel="#{i18n['on']}" value="#{readerView.pollingMode}" immediate="true">
<p:inputSwitch offLabel="#{i18n['off']}" onLabel="#{i18n['on']}" value="#{readerView.pollingMode}" immediate="true">
<p:ajax update="reader_autopoll,readerevents" /> <p:ajax update="reader_autopoll,readerevents" />
</p:selectBooleanButton> </p:inputSwitch>
<p:commandLink actionListener="#{readerView.changeReader}" value="#{i18n['incomingflow.changereader']}" update="@all" /> <p:commandLink actionListener="#{readerView.changeReader}" value="#{i18n['incomingflow.changereader']}" update="@all" />
<h:panelGroup id="readerevents"> <h:panelGroup id="readerevents">
<reader:readerevents rendered="#{!empty readerNameContainer.readerId and !readerView.pollingMode}" showAssociateToUser="#{cc.attrs.showAssociateToUser}" selectvalue="#{cc.attrs.selectvalue}" selectaction="#{cc.attrs.selectaction}" linkvalue="#{cc.attrs.linkvalue}" linkoutcome="#{cc.attrs.linkoutcome}" /> <reader:readerevents rendered="#{!empty readerNameContainer.readerId and !readerView.pollingMode}" showAssociateToUser="#{cc.attrs.showAssociateToUser}" selectvalue="#{cc.attrs.selectvalue}" selectaction="#{cc.attrs.selectaction}" linkvalue="#{cc.attrs.linkvalue}" linkoutcome="#{cc.attrs.linkoutcome}" />
......
@media print {
header,#menu,.flex1,#header_left,#header_center,#header_right,nav,#menu,.languageSelector,#leftpanel, #rightpanel, #leftpanel, #rightpanel, #toppanel
{
display: none;
}
#main {
background: none;
border: none;
}
.no_print {
display: none;
}
.printImage {
max-width: 20cm;
}
}
\ No newline at end of file
/* This is file for styling (colors and font-sizes) */
.ui-widget {
font-size: 95% !important;
}
.bgColor1.ui-layout-unit {
}
.bgColor1 .ui-layout-unit-content {
background-image: none;
}
.bgColor1 .ui-layout-unit-header {
background-image: none;
}
.missing_i18n {
color: red;
-webkit-animation-name: blinker;
-webkit-animation-duration: 1s;
-webkit-animation-timing-function: linear;
-webkit-animation-iteration-count: infinite;
-moz-animation-name: blinker;
-moz-animation-duration: 1s;
-moz-animation-timing-function: linear;
-moz-animation-iteration-count: infinite;
animation-name: blinker;
animation-duration: 1s;
animation-timing-function: linear;
animation-iteration-count: infinite;
}
@-moz-keyframes blinker {
0% { opacity: 1.0; }
50% { opacity: 0.0; }
100% { opacity: 1.0; }
}
@-webkit-keyframes blinker {
0% { opacity: 1.0; }
50% { opacity: 0.0; }
100% { opacity: 1.0; }
}
@keyframes blinker {
0% { opacity: 1.0; }
50% { opacity: 0.0; }
100% { opacity: 1.0; }
}
/* Structual stuff, like sizes, margins etc.*/
.bgColor1.ui-layout-unit {
margin: 0px;
padding: 0px;
}
.bgColor1 .ui-layout-unit-content {
margin: 0px;
padding: 0px;
}
.bgColor1 .ui-layout-unit-header {
margin: 0px;
padding: 0px;
}
#header_right {
text-align: right;
}
#header_box {
display: flex;
display: -ms-flexbox;
display: -webkit-flex;
}
#mainlayoutpanel {
margin: 10px;
padding: 10px;
}
#header_center {
position: relative;
text-align: right;
-webkit-box-flex: 1; /* OLD - iOS 6-, Safari 3.1-6 */
-moz-box-flex: 1; /* OLD - Firefox 19- */
width: 20%; /* For old syntax, otherwise collapses. */
-webkit-flex: 1; /* Chrome */
-ms-flex: 1; /* IE 10 */
flex: 1; /* NEW, Spec - Opera 12.1, Firefox 20+ */
}
\ No newline at end of file
#edit { float: left; width:100%; border-bottom: 1px solid black; }
#usertabnav { font-size: 90%; }
ul#usertabnav { float:left; width: 100%; border:1px solid rgba(200,200,200,0); background:rgba(200,200,200,0); border-radius: 16px 16px 0 0; }
ul#usertabnav li {display:inline; list-style:none; }
ul#usertabnav li a {display:block; line-height: 1.7em; float:left; padding:2px 5px 2px 5px; color:rgb(125,125,125); text-decoration:none; font-size:120%; background-color:rgba(100,100,100,0.3); color: rgba(0,0,0,1); border-radius: 12px 12px 0 0; border: 1px solid rgba(0,0,0,0.1); border-bottom: none;}
ul#usertabnava:hover {text-decoration:none; color:rgb(50,50,50);}
ul#usertabnav li.active {font-weight: bold; background-color:rgba(250,250,250,0.4); color: rgba(0,0,0,1); border-radius: 12px 12px 0 0; border: 1px solid black; border-bottom: none }
#edit {
clear: both;
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html class="no-js" xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:tools="http://java.sun.com/jsf/composite/cditools" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<f:view contentType="text/html" locale="#{sessionHandler.locale}">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><h:outputText value="#{layoutView.getHeader()}" /></title>
<meta name="description" content="Lippukauppa" />
<meta name="author" content="CodeCrew ry" />
<meta http-equiv="Content-Language" content="#{sessionHandler.locale}" />
<link rel="icon" href="#{request.contextPath}/favicon.ico" type="image/x-icon" />
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/templates/primelayout/css/print.css" />
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/templates/primelayout/css/skinning.css" />
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/templates/primelayout/css/structual.css" />
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/templates/custom_components.css" />
<ui:insert name="headerdata" />
<h:outputStylesheet>
.bgColor1 .ui-layout-unit-content {
background-color: #{layoutView.getLayoutProperty1('#68A3C2')};
}
.bgColor1 .ui-layout-unit-header {
background-color: #{layoutView.getLayoutProperty1('#68A3C2')};
}
</h:outputStylesheet>
</h:head>
<h:body>
<!-- Javascript-lokalisaatiolippupuljausta -->
<script type="text/javascript">
$(document)
.ready(
function() {
<ui:repeat value="#{localeSelectorView.availableLocales}" var="loc" varStatus="idx">
$(
".languageSelector .ui-button:eq(#{idx.index})")
.css(
"background",
"url('#{request.contextPath}/resources/icons/flags/#{loc.locale.language}.png') no-repeat")
.css("width", "16px").css("height",
"11px").css("padding", "0")
.css("margin-right", "5px").css(
"border-radius", "0")
</ui:repeat>
$(".languageSelector .ui-button-text").text("");
});
var apina = null;
</script>
<!--[if lt IE 7]>
<p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p>
<![endif]-->
<p:layout widgetVar="mainlayout" fullPage="true" id="mainlayoutpanel" >
<p:layoutUnit position="center">
<div class="container top">
<h:form id="selectLanguage">
<p:selectOneButton id="langselect" styleClass="languageSelector" value="#{sessionStore.locale}" immediate="true" converter="#{localeConverter}">
<f:selectItems value="#{localeSelectorView.availableLocales}" var="loc" itemValue="#{loc.locale}" itemLabel="#{loc.locale.displayName}" />
<p:ajax update="@all" event="change" />
</p:selectOneButton>
</h:form>
<h:link rendered="#{layoutView.manageContent}" styleClass="editorlink" value="#{i18n['layout.editTop']}" outcome="/pages/manage">
<f:param name="pagename" value="#{layoutView.pagepath}:top" />
</h:link>
</div>
<!-- TODO: tyyleistys tähän, toisaalta tarttis tulla vaan teksti -->
<ui:insert name="title" />
<p:menubar rendered="#{primeMenuView.hasSecondaryMenu}" model="#{primeMenuView.secondaryMenuModel}" />
<h:form id="messages">
<p:growl id="growl" showDetail="true" />
</h:form>
<ui:insert name="edittab" />
<ui:repeat var="cont1" value="#{menuView.getPagecontent('top')}">
<h:outputText value="#{cont1.content}" escape="false" />
</ui:repeat>
<ui:insert name="content" />
<ui:repeat var="cont1" value="#{menuView.getPagecontent('bottom')}">
<h:outputText value="#{cont1.content}" escape="false" />
</ui:repeat>
<h:link rendered="#{layoutView.manageContent}" styleClass="editorlink" value="#{i18n['layout.editBottom']}" outcome="/pages/manage">
<f:param name="pagename" value="#{layoutView.pagepath}:bottom" />
</h:link>
</p:layoutUnit>
</p:layout>
<h:form>
<p:confirmDialog global="true" showEffect="fade" hideEffect="explode">
<p:commandButton value="Yes" type="button" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
<p:commandButton value="No" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
</p:confirmDialog>
</h:form>
<footer class="bgColor1"> </footer>
<script type="text/javascript">
PrimeFaces.locales['fi'] = {
closeText : 'Sulje',
prevText : 'Edellinen',
nextText : 'Seuraava',
currentText : 'Tänään',
monthNames : [ 'Tammikuu', 'Helmikuu', 'Maaliskuu', 'Huhtikuu',
'Toukokuu', 'Kesäkuu', 'Heinäkuu', 'Elokuu', 'Syyskuu',
'Lokakuu', 'Marraskuu', 'Joulukuu' ],
monthNamesShort : [ 'Tammikuu', 'Helmikuu', 'Maaliskuu',
'Huhtikuu', 'Toukokuu', 'Kesäkuu', 'Heinäkuu',
'Elokuu', 'Syyskuu', 'Lokakuu', 'Marraskuu', 'Joulukuu' ],
dayNames : [ 'Sunnuntai', 'Maanantai', 'Tiistain',
'Keskiviikko', 'Torstai', 'Perjantai', 'Lauantai' ],
dayNamesShort : [ 'Su', 'Ma', 'Ti', 'Ke', 'To', 'Pe', 'La' ],
dayNamesMin : [ 'Su', 'Ma', 'Ti', 'Ke', 'To', 'Pe', 'La' ],
weekHeader : 'vk',
firstDay : 1,
isRTL : false,
showMonthAfterYear : false,
yearSuffix : '',
month : 'Kuukausi',
week : 'Viikko',
day : 'Päivä',
allDayText : 'Koko päivä'
};
PrimeFaces.locales['und'] = {
closeText : 'Sulje',
prevText : 'Edellinen',
nextText : 'Seuraava',
currentText : 'Tänään',
monthNames : [ 'Tammikuu', 'Helmikuu', 'Maaliskuu', 'Huhtikuu',
'Toukokuu', 'Kesäkuu', 'Heinäkuu', 'Elokuu', 'Syyskuu',
'Lokakuu', 'Marraskuu', 'Joulukuu' ],
monthNamesShort : [ 'Tammikuu', 'Helmikuu', 'Maaliskuu',
'Huhtikuu', 'Toukokuu', 'Kesäkuu', 'Heinäkuu',
'Elokuu', 'Syyskuu', 'Lokakuu', 'Marraskuu', 'Joulukuu' ],
dayNames : [ 'Sunnuntai', 'Maanantai', 'Tiistain',
'Keskiviikko', 'Torstai', 'Perjantai', 'Lauantai' ],
dayNamesShort : [ 'Su', 'Ma', 'Ti', 'Ke', 'To', 'Pe', 'La' ],
dayNamesMin : [ 'Su', 'Ma', 'Ti', 'Ke', 'To', 'Pe', 'La' ],
weekHeader : 'vk',
firstDay : 1,
isRTL : false,
showMonthAfterYear : false,
yearSuffix : '',
month : 'Kuukausi',
week : 'Viikko',
day : 'Päivä',
allDayText : 'Koko päivä'
};
</script>
<c:if test="#{sessionHandler.isInDevelopmentMode()}">
<script type="text/javascript">
$('*:contains("???"):not(:has(*))').filter(
function() {
return (this.textContent || this.innerText)
.indexOf("???") === 0;
}).addClass("missing_i18n");
</script>
</c:if>
</h:body>
</f:view>
</html>
\ No newline at end of file
...@@ -11,4 +11,8 @@ ...@@ -11,4 +11,8 @@
.no_print { .no_print {
display: none; display: none;
} }
.printImage {
max-width: 20cm;
}
} }
\ No newline at end of file
...@@ -108,8 +108,8 @@ public class SessionHandler { ...@@ -108,8 +108,8 @@ public class SessionHandler {
} }
public String getFullscreen() { public String getFullscreen() {
template = "blipview"; template = "fullprimelayout";
return template; return getTemplate();
} }
public String getInfoscreen() { public String getInfoscreen() {
......
...@@ -46,6 +46,7 @@ import javax.servlet.http.HttpServletResponse; ...@@ -46,6 +46,7 @@ import javax.servlet.http.HttpServletResponse;
import fi.codecrew.moya.beans.*; import fi.codecrew.moya.beans.*;
import fi.codecrew.moya.model.User; import fi.codecrew.moya.model.User;
import org.primefaces.component.barcode.Barcode;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -77,8 +78,13 @@ public class PlaceMapServlet extends HttpServlet { ...@@ -77,8 +78,13 @@ public class PlaceMapServlet extends HttpServlet {
@EJB @EJB
private UserBeanLocal userBean; private UserBeanLocal userBean;
@EJB
private BarcodeBeanLocal barcodeBean;
private static final String PARAMETER_EVENT_MAP_ID = "mapid"; private static final String PARAMETER_EVENT_MAP_ID = "mapid";
private static final String PARAMETER_USER_ID = "userid"; private static final String PARAMETER_USER_ID = "userid";
private static final String PARAMETER_TOKEN = "token";
/** /**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
...@@ -107,8 +113,10 @@ public class PlaceMapServlet extends HttpServlet { ...@@ -107,8 +113,10 @@ public class PlaceMapServlet extends HttpServlet {
Integer mapId = getIntegerParameter(request, PARAMETER_EVENT_MAP_ID); Integer mapId = getIntegerParameter(request, PARAMETER_EVENT_MAP_ID);
Integer userId = getIntegerParameter(request, PARAMETER_USER_ID); Integer userId = getIntegerParameter(request, PARAMETER_USER_ID);
// Integer userId = getIntegerParameter(request,
// PARAMETER_CURRENT_USER_ID); Tämä saadaan beaneilta. String userToken = request.getParameter(PARAMETER_TOKEN);
EventMap map = placeBean.findMap(mapId); EventMap map = placeBean.findMap(mapId);
logger.debug("Mapid: {}", mapId); logger.debug("Mapid: {}", mapId);
...@@ -129,17 +137,21 @@ public class PlaceMapServlet extends HttpServlet { ...@@ -129,17 +137,21 @@ public class PlaceMapServlet extends HttpServlet {
type = splittype[splittype.length-1]; type = splittype[splittype.length-1];
response.setContentType(map.getMimeType()); response.setContentType(map.getMimeType());
printPlaceMapToStream(ostream, type, map,userId); printPlaceMapToStream(ostream, type, map,userId, userToken);
logger.debug("Flushing ostream"); logger.debug("Flushing ostream");
ostream.flush(); ostream.flush();
} }
} catch (EJBException e) { } catch (EJBException e) {
logger.debug("Permission denied. Returning SC_FORBIDDEN!"); logger.debug("Permission denied. Returning SC_FORBIDDEN!");
response.setContentType("text/html;charset=UTF-8"); response.setContentType("text/html;charset=UTF-8");
response.setStatus(HttpServletResponse.SC_FORBIDDEN); response.setStatus(HttpServletResponse.SC_FORBIDDEN);
ostream = response.getOutputStream(); ostream = response.getOutputStream();
ostream.print("Error 403 \nPermission denied! Please login before accessing resource"); ostream.print("Error 403 \nPermission denied! Please login before accessing resource");
// e.printStackTrace();
} finally { } finally {
if (ostream != null) { if (ostream != null) {
ostream.close(); ostream.close();
...@@ -147,13 +159,18 @@ public class PlaceMapServlet extends HttpServlet { ...@@ -147,13 +159,18 @@ public class PlaceMapServlet extends HttpServlet {
} }
} }
private void printPlaceMapToStream(OutputStream outputStream, String filetype, EventMap map, Integer userid) throws IOException private void printPlaceMapToStream(OutputStream outputStream, String filetype, EventMap map, Integer userid, String userToken) throws IOException
{ {
if (!permbean.hasPermission(MapPermission.VIEW))
EventUser user = null;
if(userToken != null)
user = barcodeBean.getUserFromLongTextCode(userToken);
if (!permbean.hasPermission(MapPermission.VIEW) && user == null)
{ {
loggerbean.sendMessage(MoyaEventType.USER_INSUFFICIENT_PERMISSIONS, permbean.getCurrentUser(), loggerbean.sendMessage(MoyaEventType.USER_INSUFFICIENT_PERMISSIONS, permbean.getCurrentUser(), "User tried to print the placemap to stream without sufficient permissions");
"User tried to print the placemap to stream without sufficient permissions");
throw new EJBAccessException("Not enough permissions to print placemap"); throw new EJBAccessException("Not enough permissions to print placemap");
} }
long begin = new Date().getTime(); long begin = new Date().getTime();
...@@ -177,14 +194,20 @@ public class PlaceMapServlet extends HttpServlet { ...@@ -177,14 +194,20 @@ public class PlaceMapServlet extends HttpServlet {
if(userid != null && userid != 0) { if(userid != null && userid != 0) {
EventUser user = userBean.findByUserId(userid, false); EventUser placesForUser = userBean.findByUserId(userid, false);
if(user != null) { if(user != null) {
userplaces = placeBean.findPlacePrintlistForUser(user); userplaces = placeBean.findPlacePrintlistForUser(placesForUser);
} }
} }
EventUser user = permbean.getCurrentUser(); if(user != null) {
userplaces = placeBean.findPlacePrintlistForUser(user);
}
if(user == null)
user = permbean.getCurrentUser();
// List<Place> selectedPlaces = placemapBean.findSelectedPlaces(map); // List<Place> selectedPlaces = placemapBean.findSelectedPlaces(map);
BufferedImage image = ImageIO.read(new ByteArrayInputStream(map.getMapData())); BufferedImage image = ImageIO.read(new ByteArrayInputStream(map.getMapData()));
...@@ -229,6 +252,7 @@ public class PlaceMapServlet extends HttpServlet { ...@@ -229,6 +252,7 @@ public class PlaceMapServlet extends HttpServlet {
return null; return null;
} }
// <editor-fold defaultstate="collapsed" // <editor-fold defaultstate="collapsed"
// desc="HttpServlet methods. Click on the + sign on the left to edit the code."> // desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/** /**
......
...@@ -18,10 +18,7 @@ ...@@ -18,10 +18,7 @@
*/ */
package fi.codecrew.moya.web.cdiview.eticket; package fi.codecrew.moya.web.cdiview.eticket;
import fi.codecrew.moya.beans.BarcodeBeanLocal; import fi.codecrew.moya.beans.*;
import fi.codecrew.moya.beans.PlaceBeanLocal;
import fi.codecrew.moya.beans.PlaceGroupBeanLocal;
import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.enums.apps.MapPermission; import fi.codecrew.moya.enums.apps.MapPermission;
import fi.codecrew.moya.model.EventUser; import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.GroupMembership; import fi.codecrew.moya.model.GroupMembership;
...@@ -30,11 +27,14 @@ import fi.codecrew.moya.model.PlaceGroup; ...@@ -30,11 +27,14 @@ import fi.codecrew.moya.model.PlaceGroup;
import fi.codecrew.moya.web.annotations.SelectedUser; import fi.codecrew.moya.web.annotations.SelectedUser;
import fi.codecrew.moya.web.cdiview.GenericCDIView; import fi.codecrew.moya.web.cdiview.GenericCDIView;
import fi.codecrew.moya.web.cdiview.shop.InviteView; import fi.codecrew.moya.web.cdiview.shop.InviteView;
import fi.codecrew.moya.web.cdiview.user.UserView;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped; import javax.enterprise.context.ConversationScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.model.ListDataModel; import javax.faces.model.ListDataModel;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
...@@ -52,9 +52,10 @@ public class EticketView extends GenericCDIView { ...@@ -52,9 +52,10 @@ public class EticketView extends GenericCDIView {
// @Inject // @Inject
// private UserView userview; // private UserView userview;
@Inject @Inject
@SelectedUser private UserView userView;
private EventUser user;
@EJB @EJB
private BarcodeBeanLocal barcodeBean; private BarcodeBeanLocal barcodeBean;
...@@ -68,6 +69,9 @@ public class EticketView extends GenericCDIView { ...@@ -68,6 +69,9 @@ public class EticketView extends GenericCDIView {
@EJB @EJB
PlaceBeanLocal placeBean; PlaceBeanLocal placeBean;
@EJB
TicketBeanLocal ticketBean;
@Inject @Inject
private InviteView inviteView; private InviteView inviteView;
...@@ -83,12 +87,12 @@ public class EticketView extends GenericCDIView { ...@@ -83,12 +87,12 @@ public class EticketView extends GenericCDIView {
public String getUserTextCode() { public String getUserTextCode() {
return barcodeBean.getUserTextCode(user); return barcodeBean.getUserTextCode(userView.getSelectedUser());
} }
public ListDataModel<GroupMembership> getGroupMemberships() { public ListDataModel<GroupMembership> getGroupMemberships() {
memberlist = new ListDataModel<GroupMembership>(placegroupBean.findMembershipPrintlistForUser(user)); memberlist = new ListDataModel<GroupMembership>(ticketBean.findMembershipPrintlistForUser(userView.getSelectedUser()));
return memberlist; return memberlist;
} }
...@@ -100,4 +104,55 @@ public class EticketView extends GenericCDIView { ...@@ -100,4 +104,55 @@ public class EticketView extends GenericCDIView {
return "width: " + (width+100) + "px;"; return "width: " + (width+100) + "px;";
} }
public void sendAsMail() {
ticketBean.sendTicketEmail(userView.getSelectedUser(), getTicketUrl());
}
public String getTicketUrl() {
ExternalContext extcontext = FacesContext.getCurrentInstance().getExternalContext();
StringBuilder path = new StringBuilder();
String servername = extcontext.getRequestServerName();
if (extcontext.getRequestServerPort() != 80) {
if (extcontext.getRequestServerPort() == 443) {
path.append("https://").append(servername.replace(":443", ""));
} else {
path.append("http://").append(servername);
path.append(":").append(extcontext.getRequestServerPort());
}
} else {
path.append("http://").append(servername);
}
path.append("/")
.append(FacesContext.getCurrentInstance().getExternalContext().getContextName())
.append("/place/eticketStandalone.jsf?t={0}");
return path.toString();
}
} }
/*
* Copyright Codecrew Ry
*
* All rights reserved.
*
* This license applies to any software containing a notice placed by the
* copyright holder. Such software is herein referred to as the Software.
* This license covers modification, distribution and use of the Software.
*
* Any distribution and use in source and binary forms, with or without
* modification is not permitted without explicit written permission from the
* copyright owner.
*
* A non-exclusive royalty-free right is granted to the copyright owner of the
* Software to use, modify and distribute all modifications to the Software in
* future versions of the Software.
*
*/
package fi.codecrew.moya.web.cdiview.eticket;
import fi.codecrew.moya.beans.*;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.GroupMembership;
import fi.codecrew.moya.model.Place;
import fi.codecrew.moya.model.PlaceGroup;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
import fi.codecrew.moya.web.cdiview.shop.InviteView;
import fi.codecrew.moya.web.cdiview.user.UserView;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import javax.inject.Named;
import java.util.HashMap;
import java.util.Map;
@Named
@ConversationScoped
public class StandaloneEticketView extends GenericCDIView {
private static final long serialVersionUID = -3934253910818396155L;
private static final Logger logger = LoggerFactory.getLogger(StandaloneEticketView.class);
// @Inject
// private UserView userview;
private String token;
private EventUser user;
@EJB
private BarcodeBeanLocal barcodeBean;
@EJB
private PlaceGroupBeanLocal placegroupBean;
@EJB
UserBeanLocal userBean;
@EJB
PlaceBeanLocal placeBean;
@EJB
TicketBeanLocal ticketBean;
@Inject
private InviteView inviteView;
private Place place;
private PlaceGroup group;
private transient ListDataModel<PlaceGroup> placegroups;
private transient ListDataModel<Place> placelist;
private transient ListDataModel<GroupMembership> memberlist;
private Map<Integer, String> inviteMails = new HashMap<>();
private boolean mapVisible = false;
public void initView() {
if(token == null)
throw new RuntimeException("todo");
user = barcodeBean.getUserFromLongTextCode(token);
if(user == null)
throw new RuntimeException("todo");
}
public String getUserTextCode() {
return barcodeBean.getUserTextCode(user);
}
public ListDataModel<GroupMembership> getGroupMemberships() {
memberlist = new ListDataModel<GroupMembership>(ticketBean.findMembershipPrintlistForUser(user));
return memberlist;
}
public String getMapFieldsetStyle() {
Integer width = placeBean.getActiveMap().getWidth();
if(width == null || width < 100)
return "";
return "width: " + (width+100) + "px;";
}
public void showMap() {
mapVisible = true;
}
public EventUser getUser() {
return user;
}
public void setUser(EventUser user) {
this.user = user;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public boolean isMapVisible() {
return mapVisible;
}
public void setMapVisible(boolean mapVisible) {
this.mapVisible = mapVisible;
}
}
...@@ -90,11 +90,10 @@ public class FoodWaveFoodView extends GenericCDIView { ...@@ -90,11 +90,10 @@ public class FoodWaveFoodView extends GenericCDIView {
foodWave = foodWaveBean.findFoodwave(getFoodwaveid()); foodWave = foodWaveBean.findFoodwave(getFoodwaveid());
logger.debug("Foodwave {}", foodWave); logger.debug("Foodwave {}", foodWave);
shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productGTList(foodWave.getTemplate().getProducts(), userview.getUser())); shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productGTList(foodWave.getTemplate().getProducts(), userview.getSelectedUser()));
this.beginConversation(); this.beginConversation();
} }
logger.info("injected user {}", userview.getUser());
} }
public ListDataModel<Product> getProducts() { public ListDataModel<Product> getProducts() {
......
...@@ -515,3 +515,5 @@ place.send=Siirr\u00E4 paikka ...@@ -515,3 +515,5 @@ place.send=Siirr\u00E4 paikka
place.mapY= place.mapY=
place.cancelSend=Peruuta siirto place.cancelSend=Peruuta siirto
place.buyable= place.buyable=
etickets.sendAsMail=L\u00E4het\u00E4 s\u00E4hk\u00F6postina
etickets.showMap=N\u00E4yt\u00E4 kartta
...@@ -1662,3 +1662,5 @@ bill.isNotPaid=Not paid ...@@ -1662,3 +1662,5 @@ bill.isNotPaid=Not paid
placegroupview.owner=Owner placegroupview.owner=Owner
place.send=Transfer place place.send=Transfer place
place.cancelSend=Cancel transfer place.cancelSend=Cancel transfer
etickets.sendAsMail=Send as mail
etickets.showMap=Show map
...@@ -1643,3 +1643,5 @@ bill.isNotPaid=Maksamatta ...@@ -1643,3 +1643,5 @@ bill.isNotPaid=Maksamatta
placegroupview.owner=Omistaja placegroupview.owner=Omistaja
place.send=Siirr\u00E4 paikka place.send=Siirr\u00E4 paikka
place.cancelSend=Peruuta siirto 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!