diff --git a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java index 120e11f7a..55de35a24 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java +++ b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java @@ -1012,6 +1012,14 @@ public abstract class OrderElement extends IntegrationEntity implements return getCurrentSchedulingData().getTaskSource(); } + public TaskElement getTaskElement() { + TaskSource taskSource = getTaskSource(); + if (taskSource == null) { + return null; + } + return taskSource.getTask(); + } + public Set getTaskElements() { if (getTaskSource() == null) { return Collections.emptySet(); diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java index f4d1d7f8e..2a8e41928 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java @@ -41,6 +41,7 @@ import org.libreplan.business.orders.entities.OrderElement; import org.libreplan.business.orders.entities.OrderLine; import org.libreplan.business.orders.entities.OrderLineGroup; import org.libreplan.business.orders.entities.SchedulingState; +import org.libreplan.business.planner.entities.TaskElement; import org.libreplan.business.requirements.entities.CriterionRequirement; import org.libreplan.business.templates.entities.OrderElementTemplate; import org.libreplan.business.users.entities.UserRole; @@ -518,6 +519,15 @@ public class OrderElementTreeController extends TreeController { super.removeCodeTextbox(key); } + @Override + protected boolean isUpdatedFromTimesheets(OrderElement currentElement) { + TaskElement taskElement = currentElement.getTaskElement(); + if (taskElement != null) { + return taskElement.isUpdatedFromTimesheets(); + } + return false; + } + } @Override diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/templates/TemplatesTreeController.java b/libreplan-webapp/src/main/java/org/libreplan/web/templates/TemplatesTreeController.java index f86df4495..352b5b85a 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/templates/TemplatesTreeController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/templates/TemplatesTreeController.java @@ -169,6 +169,12 @@ public class TemplatesTreeController extends return currentElement.getSchedulingState(); } + @Override + protected boolean isUpdatedFromTimesheets( + OrderElementTemplate currentElement) { + return false; + } + } public TemplatesTreeController(IOrderTemplatesModel model, diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/tree/TreeController.java b/libreplan-webapp/src/main/java/org/libreplan/web/tree/TreeController.java index e451989f4..4ccf3dabf 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/tree/TreeController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/tree/TreeController.java @@ -762,7 +762,8 @@ public abstract class TreeController> extends final SchedulingState schedulingState = getSchedulingStateFrom(currentElement); SchedulingStateToggler schedulingStateToggler = new SchedulingStateToggler( schedulingState); - schedulingStateToggler.setReadOnly(readOnly); + schedulingStateToggler.setReadOnly(readOnly + || isUpdatedFromTimesheets(currentElement)); final Treecell cell = addCell( getDecorationFromState(getSchedulingStateFrom(currentElement)), schedulingStateToggler); @@ -1227,6 +1228,9 @@ public abstract class TreeController> extends public void doTry() { } + + protected abstract boolean isUpdatedFromTimesheets(T currentElement); + } public void setColumns(List columns) {