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 2ef67dfea..e6630a574 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 @@ -75,23 +75,14 @@ public class Task extends TaskElement implements ITaskPositionConstrained { @Override protected void initializeDates() { EffortDuration workHours = EffortDuration.hours(getWorkHours()); - EffortDuration effortStandardPerDay = EffortDuration.hours(8); - - int daysElapsed = workHours.divideBy(effortStandardPerDay); - EffortDuration remainder = workHours.remainderFor(effortStandardPerDay); + DurationBetweenDates duration = fromFixedDuration(workHours); IntraDayDate start = getIntraDayStartDate(); if (start != null) { - IntraDayDate calculatedEnd = IntraDayDate.create( - start.getDate().plusDays(daysElapsed), start - .getEffortDuration().plus(remainder)); - setIntraDayEndDate(calculatedEnd); + setIntraDayEndDate(duration.fromStartToEnd(start)); } else { IntraDayDate end = getIntraDayEndDate(); - IntraDayDate calculatedStart = IntraDayDate.startOfDay(end - .getDate().minusDays( - daysElapsed + (remainder.isZero() ? 0 : 1))); - setIntraDayStartDate(calculatedStart); + setIntraDayStartDate(duration.fromEndToStart(end)); } } @@ -573,6 +564,10 @@ public class Task extends TaskElement implements ITaskPositionConstrained { .getDefaultWorkingDay(); } + private DurationBetweenDates fromFixedDuration(EffortDuration duration) { + return new DurationBetweenDates(0, duration); + } + private class DurationBetweenDates { private final int numberOfWorkableDays; diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java index a587ed448..6099ab2bd 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java @@ -505,6 +505,7 @@ public class OrderModel extends IntegrationEntityModel implements IOrderModel { Order.checkConstraintOrderUniqueCode(order); HoursGroup.checkConstraintHoursGroupUniqueCode(order); + reattachCalendar(); reattachCriterions(); reattachTasksForTasksSources(); @@ -594,6 +595,14 @@ public class OrderModel extends IntegrationEntityModel implements IOrderModel { } } + private void reattachCalendar() { + if (order.getCalendar() == null) { + return; + } + BaseCalendar calendar = order.getCalendar(); + baseCalendarDAO.reattachUnmodifiedEntity(calendar); + } + private void reattachAllTaskSources() { // avoid LazyInitializationException for when doing // removePredecessorsDayAssignmentsFor