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 ec5c73b12..b2d409b6e 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 @@ -2179,4 +2179,11 @@ public abstract class ResourceAllocation extends : null; } + public boolean isManualAssignmentFunction() { + if (assignmentFunction != null) { + return assignmentFunction.isManual(); + } + return false; + } + } 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 71bc91f4c..0350c1fb8 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 @@ -1021,4 +1021,22 @@ public class Task extends TaskElement implements ITaskPositionConstrained { return !calendar.getCapacityOn(PartialDay.wholeDay(day)).isZero(); } + public static void convertOnStartInFixedDate(Task task) { + TaskPositionConstraint taskConstraint = task.getPositionConstraint(); + if (taskConstraint.isValid(PositionConstraintType.START_IN_FIXED_DATE, + task.getIntraDayStartDate())) { + taskConstraint.update(PositionConstraintType.START_IN_FIXED_DATE, + task.getIntraDayStartDate()); + } + } + + public boolean isManualAnyAllocation() { + for (ResourceAllocation each : resourceAllocations) { + if (each.isManualAssignmentFunction()) { + return true; + } + } + return false; + } + } 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 7a128239f..0b27a677b 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 @@ -28,10 +28,8 @@ import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.externalcompanies.daos.IExternalCompanyDAO; import org.navalplanner.business.externalcompanies.entities.ExternalCompany; import org.navalplanner.business.planner.daos.ISubcontractedTaskDataDAO; -import org.navalplanner.business.planner.entities.PositionConstraintType; import org.navalplanner.business.planner.entities.SubcontractedTaskData; import org.navalplanner.business.planner.entities.Task; -import org.navalplanner.business.planner.entities.TaskPositionConstraint; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; @@ -109,22 +107,13 @@ public class SubcontractModel implements ISubcontractModel { } task.removeAllSatisfiedResourceAllocations(); - convertOnStartOnFixedDate(task); + Task.convertOnStartInFixedDate(task); } recalculateTaskLength(); } } - private void convertOnStartOnFixedDate(Task task) { - TaskPositionConstraint taskConstraint = task.getPositionConstraint(); - if (taskConstraint.isValid(PositionConstraintType.START_IN_FIXED_DATE, - task.getIntraDayStartDate())) { - taskConstraint.update(PositionConstraintType.START_IN_FIXED_DATE, - task.getIntraDayStartDate()); - } - } - private void recalculateTaskLength() { GanttDate previousStartDate = ganttTask.getBeginDate(); GanttDate previousEnd = ganttTask.getEndDate(); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/AdvancedAllocationTabCreator.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/AdvancedAllocationTabCreator.java index 1fd62b34a..0985e5517 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/AdvancedAllocationTabCreator.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/AdvancedAllocationTabCreator.java @@ -136,6 +136,9 @@ public class AdvancedAllocationTabCreator { Validate .isTrue(allocationResult.getAggregate() == modifiedAllocations); allocationResult.applyTo(planningState.getCurrentScenario(), task); + if (task.isManualAnyAllocation()) { + Task.convertOnStartInFixedDate(task); + } updateParentsPositions(task); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/AdvancedAllocationTaskController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/AdvancedAllocationTaskController.java index 157a7a475..c202452fb 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/AdvancedAllocationTaskController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/AdvancedAllocationTaskController.java @@ -143,6 +143,9 @@ public class AdvancedAllocationTaskController extends GenericForwardComposer { @Override public void accepted(AggregateOfResourceAllocations aggregate) { allocation.applyTo(planningState.getCurrentScenario(), task); + if (task.isManualAnyAllocation()) { + Task.convertOnStartInFixedDate(task); + } askForReloads(); }