From 825bae5f2b1c83e22691ec222023dd3bd4f1c4cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Tue, 3 Jan 2012 22:14:18 +0100 Subject: [PATCH] Allow to include or exclude DerivedDayAssignments It's now possible to specify if derived assignments are included or not when retrieving day assignments from a Task, Order and so on. --- .../business/orders/entities/Order.java | 12 ++++--- .../planner/entities/DayAssignment.java | 32 +++++++++++++++++++ .../planner/entities/HoursCostCalculator.java | 5 +-- .../planner/entities/TaskElement.java | 9 ++++-- .../CompletedEstimatedHoursPerTaskDTO.java | 3 +- .../dtos/SchedulingProgressPerOrderDTO.java | 4 ++- .../dtos/WorkingArrangementsPerOrderDTO.java | 3 +- .../dtos/WorkingProgressPerTaskDTO.java | 3 +- .../web/planner/order/OrderPlanningModel.java | 7 ++-- .../planner/order/PlanningStateCreator.java | 6 ++-- 10 files changed, 67 insertions(+), 17 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java index 759067af7..5fa6f66fa 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java +++ b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java @@ -44,6 +44,7 @@ import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.externalcompanies.entities.ExternalCompany; import org.libreplan.business.orders.daos.IOrderDAO; import org.libreplan.business.planner.entities.DayAssignment; +import org.libreplan.business.planner.entities.DayAssignment.FilterType; import org.libreplan.business.planner.entities.Task; import org.libreplan.business.planner.entities.TaskElement; import org.libreplan.business.planner.entities.TaskGroup; @@ -348,22 +349,23 @@ public class Order extends OrderLineGroup implements Comparable { return true; } - public List getDayAssignments() { + public List getDayAssignments(FilterType filter) { List dayAssignments = new ArrayList(); for (OrderElement orderElement : getAllOrderElements()) { Set taskElements = orderElement.getTaskElements(); for (TaskElement taskElement : taskElements) { if (taskElement instanceof Task) { - dayAssignments.addAll(taskElement.getDayAssignments()); + dayAssignments + .addAll(taskElement.getDayAssignments(filter)); } } } - return dayAssignments; + return DayAssignment.filter(dayAssignments, filter); } - public Set getResources() { + public Set getResources(FilterType filter) { Set resources = new HashSet(); - for (DayAssignment dayAssignment : getDayAssignments()) { + for (DayAssignment dayAssignment : getDayAssignments(filter)) { resources.add(dayAssignment.getResource()); } return resources; diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/DayAssignment.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/DayAssignment.java index 1581c24bb..6a60dbce4 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/DayAssignment.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/DayAssignment.java @@ -49,6 +49,38 @@ import org.libreplan.business.workingday.EffortDuration; public abstract class DayAssignment extends BaseEntity { + public enum FilterType { + KEEP_ALL { + @Override + public boolean accepts(DayAssignment each) { + return true; + } + }, + WITHOUT_DERIVED { + @Override + public boolean accepts(DayAssignment each) { + return !(each instanceof DerivedDayAssignment); + } + }; + + public abstract boolean accepts(DayAssignment each); + } + + public static List filter( + Collection assignments, + FilterType filter) { + if (filter == null || filter.equals(FilterType.KEEP_ALL)) { + return new ArrayList(assignments); + } + List result = new ArrayList(); + for (DayAssignment each : assignments) { + if (filter.accepts(each)) { + result.add(each); + } + } + return result; + } + public static List getAtInterval( List orderedAssignments, LocalDate startInclusive, LocalDate endExclusive) { diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/HoursCostCalculator.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/HoursCostCalculator.java index d614b5c30..e388dc138 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/HoursCostCalculator.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/HoursCostCalculator.java @@ -32,6 +32,7 @@ import java.util.TreeMap; import org.joda.time.LocalDate; import org.libreplan.business.advance.entities.AdvanceMeasurement; import org.libreplan.business.advance.entities.DirectAdvanceAssignment; +import org.libreplan.business.planner.entities.DayAssignment.FilterType; import org.libreplan.business.workreports.daos.IWorkReportLineDAO; import org.libreplan.business.workreports.entities.WorkReportLine; import org.springframework.beans.factory.annotation.Autowired; @@ -106,8 +107,8 @@ public class HoursCostCalculator implements ICostCalculator { SortedMap result = new TreeMap(); - List dayAssignments = task.getDayAssignments(); - + List dayAssignments = task + .getDayAssignments(FilterType.WITHOUT_DERIVED); if (dayAssignments.isEmpty()) { return result; } diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskElement.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskElement.java index e9cd16154..3a0617061 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskElement.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskElement.java @@ -548,13 +548,18 @@ public abstract class TaskElement extends BaseEntity { result.put(date, current.plus(duration)); } - public List getDayAssignments() { + public List getDayAssignments(DayAssignment.FilterType filter) { List dayAssignments = new ArrayList(); Set> resourceAllocations = getSatisfiedResourceAllocations(); for (ResourceAllocation resourceAllocation : resourceAllocations) { dayAssignments.addAll(resourceAllocation.getAssignments()); + Set derivedAllocations = resourceAllocation + .getDerivedAllocations(); + for (DerivedAllocation each : derivedAllocations) { + dayAssignments.addAll(each.getAssignments()); + } } - return dayAssignments; + return DayAssignment.filter(dayAssignments, filter); } public boolean isSubcontracted() { diff --git a/libreplan-business/src/main/java/org/libreplan/business/reports/dtos/CompletedEstimatedHoursPerTaskDTO.java b/libreplan-business/src/main/java/org/libreplan/business/reports/dtos/CompletedEstimatedHoursPerTaskDTO.java index 622c275cf..6cc55bf5f 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/reports/dtos/CompletedEstimatedHoursPerTaskDTO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/reports/dtos/CompletedEstimatedHoursPerTaskDTO.java @@ -26,6 +26,7 @@ import java.util.List; import org.joda.time.LocalDate; import org.libreplan.business.common.Registry; import org.libreplan.business.planner.entities.DayAssignment; +import org.libreplan.business.planner.entities.DayAssignment.FilterType; import org.libreplan.business.planner.entities.Task; import org.libreplan.business.workingday.EffortDuration; import org.libreplan.business.workreports.daos.IWorkReportLineDAO; @@ -74,7 +75,7 @@ public class CompletedEstimatedHoursPerTaskDTO { public Integer calculatePlannedHours(Task task, LocalDate date) { Integer result = new Integer(0); - final List dayAssignments = task.getDayAssignments(); + final List dayAssignments = task.getDayAssignments(FilterType.WITHOUT_DERIVED); if (dayAssignments.isEmpty()) { return result; } diff --git a/libreplan-business/src/main/java/org/libreplan/business/reports/dtos/SchedulingProgressPerOrderDTO.java b/libreplan-business/src/main/java/org/libreplan/business/reports/dtos/SchedulingProgressPerOrderDTO.java index 0134f1c43..17ced88ec 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/reports/dtos/SchedulingProgressPerOrderDTO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/reports/dtos/SchedulingProgressPerOrderDTO.java @@ -34,6 +34,7 @@ import org.libreplan.business.common.Registry; import org.libreplan.business.orders.daos.IOrderDAO; import org.libreplan.business.orders.entities.Order; import org.libreplan.business.planner.entities.DayAssignment; +import org.libreplan.business.planner.entities.DayAssignment.FilterType; import org.libreplan.business.planner.entities.Task; import org.libreplan.business.workingday.EffortDuration; import org.libreplan.business.workreports.daos.IWorkReportLineDAO; @@ -177,7 +178,8 @@ realHours } public Integer calculatePlannedHours(Task task, LocalDate date) { - final List dayAssignments = task.getDayAssignments(); + final List dayAssignments = task + .getDayAssignments(FilterType.WITHOUT_DERIVED); return DayAssignment.sum(removeAfterDate(dayAssignments, date)) .roundToHours(); } diff --git a/libreplan-business/src/main/java/org/libreplan/business/reports/dtos/WorkingArrangementsPerOrderDTO.java b/libreplan-business/src/main/java/org/libreplan/business/reports/dtos/WorkingArrangementsPerOrderDTO.java index 5d66a7fea..5d90c88af 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/reports/dtos/WorkingArrangementsPerOrderDTO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/reports/dtos/WorkingArrangementsPerOrderDTO.java @@ -34,6 +34,7 @@ import org.libreplan.business.common.Registry; import org.libreplan.business.orders.entities.Order; import org.libreplan.business.orders.entities.OrderElement; import org.libreplan.business.planner.entities.DayAssignment; +import org.libreplan.business.planner.entities.DayAssignment.FilterType; import org.libreplan.business.planner.entities.Task; import org.libreplan.business.planner.entities.TaskElement; import org.libreplan.business.workingday.EffortDuration; @@ -185,7 +186,7 @@ public class WorkingArrangementsPerOrderDTO { } public Integer calculatePlannedHours(Task task, final LocalDate date) { - final List dayAssignments = task.getDayAssignments(); + final List dayAssignments = task.getDayAssignments(FilterType.WITHOUT_DERIVED); return DayAssignment.sum(removeAfterDate(dayAssignments, date)) .roundToHours(); } diff --git a/libreplan-business/src/main/java/org/libreplan/business/reports/dtos/WorkingProgressPerTaskDTO.java b/libreplan-business/src/main/java/org/libreplan/business/reports/dtos/WorkingProgressPerTaskDTO.java index bd5890a75..855607707 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/reports/dtos/WorkingProgressPerTaskDTO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/reports/dtos/WorkingProgressPerTaskDTO.java @@ -28,6 +28,7 @@ import java.util.List; import org.joda.time.LocalDate; import org.libreplan.business.common.Registry; import org.libreplan.business.planner.entities.DayAssignment; +import org.libreplan.business.planner.entities.DayAssignment.FilterType; import org.libreplan.business.planner.entities.Task; import org.libreplan.business.workingday.EffortDuration; import org.libreplan.business.workreports.daos.IWorkReportLineDAO; @@ -109,7 +110,7 @@ realHours public Integer calculatePlannedHours(Task task, LocalDate date) { Integer result = new Integer(0); - final List dayAssignments = task.getDayAssignments(); + final List dayAssignments = task.getDayAssignments(FilterType.WITHOUT_DERIVED); if (dayAssignments.isEmpty()) { return result; } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningModel.java index de9750c94..b7c58fb0d 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningModel.java @@ -62,6 +62,7 @@ import org.libreplan.business.planner.chart.ContiguousDaysLine; import org.libreplan.business.planner.chart.ContiguousDaysLine.OnDay; import org.libreplan.business.planner.chart.ResourceLoadChartData; import org.libreplan.business.planner.entities.DayAssignment; +import org.libreplan.business.planner.entities.DayAssignment.FilterType; import org.libreplan.business.planner.entities.ICostCalculator; import org.libreplan.business.planner.entities.Task; import org.libreplan.business.planner.entities.TaskElement; @@ -1141,7 +1142,8 @@ public class OrderPlanningModel implements IOrderPlanningModel { @Override protected Plotinfo[] getPlotInfos(Interval interval) { - List orderDayAssignments = order.getDayAssignments(); + List orderDayAssignments = order + .getDayAssignments(FilterType.WITHOUT_DERIVED); ContiguousDaysLine> orderAssignments = ContiguousDaysLine .byDay(orderDayAssignments); ContiguousDaysLine> allAssignments = allAssignments(orderAssignments); @@ -1249,7 +1251,8 @@ public class OrderPlanningModel implements IOrderPlanningModel { AvailabilityTimeLine.Interval interval = AvailabilityTimeLine.Interval .create(startInclusive, endExclusive); List resourcesDayAssignments = new ArrayList(); - for (Resource resource : order.getResources()) { + for (Resource resource : order + .getResources(FilterType.WITHOUT_DERIVED)) { resourcesDayAssignments.addAll(insideInterval(interval, planningState.getAssignmentsCalculator() .getAssignments(resource))); diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/PlanningStateCreator.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/PlanningStateCreator.java index 46a0715ec..ca92d0934 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/PlanningStateCreator.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/PlanningStateCreator.java @@ -51,6 +51,7 @@ import org.libreplan.business.planner.daos.ITaskElementDAO; import org.libreplan.business.planner.daos.ITaskSourceDAO; import org.libreplan.business.planner.entities.AssignmentFunction; import org.libreplan.business.planner.entities.DayAssignment; +import org.libreplan.business.planner.entities.DayAssignment.FilterType; import org.libreplan.business.planner.entities.Dependency; import org.libreplan.business.planner.entities.DerivedAllocation; import org.libreplan.business.planner.entities.GenericResourceAllocation; @@ -259,7 +260,8 @@ public class PlanningStateCreator { TaskGroup rootTask = orderReloaded.getAssociatedTaskElement(); if (rootTask != null) { forceLoadOf(rootTask); - forceLoadDayAssignments(orderReloaded.getResources()); + forceLoadDayAssignments(orderReloaded + .getResources(FilterType.WITHOUT_DERIVED)); forceLoadOfDepedenciesCollections(rootTask); forceLoadOfLabels(Arrays.asList((TaskElement) rootTask)); } @@ -396,7 +398,7 @@ public class PlanningStateCreator { return new UsingOwnerScenario(currentScenario, orderReloaded); } final List previousAssignments = orderReloaded - .getDayAssignments(); + .getDayAssignments(DayAssignment.FilterType.KEEP_ALL); OrderVersion newVersion = OrderVersion .createInitialVersion(currentScenario);