[Fix] Fixed behavior of IsIn and Contains ReportFilters
This commit is contained in:
parent
901af241ac
commit
7677d27442
|
@ -13,8 +13,8 @@ public class GreaterThanReportFilter extends ReportFilterPolicy {
|
||||||
@Override
|
@Override
|
||||||
protected boolean filter(Object left, Object right, boolean negate) {
|
protected boolean filter(Object left, Object right, boolean negate) {
|
||||||
if (negate)
|
if (negate)
|
||||||
return ObjectHelper.compare(left, right, false) > 0;
|
|
||||||
else
|
|
||||||
return ObjectHelper.compare(right, left, false) > 0;
|
return ObjectHelper.compare(right, left, false) > 0;
|
||||||
|
else
|
||||||
|
return ObjectHelper.compare(left, right, false) > 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,13 @@
|
||||||
package li.strolch.report.policy;
|
package li.strolch.report.policy;
|
||||||
|
|
||||||
|
import static java.util.stream.Collectors.toList;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
import li.strolch.agent.api.ComponentContainer;
|
import li.strolch.agent.api.ComponentContainer;
|
||||||
|
import li.strolch.model.StrolchValueType;
|
||||||
|
import li.strolch.model.parameter.Parameter;
|
||||||
import li.strolch.persistence.api.StrolchTransaction;
|
import li.strolch.persistence.api.StrolchTransaction;
|
||||||
import li.strolch.utils.ObjectHelper;
|
import li.strolch.utils.ObjectHelper;
|
||||||
|
|
||||||
|
@ -10,6 +17,43 @@ public class IsInReportFilter extends ReportFilterPolicy {
|
||||||
super(container, tx);
|
super(container, tx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean filter(Object value) {
|
||||||
|
|
||||||
|
Object left;
|
||||||
|
if (value instanceof Date) {
|
||||||
|
|
||||||
|
if (this.right == null)
|
||||||
|
this.right = Arrays.stream(this.filterValue.split(",")).map(String::trim)
|
||||||
|
.map(this::parseFilterValueToDate).collect(toList());
|
||||||
|
|
||||||
|
left = value;
|
||||||
|
|
||||||
|
} else if (value instanceof Parameter) {
|
||||||
|
|
||||||
|
Parameter parameter = (Parameter) value;
|
||||||
|
if (this.right == null) {
|
||||||
|
StrolchValueType valueType = parameter.getValueType();
|
||||||
|
if (valueType == StrolchValueType.DATE)
|
||||||
|
this.right = Arrays.stream(this.filterValue.split(",")).map(String::trim)
|
||||||
|
.map(this::parseFilterValueToDate).collect(toList());
|
||||||
|
else
|
||||||
|
this.right = Arrays.stream(this.filterValue.split(",")).map(String::trim)
|
||||||
|
.map(valueType::parseValue).collect(toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
left = parameter.getValue();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (this.right == null)
|
||||||
|
this.right = Arrays.stream(this.filterValue.split(",")).map(String::trim).collect(toList());
|
||||||
|
|
||||||
|
left = value.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
return filter(left, this.right, this.negate);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean filter(Object left, Object right, boolean negate) {
|
protected boolean filter(Object left, Object right, boolean negate) {
|
||||||
if (negate)
|
if (negate)
|
||||||
|
|
|
@ -13,8 +13,8 @@ public class LessThanReportFilter extends ReportFilterPolicy {
|
||||||
@Override
|
@Override
|
||||||
protected boolean filter(Object left, Object right, boolean negate) {
|
protected boolean filter(Object left, Object right, boolean negate) {
|
||||||
if (negate)
|
if (negate)
|
||||||
return ObjectHelper.compare(left, right, false) < 0;
|
|
||||||
else
|
|
||||||
return ObjectHelper.compare(right, left, false) < 0;
|
return ObjectHelper.compare(right, left, false) < 0;
|
||||||
|
else
|
||||||
|
return ObjectHelper.compare(left, right, false) < 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ public abstract class ReportFilterPolicy extends StrolchPolicy {
|
||||||
|
|
||||||
protected boolean negate;
|
protected boolean negate;
|
||||||
protected String filterValue;
|
protected String filterValue;
|
||||||
protected Object left;
|
protected Object right;
|
||||||
|
|
||||||
public boolean isNegate() {
|
public boolean isNegate() {
|
||||||
return this.negate;
|
return this.negate;
|
||||||
|
@ -35,14 +35,6 @@ public abstract class ReportFilterPolicy extends StrolchPolicy {
|
||||||
this.filterValue = filterValue;
|
this.filterValue = filterValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getLeft() {
|
|
||||||
return this.left;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLeft(Object left) {
|
|
||||||
this.left = left;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void init(String value) {
|
public void init(String value) {
|
||||||
if (value.startsWith("!")) {
|
if (value.startsWith("!")) {
|
||||||
setNegate(true);
|
setNegate(true);
|
||||||
|
@ -54,38 +46,38 @@ public abstract class ReportFilterPolicy extends StrolchPolicy {
|
||||||
|
|
||||||
public boolean filter(Object value) {
|
public boolean filter(Object value) {
|
||||||
|
|
||||||
Object right;
|
Object left;
|
||||||
if (value instanceof Date) {
|
if (value instanceof Date) {
|
||||||
|
|
||||||
if (this.left == null)
|
if (this.right == null)
|
||||||
this.left = parseFilterValueToDate(this.filterValue);
|
this.right = parseFilterValueToDate(this.filterValue);
|
||||||
|
|
||||||
right = value;
|
left = value;
|
||||||
|
|
||||||
} else if (value instanceof Parameter) {
|
} else if (value instanceof Parameter) {
|
||||||
|
|
||||||
Parameter parameter = (Parameter) value;
|
Parameter parameter = (Parameter) value;
|
||||||
if (this.left == null) {
|
if (this.right == null) {
|
||||||
StrolchValueType valueType = parameter.getValueType();
|
StrolchValueType valueType = parameter.getValueType();
|
||||||
if (valueType == StrolchValueType.DATE)
|
if (valueType == StrolchValueType.DATE)
|
||||||
this.left = parseFilterValueToDate(this.filterValue);
|
this.right = parseFilterValueToDate(this.filterValue);
|
||||||
else
|
else
|
||||||
this.left = valueType.parseValue(this.filterValue);
|
this.right = valueType.parseValue(this.filterValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
right = parameter.getValue();
|
left = parameter.getValue();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (this.left == null)
|
if (this.right == null)
|
||||||
this.left = this.filterValue;
|
this.right = this.filterValue;
|
||||||
|
|
||||||
right = value.toString();
|
left = value.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
return filter(this.left, right, this.negate);
|
return filter(left, this.right, this.negate);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Date parseFilterValueToDate(String filterValue) {
|
protected Date parseFilterValueToDate(String filterValue) {
|
||||||
DBC.INTERIM.assertNotEmpty("filterValue must not be empty for date comparisons!", filterValue);
|
DBC.INTERIM.assertNotEmpty("filterValue must not be empty for date comparisons!", filterValue);
|
||||||
|
|
||||||
if (!filterValue.startsWith("now"))
|
if (!filterValue.startsWith("now"))
|
||||||
|
|
|
@ -1,30 +1,26 @@
|
||||||
package li.strolch.report;
|
package li.strolch.report;
|
||||||
|
|
||||||
|
import static java.util.stream.Collectors.toList;
|
||||||
import static org.hamcrest.Matchers.containsInAnyOrder;
|
import static org.hamcrest.Matchers.containsInAnyOrder;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.*;
|
||||||
import static org.junit.Assert.assertFalse;
|
|
||||||
import static org.junit.Assert.assertThat;
|
|
||||||
import static org.junit.Assert.assertTrue;
|
|
||||||
import static org.junit.Assert.fail;
|
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import li.strolch.model.StrolchElement;
|
|
||||||
import org.junit.AfterClass;
|
|
||||||
import org.junit.BeforeClass;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
import li.strolch.model.StrolchElement;
|
||||||
import li.strolch.model.StrolchRootElement;
|
import li.strolch.model.StrolchRootElement;
|
||||||
import li.strolch.persistence.api.StrolchTransaction;
|
import li.strolch.persistence.api.StrolchTransaction;
|
||||||
import li.strolch.privilege.model.Certificate;
|
import li.strolch.privilege.model.Certificate;
|
||||||
import li.strolch.testbase.runtime.RuntimeMock;
|
import li.strolch.testbase.runtime.RuntimeMock;
|
||||||
import li.strolch.utils.collections.DateRange;
|
import li.strolch.utils.collections.DateRange;
|
||||||
import li.strolch.utils.collections.MapOfSets;
|
import li.strolch.utils.collections.MapOfSets;
|
||||||
|
import org.junit.AfterClass;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
public class GenericReportTest {
|
public class GenericReportTest {
|
||||||
|
|
||||||
|
@ -172,7 +168,7 @@ public class GenericReportTest {
|
||||||
.filter("Product", "product01") //
|
.filter("Product", "product01") //
|
||||||
.dateRange(dateRange) //
|
.dateRange(dateRange) //
|
||||||
.doReportAsJson() //
|
.doReportAsJson() //
|
||||||
.collect(Collectors.toList());
|
.collect(toList());
|
||||||
assertTrue(result.isEmpty());
|
assertTrue(result.isEmpty());
|
||||||
|
|
||||||
// expect 2 slots, as in date range
|
// expect 2 slots, as in date range
|
||||||
|
@ -182,7 +178,7 @@ public class GenericReportTest {
|
||||||
.filter("Product", "product01") //
|
.filter("Product", "product01") //
|
||||||
.dateRange(dateRange) //
|
.dateRange(dateRange) //
|
||||||
.doReportAsJson() //
|
.doReportAsJson() //
|
||||||
.collect(Collectors.toList());
|
.collect(toList());
|
||||||
assertEquals(2, result.size());
|
assertEquals(2, result.size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -199,15 +195,14 @@ public class GenericReportTest {
|
||||||
// expect no orders as all not in date range
|
// expect no orders as all not in date range
|
||||||
Report report = new Report(tx, "fromStockReport");
|
Report report = new Report(tx, "fromStockReport");
|
||||||
List<JsonObject> result = report.filter("Product", "product01").dateRange(dateRange).doReportAsJson()
|
List<JsonObject> result = report.filter("Product", "product01").dateRange(dateRange).doReportAsJson()
|
||||||
.collect(Collectors.toList());
|
.collect(toList());
|
||||||
assertTrue(result.isEmpty());
|
assertTrue(result.isEmpty());
|
||||||
|
|
||||||
// expect 2 orders, as in date range
|
// expect 2 orders, as in date range
|
||||||
to = new Date(LocalDate.of(2017, 3, 1).toEpochDay() * 86400000);
|
to = new Date(LocalDate.of(2017, 3, 1).toEpochDay() * 86400000);
|
||||||
dateRange = new DateRange().from(from, true).to(to, false);
|
dateRange = new DateRange().from(from, true).to(to, false);
|
||||||
report = new Report(tx, "fromStockReport");
|
report = new Report(tx, "fromStockReport");
|
||||||
result = report.filter("Product", "product01").dateRange(dateRange).doReportAsJson()
|
result = report.filter("Product", "product01").dateRange(dateRange).doReportAsJson().collect(toList());
|
||||||
.collect(Collectors.toList());
|
|
||||||
assertEquals(2, result.size());
|
assertEquals(2, result.size());
|
||||||
|
|
||||||
// expect 4 orders, as all in date range
|
// expect 4 orders, as all in date range
|
||||||
|
@ -215,7 +210,7 @@ public class GenericReportTest {
|
||||||
dateRange = new DateRange().from(from, true).to(to, false);
|
dateRange = new DateRange().from(from, true).to(to, false);
|
||||||
report = new Report(tx, "fromStockReport");
|
report = new Report(tx, "fromStockReport");
|
||||||
result = report.filter("Product", "product01", "product02").dateRange(dateRange).doReportAsJson()
|
result = report.filter("Product", "product01", "product02").dateRange(dateRange).doReportAsJson()
|
||||||
.collect(Collectors.toList());
|
.collect(toList());
|
||||||
assertEquals(4, result.size());
|
assertEquals(4, result.size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -228,16 +223,14 @@ public class GenericReportTest {
|
||||||
Report report = new Report(tx, "stockReport");
|
Report report = new Report(tx, "stockReport");
|
||||||
MapOfSets<String, StrolchRootElement> filterCriteria = report.generateFilterCriteria();
|
MapOfSets<String, StrolchRootElement> filterCriteria = report.generateFilterCriteria();
|
||||||
|
|
||||||
|
assertFalse(filterCriteria.containsSet("Location"));
|
||||||
|
assertFalse(filterCriteria.containsSet("Slot"));
|
||||||
assertThat(filterCriteria.getSet("Product").stream().map(StrolchElement::getId).collect(Collectors.toSet()),
|
assertThat(filterCriteria.getSet("Product").stream().map(StrolchElement::getId).collect(Collectors.toSet()),
|
||||||
containsInAnyOrder("product01", "product02"));
|
containsInAnyOrder("product01", "product02"));
|
||||||
assertThat(
|
|
||||||
filterCriteria.getSet("Location").stream().map(StrolchElement::getId).collect(Collectors.toSet()),
|
|
||||||
containsInAnyOrder("location01", "location02"));
|
|
||||||
assertThat(filterCriteria.getSet("Storage").stream().map(StrolchElement::getId).collect(Collectors.toSet()),
|
assertThat(filterCriteria.getSet("Storage").stream().map(StrolchElement::getId).collect(Collectors.toSet()),
|
||||||
containsInAnyOrder("storage01", "storage02"));
|
containsInAnyOrder("storage01", "storage02"));
|
||||||
assertThat(filterCriteria.getSet("Section").stream().map(StrolchElement::getId).collect(Collectors.toSet()),
|
assertThat(filterCriteria.getSet("Section").stream().map(StrolchElement::getId).collect(Collectors.toSet()),
|
||||||
containsInAnyOrder("section001", "section002"));
|
containsInAnyOrder("section001", "section002"));
|
||||||
assertFalse(filterCriteria.containsSet("Slot"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,20 +240,24 @@ public class GenericReportTest {
|
||||||
try (StrolchTransaction tx = runtimeMock.openUserTx(certificate)) {
|
try (StrolchTransaction tx = runtimeMock.openUserTx(certificate)) {
|
||||||
|
|
||||||
Report report = new Report(tx, "stockReport");
|
Report report = new Report(tx, "stockReport");
|
||||||
MapOfSets<String, StrolchRootElement> filterCriteria = report //
|
MapOfSets<String, StrolchRootElement> filterCriteria = report.filter("Product", "product01")
|
||||||
.filter("Product", "product01") //
|
|
||||||
.generateFilterCriteria();
|
.generateFilterCriteria();
|
||||||
|
|
||||||
|
// assert sequence of filter criteria is correct
|
||||||
|
List<String> types = new ArrayList<>(filterCriteria.keySet());
|
||||||
|
assertEquals(3, types.size());
|
||||||
|
assertEquals("Product", types.get(0));
|
||||||
|
assertEquals("Storage", types.get(1));
|
||||||
|
assertEquals("Section", types.get(2));
|
||||||
|
|
||||||
|
assertFalse(filterCriteria.containsSet("Location"));
|
||||||
|
assertFalse(filterCriteria.containsSet("Slot"));
|
||||||
assertThat(filterCriteria.getSet("Product").stream().map(StrolchElement::getId).collect(Collectors.toSet()),
|
assertThat(filterCriteria.getSet("Product").stream().map(StrolchElement::getId).collect(Collectors.toSet()),
|
||||||
containsInAnyOrder("product01"));
|
containsInAnyOrder("product01"));
|
||||||
assertThat(
|
|
||||||
filterCriteria.getSet("Location").stream().map(StrolchElement::getId).collect(Collectors.toSet()),
|
|
||||||
containsInAnyOrder("location01", "location02"));
|
|
||||||
assertThat(filterCriteria.getSet("Storage").stream().map(StrolchElement::getId).collect(Collectors.toSet()),
|
assertThat(filterCriteria.getSet("Storage").stream().map(StrolchElement::getId).collect(Collectors.toSet()),
|
||||||
containsInAnyOrder("storage01", "storage02"));
|
containsInAnyOrder("storage01", "storage02"));
|
||||||
assertThat(filterCriteria.getSet("Section").stream().map(StrolchElement::getId).collect(Collectors.toSet()),
|
assertThat(filterCriteria.getSet("Section").stream().map(StrolchElement::getId).collect(Collectors.toSet()),
|
||||||
containsInAnyOrder("section001", "section002"));
|
containsInAnyOrder("section001", "section002"));
|
||||||
assertFalse(filterCriteria.containsSet("Slot"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
<StrolchPolicies>
|
<StrolchPolicies>
|
||||||
|
|
||||||
<PolicyType Type="ReportFilterPolicy" Api="li.strolch.report.policy.ReportFilterPolicy">
|
<PolicyType Type="ReportFilterPolicy" Api="li.strolch.report.policy.ReportFilterPolicy">
|
||||||
|
<Policy Key="Contains" Class="li.strolch.report.policy.ContainsReportFilter" />
|
||||||
|
<Policy Key="IsIn" Class="li.strolch.report.policy.IsInReportFilter" />
|
||||||
|
<Policy Key="GreaterThan" Class="li.strolch.report.policy.GreaterThanReportFilter" />
|
||||||
<Policy Key="GreaterThan" Class="li.strolch.report.policy.GreaterThanReportFilter" />
|
<Policy Key="GreaterThan" Class="li.strolch.report.policy.GreaterThanReportFilter" />
|
||||||
<Policy Key="LessThan" Class="li.strolch.report.policy.LessThanReportFilter" />
|
<Policy Key="LessThan" Class="li.strolch.report.policy.LessThanReportFilter" />
|
||||||
<Policy Key="Equals" Class="li.strolch.report.policy.EqualsReportFilter" />
|
<Policy Key="Equals" Class="li.strolch.report.policy.EqualsReportFilter" />
|
||||||
|
|
|
@ -15,6 +15,10 @@
|
||||||
<Parameter Id="quantity" Name="Quantity" Type="String" Interpretation="Resource-Ref" Uom="Slot" Value="Bags/parameters/quantity"/>
|
<Parameter Id="quantity" Name="Quantity" Type="String" Interpretation="Resource-Ref" Uom="Slot" Value="Bags/parameters/quantity"/>
|
||||||
</ParameterBag>
|
</ParameterBag>
|
||||||
|
|
||||||
|
<ParameterBag Id="stateFilter" Name="Filter" Type="Filter">
|
||||||
|
<Parameter Id="policy" Name="Filter Policy" Type="String" Interpretation="ReportFilterPolicy" Uom="key:IsIn" Value="valid, invalid"/>
|
||||||
|
<Parameter Id="fieldRef" Name="Field reference" Type="String" Interpretation="Resource-Ref" Uom="Slot" Value="Bags/parameters/state"/>
|
||||||
|
</ParameterBag>
|
||||||
<ParameterBag Id="quantityFilter" Name="Filter" Type="Filter">
|
<ParameterBag Id="quantityFilter" Name="Filter" Type="Filter">
|
||||||
<Parameter Id="policy" Name="Filter Policy" Type="String" Interpretation="ReportFilterPolicy" Uom="key:GreaterThan" Value="0.0"/>
|
<Parameter Id="policy" Name="Filter Policy" Type="String" Interpretation="ReportFilterPolicy" Uom="key:GreaterThan" Value="0.0"/>
|
||||||
<Parameter Id="fieldRef" Name="Field reference" Type="String" Interpretation="Resource-Ref" Uom="Slot" Value="Bags/parameters/quantity"/>
|
<Parameter Id="fieldRef" Name="Field reference" Type="String" Interpretation="Resource-Ref" Uom="Slot" Value="Bags/parameters/quantity"/>
|
||||||
|
@ -37,10 +41,10 @@
|
||||||
</ParameterBag>
|
</ParameterBag>
|
||||||
|
|
||||||
<ParameterBag Id="joins" Name="Joins" Type="Joins">
|
<ParameterBag Id="joins" Name="Joins" Type="Joins">
|
||||||
<Parameter Id="Product" Name="Product" Type="String" Interpretation="Resource-Ref" Uom="Product" Value="Slot"/>
|
<Parameter Id="Product" Index="0" Name="Product" Type="String" Interpretation="Resource-Ref" Uom="Product" Value="Slot"/>
|
||||||
<Parameter Id="Section" Name="Section" Type="String" Interpretation="Resource-Ref" Uom="Section" Value="Slot"/>
|
<Parameter Id="Section" Index="10" Name="Section" Type="String" Interpretation="Resource-Ref" Uom="Section" Value="Slot"/>
|
||||||
<Parameter Id="Storage" Name="Storage" Type="String" Interpretation="Resource-Ref" Uom="Storage" Value="Section"/>
|
<Parameter Id="Storage" Index="5" Name="Storage" Type="String" Interpretation="Resource-Ref" Uom="Storage" Value="Section"/>
|
||||||
<Parameter Id="Location" Name="Location" Type="String" Interpretation="Resource-Ref" Uom="Location" Value="Storage"/>
|
<Parameter Id="Location" Hidden="true" Name="Location" Type="String" Interpretation="Resource-Ref" Uom="Location" Value="Storage"/>
|
||||||
</ParameterBag>
|
</ParameterBag>
|
||||||
|
|
||||||
<Policies>
|
<Policies>
|
||||||
|
@ -184,6 +188,7 @@
|
||||||
<ParameterBag Id="parameters" Name="Parameters" Type="Parameters">
|
<ParameterBag Id="parameters" Name="Parameters" Type="Parameters">
|
||||||
<Parameter Id="quantity" Name="Quantity" Type="Float" Value="20.0"/>
|
<Parameter Id="quantity" Name="Quantity" Type="Float" Value="20.0"/>
|
||||||
<Parameter Id="maxQuantity" Name="max. quantity of items" Type="Float" Value="40.0"/>
|
<Parameter Id="maxQuantity" Name="max. quantity of items" Type="Float" Value="40.0"/>
|
||||||
|
<Parameter Id="state" Name="State" Type="String" Value="valid"/>
|
||||||
</ParameterBag>
|
</ParameterBag>
|
||||||
<ParameterBag Id="relations" Name="Relations" Type="Parameters">
|
<ParameterBag Id="relations" Name="Relations" Type="Parameters">
|
||||||
<Parameter Id="parentSection" Name="Section" Type="String" Interpretation="Resource-Ref" Uom="Section" Value="section001"/>
|
<Parameter Id="parentSection" Name="Section" Type="String" Interpretation="Resource-Ref" Uom="Section" Value="section001"/>
|
||||||
|
@ -195,6 +200,7 @@
|
||||||
<ParameterBag Id="parameters" Name="Parameters" Type="Parameters">
|
<ParameterBag Id="parameters" Name="Parameters" Type="Parameters">
|
||||||
<Parameter Id="quantity" Name="Quantity" Type="Float" Value="18.0"/>
|
<Parameter Id="quantity" Name="Quantity" Type="Float" Value="18.0"/>
|
||||||
<Parameter Id="maxQuantity" Name="max. quantity of items" Type="Float" Value="20.0"/>
|
<Parameter Id="maxQuantity" Name="max. quantity of items" Type="Float" Value="20.0"/>
|
||||||
|
<Parameter Id="state" Name="State" Type="String" Value="valid"/>
|
||||||
</ParameterBag>
|
</ParameterBag>
|
||||||
<ParameterBag Id="relations" Name="Relations" Type="Parameters">
|
<ParameterBag Id="relations" Name="Relations" Type="Parameters">
|
||||||
<Parameter Id="parentSection" Name="Section" Type="String" Interpretation="Resource-Ref" Uom="Section" Value="section001"/>
|
<Parameter Id="parentSection" Name="Section" Type="String" Interpretation="Resource-Ref" Uom="Section" Value="section001"/>
|
||||||
|
@ -206,6 +212,7 @@
|
||||||
<ParameterBag Id="parameters" Name="Parameters" Type="Parameters">
|
<ParameterBag Id="parameters" Name="Parameters" Type="Parameters">
|
||||||
<Parameter Id="quantity" Name="Quantity" Type="Float" Value="11.0"/>
|
<Parameter Id="quantity" Name="Quantity" Type="Float" Value="11.0"/>
|
||||||
<Parameter Id="maxQuantity" Name="max. quantity of items" Type="Float" Value="40.0"/>
|
<Parameter Id="maxQuantity" Name="max. quantity of items" Type="Float" Value="40.0"/>
|
||||||
|
<Parameter Id="state" Name="State" Type="String" Value="valid"/>
|
||||||
</ParameterBag>
|
</ParameterBag>
|
||||||
<ParameterBag Id="relations" Name="Relations" Type="Parameters">
|
<ParameterBag Id="relations" Name="Relations" Type="Parameters">
|
||||||
<Parameter Id="parentSection" Name="Section" Type="String" Interpretation="Resource-Ref" Uom="Section" Value="section002"/>
|
<Parameter Id="parentSection" Name="Section" Type="String" Interpretation="Resource-Ref" Uom="Section" Value="section002"/>
|
||||||
|
@ -217,6 +224,7 @@
|
||||||
<ParameterBag Id="parameters" Name="Parameters" Type="Parameters">
|
<ParameterBag Id="parameters" Name="Parameters" Type="Parameters">
|
||||||
<Parameter Id="quantity" Name="Quantity" Type="Float" Value="16.0"/>
|
<Parameter Id="quantity" Name="Quantity" Type="Float" Value="16.0"/>
|
||||||
<Parameter Id="maxQuantity" Name="max. quantity of items" Type="Float" Value="20.0"/>
|
<Parameter Id="maxQuantity" Name="max. quantity of items" Type="Float" Value="20.0"/>
|
||||||
|
<Parameter Id="state" Name="State" Type="String" Value="valid"/>
|
||||||
</ParameterBag>
|
</ParameterBag>
|
||||||
<ParameterBag Id="relations" Name="Relations" Type="Parameters">
|
<ParameterBag Id="relations" Name="Relations" Type="Parameters">
|
||||||
<Parameter Id="parentSection" Name="Section" Type="String" Interpretation="Resource-Ref" Uom="Section" Value="section002"/>
|
<Parameter Id="parentSection" Name="Section" Type="String" Interpretation="Resource-Ref" Uom="Section" Value="section002"/>
|
||||||
|
@ -228,6 +236,7 @@
|
||||||
<ParameterBag Id="parameters" Name="Parameters" Type="Parameters">
|
<ParameterBag Id="parameters" Name="Parameters" Type="Parameters">
|
||||||
<Parameter Id="quantity" Name="Quantity" Type="Float" Value="0.0"/>
|
<Parameter Id="quantity" Name="Quantity" Type="Float" Value="0.0"/>
|
||||||
<Parameter Id="maxQuantity" Name="max. quantity of items" Type="Float" Value="20.0"/>
|
<Parameter Id="maxQuantity" Name="max. quantity of items" Type="Float" Value="20.0"/>
|
||||||
|
<Parameter Id="state" Name="State" Type="String" Value="valid"/>
|
||||||
</ParameterBag>
|
</ParameterBag>
|
||||||
<ParameterBag Id="relations" Name="Relations" Type="Parameters">
|
<ParameterBag Id="relations" Name="Relations" Type="Parameters">
|
||||||
<Parameter Id="parentSection" Name="Section" Type="String" Interpretation="Resource-Ref" Uom="Section" Value="section002"/>
|
<Parameter Id="parentSection" Name="Section" Type="String" Interpretation="Resource-Ref" Uom="Section" Value="section002"/>
|
||||||
|
@ -239,6 +248,7 @@
|
||||||
<ParameterBag Id="parameters" Name="Parameters" Type="Parameters">
|
<ParameterBag Id="parameters" Name="Parameters" Type="Parameters">
|
||||||
<Parameter Id="quantity" Name="Quantity" Type="Float" Value="22.0"/>
|
<Parameter Id="quantity" Name="Quantity" Type="Float" Value="22.0"/>
|
||||||
<Parameter Id="maxQuantity" Name="max. quantity of items" Type="Float" Value="20.0"/>
|
<Parameter Id="maxQuantity" Name="max. quantity of items" Type="Float" Value="20.0"/>
|
||||||
|
<Parameter Id="state" Name="State" Type="String" Value="valid"/>
|
||||||
</ParameterBag>
|
</ParameterBag>
|
||||||
<ParameterBag Id="relations" Name="Relations" Type="Parameters">
|
<ParameterBag Id="relations" Name="Relations" Type="Parameters">
|
||||||
<Parameter Id="parentSection" Name="Section" Type="String" Interpretation="Resource-Ref" Uom="Section" Value="section002"/>
|
<Parameter Id="parentSection" Name="Section" Type="String" Interpretation="Resource-Ref" Uom="Section" Value="section002"/>
|
||||||
|
|
Loading…
Reference in New Issue