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;
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)
......
......@@ -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>
......
......@@ -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!