Commit f54af4f9 by Tuomas Riihimäki

Complete viplist

1 parent ba482559
package fi.codecrew.moya.beans;
import java.math.BigDecimal;
import java.util.List;
import javax.ejb.Local;
import fi.codecrew.moya.model.Vip;
import fi.codecrew.moya.model.VipProduct;
import fi.codecrew.moya.model.VipProductDelivery;
import fi.codecrew.moya.utilities.SearchQuery;
import fi.codecrew.moya.utilities.SearchResult;
......@@ -19,4 +22,14 @@ public interface VipBeanLocal {
Vip find(Integer id);
Vip createProduct(VipProduct l);
Vip save(Vip vip);
Vip saveProduct(VipProduct rowData);
Vip deleteProduct(VipProduct l);
VipProductDelivery createDelivery(VipProduct prod, BigDecimal quantity, String notes);
}
......@@ -43,6 +43,7 @@ import fi.codecrew.moya.enums.apps.SpecialPermission;
import fi.codecrew.moya.enums.apps.TerminalPermission;
import fi.codecrew.moya.enums.apps.TournamentPermission;
import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.enums.apps.VipPermission;
import fi.codecrew.moya.facade.MenuNavigationFacade;
import fi.codecrew.moya.facade.MenuitemFacade;
import fi.codecrew.moya.model.LanEvent;
......@@ -125,7 +126,6 @@ public class MenuBean implements MenuBeanLocal {
usermenu.addPage(menuitemfacade.findOrCreate("/auth/passwordChanged"), null).setVisible(false);
usermenu.addPage(menuitemfacade.findOrCreate("/auth/notauthorized"), null).setVisible(false);
MenuNavigation userEvent = usermenu.addPage(null, null);
userEvent.setKey("topnavi.userevent");
userEvent.addPage(menuitemfacade.findOrCreate("/poll/index"), PollPermission.ANSWER);
......@@ -142,7 +142,8 @@ public class MenuBean implements MenuBeanLocal {
userkauppa.setKey("topnavi.usershop");
userkauppa.addPage(menuitemfacade.findOrCreate("/shop/createBill"), BillPermission.CREATE_BILL);
userkauppa.addPage(menuitemfacade.findOrCreate("/neomap/reserve"), MapPermission.BUY_PLACES);
userkauppa.addPage(menuitemfacade.findOrCreate("/neomap/notenoughslots"), UserPermission.ANYUSER).setVisible(false);;
userkauppa.addPage(menuitemfacade.findOrCreate("/neomap/notenoughslots"), UserPermission.ANYUSER).setVisible(false);
;
userkauppa.addPage(menuitemfacade.findOrCreate("/foodwave/list"), ShopPermission.SHOP_FOODWAVE);
userkauppa.addPage(menuitemfacade.findOrCreate("/foodwave/listProducts"), ShopPermission.SHOP_FOODWAVE).setVisible(false);
userkauppa.addPage(menuitemfacade.findOrCreate("/foodwave/ThanksForOrderingFromCounter"), ShopPermission.SHOP_FOODWAVE).setVisible(false);
......@@ -242,10 +243,19 @@ public class MenuBean implements MenuBeanLocal {
adminEventCards.addPage(menuitemfacade.findOrCreate("/shop/shopToUser"), null).setVisible(false);
adminEventCards.addPage(menuitemfacade.findOrCreate("/shop/assocToUser"), null).setVisible(false);
MenuNavigation vips = adminuser.addPage(null, null);
vips.setKey("subnavi.vips");
vips.addPage(menuitemfacade.findOrCreate("/vip/viplist"), VipPermission.VIEW);
vips.addPage(menuitemfacade.findOrCreate("/vip/create"), VipPermission.VIEW).setVisible(false);
vips.addPage(menuitemfacade.findOrCreate("/vip/edit"), VipPermission.VIEW).setVisible(false);
MenuNavigation adminAssociation = adminmenu.addPage(null, null);
adminAssociation.setKey("topnavi.adminassoc");
adminAssociation.addPage(menuitemfacade.findOrCreate("/networkassociation/index"), NetworkAssociationPermission.CAN_ADMINISTER_ASSOCIATIONS);
// shop
MenuNavigation adminshop = adminmenu.addPage(null, null);
adminshop.setKey("topnavi.adminshop");
......@@ -320,8 +330,6 @@ public class MenuBean implements MenuBeanLocal {
adminevent.addPage(menuitemfacade.findOrCreate("/reports/basicStatistics"), EventPermission.VIEW_STATISTICS);
MenuNavigation tournamentsadm = adminmenu.addPage(null, null);
tournamentsadm.setKey("tournaments.menutitle");
tournamentsadm.addPage(menuitemfacade.findOrCreate("/tournaments/admin/index"), TournamentPermission.MANAGE_ALL);
......@@ -332,8 +340,6 @@ public class MenuBean implements MenuBeanLocal {
tournamentsadm.addPage(menuitemfacade.findOrCreate("/tournaments/admin/delete"), TournamentPermission.MANAGE_ALL).setVisible(false);
tournamentsadm.addPage(menuitemfacade.findOrCreate("/tournaments/admin/editrules"), TournamentPermission.MANAGE_ALL).setVisible(false);
MenuNavigation adminlectures = adminmenu.addPage(null, null);
adminlectures.setKey("topnavi.adminlectures");
adminlectures.addPage(menuitemfacade.findOrCreate("/lectureadmin/manageLectureGroups"), LecturePermission.MANAGE);
......@@ -341,7 +347,6 @@ public class MenuBean implements MenuBeanLocal {
adminlectures.addPage(menuitemfacade.findOrCreate("/lectureadmin/manageLectures"), LecturePermission.MANAGE).setVisible(false);
adminlectures.addPage(menuitemfacade.findOrCreate("/lectureadmin/manageParticipants"), LecturePermission.MANAGE).setVisible(false);
MenuNavigation infoviews = adminmenu.addPage(null, null);
infoviews.setKey("topnavi.infoviews");
infoviews.addPage(menuitemfacade.findOrCreate("/admin/adduser/index"), TerminalPermission.INFO);
......
......@@ -2,9 +2,14 @@ package fi.codecrew.moya.beans;
import fi.codecrew.moya.enums.apps.VipPermission;
import fi.codecrew.moya.facade.VipFacade;
import fi.codecrew.moya.facade.VipProductDeliveryFacade;
import fi.codecrew.moya.facade.VipProductFacade;
import fi.codecrew.moya.model.Vip;
import fi.codecrew.moya.model.VipProduct;
import fi.codecrew.moya.model.VipProductDelivery;
import fi.codecrew.moya.utilities.SearchQuery;
import fi.codecrew.moya.utilities.SearchResult;
import fi.codecrew.moya.utilities.jpa.GenericFacade;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -15,6 +20,7 @@ import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
......@@ -39,6 +45,10 @@ public class VipBean implements VipBeanLocal {
@EJB
private EventBeanLocal eventbean;
@EJB
private VipProductFacade vipProductFacade;
@EJB
private VipProductDeliveryFacade vpdFacade;
@Override
@RolesAllowed({ VipPermission.S_VIEW })
......@@ -62,4 +72,66 @@ public class VipBean implements VipBeanLocal {
public Vip find(Integer id) {
return vipFacade.find(id);
}
// @Override
// public SearchResult<Vip> search(SearchQuery sq) {
// // TODO Auto-generated method stub
// return null;
// }
@Override
public Vip createProduct(VipProduct l) {
Vip vip = vipFacade.reload(l.getVip());
l.setVip(vip);
if (!vip.getProducts().contains(l))
vip.getProducts().add(0, l);
vipProductFacade.create(l);
return vip;
}
@Override
public SearchResult<Vip> search(SearchQuery sq) {
// TODO Auto-generated method stub
return null;
}
@Override
public Vip save(Vip vip) {
return vipFacade.merge(vip);
}
@Override
public Vip saveProduct(VipProduct prod) {
VipProduct ret = vipProductFacade.merge(prod);
return ret.getVip();
}
@Override
public Vip deleteProduct(VipProduct l) {
l = vipProductFacade.reload(l);
Vip vip = l.getVip();
vip.getProducts().remove(l);
vipProductFacade.remove(l);
return vip;
}
@Override
public VipProductDelivery createDelivery(VipProduct prod, BigDecimal quantity, String notes) {
prod = vipProductFacade.reload(prod);
VipProductDelivery vpd = new VipProductDelivery();
vpd.setVipProduct(prod);
vpd.setDeliverer(permbean.getCurrentUser());
vpd.setNotes(notes);
vpd.setDeliveryTime(new Date());
vpd.setQuantity(quantity);
vpdFacade.create(vpd);
prod.getDeliveries().add(vpd);
return vpd;
}
}
package fi.codecrew.moya.facade;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import fi.codecrew.moya.model.VipProduct;
import fi.codecrew.moya.model.VipProductDelivery;
@Stateless
@LocalBean
public class VipProductDeliveryFacade extends IntegerPkGenericFacade<VipProductDelivery> {
public VipProductDeliveryFacade() {
super(VipProductDelivery.class);
}
}
package fi.codecrew.moya.facade;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.Vip;
import fi.codecrew.moya.model.VipProduct;
import fi.codecrew.moya.model.Vip_;
@Stateless
@LocalBean
public class VipProductFacade extends IntegerPkGenericFacade<VipProduct> {
public VipProductFacade() {
super(VipProduct.class);
}
}
......@@ -82,6 +82,16 @@ public class Vip extends GenericEntity {
return ret;
}
public String getSearchableProductnames()
{
StringBuilder sb = new StringBuilder();
for (VipProduct p : products) {
sb.append(p.getProductName());
sb.append(" ");
}
return sb.toString();
}
public String getDescription() {
return description;
}
......
......@@ -45,6 +45,15 @@ public class VipProduct extends GenericEntity {
@OneToMany(mappedBy = "vipProduct")
private List<VipProductDelivery> deliveries = new ArrayList<>();
public VipProduct() {
super();
}
public VipProduct(Vip v) {
this();
this.vip = v;
}
/**
* Returns name of the product. If @Field product is empty, use @Field name
*
......@@ -53,7 +62,7 @@ public class VipProduct extends GenericEntity {
@Transient
public String getProductName() {
String ret = name;
if (product == null) {
if (product != null) {
ret = product.getName();
}
return ret;
......
......@@ -13,6 +13,10 @@
<default-locale>fi</default-locale>
<supported-locale>en</supported-locale>
</locale-config>
<action-listener>org.primefaces.application.DialogActionListener</action-listener>
<navigation-handler>org.primefaces.application.DialogNavigationHandler</navigation-handler>
<view-handler>org.primefaces.application.DialogViewHandler</view-handler>
</application>
<!-- <navigation-rule> -->
......
......@@ -11,17 +11,18 @@
<ui:define name="content">
<h:form id="vipcreate">
<h:panelGrid columns="2">
<h:outputLabel for="hostselect" />
<p:autoComplete label="#{i18n['vip.host']}" id="hostselect" value="#{vipView.vip.host}" completeMethod="#{vipView.usersearch}" converter="#{eventUserConverter}" var="usr" itemValue="#{usr}" itemLabel="#{usr.wholeName}" />
<h:outputLabel value="#{i18n['vip.host']}" for="hostselect" />
<p:autoComplete id="hostselect" value="#{vipView.vip.host}" completeMethod="#{vipView.usersearch}" converter="#{eventUserConverter}" var="usr" itemValue="#{usr}" itemLabel="#{usr.wholeName}" />
</h:panelGrid>
<p:inputTextarea cols="50" rows="3" value="#{vipView.vip.description}" />
<br />
<h:outputLabel for="shortdescr" value="#{i18n['vip.shortdescr']}" />
<p:inputTextarea id="shortdescr" cols="50" rows="3" value="#{vipView.vip.shortdescr}" />
<p:inputTextarea cols="50" rows="6" value="#{vipView.vip.description}" />
<br />
<h:outputLabel for="description" value="#{i18n['vip.description']}" />
<p:inputTextarea id="description" cols="50" rows="6" value="#{vipView.vip.description}" />
</h:panelGrid>
<p:commandButton action="#{vipView.create()}" value="#{i18n['vip.create']}" />
</h:form>
......
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<!-- p:panel here because of http://forum.primefaces.org/viewtopic.php?f=3&t=37866 -->
<p:panel>
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['vip.host']}" for="host" />
<h:outputText id="host" value="#{vipDeliverView.vip.host.wholeName}" />
<h:outputLabel for="description" value="#{i18n['vip.description']}" />
<h:outputText id="description" value="#{vipDeliverView.vip.description}" />
</h:panelGrid>
<h:form>
<p:dataTable value="#{vipDeliverView.products}" var="wra">
<p:column headerText="#{i18n['vipProduct.name']}">
<h:outputText value="#{wra.product.productName}" />
</p:column>
<p:column headerText="#{i18n['vipProduct.quantity']}">
<h:outputText value="#{wra.product.quantity}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="3" />
</h:outputText>
</p:column>
<p:column headerText="#{i18n['vipProduct.delivered']}">
<h:outputText value="#{wra.product.delivered}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="3" />
</h:outputText>
</p:column>
<p:column headerText="#{i18n['vipProduct.deliver']}">
<h:inputText size="7" value="#{wra.deliver}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="2" />
</h:inputText>
</p:column>
</p:dataTable>
<h:outputText value="#{i18n['vipProduct.deliverNotes']}" />
<p:inputTextarea cols="40" rows="3" value="#{vipDeliverView.notes}" />
<br />
<p:commandButton action="#{vipDeliverView.deliverProducts}" value="#{i18n['vipProduct.deliver']}" />
</h:form>
</p:panel>
</h:body>
</html>
\ No newline at end of file
......@@ -14,54 +14,80 @@
<h:form id="vipcreate">
<h:panelGrid columns="2">
<h:outputLabel for="hostselect" />
<p:autoComplete label="#{i18n['vip.host']}" id="hostselect" value="#{vipView.vip.host}" completeMethod="#{vipView.usersearch}" converter="#{eventUserConverter}" var="usr" itemValue="#{usr}" itemLabel="#{usr.wholeName}" />
<h:outputLabel value="#{i18n['vip.host']}" for="hostselect" />
<p:autoComplete id="hostselect" value="#{vipView.vip.host}" completeMethod="#{vipView.usersearch}" converter="#{eventUserConverter}" var="usr" itemValue="#{usr}" itemLabel="#{usr.wholeName}" />
<h:outputLabel for="shortdescr" value="#{i18n['vip.shortdescr']}" />
<p:inputTextarea id="shortdescr" cols="50" rows="3" value="#{vipView.vip.shortdescr}" />
<h:outputLabel for="description" value="#{i18n['vip.description']}" />
<p:inputTextarea id="description" cols="50" rows="6" value="#{vipView.vip.description}" />
</h:panelGrid>
<p:inputTextarea cols="50" rows="3" value="#{vipView.vip.description}" />
<br />
<p:inputTextarea cols="50" rows="6" value="#{vipView.vip.description}" />
<br />
<p:commandButton action="#{vipView.create()}" value="#{i18n['vip.save']}" />
<p:dataTable var="prod" value="#{vipView.vipProducts}">
<p:commandButton action="#{vipView.save()}" value="#{i18n['vip.save']}" />
<br />
</h:form>
<br />
<h:form>
<p:dataTable editable="true" styleClass="bordertable" id="vipProdList" var="prod" value="#{vipView.vipProducts}">
<p:ajax event="rowEdit" listener="#{vipView.productRowEdit}" />
<p:ajax event="rowEditCancel" listener="#{vipView.productRowEditCancel}" />
<p:column>
<p:cellEditor>
<p:column headerText="#{i18n['vipProduct.name']}">
<ui:fragment rendered="#{empty prod.id}">
<p:inputText value="#{prod.name}" />
<br />
<p:selectOneMenu value="#{prod.product}" converter="#{productConverter}">
<f:selectItem itemLabel="---" itemValue="0" />
<f:selectItems value="#{vipView.eventProducts}" var="p" itemLabel="#{p.name}" />
</p:selectOneMenu>
</ui:fragment>
<p:cellEditor rendered="#{not empty prod.id}">
<f:facet name="output">
<h:outputText value="#{prod.productName}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{prod.name}" />
<br />
<p:selectOneMenu value="#{prod.product}" var="p" converter="#{productConverter}">
<p:selectOneMenu value="#{prod.product}" converter="#{productConverter}">
<f:selectItem itemLabel="---" itemValue="0" />
<f:selectItems value="#{vipView.eventProducts}" itemValue="#{p.name}" />
<f:selectItems value="#{vipView.eventProducts}" var="p" itemLabel="#{p.name}" />
</p:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
<p:column>
<p:cellEditor>
<p:column style="width: 120px;" headerText="#{i18n['vipProduct.quantity']}">
<h:inputText size="15" rendered="#{empty prod.id}" value="#{prod.quantity}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="3" />
</h:inputText>
<p:cellEditor rendered="#{not empty prod.id}">
<f:facet name="output">
<h:outputText value="#{prod.quantity}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="3" />
</h:outputText>
</f:facet>
<f:facet name="input">
<h:outputText value="#{prod.quantity}" />
<h:inputText size="15" value="#{prod.quantity}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="3" />
</h:inputText>
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width:32px">
<p:rowEditor />
<p:column headerText="#{i18n['vipProduct.delivered']}">
<h:outputText rendered="#{not empty prod.id}" value="#{prod.delivered}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="3" />
</h:outputText>
</p:column>
<p:column style="width: 90px;">
<p:rowEditor rendered="#{not empty prod.id}" />
<p:commandButton action="#{vipView.createProduct()}" update="vipProdList" value="#{i18n['vipProduct.create']}" rendered="#{empty prod.id}" />
</p:column>
<p:column style="width: 35px;">
<p:commandButton rendered="#{not empty prod.id}" onclick="return confirm('#{i18n['vipProduct.deleteProductConfirm']}')" action="#{vipView.deleteProduct()}" update="vipProdList" icon="ui-icon-close" />
</p:column>
</p:dataTable>
</h:form>
</ui:define>
</ui:composition>
......
......@@ -11,7 +11,10 @@
<ui:define name="content">
<h:form>
<h:link rendered="#{vipListView.canCreate()}" outcome="/vip/create" value="#{i18n['vip.createNew']}" />
<br />
<h:form id="vipform">
<p:dataTable id="vip" value="#{vipListView.viplist}" widgetVar="viplist" styleClass="moya_datatable4" var="vip" filteredValue="#{vipListView.filteredVips}">
<f:facet name="header">
<p:outputPanel>
......@@ -23,10 +26,13 @@
<h:outputText value="#{vip.host.wholeName}" />
</p:column>
<p:column headerText="#{i18n['vip.description']}" filterBy="#{vip.description}" filterMatchMode="contains">
<h:outputText value="#{vip.shortDisplayDescr}" title="#{vip.description}" />
<h:outputText id="vipdescr" value="#{vip.shortDisplayDescr}" title="#{vip.description}" />
<p:tooltip id="toolTipVipdescr" for="vipdescr" value="#{vip.description}" />
</p:column>
<p:column headerText="#{i18n['vip.products']} | #{i18n['vip.productQuantity']} | #{i18n['vip.productDelivered']}">
<h:dataTable border="0" var="prod" value="#{vip.products}" >
<p:column filterBy="#{vip.searchableProductnames}" filterMatchMode="contains" headerText="#{i18n['vip.products']} | #{i18n['vip.productQuantity']} | #{i18n['vip.productDelivered']}">
<h:dataTable border="0" var="prod" value="#{vip.products}">
<p:column>
<h:outputText title="#{prod.notes}" value="#{prod.productName}" />
</p:column>
......@@ -42,6 +48,12 @@
</p:column>
</h:dataTable>
</p:column>
<p:column>
<p:commandButton id="delivebtn" rendered="#{not empty vip.id}" value="#{i18n['vip.deliver']}" actionListener="#{vipListView.deliverDialog}">
<p:ajax event="dialogReturn" listener="#{vipListView.updateViplist()}" update="vip" />
</p:commandButton>
</p:column>
<p:column>
<h:link outcome="/vip/edit" value="#{i18n['vip.edit']}">
<f:param name="id" value="#{vip.id}" />
......
......@@ -40,7 +40,7 @@ public abstract class GenericCDIView implements Serializable {
private static final long serialVersionUID = -4000065015178815761L;
@Inject
private Conversation conversation;
protected Conversation conversation;
private static final Logger logger = LoggerFactory.getLogger(GenericCDIView.class);
......
package fi.codecrew.moya.web.cdiview.vip;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Named;
import org.primefaces.context.RequestContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.VipBeanLocal;
import fi.codecrew.moya.model.Vip;
import fi.codecrew.moya.model.VipProduct;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
/**
* Created by jkj on 2015-01-11.
*/
@Named
@ConversationScoped
public class VipDeliverView extends GenericCDIView {
/**
*
*/
private static final long serialVersionUID = 1L;
private List<VipProductWrapper> products;
@EJB
private VipBeanLocal vipbean;
public List<VipProductWrapper> getProducts() {
if (products == null && vip != null) {
products = VipProductWrapper.wrap(vip.getProducts());
}
return products;
}
private Vip vip;
private static final Logger logger = LoggerFactory.getLogger(VipDeliverView.class);
private String notes;
public Vip getVip() {
return vip;
}
public void deliverProducts() {
for (VipProductWrapper p : products) {
logger.info("Product {}, count: {}", p.getProduct().getProductName(), p.getDeliver());
if (p.getDeliver().compareTo(BigDecimal.ZERO) > 0) {
vipbean.createDelivery(p.getProduct(), p.getDeliver(), notes);
}
}
notes = null;
vip = null;
products = null;
RequestContext.getCurrentInstance().closeDialog(null);
}
public void setVip(Vip vip) {
this.vip = vip;
products = null;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
public static class VipProductWrapper
{
private final VipProduct product;
private BigDecimal deliver;
public VipProductWrapper(VipProduct prod) {
this.product = prod;
setDeliver(product.getQuantity().subtract(product.getDelivered()));
}
public static List<VipProductWrapper> wrap(List<VipProduct> products) {
List<VipProductWrapper> ret = new ArrayList<>();
for (VipProduct p : products) {
ret.add(new VipProductWrapper(p));
}
return ret;
}
public VipProduct getProduct() {
return product;
}
public BigDecimal getDeliver() {
return deliver;
}
public void setDeliver(BigDecimal deliver) {
this.deliver = deliver;
}
}
}
package fi.codecrew.moya.web.cdiview.vip;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.context.RequestContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.VipBeanLocal;
import fi.codecrew.moya.enums.apps.VipPermission;
import fi.codecrew.moya.model.Vip;
......@@ -27,13 +35,42 @@ public class VipListView extends PaginationView<Vip> {
private ListDataModel<Vip> viplist;
private List<Vip> filteredVips;
@Inject
private VipDeliverView deliverView;
private static final Logger logger = LoggerFactory.getLogger(VipListView.class);
public void initView() {
if (super.requirePermissions(VipPermission.VIEW) && viplist == null) {
viplist = new ListDataModel<Vip>(vipBean.getAvailableVips());
filteredVips = null;
super.beginConversation();
}
}
public boolean canCreate() {
return super.hasPermission(VipPermission.EDIT);
}
public void updateViplist() {
viplist = null;
initView();
}
public void deliverDialog() {
getDeliverView().setVip(viplist.getRowData());
logger.info("Set vip in deliverView to {}", deliverView.getVip());
Map<String, Object> options = new HashMap<>();
options.put("modal", true);
Map<String, List<String>> params = null;
if (conversation.getId() != null) {
params = new HashMap<>();
params.put("cid", Arrays.asList(conversation.getId()));
}
RequestContext.getCurrentInstance().openDialog("/vip/deliver", options, params);
}
public ListDataModel<Vip> getViplist() {
return viplist;
}
......@@ -50,4 +87,12 @@ public class VipListView extends PaginationView<Vip> {
this.filteredVips = filteredVips;
}
public VipDeliverView getDeliverView() {
return deliverView;
}
public void setDeliverView(VipDeliverView deliverView) {
this.deliverView = deliverView;
}
}
package fi.codecrew.moya.web.cdiview.vip;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.enterprise.context.RequestScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import javax.inject.Named;
import org.slf4j.Logger;
......@@ -42,6 +43,7 @@ public class VipView extends GenericCDIView {
private Vip vip;
private Integer id;
@EJB
private UserBeanLocal userbean;
@EJB
......@@ -59,6 +61,19 @@ public class VipView extends GenericCDIView {
}
}
public void createProduct() {
VipProduct l = vipProducts.getRowData();
vip = vipBean.createProduct(l);
vipProducts = null;
}
public void deleteProduct() {
VipProduct l = vipProducts.getRowData();
logger.info("Deleting product {}", l);
vip = vipBean.deleteProduct(l);
vipProducts = null;
}
public List<Product> getEventProducts() {
return productBean.getProducts();
}
......@@ -67,7 +82,10 @@ public class VipView extends GenericCDIView {
public ListDataModel<VipProduct> getVipProducts() {
if (vipProducts == null && vip != null) {
vipProducts = new ListDataModel<>(vip.getProducts());
ArrayList<VipProduct> li = new ArrayList<>();
li.add(new VipProduct(vip));
li.addAll(vip.getProducts());
vipProducts = new ListDataModel<>(li);
}
return vipProducts;
}
......@@ -81,7 +99,8 @@ public class VipView extends GenericCDIView {
}
public void productRowEdit() {
logger.warn("Editing product: {}", getVipProducts().getRowData());
vip = vipBean.saveProduct(getVipProducts().getRowData());
// logger.warn("Editing product: {}", getVipProducts().getRowData());
}
......@@ -90,6 +109,11 @@ public class VipView extends GenericCDIView {
}
public void save() {
vip = vipBean.save(vip);
vipProducts = null;
}
public List<EventUser> usersearch(String search) {
UserSearchQuery usq = new UserSearchQuery();
usq.setSearch(search);
......@@ -101,7 +125,7 @@ public class VipView extends GenericCDIView {
public String create()
{
vipBean.create(vip);
return "/vip/edit?faces-redirect=true";
return "/vip/edit";
}
public Vip getVip() {
......
......@@ -27,6 +27,8 @@ adduser.update = Update profile picture
adduser.welcome = Welcome
adduser.welcometext = Here you can add new user or update your current user profile image. Please select desired action below.
barcodeReader.readBarcode = Lue viivakoodi
bill.billAmount = Tilauksen summa (sis. alv)
bill.billNumber = Tilausnumero
bill.cancel = Cancel bill
......@@ -141,6 +143,7 @@ error.contact = If this happens again, contact Info with the following code:
error.error = You have encountered an error.
etickets.eticketcode = Lippu
etickets.mailSended = Lippu l\u00E4hetetty s\u00E4hk\u00F6postiisi
etickets.place = Paikka
etickets.placeinfo = Paikkatiedot
etickets.placemap = Paikat kartalla
......@@ -215,25 +218,34 @@ global.save = Save
httpsession.creationTime = Created
incomingFlow.count = M\u00E4\u00E4r\u00E4
incomingFlow.leftCount = Noutamatta
incomingView.attach = Liit\u00E4
incomingView.attachDialogTitle = Liit\u00E4 koodi k\u00E4ytt\u00E4j\u00E4\u00E4n
incomingView.cancel = Peruuta
incomingflow.allGiven = Merkitty {0} lippu(a) annetuksi.
incomingflow.alreadyShowingUser.message = Piipattu k\u00E4ytt\u00E4j\u00E4 on jo n\u00E4kyviss\u00E4
incomingflow.alreadyShowingUser.title = Valmiiksi valittu
incomingflow.cardCodes = Kortin koodit
incomingflow.cardfiling.label = Card filing:
incomingflow.changereader = Vaihda / valitse lukija
incomingflow.codeattached.message = Piipattu koodi liitetty n\u00E4ytett\u00E4v\u00E4\u00E4n korttiin
incomingflow.codeattached.title = Koodi liittetty
incomingflow.giveplace = Merkitse annetuksi
incomingflow.groupmemberships = Paikkakoodit
incomingflow.invalidbarcode.message = Viivakoodilla ei l\u00F6ytynyt mit\u00E4\u00E4n
incomingflow.invalidbarcode.title = virheellinen koodi
incomingflow.markEverythingGiven = Anna kaikki antamattomat tuotteet
incomingflow.placesummary = Paikkayhteenveto
incomingflow.printedCard = Kortti
incomingflow.usereditor = K\u00E4ytt\u00E4j\u00E4
incomingflow.usereditor.info = Tiedot
incomingflow.usereditor.picture = Kuvanotto
infoview.multisearch = K\u00E4ytt\u00E4j\u00E4haku
invite.permissionDenied = Sinulla ei ole oikeutta luovuttaa paikkaa eteenp\u00E4in.
invite.userLoginSuccessfull = Kutsu vastaanotettu onnistuneesti
invite.userLoginUnSuccessfull = Kirjautuminen ep\u00E4onnistui
......@@ -381,6 +393,7 @@ productshop.plusOne = +1
productshop.plusTen = +10
reader.autopoll = Jatkuva lukijan seuraaminen
reader.noReader = Ei valittua lukijaa
refresh = P\u00E4ivit\u00E4
......@@ -410,7 +423,9 @@ shop.unitdiscount = Alennus
submenu.NotImplementedYet = Not implemented
submenu.admin.adduser = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys
submenu.admin.adduser.index = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys
submenu.admin.incoming.index = Sis\u00E4\u00E4ntulo
submenu.frontpage = Frontpage
submenu.info.cardlessIncoming = Sis\u00E4\u00E4ntulo
submenu.info.foodwave.foodwaveshop = Ruokakauppa
submenu.info.incoming = Laaja sis\u00E4\u00E4ntulon\u00E4kym\u00E4
submenu.info.index = Infon\u00E4kym\u00E4
......@@ -426,6 +441,7 @@ submenu.shop.createBill = Osta lippuja
subnavi.cards = \u0009\u0009
subnavi.info = Info
subnavi.vips = Vippilista
success = Onnistui
......@@ -447,6 +463,7 @@ user.imageUpload.imageNotFound = Select image to upload
user.info = K\u00E4ytt\u00E4j\u00E4
user.invite.placeInvite.header = Liit\u00E4 paikka itsellesi
user.meta.box.title = Metadata
user.roles = Pakotetut roolit
user.saveUserSelectableRoles = Tallenna
user.shirt.L = Unisex L
user.shirt.LadyL = Ladyfit L
......@@ -470,21 +487,24 @@ usercart.showoverview = Vie tarkastusn\u00E4kym\u00E4\u00E4n
viewlectures.title = Kurssit ja luennot
vip.create = Luo
vip.createNew = Luo uusi
vip.deliver = Toimita
vip.description = Kuvaus
vip.edit = Muokkaa
vip.host = Is\u00E4nt\u00E4
vip.hostsName = Is\u00E4nt\u00E4
vip.productDelivered = Toimitettu
vip.productQuantity = Lkm
vip.products = Tuote
vip.save = Tallenna
vip.shortdescr = Lyhyt kuvaus
vipProduct.create = Lis\u00E4\u00E4
vipProduct.deliver = Toimita
vipProduct.deliverNotes = Huomiot
vipProduct.delivered = Toimitettu
vipProduct.name = Tuote
vipProduct.quantity = Lukum\u00E4\u00E4r\u00E4
yes = Kyll\u00E4
infoview.multisearch=K\u00E4ytt\u00E4j\u00E4haku
incomingflow.placesummary=Paikkayhteenveto
incomingFlow.leftCount=Noutamatta
incomingflow.markEverythingGiven=Anna kaikki antamattomat tuotteet
submenu.admin.incoming.index=Sis\u00E4\u00E4ntulo
submenu.admin.incoming.printCard=
submenu.info.cardlessIncoming=Sis\u00E4\u00E4ntulo
incomingflow.changereader=Vaihda / valitse lukija
incomingFlow.count=M\u00E4\u00E4r\u00E4
user.birthday=
user.confirmUserToEventAdding=
user.invalidLoginCredentials=
barcodeReader.readBarcode=Lue viivakoodi
incomingflow.allGiven=Merkitty {0} lippu(a) annetuksi.
reader.noReader=Ei valittua lukijaa
etickets.mailSended=Lippu l\u00E4hetetty s\u00E4hk\u00F6postiisi
user.roles=Pakotetut roolit
......@@ -353,6 +353,7 @@ error.contact = If this happens again, contact Info with the following code:
error.error = You have encountered an error.
etickets.eticketcode = Ticket
etickets.mailSended = Ticket has been sended to your email
etickets.place = Place
etickets.placeinfo = Placeinfo
etickets.placemap = Places on map
......@@ -535,10 +536,14 @@ imagefile.file = Imagefile
importuser.file = File
importuser.template = Template
incomingFlow.count = Count
incomingFlow.leftCount = Ungiven
incomingView.attach = Attach
incomingView.attachDialogTitle = Attach code to user
incomingView.cancel = Cancel
incomingflow.allGiven = Marked {0} tickets given.
incomingflow.alreadyShowingUser.message = We are already showing selected user
incomingflow.alreadyShowingUser.title = Already selected
incomingflow.barcode = Barcode
......@@ -551,7 +556,9 @@ incomingflow.giveplace = Mark given
incomingflow.groupmemberships = Group memberships
incomingflow.invalidbarcode.message = Nothing found with barcode, you can now add it to the user
incomingflow.invalidbarcode.title = Invalid code
incomingflow.markEverythingGiven = Give ewerything ungiven stuff
incomingflow.multisearch = Multisearch
incomingflow.placesummary = Placesummary
incomingflow.printedCard = Card
incomingflow.search = Search
incomingflow.ungiveplace = Mark not given
......@@ -562,6 +569,7 @@ incomingflow.usereditor.picture = Picturetake
infoview.back = Back
infoview.computerplace = Computer places
infoview.multisearch = Usersearch
infoview.shop = Shop
inventory.product.info = Info
......@@ -1074,6 +1082,7 @@ reader.description = Description
reader.edit = Edit
reader.identification = Identification
reader.name = Reader name
reader.noReader = No selected reader
reader.save = Save
reader.select = Select reader
reader.tag = Tag
......@@ -1254,6 +1263,7 @@ submenu.foodwave.list = Foodwaves
submenu.foodwave.listTemplates = Food provides
submenu.help = Ticket help
submenu.index = Frontpage
submenu.info.cardlessIncoming = Incoming
submenu.info.foodwave.foodwaveshop = Foodshop
submenu.info.incoming = Extendet Incomingview
submenu.info.index = Infoview
......@@ -1328,6 +1338,7 @@ subnavi.info = Info
subnavi.products = Products
subnavi.readers = Readers
subnavi.roles = Roles
subnavi.vips = VIP-list
success = Success
......@@ -1598,6 +1609,7 @@ user.successfullySaved = Changes saved successfully
user.superadmin = Superadmin
user.thisIsCurrentImage = Current image
user.town = City
user.unauthenticated = Unauthenticated
user.uploadimage = Send image
user.userSelectableRoles = Select one
user.username = Username
......@@ -1650,6 +1662,26 @@ viewexpired.title = Login expired. Please login again.
viewlectures.title = Courses and lectures
vip.create = Create
vip.createNew = Create new
vip.deliver = Deliver
vip.description = Description
vip.edit = Edit
vip.host = Host
vip.hostsName = Host
vip.productDelivered = Delivered
vip.productQuantity = Qty
vip.products = Product
vip.save = Save
vip.shortdescr = Short description
vipProduct.create = Create
vipProduct.deliver = Deliver
vipProduct.deliverNotes = Notes
vipProduct.delivered = Delivered
vipProduct.name = Product
vipProduct.quantity = Quantity
voting.allcompos.curEntries = # of entries
voting.allcompos.descri = Description
voting.allcompos.description = List of all compos and theirs information.
......@@ -1693,12 +1725,3 @@ voting.create.voteEnd = Voting close
voting.create.voteStart = Voting start
yes = Yes
infoview.multisearch=Usersearch
incomingflow.placesummary=Placesummary
incomingFlow.leftCount=Ungiven
incomingflow.markEverythingGiven=Give ewerything ungiven stuff
submenu.info.cardlessIncoming=Incoming
incomingFlow.count=Count
incomingflow.allGiven=Marked {0} tickets given.
reader.noReader=No selected reader
etickets.mailSended=Ticket has been sended to your email
......@@ -4,6 +4,7 @@
acc_line.eventuser = Asiakas
acc_line.nick = Nimimerkki
acc_line.place = Paikka
acc_line.product = Tuote
acc_line.quantity = M\u00E4\u00E4r\u00E4
acc_line.time = Ostoaika
......@@ -354,6 +355,7 @@ error.contact = Jos t\u00E4m\u00E4 toistuu, ota seuraava koodi talteen ja ota yh
error.error = Olet kohdannut virheen.
etickets.eticketcode = Lippu
etickets.mailSended = Lippu l\u00E4hetetty s\u00E4hk\u00F6postiisi
etickets.place = Paikka
etickets.placeinfo = Paikkatiedot
etickets.placemap = Paikat kartalla
......@@ -543,10 +545,14 @@ imagefile.file = Kuvatiedosto
importuser.file = Tiedosto
importuser.template = Malli
incomingFlow.count = M\u00E4\u00E4r\u00E4
incomingFlow.leftCount = Noutamatta
incomingView.attach = Liit\u00E4
incomingView.attachDialogTitle = Liit\u00E4 koodi k\u00E4ytt\u00E4j\u00E4\u00E4n
incomingView.cancel = Peruuta
incomingflow.allGiven = Merkitty {0} lippu(a) annetuksi.
incomingflow.alreadyShowingUser.message = Piipattu k\u00E4ytt\u00E4j\u00E4 on jo n\u00E4kyviss\u00E4
incomingflow.alreadyShowingUser.title = Valmiiksi valittu
incomingflow.barcode = Viivakoodi
......@@ -559,7 +565,9 @@ incomingflow.giveplace = Merkitse annetuksi
incomingflow.groupmemberships = Konepaikat sek\u00E4 liput
incomingflow.invalidbarcode.message = Piipatulla koodilla ei l\u00F6ytynyt mit\u00E4\u00E4n, voit lis\u00E4t\u00E4 koodin k\u00E4ytt\u00E4j\u00E4\u00E4n
incomingflow.invalidbarcode.title = Virheellinen koodi
incomingflow.markEverythingGiven = Anna kaikki antamattomat tuotteet
incomingflow.multisearch = Monihaku
incomingflow.placesummary = Paikkayhteenveto
incomingflow.printedCard = Kortti
incomingflow.search = Etsi
incomingflow.ungiveplace = Ei olekkaan annettu
......@@ -572,6 +580,7 @@ index.title = Etusivu
infoview.back = Takaisin
infoview.computerplace = Tietokonepaikat
infoview.multisearch = K\u00E4ytt\u00E4j\u00E4haku
infoview.shop = Kauppa
inventory.product.info = Info
......@@ -1059,6 +1068,7 @@ reader.description = Kuvaus
reader.edit = Muokkaa
reader.identification = Tunniste
reader.name = Lukijan nimi
reader.noReader = Ei valittua lukijaa
reader.save = Tallenna
reader.select = Valitse lukija
reader.tag = Tag
......@@ -1234,6 +1244,7 @@ submenu.foodwave.list = Ruokatilaukset
submenu.frontpage = Etusivu
submenu.help = Lippuopas
submenu.index = Etusivu
submenu.info.cardlessIncoming = Sis\u00E4\u00E4ntulo
submenu.info.foodwave.foodwaveshop = Ruokakauppa
submenu.info.incoming = Laaja Sis\u00E4\u00E4ntulon\u00E4kym\u00E4
submenu.info.index = Infon\u00E4kym\u00E4
......@@ -1311,6 +1322,7 @@ subnavi.info = Info
subnavi.products = Tuotteet
subnavi.readers = Lukijat
subnavi.roles = Roolit
subnavi.vips = Vippilista
success = Onnistui
......@@ -1581,6 +1593,7 @@ user.successfullySaved = Tiedot tallennettu onnistuneesti
user.superadmin = Superadmin
user.thisIsCurrentImage = Nykyinen kuva
user.town = Kaupunki
user.unauthenticated = Kirjautumaton
user.uploadimage = L\u00E4het\u00E4 kuva
user.userSelectableRoles = Valitse yksi
user.username = K\u00E4ytt\u00E4j\u00E4tunnus
......@@ -1632,6 +1645,26 @@ viewexpired.title = N\u00E4kym\u00E4 on vanhentunut
viewlectures.title = Kurssit ja luennot
vip.create = Luo
vip.createNew = Luo uusi
vip.deliver = Toimita
vip.description = Kuvaus
vip.edit = Muokkaa
vip.host = Is\u00E4nt\u00E4
vip.hostsName = Is\u00E4nt\u00E4
vip.productDelivered = Toimitettu
vip.productQuantity = Lkm
vip.products = Tuote
vip.save = Tallenna
vip.shortdescr = Lyhyt kuvaus
vipProduct.create = Lis\u00E4\u00E4
vipProduct.deliver = Toimita
vipProduct.deliverNotes = Huomiot
vipProduct.delivered = Toimitettu
vipProduct.name = Tuote
vipProduct.quantity = Lukum\u00E4\u00E4r\u00E4
voting.allcompos.curEntries = Entryja
voting.allcompos.descri = Kuvaus
voting.allcompos.description = Compojen informaatiot.
......@@ -1675,14 +1708,3 @@ voting.create.voteEnd = \u00C4\u00E4nestys kiinni
voting.create.voteStart = \u00C4\u00E4nestys auki
yes = Kyll\u00E4
acc_line.place=Paikka
infoview.multisearch=K\u00E4ytt\u00E4j\u00E4haku
incomingflow.placesummary=Paikkayhteenveto
incomingFlow.leftCount=Noutamatta
user.unauthenticated=
incomingflow.markEverythingGiven=Anna kaikki antamattomat tuotteet
submenu.info.cardlessIncoming=Sis\u00E4\u00E4ntulo
incomingFlow.count=M\u00E4\u00E4r\u00E4
incomingflow.allGiven=Merkitty {0} lippu(a) annetuksi.
reader.noReader=Ei valittua lukijaa
etickets.mailSended=Lippu l\u00E4hetetty s\u00E4hk\u00F6postiisi
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!