Commit 8ff3746a by Tuomas Riihimäki

Käyttäjän tagiin assosioimista...

1 parent 1458594e
...@@ -15,6 +15,7 @@ import fi.insomnia.bortal.facade.ReaderFacade; ...@@ -15,6 +15,7 @@ import fi.insomnia.bortal.facade.ReaderFacade;
import fi.insomnia.bortal.model.PrintedCard; import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.Reader; import fi.insomnia.bortal.model.Reader;
import fi.insomnia.bortal.model.ReaderEvent; import fi.insomnia.bortal.model.ReaderEvent;
import fi.insomnia.bortal.model.User;
/** /**
* Session Bean implementation class ReaderBean * Session Bean implementation class ReaderBean
...@@ -179,4 +180,9 @@ public class ReaderBean implements ReaderBeanLocal { ...@@ -179,4 +180,9 @@ public class ReaderBean implements ReaderBeanLocal {
} }
return ret; return ret;
} }
@Override
public User findTagFromAnyEvent(String value) {
return cardfacade.findLatestByRfidFromAny(value).getUser().getUser();
}
} }
...@@ -425,6 +425,9 @@ public class UserBean implements UserBeanLocal { ...@@ -425,6 +425,9 @@ public class UserBean implements UserBeanLocal {
@Override @Override
public EventUser getEventUser(User user) { public EventUser getEventUser(User user) {
if (user != null && user.getId() != null) {
user = userFacade.find(user.getId());
}
EventUser ret = eventUserFacade.find(user); EventUser ret = eventUserFacade.find(user);
if (ret == null) if (ret == null)
......
...@@ -5,12 +5,13 @@ import java.util.List; ...@@ -5,12 +5,13 @@ import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBeanLocal; 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.LanEvent;
import fi.insomnia.bortal.model.PrintedCard; import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.PrintedCard_; import fi.insomnia.bortal.model.PrintedCard_;
...@@ -51,7 +52,7 @@ public class PrintedCardFacade extends IntegerPkGenericFacade<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(); CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<PrintedCard> cq = cb.createQuery(PrintedCard.class); CriteriaQuery<PrintedCard> cq = cb.createQuery(PrintedCard.class);
Root<PrintedCard> root = cq.from(PrintedCard.class); Root<PrintedCard> root = cq.from(PrintedCard.class);
...@@ -61,4 +62,19 @@ public class PrintedCardFacade extends IntegerPkGenericFacade<PrintedCard> { ...@@ -61,4 +62,19 @@ public class PrintedCardFacade extends IntegerPkGenericFacade<PrintedCard> {
return getEm().createQuery(cq).getResultList(); 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; ...@@ -7,6 +7,7 @@ import javax.ejb.Local;
import fi.insomnia.bortal.model.PrintedCard; import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.Reader; import fi.insomnia.bortal.model.Reader;
import fi.insomnia.bortal.model.ReaderEvent; import fi.insomnia.bortal.model.ReaderEvent;
import fi.insomnia.bortal.model.User;
@Local @Local
public interface ReaderBeanLocal { public interface ReaderBeanLocal {
...@@ -25,4 +26,6 @@ public interface ReaderBeanLocal { ...@@ -25,4 +26,6 @@ public interface ReaderBeanLocal {
ReaderEvent getEvent(Integer eventid); ReaderEvent getEvent(Integer eventid);
User findTagFromAnyEvent(String value);
} }
...@@ -55,6 +55,13 @@ public interface UserBeanLocal { ...@@ -55,6 +55,13 @@ public interface UserBeanLocal {
List<Role> findUsersRoles(EventUser u); 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); EventUser getEventUser(User user);
} }
...@@ -127,4 +127,5 @@ public class ReaderEvent extends GenericEntity { ...@@ -127,4 +127,5 @@ public class ReaderEvent extends GenericEntity {
ret.append(secs).append(" sec"); ret.append(secs).append(" sec");
return ret.toString(); return ret.toString();
} }
} }
...@@ -12,6 +12,26 @@ ...@@ -12,6 +12,26 @@
<ui:define name="content"> <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:outputText rendered="#{empty readerView.event}" value="#{i18n['rfidevent.empty']}" />
<h:panelGrid columns="2" rendered="#{!empty readerView.event}"> <h:panelGrid columns="2" rendered="#{!empty readerView.event}">
<h:outputLabel value="#{i18n['rfidevent.reader']}:" /> <h:outputLabel value="#{i18n['rfidevent.reader']}:" />
...@@ -41,7 +61,7 @@ ...@@ -41,7 +61,7 @@
<f:facet name="header"> <f:facet name="header">
<h:outputText value="Id" /> <h:outputText value="Id" />
</f:facet> </f:facet>
<h:outputText value="#{user.user.id}" /> <h:outputText value="#{user.user.user.id}" />
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
...@@ -77,7 +97,7 @@ ...@@ -77,7 +97,7 @@
<f:facet name="header"> <f:facet name="header">
<h:outputText value="#{i18n['readerview.cards']}" /> <h:outputText value="#{i18n['readerview.cards']}" />
</f:facet> </f:facet>
<h:dataTable value="#{user.cards}" var="card"> <h:dataTable value="#{user.printedCards}" var="card">
<h:column> <h:column>
<h:outputText value="#{card.template.name}" /> <h:outputText value="#{card.template.name}" />
</h:column> </h:column>
...@@ -88,6 +108,7 @@ ...@@ -88,6 +108,7 @@
<h:commandButton action="#{readerView.assocToCard()}" value="#{i18n['reader.assocToCard']}" /> <h:commandButton action="#{readerView.assocToCard()}" value="#{i18n['reader.assocToCard']}" />
</h:column> </h:column>
</h:dataTable> </h:dataTable>
<h:commandButton action="#{readerView.createCardForUser()}" value="#{i18n['reader.createNewCard']}" />
</h:column> </h:column>
</h:dataTable> </h:dataTable>
......
...@@ -27,7 +27,7 @@ public class ReaderView extends GenericCDIView { ...@@ -27,7 +27,7 @@ public class ReaderView extends GenericCDIView {
private String placecode; private String placecode;
private String usersearch; private String usersearch;
private ListDataModel<User> userlist; private ListDataModel<UserCardWrapper> userlist;
@Inject @Inject
private ReaderNameContainer namecontainer; private ReaderNameContainer namecontainer;
...@@ -40,9 +40,15 @@ public class ReaderView extends GenericCDIView { ...@@ -40,9 +40,15 @@ public class ReaderView extends GenericCDIView {
@EJB @EJB
private UserBeanLocal userbean; private UserBeanLocal userbean;
private UserCardWrapper neighborUser;
public void initUserassocView() { public void initUserassocView() {
if (super.requirePermissions(UserPermission.CREATE_NEW)) { if (super.requirePermissions(UserPermission.CREATE_NEW) && event == null) {
event = readerbean.getEvent(eventid); event = readerbean.getEvent(eventid);
if (event.getPrintedCard() == null) {
User neigUser = readerbean.findTagFromAnyEvent(event.getValue());
setNeighborUser(new UserCardWrapper(neigUser, userbean));
}
super.beginConversation(); super.beginConversation();
} }
} }
...@@ -52,7 +58,7 @@ public class ReaderView extends GenericCDIView { ...@@ -52,7 +58,7 @@ public class ReaderView extends GenericCDIView {
if (usersearch == null || usersearch.length() < 2) { if (usersearch == null || usersearch.length() < 2) {
super.addFaceMessage("user.tooShortSearch"); super.addFaceMessage("user.tooShortSearch");
} else { } 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; return null;
...@@ -109,12 +115,20 @@ public class ReaderView extends GenericCDIView { ...@@ -109,12 +115,20 @@ public class ReaderView extends GenericCDIView {
this.usersearch = usersearch; this.usersearch = usersearch;
} }
public ListDataModel<User> getUserlist() { public ListDataModel<UserCardWrapper> getUserlist() {
return userlist; return userlist;
} }
public void setUserlist(ListDataModel<User> userlist) { public void setUserlist(ListDataModel<UserCardWrapper> userlist) {
this.userlist = 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!