Commit 6669484c by Tuomas Riihimäki

Fix user shopping

1 parent 04b71352
......@@ -19,7 +19,6 @@ import fi.codecrew.moya.facade.ReaderEventFacade;
import fi.codecrew.moya.facade.ReaderFacade;
import fi.codecrew.moya.model.AccountEvent;
import fi.codecrew.moya.model.CardCode;
import fi.codecrew.moya.model.CardTemplate;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.Place;
import fi.codecrew.moya.model.PrintedCard;
......@@ -38,12 +37,10 @@ public class ReaderBean implements ReaderBeanLocal {
@EJB
private ReaderFacade readerfacade;
@EJB
private PrintedCardFacade cardfacade;
@EJB
private CardTemplateBeanLocal cardtemplatebean;
@EJB
......@@ -56,12 +53,10 @@ public class ReaderBean implements ReaderBeanLocal {
private CardTemplateBean cardTemplateBean;
@EJB
private ProductPBean productPBean;
@EJB
private CardCodeFacade cardCodeFacade;
@EJB
private BarcodeBeanLocal barcodeBean;
......@@ -72,18 +67,21 @@ public class ReaderBean implements ReaderBeanLocal {
Reader reader = readerfacade.findOrCreateByIdent(readerIdent);
return checkCode(reader, code);
}
@Override
/**
* check reader code, and add it to the database
*/
public ReaderEvent checkCode(Reader reader, String code) {
if (reader == null || code == null || code.isEmpty()) {
return null;
}
logger.info("got code from reader {}", code);
code = code.replace("\"\b", "");
if (reader.getType() == ReaderType.RFID) {
if (ReaderType.RFID.equals(reader.getType())) {
if (Pattern.matches("^.*000000$", code))
{
......@@ -96,65 +94,63 @@ public class ReaderBean implements ReaderBeanLocal {
}
code = sb.toString();
}
ReaderEvent event = new ReaderEvent(new Date(), reader, code);
// first, check if dublicate, there is 30s timeout for dublicates, afther that it's ok to create dublicate
// that's bcause accident dublicates are bad, but otherwise it's probably bcause user want's to read it again
// first, check if dublicate, there is 30s timeout for dublicates,
// afther that it's ok to create dublicate
// that's bcause accident dublicates are bad, but otherwise it's
// probably bcause user want's to read it again
List<ReaderEvent> lastevents = readerEventFacade.findLastEvents(reader, 1);
if (!lastevents.isEmpty() && !reader.isAutoproduct())
{
ReaderEvent lastevent = lastevents.get(0);
if(lastevent.getValue() == event.getValue() && (lastevent.getUpdatetime().getTime() + 60000l) > event.getTime().getTime()) {
if (lastevent.getValue() == event.getValue() && (lastevent.getUpdatetime().getTime() + 60000l) > event.getTime().getTime()) {
lastevent = readerEventFacade.reload(lastevent);
lastevent = readerEventFacade.merge(lastevent);
return lastevent; // todo: update lastevent bfore return
}
}
// find stuff with barcode and set type
// IF we find 2 stuff with same barcode, it's just bad luck and things may be little random.
// IF we find 2 stuff with same barcode, it's just bad luck and things
// may be little random.
EventUser user = barcodeBean.getUser(code);
if(user != null) {
if (user != null) {
event.setType(ReaderEventType.USER);
event.setUser(user);
}
PrintedCard card = barcodeBean.getPrintedCard(code);
if(card != null) {
if (card != null) {
event.setType(ReaderEventType.CARD);
event.setPrintedCard(card);
if(card.getUser() != null) {
if (card.getUser() != null) {
event.setUser(card.getUser());
}
}
Product product = barcodeBean.getProduct(code);
if(product != null) {
if (product != null) {
event.setType(ReaderEventType.PRODUCT);
event.setProduct(product);
}
Place place = barcodeBean.getPlaceFromBarcode(code);
if(place != null) {
if (place != null) {
event.setType(ReaderEventType.PLACE);
event.setPlace(place);
}
event.setUpdatetime(new Date());
// reader is in autoproduct-mode, create dat product
......@@ -166,19 +162,18 @@ public class ReaderBean implements ReaderBeanLocal {
event.setNotes("Created automatic account event from reader. " + createAc);
}
event = readerEventFacade.create(event);
return event;
}
@Override
public ReaderEvent assocCodeToCard(ReaderEvent readerEvent, PrintedCard card) {
CardCode code = new CardCode(card, readerEvent.getReader().getType(), readerEvent.getValue());
code = cardCodeFacade.create(code);
card = cardfacade.reload(card);
......@@ -197,7 +192,7 @@ public class ReaderBean implements ReaderBeanLocal {
@Override
public List<ReaderEvent> getReaderEvents(Integer readerId, Integer count) {
logger.info("Getting events for reader {}", readerId);
Reader reader = readerfacade.find(readerId);
return readerEventFacade.findLastEvents(reader, count);
......@@ -236,34 +231,25 @@ public class ReaderBean implements ReaderBeanLocal {
return ret;
}
// ok, let's comment this out, so I can see where this is used
/*
@Override
public ReaderEvent createCard(ReaderEvent event, EventUser user) {
ReaderEvent ret = null;
logger.info("Trying to create card for event {} with printed card {}", event, event.getPrintedCard());
if (event.getPrintedCard() == null)
{
CardTemplate ct = cardTemplateBean.getUsersCardtype(user);
logger.info("Card template {}", ct);
if (ct == null)
{
return null;
}
PrintedCard card = new PrintedCard(user, ct, null, true);
card.setRfidUid(event.getValue());
cardfacade.create(card);
ret = new ReaderEvent(Calendar.getInstance(), card, event.getReader());
card.getReaderEvents().add(event);
ret.setNotes("User associated to a card");
}
return ret;
}
*/
* @Override public ReaderEvent createCard(ReaderEvent event, EventUser
* user) { ReaderEvent ret = null;
* logger.info("Trying to create card for event {} with printed card {}",
* event, event.getPrintedCard());
*
* if (event.getPrintedCard() == null) { CardTemplate ct =
* cardTemplateBean.getUsersCardtype(user); logger.info("Card template {}",
* ct); if (ct == null) { return null; } PrintedCard card = new
* PrintedCard(user, ct, null, true); card.setRfidUid(event.getValue());
* cardfacade.create(card);
*
* ret = new ReaderEvent(Calendar.getInstance(), card, event.getReader());
* card.getReaderEvents().add(event);
* ret.setNotes("User associated to a card");
*
* } return ret; }
*/
@Override
public Reader getReader(Integer readerid) {
......
......@@ -11,10 +11,10 @@ import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.codecrew.moya.model.Product_;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.model.Product;
import fi.codecrew.moya.model.ProductFlag;
import fi.codecrew.moya.model.Product_;
@Stateless
@LocalBean
......@@ -65,18 +65,19 @@ public class ProductFacade extends IntegerPkGenericFacade<Product> {
return getEm().createQuery(cq).getResultList();
}
public Product findProductByBarcode(String barcode) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Product> cq = cb.createQuery(Product.class);
Root<Product> root = cq.from(Product.class);
cq.where(
cq.where(
cb.equal(root.get(Product_.event), eventbean.getCurrentEvent()),
cb.equal(root.get(Product_.barcode), barcode)
);
return super.getSingleNullableResult(getEm().createQuery(cq));
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!