diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/TaskEditFormComposer.java b/ganttzk/src/main/java/org/zkoss/ganttz/TaskEditFormComposer.java
index fa469e432..94540847c 100644
--- a/ganttzk/src/main/java/org/zkoss/ganttz/TaskEditFormComposer.java
+++ b/ganttzk/src/main/java/org/zkoss/ganttz/TaskEditFormComposer.java
@@ -27,7 +27,6 @@ import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Textbox;
-import org.zkoss.zul.api.Window;
public class TaskEditFormComposer extends GenericForwardComposer {
@@ -35,8 +34,6 @@ public class TaskEditFormComposer extends GenericForwardComposer {
}
- private Window window;
-
private Task currentTask;
private TaskDTO taskDTO;
@@ -51,17 +48,11 @@ public class TaskEditFormComposer extends GenericForwardComposer {
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
- window = (Window) comp;
}
public void showEditFormFor(Component openRelativeTo, Task task) {
this.currentTask = task;
this.taskDTO = toDTO(task);
- try {
- window.setMode("modal");
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
updateComponentValuesForTask(taskDTO);
}
@@ -75,11 +66,9 @@ public class TaskEditFormComposer extends GenericForwardComposer {
public void accept() {
copyFromDTO(taskDTO, currentTask);
- window.setVisible(false);
}
public void cancel() {
- window.setVisible(false);
currentTask = null;
taskDTO = null;
}
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 001f8e266..a3cb7f590 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
@@ -420,4 +420,8 @@ public class Task extends TaskElement {
}
}
+ public boolean isSubcontracted() {
+ return (subcontractedTaskData != null);
+ }
+
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskElement.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskElement.java
index 58e5089c0..7d233245a 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskElement.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskElement.java
@@ -354,4 +354,9 @@ public abstract class TaskElement extends BaseEntity {
return dayAssignments;
}
+ public boolean isSubcontracted() {
+ // Just Task could be subcontracted
+ return false;
+ }
+
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/EditTaskUtilities.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/EditTaskUtilities.java
new file mode 100644
index 000000000..1a895f285
--- /dev/null
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/EditTaskUtilities.java
@@ -0,0 +1,75 @@
+/*
+ * This file is part of ###PROJECT_NAME###
+ *
+ * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e
+ * Desenvolvemento Tecnolóxico de Galicia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package org.navalplanner.web.planner.order;
+
+import org.navalplanner.business.planner.daos.ITaskElementDAO;
+import org.navalplanner.business.planner.daos.ITaskSourceDAO;
+import org.navalplanner.business.planner.entities.SubcontractedTaskData;
+import org.navalplanner.business.planner.entities.Task;
+import org.navalplanner.business.planner.entities.TaskElement;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * Common functions to make needed reattachments for edit a {@link TaskElement}.
+ *
+ * @author Manuel Rego Casasnovas
+ */
+@Component
+@Scope(BeanDefinition.SCOPE_PROTOTYPE)
+public class EditTaskUtilities implements IEditTaskUtilities {
+
+ @Autowired
+ private ITaskSourceDAO taskSourceDAO;
+
+ @Autowired
+ private ITaskElementDAO taskElementDAO;
+
+ @Override
+ @Transactional(readOnly = true)
+ public void reattach(TaskElement taskElement) {
+ if (taskElement.getTaskSource() != null) {
+ taskSourceDAO.reattach(taskElement.getTaskSource());
+ }
+
+ taskElementDAO.reattach(taskElement);
+ if (taskElement instanceof Task) {
+ forceLoadHoursGroup((Task) taskElement);
+ if (taskElement.isSubcontracted()) {
+ forceLoadExternalCompany(((Task) taskElement)
+ .getSubcontractedTaskData());
+ }
+ }
+ }
+
+ private void forceLoadHoursGroup(Task task) {
+ task.getHoursGroup();
+ }
+
+ private void forceLoadExternalCompany(
+ SubcontractedTaskData subcontractedTaskData) {
+ subcontractedTaskData.getExternalCompany().getName();
+ }
+
+}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/IEditTaskUtilities.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/IEditTaskUtilities.java
new file mode 100644
index 000000000..8f42f649c
--- /dev/null
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/IEditTaskUtilities.java
@@ -0,0 +1,34 @@
+/*
+ * This file is part of ###PROJECT_NAME###
+ *
+ * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e
+ * Desenvolvemento Tecnolóxico de Galicia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package org.navalplanner.web.planner.order;
+
+import org.navalplanner.business.planner.entities.TaskElement;
+
+/**
+ * Contract for {@link EditTaskUtilities}.
+ *
+ * @author Manuel Rego Casasnovas
+ */
+public interface IEditTaskUtilities {
+
+ void reattach(TaskElement taskElement);
+
+}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/ISubcontractCommand.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/ISubcontractCommand.java
index 687138608..8c65eee0f 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/ISubcontractCommand.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/ISubcontractCommand.java
@@ -21,6 +21,7 @@
package org.navalplanner.web.planner.order;
import org.navalplanner.business.planner.entities.TaskElement;
+import org.navalplanner.web.planner.taskedition.EditTaskController;
import org.zkoss.ganttz.extensions.ICommandOnTask;
/**
@@ -30,6 +31,6 @@ import org.zkoss.ganttz.extensions.ICommandOnTask;
*/
public interface ISubcontractCommand extends ICommandOnTask {
- void setSubcontractController(SubcontractController subcontractController);
+ void setEditTaskController(EditTaskController editTaskController);
}
\ No newline at end of file
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/ISubcontractModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/ISubcontractModel.java
index ce86d3b9a..a53448c90 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/ISubcontractModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/ISubcontractModel.java
@@ -56,6 +56,7 @@ public interface ISubcontractModel {
Date getEndDate();
void setEndDate(Date endDate);
+ void removeSubcontractedTaskData();
/*
* Final conversation steps
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java
index b95aa097f..1677eb844 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java
@@ -80,7 +80,6 @@ import org.navalplanner.web.planner.milestone.IDeleteMilestoneCommand;
import org.navalplanner.web.planner.order.ISaveCommand.IAfterSaveListener;
import org.navalplanner.web.planner.taskedition.EditTaskController;
import org.navalplanner.web.planner.taskedition.ITaskPropertiesCommand;
-import org.navalplanner.web.planner.taskedition.TaskPropertiesController;
import org.navalplanner.web.print.CutyPrint;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
@@ -210,11 +209,9 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
configuration
.addCommandOnTask(buildCalendarAllocationCommand(calendarAllocationController));
configuration
- .addCommandOnTask(buildTaskPropertiesCommand(editTaskController
- .getTaskPropertiesController()));
+ .addCommandOnTask(buildTaskPropertiesCommand(editTaskController));
configuration
- .addCommandOnTask(buildSubcontractCommand(editTaskController
- .getSubcontractController()));
+ .addCommandOnTask(buildSubcontractCommand(editTaskController));
configuration.setDoubleClickCommand(resourceAllocationCommand);
addPrintSupport(configuration, order);
Tabbox chartComponent = new Tabbox();
@@ -550,10 +547,10 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
}
private ITaskPropertiesCommand buildTaskPropertiesCommand(
- TaskPropertiesController taskPropertiesController) {
+ EditTaskController editTaskController) {
ITaskPropertiesCommand taskPropertiesCommand = getTaskPropertiesCommand();
taskPropertiesCommand
- .setTaskPropertiesController(taskPropertiesController);
+ .setEditTaskController(editTaskController);
return taskPropertiesCommand;
}
@@ -1031,9 +1028,9 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
}
private ISubcontractCommand buildSubcontractCommand(
- SubcontractController subcontractController) {
+ EditTaskController editTaskController) {
ISubcontractCommand subcontractCommand = getSubcontractCommand();
- subcontractCommand.setSubcontractController(subcontractController);
+ subcontractCommand.setEditTaskController(editTaskController);
return subcontractCommand;
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/SubcontractCommand.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/SubcontractCommand.java
index ac939af82..d4f7655a9 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/SubcontractCommand.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/SubcontractCommand.java
@@ -24,6 +24,8 @@ import static org.navalplanner.web.I18nHelper._;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.planner.entities.TaskElement;
+import org.navalplanner.web.planner.taskedition.EditTaskController;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@@ -39,7 +41,10 @@ import org.zkoss.ganttz.extensions.IContextWithPlannerTask;
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class SubcontractCommand implements ISubcontractCommand {
- private SubcontractController subcontractController;
+ private EditTaskController editTaskController;
+
+ @Autowired
+ private IEditTaskUtilities editTaskUtilities;
@Override
public String getName() {
@@ -60,16 +65,16 @@ public class SubcontractCommand implements ISubcontractCommand {
@Transactional(readOnly = true)
public void doAction(IContextWithPlannerTask context,
final TaskElement task) {
+ editTaskUtilities.reattach(task);
+
if (isApplicableTo(task)) {
- subcontractController.showWindow(context, (Task) task, context
- .getTask());
+ editTaskController.showEditFormSubcontract(context, task);
}
}
@Override
- public void setSubcontractController(
- SubcontractController subcontractController) {
- this.subcontractController = subcontractController;
+ public void setEditTaskController(EditTaskController editTaskController) {
+ this.editTaskController = editTaskController;
}
}
\ No newline at end of file
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/SubcontractController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/SubcontractController.java
index f5080d3b4..323e3519e 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/SubcontractController.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/SubcontractController.java
@@ -30,18 +30,15 @@ import org.navalplanner.business.externalcompanies.entities.ExternalCompany;
import org.navalplanner.business.planner.entities.SubcontractedTaskData;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.planner.entities.TaskElement;
-import org.navalplanner.web.common.IMessagesForUser;
-import org.navalplanner.web.common.MessagesForUser;
import org.navalplanner.web.common.Util;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.zkoss.ganttz.extensions.IContextWithPlannerTask;
import org.zkoss.zk.ui.Component;
-import org.zkoss.zk.ui.SuspendNotAllowedException;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Messagebox;
-import org.zkoss.zul.Window;
+import org.zkoss.zul.api.Tabpanel;
/**
* Controller for subcontract a task.
@@ -52,68 +49,50 @@ import org.zkoss.zul.Window;
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class SubcontractController extends GenericForwardComposer {
- private Window window;
+ private Tabpanel tabpanel;
private ISubcontractModel subcontractModel;
- private Component messagesContainer;
-
- private IMessagesForUser messagesForUser;
-
private IContextWithPlannerTask context;
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
- window = (Window) comp;
- messagesForUser = new MessagesForUser(messagesContainer);
+ tabpanel = (Tabpanel) comp;
}
- public void showWindow(IContextWithPlannerTask context,
- Task task, org.zkoss.ganttz.data.Task ganttTask) {
+ public void showWindow(Task task,
+ IContextWithPlannerTask context) {
this.context = context;
-
- try {
- subcontractModel.init(task, ganttTask);
- Util.reloadBindings(window);
- window.doModal();
- } catch (SuspendNotAllowedException e) {
- throw new RuntimeException(e);
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
+ subcontractModel.init(task, context.getTask());
+ Util.reloadBindings(tabpanel);
}
- public void accept() {
- try {
- int status = Messagebox.YES;
- if (subcontractModel.hasResourceAllocations()) {
- try {
- status = Messagebox
- .show(
- _("As you are subcontracting this task, all the resource allocations related with this task will be removed.")
- + _("Are you sure?"),
- _("Confirm"), Messagebox.YES
- | Messagebox.NO,
- Messagebox.QUESTION);
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
+ public void accept() throws ValidationException {
+ int status = Messagebox.YES;
+ if (subcontractModel.hasResourceAllocations()) {
+ try {
+ status = Messagebox
+ .show(
+ _("As you are subcontracting this task, all the resource allocations related with this task will be removed.")
+ + _("Are you sure?"), _("Confirm"),
+ Messagebox.YES | Messagebox.NO,
+ Messagebox.QUESTION);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
}
+ }
- if (status == Messagebox.YES) {
- subcontractModel.confirm();
+ if (status == Messagebox.YES) {
+ subcontractModel.confirm();
+ if (context != null) {
context.reloadCharts();
- window.setVisible(false);
}
- } catch (ValidationException e) {
- messagesForUser.showInvalidValues(e);
}
}
public void cancel() {
subcontractModel.cancel();
- window.setVisible(false);
}
public List getSubcontractorExternalCompanies() {
@@ -142,4 +121,8 @@ public class SubcontractController extends GenericForwardComposer {
subcontractModel.setEndDate(endDate);
}
+ public void removeSubcontractedTaskData() {
+ subcontractModel.removeSubcontractedTaskData();
+ }
+
}
\ No newline at end of file
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 45c9d5921..de58a0bd9 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
@@ -23,7 +23,6 @@ package org.navalplanner.web.planner.order;
import java.util.Date;
import java.util.List;
-import org.navalplanner.business.common.daos.IConfigurationDAO;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.externalcompanies.daos.IExternalCompanyDAO;
import org.navalplanner.business.externalcompanies.entities.ExternalCompany;
@@ -63,9 +62,6 @@ public class SubcontractModel implements ISubcontractModel {
@Autowired
private ISubcontractedTaskDataDAO subcontractedTaskDataDAO;
- @Autowired
- private IConfigurationDAO configurationDAO;
-
@Override
@Transactional(readOnly = true)
public void init(Task task, org.zkoss.ganttz.data.Task ganttTask) {
@@ -77,8 +73,6 @@ public class SubcontractModel implements ISubcontractModel {
SubcontractedTaskData subcontractedTaskData = task
.getSubcontractedTaskData();
- forceLoadSubcontractedTaskData(subcontractedTaskData);
-
this.currentSubcontractedTaskData = subcontractedTaskData;
if (subcontractedTaskData == null) {
@@ -89,14 +83,6 @@ public class SubcontractModel implements ISubcontractModel {
}
}
- private void forceLoadSubcontractedTaskData(
- SubcontractedTaskData subcontractedTaskData) {
- if (subcontractedTaskData != null) {
- subcontractedTaskDataDAO.reattach(subcontractedTaskData);
- subcontractedTaskData.getWorkDescription();
- }
- }
-
@Override
public SubcontractedTaskData getSubcontractedTaskData() {
return subcontractedTaskData;
@@ -105,16 +91,24 @@ public class SubcontractModel implements ISubcontractModel {
@Override
@Transactional(readOnly = true)
public void confirm() throws ValidationException {
- subcontractedTaskDataDAO.save(subcontractedTaskData);
+ if (task != null) {
+ if (subcontractedTaskData == null) {
+ task.setSubcontractedTaskData(null);
+ } else {
+ subcontractedTaskDataDAO.save(subcontractedTaskData);
- if (currentSubcontractedTaskData == null) {
- task.setSubcontractedTaskData(subcontractedTaskData);
- } else {
- currentSubcontractedTaskData.applyChanges(subcontractedTaskData);
+ if (currentSubcontractedTaskData == null) {
+ task.setSubcontractedTaskData(subcontractedTaskData);
+ } else {
+ currentSubcontractedTaskData
+ .applyChanges(subcontractedTaskData);
+ }
+
+ task.removeAllResourceAllocations();
+ }
+
+ recalculateTaskLength();
}
-
- task.removeAllResourceAllocations();
- recalculateTaskLength();
}
private void recalculateTaskLength() {
@@ -168,4 +162,9 @@ public class SubcontractModel implements ISubcontractModel {
this.endDate = endDate;
}
-}
\ No newline at end of file
+ @Override
+ public void removeSubcontractedTaskData() {
+ subcontractedTaskData = null;
+ }
+
+}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/EditTaskController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/EditTaskController.java
index b5128831c..9b0e72fd6 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/EditTaskController.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/EditTaskController.java
@@ -19,13 +19,25 @@
*/
package org.navalplanner.web.planner.taskedition;
+
+import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.planner.entities.Task;
+import org.navalplanner.business.planner.entities.TaskElement;
+import org.navalplanner.web.common.IMessagesForUser;
+import org.navalplanner.web.common.MessagesForUser;
+import org.navalplanner.web.common.Util;
import org.navalplanner.web.planner.allocation.ResourceAllocationController;
import org.navalplanner.web.planner.order.SubcontractController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
+import org.zkoss.ganttz.extensions.IContextWithPlannerTask;
+import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.util.GenericForwardComposer;
+import org.zkoss.zul.api.Tab;
+import org.zkoss.zul.api.Tabbox;
+import org.zkoss.zul.api.Tabpanel;
+import org.zkoss.zul.api.Window;
/**
* Controller for edit a {@link Task}.
@@ -45,6 +57,30 @@ public class EditTaskController extends GenericForwardComposer {
@Autowired
private SubcontractController subcontractController;
+ private Window window;
+
+ private Tabbox editTaskTabbox;
+ private Tab resourceAllocationTab;
+ private Tab subcontractTab;
+ private Tabpanel taskPropertiesTabpanel;
+ private Tabpanel subcontractTabpanel;
+ private Component messagesContainer;
+
+ private IMessagesForUser messagesForUser;
+
+ private TaskElement taskElement;
+
+ private IContextWithPlannerTask context;
+
+ @Override
+ public void doAfterCompose(Component comp) throws Exception {
+ super.doAfterCompose(comp);
+ window = (Window) comp;
+ taskPropertiesController.doAfterCompose(taskPropertiesTabpanel);
+ subcontractController.doAfterCompose(subcontractTabpanel);
+ messagesForUser = new MessagesForUser(messagesContainer);
+ }
+
public TaskPropertiesController getTaskPropertiesController() {
return taskPropertiesController;
}
@@ -57,4 +93,87 @@ public class EditTaskController extends GenericForwardComposer {
return subcontractController;
}
+ private void showEditForm(IContextWithPlannerTask context,
+ TaskElement taskElement) {
+ this.taskElement = taskElement;
+ this.context = context;
+
+ taskPropertiesController.showEditFormFor(context, taskElement);
+ if (taskElement.isSubcontracted()) {
+ subcontractController.showWindow((Task) taskElement, context);
+ }
+
+ try {
+ Util.reloadBindings(window);
+ window.setMode("modal");
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void showEditFormTaskProperties(
+ IContextWithPlannerTask context,
+ TaskElement taskElement) {
+ editTaskTabbox.setSelectedPanelApi(taskPropertiesTabpanel);
+ showEditForm(context, taskElement);
+ }
+
+ public void showEditFormSubcontract(
+ IContextWithPlannerTask context,
+ TaskElement taskElement) {
+ if (taskElement.isSubcontracted()) {
+ editTaskTabbox.setSelectedPanelApi(subcontractTabpanel);
+ }
+ showEditForm(context, taskElement);
+ }
+
+ public void accept() {
+ try {
+ taskPropertiesController.accept();
+ subcontractController.accept();
+
+ taskElement = null;
+ context = null;
+
+ window.setVisible(false);
+ } catch (ValidationException e) {
+ messagesForUser.showInvalidValues(e);
+ }
+ }
+
+ public void cancel() {
+ taskPropertiesController.cancel();
+ subcontractController.cancel();
+
+ taskElement = null;
+ context = null;
+
+ window.setVisible(false);
+ }
+
+ public void subcontract(boolean subcontract) {
+ if (taskElement instanceof Task) {
+ if (subcontract) {
+ resourceAllocationTab.setVisible(false);
+ subcontractTab.setVisible(true);
+ subcontractController.showWindow((Task) taskElement, context);
+ } else {
+ subcontractTab.setVisible(false);
+ resourceAllocationTab.setVisible(true);
+ subcontractController.removeSubcontractedTaskData();
+ }
+ }
+ }
+
+ public boolean isSubcontracted() {
+ if (taskElement == null) {
+ return false;
+ }
+ return taskElement.isSubcontracted();
+ }
+
+ public boolean isNotSubcontracted() {
+ return !isSubcontracted();
+ }
+
}
\ No newline at end of file
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/ITaskPropertiesCommand.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/ITaskPropertiesCommand.java
index 0b837568c..d267f4a42 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/ITaskPropertiesCommand.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/ITaskPropertiesCommand.java
@@ -30,7 +30,6 @@ import org.zkoss.ganttz.extensions.ICommandOnTask;
*/
public interface ITaskPropertiesCommand extends ICommandOnTask {
- void setTaskPropertiesController(
- TaskPropertiesController taskPropertiesController);
+ void setEditTaskController(EditTaskController editTaskController);
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/TaskPropertiesCommand.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/TaskPropertiesCommand.java
index 2427ef6d4..3b1b7dcb7 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/TaskPropertiesCommand.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/TaskPropertiesCommand.java
@@ -22,15 +22,12 @@ package org.navalplanner.web.planner.taskedition;
import static org.navalplanner.web.I18nHelper._;
-import org.navalplanner.business.planner.daos.ITaskElementDAO;
-import org.navalplanner.business.planner.daos.ITaskSourceDAO;
-import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.planner.entities.TaskElement;
+import org.navalplanner.web.planner.order.IEditTaskUtilities;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Transactional;
import org.zkoss.ganttz.extensions.IContextWithPlannerTask;
/**
@@ -42,31 +39,17 @@ import org.zkoss.ganttz.extensions.IContextWithPlannerTask;
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class TaskPropertiesCommand implements ITaskPropertiesCommand {
- @Autowired
- private ITaskElementDAO taskElementDAO;
+ private EditTaskController editTaskController;
@Autowired
- private ITaskSourceDAO taskSourceDAO;
-
- private TaskPropertiesController taskPropertiesController;
+ private IEditTaskUtilities editTaskUtilities;
@Override
- @Transactional(readOnly = true)
public void doAction(IContextWithPlannerTask context,
TaskElement taskElement) {
- if (taskElement.getTaskSource() != null) {
- taskSourceDAO.reattach(taskElement.getTaskSource());
- }
- taskElementDAO.reattach(taskElement);
- if (taskElement instanceof Task) {
- forceLoadHoursGroup((Task) taskElement);
- }
+ editTaskUtilities.reattach(taskElement);
- taskPropertiesController.showEditFormFor(context, taskElement);
- }
-
- private void forceLoadHoursGroup(Task task) {
- task.getHoursGroup();
+ editTaskController.showEditFormTaskProperties(context, taskElement);
}
@Override
@@ -75,9 +58,9 @@ public class TaskPropertiesCommand implements ITaskPropertiesCommand {
}
@Override
- public void setTaskPropertiesController(
- TaskPropertiesController taskPropertiesController) {
- this.taskPropertiesController = taskPropertiesController;
+ public void setEditTaskController(
+ EditTaskController editTaskController) {
+ this.editTaskController = editTaskController;
}
@Override
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/TaskPropertiesController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/TaskPropertiesController.java
index 4ad06caf4..082286b53 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/TaskPropertiesController.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/taskedition/TaskPropertiesController.java
@@ -40,10 +40,11 @@ import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Intbox;
+import org.zkoss.zul.api.Checkbox;
import org.zkoss.zul.api.Combobox;
import org.zkoss.zul.api.Datebox;
import org.zkoss.zul.api.Row;
-import org.zkoss.zul.api.Window;
+import org.zkoss.zul.api.Tabpanel;
/**
* Controller for edit {@link Task} popup.
@@ -143,7 +144,7 @@ public class TaskPropertiesController extends GenericForwardComposer {
private TaskElement currentTaskElement;
- private Window window;
+ private Tabpanel tabpanel;
private Intbox hours;
@@ -157,6 +158,10 @@ public class TaskPropertiesController extends GenericForwardComposer {
private IContextWithPlannerTask currentContext;
+ private Row subcontract;
+
+ private Checkbox subcontractCheckbox;
+
public void showEditFormFor(IContextWithPlannerTask context,
TaskElement taskElement) {
this.currentContext = context;
@@ -170,12 +175,23 @@ public class TaskPropertiesController extends GenericForwardComposer {
Task task = (Task) currentTaskElement;
showDurationRow(task);
showStartConstraintRow(task);
+ showSubcontractRow(task);
} else {
hideDurationRow();
hideStartConstraintRow();
+ hideSubcontractRow();
}
hours.setValue(currentTaskElement.getWorkHours());
- Util.reloadBindings(window);
+ Util.reloadBindings(tabpanel);
+ }
+
+ private void hideSubcontractRow() {
+ subcontract.setVisible(false);
+ }
+
+ private void showSubcontractRow(Task task) {
+ subcontractCheckbox.setChecked(task.getSubcontractedTaskData() != null);
+ subcontract.setVisible(true);
}
private void hideStartConstraintRow() {
@@ -247,7 +263,7 @@ public class TaskPropertiesController extends GenericForwardComposer {
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
- window = (Window) comp;
+ tabpanel = (Tabpanel) comp;
taskEditFormComposer.doAfterCompose(comp);
WebStartConstraintType.appendItems(startConstraintTypes);
startConstraintTypes.addEventListener(Events.ON_SELECT,
diff --git a/navalplanner-webapp/src/main/webapp/planner/order.zul b/navalplanner-webapp/src/main/webapp/planner/order.zul
index 85ac8b7dd..e20545be0 100644
--- a/navalplanner-webapp/src/main/webapp/planner/order.zul
+++ b/navalplanner-webapp/src/main/webapp/planner/order.zul
@@ -43,54 +43,131 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TODO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ onClick="editController.accept();" />
+ onClick="editController.cancel();" />
@@ -235,78 +312,5 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-