[Bug #1043] Fixed issue changing constraintDate to IntraDayDate.
* Changed constraintDate attribute in class TaskPositionConstraint to IntraDayDate. * Made all modifications needed to get this change working. FEA: ItEr74S04BugFixing
This commit is contained in:
parent
47072040b5
commit
811b7ba759
13 changed files with 68 additions and 41 deletions
|
|
@ -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<OrderElement> {
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -419,7 +419,7 @@ public class Task extends TaskElement implements ITaskPositionConstrained {
|
|||
}
|
||||
}
|
||||
|
||||
public void explicityMoved(LocalDate date) {
|
||||
public void explicityMoved(IntraDayDate date) {
|
||||
getPositionConstraint().explicityMovedTo(date);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -149,4 +149,23 @@
|
|||
<sql>UPDATE resource_allocation SET intended_non_consolidated_effort = intended_total_assignment</sql>
|
||||
</changeSet>
|
||||
|
||||
<changeSet id="add-effort-duration-to-task-and-milestone" author="mrego">
|
||||
<comment>
|
||||
constraintDate attribute in class TaskPositionConstraint has been changed to IntraDayDate.
|
||||
It is needed to add some columns to store EffortDuration in Task and TaskMilestone.
|
||||
</comment>
|
||||
<addColumn tableName="task">
|
||||
<column name="constraint_date_effort_duration" type="INTEGER" />
|
||||
</addColumn>
|
||||
<addColumn tableName="task_milestone">
|
||||
<column name="constraint_date_effort_duration" type="INTEGER" />
|
||||
</addColumn>
|
||||
<addDefaultValue tableName="task"
|
||||
columnName="constraint_date_effort_duration"
|
||||
defaultValueNumeric="0" />
|
||||
<addDefaultValue tableName="task_milestone"
|
||||
columnName="constraint_date_effort_duration"
|
||||
defaultValueNumeric="0" />
|
||||
</changeSet>
|
||||
|
||||
</databaseChangeLog>
|
||||
|
|
|
|||
|
|
@ -64,8 +64,13 @@
|
|||
<param name="enumClass">org.navalplanner.business.planner.entities.PositionConstraintType</param>
|
||||
</type>
|
||||
</property>
|
||||
<property name="constraintDate" type="org.joda.time.contrib.hibernate.PersistentLocalDate"
|
||||
column="constraint_date" />
|
||||
<component name="constraintDate"
|
||||
class="org.navalplanner.business.workingday.IntraDayDate">
|
||||
<property name="date" column="constraint_date"
|
||||
type="org.joda.time.contrib.hibernate.PersistentLocalDate"/>
|
||||
<property name="effortDuration" column="constraint_date_effort_duration"
|
||||
type="org.navalplanner.business.workingday.hibernate.EffortDurationType"/>
|
||||
</component>
|
||||
</component>
|
||||
|
||||
<property name="workableDays" column="workable_days" />
|
||||
|
|
@ -116,8 +121,13 @@
|
|||
<param name="enumClass">org.navalplanner.business.planner.entities.PositionConstraintType</param>
|
||||
</type>
|
||||
</property>
|
||||
<property name="constraintDate" column="constraint_date"
|
||||
type="org.joda.time.contrib.hibernate.PersistentLocalDate"/>
|
||||
<component name="constraintDate"
|
||||
class="org.navalplanner.business.workingday.IntraDayDate">
|
||||
<property name="date" column="constraint_date"
|
||||
type="org.joda.time.contrib.hibernate.PersistentLocalDate"/>
|
||||
<property name="effortDuration" column="constraint_date_effort_duration"
|
||||
type="org.navalplanner.business.workingday.hibernate.EffortDurationType"/>
|
||||
</component>
|
||||
</component>
|
||||
</joined-subclass>
|
||||
|
||||
|
|
|
|||
|
|
@ -298,7 +298,8 @@ public class TaskElementTest {
|
|||
};
|
||||
}
|
||||
|
||||
private static Matcher<TaskPositionConstraint> hasValue(final LocalDate value) {
|
||||
private static Matcher<TaskPositionConstraint> hasValue(
|
||||
final LocalDate value) {
|
||||
return new BaseMatcher<TaskPositionConstraint>() {
|
||||
|
||||
@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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue