Commit 9c07bb3c by Tuomas Riihimäki

add product dependency i18n, delete, etc

1 parent 488fc14f
...@@ -93,4 +93,6 @@ public interface ProductBeanLocal { ...@@ -93,4 +93,6 @@ public interface ProductBeanLocal {
void deleteProductOptionGroup(ProductOptionGroup group); void deleteProductOptionGroup(ProductOptionGroup group);
Product reload(Product product); Product reload(Product product);
Product delete(ProductDependency dep);
} }
...@@ -660,5 +660,12 @@ public class ProductBean implements ProductBeanLocal { ...@@ -660,5 +660,12 @@ public class ProductBean implements ProductBeanLocal {
return productFacade.reload(product); return productFacade.reload(product);
} }
@Override
public Product delete(ProductDependency dep) {
Product prod = productFacade.reload(dep.getDependant());
prod.getProductDependencies().remove(dep);
return prod;
}
} }
...@@ -153,6 +153,7 @@ public class Product extends GenericEntity { ...@@ -153,6 +153,7 @@ public class Product extends GenericEntity {
private List<ProductOptionGroup> productOptionGroups; private List<ProductOptionGroup> productOptionGroups;
@OneToMany(cascade = CascadeType.ALL, mappedBy ="dependant") @OneToMany(cascade = CascadeType.ALL, mappedBy ="dependant")
@PrivateOwned
@OrderBy("priority") @OrderBy("priority")
private List<ProductDependency> productDependencies = new ArrayList<>(); private List<ProductDependency> productDependencies = new ArrayList<>();
......
...@@ -15,6 +15,10 @@ public class ProductDependency extends GenericEntity { ...@@ -15,6 +15,10 @@ public class ProductDependency extends GenericEntity {
public static enum DependencyType { public static enum DependencyType {
// Dependant product can be bought maximum of supported product number of times // Dependant product can be bought maximum of supported product number of times
MAX_SUPPORTED_COUNT, MAX_SUPPORTED_COUNT,
;
public String getI18nKey() {
return "product.dependency." + name();
}
} }
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)
......
...@@ -20,22 +20,24 @@ ...@@ -20,22 +20,24 @@
<hr/> <hr/>
<button onclick="$(this).hide(); $('#newProductDeps').show()">#{i18n['product.dependency.add']}</button>
<div id="newProductDeps" style="display: none">
<h:form id="newdep"> <h:form id="newdep">
<h:selectOneMenu id="supporter" layout="pageDirection" value="#{productView.dependency.supporter}" <h:selectOneMenu id="supporter" layout="pageDirection" value="#{productView.dependency.supporter}" converter="#{productConverter}">
converter="#{productConverter}"> <f:selectItem itemLabel="---"/>
<f:selectItem itemLabel="---" />
<f:selectItems var="prod" itemLabel="#{prod.name}" value="#{productView.products}"/> <f:selectItems var="prod" itemLabel="#{prod.name}" value="#{productView.products}"/>
</h:selectOneMenu> </h:selectOneMenu>
<h:selectOneMenu id="type" layout="pageDirection" value="#{productView.dependency.dependencyType}"> <h:selectOneMenu id="type" layout="pageDirection" value="#{productView.dependency.dependencyType}">
<f:selectItems var="type" value="#{productView.dependencyTypes}" /> <f:selectItems var="type" itemLabel="#{i18n[type.i18nKey]}" value="#{productView.dependencyTypes}"/>
</h:selectOneMenu> </h:selectOneMenu>
<p:commandButton action="#{productView.createProductDependency()}" <p:commandButton action="#{productView.createProductDependency()}" value="#{i18n['product.dependency.create']}" update=":dependencies"/>
value="#{i18n['product.dependency.create']}" />
</h:form> </h:form>
</div>
<h:form id="dependencies"> <h:form id="dependencies">
<h:dataTable border="1" var="dependency" value="#{productView.product.productDependencies}" <h:dataTable border="1" var="dependency" value="#{productView.productDependencies}" rendered="#{!empty productView.product.productDependencies}">
rendered="#{!empty productView.product.productDependencies}">
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="#{i18n['product.dependency.supporter']}"/> <h:outputText value="#{i18n['product.dependency.supporter']}"/>
...@@ -46,7 +48,7 @@ ...@@ -46,7 +48,7 @@
<f:facet name="header"> <f:facet name="header">
<h:outputText value="#{i18n['product.dependency.type']}"/> <h:outputText value="#{i18n['product.dependency.type']}"/>
</f:facet> </f:facet>
<h:outputText value="#{dependency.dependencyType}"/> <h:outputText value="#{i18n[dependency.dependencyType.i18nKey]}"/>
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
...@@ -55,112 +57,113 @@ ...@@ -55,112 +57,113 @@
<h:outputText value="#{dependency.priority}"/> <h:outputText value="#{dependency.priority}"/>
</h:column> </h:column>
<h:column> <h:column>
<p:commandButton action="#{productView.deleteProductDependency}" value="#{i18n['productDependency.delete']}" update=":dependencies"/>
</h:column>
<!-- Not yet in use.
<h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="#{i18n['product.dependency.multiplier']}"/> <h:outputText value="#{i18n['product.dependency.multiplier']}"/>
</f:facet> </f:facet>
<h:outputText value="#{dependency.multiplier}"/> <h:outputText value="#{dependency.multiplier}"/>
</h:column> </h:column>
-->
</h:dataTable> </h:dataTable>
</h:form> </h:form>
<hr /> <hr/>
<h:form id="discounts"> <h:form id="discounts">
<h:commandButton rendered="#{!empty productView.product.id}" <p:commandButton rendered="#{!empty productView.product.id}" action="#{productView.initCreateDiscount()}" value="#{i18n['product.createDiscount']}">
action="#{productView.initCreateDiscount()}" value="#{i18n['product.createDiscount']}"> </p:commandButton>
</h:commandButton> <h:dataTable border="1" id="discount" value="#{productView.productDiscounts}" var="discount" rendered="#{!empty productView.product.id and !empty productView.product.discounts}">
<h:dataTable border="1" id="discount" value="#{productView.productDiscounts}" var="discount"
rendered="#{!empty productView.product.id and !empty productView.product.discounts}">
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['discount.percentage']}" /> <h:outputText value="${i18n['discount.percentage']}"/>
</f:facet> </f:facet>
<h:outputText value="#{discount.percentage}" /> <h:outputText value="#{discount.percentage}"/>
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['discount.code']}" /> <h:outputText value="${i18n['discount.code']}"/>
</f:facet> </f:facet>
<h:outputText value="#{discount.code}" /> <h:outputText value="#{discount.code}"/>
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['discount.details']}" /> <h:outputText value="${i18n['discount.details']}"/>
</f:facet> </f:facet>
<h:outputText value="#{discount.details}" /> <h:outputText value="#{discount.details}"/>
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['discount.shortdesc']}" /> <h:outputText value="${i18n['discount.shortdesc']}"/>
</f:facet> </f:facet>
<h:outputText value="#{discount.shortdesc}" /> <h:outputText value="#{discount.shortdesc}"/>
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['discount.amountMin']}" /> <h:outputText value="${i18n['discount.amountMin']}"/>
</f:facet> </f:facet>
<h:outputText value="#{discount.amountMin}" /> <h:outputText value="#{discount.amountMin}"/>
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['discount.amountMax']}" /> <h:outputText value="${i18n['discount.amountMax']}"/>
</f:facet> </f:facet>
<h:outputText value="#{discount.amountMax}" /> <h:outputText value="#{discount.amountMax}"/>
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['discount.maxNum']}" /> <h:outputText value="${i18n['discount.maxNum']}"/>
</f:facet> </f:facet>
<h:outputText value="#{discount.maxNum}" /> <h:outputText value="#{discount.maxNum}"/>
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['discount.perUser']}" /> <h:outputText value="${i18n['discount.perUser']}"/>
</f:facet> </f:facet>
<h:outputText value="#{discount.perUser}" /> <h:outputText value="#{discount.perUser}"/>
</h:column> </h:column>
<h:column> <h:column>
<h:commandButton action="#{productView.editDiscount()}" value="#{i18n['discount.edit']}" /> <h:commandButton action="#{productView.editDiscount()}" value="#{i18n['discount.edit']}"/>
</h:column> </h:column>
</h:dataTable> </h:dataTable>
</h:form> </h:form>
<hr /> <hr/>
<h:form id="limits"> <h:form id="limits">
<h:commandButton rendered="#{!empty productView.product.id}" action="#{productView.initCreateLimit()}" <p:commandButton rendered="#{!empty productView.product.id}" action="#{productView.initCreateLimit()}" value="#{i18n['product.createLimit']}">
value="#{i18n['product.createLimit']}"> </p:commandButton>
</h:commandButton> <p:dataTable border="1" id="limit" value="#{productView.productLimits}" var="limit" rendered="#{!empty productView.product.id and !empty productView.product.productLimits}">
<p:dataTable border="1" id="limit" value="#{productView.productLimits}" var="limit"
rendered="#{!empty productView.product.id and !empty productView.product.productLimits}">
<p:column rowHeader="#{i18n['productLimit.name']}"> <p:column rowHeader="#{i18n['productLimit.name']}">
<h:outputText value="#{limit.name}" /> <h:outputText value="#{limit.name}"/>
</p:column> </p:column>
<p:column rowHeader="#{i18n['productLimit.type']}"> <p:column rowHeader="#{i18n['productLimit.type']}">
<h:outputText value="#{limit.type}" /> <h:outputText value="#{limit.type}"/>
</p:column> </p:column>
<p:column rowHeader="#{i18n['productLimit.upperLimit']}"> <p:column rowHeader="#{i18n['productLimit.upperLimit']}">
<h:outputText value="#{limit.lowerLimit}" /> <h:outputText value="#{limit.lowerLimit}"/>
</p:column> </p:column>
<p:column> <p:column>
<p:commandButton ajax="false" action="#{productView.editLimit()}" <p:commandButton ajax="false" action="#{productView.editLimit()}" value="#{i18n['productLimit.edit']}"/>
value="#{i18n['productLimit.edit']}"/>
</p:column> </p:column>
</p:dataTable> </p:dataTable>
</h:form> </h:form>
<hr /> <hr/>
<h:form id="options"> <h:form id="options">
<h:commandButton rendered="#{!empty productView.product.id}" <p:commandButton rendered="#{!empty productView.product.id}"
action="#{productView.initCreateProductOptionGroup()}" action="#{productView.initCreateProductOptionGroup()}"
value="#{i18n['product.createProductOptionGroup']}"><br/><br/> value="#{i18n['product.createProductOptionGroup']}"><br/><br/>
</h:commandButton> </p:commandButton>
<p:dataTable border="1" id="optiongroups" value="#{productView.productOptionGroups}" var="group" <p:dataTable border="1" id="optiongroups" value="#{productView.productOptionGroups}"
var="group"
rendered="#{!empty productView.product.id and !empty productView.product.productOptionGroups}"> rendered="#{!empty productView.product.id and !empty productView.product.productOptionGroups}">
<p:column rowHeader="#{i18n['name']}"> <p:column rowHeader="#{i18n['name']}">
<h:outputText value="#{group.name}" /> <h:outputText value="#{group.name}"/>
</p:column> </p:column>
<p:column> <p:column>
<p:commandButton ajax="false" action="#{productView.editProductOptionGroup}" <p:commandButton ajax="false" action="#{productView.editProductOptionGroup}"
......
...@@ -61,6 +61,7 @@ public class ProductView extends GenericCDIView { ...@@ -61,6 +61,7 @@ public class ProductView extends GenericCDIView {
private ListDataModel<ProductLimitation> productLimits; private ListDataModel<ProductLimitation> productLimits;
private ListDataModel<ProductOptionGroup> productOptionGroups; private ListDataModel<ProductOptionGroup> productOptionGroups;
private ListDataModel<ProductDependency> productDependencies;
private ProductOption productOption = null; private ProductOption productOption = null;
...@@ -84,9 +85,16 @@ public class ProductView extends GenericCDIView { ...@@ -84,9 +85,16 @@ public class ProductView extends GenericCDIView {
public void createProductDependency(){ public void createProductDependency(){
product.getProductDependencies().add(dependency); product.getProductDependencies().add(dependency);
dependency.setDependant(product); dependency.setDependant(product);
dependency = new ProductDependency(); dependency = new ProductDependency();
product = prodbean.mergeChanges(product); product = prodbean.mergeChanges(product);
productDependencies = null;
}
public void deleteProductDependency(){
ProductDependency dep = getProductDependencies().getRowData();
product = prodbean.delete(dep);
productDependencies = null;
} }
public ProductDependency.DependencyType[] getDependencyTypes(){ public ProductDependency.DependencyType[] getDependencyTypes(){
...@@ -295,4 +303,11 @@ public class ProductView extends GenericCDIView { ...@@ -295,4 +303,11 @@ public class ProductView extends GenericCDIView {
public void setDependency(ProductDependency dependency) { public void setDependency(ProductDependency dependency) {
this.dependency = dependency; this.dependency = dependency;
} }
public ListDataModel<ProductDependency> getProductDependencies(){
if(productDependencies == null && product != null){
productDependencies = new ListDataModel<>(product.getProductDependencies());
}
return productDependencies;
}
} }
...@@ -1589,3 +1589,11 @@ reservequeue.reservingTimeIsUpAlert=Timeslot for your place reservation has time ...@@ -1589,3 +1589,11 @@ reservequeue.reservingTimeIsUpAlert=Timeslot for your place reservation has time
mapView.reserveTimeLeft=Time to reserve places mapView.reserveTimeLeft=Time to reserve places
queuemgmt.queueEnabled=Queue is ENABLED queuemgmt.queueEnabled=Queue is ENABLED
queuemgmt.queueDisabled=Queue is DISABLED (enable from Edit event -page) queuemgmt.queueDisabled=Queue is DISABLED (enable from Edit event -page)
product.dependency.add=Add product dependency
product.dependency.create=Create
product.dependency.supporter=Depended product
product.dependency.type=Dependency type
product.dependency.priority=Priority
productDependency.delete=Delete
product.dependency.multiplier=Multiplier
product.dependency.MAX_SUPPORTED_COUNT=Only up to same number of products can be bought
...@@ -1867,3 +1867,11 @@ reservequeue.reservingTimeIsUpAlert=Timeslot for your place reservation has time ...@@ -1867,3 +1867,11 @@ reservequeue.reservingTimeIsUpAlert=Timeslot for your place reservation has time
mapView.reserveTimeLeft=Time to reserve places mapView.reserveTimeLeft=Time to reserve places
queuemgmt.queueEnabled=Queue is ENABLED queuemgmt.queueEnabled=Queue is ENABLED
queuemgmt.queueDisabled=Queue is DISABLED (enable from Edit event -page) queuemgmt.queueDisabled=Queue is DISABLED (enable from Edit event -page)
product.dependency.add=Add product dependency
product.dependency.create=Create
product.dependency.supporter=Depended product
product.dependency.type=Dependency type
product.dependency.priority=Priority
productDependency.delete=Delete
product.dependency.multiplier=Multiplier
product.dependency.MAX_SUPPORTED_COUNT=Only up to same number of products can be bought
...@@ -1854,3 +1854,11 @@ reservequeue.reservingTimeIsUpAlert=Sinulle varattu varausauka on kulunut loppuu ...@@ -1854,3 +1854,11 @@ reservequeue.reservingTimeIsUpAlert=Sinulle varattu varausauka on kulunut loppuu
mapView.reserveTimeLeft=Aikaa varata paikkasi mapView.reserveTimeLeft=Aikaa varata paikkasi
queuemgmt.queueEnabled=Varausjono ON k\u00E4yt\u00F6ss\u00E4 queuemgmt.queueEnabled=Varausjono ON k\u00E4yt\u00F6ss\u00E4
queuemgmt.queueDisabled=K\u00E4ytt\u00E4j\u00E4jono EI OLE k\u00E4yt\u00F6ss\u00E4 (ota k\u00E4yttoon tapahtuman tiedot -sivulta) queuemgmt.queueDisabled=K\u00E4ytt\u00E4j\u00E4jono EI OLE k\u00E4yt\u00F6ss\u00E4 (ota k\u00E4yttoon tapahtuman tiedot -sivulta)
product.dependency.add=Lis\u00E4\u00E4 tuoteriippuvuus
product.dependency.create=Luo uusi
product.dependency.supporter=Tuote josta on riippuvuus
product.dependency.type=Riippuvuuden tyyppi
product.dependency.priority=Prioriteetti
productDependency.delete=Poista
product.dependency.multiplier=Kerroin
product.dependency.MAX_SUPPORTED_COUNT=Tuotteita voi ostaa enint\u00E4\u00E4n saman m\u00E4\u00E4r\u00E4n
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!