diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java index 2fcfb1221..03d5ce8c8 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java @@ -274,6 +274,10 @@ public class OrderCRUDController extends GenericForwardComposer { } public void setupOrderElementTreeController() throws Exception { + if (!confirmLastTab()) + return; + setCurrentTab(); + if (orderElementTreeController == null) { OrderElementController orderElementController = new OrderElementController(); orderElementController.doAfterCompose(self @@ -290,6 +294,23 @@ public class OrderCRUDController extends GenericForwardComposer { } } + /* + * Operations to do before to change the selected tab + */ + private boolean confirmLastTab() { + if (getCurrentTab() != null) { + // Confirm advances tab. + if (getCurrentTab().getId().equals("tabAdvances")) { + if (!manageOrderElementAdvancesController.save()) { + resetSelectedTab(); + selectTab("tabAdvances"); + return false; + } + } + } + return true; + } + private void redraw(Component comp) { Util.createBindingsFor(comp); Util.reloadBindings(comp); @@ -303,6 +324,10 @@ public class OrderCRUDController extends GenericForwardComposer { private AssignedHoursToOrderElementController assignedHoursController; public void setupAssignedHoursToOrderElementController() throws Exception { + if (!confirmLastTab()) + return; + setCurrentTab(); + if (assignedHoursController == null) { Component orderElementHours = editWindow .getFellowIfAny("orderElementHours"); @@ -317,6 +342,10 @@ public class OrderCRUDController extends GenericForwardComposer { private ManageOrderElementAdvancesController manageOrderElementAdvancesController; public void setupManageOrderElementAdvancesController() throws Exception { + if (!confirmLastTab()) + return; + setCurrentTab(); + Component orderElementAdvances = editWindow .getFellowIfAny("orderElementAdvances"); if (manageOrderElementAdvancesController == null) { @@ -335,6 +364,10 @@ public class OrderCRUDController extends GenericForwardComposer { public void setupAssignedLabelsToOrderElementController() throws Exception { + if (!confirmLastTab()) + return; + setCurrentTab(); + if (assignedLabelsController == null) { LabelsAssignmentToOrderElementComponent labelsAssignment = (LabelsAssignmentToOrderElementComponent) editWindow .getFellow("orderElementLabels"); @@ -349,6 +382,10 @@ public class OrderCRUDController extends GenericForwardComposer { public void setupAssignedCriterionRequirementsToOrderElementController() throws Exception { + if (!confirmLastTab()) + return; + setCurrentTab(); + if (assignedCriterionRequirementController == null) { Component orderElementCriterionRequirements = editWindow .getFellowIfAny("orderElementCriterionRequirements"); @@ -367,6 +404,10 @@ public class OrderCRUDController extends GenericForwardComposer { public void setupAssignedMaterialsToOrderElementController() throws Exception { + if (!confirmLastTab()) + return; + setCurrentTab(); + if (assignedMaterialsController == null) { OrderElementMaterialAssignmentsComponent assignmentsComponent = (OrderElementMaterialAssignmentsComponent) editWindow .getFellowIfAny("orderElementMaterials"); @@ -381,6 +422,10 @@ public class OrderCRUDController extends GenericForwardComposer { private AssignedTaskQualityFormsToOrderElementController assignedTaskQualityFormController; public void setupAssignedTaskQualityFormsToOrderElementController() throws Exception { + if (!confirmLastTab()) + return; + setCurrentTab(); + Component orderElementTaskQualityForms = editWindow .getFellowIfAny("orderElementTaskQualityForms"); if (assignedTaskQualityFormController == null) { @@ -397,6 +442,10 @@ public class OrderCRUDController extends GenericForwardComposer { private OrderAuthorizationController orderAuthorizationController; public void setupOrderAuthorizationController() { + if (!confirmLastTab()) + return; + setCurrentTab(); + Component orderElementAuthorizations = editWindow .getFellowIfAny("orderElementAuthorizations"); if (orderAuthorizationController == null) { @@ -445,9 +494,10 @@ public class OrderCRUDController extends GenericForwardComposer { } public void saveAndContinue() { - setCurrentTab(); Order order = (Order) orderModel.getOrder(); final boolean isNewObject = order.isNewObject(); + setCurrentTab(); + Tab previousTab = getCurrentTab(); final boolean couldSave = save(); if (couldSave) { if(orderModel.userCanRead(order, SecurityUtils.getSessionUserLoginName())) { @@ -463,13 +513,15 @@ public class OrderCRUDController extends GenericForwardComposer { showWindow(editWindow); // come back to the current tab after initialize all tabs. - selectTab(getCurrentTab().getId()); - Events.sendEvent(new SelectEvent(Events.ON_SELECT, - getCurrentTab(), null)); + resetSelectedTab(); + selectTab(previousTab.getId()); + Events.sendEvent(new SelectEvent(Events.ON_SELECT, previousTab, + null)); if (isNewObject) { this.planningControllerEntryPoints.goToOrderDetails(order); } + } else { try { @@ -495,26 +547,31 @@ public class OrderCRUDController extends GenericForwardComposer { if (manageOrderElementAdvancesController != null) { selectTab("tabAdvances"); if (!manageOrderElementAdvancesController.save()) { + setCurrentTab(); return false; } } if (assignedCriterionRequirementController != null) { selectTab("tabRequirements"); if (!assignedCriterionRequirementController.close()) { + setCurrentTab(); return false; } } if (assignedTaskQualityFormController != null) { selectTab("tabTaskQualityForm"); if (!assignedTaskQualityFormController.confirm()) { - return false; + setCurrentTab(); + return false; } } createPercentageAdvances(); - // come back to the current tab after validate other tabs. - selectTab(getCurrentTab().getId()); + // come back to the default tab. + if (getCurrentTab() != null) { + selectTab(getCurrentTab().getId()); + } try { orderModel.save(); @@ -530,6 +587,7 @@ public class OrderCRUDController extends GenericForwardComposer { } catch (ValidationException e) { messagesForUser.showInvalidValues(e, new LabelCreatorForInvalidValues()); } + setCurrentTab(); return false; } @@ -569,6 +627,10 @@ public class OrderCRUDController extends GenericForwardComposer { selectTab("tabGeneralData"); } + private void resetSelectedTab() { + selectedTab = null; + } + private void setCurrentTab() { Tabbox tabboxOrder = (Tabbox) editWindow.getFellowIfAny("tabboxOrder"); if (tabboxOrder != null) { @@ -601,7 +663,9 @@ public class OrderCRUDController extends GenericForwardComposer { } public void reloadHoursGroupOrder() { - assignedCriterionRequirementController.reload(); + if (getCurrentTab().getId().equals("tabRequirements")) { + assignedCriterionRequirementController.reload(); + } } private void showWindow(Window window) { @@ -731,6 +795,12 @@ public class OrderCRUDController extends GenericForwardComposer { loadCustomerComponent(); } + public void setupOrderDetails() { + confirmLastTab(); + setCurrentTab(); + reloadDefaultTab(); + } + public void reloadDefaultTab() { Tabpanel tabPanel = (Tabpanel) editWindow .getFellow("tabPanelGeneralData"); diff --git a/navalplanner-webapp/src/main/webapp/orders/_edition.zul b/navalplanner-webapp/src/main/webapp/orders/_edition.zul index 5154ab594..d71aa6b05 100644 --- a/navalplanner-webapp/src/main/webapp/orders/_edition.zul +++ b/navalplanner-webapp/src/main/webapp/orders/_edition.zul @@ -37,7 +37,7 @@ + onSelect = "controller.setupOrderDetails();"/>