Commit 8557d61a by Tuomas Riihimäki

Merge branch 'vectoinfo' into 'master'

Vectoinfo

Lisää vectoinfoilua, tän jälkeen siirryn omaan kivaan branchiin jne.

Reviewed-by: @tuomari
2 parents 8b3780fd 3d4f036b
...@@ -21,6 +21,7 @@ import org.slf4j.LoggerFactory; ...@@ -21,6 +21,7 @@ import org.slf4j.LoggerFactory;
import fi.codecrew.moya.enums.CardState; import fi.codecrew.moya.enums.CardState;
import fi.codecrew.moya.enums.apps.UserPermission; import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.facade.CardCodeFacade;
import fi.codecrew.moya.facade.CardObjectDataFacade; import fi.codecrew.moya.facade.CardObjectDataFacade;
import fi.codecrew.moya.facade.CardTemplateFacade; import fi.codecrew.moya.facade.CardTemplateFacade;
import fi.codecrew.moya.facade.CardTextDataFacade; import fi.codecrew.moya.facade.CardTextDataFacade;
...@@ -28,6 +29,7 @@ import fi.codecrew.moya.facade.EventUserFacade; ...@@ -28,6 +29,7 @@ import fi.codecrew.moya.facade.EventUserFacade;
import fi.codecrew.moya.facade.GroupMembershipFacade; import fi.codecrew.moya.facade.GroupMembershipFacade;
import fi.codecrew.moya.facade.LanEventPropertyFacade; import fi.codecrew.moya.facade.LanEventPropertyFacade;
import fi.codecrew.moya.facade.PrintedCardFacade; import fi.codecrew.moya.facade.PrintedCardFacade;
import fi.codecrew.moya.model.CardCode;
import fi.codecrew.moya.model.CardObjectData; import fi.codecrew.moya.model.CardObjectData;
import fi.codecrew.moya.model.CardTemplate; import fi.codecrew.moya.model.CardTemplate;
import fi.codecrew.moya.model.CardTextData; import fi.codecrew.moya.model.CardTextData;
...@@ -85,6 +87,9 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -85,6 +87,9 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
@EJB @EJB
private CardObjectDataFacade codFacade; private CardObjectDataFacade codFacade;
@EJB
private CardCodeFacade cardCodeFacade;
...@@ -354,16 +359,20 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -354,16 +359,20 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
return card; return card;
} }
@Override @Override
public EventUser giveCard(EventUser user, boolean markUserPlacesDelivered) { public EventUser giveCard(EventUser user, boolean markUserPlacesDelivered) {
user = eventUserFacade.reload(user);
PrintedCard card = checkPrintedCard(user); PrintedCard card = checkPrintedCard(user);
if (card.getCardState() != CardState.DELIVERED) { if (card.getCardState() != CardState.DELIVERED) {
card.setCardState(CardState.DELIVERED); card.setCardState(CardState.DELIVERED);
card = printedcardfacade.merge(card);
} else { } else {
logger.info("Not marking card to delivered: " + card.getCardState() + " : " + card.getId()); logger.info("Not marking card to delivered: " + card.getCardState() + " : " + card.getId());
} }
...@@ -371,10 +380,22 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -371,10 +380,22 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
if (markUserPlacesDelivered) { if (markUserPlacesDelivered) {
for (GroupMembership membership : gmFacade.findMemberships(user)) { for (GroupMembership membership : gmFacade.findMemberships(user)) {
membership.setEnteredEvent(Calendar.getInstance()); membership.setEnteredEvent(Calendar.getInstance());
membership = gmFacade.merge(membership);
} }
} }
return eventUserFacade.reload(user); return user;
} }
@Override
public void removeCardCode(CardCode code) {
code = cardCodeFacade.reload(code);
if(code.getPrintedCard().getCardCodes().contains(code)) {
code.getPrintedCard().getCardCodes().remove(code);
}
cardCodeFacade.remove(code);
}
} }
...@@ -9,6 +9,8 @@ import java.math.BigDecimal; ...@@ -9,6 +9,8 @@ import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
...@@ -622,7 +624,12 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -622,7 +624,12 @@ public class PlaceBean implements PlaceBeanLocal {
@Override @Override
public byte[] generatePlacesPdf(float width, float height, double font1, double font2) { public byte[] generatePlacesPdf(float width, float height, double font1, double font2) {
try { try {
return generatePlacesPdf(width, height, font1, font1, placeFacade.findAll()); List<Place> places = placeFacade.findAll();
Collections.sort(places);
logger.info("sorting places etc.");
return generatePlacesPdf(width, height, font1, font1, places);
} catch (Exception e) { } catch (Exception e) {
logger.error("Exception from place pdf generation.", e); logger.error("Exception from place pdf generation.", e);
......
...@@ -79,50 +79,4 @@ public class PlaceMapBean implements PlaceMapBeanLocal { ...@@ -79,50 +79,4 @@ public class PlaceMapBean implements PlaceMapBeanLocal {
return null; return null;
} }
/*
wanha, poistoon
public byte[] placeCodesPdf(List<Place> places) {
// double[] pageSize = new double[] { cardBackground.getWidth(),
// cardBackground.getHeight() };
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PDF pdf;
try {
pdf = new PDF(outputStream);
pdf.setTitle("placecodes");
double pagex = 155.9;
double pagey = 48;
Page page = new Page(pdf, new double[] { pagex, pagey });
// Render texts
// Big font for nick
com.pdfjet.Font font = new com.pdfjet.Font(pdf, CoreFont.HELVETICA);
font.setSize(8.0);
TextLine line = new TextLine(font);
line.setText("testi");
line.setPosition(1, 1);
line.setColor(new double[] { 1.0, 1.0, 1.0 });
line.drawOn(page);
pdf.flush();
outputStream.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return outputStream.toByteArray();
}
*/
} }
...@@ -173,10 +173,11 @@ public class ReaderBean implements ReaderBeanLocal { ...@@ -173,10 +173,11 @@ public class ReaderBean implements ReaderBeanLocal {
@Override @Override
public ReaderEvent assocCodeToCard(ReaderEvent readerEvent, PrintedCard card) { public ReaderEvent assocCodeToCard(ReaderEvent readerEvent, PrintedCard card) {
card = cardfacade.reload(card);
CardCode code = new CardCode(card, readerEvent.getReader().getType(), readerEvent.getValue(), eventbean.getCurrentEvent()); CardCode code = new CardCode(card, readerEvent.getReader().getType(), readerEvent.getValue(), eventbean.getCurrentEvent());
code = cardCodeFacade.create(code); code = cardCodeFacade.create(code);
card = cardfacade.reload(card); card.getCardCodes().add(code);
return readerEvent; return readerEvent;
} }
......
...@@ -6,12 +6,12 @@ import java.util.List; ...@@ -6,12 +6,12 @@ import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
import fi.codecrew.moya.enums.CardState; import fi.codecrew.moya.enums.CardState;
import fi.codecrew.moya.model.CardCode;
import fi.codecrew.moya.model.CardObjectData; import fi.codecrew.moya.model.CardObjectData;
import fi.codecrew.moya.model.CardTemplate; import fi.codecrew.moya.model.CardTemplate;
import fi.codecrew.moya.model.CardTextData; import fi.codecrew.moya.model.CardTextData;
import fi.codecrew.moya.model.EventUser; import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.PrintedCard; import fi.codecrew.moya.model.PrintedCard;
import fi.codecrew.moya.model.ReaderEvent;
import fi.codecrew.moya.utilities.jsf.EntityFinderBean; import fi.codecrew.moya.utilities.jsf.EntityFinderBean;
@Local @Local
...@@ -62,5 +62,6 @@ public interface CardTemplateBeanLocal extends EntityFinderBean<CardTemplate> { ...@@ -62,5 +62,6 @@ public interface CardTemplateBeanLocal extends EntityFinderBean<CardTemplate> {
PrintedCard setCardState(Integer cardId, CardState printed) throws Exception; PrintedCard setCardState(Integer cardId, CardState printed) throws Exception;
EventUser giveCard(EventUser user, boolean markUserPlacesDelivered); EventUser giveCard(EventUser user, boolean markUserPlacesDelivered);
void removeCardCode(CardCode code);
} }
...@@ -12,13 +12,14 @@ import javax.persistence.OneToOne; ...@@ -12,13 +12,14 @@ import javax.persistence.OneToOne;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Temporal; import javax.persistence.Temporal;
import javax.persistence.TemporalType; import javax.persistence.TemporalType;
import javax.persistence.Transient;
/** /**
* *
*/ */
@Entity @Entity
@Table(name = "places") @Table(name = "places")
public class Place extends GenericEntity { public class Place extends GenericEntity implements Comparable<Place> {
/** /**
* *
...@@ -274,4 +275,72 @@ public class Place extends GenericEntity { ...@@ -274,4 +275,72 @@ public class Place extends GenericEntity {
this.disabled = disabled; this.disabled = disabled;
} }
/**
* Note: this class has a natural ordering that is inconsistent with equals.
*/
@Override
@Transient
public int compareTo(Place o) {
if(this.getName().equals(o.getName())) {
return 0;
}
// check empty string etc.
if(o.getName().length() == 0) {
if(this.getName().length() > 0)
return 1;
return 0;
}
if(this.getName().length() == 0 && o.getName().length() > 0) {
return -1;
}
// check prefixes
String splitted[] = o.getName().split("[0-9]");
if(splitted[0].length() > 0) {
if(splitted[0].length() > this.getName().length()) {
return this.getName().compareTo(splitted[0]);
}
} else {
return 1;
}
String myPrefix = this.getName().substring(0, splitted[0].length());
if(myPrefix.compareTo(splitted[0]) != 0)
return myPrefix.compareTo(splitted[0]);
// prefixes are same, find numbers and check them
String otherNumber = o.getName().substring(splitted[0].length());
String myNumber = this.getName().substring(splitted[0].length());
try {
int other = Integer.parseInt(otherNumber);
int me = Integer.parseInt(myNumber);
if(other < me) {
return 1;
}
if(other > me)
return -1;
return 0;
} catch(NumberFormatException x) {
return myNumber.compareTo(otherNumber);
}
}
} }
...@@ -11,8 +11,10 @@ ...@@ -11,8 +11,10 @@
<f:event type="preRenderView" listener="#{incomingView.initPrintCardView}" /> <f:event type="preRenderView" listener="#{incomingView.initPrintCardView}" />
</f:metadata> </f:metadata>
<ui:define name="content"> <ui:define name="content">
<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />
<script type="text/javascript">
</script>
...@@ -25,23 +27,34 @@ ...@@ -25,23 +27,34 @@
</p:autoComplete> </p:autoComplete>
</h:form> </h:form>
<h:form> <h:form id="attachform">
<p:poll update="attachBarcode" interval="2" ignoreAutoUpdate="true" onerror="location.reload();" />
<p:poll update="attachBarcode" interval="2" ignoreAutoUpdate="true" />
<h:panelGroup id="attachBarcode"> <h:panelGroup id="attachBarcode">
<h:panelGroup rendered="#{incomingView.showAttachDialog}"> <h:panelGroup id="attachhider" rendered="#{incomingView.showAttachDialog}">
<h1>#{i18n['incomingView.attachDialogTitle']}</h1> <div id="attachpopup">
<p:commandButton value="#{i18n['incomingView.attach']}" action="#{incomingView.attachCodeToCard}" update="@all" /> <script>
<p:commandButton value="#{i18n['incomingView.cancel']}" action="#{incomingView.hideAttachDialog}" update="@all" /> $(".attachbuttonidclass").focus();
</script>
<h1>#{i18n['incomingView.attachDialogTitle']}</h1>
<!-- napin painaminen aiheuttaa aina NullPOinterExceptionin, mutta tekee siitä huolimatta tarvittavat asiat -->
<p:commandButton styleClass="attachbuttonidclass" value="#{i18n['incomingView.attach']}" actionListener="#{incomingView.attachCodeToCard}" update=":cardcodeform :placelistform :imgCropperForm :cardsetform" onerror="location.reload(true);" />
<p:commandButton value="#{i18n['incomingView.cancel']}" actionListener="#{incomingView.hideAttachDialog}" update=":attachform:attachBarcode" />
</div>
</h:panelGroup> </h:panelGroup>
</h:panelGroup> </h:panelGroup>
</h:form> </h:form>
<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />
<br /> <br />
<br /> <br />
<h1> <h1>
<p:outputLabel value="#{userView.selectedUser.firstnames}" /> <p:outputLabel value="#{userView.selectedUser.firstnames}" />
...@@ -52,77 +65,283 @@ ...@@ -52,77 +65,283 @@
</h1> </h1>
<br /> <br />
<h:panelGrid id="cropper" columns="2"> <h:panelGrid id="cropper" columns="4">
<h:panelGroup>
<h:form id="userform_info" enctype="multipart/form-data">
<p:fieldset id="userfieldset_info" legend="#{i18n['incomingflow.usereditor.info']}" toggleable="true" collapsed="#{fieldsetView.isCollapsed(component.id)}">
<p:ajax event="toggle" listener="#{fieldsetView.handleToggle}" />
<table>
<ui:fragment rendered="#{!cc.attrs.creating}">
<tr>
<td colspan="2"><b><h:outputLabel for="login" value="#{i18n['user.login']}" /></b><br /> <h:outputText value="#{userView.selectedUser.login}" id="login" /></td>
</tr>
</ui:fragment>
<tr>
<td colspan="2"><b><h:outputLabel value="#{i18n['user.nick']}" for="nick" /> </b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText size="45" id="nick" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.nick}" />
</p:inplace></td>
</tr>
<tr>
<td><b><h:outputLabel value="#{i18n['user.firstNames']}" for="firstnames" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText size="22" id="firstnames" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.firstnames}" />
</p:inplace></td>
<td><b><h:outputLabel value="#{i18n['user.lastName']}" for="lastname" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText size="30" id="lastname" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.lastname}" />
</p:inplace></td>
</tr>
<tr>
<td colspan="2"><b><h:outputLabel value="#{i18n['user.sex']}" for="sex" /></b> <br /> <p:selectOneMenu disabled="#{!cc.attrs.creating and !userView.canSave}" id="sex" value="#{userView.selectedUser.gender}">
<f:selectItem id="undefined" itemLabel="#{i18n['user.sex.UNDEFINED']}" itemValue="UNDEFINED" />
<f:selectItem id="male" itemLabel="#{i18n['user.sex.MALE']}" itemValue="MALE" />
<f:selectItem id="female" itemLabel="#{i18n['user.sex.FEMALE']}" itemValue="FEMALE" />
</p:selectOneMenu></td>
</tr>
<tr>
<td><b><h:outputLabel for="birthday" value="#{i18n['user.birthday']}" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:calendar id="birthday" navigator="true" yearRange="c-80:c-0" value="#{userView.selectedUser.birthday}">
<f:convertDateTime pattern="#{sessionHandler.dateFormat}" timeZone="#{sessionHandler.timezone}" />
</p:calendar>
</p:inplace> <h:message for="birthday" /></td>
<td><b><h:outputLabel for="age" value="#{i18n['user.age']}" /></b><br /> <h:outputText value="#{userView.selectedUser.user.age}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:outputText></td>
</tr>
</table>
<table>
<tr>
<td colspan="2"><b><p:outputLabel value="#{i18n['user.address']}" for="address" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText size="45" id="address" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.address}" />
</p:inplace></td>
</tr>
<tr>
<td><b><p:outputLabel value="#{i18n['user.zipCode']}" for="zip" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText styleClass="ui-input" size="7" id="zip" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.zip}" />
</p:inplace> <p:message for="zip" /></td>
<td><b><p:outputLabel value="#{i18n['user.town']}" for="town" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText styleClass="ui-input" size="25" id="town" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.town}" />
</p:inplace> <p:message for="town" /></td>
</tr>
<tr>
<td colspan="2"><b><h:outputLabel value="#{i18n['user.email']}" for="email" /></b> <br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText validator="#{userValidator.validateEmail}" size="45" id="email" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.email}" />
</p:inplace></td>
</tr>
<tr>
<td><b><p:outputLabel value="#{i18n['user.phone']}" for="phone" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText styleClass="ui-input" size="7" id="phone" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.phone}" />
</p:inplace> <p:message for="phone" /></td>
</tr>
</table>
<p:commandButton rendered="#{cc.attrs.creating or userView.canSave}" id="commitbtn" action="#{incomingView.saveUser()}" ajax="false" value="#{i18n['user.save']}" onerror="location.reload(true);" />
</p:fieldset>
</h:form>
</h:panelGroup>
<h:panelGroup>
<h:form id="cardsetform">
<p:fieldset id="cardset" legend="#{i18n['incomingflow.printedCard']}" toggleable="true" collapsed="#{fieldsetView.isCollapsed(component.id)}">
<p:ajax event="toggle" listener="#{fieldsetView.handleToggle}" />
<p:graphicImage url="/dydata/usercard/#{userView.selectedUser.user.id}.png" width="300" />
<br />
<h:commandButton action="#{incomingView.printCard}" value="#{i18n['print']}" /> (status: <p:outputLabel value="#{incomingView.printedStatus}" />)
</p:fieldset>
</h:form>
</h:panelGroup>
<h:panelGroup> <h:panelGroup>
<p:fieldset legend="#{i18n['incomingflow.usereditor']}" toggleable="true">
<user:edit id="usereditor" commitaction="#{incomingView.saveUser()}" commitvalue="#{i18n['user.save']}" camAlwaysOn="true" photocamupdate="@all" /> <h:form id="userform" enctype="multipart/form-data">
</p:fieldset> <p:fieldset id="userfieldset_picture" legend="#{i18n['incomingflow.usereditor.picture']}" toggleable="true" collapsed="#{fieldsetView.isCollapsed(component.id)}">
<p:ajax event="toggle" listener="#{fieldsetView.handleToggle}" />
<ui:fragment rendered="#{not empty userView.selectedUser.id}">
<p:dialog id="chartPanel" for="webcamButton" modal="true" dynamic="true" widgetVar="webcamDialog">
<p:photoCam widgetVar="pc" listener="#{userView.oncapture}" update=":userform" />
<p:commandButton type="button" value="Capture" onclick="PF('pc').capture()" onerror="location.reload(true);" />
</p:dialog>
<h:outputText rendered="#{empty userView.selectedUser.currentImage}" value="#{i18n['user.noCurrentImage']}" />
<ui:fragment rendered="#{!empty userView.selectedUser.currentImage}">
<img style="width: 150px;" src="#{request.contextPath}/dydata/userimage/#{userView.selectedUser.currentImage.id}.img" alt="image" />
</ui:fragment>
<br />
<p:commandButton onerror="location.reload(true);" rendered="#{!true}" id="webcamButton" value="#{i18n['userimage.webcam']}" onclick="PF('webcamDialog').show()" type="button" />
<br />
<br />
<ui:fragment rendered="#{true}">
<p:photoCam widgetVar="pc" listener="#{userView.oncapture}" update=":cardsetform,:imgCropperForm,:userform" />
<p:commandButton type="button" value="Capture" onclick="PF('pc').capture()" onerror="location.reload(true);" update=":cardsetform,:imgCropperForm,:userform" />
</ui:fragment>
<!-- -->
&nbsp;
<p:fileUpload id="uploadfile" value="#{userView.image}" mode="simple" required="true" requiredMessage="Required!" invalidSizeMessage="#{i18n['user.imageTooBig']}" sizeLimit="1024" />
<p:message for="uploadfile" />
<p:commandButton action="#{userView.sendImage}" ajax="false" value="#{i18n['user.imagesubmit']}" onerror="location.reload(true);" />
</ui:fragment>
<ui:fragment rendered="#{cc.attrs.creating}">
<h:outputLabel value="#{i18n['user.login']}" for="mklogin" />
<br />
<p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText size="25" id="mklogin" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.login}" />
</p:inplace>
<p:message for="login" />
<br />
</ui:fragment>
<br />
<h:outputLabel rendered="#{cc.attrs.creating}" value="#{i18n['user.password']}" for="password" />
<br />
<p:inplace rendered="#{cc.attrs.creating}" emptyLabel="#{i18n['user.insert']}">
<p:password validator="#{userValidator.password}" id="password" value="#{userView.password}" />
</p:inplace>
<p:message rendered="#{cc.attrs.creating}" for="password" />
<br />
<p:outputLabel rendered="#{cc.attrs.creating}" value="#{i18n['user.passwordcheck']}" for="passwordcheck" />
<br />
<p:inplace rendered="#{cc.attrs.creating}" emptyLabel="#{i18n['user.insert']}">
<p:password validator="#{userValidator.password}" id="passwordcheck" value="#{userView.passwordcheck}" />
</p:inplace>
<p:message rendered="#{cc.attrs.creating}" for="passwordcheck" />
<br />
</p:fieldset>
</h:form>
</h:panelGroup> </h:panelGroup>
<h:panelGroup> <h:panelGroup>
<p:fieldset legend="#{i18n['incomingflow.printedCard']}" toggleable="true">
<h:panelGrid columns="2"> <h:form id="imgCropperForm">
<h:panelGroup> <p:fieldset id="cropperandcardset" legend="#{i18n['incomingflow.printedCard']}" toggleable="true" collapsed="#{fieldsetView.isCollapsed(component.id)}">
<h:form id="imgCropperForm" rendered="#{!empty userView.selectedUser.currentImage}"> <p:ajax event="toggle" listener="#{fieldsetView.handleToggle}" />
<p:commandButton value="#{i18n['user.imageCropRefresh']}" ajax="false" update="imgCropperForm" />
<h:panelGrid columns="1">
<h:panelGroup rendered="#{!empty userView.selectedUser.currentImage}">
<p:commandButton value="#{i18n['user.imageCropRefresh']}" ajax="false" update=":cardsetform imgCropperForm" />
<h:outputLabel value="#{i18n['user.cropUserImage']}:" /> <h:outputLabel value="#{i18n['user.cropUserImage']}:" />
<p:imageCropper id="imgCropper" value="#{userView.croppedImage}" aspectRatio="0.7317073170731707" image="/dydata/userimage/#{userView.selectedUser.currentImage.id}.img" /> <p:imageCropper id="imgCropper" value="#{userView.croppedImage}" aspectRatio="0.7317073170731707" image="/dydata/userimage/#{userView.selectedUser.currentImage.id}.img" />
<br /> <br />
<h:commandButton action="#{userView.crop}" value="#{i18n['user.cropImage']}" /> <h:commandButton action="#{userView.crop}" value="#{i18n['user.cropImage']}" />
</h:form>
</h:panelGroup> </h:panelGroup>
<h:panelGroup> </h:panelGrid>
<h:form> </p:fieldset>
<p:graphicImage url="/dydata/usercard/#{userView.selectedUser.user.id}.png" width="300" /> </h:form>
<br />
<h:commandButton action="#{incomingView.printCard}" value="#{i18n['print']}" /> (status: <p:outputLabel value="#{incomingView.printedStatus}" />)
</h:form>
</h:panelGroup>
</h:panelGrid>
</p:fieldset>
</h:panelGroup> </h:panelGroup>
</h:panelGrid> </h:panelGrid>
<h:form>
<p:fieldset id="userroles" legend="#{i18n['incomingflow.printedCard']}" toggleable="true" collapsed="#{fieldsetView.isCollapsed(component.id)}">
<p:ajax event="toggle" listener="#{fieldsetView.handleToggle}" />
<h:selectManyCheckbox converter="#{roleConverter}" disabled="#{!roleView.canWriteRoles}" layout="pageDirection" id="roles" value="#{userView.usersRoles}">
<f:selectItems var="roleitem" itemLabel="#{roleitem.name}" value="#{roleDataView.roles}" />
</h:selectManyCheckbox>
<p:commandButton action="#{userView.saveRoles}" value="#{i18n['user.saveRoles']}" ajax="false" />
</p:fieldset>
</h:form>
<br /><br />
<h:outputText rendered="#{empty incomingView.groupMemberships}" value="#{i18n['placegroupview.noMemberships']}" /> <h:outputText rendered="#{empty incomingView.groupMemberships}" value="#{i18n['placegroupview.noMemberships']}" />
<h:form rendered="#{!empty incomingView.groupMemberships}" id="placelistform"> <h:form rendered="#{!empty incomingView.groupMemberships}" id="placelistform">
<p:dataTable value="#{incomingView.groupMemberships}" var="member" rowStyleClass="#{member.enteredEvent != null ? 'success':''}"> <p:fieldset legend="#{i18n['incomingflow.groupmemberships']}" toggleable="true" collapsed="#{fieldsetView.isCollapsed(component.id)}">
<p:ajax event="toggle" listener="#{fieldsetView.handleToggle}" />
<p:column>
<f:facet name="header"> <p:dataTable value="#{incomingView.groupMemberships}" var="member" rowStyleClass="#{member.enteredEvent != null ? 'success':''}">
<h:outputText value="#{i18n['placegroupview.reservationName']}" />
</f:facet> <p:column>
<h:outputText value="#{member.placeReservation.name}" /> <f:facet name="header">
</p:column> <h:outputText value="#{i18n['placegroupview.reservationName']}" />
<p:column> </f:facet>
<f:facet name="header"> <h:outputText value="#{member.placeReservation.name}" />
<h:outputText value="#{i18n['placegroupview.reservationProduct']}" /> </p:column>
</f:facet> <p:column>
<h:outputText value="#{member.placeReservation.product.name}" /> <f:facet name="header">
</p:column> <h:outputText value="#{i18n['placegroupview.reservationProduct']}" />
<p:column> </f:facet>
<f:facet name="header"> <h:outputText value="#{member.placeReservation.product.name}" />
<h:outputText value="#{i18n['placegroupview.token']}" /> </p:column>
</f:facet> <p:column>
<h:outputText rendered="#{empty member.user}" value="#{member.inviteToken}" /> <f:facet name="header">
<h:outputText rendered="#{!empty member.user}" value="#{member.user.firstnames} #{member.user.lastname} (#{member.user.nick})" /> <h:outputText value="#{i18n['placegroupview.token']}" />
</f:facet>
</p:column> <h:outputText rendered="#{empty member.user}" value="#{member.inviteToken}" />
<p:column> <h:outputText rendered="#{!empty member.user}" value="#{member.user.firstnames} #{member.user.lastname} (#{member.user.nick})" />
<f:facet name="header">
<h:outputText value="#{i18n['placegroupview.groupCreator']}" /> </p:column>
</f:facet> <p:column>
<h:outputText value="#{member.placeGroup.creator.firstnames} #{member.placeGroup.creator.lastname} (#{member.placeGroup.creator.nick})" /> <f:facet name="header">
<h:outputText value="#{i18n['placegroupview.groupCreator']}" />
</p:column> </f:facet>
<h:outputText value="#{member.placeGroup.creator.firstnames} #{member.placeGroup.creator.lastname} (#{member.placeGroup.creator.nick})" />
<p:column> </p:column>
<h:commandButton rendered="#{empty member.enteredEvent}" action="#{incomingView.givePlace}" value="#{i18n['incomingflow.giveplace']}" /> <p:column>
<h:commandButton rendered="#{!empty member.enteredEvent}" action="#{incomingView.ungivePlace}" value="#{i18n['incomingflow.ungiveplace']}" /> <h:commandButton rendered="#{empty member.enteredEvent}" action="#{incomingView.givePlace}" value="#{i18n['incomingflow.giveplace']}" />
</p:column> <h:commandButton rendered="#{!empty member.enteredEvent}" action="#{incomingView.ungivePlace}" value="#{i18n['incomingflow.ungiveplace']}" />
</p:column>
</p:dataTable>
</p:dataTable>
</p:fieldset>
</h:form>
<br />
<br />
<br />
<h:form id="cardcodeform">
<p:fieldset legend="#{i18n['incomingflow.cardCodes']}" toggleable="true" collapsed="#{fieldsetView.isCollapsed(component.id)}">
<p:ajax event="toggle" listener="#{fieldsetView.handleToggle}" />
<p:dataTable id="codetable" value="#{incomingView.cardCodes}" var="code">
<p:column headerText="#{i18n['cardCode.type']}">
<h:outputText value="#{code.type}" />
</p:column>
<p:column headerText="#{i18n['cardCode.code']}">
<h:outputText value="#{code.code}" />
</p:column>
<p:column>
<p:commandButton value="#{i18n['delete']}" actionListener="#{incomingView.deleteSelectedCode}" update=":cardcodeform" />
</p:column>
</p:dataTable>
</p:fieldset>
</h:form> </h:form>
</ui:define> </ui:define>
......
...@@ -31,10 +31,6 @@ ...@@ -31,10 +31,6 @@
<ui:define name="content"> <ui:define name="content">
<infoview:userselector /> <infoview:userselector />
<br />
<br />
<!-- reader:backendReader selectvalue="#{i18n['barcodeReader.readBarcode']}" selectaction="#{infoView.selectUser}" / -->
</ui:define> </ui:define>
......
...@@ -51,6 +51,11 @@ ...@@ -51,6 +51,11 @@
<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}">
<h:outputText value="#{bill.notes}" />
</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.vat']}" />
......
...@@ -100,7 +100,7 @@ ...@@ -100,7 +100,7 @@
</h:panelGrid> </h:panelGrid>
<br /> <br />
<h2><p:outputLabel value="#{i18n['bill.notes.title']}" /> </h2>
<p:inputTextarea cols="50" rendered="#{productShopView.gatherBillInfo}" value="#{productShopView.otherInfo}" label="#{i18n['otherInfo']}" /> <p:inputTextarea cols="50" rendered="#{productShopView.gatherBillInfo}" value="#{productShopView.otherInfo}" label="#{i18n['otherInfo']}" />
<br /> <br />
......
...@@ -307,5 +307,19 @@ label { ...@@ -307,5 +307,19 @@ label {
#attachpopup {
display: block;
position: fixed;
border: 5px solid red;
border-radius: 11px;
left: 30%;
top: 30%;
width: 300px;
height: 100px;
background-color: white;
z-index: 999;
padding: 10px;
}
\ No newline at end of file
...@@ -12,8 +12,8 @@ ...@@ -12,8 +12,8 @@
<meta name="author" content="CodeCrew ry" /> <meta name="author" content="CodeCrew ry" />
<meta http-equiv="Content-Language" content="fi" /> <meta http-equiv="Content-Language" content="fi" />
<link rel="icon" href="#{request.contextPath}/favicon.ico" type="image/x-icon" /> <link rel="icon" href="#{request.contextPath}/favicon.ico" type="image/x-icon" />
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/templates/blipview/css/style.css" /> <link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/templates/infoview/css/style.css" />
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/templates/blipview/css/general.css" /> <link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/templates/infoview/css/general.css" />
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/templates/custom_components.css" /> <link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/templates/custom_components.css" />
<ui:insert name="headerdata" /> <ui:insert name="headerdata" />
......
...@@ -30,6 +30,7 @@ bill.cancel = Cancel bill ...@@ -30,6 +30,7 @@ bill.cancel = Cancel bill
bill.expires = Expires bill.expires = Expires
bill.isExpired = Bill is expired bill.isExpired = Bill is expired
bill.markPaid.show = Show Mark paid -buttons bill.markPaid.show = Show Mark paid -buttons
bill.notes.title = Lis\u00E4tietoja
bill.save = Save bill.save = Save
bill.showPayButtons = Show pay buttons bill.showPayButtons = Show pay buttons
...@@ -108,10 +109,15 @@ bortalApplication.user.WRITE_ROLES = Modify roles ...@@ -108,10 +109,15 @@ bortalApplication.user.WRITE_ROLES = Modify roles
card.massprint.title = Print all card.massprint.title = Print all
cardCode.code = Koodi
cardCode.type = Tyyppi
cardTemplate.emptyCardTemplate = ---- cardTemplate.emptyCardTemplate = ----
code.inputfield = Sy\u00F6t\u00E4 viivakoodi code.inputfield = Sy\u00F6t\u00E4 viivakoodi
delete = Poista
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.
...@@ -160,15 +166,23 @@ global.save = Save ...@@ -160,15 +166,23 @@ global.save = Save
httpsession.creationTime = Created httpsession.creationTime = Created
incomingView.attach = Liit\u00E4
incomingView.attachDialogTitle = Liit\u00E4 koodi k\u00E4ytt\u00E4j\u00E4\u00E4n
incomingView.cancel = Peruuta
incomingflow.alreadyShowingUser.message = Piipattu k\u00E4ytt\u00E4j\u00E4 on jo n\u00E4kyviss\u00E4 incomingflow.alreadyShowingUser.message = Piipattu k\u00E4ytt\u00E4j\u00E4 on jo n\u00E4kyviss\u00E4
incomingflow.alreadyShowingUser.title = Valmiiksi valittu incomingflow.alreadyShowingUser.title = Valmiiksi valittu
incomingflow.cardCodes = Kortin koodit
incomingflow.codeattached.message = Piipattu koodi liitetty n\u00E4ytett\u00E4v\u00E4\u00E4n korttiin incomingflow.codeattached.message = Piipattu koodi liitetty n\u00E4ytett\u00E4v\u00E4\u00E4n korttiin
incomingflow.codeattached.title = Koodi liittetty incomingflow.codeattached.title = Koodi liittetty
incomingflow.giveplace = Merkitse annetuksi incomingflow.giveplace = Merkitse annetuksi
incomingflow.groupmemberships = Paikkakoodit
incomingflow.invalidbarcode.message = Viivakoodilla ei l\u00F6ytynyt mit\u00E4\u00E4n incomingflow.invalidbarcode.message = Viivakoodilla ei l\u00F6ytynyt mit\u00E4\u00E4n
incomingflow.invalidbarcode.title = virheellinen koodi incomingflow.invalidbarcode.title = virheellinen koodi
incomingflow.printedCard = Kortti incomingflow.printedCard = Kortti
incomingflow.usereditor = K\u00E4ytt\u00E4j\u00E4 incomingflow.usereditor = K\u00E4ytt\u00E4j\u00E4
incomingflow.usereditor.info = Tiedot
incomingflow.usereditor.picture = Kuvanotto
lanEventPrivateProperty.defaultValue = Default value lanEventPrivateProperty.defaultValue = Default value
lanEventPrivateProperty.editProperty = Edit property lanEventPrivateProperty.editProperty = Edit property
......
...@@ -79,6 +79,7 @@ bill.markPaid = Mark paid ...@@ -79,6 +79,7 @@ bill.markPaid = Mark paid
bill.markPaid.show = Show Mark paid -buttons bill.markPaid.show = Show Mark paid -buttons
bill.markedPaid = Bill marked paid bill.markedPaid = Bill marked paid
bill.notes = Notes bill.notes = Notes
bill.notes.title = Huomioitavaa
bill.noticetime = Notice time bill.noticetime = Notice time
bill.ourReference = Our reference bill.ourReference = Our reference
bill.paidDate = Paid date bill.paidDate = Paid date
...@@ -192,6 +193,9 @@ bortalApplication.user.WRITE_ROLES = Modify roles ...@@ -192,6 +193,9 @@ bortalApplication.user.WRITE_ROLES = Modify roles
card.massprint.title = Print all card.massprint.title = Print all
cardCode.code = Code
cardCode.type = Type
cardObjectData.create = Add object data cardObjectData.create = Add object data
cardObjectData.edit = Edit cardObjectData.edit = Edit
cardObjectData.save = Save cardObjectData.save = Save
...@@ -280,6 +284,8 @@ compofile.uploadTime = Upload time ...@@ -280,6 +284,8 @@ compofile.uploadTime = Upload time
content.showContentEditLinks = Show content edit links content.showContentEditLinks = Show content edit links
delete = Delete
discount.active = Active discount.active = Active
discount.amountMax = Max amount discount.amountMax = Max amount
discount.amountMin = Min amount discount.amountMin = Min amount
...@@ -462,13 +468,19 @@ imagefile.file = Imagefile ...@@ -462,13 +468,19 @@ imagefile.file = Imagefile
importuser.file = File importuser.file = File
importuser.template = Template importuser.template = Template
incomingView.attach = Attach
incomingView.attachDialogTitle = Attach code to user
incomingView.cancel = Cancel
incomingflow.alreadyShowingUser.message = We are already showing selected user incomingflow.alreadyShowingUser.message = We are already showing selected user
incomingflow.alreadyShowingUser.title = Already selected incomingflow.alreadyShowingUser.title = Already selected
incomingflow.barcode = Barcode incomingflow.barcode = Barcode
incomingflow.cardCodes = Barcodes in card
incomingflow.changereader = Change Reader incomingflow.changereader = Change Reader
incomingflow.codeattached.message = Code attached to current user's card incomingflow.codeattached.message = Code attached to current user's card
incomingflow.codeattached.title = Code attached incomingflow.codeattached.title = Code attached
incomingflow.giveplace = Mark given incomingflow.giveplace = Mark given
incomingflow.groupmemberships = Group memberships
incomingflow.invalidbarcode.message = Nothing found with barcode, you can now add it to the user incomingflow.invalidbarcode.message = Nothing found with barcode, you can now add it to the user
incomingflow.invalidbarcode.title = Invalid code incomingflow.invalidbarcode.title = Invalid code
incomingflow.multisearch = Multisearch incomingflow.multisearch = Multisearch
...@@ -477,6 +489,8 @@ incomingflow.search = Search ...@@ -477,6 +489,8 @@ incomingflow.search = Search
incomingflow.ungiveplace = Mark not given incomingflow.ungiveplace = Mark not given
incomingflow.userdetails = User details incomingflow.userdetails = User details
incomingflow.usereditor = User incomingflow.usereditor = User
incomingflow.usereditor.info = User
incomingflow.usereditor.picture = Picturetake
infoview.back = Back infoview.back = Back
infoview.computerplace = Computer places infoview.computerplace = Computer places
......
...@@ -79,6 +79,7 @@ bill.markPaid = Maksettu ...@@ -79,6 +79,7 @@ bill.markPaid = Maksettu
bill.markPaid.show = N\u00E4yt\u00E4 Maksettu -napit bill.markPaid.show = N\u00E4yt\u00E4 Maksettu -napit
bill.markedPaid = Lasku merkitty maksetuksi. bill.markedPaid = Lasku merkitty maksetuksi.
bill.notes = Huomioita bill.notes = Huomioita
bill.notes.title = Lis\u00E4tietoja
bill.noticetime = Huomautusaika bill.noticetime = Huomautusaika
bill.ourReference = Myyj\u00E4n viite bill.ourReference = Myyj\u00E4n viite
bill.paidDate = Maksup\u00E4iv\u00E4 bill.paidDate = Maksup\u00E4iv\u00E4
...@@ -193,6 +194,9 @@ bortalApplication.user.WRITE_ROLES = Saa muokata rooleja ...@@ -193,6 +194,9 @@ bortalApplication.user.WRITE_ROLES = Saa muokata rooleja
card.massprint.title = Tulosta kaikki card.massprint.title = Tulosta kaikki
cardCode.code = Koodi
cardCode.type = Tyyppi
cardObjectData.create = Liit\u00E4 kuvia cardObjectData.create = Liit\u00E4 kuvia
cardObjectData.edit = Muokkaa cardObjectData.edit = Muokkaa
cardObjectData.save = Tallenna cardObjectData.save = Tallenna
...@@ -281,6 +285,8 @@ compofile.uploadTime = Tallennusaika ...@@ -281,6 +285,8 @@ compofile.uploadTime = Tallennusaika
content.showContentEditLinks = N\u00E4yt\u00E4 sis\u00E4ll\u00F6nmuokkauslinkit content.showContentEditLinks = N\u00E4yt\u00E4 sis\u00E4ll\u00F6nmuokkauslinkit
delete = Poista
discount.active = Aktiivinen discount.active = Aktiivinen
discount.amountMax = Enimm\u00E4ism\u00E4\u00E4r\u00E4 discount.amountMax = Enimm\u00E4ism\u00E4\u00E4r\u00E4
discount.amountMin = V\u00E4himm\u00E4ism\u00E4\u00E4r\u00E4 discount.amountMin = V\u00E4himm\u00E4ism\u00E4\u00E4r\u00E4
...@@ -470,13 +476,19 @@ imagefile.file = Kuvatiedosto ...@@ -470,13 +476,19 @@ imagefile.file = Kuvatiedosto
importuser.file = Tiedosto importuser.file = Tiedosto
importuser.template = Malli importuser.template = Malli
incomingView.attach = Liit\u00E4
incomingView.attachDialogTitle = Liit\u00E4 koodi k\u00E4ytt\u00E4j\u00E4\u00E4n
incomingView.cancel = Peruuta
incomingflow.alreadyShowingUser.message = Piipattu k\u00E4ytt\u00E4j\u00E4 on jo n\u00E4kyviss\u00E4 incomingflow.alreadyShowingUser.message = Piipattu k\u00E4ytt\u00E4j\u00E4 on jo n\u00E4kyviss\u00E4
incomingflow.alreadyShowingUser.title = Valmiiksi valittu incomingflow.alreadyShowingUser.title = Valmiiksi valittu
incomingflow.barcode = Viivakoodi incomingflow.barcode = Viivakoodi
incomingflow.cardCodes = Korttiin liitetyt koodit
incomingflow.changereader = Vaihda lukijaa incomingflow.changereader = Vaihda lukijaa
incomingflow.codeattached.message = Piipattu koodi liitetty aktiiviseen k\u00E4ytt\u00E4j\u00E4\u00E4n incomingflow.codeattached.message = Piipattu koodi liitetty aktiiviseen k\u00E4ytt\u00E4j\u00E4\u00E4n
incomingflow.codeattached.title = Koodi liitetty incomingflow.codeattached.title = Koodi liitetty
incomingflow.giveplace = Merkitse annetuksi incomingflow.giveplace = Merkitse annetuksi
incomingflow.groupmemberships = Konepaikat sek\u00E4 liput
incomingflow.invalidbarcode.message = Piipatulla koodilla ei l\u00F6ytynyt mit\u00E4\u00E4n, voit lis\u00E4t\u00E4 koodin k\u00E4ytt\u00E4j\u00E4\u00E4n incomingflow.invalidbarcode.message = Piipatulla koodilla ei l\u00F6ytynyt mit\u00E4\u00E4n, voit lis\u00E4t\u00E4 koodin k\u00E4ytt\u00E4j\u00E4\u00E4n
incomingflow.invalidbarcode.title = Virheellinen koodi incomingflow.invalidbarcode.title = Virheellinen koodi
incomingflow.multisearch = Monihaku incomingflow.multisearch = Monihaku
...@@ -485,6 +497,8 @@ incomingflow.search = Etsi ...@@ -485,6 +497,8 @@ incomingflow.search = Etsi
incomingflow.ungiveplace = Ei olekkaan annettu incomingflow.ungiveplace = Ei olekkaan annettu
incomingflow.userdetails = K\u00E4ytt\u00E4j\u00E4n tiedot incomingflow.userdetails = K\u00E4ytt\u00E4j\u00E4n tiedot
incomingflow.usereditor = K\u00E4ytt\u00E4j\u00E4 incomingflow.usereditor = K\u00E4ytt\u00E4j\u00E4
incomingflow.usereditor.info = K\u00E4vij\u00E4
incomingflow.usereditor.picture = Kuvanotto
index.title = Etusivu index.title = Etusivu
......
...@@ -122,9 +122,9 @@ public class UserView extends GenericCDIView { ...@@ -122,9 +122,9 @@ public class UserView extends GenericCDIView {
printedCard = card; printedCard = card;
} }
/** /**
* This is the user that is currently logged in. * This is the user that is currently logged in.
*
* @return * @return
*/ */
@Produces @Produces
...@@ -148,15 +148,16 @@ public class UserView extends GenericCDIView { ...@@ -148,15 +148,16 @@ public class UserView extends GenericCDIView {
ByteArrayInputStream data = new ByteArrayInputStream(captureEvent.getData()); ByteArrayInputStream data = new ByteArrayInputStream(captureEvent.getData());
UserImage img = userbean.uploadImage(user, "image/png", data, "userimage.png", "Uploaded image"); UserImage img = userbean.uploadImage(user, "image/png", data, "userimage.png", "Uploaded image");
user = userbean.getEventUser(img.getUser(), false); user = userbean.getEventUser(img.getUser(), false);
// super.navihandler.forward("/admin/adduser/capturesuccess"); // super.navihandler.forward("/admin/adduser/capturesuccess");
if (getCaptureForwardUrl() != null && !getCaptureForwardUrl().isEmpty()) if (getCaptureForwardUrl() != null && !getCaptureForwardUrl().isEmpty())
super.navihandler.forward(getCaptureForwardUrl()); super.navihandler.forward(getCaptureForwardUrl());
} }
/** /**
* This is the user we are currently editing, if that is not found we user current user * This is the user we are currently editing, if that is not found we user
* current user
*
* @return * @return
*/ */
@Produces @Produces
...@@ -170,8 +171,7 @@ public class UserView extends GenericCDIView { ...@@ -170,8 +171,7 @@ public class UserView extends GenericCDIView {
} }
canSave = getCurrentUser().equals(user) || permbean.hasPermission(UserPermission.MODIFY); canSave = getCurrentUser().equals(user) || permbean.hasPermission(UserPermission.MODIFY);
} }
return user; return user;
} }
...@@ -376,8 +376,10 @@ public class UserView extends GenericCDIView { ...@@ -376,8 +376,10 @@ public class UserView extends GenericCDIView {
return null; return null;
} }
PrintedCard card = null;
// still there, we can get real card and update it's barcodes // still there, we can get real card and update it's barcodes
PrintedCard card = cardBean.checkPrintedCard(user); card = cardBean.checkPrintedCard(user);
readerbean.assocCodeToCard(event, card); readerbean.assocCodeToCard(event, card);
...@@ -391,7 +393,7 @@ public class UserView extends GenericCDIView { ...@@ -391,7 +393,7 @@ public class UserView extends GenericCDIView {
public String createUserAdduserView() { public String createUserAdduserView() {
userbean.createNewUser(user, getPassword()); userbean.createNewUser(user, getPassword());
//authView.executeAdduserAutoLogin(user, getPassword()); // authView.executeAdduserAutoLogin(user, getPassword());
return "/admin/adduser/update"; return "/admin/adduser/update";
} }
...@@ -413,9 +415,10 @@ public class UserView extends GenericCDIView { ...@@ -413,9 +415,10 @@ public class UserView extends GenericCDIView {
this.user = user; this.user = user;
} }
/** /**
* This is user what is currently on "user" -variable, you should almost newer use this. * This is user what is currently on "user" -variable, you should almost
* Use getCurrentUser() -instead. * newer use this. Use getCurrentUser() -instead.
*
* @return * @return
*/ */
public EventUser getUser() { public EventUser getUser() {
......
package fi.codecrew.moya.web.flow;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
/**
* Place to store userid between pageloads
* @author tuukka
*
*/
@Named
@SessionScoped
public class FlowUserContainer extends GenericCDIView {
private static final long serialVersionUID = 802344850073689859L;
private Integer userId;
/**
* Get current userid, remember to clear this, so there is no weird bugs
* @return
*/
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
}
package fi.codecrew.moya.web.flow; package fi.codecrew.moya.web.flow;
import java.util.ArrayList;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped; import javax.enterprise.context.ConversationScoped;
import javax.faces.application.FacesMessage; import javax.faces.application.FacesMessage;
...@@ -20,6 +22,7 @@ import fi.codecrew.moya.beans.PlaceGroupBeanLocal; ...@@ -20,6 +22,7 @@ import fi.codecrew.moya.beans.PlaceGroupBeanLocal;
import fi.codecrew.moya.beans.UserBeanLocal; import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.enums.CardState; import fi.codecrew.moya.enums.CardState;
import fi.codecrew.moya.enums.apps.UserPermission; import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.model.CardCode;
import fi.codecrew.moya.model.EventUser; import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.GroupMembership; import fi.codecrew.moya.model.GroupMembership;
import fi.codecrew.moya.model.PrintedCard; import fi.codecrew.moya.model.PrintedCard;
...@@ -36,8 +39,7 @@ public class IncomingView extends GenericCDIView { ...@@ -36,8 +39,7 @@ public class IncomingView extends GenericCDIView {
private static final long serialVersionUID = 802344850073689859L; private static final long serialVersionUID = 802344850073689859L;
private static final Logger logger = LoggerFactory private static final Logger logger = LoggerFactory.getLogger(IncomingView.class);
.getLogger(IncomingView.class);
/* /*
* @Inject * @Inject
* *
...@@ -54,6 +56,10 @@ public class IncomingView extends GenericCDIView { ...@@ -54,6 +56,10 @@ public class IncomingView extends GenericCDIView {
@Inject @Inject
private ReaderNameContainer namecontainer; private ReaderNameContainer namecontainer;
@Inject
private FlowUserContainer flowUserContainer;
@EJB @EJB
private BarcodeBeanLocal barcodeBean; private BarcodeBeanLocal barcodeBean;
...@@ -73,9 +79,13 @@ public class IncomingView extends GenericCDIView { ...@@ -73,9 +79,13 @@ public class IncomingView extends GenericCDIView {
@EJB @EJB
private PlaceGroupBeanLocal placegroupBean; private PlaceGroupBeanLocal placegroupBean;
@EJB
private CardTemplateBeanLocal cardTemplateBean;
// private String searchBarcode = ""; // private String searchBarcode = "";
private ListDataModel<GroupMembership> memberlist = null; private ListDataModel<GroupMembership> memberlist = null;
private ListDataModel<CardCode> cardCodes;
public void initView() { public void initView() {
super.beginConversation(); super.beginConversation();
...@@ -121,6 +131,14 @@ public class IncomingView extends GenericCDIView { ...@@ -121,6 +131,14 @@ public class IncomingView extends GenericCDIView {
if (!initialized) { if (!initialized) {
logger.debug("INITIALIZING!!!!"); logger.debug("INITIALIZING!!!!");
if(flowUserContainer.getUserId() != null && flowUserContainer.getUserId() > 0) {
userview.setUserid(flowUserContainer.getUserId());
}
flowUserContainer.setUserId(null);
// initializePoller(); // initializePoller();
initialized = true; initialized = true;
super.beginConversation(); super.beginConversation();
...@@ -179,17 +197,22 @@ public class IncomingView extends GenericCDIView { ...@@ -179,17 +197,22 @@ public class IncomingView extends GenericCDIView {
return; return;
} }
cardBean.giveCard(userview.getSelectedUser(), autoGivePlaces); cardBean.giveCard(userview.getSelectedUser(), autoGivePlaces);
userview.attachCodeToCard(eventToAttach); userview.attachCodeToCard(eventToAttach);
eventToAttach = null; eventToAttach = null;
showAttachDialog = false; showAttachDialog = false;
userview.setUser(null); // refresh user userview.setUser(null); // refresh user
userview.setPrintedCard(null); // refresh card
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(I18n.get("incomingflow.codeattached.title"), I18n.get("incomingflow.codeattached.message"))); FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(I18n.get("incomingflow.codeattached.title"), I18n.get("incomingflow.codeattached.message")));
} }
public boolean isShowAttachDialog() { public boolean isShowAttachDialog() {
return showAttachDialog; return showAttachDialog;
} }
...@@ -198,23 +221,27 @@ public class IncomingView extends GenericCDIView { ...@@ -198,23 +221,27 @@ public class IncomingView extends GenericCDIView {
showAttachDialog = false; showAttachDialog = false;
} }
/* public String selectUser() {
* public String selectUser() {
* ReaderEvent event = readerView.getReaderEvent();
* ReaderEvent event = readerView.getReaderEvent();
* if (event == null)
* if(event == null) return null; return null;
*
* EventUser user = event.getUser(); memberlist = null; EventUser user = event.getUser();
* memberlist = null;
* if (user == null) { logger.debug("got no user from barcode"); return
* null; } if (user == null) {
* logger.debug("got no user from barcode");
* logger.debug("got user from barcode"); return null;
* }
* userview.setUser(user); //userview.prepareCardDownload(); return
* "incoming"; } logger.debug("got user from barcode");
*/
userview.setUser(user);
userview.prepareCardDownload();
return "incoming";
}
public CardState getPrintedStatus() { public CardState getPrintedStatus() {
PrintedCard card = cardBean.checkPrintedCard(userview.getSelectedUser()); PrintedCard card = cardBean.checkPrintedCard(userview.getSelectedUser());
...@@ -237,6 +264,27 @@ public class IncomingView extends GenericCDIView { ...@@ -237,6 +264,27 @@ public class IncomingView extends GenericCDIView {
return memberlist; return memberlist;
} }
public ListDataModel<CardCode> getCardCodes() {
if(userview.getPrintedCard() == null)
return new ListDataModel<CardCode>(new ArrayList<CardCode>());
cardCodes = new ListDataModel<CardCode>(userview.getPrintedCard().getCardCodes());
return cardCodes;
}
public void deleteSelectedCode() {
if (cardCodes != null && cardCodes.isRowAvailable()) {
CardCode code = cardCodes.getRowData();
cardTemplateBean.removeCardCode(code);
// flush that fucker
userview.setPrintedCard(null);
}
}
public String givePlace() { public String givePlace() {
GroupMembership row = memberlist.getRowData(); GroupMembership row = memberlist.getRowData();
if (row != null) { if (row != null) {
...@@ -254,5 +302,5 @@ public class IncomingView extends GenericCDIView { ...@@ -254,5 +302,5 @@ public class IncomingView extends GenericCDIView {
} }
return null; return null;
} }
} }
...@@ -45,6 +45,9 @@ public class flowShopView extends GenericCDIView { ...@@ -45,6 +45,9 @@ public class flowShopView extends GenericCDIView {
@Inject @Inject
private ReaderView readerView; private ReaderView readerView;
@Inject
private FlowUserContainer flowUserContainer;
public void initView() { public void initView() {
if(userId == null || userId == 0) { if(userId == null || userId == 0) {
...@@ -68,8 +71,10 @@ public class flowShopView extends GenericCDIView { ...@@ -68,8 +71,10 @@ public class flowShopView extends GenericCDIView {
public void changeUser(SelectEvent event) { public void changeUser(SelectEvent event) {
if (infoView.getMultiSearchUser() != null) { if (infoView.getMultiSearchUser() != null) {
flowUserContainer.setUserId(infoView.getMultiSearchUser().getUser().getId());
super.navihandler.redirectNavigation("shop.jsf?userid=" + infoView.getMultiSearchUser().getUser().getId()); super.navihandler.redirectNavigation("shop.jsf?userid=" + infoView.getMultiSearchUser().getUser().getId());
infoView.setMultiSearchUser(null);
} }
} }
...@@ -89,6 +94,7 @@ public class flowShopView extends GenericCDIView { ...@@ -89,6 +94,7 @@ public class flowShopView extends GenericCDIView {
if (!user.equals(userView.getUser())) { if (!user.equals(userView.getUser())) {
logger.info("found user {}, redirecting", user.getNick()); logger.info("found user {}, redirecting", user.getNick());
userView.setUser(user); userView.setUser(user);
flowUserContainer.setUserId(user.getUser().getId());
super.navihandler.redirectNavigation("shop.jsf?userid=" + user.getUser().getId()); super.navihandler.redirectNavigation("shop.jsf?userid=" + user.getUser().getId());
} }
......
package fi.codecrew.moya.web.helper;
import java.util.HashMap;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import org.primefaces.event.ToggleEvent;
import org.primefaces.model.Visibility;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
@Named
@SessionScoped
public class FieldsetView extends GenericCDIView {
private static final Logger logger = LoggerFactory.getLogger(FieldsetView.class);
private static final long serialVersionUID = 5L;
private HashMap<String, Boolean> collapseStates = new HashMap<String, Boolean>();
public boolean isCollapsed(String id) {
if(collapseStates.containsKey(id) && collapseStates.get(id).booleanValue()) {
return true;
}
return false;
}
public void handleToggle(ToggleEvent event) {
logger.info("setting collapsed for id "+event.getComponent().getId());
logger.info("collapsed value is "+event.getVisibility());
collapseStates.put(event.getComponent().getId(), Boolean.valueOf(event.getVisibility() == Visibility.HIDDEN));
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!