diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java index 09befc1b7..f6ca81920 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java @@ -68,6 +68,7 @@ import org.navalplanner.business.scenarios.entities.Scenario; import org.navalplanner.business.templates.entities.OrderElementTemplate; import org.navalplanner.business.trees.ITreeNode; import org.navalplanner.business.util.deepcopy.DeepCopy; +import org.navalplanner.business.workingday.IntraDayDate; public abstract class OrderElement extends IntegrationEntity implements ICriterionRequirable, ITreeNode { @@ -892,13 +893,13 @@ public abstract class OrderElement extends IntegrationEntity implements TaskPositionConstraint constraint = task.getPositionConstraint(); if (getInitDate() != null && (getDeadline() == null || !scheduleBackwards)) { - constraint.notEarlierThan( - LocalDate.fromDateFields(this.getInitDate())); + constraint.notEarlierThan(IntraDayDate.startOfDay(LocalDate + .fromDateFields(this.getInitDate()))); return true; } if (getDeadline() != null) { - constraint.finishNotLaterThan( - LocalDate.fromDateFields(this.getDeadline())); + constraint.finishNotLaterThan(IntraDayDate.startOfDay(LocalDate + .fromDateFields(this.getDeadline()))); return true; } return false; diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ITaskPositionConstrained.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ITaskPositionConstrained.java index eda6d1ba3..8879a1786 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ITaskPositionConstrained.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ITaskPositionConstrained.java @@ -25,11 +25,11 @@ */ package org.navalplanner.business.planner.entities; -import org.joda.time.LocalDate; +import org.navalplanner.business.workingday.IntraDayDate; public interface ITaskPositionConstrained { TaskPositionConstraint getPositionConstraint(); - void explicityMoved(LocalDate date); + void explicityMoved(IntraDayDate date); } \ No newline at end of file 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 f61354357..9470ceb69 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 @@ -419,7 +419,7 @@ public class Task extends TaskElement implements ITaskPositionConstrained { } } - public void explicityMoved(LocalDate date) { + public void explicityMoved(IntraDayDate date) { getPositionConstraint().explicityMovedTo(date); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskMilestone.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskMilestone.java index 37d75dabe..0f3f3adab 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskMilestone.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskMilestone.java @@ -30,7 +30,6 @@ import org.apache.commons.lang.Validate; import org.hibernate.validator.AssertTrue; import org.joda.time.DateTime; import org.joda.time.Days; -import org.joda.time.LocalDate; import org.navalplanner.business.resources.daos.IResourcesSearcher; import org.navalplanner.business.scenarios.entities.Scenario; import org.navalplanner.business.workingday.IntraDayDate; @@ -166,7 +165,7 @@ public class TaskMilestone extends TaskElement implements ITaskPositionConstrain return false; } - public void explicityMoved(LocalDate date) { + public void explicityMoved(IntraDayDate date) { getPositionConstraint().explicityMovedTo(date); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskPositionConstraint.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskPositionConstraint.java index 53ee0a05d..15d98cfa2 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskPositionConstraint.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskPositionConstraint.java @@ -23,7 +23,7 @@ package org.navalplanner.business.planner.entities; import java.util.Date; import org.apache.commons.lang.Validate; -import org.joda.time.LocalDate; +import org.navalplanner.business.workingday.IntraDayDate; /** * Component class that encapsulates a {@link PositionConstraintType} and its @@ -34,7 +34,7 @@ public class TaskPositionConstraint { private PositionConstraintType constraintType = PositionConstraintType.AS_SOON_AS_POSSIBLE; - private LocalDate constraintDate = null; + private IntraDayDate constraintDate = null; public TaskPositionConstraint() { } @@ -57,23 +57,23 @@ public class TaskPositionConstraint { .toDate() : null; } - public void explicityMovedTo(LocalDate date) { + public void explicityMovedTo(IntraDayDate date) { Validate.notNull(date); constraintType = constraintType.newTypeAfterMoved(); constraintDate = date; } - public LocalDate getConstraintDate() { + public IntraDayDate getConstraintDate() { return constraintDate; } - public void notEarlierThan(LocalDate date) { + public void notEarlierThan(IntraDayDate date) { Validate.notNull(date); this.constraintDate = date; this.constraintType = PositionConstraintType.START_NOT_EARLIER_THAN; } - public void finishNotLaterThan(LocalDate date) { + public void finishNotLaterThan(IntraDayDate date) { Validate.notNull(date); this.constraintDate = date; this.constraintType = PositionConstraintType.FINISH_NOT_LATER_THAN; @@ -89,12 +89,12 @@ public class TaskPositionConstraint { this.constraintDate = null; } - public boolean isValid(PositionConstraintType type, LocalDate value) { + public boolean isValid(PositionConstraintType type, IntraDayDate value) { return type != null && type.isAssociatedDateRequired() == (value != null); } - public void update(PositionConstraintType type, LocalDate value) { + public void update(PositionConstraintType type, IntraDayDate value) { Validate.isTrue(isValid(type, value)); this.constraintType = type; this.constraintDate = value; diff --git a/navalplanner-business/src/main/resources/db.changelog-1.0.xml b/navalplanner-business/src/main/resources/db.changelog-1.0.xml index 2d36edd16..9ef8336f8 100644 --- a/navalplanner-business/src/main/resources/db.changelog-1.0.xml +++ b/navalplanner-business/src/main/resources/db.changelog-1.0.xml @@ -149,4 +149,23 @@ UPDATE resource_allocation SET intended_non_consolidated_effort = intended_total_assignment + + + constraintDate attribute in class TaskPositionConstraint has been changed to IntraDayDate. + It is needed to add some columns to store EffortDuration in Task and TaskMilestone. + + + + + + + + + + + diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/planner/entities/Tasks.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/planner/entities/Tasks.hbm.xml index 6436544bb..e522ed3fd 100644 --- a/navalplanner-business/src/main/resources/org/navalplanner/business/planner/entities/Tasks.hbm.xml +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/planner/entities/Tasks.hbm.xml @@ -64,8 +64,13 @@ org.navalplanner.business.planner.entities.PositionConstraintType - + + + + @@ -116,8 +121,13 @@ org.navalplanner.business.planner.entities.PositionConstraintType - + + + + diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/TaskElementTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/TaskElementTest.java index 811bdd5e4..f0d20a4cd 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/TaskElementTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/TaskElementTest.java @@ -298,7 +298,8 @@ public class TaskElementTest { }; } - private static Matcher hasValue(final LocalDate value) { + private static Matcher hasValue( + final LocalDate value) { return new BaseMatcher() { @Override @@ -306,7 +307,8 @@ public class TaskElementTest { if (object instanceof TaskPositionConstraint) { TaskPositionConstraint startConstraint = (TaskPositionConstraint) object; LocalDate constraintDate = startConstraint - .getConstraintDate(); + .getConstraintDate().toDateTimeAtStartOfDay() + .toLocalDate(); boolean bothNotNull = value != null && constraintDate != null; return value == constraintDate || bothNotNull 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 0756d1371..cbe711ffb 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 @@ -892,7 +892,7 @@ public class LimitingResourceQueueModel implements ILimitingResourceQueueModel { IntraDayDate endDate) { task.setIntraDayStartDate(startDate); task.setIntraDayEndDate(endDate); - task.explicityMoved(startDate.getDate()); + task.explicityMoved(startDate); } private void addLimitingResourceQueueElementIfNeeded(LimitingResourceQueue queue, diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java index 9a9c53e32..8fc6285b5 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java @@ -256,13 +256,6 @@ public class TaskElementAdapter implements ITaskElementAdapter { }); } - public static LocalDate toLocalDate(GanttDate date) { - if (date == null) { - return null; - } - return toIntraDay(date).getDate(); - } - static class GanttDateAdapter extends CustomDate { private static final int DAY_MILLISECONDS = (int) Days.days(1) @@ -456,7 +449,7 @@ public class TaskElementAdapter implements ITaskElementAdapter { .compareTo(PositionConstraintType.FINISH_NOT_LATER_THAN) == 0 || constraintType .compareTo(PositionConstraintType.AS_LATE_AS_POSSIBLE) == 0) { - task.explicityMoved(toLocalDate(endDate)); + task.explicityMoved(toIntraDay(endDate)); } } } @@ -918,11 +911,11 @@ public class TaskElementAdapter implements ITaskElementAdapter { ITaskPositionConstrained task = (ITaskPositionConstrained) taskElement; if (task.getPositionConstraint().isConstraintAppliedToStart()) { setBeginDate(newStart); - task.explicityMoved(toLocalDate(newStart)); + task.explicityMoved(toIntraDay(newStart)); } else { GanttDate newEnd = inferEndFrom(newStart); setEndDate(newEnd); - task.explicityMoved(toLocalDate(newEnd)); + task.explicityMoved(toIntraDay(newEnd)); } } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/SubcontractModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/SubcontractModel.java index 7b83704bd..7a128239f 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/SubcontractModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/SubcontractModel.java @@ -119,9 +119,9 @@ public class SubcontractModel implements ISubcontractModel { private void convertOnStartOnFixedDate(Task task) { TaskPositionConstraint taskConstraint = task.getPositionConstraint(); if (taskConstraint.isValid(PositionConstraintType.START_IN_FIXED_DATE, - task.getIntraDayStartDate().getDate())) { - taskConstraint.update(PositionConstraintType.START_IN_FIXED_DATE, task - .getIntraDayStartDate().getDate()); + task.getIntraDayStartDate())) { + taskConstraint.update(PositionConstraintType.START_IN_FIXED_DATE, + task.getIntraDayStartDate()); } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/reassign/ReassignConfiguration.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/reassign/ReassignConfiguration.java index 05dc2f8eb..a39441f17 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/reassign/ReassignConfiguration.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/reassign/ReassignConfiguration.java @@ -25,6 +25,7 @@ import java.util.List; import org.apache.commons.lang.Validate; import org.joda.time.LocalDate; +import org.navalplanner.business.workingday.IntraDayDate; import org.navalplanner.web.planner.TaskElementAdapter; import org.zkoss.ganttz.data.Task; @@ -64,8 +65,8 @@ public class ReassignConfiguration { } private boolean isAfterDate(Task each) { - LocalDate start = TaskElementAdapter.toLocalDate(each.getBeginDate()); - LocalDate end = TaskElementAdapter.toLocalDate(each.getEndDate()); + IntraDayDate start = TaskElementAdapter.toIntraDay(each.getBeginDate()); + IntraDayDate end = TaskElementAdapter.toIntraDay(each.getEndDate()); return start.compareTo(date) > 0 || end.compareTo(date) > 0; } 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 74eff39a3..11bc41933 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 @@ -36,6 +36,7 @@ import org.navalplanner.business.planner.entities.Task; import org.navalplanner.business.planner.entities.TaskElement; import org.navalplanner.business.planner.entities.TaskPositionConstraint; import org.navalplanner.business.scenarios.IScenarioManager; +import org.navalplanner.business.workingday.IntraDayDate; import org.navalplanner.web.I18nHelper; import org.navalplanner.web.common.Util; import org.springframework.beans.factory.annotation.Autowired; @@ -354,8 +355,9 @@ public class TaskPropertiesController extends GenericForwardComposer { .getPositionConstraint(); WebStartConstraintType type = (WebStartConstraintType) startConstraintTypes .getSelectedItemApi().getValue(); - LocalDate inputDate = type.isAssociatedDateRequired() ? LocalDate - .fromDateFields(startConstraintDate.getValue()) : null; + IntraDayDate inputDate = type.isAssociatedDateRequired() ? IntraDayDate + .startOfDay(LocalDate.fromDateFields(startConstraintDate + .getValue())) : null; if (taskConstraint.isValid(type.getType(), inputDate)) { taskConstraint.update(type.getType(), inputDate); if (currentContext != null) {