From 9877ba1b3f9d97bdc0edc95eea3b586c53a0b9e3 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Thu, 14 Jan 2010 12:40:58 +0100 Subject: [PATCH] ItEr43S18CUMarcarUnidadeTraballoExportableItEr42S25: Merged task properties and subcontract commands in a window with tabs. --- .../zkoss/ganttz/TaskEditFormComposer.java | 11 - .../business/planner/entities/Task.java | 4 + .../planner/entities/TaskElement.java | 5 + .../web/planner/order/EditTaskUtilities.java | 75 ++++++ .../web/planner/order/IEditTaskUtilities.java | 34 +++ .../planner/order/ISubcontractCommand.java | 3 +- .../web/planner/order/ISubcontractModel.java | 1 + .../web/planner/order/OrderPlanningModel.java | 15 +- .../web/planner/order/SubcontractCommand.java | 17 +- .../planner/order/SubcontractController.java | 71 ++---- .../web/planner/order/SubcontractModel.java | 45 ++-- .../taskedition/EditTaskController.java | 119 +++++++++ .../taskedition/ITaskPropertiesCommand.java | 3 +- .../taskedition/TaskPropertiesCommand.java | 33 +-- .../taskedition/TaskPropertiesController.java | 24 +- .../src/main/webapp/planner/order.zul | 238 +++++++++--------- 16 files changed, 456 insertions(+), 242 deletions(-) create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/EditTaskUtilities.java create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/IEditTaskUtilities.java 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 + + + + + + + + + + + + + + + + + + + + + + + +