diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/PlanningStateCreator.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/PlanningStateCreator.java index 4f1e9f054..b6a596e17 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/PlanningStateCreator.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/PlanningStateCreator.java @@ -70,6 +70,7 @@ import org.libreplan.business.planner.entities.consolidations.CalculatedConsolid import org.libreplan.business.requirements.entities.CriterionRequirement; import org.libreplan.business.resources.daos.ICriterionDAO; import org.libreplan.business.resources.daos.IResourceDAO; +import org.libreplan.business.resources.daos.IResourcesSearcher; import org.libreplan.business.resources.entities.Criterion; import org.libreplan.business.resources.entities.CriterionSatisfaction; import org.libreplan.business.resources.entities.IAssignmentsOnResourceCalculator; @@ -87,6 +88,7 @@ import org.libreplan.business.users.entities.UserOrderAuthorization; import org.libreplan.web.UserUtil; import org.libreplan.web.calendars.BaseCalendarModel; import org.libreplan.web.planner.TaskElementAdapter; +import org.libreplan.web.planner.tabs.CriticalPathBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; @@ -179,6 +181,9 @@ public class PlanningStateCreator { @Autowired private IMoneyCostCalculator moneyCostCalculator; + @Autowired + private IResourcesSearcher resourcesSearcher; + void synchronizeWithSchedule(Order order, IOptionalPersistence persistence) { List synchronizationsNeeded = order .calculateSynchronizationsNeeded(); @@ -1115,6 +1120,10 @@ public class PlanningStateCreator { savedOrderState = order.getState(); } + public List getCriticalPath() { + return CriticalPathBuilder.criticalPathFor(this, resourcesSearcher); + } + } public interface IAllocationCriteria { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SaveCommandBuilder.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SaveCommandBuilder.java index 438b0455f..0a3a521e6 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SaveCommandBuilder.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SaveCommandBuilder.java @@ -384,6 +384,7 @@ public class SaveCommandBuilder { // the deletes on cascade a new root task is fetched causing a // NonUniqueObjectException later taskElementDAO.reattach(rootTask); + rootTask.updateCriticalPathProgress(state.getCriticalPath()); } orderDAO.save(order); diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/CriticalPathBuilder.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/CriticalPathBuilder.java index 787126bf5..4f8aa515f 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/CriticalPathBuilder.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/CriticalPathBuilder.java @@ -95,7 +95,7 @@ public class CriticalPathBuilder { }); } - private List criticalPathFor(PlanningState state, + public static List criticalPathFor(PlanningState state, IResourcesSearcher resourcesSearcher) { final Order order = state.getOrder(); final Scenario currentScenario = state.getCurrentScenario(); @@ -110,7 +110,7 @@ public class CriticalPathBuilder { return criticalPathCalculator.calculateCriticalPath(graph); } - private LocalDate asLocalDate(Date date) { + private static LocalDate asLocalDate(Date date) { return date != null ? LocalDate.fromDateFields(date) : null; }