IncomingView.java 7.14 KB
package fi.codecrew.moya.web.flow;

import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import javax.inject.Named;

import org.primefaces.event.SelectEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.codecrew.moya.beans.BarcodeBeanLocal;
import fi.codecrew.moya.beans.CardTemplateBeanLocal;
import fi.codecrew.moya.beans.PermissionBeanLocal;
import fi.codecrew.moya.beans.PlaceBeanLocal;
import fi.codecrew.moya.beans.PlaceGroupBeanLocal;
import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.enums.CardState;
import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.model.CardCode;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.GroupMembership;
import fi.codecrew.moya.model.PrintedCard;
import fi.codecrew.moya.model.ReaderEvent;
import fi.codecrew.moya.utilities.I18n;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
import fi.codecrew.moya.web.cdiview.reader.ReaderNameContainer;
import fi.codecrew.moya.web.cdiview.reader.ReaderView;
import fi.codecrew.moya.web.cdiview.user.UserView;

@Named
@ConversationScoped
public class IncomingView extends GenericCDIView {

	private static final long serialVersionUID = 802344850073689859L;

	private static final Logger logger = LoggerFactory.getLogger(IncomingView.class);
	/*
	 * @Inject
	 * 
	 * @SelectedUser private transient EventUser user;
	 */
	@Inject
	private UserView userview;

	@Inject
	private ReaderView readerView;

	@Inject
	private InfoView infoView;

	@Inject
	private ReaderNameContainer namecontainer;

	@EJB
	private BarcodeBeanLocal barcodeBean;

	@EJB
	private CardTemplateBeanLocal cardBean;

	@EJB
	private PermissionBeanLocal permBean;

	@EJB
	private PlaceBeanLocal placeBean;

	@EJB
	private UserBeanLocal userbean;

	@EJB
	private PlaceGroupBeanLocal placegroupBean;

	@EJB
	private CardTemplateBeanLocal cardTemplateBean;

	// private String searchBarcode = "";

	private ListDataModel<GroupMembership> memberlist = null;
	private ListDataModel<CardCode> cardCodes;

	public void initView() {
		super.beginConversation();
	}

	private ReaderEvent eventToAttach = null;
	private boolean showAttachDialog = false;

	private boolean autoGivePlaces = true;

	/*
	 * public String getSearchBarcode() { return searchBarcode; }
	 * 
	 * public void setSearchBarcode(String searchBarcode) { this.searchBarcode =
	 * searchBarcode; }
	 * 
	 * public List<String> matchBarcode(String matchWhat) {
	 * List<GroupMembership> gms =
	 * placeBean.matchGroupMembershipsByInviteToken(matchWhat);
	 * ArrayList<String> arl = new ArrayList<>(); for (GroupMembership gm : gms)
	 * { arl.add(gm.getInviteToken()); }
	 * 
	 * return arl; }
	 */
	public void changeUser(SelectEvent event) {

		if (infoView.getMultiSearchUser() != null) {
			super.navihandler.redirectNavigation("incoming.jsf?userid="
					+ infoView.getMultiSearchUser().getUser().getId());
			infoView.setMultiSearchUser(null);
		}
	}

	private boolean initialized = false;

	public void initPrintCardView() {
		memberlist = null;
		if (!permbean.hasPermission(UserPermission.MODIFY)
				|| namecontainer.getReaderId() == null
				|| namecontainer.getReaderId() <= 0) {
			super.navihandler.redirectNavigation("index.jsf");
		}

		if (!initialized) {
			logger.debug("INITIALIZING!!!!");
			// initializePoller();
			initialized = true;
			super.beginConversation();
		}
	}

	public Integer getReaderId() {
		return namecontainer.getReaderId();
	}

	public String saveUser() {
		logger.info("Saving user in incomingView");
		userview.saveUser();
		return null;
	}

	public void polledRead() {

		ReaderEvent event = readerView.getReaderEvent();

		if (event == null)
			return;

		FacesContext context = FacesContext.getCurrentInstance();

		logger.debug(":got.code:");

		EventUser user = event.getUser();
		if (user != null) {
			if (!user.equals(userview.getUser())) {
				logger.info("found user {}, redirecting", user.getNick());
				userview.setUser(user);
				// userview.prepareCardDownload();

				// PURKKAAA, sori tästä, koitan refaktoroida kauniiksi ku
				// kerkiän -TKwtf
				super.navihandler.redirectNavigation("incoming.jsf?userid=" + user.getUser().getId());
			} else {
				context.addMessage(null, new FacesMessage(I18n.get("incomingflow.alreadyShowingUser.title"), I18n.get("incomingflow.alreadyShowingUser.message")));
			}

		} else {

			// still there, it must be "clean" barcode
			if (userview.getSelectedUser() != null) {
				eventToAttach = event;
				showAttachDialog = true;
				context.addMessage(null, new FacesMessage(I18n.get("incomingflow.invalidbarcode.title"), I18n.get("incomingflow.invalidbarcode.message")));
			}
		}

	}

	public void attachCodeToCard() {
		if (eventToAttach == null) {
			return;
		}

		
		cardBean.giveCard(userview.getSelectedUser(), autoGivePlaces);

		userview.attachCodeToCard(eventToAttach);
		eventToAttach = null;
		showAttachDialog = false;

		userview.setUser(null); // refresh user
		userview.setPrintedCard(null); // refresh card

		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(I18n.get("incomingflow.codeattached.title"), I18n.get("incomingflow.codeattached.message")));
		
	}
	
	
	
	

	public boolean isShowAttachDialog() {
		return showAttachDialog;
	}

	public void hideAttachDialog() {
		showAttachDialog = false;
	}

	public String selectUser() {

		ReaderEvent event = readerView.getReaderEvent();

		if (event == null)
			return null;

		EventUser user = event.getUser();
		memberlist = null;

		if (user == null) {
			logger.debug("got no user from barcode");
			return null;
		}

		logger.debug("got user from barcode");

		userview.setUser(user);
		userview.prepareCardDownload();
		return "incoming";
	}

	public CardState getPrintedStatus() {
		PrintedCard card = cardBean.checkPrintedCard(userview.getSelectedUser());
		CardState ret = null;
		if (card != null) {
			ret = card.getCardState();
		}
		return ret;
	}

	public String printCard() {
		PrintedCard card = cardBean.checkPrintedCard(userview.getUser());
		card.setCardState(CardState.VALIDATED);
		cardBean.saveCard(card);
		return null;
	}

	public ListDataModel<GroupMembership> getGroupMemberships() {
		memberlist = new ListDataModel<GroupMembership>(placegroupBean.getMembershipsAndCreations(userview.getSelectedUser()));
		return memberlist;
	}

	public ListDataModel<CardCode> getCardCodes() {
		cardCodes = new ListDataModel<CardCode>(userview.getPrintedCard().getCardCodes());

		return cardCodes;
	}

	public void deleteSelectedCode() {
		if (cardCodes != null && cardCodes.isRowAvailable()) {
			CardCode code = cardCodes.getRowData();
			cardTemplateBean.removeCardCode(code);
			
			// flush that fucker
			userview.setPrintedCard(null);
		}
	}

	public String givePlace() {
		GroupMembership row = memberlist.getRowData();
		if (row != null) {
			placegroupBean.markGrouMembershipEntered(row);
			memberlist = null;
		}
		return null;
	}

	public String ungivePlace() {
		GroupMembership row = memberlist.getRowData();
		if (row != null) {
			placegroupBean.markGrouMembershipNotEntered(row);
			memberlist = null;
		}
		return null;
	}

}