From 2aa82bf9cf81bb3d465da3ad0b53e8238f1ca53e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Tue, 9 Nov 2010 11:26:30 +0100 Subject: [PATCH] Use getWorkableDays instead of getDaysDuration if the field workableDays is not defined it falls back to getDaysDuration. FEA: ItEr61OTS04PlanificacionHaciaAtras --- .../business/planner/entities/Task.java | 16 ++++++---- .../test/planner/entities/TaskTest.java | 32 ++++++++++++++++--- .../web/montecarlo/MonteCarloTask.java | 2 +- .../ResourceAllocationController.java | 3 +- .../taskedition/TaskPropertiesController.java | 2 +- 5 files changed, 40 insertions(+), 15 deletions(-) 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 8a647f5df..364189757 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 @@ -269,13 +269,6 @@ public class Task extends TaskElement implements ITaskLeafConstraint { this.calculatedValue = calculatedValue; } - public Integer getDaysDuration() { - Days daysBetween = Days.daysBetween(new LocalDate( - toDateTime(getStartDate())), new LocalDate( - toDateTime(getEndDate()))); - return daysBetween.getDays(); - } - private DateTime toDateTime(Date startDate) { return new DateTime(startDate.getTime()); } @@ -688,7 +681,16 @@ public class Task extends TaskElement implements ITaskLeafConstraint { } public Integer getWorkableDays() { + if (workableDays == null) { + return getDaysBetweenDates(); + } return workableDays; } + public Integer getDaysBetweenDates() { + Days daysBetween = Days.daysBetween(getStartAsLocalDate(), + getIntraDayEndDate().asExclusiveEnd()); + return daysBetween.getDays(); + } + } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/TaskTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/TaskTest.java index 550eb7e83..11ca64882 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/TaskTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/TaskTest.java @@ -34,7 +34,7 @@ import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING import java.util.Arrays; import java.util.Date; -import org.joda.time.DateTime; +import org.joda.time.LocalDate; import org.junit.Test; import org.junit.runner.RunWith; import org.navalplanner.business.orders.entities.HoursGroup; @@ -47,6 +47,8 @@ import org.navalplanner.business.planner.entities.Task; import org.navalplanner.business.planner.entities.TaskElement; import org.navalplanner.business.planner.limiting.entities.LimitingResourceQueueElement; import org.navalplanner.business.scenarios.entities.OrderVersion; +import org.navalplanner.business.workingday.EffortDuration; +import org.navalplanner.business.workingday.IntraDayDate; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; @@ -172,9 +174,31 @@ public class TaskTest { @Test public void theDaysBetweenIsCalculatedBasedOnlyOnDatesNotHours() { - task.setStartDate(new DateTime(2008, 10, 5, 23, 0, 0, 0).toDate()); - task.setEndDate(new DateTime(2008, 10, 6, 1, 0, 0, 0).toDate()); - assertThat(task.getDaysDuration(), equalTo(1)); + task.setIntraDayStartDate(IntraDayDate.create( + new LocalDate(2010, 1, 13), EffortDuration.hours(3))); + task.setIntraDayEndDate(IntraDayDate.startOfDay(new LocalDate(2010, 1, + 14))); + assertThat(task.getWorkableDays(), equalTo(1)); + } + + @Test + public void atLeastOneWorkableDayEvenIfStartAndEndDatesAreAtTheSameDay() { + LocalDate day = new LocalDate(2010, 1, 13); + task.setIntraDayStartDate(IntraDayDate.create(day, + EffortDuration.hours(3))); + task.setIntraDayEndDate(IntraDayDate.create(day, + EffortDuration.hours(4))); + assertThat(task.getWorkableDays(), equalTo(1)); + } + + @Test + public void ifTheEndIsInTheMiddleOfADayTheWholeDayIsCounted() { + LocalDate start = new LocalDate(2010, 1, 13); + task.setIntraDayStartDate(IntraDayDate.create(start, + EffortDuration.hours(3))); + task.setIntraDayEndDate(IntraDayDate.create(start.plusDays(1), + EffortDuration.minutes(1))); + assertThat(task.getWorkableDays(), equalTo(2)); } /** diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/montecarlo/MonteCarloTask.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/montecarlo/MonteCarloTask.java index 65ea5f77b..626fcf14d 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/montecarlo/MonteCarloTask.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/montecarlo/MonteCarloTask.java @@ -67,7 +67,7 @@ public class MonteCarloTask { private MonteCarloTask(Task task) { this.task = task; - duration = BigDecimal.valueOf(task.getDaysDuration()); + duration = BigDecimal.valueOf(task.getDaysBetweenDates()); pessimisticDuration = duration.multiply(BigDecimal.valueOf(1.50)); pessimisticDurationPercentage = 30; normalDuration = duration; diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationController.java index 37dcab790..d00914948 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationController.java @@ -268,9 +268,8 @@ public class ResourceAllocationController extends GenericForwardComposer { private Label lbTaskEnd; private void initTaskWorkableDays(org.navalplanner.business.planner.entities.Task task) { - taskWorkableDays.setValue(task.getDaysDuration()); + taskWorkableDays.setValue(task.getWorkableDays()); plannedTaskEnd = resourceAllocationModel.getTaskEnd(); - taskWorkableDays.setValue(task.getDaysDuration()); taskWorkableDays.addEventListener(Events.ON_CHANGE, new EventListener() { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/TaskPropertiesController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/TaskPropertiesController.java index 205c89626..bb9477a32 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/TaskPropertiesController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/TaskPropertiesController.java @@ -327,7 +327,7 @@ public class TaskPropertiesController extends GenericForwardComposer { private void showDurationRow(Task task) { hours.getFellow("durationRow").setVisible(true); - duration.setValue(task.getDaysDuration()); + duration.setValue(task.getWorkableDays()); } @Override