Commit 56bce642 by Juho Juopperi

Merge branch 'master' of dev.insomnia.fi:/data/bortal

2 parents 92c3f6d2 aa9ff53e
......@@ -71,6 +71,7 @@ public class ActionLogBean implements ActionLogBeanLocal {
@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
public void addActionLogMessageResponse(ActionLogMessage alm, String message, ActionLogMessageState state) {
if (alm.getState() != state && state != null) {
alm = actionLogFacade.merge(alm);
alm.setState(state);
}
......
......@@ -15,6 +15,7 @@ import fi.insomnia.bortal.facade.ReaderFacade;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.Reader;
import fi.insomnia.bortal.model.ReaderEvent;
import fi.insomnia.bortal.model.User;
/**
* Session Bean implementation class ReaderBean
......@@ -179,4 +180,9 @@ public class ReaderBean implements ReaderBeanLocal {
}
return ret;
}
@Override
public User findTagFromAnyEvent(String value) {
return cardfacade.findLatestByRfidFromAny(value).getUser().getUser();
}
}
......@@ -425,6 +425,9 @@ public class UserBean implements UserBeanLocal {
@Override
public EventUser getEventUser(User user) {
if (user != null && user.getId() != null) {
user = userFacade.find(user.getId());
}
EventUser ret = eventUserFacade.find(user);
if (ret == null)
......
......@@ -30,7 +30,7 @@ public class CompoFacade extends IntegerPkGenericFacade<Compo> {
CriteriaQuery<Compo> cq = cb.createQuery(Compo.class);
Root<Compo> root = cq.from(Compo.class);
cq.where(cb.equal(root.get(Compo_.event), eventbean.getCurrentEvent()));
cq.orderBy(cb.desc(root.get(Compo_.startTime)));
List<Compo> ret = getEm().createQuery(cq).getResultList();
return ret;
}
......
......@@ -5,12 +5,13 @@ import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.PrintedCard_;
......@@ -51,7 +52,7 @@ public class PrintedCardFacade extends IntegerPkGenericFacade<PrintedCard> {
}
public List<PrintedCard> getCards(IUser user) {
public List<PrintedCard> getCards(EventUser user) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<PrintedCard> cq = cb.createQuery(PrintedCard.class);
Root<PrintedCard> root = cq.from(PrintedCard.class);
......@@ -61,4 +62,19 @@ public class PrintedCardFacade extends IntegerPkGenericFacade<PrintedCard> {
return getEm().createQuery(cq).getResultList();
}
public PrintedCard findLatestByRfidFromAny(String uid) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<PrintedCard> cq = cb.createQuery(PrintedCard.class);
Root<PrintedCard> root = cq.from(PrintedCard.class);
cq.where(cb.equal(root.get(PrintedCard_.rfidUid), uid));
cq.orderBy(cb.desc(root.get(PrintedCard_.printTime)));
TypedQuery<PrintedCard> q = getEm().createQuery(cq);
q.setMaxResults(1);
return getSingleNullableResult(q);
}
}
......@@ -7,6 +7,7 @@ import javax.ejb.Local;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.Reader;
import fi.insomnia.bortal.model.ReaderEvent;
import fi.insomnia.bortal.model.User;
@Local
public interface ReaderBeanLocal {
......@@ -25,4 +26,6 @@ public interface ReaderBeanLocal {
ReaderEvent getEvent(Integer eventid);
User findTagFromAnyEvent(String value);
}
......@@ -55,6 +55,13 @@ public interface UserBeanLocal {
List<Role> findUsersRoles(EventUser u);
/**
* NOTICE! If the user parameter is a persisted object the returned
* EventUser has a reloaded user, eg changes to the User object are lost!
*
* @param user
* @return
*/
EventUser getEventUser(User user);
}
......@@ -127,4 +127,5 @@ public class ReaderEvent extends GenericEntity {
ret.append(secs).append(" sec");
return ret.toString();
}
}
......@@ -12,6 +12,26 @@
<ui:define name="content">
<ui:fragment rendered="#{!empty readerView.neighborUser}">
<h1>Neighbor event user found:</h1>
<h:outputText value="#{readerView.neighborUser.user.wholeName}" />
<h:form>
<h:dataTable var="card" value="#{readerView.neighborUser.printedCards}">
<h:column>
<h:outputText value="#{card.template.name}" />
</h:column>
<h:column>
<h:outputText value="#{card.printCount}" />
</h:column>
<h:column>
<h:commandButton action="#{readerView.assocToNeighborCard()}" value="#{i18n['readerView.assocToNeighborCard']}" />
</h:column>
</h:dataTable>
<h:commandButton action="#{readerView.assocToNeighbor()}" value="#{i18n['readerView.assocToNeighbor']}" />
</h:form>
</ui:fragment>
<h:outputText rendered="#{empty readerView.event}" value="#{i18n['rfidevent.empty']}" />
<h:panelGrid columns="2" rendered="#{!empty readerView.event}">
<h:outputLabel value="#{i18n['rfidevent.reader']}:" />
......@@ -41,7 +61,7 @@
<f:facet name="header">
<h:outputText value="Id" />
</f:facet>
<h:outputText value="#{user.user.id}" />
<h:outputText value="#{user.user.user.id}" />
</h:column>
<h:column>
<f:facet name="header">
......@@ -77,7 +97,7 @@
<f:facet name="header">
<h:outputText value="#{i18n['readerview.cards']}" />
</f:facet>
<h:dataTable value="#{user.cards}" var="card">
<h:dataTable value="#{user.printedCards}" var="card">
<h:column>
<h:outputText value="#{card.template.name}" />
</h:column>
......@@ -88,6 +108,7 @@
<h:commandButton action="#{readerView.assocToCard()}" value="#{i18n['reader.assocToCard']}" />
</h:column>
</h:dataTable>
<h:commandButton action="#{readerView.createCardForUser()}" value="#{i18n['reader.createNewCard']}" />
</h:column>
</h:dataTable>
......
......@@ -23,31 +23,31 @@
<h:dataTable styleClass="bordertable" rowClasses="roweven,rowodd" id="compolisttable" value="#{votingCompoListView.compos}" var="compo">
<h:column>
<f:facet name="header">
<h:outputText value="Name" />
<h:outputText value="#{i18n['voting.allcompos.name']}" />
</f:facet>
<h:outputText value="#{compo.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Kuvaus" />
<h:outputText value="#{i18n['voting.allcompos.descri']}" />
</f:facet>
<h:outputText value="#{compo.description}" />
</h:column>
<h:column rendered="#{votingCompoListView.curEntries}">
<f:facet name="header">
<h:outputText value="current entries" />
<h:outputText value="#{i18n['voting.allcompos.curEntries']}" />
</f:facet>
<h:outputText value="#{compo.compoEntries.size()}" />
</h:column>
<h:column rendered="#{votingCompoListView.maxParts}">
<f:facet name="header">
<h:outputText value="Max parts" />
<h:outputText value="#{i18n['voting.allcompos.maxParts']}" />
</f:facet>
<h:outputText value="#{compo.maxParticipantCount}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Start time" />
<h:outputText value="#{i18n['voting.allcompos.startTime']}" />
</f:facet>
<h:outputText value="#{compo.startTime.time}" >
<f:convertDateTime type="both" pattern="dd.MM.yyyy HH:mm" />
......@@ -55,7 +55,7 @@
</h:column>
<h:column>
<f:facet name="header" >
<h:outputText value="End time" />
<h:outputText value="#{i18n['voting.allcompos.endTime']}" />
</f:facet>
<h:outputText value="#{compo.endTime.time}" >
<f:convertDateTime type="both" pattern="dd.MM.yyyy HH:mm" />
......@@ -63,7 +63,7 @@
</h:column>
<h:column>
<f:facet name="header" >
<h:outputText value="Vote start" />
<h:outputText value="#{i18n['voting.allcompos.voteStart']}" />
</f:facet>
<h:outputText value="#{compo.voteStart.time}" >
<f:convertDateTime type="both" pattern="dd.MM.yyyy HH:mm" />
......@@ -71,7 +71,7 @@
</h:column>
<h:column>
<f:facet name="header" >
<h:outputText value="Vote end" />
<h:outputText value="#{i18n['voting.allcompos.voteEnd']}" />
</f:facet>
<h:outputText value="#{compo.voteEnd.time}" >
<f:convertDateTime type="both" pattern="dd.MM.yyyy HH:mm" />
......@@ -79,7 +79,7 @@
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Submit start" />
<h:outputText value="#{i18n['voting.allcompos.submitStart']}" />
</f:facet>
<h:outputText value="#{compo.submitStart.time}" >
<f:convertDateTime type="both" pattern="dd.MM.yyyy HH:mm" />
......@@ -87,7 +87,7 @@
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Submit end" />
<h:outputText value="#{i18n['voting.allcompos.submitEnd']}" />
</f:facet>
<h:outputText value="#{compo.submitEnd.time}" >
<f:convertDateTime type="both" pattern="dd.MM.yyyy HH:mm" />
......@@ -95,11 +95,11 @@
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Submit entry" />
<h:outputText value="" />
</f:facet>
<h:link outcome="addentry">
<h:link outcome="addentry" rendered="#{compo.maxParticipantCount gt compo.compoEntries.size()}">
<f:param name="compoId" value="#{compo.id}" />
Submit entry
#{i18n['voting.allcompos.submitEntry']}
</h:link>
</h:column>
</h:dataTable>
......
......@@ -526,8 +526,19 @@ userview.userExists = Username already exists! please select another.
viewexpired.body = Please login again.
viewexpired.title = Login expired. Please login again.
voting.allcompos.description = List of all compos and NIIDEN information.
voting.allcompos.curEntries = # of entries
voting.allcompos.descri = Description
voting.allcompos.description = List of all compos and theirs information.
voting.allcompos.endTime = End time
voting.allcompos.header = All compos
voting.allcompos.maxParts = Max participants
voting.allcompos.name = Name
voting.allcompos.startTime = Start time
voting.allcompos.submitEnd = Submit end
voting.allcompos.submitEntry = Submit entry
voting.allcompos.submitStart = Submit start
voting.allcompos.voteEnd = Vote end
voting.allcompos.voteStart = Vote start
voting.create.compoEnd = End time
voting.create.compoStart = Start time
voting.create.createButton = Create
......
......@@ -516,8 +516,19 @@ userview.userExists = K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Ole
viewexpired.body = Ole hyv\u00E4 ja kirjaudu sis\u00E4\u00E4n uudelleen.
viewexpired.title = N\u00E4kym\u00E4 on vanhentunut
voting.allcompos.curEntries = Entryja
voting.allcompos.descri = Kuvaus
voting.allcompos.description = Compojen informaatiot.
voting.allcompos.endTime = Lopetusaika
voting.allcompos.header = Kaikki compot
voting.allcompos.maxParts = Max osallistujam\u00E4\u00E4r\u00E4
voting.allcompos.name = Nimi
voting.allcompos.startTime = Aloitusaika
voting.allcompos.submitEnd = Lis\u00E4ys kiinni
voting.allcompos.submitEntry = L\u00E4het\u00E4 entry
voting.allcompos.submitStart = Lis\u00E4ys auki
voting.allcompos.voteEnd = \u00C4\u00E4nestys kiinni
voting.allcompos.voteStart = \u00C4\u00E4nestys auki
voting.create.compoEnd = Lopetusaika
voting.create.compoStart = Aloitusaika
voting.create.createButton = Luo
......
......@@ -27,7 +27,7 @@ public class ReaderView extends GenericCDIView {
private String placecode;
private String usersearch;
private ListDataModel<User> userlist;
private ListDataModel<UserCardWrapper> userlist;
@Inject
private ReaderNameContainer namecontainer;
......@@ -40,9 +40,15 @@ public class ReaderView extends GenericCDIView {
@EJB
private UserBeanLocal userbean;
private UserCardWrapper neighborUser;
public void initUserassocView() {
if (super.requirePermissions(UserPermission.CREATE_NEW)) {
if (super.requirePermissions(UserPermission.CREATE_NEW) && event == null) {
event = readerbean.getEvent(eventid);
if (event.getPrintedCard() == null) {
User neigUser = readerbean.findTagFromAnyEvent(event.getValue());
setNeighborUser(new UserCardWrapper(neigUser, userbean));
}
super.beginConversation();
}
}
......@@ -52,7 +58,7 @@ public class ReaderView extends GenericCDIView {
if (usersearch == null || usersearch.length() < 2) {
super.addFaceMessage("user.tooShortSearch");
} else {
userlist = new ListDataModel<User>(userbean.getUsers(0, 0, null, usersearch).getResults());
userlist = UserCardWrapper.initWrapper(userbean.getUsers(0, 0, null, usersearch).getResults(), userbean);
}
return null;
......@@ -109,12 +115,20 @@ public class ReaderView extends GenericCDIView {
this.usersearch = usersearch;
}
public ListDataModel<User> getUserlist() {
public ListDataModel<UserCardWrapper> getUserlist() {
return userlist;
}
public void setUserlist(ListDataModel<User> userlist) {
public void setUserlist(ListDataModel<UserCardWrapper> userlist) {
this.userlist = userlist;
}
public UserCardWrapper getNeighborUser() {
return neighborUser;
}
public void setNeighborUser(UserCardWrapper neighborUser) {
this.neighborUser = neighborUser;
}
}
package fi.insomnia.bortal.web.cdiview.shop;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.ListDataModel;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.User;
public class UserCardWrapper implements Serializable {
private static final long serialVersionUID = -2755200540851855878L;
private final EventUser user;
private final ListDataModel<PrintedCard> printedCards;
public UserCardWrapper(User u, UserBeanLocal userbean) {
user = userbean.getEventUser(u);
printedCards = new ListDataModel<PrintedCard>(user.getPrintedCards());
}
public static ListDataModel<UserCardWrapper> initWrapper(List<User> users, UserBeanLocal userbean)
{
List<UserCardWrapper> ret = new ArrayList<UserCardWrapper>();
for (User u : users)
{
ret.add(new UserCardWrapper(u, userbean));
}
return new ListDataModel<UserCardWrapper>(ret);
}
public EventUser getUser() {
return user;
}
public ListDataModel<PrintedCard> getPrintedCards() {
return printedCards;
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!