Commit 6669484c by Tuomas Riihimäki

Fix user shopping

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