diff --git a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java index c00dd318d..4c29db997 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java +++ b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java @@ -64,6 +64,7 @@ import org.libreplan.business.qualityforms.entities.TaskQualityForm; import org.libreplan.business.requirements.entities.CriterionRequirement; import org.libreplan.business.requirements.entities.DirectCriterionRequirement; import org.libreplan.business.requirements.entities.IndirectCriterionRequirement; +import org.libreplan.business.resources.entities.Criterion; import org.libreplan.business.scenarios.entities.OrderVersion; import org.libreplan.business.scenarios.entities.Scenario; import org.libreplan.business.templates.entities.OrderElementTemplate; @@ -1268,6 +1269,26 @@ public abstract class OrderElement extends IntegrationEntity implements return matches == labels.size(); } + public boolean containsCriterion(String code) { + for (CriterionRequirement criterionRequirement : getDirectCriterionRequirement()) { + if (criterionRequirement.getCriterion().getCode().equals(code)) { + return true; + } + } + + return false; + } + + public boolean containsCriteria(Set criteria) { + Integer matches = 0; + for (Criterion criterion : criteria) { + if (containsCriterion(criterion.getCode())) { + matches++; + } + } + return matches == criteria.size(); + } + public boolean containsMaterialAssignment(String materialCode) { for (MaterialAssignment materialAssignment : getMaterialAssignments()) { if (materialAssignment.getMaterial().getCode().equals(materialCode)) { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/reports/ProjectStatusReportModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/reports/ProjectStatusReportModel.java index 2e62db6a8..ef199cfc4 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/reports/ProjectStatusReportModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/reports/ProjectStatusReportModel.java @@ -97,6 +97,7 @@ public class ProjectStatusReportModel implements IProjectStatusReportModel { List orderElements = order.getAllChildren(); orderElements = filterBySelectedLabels(orderElements); + orderElements = filterBySelectedCriteria(orderElements); for (OrderElement child : orderElements) { dtos.add(calculateDTO(child)); @@ -118,7 +119,7 @@ public class ProjectStatusReportModel implements IProjectStatusReportModel { private void calculateTotalDTO(Order order, List dtos) { - if (getSelectedLabels().isEmpty()) { + if (isNotFiltering()) { totalDTO = calculateDTO(order); } else { EffortDuration estimatedHours = EffortDuration.zero(); @@ -149,6 +150,10 @@ public class ProjectStatusReportModel implements IProjectStatusReportModel { } } + private boolean isNotFiltering() { + return selectedLabels.isEmpty() && selectedCriteria.isEmpty(); + } + private List filterBySelectedLabels( List orderElements) { if (selectedLabels.isEmpty()) { @@ -164,6 +169,21 @@ public class ProjectStatusReportModel implements IProjectStatusReportModel { return result; } + private List filterBySelectedCriteria( + List orderElements) { + if (selectedCriteria.isEmpty()) { + return orderElements; + } + + List result = new ArrayList(); + for (OrderElement orderElement : orderElements) { + if (orderElement.containsCriteria(selectedCriteria)) { + result.add(orderElement); + } + } + return result; + } + private EffortDuration addIfNotNull(EffortDuration total, EffortDuration other) { if (other == null) {