ItEr60S15AnA04S11RFAdaptacionFiltradosInformes : Changes the CompletedEstimatedHoursPerTask report.
It adds the filtered by labels and criterions to the CompletedEstimatedHoursPerTask report.
This commit is contained in:
parent
a6668c65d6
commit
43c079ce9f
6 changed files with 417 additions and 8 deletions
|
|
@ -26,7 +26,10 @@ import java.util.List;
|
|||
import org.navalplanner.business.common.daos.IIntegrationEntityDAO;
|
||||
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
|
||||
import org.navalplanner.business.orders.entities.Order;
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
import org.navalplanner.business.planner.entities.Task;
|
||||
import org.navalplanner.business.reports.dtos.OrderCostsPerResourceDTO;
|
||||
import org.navalplanner.business.resources.entities.Criterion;
|
||||
import org.navalplanner.business.scenarios.entities.Scenario;
|
||||
import org.navalplanner.business.users.entities.User;
|
||||
|
||||
|
|
@ -85,4 +88,6 @@ public interface IOrderDAO extends IIntegrationEntityDAO<Order> {
|
|||
|
||||
List<Order> getOrdersByScenario(Scenario scenario);
|
||||
|
||||
List<Task> getFilteredTask(List<OrderElement> orderElements,
|
||||
List<Criterion> criterions);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,8 +36,11 @@ import org.navalplanner.business.costcategories.daos.CostCategoryDAO;
|
|||
import org.navalplanner.business.costcategories.daos.ITypeOfWorkHoursDAO;
|
||||
import org.navalplanner.business.costcategories.entities.TypeOfWorkHours;
|
||||
import org.navalplanner.business.orders.entities.Order;
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
import org.navalplanner.business.planner.daos.ITaskSourceDAO;
|
||||
import org.navalplanner.business.planner.entities.Task;
|
||||
import org.navalplanner.business.reports.dtos.OrderCostsPerResourceDTO;
|
||||
import org.navalplanner.business.resources.entities.Criterion;
|
||||
import org.navalplanner.business.scenarios.entities.Scenario;
|
||||
import org.navalplanner.business.users.daos.IOrderAuthorizationDAO;
|
||||
import org.navalplanner.business.users.entities.OrderAuthorization;
|
||||
|
|
@ -289,4 +292,47 @@ public class OrderDAO extends IntegrationEntityDAO<Order> implements
|
|||
public List<Order> getOrdersByScenario(Scenario scenario) {
|
||||
return existsInScenario(getOrders(), scenario);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public List<Task> getFilteredTask(List<OrderElement> orderElements,
|
||||
List<Criterion> criterions) {
|
||||
|
||||
|
||||
String strQuery = "SELECT taskSource.task "
|
||||
+ "FROM OrderElement orderElement, TaskSource taskSource, Task task "
|
||||
+ "LEFT OUTER JOIN taskSource.schedulingData.orderElement taskSourceOrderElement "
|
||||
+ "LEFT OUTER JOIN taskSource.task taskElement "
|
||||
+ "WHERE taskSourceOrderElement.id = orderElement.id "
|
||||
+ "AND taskElement.id = task.id ";
|
||||
|
||||
if (orderElements != null && !orderElements.isEmpty()) {
|
||||
strQuery += " AND orderElement IN (:orderElements) ";
|
||||
} else {
|
||||
return new ArrayList<Task>();
|
||||
}
|
||||
|
||||
// Set Criterions
|
||||
if (criterions != null && !criterions.isEmpty()) {
|
||||
strQuery += " AND (EXISTS (FROM task.resourceAllocations as allocation, GenericResourceAllocation as generic "
|
||||
+ " WHERE generic.id = allocation.id "
|
||||
+ " AND EXISTS( FROM generic.criterions criterion WHERE criterion IN (:criterions))))";
|
||||
}
|
||||
|
||||
// Order by
|
||||
strQuery += "ORDER BY task.name";
|
||||
|
||||
// Set parameters
|
||||
Query query = getSession().createQuery(strQuery);
|
||||
if (orderElements != null && !orderElements.isEmpty()) {
|
||||
query.setParameterList("orderElements", orderElements);
|
||||
}
|
||||
|
||||
if (criterions != null && !criterions.isEmpty()) {
|
||||
query.setParameterList("criterions", criterions);
|
||||
}
|
||||
|
||||
// Get result
|
||||
return query.list();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,10 @@ import java.util.Map;
|
|||
|
||||
import net.sf.jasperreports.engine.JRDataSource;
|
||||
|
||||
import org.navalplanner.business.labels.entities.Label;
|
||||
import org.navalplanner.business.orders.entities.Order;
|
||||
import org.navalplanner.business.resources.entities.Criterion;
|
||||
import org.navalplanner.web.common.Util;
|
||||
import org.navalplanner.web.common.components.ExtendedJasperreport;
|
||||
import org.navalplanner.web.common.components.bandboxsearch.BandboxSearch;
|
||||
import org.zkoss.zk.ui.Component;
|
||||
|
|
@ -47,16 +50,23 @@ public class CompletedEstimatedHoursPerTaskController extends NavalplannerReport
|
|||
|
||||
private ICompletedEstimatedHoursPerTaskModel completedEstimatedHoursPerTaskModel;
|
||||
|
||||
private Listbox lbOrders;
|
||||
private Listbox lbCriterions;
|
||||
|
||||
private Datebox referenceDate;
|
||||
|
||||
private BandboxSearch bandboxSelectOrder;
|
||||
|
||||
private BandboxSearch bdLabels;
|
||||
|
||||
private Listbox lbLabels;
|
||||
|
||||
private BandboxSearch bdCriterions;
|
||||
|
||||
@Override
|
||||
public void doAfterCompose(Component comp) throws Exception {
|
||||
super.doAfterCompose(comp);
|
||||
comp.setVariable("controller", this, true);
|
||||
completedEstimatedHoursPerTaskModel.init();
|
||||
}
|
||||
|
||||
public List<Order> getOrders() {
|
||||
|
|
@ -72,7 +82,8 @@ public class CompletedEstimatedHoursPerTaskController extends NavalplannerReport
|
|||
protected JRDataSource getDataSource() {
|
||||
return completedEstimatedHoursPerTaskModel
|
||||
.getCompletedEstimatedHoursReportPerTask(getSelectedOrder(),
|
||||
getDeadlineDate());
|
||||
getDeadlineDate(), getSelectedLabels(),
|
||||
getSelectedCriterions());
|
||||
}
|
||||
|
||||
private Order getSelectedOrder() {
|
||||
|
|
@ -100,9 +111,68 @@ public class CompletedEstimatedHoursPerTaskController extends NavalplannerReport
|
|||
public void showReport(ExtendedJasperreport jasperreport) {
|
||||
final Order order = getSelectedOrder();
|
||||
if (order == null) {
|
||||
throw new WrongValueException(lbOrders, _("Please, select an order"));
|
||||
throw new WrongValueException(bandboxSelectOrder,
|
||||
_("Please, select an order"));
|
||||
}
|
||||
super.showReport(jasperreport);
|
||||
}
|
||||
|
||||
public List<Label> getAllLabels() {
|
||||
return completedEstimatedHoursPerTaskModel.getAllLabels();
|
||||
}
|
||||
|
||||
public void onSelectLabel() {
|
||||
Label label = (Label) bdLabels.getSelectedElement();
|
||||
if (label == null) {
|
||||
throw new WrongValueException(bdLabels, _("please, select a label"));
|
||||
}
|
||||
boolean result = completedEstimatedHoursPerTaskModel
|
||||
.addSelectedLabel(label);
|
||||
if (!result) {
|
||||
throw new WrongValueException(bdLabels,
|
||||
_("This label has already been added."));
|
||||
} else {
|
||||
Util.reloadBindings(lbLabels);
|
||||
}
|
||||
bdLabels.clear();
|
||||
}
|
||||
|
||||
public void onRemoveLabel(Label label) {
|
||||
completedEstimatedHoursPerTaskModel.removeSelectedLabel(label);
|
||||
Util.reloadBindings(lbLabels);
|
||||
}
|
||||
|
||||
public List<Label> getSelectedLabels() {
|
||||
return completedEstimatedHoursPerTaskModel.getSelectedLabels();
|
||||
}
|
||||
|
||||
public List<Criterion> getSelectedCriterions() {
|
||||
return completedEstimatedHoursPerTaskModel.getSelectedCriterions();
|
||||
}
|
||||
|
||||
public List<Criterion> getAllCriterions() {
|
||||
return completedEstimatedHoursPerTaskModel.getCriterions();
|
||||
}
|
||||
|
||||
public void onSelectCriterion() {
|
||||
Criterion criterion = (Criterion) bdCriterions.getSelectedElement();
|
||||
if (criterion == null) {
|
||||
throw new WrongValueException(bdCriterions,
|
||||
_("please, select a Criterion"));
|
||||
}
|
||||
boolean result = completedEstimatedHoursPerTaskModel
|
||||
.addSelectedCriterion(criterion);
|
||||
if (!result) {
|
||||
throw new WrongValueException(bdCriterions,
|
||||
_("This Criterion has already been added."));
|
||||
} else {
|
||||
Util.reloadBindings(lbCriterions);
|
||||
}
|
||||
}
|
||||
|
||||
public void onRemoveCriterion(Criterion criterion) {
|
||||
completedEstimatedHoursPerTaskModel.removeSelectedCriterion(criterion);
|
||||
Util.reloadBindings(lbCriterions);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,13 +22,17 @@ package org.navalplanner.web.reports;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sf.jasperreports.engine.JRDataSource;
|
||||
import net.sf.jasperreports.engine.JREmptyDataSource;
|
||||
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
|
||||
|
||||
import org.joda.time.LocalDate;
|
||||
import org.navalplanner.business.labels.daos.ILabelDAO;
|
||||
import org.navalplanner.business.labels.entities.Label;
|
||||
import org.navalplanner.business.orders.daos.IOrderDAO;
|
||||
import org.navalplanner.business.orders.entities.Order;
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
|
|
@ -36,6 +40,10 @@ import org.navalplanner.business.planner.daos.ITaskElementDAO;
|
|||
import org.navalplanner.business.planner.entities.Task;
|
||||
import org.navalplanner.business.planner.entities.TaskElement;
|
||||
import org.navalplanner.business.reports.dtos.CompletedEstimatedHoursPerTaskDTO;
|
||||
import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
|
||||
import org.navalplanner.business.resources.entities.Criterion;
|
||||
import org.navalplanner.business.resources.entities.CriterionType;
|
||||
import org.navalplanner.business.resources.entities.ResourceEnum;
|
||||
import org.navalplanner.business.scenarios.IScenarioManager;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
|
|
@ -54,12 +62,45 @@ public class CompletedEstimatedHoursPerTaskModel implements ICompletedEstimatedH
|
|||
@Autowired
|
||||
IOrderDAO orderDAO;
|
||||
|
||||
@Autowired
|
||||
private ILabelDAO labelDAO;
|
||||
|
||||
@Autowired
|
||||
ITaskElementDAO taskDAO;
|
||||
|
||||
@Autowired
|
||||
private IScenarioManager scenarioManager;
|
||||
|
||||
@Autowired
|
||||
private ICriterionTypeDAO criterionTypeDAO;
|
||||
|
||||
private List<Label> selectedLabels = new ArrayList<Label>();
|
||||
|
||||
private List<Criterion> selectedCriterions = new ArrayList<Criterion>();
|
||||
|
||||
private List<Criterion> allCriterions = new ArrayList<Criterion>();
|
||||
|
||||
private List<Label> allLabels = new ArrayList<Label>();
|
||||
|
||||
private static List<ResourceEnum> applicableResources = new ArrayList<ResourceEnum>();
|
||||
|
||||
static {
|
||||
applicableResources.add(ResourceEnum.RESOURCE);
|
||||
applicableResources.add(ResourceEnum.WORKER);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public void init() {
|
||||
selectedCriterions.clear();
|
||||
selectedLabels.clear();
|
||||
|
||||
allLabels.clear();
|
||||
allCriterions.clear();
|
||||
loadAllLabels();
|
||||
loadAllCriterions();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public List<Order> getOrders() {
|
||||
|
|
@ -84,19 +125,18 @@ public class CompletedEstimatedHoursPerTaskModel implements ICompletedEstimatedH
|
|||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public JRDataSource getCompletedEstimatedHoursReportPerTask(
|
||||
Order order, Date deadline) {
|
||||
Order order,
|
||||
Date deadline, List<Label> labels, List<Criterion> criterions) {
|
||||
reattachmentOrder(order);
|
||||
order.useSchedulingDataFor(scenarioManager.getCurrent());
|
||||
LocalDate deadlineLocalDate = new LocalDate(deadline);
|
||||
|
||||
final List<TaskElement> tasks = order.getAllChildrenAssociatedTaskElements();
|
||||
final List<Task> tasks = filteredTaskElements(order, labels, criterions);// order.getAllChildrenAssociatedTaskElements();
|
||||
final List<CompletedEstimatedHoursPerTaskDTO> completedEstimatedHoursPerTaskList =
|
||||
new ArrayList<CompletedEstimatedHoursPerTaskDTO>();
|
||||
for (TaskElement task: tasks) {
|
||||
if(task instanceof Task) {
|
||||
completedEstimatedHoursPerTaskList.add(
|
||||
new CompletedEstimatedHoursPerTaskDTO((Task)task, deadlineLocalDate));
|
||||
}
|
||||
}
|
||||
if (!completedEstimatedHoursPerTaskList.isEmpty()) {
|
||||
return new JRBeanCollectionDataSource(completedEstimatedHoursPerTaskList);
|
||||
|
|
@ -105,4 +145,153 @@ public class CompletedEstimatedHoursPerTaskModel implements ICompletedEstimatedH
|
|||
}
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
private List<Task> filteredTaskElements(Order order,
|
||||
List<Label> labels, List<Criterion> criterions) {
|
||||
List<OrderElement> orderElements = order.getAllChildren();
|
||||
// Filter by labels
|
||||
List<OrderElement> filteredOrderElements = filteredOrderElementsByLabels(
|
||||
orderElements, labels);
|
||||
return orderDAO.getFilteredTask(filteredOrderElements, criterions);
|
||||
}
|
||||
|
||||
private List<OrderElement> filteredOrderElementsByLabels(
|
||||
List<OrderElement> orderElements, List<Label> labels) {
|
||||
if (labels != null && !labels.isEmpty()) {
|
||||
List<OrderElement> filteredOrderElements = new ArrayList<OrderElement>();
|
||||
for (OrderElement orderElement : orderElements) {
|
||||
List<Label> inheritedLabels = getInheritedLabels(orderElement);
|
||||
if (containsAny(labels, inheritedLabels)) {
|
||||
filteredOrderElements.add(orderElement);
|
||||
}
|
||||
}
|
||||
return filteredOrderElements;
|
||||
} else {
|
||||
return orderElements;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean containsAny(List<Label> labelsA, List<Label> labelsB) {
|
||||
for (Label label : labelsB) {
|
||||
if (labelsA.contains(label)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
public List<Label> getInheritedLabels(OrderElement orderElement) {
|
||||
List<Label> result = new ArrayList<Label>();
|
||||
if (orderElement != null) {
|
||||
reattachLabels();
|
||||
result.addAll(orderElement.getLabels());
|
||||
OrderElement parent = orderElement.getParent();
|
||||
while (parent != null) {
|
||||
result.addAll(parent.getLabels());
|
||||
parent = parent.getParent();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private void reattachLabels() {
|
||||
for (Label label : getAllLabels()) {
|
||||
labelDAO.reattach(label);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Label> getAllLabels() {
|
||||
return allLabels;
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
private void loadAllLabels() {
|
||||
allLabels = labelDAO.getAll();
|
||||
// initialize the labels
|
||||
for (Label label : allLabels) {
|
||||
label.getType().getName();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeSelectedLabel(Label label) {
|
||||
this.selectedLabels.remove(label);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addSelectedLabel(Label label) {
|
||||
if (this.selectedLabels.contains(label)) {
|
||||
return false;
|
||||
}
|
||||
this.selectedLabels.add(label);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Label> getSelectedLabels() {
|
||||
return selectedLabels;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Criterion> getCriterions() {
|
||||
return this.allCriterions;
|
||||
}
|
||||
|
||||
private void loadAllCriterions() {
|
||||
List<CriterionType> listTypes = getCriterionTypes();
|
||||
for (CriterionType criterionType : listTypes) {
|
||||
if (criterionType.isEnabled()) {
|
||||
Set<Criterion> listCriterion = getDirectCriterions(criterionType);
|
||||
addCriterionWithItsType(listCriterion);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static Set<Criterion> getDirectCriterions(
|
||||
CriterionType criterionType) {
|
||||
Set<Criterion> criterions = new HashSet<Criterion>();
|
||||
for (Criterion criterion : criterionType.getCriterions()) {
|
||||
if (criterion.getParent() == null) {
|
||||
criterions.add(criterion);
|
||||
}
|
||||
}
|
||||
return criterions;
|
||||
}
|
||||
|
||||
private void addCriterionWithItsType(Set<Criterion> children) {
|
||||
for (Criterion criterion : children) {
|
||||
if (criterion.isActive()) {
|
||||
// Add to the list
|
||||
allCriterions.add(criterion);
|
||||
addCriterionWithItsType(criterion.getChildren());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<CriterionType> getCriterionTypes() {
|
||||
return criterionTypeDAO
|
||||
.getCriterionTypesByResources(applicableResources);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeSelectedCriterion(Criterion criterion) {
|
||||
this.selectedCriterions.remove(criterion);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addSelectedCriterion(Criterion criterion) {
|
||||
if (this.selectedCriterions.contains(criterion)) {
|
||||
return false;
|
||||
}
|
||||
this.selectedCriterions.add(criterion);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Criterion> getSelectedCriterions() {
|
||||
return selectedCriterions;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,9 @@ import java.util.List;
|
|||
|
||||
import net.sf.jasperreports.engine.JRDataSource;
|
||||
|
||||
import org.navalplanner.business.labels.entities.Label;
|
||||
import org.navalplanner.business.orders.entities.Order;
|
||||
import org.navalplanner.business.resources.entities.Criterion;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -34,8 +36,26 @@ import org.navalplanner.business.orders.entities.Order;
|
|||
*/
|
||||
public interface ICompletedEstimatedHoursPerTaskModel {
|
||||
|
||||
JRDataSource getCompletedEstimatedHoursReportPerTask(Order order, Date referenceDate);
|
||||
JRDataSource getCompletedEstimatedHoursReportPerTask(Order order,
|
||||
Date referenceDate, List<Label> labels, List<Criterion> criterions);
|
||||
|
||||
void init();
|
||||
|
||||
List<Order> getOrders();
|
||||
|
||||
List<Label> getAllLabels();
|
||||
|
||||
void removeSelectedLabel(Label label);
|
||||
|
||||
boolean addSelectedLabel(Label label);
|
||||
|
||||
List<Label> getSelectedLabels();
|
||||
|
||||
List<Criterion> getCriterions();
|
||||
|
||||
void removeSelectedCriterion(Criterion criterion);
|
||||
|
||||
boolean addSelectedCriterion(Criterion criterion);
|
||||
|
||||
List<Criterion> getSelectedCriterions();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,6 +74,85 @@
|
|||
</panelchildren>
|
||||
</panel>
|
||||
|
||||
<!-- Assign label -->
|
||||
<panel title="${i18n:_('Filter by labels')}" border="normal"
|
||||
style="overflow:auto">
|
||||
<panelchildren>
|
||||
<vbox>
|
||||
<separator spacing="5px"/>
|
||||
<hbox>
|
||||
<bandboxSearch id="bdLabels" finder="LabelBandboxFinder"
|
||||
model="@{controller.allLabels}" />
|
||||
<button label="${i18n:_('Add')}"
|
||||
onClick="controller.onSelectLabel()"
|
||||
style="margin-top: -4px" />
|
||||
</hbox>
|
||||
</vbox>
|
||||
<separator spacing="10px"/>
|
||||
<listbox id="lbLabels"
|
||||
width="700px"
|
||||
multiple="true"
|
||||
model="@{controller.selectedLabels}">
|
||||
<listhead>
|
||||
<listheader label="${i18n:_('Type')}" align="center" />
|
||||
<listheader label="${i18n:_('Name')}" align="center" />
|
||||
<listheader label="${i18n:_('Operations')}" align="center" width="100px"/>
|
||||
</listhead>
|
||||
<listitem self="@{each='label'}" value="@{label}">
|
||||
<listcell label="@{label.type.name}" />
|
||||
<listcell label="@{label.name}" />
|
||||
<listcell>
|
||||
<button sclass="icono" image="/common/img/ico_borrar1.png"
|
||||
hoverImage="/common/img/ico_borrar.png"
|
||||
tooltiptext="${i18n:_('Delete')}"
|
||||
onClick="controller.onRemoveLabel(self.parent.parent.value);">
|
||||
</button>
|
||||
</listcell>
|
||||
</listitem>
|
||||
</listbox>
|
||||
</panelchildren>
|
||||
</panel>
|
||||
|
||||
<!-- Assign Criterion -->
|
||||
<panel title="${i18n:_('Filter by criterions')}" border="normal"
|
||||
style="overflow:auto">
|
||||
<panelchildren>
|
||||
<vbox>
|
||||
<separator spacing="5px"/>
|
||||
<hbox>
|
||||
<bandboxSearch id="bdCriterions" finder="CriterionBandboxFinder"
|
||||
model="@{controller.allCriterions}" />
|
||||
<button label="${i18n:_('Add')}"
|
||||
onClick="controller.onSelectCriterion()"
|
||||
style="margin-top: -4px" />
|
||||
</hbox>
|
||||
</vbox>
|
||||
<separator spacing="10px"/>
|
||||
<listbox id="lbCriterions"
|
||||
width="700px"
|
||||
multiple="true"
|
||||
model="@{controller.selectedCriterions}">
|
||||
<listhead>
|
||||
<listheader label="${i18n:_('Type')}" align="center" />
|
||||
<listheader label="${i18n:_('Name')}" align="center" />
|
||||
<listheader label="${i18n:_('Operations')}" align="center" width="100px"/>
|
||||
</listhead>
|
||||
<listitem self="@{each='criterion'}" value="@{criterion}">
|
||||
<listcell label="@{criterion.type.name}" />
|
||||
<listcell label="@{criterion.name}" />
|
||||
<listcell>
|
||||
<button sclass="icono" image="/common/img/ico_borrar1.png"
|
||||
hoverImage="/common/img/ico_borrar.png"
|
||||
tooltiptext="${i18n:_('Delete')}"
|
||||
onClick="controller.onRemoveCriterion(self.parent.parent.value);">
|
||||
</button>
|
||||
</listcell>
|
||||
</listitem>
|
||||
</listbox>
|
||||
</panelchildren>
|
||||
</panel>
|
||||
|
||||
<separator spacing="10px" orient="horizontal" />
|
||||
<!-- Select output format -->
|
||||
<panel title="${i18n:_('Format')}" border="normal"
|
||||
style="overflow:auto">
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue