diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkContainer.java b/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkContainer.java index 4993fe085..4ad08da91 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkContainer.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkContainer.java @@ -56,4 +56,14 @@ public class TaskWorkContainer extends TaskWork implements ITaskWorkContainer { children.add(position, task); } + @Override + public Integer getWorkHours() { + int result = 0; + List children = getChildren(); + for (TaskWork taskWork : children) { + result += taskWork.getWorkHours(); + } + return result; + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkLeaf.java b/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkLeaf.java index 2a72526f4..bb748e282 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkLeaf.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/workorders/entities/TaskWorkLeaf.java @@ -33,4 +33,21 @@ public class TaskWorkLeaf extends TaskWork { public void replace(TaskWork old, TaskWork newTask) { throw new UnsupportedOperationException(); } + + public void setWorkHours(Integer workingHours) { + List activities = getActivities(); + + // FIXME For the moment we have just one activity for each TaksWorkLeaf + if (activities.isEmpty()) { + ActivityWork activity = new ActivityWork(); + activity.setWorkingHours(workingHours); + + activities.add(activity); + } else { + ActivityWork activity = activities.get(0); + activity.setWorkingHours(workingHours); + } + + setActivities(activities); + } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/TaskWorksTreeController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/TaskWorksTreeController.java index 63d0d2092..75fed8b6a 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/TaskWorksTreeController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/TaskWorksTreeController.java @@ -7,6 +7,7 @@ import java.util.Set; import org.navalplanner.business.workorders.entities.ProjectWork; import org.navalplanner.business.workorders.entities.TaskWork; +import org.navalplanner.business.workorders.entities.TaskWorkLeaf; import org.navalplanner.web.common.Util; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.DropEvent; @@ -15,6 +16,7 @@ import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.InputEvent; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Datebox; +import org.zkoss.zul.Intbox; import org.zkoss.zul.SimpleTreeNode; import org.zkoss.zul.Textbox; import org.zkoss.zul.Treecell; @@ -200,6 +202,28 @@ public class TaskWorksTreeController extends GenericForwardComposer { return textBox; } + private static Intbox bind(Intbox intBox, Getter getter) { + intBox.setValue(getter.get()); + intBox.setDisabled(true); + return intBox; + } + + private static Intbox bind(final Intbox intBox, + final Getter getter, final Setter setter) { + intBox.setValue(getter.get()); + intBox.addEventListener("onChange", new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + InputEvent newInput = (InputEvent) event; + String value = newInput.getValue(); + setter.set(Integer.valueOf(value)); + intBox.setValue(getter.get()); + } + }); + return intBox; + } + private static Datebox bind(final Datebox dateBox, final Getter getter, final Setter setter) { dateBox.setValue(getter.get()); @@ -244,13 +268,33 @@ public class TaskWorksTreeController extends GenericForwardComposer { } })); Treecell cellForHours = new Treecell(); - cellForHours.appendChild(bind(new Textbox(), new Getter() { + if (taskWork instanceof TaskWorkLeaf) { + // If it's a leaf hours cell is editable + cellForHours.appendChild(bind(new Intbox(), + new Getter() { - @Override - public String get() { - return taskWork.getWorkHours() + ""; - } - })); + @Override + public Integer get() { + return taskWork.getWorkHours(); + } + }, new Setter() { + + @Override + public void set(Integer value) { + ((TaskWorkLeaf) taskWork).setWorkHours(value); + } + })); + } else { + // If it's a container hours cell is not editable + cellForHours.appendChild(bind(new Intbox(), + new Getter() { + + @Override + public Integer get() { + return taskWork.getWorkHours(); + } + })); + } Treecell tcDateStart = new Treecell(); tcDateStart.appendChild(bind(new Datebox(), new Getter() {