diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericDayAssignment.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericDayAssignment.java index 3a08b62db..ad8f87d6a 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericDayAssignment.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericDayAssignment.java @@ -49,6 +49,7 @@ public class GenericDayAssignment extends DayAssignment { for (GenericDayAssignment a : assignemnts) { GenericDayAssignment created = create(a.getDay(), a.getHours(), a .getResource()); + created.setConsolidated(a.isConsolidated()); created.setGenericResourceAllocation(newAllocation); created.associateToResource(); result.add(created); diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericResourceAllocation.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericResourceAllocation.java index b9d17cd44..3478ab51b 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericResourceAllocation.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericResourceAllocation.java @@ -380,4 +380,12 @@ public class GenericResourceAllocation extends return result; } + public void overrideConsolidatedDayAssignments( + GenericResourceAllocation origin) { + if (origin != null) { + this.genericDayAssignments = GenericDayAssignment.copy(this, origin + .getConsolidatedAssignments()); + } + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ResourceAllocation.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ResourceAllocation.java index ae8a1d7d5..3701a5d22 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ResourceAllocation.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ResourceAllocation.java @@ -22,11 +22,13 @@ package org.navalplanner.business.planner.entities; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -423,14 +425,14 @@ public abstract class ResourceAllocation extends @Override public void allocate(ResourcesPerDay resourcesPerDay) { Task currentTask = getTask(); - LocalDate startInclusive = new LocalDate(currentTask - .getStartDate()); + LocalDate startInclusive = currentTask + .getFirstDayNotConsolidated(); List assignmentsCreated = createAssignments( - resourcesPerDay, startInclusive, - endExclusive); + resourcesPerDay, startInclusive, endExclusive); resetAssignmentsTo(assignmentsCreated); setResourcesPerDay(calculateResourcesPerDayFromAssignments(getAssignments())); } + }; } @@ -485,7 +487,7 @@ public abstract class ResourceAllocation extends } private void allocate(LocalDate end, int hours) { - LocalDate startInclusive = new LocalDate(getTask().getStartDate()); + LocalDate startInclusive = getTask().getFirstDayNotConsolidated(); List assignmentsCreated = createAssignments(startInclusive, end, hours); resetAssignmentsTo(assignmentsCreated); @@ -494,10 +496,10 @@ public abstract class ResourceAllocation extends private void allocate(LocalDate startInclusive, LocalDate endExclusive, int hours) { - List assignmentsCreated = createAssignments(startInclusive, - endExclusive, hours); - resetAssigmentsForInterval(startInclusive, endExclusive, - assignmentsCreated); + LocalDate start = Collections.max(Arrays.asList(startInclusive, + getTask().getFirstDayNotConsolidated())); + List assignmentsCreated = createAssignments(start, endExclusive, hours); + resetAssigmentsForInterval(start, endExclusive, assignmentsCreated); } protected abstract AvailabilityTimeLine getResourcesAvailability(); @@ -595,19 +597,32 @@ public abstract class ResourceAllocation extends } private void resetAssignmentsTo(List assignments) { - removingAssignments(getAssignments()); + removingAssignments((List) removeConsolidated(getAssignments())); addingAssignments(assignments); setOriginalTotalAssigment(getAssignedHours()); } protected void resetAssigmentsForInterval(LocalDate startInclusive, LocalDate endExclusive, List assignmentsCreated) { - removingAssignments(getAssignments(startInclusive, endExclusive)); + removingAssignments(removeConsolidated(getAssignments(startInclusive, + endExclusive))); addingAssignments(assignmentsCreated); setResourcesPerDay(calculateResourcesPerDayFromAssignments(getAssignments())); setOriginalTotalAssigment(getAssignedHours()); } + private List removeConsolidated( + List assignments) { + for (Iterator iterator = assignments + .iterator(); iterator.hasNext();) { + DayAssignment dayAssignment = (DayAssignment) iterator.next(); + if (dayAssignment.isConsolidated()) { + iterator.remove(); + } + } + return assignments; + } + public void removeLimitingDayAssignments() { allocateLimitingDayAssignments(Collections.emptyList()); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/SpecificDayAssignment.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/SpecificDayAssignment.java index 9e14e5737..1a1f00e69 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/SpecificDayAssignment.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/SpecificDayAssignment.java @@ -42,6 +42,7 @@ public class SpecificDayAssignment extends DayAssignment { for (SpecificDayAssignment s : specificDaysAssignment) { SpecificDayAssignment created = create(s.getDay(), s.getHours(), s .getResource()); + created.setConsolidated(s.isConsolidated()); created.setSpecificResourceAllocation(allocation); created.associateToResource(); result.add(created); diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/SpecificResourceAllocation.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/SpecificResourceAllocation.java index 964d65e35..9588a0f42 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/SpecificResourceAllocation.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/SpecificResourceAllocation.java @@ -305,4 +305,12 @@ public class SpecificResourceAllocation extends return result; } + public void overrideConsolidatedDayAssignments( + SpecificResourceAllocation origin) { + if (origin != null) { + this.specificDaysAssignment = SpecificDayAssignment.copy(this, + origin.getConsolidatedAssignments()); + } + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/AllocatorForSpecifiedResourcesPerDayAndHours.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/AllocatorForSpecifiedResourcesPerDayAndHours.java index 09e224e23..f91b788d2 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/AllocatorForSpecifiedResourcesPerDayAndHours.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/AllocatorForSpecifiedResourcesPerDayAndHours.java @@ -59,7 +59,7 @@ public abstract class AllocatorForSpecifiedResourcesPerDayAndHours { } public LocalDate untilAllocating(int hoursToAllocate) { - LocalDate start = LocalDate.fromDateFields(task.getStartDate()); + LocalDate start = task.getFirstDayNotConsolidated(); int i = 0; int maxDaysElapsed = 0; for (HoursPerAllocation each : hoursPerAllocation(start, diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/GenericAllocationRow.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/GenericAllocationRow.java index 259e90bc4..711723bc7 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/GenericAllocationRow.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/GenericAllocationRow.java @@ -37,7 +37,6 @@ import org.navalplanner.business.planner.entities.allocationalgorithms.Resources import org.navalplanner.business.resources.daos.IResourceDAO; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.Resource; -import org.navalplanner.web.resourceload.ResourceLoadModel; /** * The information required for creating a {@link GenericResourceAllocation} @@ -118,6 +117,7 @@ public class GenericAllocationRow extends AllocationRow { GenericResourceAllocation origin = (GenericResourceAllocation) getOrigin(); if (origin != null) { result.overrideAssignedHoursForResource(origin); + result.overrideConsolidatedDayAssignments(origin); } return result; } @@ -136,4 +136,5 @@ public class GenericAllocationRow extends AllocationRow { public List getAssociatedResources() { return resources; } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/SpecificAllocationRow.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/SpecificAllocationRow.java index 63a9a0677..54427cd52 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/SpecificAllocationRow.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/SpecificAllocationRow.java @@ -121,6 +121,8 @@ public class SpecificAllocationRow extends AllocationRow { SpecificResourceAllocation specific = SpecificResourceAllocation .create(task); specific.setResource(resource); + specific + .overrideConsolidatedDayAssignments((SpecificResourceAllocation) getOrigin()); return specific; }