Commit 37cc2361 by Tuukka Kivilahti

melkein korjattu, vielä vähän edessä

1 parent 1ddcd4e6
......@@ -58,8 +58,29 @@ public interface ReaderBeanLocal {
List<ReaderEvent> getLastReaderEvents();
/**
* check and brogress barcode that origins from browser
*
* @param code
* @return
*/
ReaderEvent checkCode(String code);
/**
* Check and brogress barcode from some external reader which is only named
* @param readerIdent
* @param code
* @return
*/
ReaderEvent checkCode(String readerIdent, String code);
/**
* Check and progress barcode from some specific reader
*
* @param reader
* @param code
* @return
*/
ReaderEvent checkCode(Reader reader, String code);
List<ReaderEvent> getReaderEvents(Integer readerId, Integer count);
......
......@@ -327,6 +327,15 @@ public class BarcodeBean implements BarcodeBeanLocal {
return user;
}
// try if it is our Eticket -code
EventUser user = getUserFromTextCode(barcode);
logger.info("Found maybe some nice user {}", user);
if(user != null)
return user;
} catch (NumberFormatException x) {
}
......
......@@ -80,6 +80,12 @@ public class ReaderBean implements ReaderBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(ReaderBean.class);
@Override
public ReaderEvent checkCode(String code) {
return checkCode(ReaderType.BARCODE.toString()+":handheld_reader_via_browser", code);
}
@Override
public ReaderEvent checkCode(String readerIdent, String code) {
Reader reader = readerfacade.findOrCreateByIdent(readerIdent);
......
......@@ -162,15 +162,15 @@ public class GroupMembershipFacade extends IntegerPkGenericFacade<GroupMembershi
}
public Long findPlaceProductCount(Product product) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
return null;
/* CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<GroupMembership> root = cq.from(GroupMembership.class);
cq.select(cb.count(root));
cq.where(cb.equal(root.get(GroupMembership_.placeProduct), product));
return super.getSingleNullableResult(getEm().createQuery(cq));
*/
}
......
......@@ -28,6 +28,7 @@ import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.codecrew.moya.model.ReaderType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -77,8 +78,19 @@ public class ReaderFacade extends IntegerPkGenericFacade<Reader> {
private static synchronized Reader createIdent(ReaderFacade rf, LanEvent ev, String ident) {
Reader ret = rf.findByIdent(ev, ident);
if (ret == null) {
ret = new Reader(ev, ident);
ret.setDescription("Automagically created");
// if there is doubledot (and text before it), check if it is reader type
if(ident.indexOf(':') > 0) {
String typeString = ident.substring(0, ident.indexOf(':'));
try {
ret.setType(ReaderType.valueOf(typeString));
} catch (IllegalArgumentException x) {}
}
rf.create(ret);
logger.info("Created new reader for ident {} reader {}", ident, ev);
}
......
......@@ -68,7 +68,7 @@ public class Reader extends GenericEntity {
@Column(nullable = false, name = "type")
@Enumerated(EnumType.STRING)
private ReaderType type = ReaderType.RFID;
private ReaderType type = ReaderType.BARCODE;
public static final String EVENT_ID_COLUMN = "event_id";
@ManyToOne()
......
/*
* 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.utilities.jsf;
import fi.codecrew.moya.utilities.jpa.ModelInterface;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
/**
* Use this converter if you want to do some database find -magic via string
* @param <T>
*/
public abstract class GenericEntityFinderConverter<T extends ModelInterface> implements Converter {
protected abstract T find(Integer id);
protected abstract T find(String searchString);
public GenericEntityFinderConverter() {
super();
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
T ret = null;
Integer id = null;
if (value != null) {
try {
id = Integer.parseInt(value);
if (id != null && id > 0) {
ret = find(id);
}
} catch (NumberFormatException x) {
// it's not number, it's normal search stuff
ret = find(value);
}
}
return ret;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
String ret = "0";
if (value != null && value instanceof ModelInterface) {
ModelInterface entity = (ModelInterface) value;
if (entity.getId() != null) {
ret = entity.getId().toString();
}
}
return ret;
}
}
......@@ -17,6 +17,8 @@
<reader:backendReader selectvalue="#{i18n['barcodeReader.readBarcode']}" selectaction="#{cardlessIncomingView.polledRead}" />
<br /><br />
<h:form>
<p:hotkey bind="enter" actionListener="#{cardlessIncomingView.changeUser}" />
TODO: kato että formi ei lähe entteristä, vaan ajetaan toi pirun listeneri. Mut vaan tässä formissa.
<p:autoComplete styleClass="usermultisearch" id="acsb" value="#{infoView.multiSearchUser}" completeMethod="#{infoView.matchMulti}" converter="#{eventUserConverter}" var="usrx" itemLabel="#{usrx.shortUserDescriptor}" itemValue="#{usrx}">
<p:ajax event="itemSelect" listener="#{cardlessIncomingView.changeUser}" />
</p:autoComplete>
......
......@@ -22,20 +22,36 @@ import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import fi.codecrew.moya.beans.ReaderBeanLocal;
import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.ReaderEvent;
import fi.codecrew.moya.utilities.jsf.GenericEntityFinderConverter;
import fi.codecrew.moya.utilities.jsf.GenericIntegerEntityConverter;
@Named
@RequestScoped
public class EventUserConverter extends GenericIntegerEntityConverter<EventUser> {
public class EventUserConverter extends GenericEntityFinderConverter<EventUser> {
@EJB
private UserBeanLocal userbean;
@EJB
private ReaderBeanLocal readerBean;
@Override
protected EventUser find(Integer id) {
return userbean.findByEventUserId(id);
}
@Override
protected EventUser find(String searchString) {
ReaderEvent event = readerBean.checkCode(searchString);
if(event == null)
return null;
return event.getUser();
}
}
......@@ -483,3 +483,4 @@ incomingFlow.count=M\u00E4\u00E4r\u00E4
user.birthday=
user.confirmUserToEventAdding=
user.invalidLoginCredentials=
barcodeReader.readBarcode=Lue viivakoodi
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!