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 1fef601c1..d51b34a6f 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 @@ -219,7 +219,7 @@ public abstract class ResourceAllocation extends } } - public LocalDate untilAllocating(int hoursToAllocate) { + public IntraDayDate untilAllocating(int hoursToAllocate) { AllocatorForSpecifiedResourcesPerDayAndHours allocator = new AllocatorForSpecifiedResourcesPerDayAndHours( task, allocations) { @@ -266,9 +266,7 @@ public abstract class ResourceAllocation extends } }; - IntraDayDate result = allocator - .untilAllocating(hours(hoursToAllocate)); - return result.getDate(); + return allocator.untilAllocating(hours(hoursToAllocate)); } public void allocateOnTaskLength() { diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Task.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Task.java index d04bbe1cd..6bab513f8 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Task.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Task.java @@ -52,6 +52,7 @@ import org.navalplanner.business.resources.entities.Resource; import org.navalplanner.business.resources.entities.Worker; import org.navalplanner.business.scenarios.entities.Scenario; import org.navalplanner.business.util.deepcopy.AfterCopy; +import org.navalplanner.business.workingday.IntraDayDate; /** * @author Óscar González Fernández @@ -498,10 +499,10 @@ public class Task extends TaskElement implements ITaskLeafConstraint { .allocateOnTaskLength(); break; case END_DATE: - LocalDate end = ResourceAllocation + IntraDayDate end = ResourceAllocation .allocating(allocations) .untilAllocating(getAssignedHours()); - setEndDate(end.toDateTimeAtStartOfDay().toDate()); + setIntraDayEndDate(end); break; case RESOURCES_PER_DAY: List hoursModified = strategy diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/AllocationUntilFillingHoursTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/AllocationUntilFillingHoursTest.java index 925b1ddae..4568ce029 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/AllocationUntilFillingHoursTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/AllocationUntilFillingHoursTest.java @@ -25,7 +25,9 @@ import static org.easymock.classextension.EasyMock.createNiceMock; import static org.easymock.classextension.EasyMock.replay; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; import static org.navalplanner.business.test.planner.entities.DayAssignmentMatchers.haveHours; +import static org.navalplanner.business.workingday.EffortDuration.hours; import java.math.BigDecimal; import java.util.ArrayList; @@ -42,6 +44,7 @@ import org.navalplanner.business.planner.entities.allocationalgorithms.Resources import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.Resource; import org.navalplanner.business.resources.entities.Worker; +import org.navalplanner.business.workingday.IntraDayDate; import org.navalplanner.business.workingday.ResourcesPerDay; public class AllocationUntilFillingHoursTest { @@ -75,17 +78,19 @@ public class AllocationUntilFillingHoursTest { @Test public void theEndDateIsTheDayAfterAllTheHoursAreAllocatedIfItIsCompletelyFilled() { givenSpecificAllocations(ResourcesPerDay.amount(2)); - LocalDate endDate = ResourceAllocation.allocating(allocations) + IntraDayDate endDate = ResourceAllocation.allocating(allocations) .untilAllocating(32); - assertThat(endDate, equalTo(startDate.plusDays(2))); + assertThat(endDate.getDate(), equalTo(startDate.plusDays(2))); + assertTrue(endDate.isStartOfDay()); } @Test public void theEndDateIsTheSameDayIfItIsNotCompletelyFilled() { givenSpecificAllocations(ResourcesPerDay.amount(2)); - LocalDate endDate = ResourceAllocation.allocating(allocations) + IntraDayDate endDate = ResourceAllocation.allocating(allocations) .untilAllocating(31); - assertThat(endDate, equalTo(startDate.plusDays(1))); + assertThat(endDate.getDate(), equalTo(startDate.plusDays(1))); + assertThat(endDate.getEffortDuration(), equalTo(hours(15))); } @Test diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingResourceQueueModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingResourceQueueModel.java index bfe653c87..0fec46bb8 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingResourceQueueModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingResourceQueueModel.java @@ -770,7 +770,7 @@ public class LimitingResourceQueueModel implements ILimitingResourceQueueModel { for(TaskElement task : parentElementsToBeUpdated) { TaskElement parent = task; while(parent != null) { - parent.setEndDate(null); + parent.setIntraDayEndDate(null); parent.initializeEndDateIfDoesntExist(); taskDAO.save(parent); parent = parent.getParent(); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationModel.java index a9fac6ca0..00e3da585 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationModel.java @@ -39,16 +39,17 @@ import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.planner.daos.ITaskElementDAO; import org.navalplanner.business.planner.entities.DayAssignment; import org.navalplanner.business.planner.entities.ResourceAllocation; +import org.navalplanner.business.planner.entities.ResourceAllocation.DetachDayAssignmentOnRemoval; import org.navalplanner.business.planner.entities.SpecificResourceAllocation; import org.navalplanner.business.planner.entities.Task; import org.navalplanner.business.planner.entities.TaskElement; -import org.navalplanner.business.planner.entities.ResourceAllocation.DetachDayAssignmentOnRemoval; import org.navalplanner.business.planner.entities.consolidations.CalculatedConsolidatedValue; import org.navalplanner.business.planner.entities.consolidations.CalculatedConsolidation; import org.navalplanner.business.planner.entities.consolidations.ConsolidatedValue; import org.navalplanner.business.planner.entities.consolidations.Consolidation; import org.navalplanner.business.planner.entities.consolidations.NonCalculatedConsolidatedValue; import org.navalplanner.business.planner.entities.consolidations.NonCalculatedConsolidation; +import org.navalplanner.business.workingday.IntraDayDate; import org.navalplanner.web.planner.order.PlanningState; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; @@ -240,11 +241,11 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { .setOnDayAssignmentRemoval(new DetachDayAssignmentOnRemoval()); if (value.getDate().compareTo(endExclusive.minusDays(1)) >= 0) { - LocalDate date = ResourceAllocation.allocating( + IntraDayDate date = ResourceAllocation.allocating( Arrays.asList(resourceAllocation .asResourcesPerDayModification())) .untilAllocating(pendingHours); - task.setEndDate(date.toDateTimeAtStartOfDay().toDate()); + task.setIntraDayEndDate(date); } else { reassign(resourceAllocation, startInclusive, endExclusive, pendingHours);