diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/TaskQualityForm.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/TaskQualityForm.java index 5f5abfb70..d5a949643 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/TaskQualityForm.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/TaskQualityForm.java @@ -2,9 +2,11 @@ package org.navalplanner.business.qualityforms.entities; import java.util.ArrayList; import java.util.Collections; +import java.util.Date; import java.util.List; import org.apache.commons.lang.Validate; +import org.hibernate.validator.AssertTrue; import org.hibernate.validator.NotNull; import org.hibernate.validator.Valid; import org.navalplanner.business.common.BaseEntity; @@ -74,4 +76,62 @@ public class TaskQualityForm extends BaseEntity { } } + @SuppressWarnings("unused") + @AssertTrue(message = "dates must be consecutive.") + public boolean checkConstraintCorrectConsecutivesDate() { + for (TaskQualityFormItem item : taskQualityFormItems) { + if (!isCorrectConsecutiveDate(item)) { + return false; + } + } + return true; + } + + @SuppressWarnings("unused") + @AssertTrue(message = "dates must be consecutive.") + public boolean checkConstraintConsecutivePassedItems() { + for (TaskQualityFormItem item : taskQualityFormItems) { + if (!isCorrectConsecutivePassed(item)) { + return false; + } + } + return true; + } + + public boolean isCorrectConsecutivePassed(TaskQualityFormItem item) { + if (item.getPassed()) { + return (isPassedPreviousItem(item)); + } + return true; + } + + public boolean isCorrectConsecutiveDate(TaskQualityFormItem item) { + if (item.getPassed()) { + return ((isPassedPreviousItem(item)) && (isLaterToPreviousItemDate(item))); + } + return (item.getDate() == null); + } + + public boolean isPassedPreviousItem(TaskQualityFormItem item) { + Integer previousPosition = item.getPosition() - 1; + if ((previousPosition >= 0) + && (previousPosition < taskQualityFormItems.size())) { + return taskQualityFormItems.get(previousPosition).getPassed(); + } + return true; + } + + public boolean isLaterToPreviousItemDate(TaskQualityFormItem item) { + Integer previousPosition = item.getPosition() - 1; + if ((previousPosition >= 0) + && (previousPosition < taskQualityFormItems.size())) { + Date previousDate = taskQualityFormItems.get(previousPosition) + .getDate(); + return ((previousDate != null) && (item.getDate() != null) && ((previousDate + .before(item.getDate())) || (previousDate.equals(item + .getDate())))); + } + return true; + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/TaskQualityFormItem.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/TaskQualityFormItem.java index e2ecf9f92..b1727bc7d 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/TaskQualityFormItem.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/TaskQualityFormItem.java @@ -11,9 +11,9 @@ import org.navalplanner.business.INewObject; public class TaskQualityFormItem implements INewObject { - public final static String propertyName = "name"; + public final static String propertyDate = "date"; - public final static String propertyPercentage = "percentage"; + public final static String propertyPassed = "passed"; static TaskQualityFormItem create(QualityFormItem qualityFormItem) { TaskQualityFormItem taskQualityFormItem = new TaskQualityFormItem( @@ -109,4 +109,13 @@ public class TaskQualityFormItem implements INewObject { return false; } + @SuppressWarnings("unused") + @AssertTrue(message = "date not specified") + public boolean checkConstraintIfDateCanBeNull() { + if ((passed == null) || (!passed)) { + return true; + } else { + return (date != null); + } + } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedTaskQualityFormsToOrderElementController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedTaskQualityFormsToOrderElementController.java index 9e4e52bf9..8a140ab11 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedTaskQualityFormsToOrderElementController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedTaskQualityFormsToOrderElementController.java @@ -22,23 +22,41 @@ package org.navalplanner.web.orders; import static org.navalplanner.web.I18nHelper._; +import java.util.Date; import java.util.List; import org.apache.commons.logging.LogFactory; +import org.hibernate.validator.InvalidValue; +import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.qualityforms.entities.QualityForm; import org.navalplanner.business.qualityforms.entities.TaskQualityForm; import org.navalplanner.business.qualityforms.entities.TaskQualityFormItem; +import org.navalplanner.business.resources.entities.CriterionSatisfaction; +import org.navalplanner.web.common.ConstraintChecker; import org.navalplanner.web.common.IMessagesForUser; import org.navalplanner.web.common.Level; +import org.navalplanner.web.common.MessagesForUser; import org.navalplanner.web.common.Util; -import org.navalplanner.web.common.components.Autocomplete; import org.navalplanner.web.common.components.bandboxsearch.BandboxSearch; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.WrongValueException; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; +import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.util.GenericForwardComposer; +import org.zkoss.zul.Button; +import org.zkoss.zul.Checkbox; +import org.zkoss.zul.Column; +import org.zkoss.zul.Columns; +import org.zkoss.zul.Constraint; +import org.zkoss.zul.Datebox; +import org.zkoss.zul.Detail; import org.zkoss.zul.Grid; import org.zkoss.zul.Messagebox; +import org.zkoss.zul.Row; +import org.zkoss.zul.RowRenderer; +import org.zkoss.zul.SimpleListModel; /** * Controller for showing OrderElement assigned task quality forms @@ -56,23 +74,30 @@ public class AssignedTaskQualityFormsToOrderElementController extends private IAssignedTaskQualityFormsToOrderElementModel assignedTaskQualityFormsToOrderElementModel; - private Autocomplete cbQualityForms; - private Grid assignedTaskQualityForms; - private Grid editedTaskQualityFormItems; - private BandboxSearch bdQualityForms; + private TaskQualityFormItemsRowRenderer taskQualityFormItemsRowRenderer = new TaskQualityFormItemsRowRenderer(); + + private TaskQualityFormsRowRenderer taskQualityFormsRowRenderer = new TaskQualityFormsRowRenderer(); + + private IMessagesForUser messages; + + private Component messagesContainerTaskQualityForms; + @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); comp.setVariable("assignedTaskQualityFormsController", this, true); + messages = new MessagesForUser(messagesContainerTaskQualityForms); + this.reloadTaskQualityForms(); } public void openWindow(IOrderElementModel orderElementModel) { setOrderElementModel(orderElementModel); openWindow(getOrderElement()); + } private void openWindow(OrderElement orderElement) { @@ -172,12 +197,6 @@ public class AssignedTaskQualityFormsToOrderElementController extends reloadTaskQualityForms(); } - public void editTaskQualityForm(TaskQualityForm taskQualityForm) { - assignedTaskQualityFormsToOrderElementModel - .setTaskQualityForm(taskQualityForm); - Util.reloadBindings(editedTaskQualityFormItems); - } - public List getTaskQualityForms() { return assignedTaskQualityFormsToOrderElementModel .getTaskQualityForms(); @@ -188,20 +207,341 @@ public class AssignedTaskQualityFormsToOrderElementController extends .getNotAssignedQualityForms(); } - public List getTaskQualityFormItems() { - return assignedTaskQualityFormsToOrderElementModel - .getTaskQualityFormItems(); - } - private void reloadTaskQualityForms() { Util.reloadBindings(bdQualityForms); Util.reloadBindings(assignedTaskQualityForms); - assignedTaskQualityFormsToOrderElementModel - .clearEditTaskQualityFormItems(); - Util.reloadBindings(editedTaskQualityFormItems); } public void close() { - } + + public TaskQualityFormsRowRenderer getTaskQualityFormsRowRenderer() { + return taskQualityFormsRowRenderer; + } + + public class TaskQualityFormsRowRenderer implements RowRenderer { + + @Override + public void render(Row row, Object data) throws Exception { + TaskQualityForm taskQualityForm = (TaskQualityForm) data; + row.setValue(data); + + appendDetails(row, taskQualityForm); + appendNewLabel(row, taskQualityForm.getQualityForm().getName()); + appendNewLabel(row, taskQualityForm.getQualityForm() + .getQualityFormType().toString()); + appendOperations(row); + } + } + + private void appendDetails(Row row, TaskQualityForm taskQualityForm) { + Detail details = new Detail(); + details.setParent(row); + details.appendChild(appendGridItems(row, taskQualityForm)); + details.setOpen(false); + } + + private Grid appendGridItems(Row row, TaskQualityForm taskQualityForm) { + Grid gridItems = new Grid(); + + gridItems.setMold("paging"); + gridItems.setPageSize(5); + gridItems.setFixedLayout(true); + + renderColumns(gridItems); + + gridItems.setRowRenderer(getTaskQualityFormItemsRowRenderer()); + gridItems.setModel(new SimpleListModel(taskQualityForm + .getTaskQualityFormItems().toArray())); + + return gridItems; + } + + private void renderColumns(Grid gridItems) { + + Columns columns = gridItems.getColumns(); + // Create listhead first time is rendered + if (columns == null) { + columns = new Columns(); + } + // Delete all headers + columns.getChildren().clear(); + columns.setSizable(true); + + // Add static headers + Column columnName = new Column(); + columnName.setLabel(_("Name")); + columnName.setSort("auto=(name)"); + columnName.setSortDirection("ascending"); + columns.appendChild(columnName); + + Column columnPosition = new Column(); + columnPosition.setLabel(_("Position")); + columns.appendChild(columnPosition); + + Column columnPercentage = new Column(); + columnPercentage.setLabel(_("Percentage")); + columns.appendChild(columnPercentage); + + Column columnPassed = new Column(); + columnPassed.setLabel(_("Passed")); + columns.appendChild(columnPassed); + + Column columnDate = new Column(); + columnDate.setLabel(_("Date")); + columns.appendChild(columnDate); + + columns.setParent(gridItems); + } + + private void appendOperations(final Row row) { + Button buttonRemove = new Button(); + buttonRemove.setParent(row); + buttonRemove.setClass("icono"); + buttonRemove.setImage("/common/img/ico_borrar1.png"); + buttonRemove.setHoverImage("/common/img/ico_borrar.png"); + buttonRemove.setTooltiptext(_("Delete")); + + buttonRemove.addEventListener(Events.ON_CLICK, new EventListener() { + @Override + public void onEvent(Event event) throws Exception { + confirmRemove((TaskQualityForm) row.getValue()); + } + }); + } + + public TaskQualityFormItemsRowRenderer getTaskQualityFormItemsRowRenderer() { + return taskQualityFormItemsRowRenderer; + } + + public class TaskQualityFormItemsRowRenderer implements RowRenderer { + + @Override + public void render(Row row, Object data) throws Exception { + TaskQualityFormItem item = (TaskQualityFormItem) data; + row.setValue(data); + + appendNewLabel(row, item.getName()); + appendNewLabel(row, item.getPosition().toString()); + appendNewLabel(row, item.getPercentage().toString()); + appendCheckPassed(row); + appendDate(row); + } + } + + private void appendNewLabel(Row row, String label) { + org.zkoss.zul.Label labelName = new org.zkoss.zul.Label(); + labelName.setParent(row); + labelName.setValue(label); + } + + private void appendDate(final Row row) { + Datebox date = new Datebox(); + date.setParent(row); + + final TaskQualityForm taskQualityForm = getTaskQualityFormByRow(row); + final TaskQualityFormItem item = (TaskQualityFormItem) row.getValue(); + + date.setDisabled(assignedTaskQualityFormsToOrderElementModel + .isDisabledDateItem(taskQualityForm, item)); + + Util.bind(date, new Util.Getter() { + @Override + public Date get() { + return item.getDate(); + } + }, new Util.Setter() { + + @Override + public void set(Date value) { + item.setDate(value); + } + }); + + date.setConstraint(checkConsecutiveDate(row)); + } + + private void appendCheckPassed(final Row row) { + Checkbox checkbox = new Checkbox(); + checkbox.setParent(row); + + final TaskQualityForm taskQualityForm = getTaskQualityFormByRow(row); + final TaskQualityFormItem item = (TaskQualityFormItem) row.getValue(); + + checkbox.setDisabled(assignedTaskQualityFormsToOrderElementModel + .isDisabledPassedItem(taskQualityForm, item)); + + Util.bind(checkbox, new Util.Getter() { + @Override + public Boolean get() { + return item.getPassed(); + } + }, new Util.Setter() { + + @Override + public void set(Boolean value) { + item.setPassed(value); + } + }); + + checkbox.addEventListener(Events.ON_CHECK, new EventListener() { + @Override + public void onEvent(Event event) throws Exception { + assignedTaskQualityFormsToOrderElementModel + .updatePassedTaskQualityFormItems(taskQualityForm); + Util.reloadBindings(assignedTaskQualityForms); + } + }); + } + + private Constraint checkConsecutiveDate(final Row row) { + return new Constraint() { + @Override + public void validate(Component comp, Object value) + throws WrongValueException { + final TaskQualityFormItem item = (TaskQualityFormItem) row + .getValue(); + final TaskQualityForm taskQualityForm = getTaskQualityFormByRow(row); + + if (taskQualityForm != null) { + item.setDate((Date) value); + + if (((Date) value == null) + && (!item.checkConstraintIfDateCanBeNull())) { + item.setDate(null); + throw new WrongValueException(comp, + _("The date cannot be null.")); + } + if (!taskQualityForm.isCorrectConsecutiveDate(item)) { + item.setDate(null); + throw new WrongValueException( + comp, + _("The date must be later the previous item date, and previous the later item date.")); + } + } + } + }; + } + + private TaskQualityForm getTaskQualityFormByRow(final Row row) { + try { + return (TaskQualityForm) ((Row) row.getGrid().getParent() + .getParent()).getValue(); + } catch (Exception e) { + return null; + } + } + + // Operations to confirm and validate + + public boolean confirm() { + return (validateConstraints() && validate()); + } + + private boolean validateConstraints() { + return ConstraintChecker.isValid(self); + } + + /** + * Shows invalid values for {@link CriterionSatisfaction} entities + * @param e + */ + private boolean validate() throws ValidationException { + try { + assignedTaskQualityFormsToOrderElementModel.validate(); + reloadTaskQualityForms(); + } catch (ValidationException e) { + showInvalidValues(e); + return false; + } catch (IllegalStateException e) { + messages.showMessage(Level.ERROR, e.getMessage()); + return false; + } catch (IllegalArgumentException e) { + messages.showMessage(Level.ERROR, e.getMessage()); + return false; + } + return true; + } + + /** + * Shows invalid values for {@link TaskQualityForm} entities + * @param e + */ + private void showInvalidValues(ValidationException e) { + for (InvalidValue invalidValue : e.getInvalidValues()) { + Object value = invalidValue.getBean(); + if (value instanceof TaskQualityForm) { + showInvalidValue(invalidValue, (TaskQualityForm) value); + } + } + } + + private void showInvalidValue(InvalidValue invalidValue, + TaskQualityForm taskQualityForm) { + if (assignedTaskQualityForms != null) { + // Find which row contains TaskQualityForm inside grid + Row row = findRowOfTaskQualityForm(assignedTaskQualityForms + .getRows().getChildren(), taskQualityForm); + + if (row != null) { + String itemName = (String) invalidValue.getValue(); + String propertyName = invalidValue.getPropertyName(); + Row rowItem = findRowOfTaskQualityFormItem(row, itemName); + + if (rowItem != null) { + if (TaskQualityFormItem.propertyDate.equals(propertyName)) { + Datebox datebox = getDatebox(rowItem); + throw new WrongValueException(datebox, invalidValue + .getMessage()); + } + if (TaskQualityFormItem.propertyPassed.equals(propertyName)) { + Checkbox checkbox = getCheckbox(rowItem); + throw new WrongValueException(checkbox, invalidValue + .getMessage()); + } + } + } + } + } + + private Row findRowOfTaskQualityForm(List rows, + TaskQualityForm taskQualityForm) { + for (Row row : rows) { + if (taskQualityForm.equals(row.getValue())) { + return row; + } + } + return null; + } + + private Row findRowOfTaskQualityFormItem(Row rowTaskQualityForm, + String itemName) { + Grid gridItems = (Grid) rowTaskQualityForm.getFirstChild() + .getFirstChild(); + List rows = (List) gridItems.getRows().getChildren(); + for (Row row : rows) { + TaskQualityFormItem item = (TaskQualityFormItem) row.getValue(); + if ((item != null) && (itemName.equals(item.getName()))) { + return row; + } + } + return null; + } + + private void openDetails(Row row) { + if (row.getValue() instanceof TaskQualityForm) { + ((Detail) row.getFirstChild()).setOpen(true); + } else { + ((Detail) row.getGrid().getParent()).setOpen(true); + } + } + + private Datebox getDatebox(Row row) { + return (Datebox) row.getChildren().get(4); + } + + private Checkbox getCheckbox(Row row) { + return (Checkbox) row.getChildren().get(3); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedTaskQualityFormsToOrderElementModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedTaskQualityFormsToOrderElementModel.java index 11d170fd9..dd619b160 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedTaskQualityFormsToOrderElementModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedTaskQualityFormsToOrderElementModel.java @@ -20,10 +20,14 @@ package org.navalplanner.web.orders; +import static org.navalplanner.web.I18nHelper._; + import java.util.ArrayList; import java.util.Collection; import java.util.List; +import org.hibernate.validator.InvalidValue; +import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.orders.daos.IOrderElementDAO; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.qualityforms.daos.IQualityFormDAO; @@ -68,7 +72,6 @@ public class AssignedTaskQualityFormsToOrderElementModel implements @Transactional(readOnly = true) public void init(OrderElement orderElement) { this.orderElement = orderElement; - this.taskQualityForm = null; initializeOrderElement(this.orderElement); } @@ -155,24 +158,85 @@ public class AssignedTaskQualityFormsToOrderElementModel implements this.orderModel = orderModel; } - // Operations to manage the task quality form items - - private TaskQualityForm taskQualityForm; - - public void setTaskQualityForm(TaskQualityForm taskQualityForm) { - this.taskQualityForm = taskQualityForm; - } - - @Override - public void clearEditTaskQualityFormItems() { - this.taskQualityForm = null; - } - - @Override - public List getTaskQualityFormItems() { - if (this.taskQualityForm != null) { - return taskQualityForm.getTaskQualityFormItems(); + public boolean isDisabledPassedItem(TaskQualityForm taskQualityForm, + TaskQualityFormItem item) { + if ((taskQualityForm == null) || ((item == null))) { + return true; } - return new ArrayList(); + return (!(item.getPassed() || taskQualityForm + .isPassedPreviousItem(item))); } + + public boolean isDisabledDateItem(TaskQualityForm taskQualityForm, + TaskQualityFormItem item) { + if ((taskQualityForm == null) || ((item == null))) { + return true; + } + return (!item.getPassed()); + } + + public void updatePassedTaskQualityFormItems(TaskQualityForm taskQualityForm) { + if (taskQualityForm != null) { + Integer position = getFirstNotPassedPosition(taskQualityForm); + List items = taskQualityForm + .getTaskQualityFormItems(); + for (int i = position; i < items.size(); i++) { + items.get(i).setPassed(false); + items.get(i).setDate(null); + } + } + } + + private Integer getFirstNotPassedPosition(TaskQualityForm taskQualityForm) { + Integer position = 0; + for (TaskQualityFormItem item : taskQualityForm + .getTaskQualityFormItems()) { + if (!item.getPassed()) { + return position; + } + position++; + } + return position; + } + + // Operation to confirm and validate + + @Override + public void validate() { + if (getOrderElement() != null) { + for (TaskQualityForm taskQualityForm : orderElement + .getTaskQualityForms()) { + validateTaskQualityForm(taskQualityForm); + } + } + } + + private void validateTaskQualityForm(TaskQualityForm taskQualityForm) { + validateTaskQualityFormItems(taskQualityForm); + } + + private void validateTaskQualityFormItems(TaskQualityForm taskQualityForm) { + for (TaskQualityFormItem item : taskQualityForm + .getTaskQualityFormItems()) { + + if (!taskQualityForm.isCorrectConsecutivePassed(item)) { + throw new ValidationException(new InvalidValue( + _("must be consecutive"), TaskQualityForm.class, + "passed", item.getName(), taskQualityForm)); + } + + if (!taskQualityForm.isCorrectConsecutiveDate(item)) { + throw new ValidationException(new InvalidValue( + _("must be consecutive"), TaskQualityForm.class, + "date", item.getName(), taskQualityForm)); + } + + if (!item.checkConstraintIfDateCanBeNull()) { + throw new ValidationException(new InvalidValue( + _("cannot be null"), TaskQualityForm.class, "date", + item.getName(), taskQualityForm)); + } + } + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IAssignedTaskQualityFormsToOrderElementModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IAssignedTaskQualityFormsToOrderElementModel.java index ecc0646c7..70367d41e 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IAssignedTaskQualityFormsToOrderElementModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IAssignedTaskQualityFormsToOrderElementModel.java @@ -24,6 +24,7 @@ import java.util.List; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.qualityforms.entities.QualityForm; +import org.navalplanner.business.qualityforms.entities.QualityFormItem; import org.navalplanner.business.qualityforms.entities.TaskQualityForm; import org.navalplanner.business.qualityforms.entities.TaskQualityFormItem; @@ -85,21 +86,33 @@ public interface IAssignedTaskQualityFormsToOrderElementModel { void setOrderModel(IOrderModel orderModel); /** - * Reset or clear the current {@link TaskQualityForm} selected for editing - * @param - */ - void clearEditTaskQualityFormItems(); - - /** - * Returns all the {@link TaskQualityFormItem} assigned the current - * {@link TaskQualityForm} - * @return - */ - List getTaskQualityFormItems(); - - /** - * Set {@link TaskQualityForm} + * Update the date and the property passed of all the + * {@link TaskQualityFormItem} of the {@ TaskQualityForm} * @param taskQualityForm */ - void setTaskQualityForm(TaskQualityForm taskQualityForm); + void updatePassedTaskQualityFormItems(TaskQualityForm taskQualityForm); + + /** + * Check whether {@link QualityFormItem} the property passed must be + * disabled + * @param taskQualityForm + * ,item + */ + boolean isDisabledPassedItem(TaskQualityForm taskQualityForm, + TaskQualityFormItem item); + + /** + * Check whether {@link QualityFormItem} date mustbe disabled + * @param taskQualityForm + * ,item + */ + boolean isDisabledDateItem(TaskQualityForm taskQualityForm, + TaskQualityFormItem item); + + /** + * Check whether all {@link QualityForm} and its {@link QualityFormItem} are + * valid. + * @param + */ + void validate(); } 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 5748f41a1..1d37a6284 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 { if (!assignedCriterionRequirementController.close()) { selectTab("tabRequirements"); } + selectTab("tabTaskQualityForm"); + if (!assignedTaskQualityFormController.confirm()) { + return false; + } try { orderModel.save(); messagesForUser.showMessage(Level.INFO, _("Order saved")); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementController.java index a6375855a..af1778826 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementController.java @@ -193,6 +193,10 @@ public class OrderElementController extends GenericForwardComposer { selectTab("tabRequirements"); return; } + selectTab("tabTaskQualityForm"); + if (!assignedTaskQualityFormsController.confirm()) { + return; + } close(); } diff --git a/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul b/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul index 5e4f92edc..bb964e2bf 100644 --- a/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul +++ b/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul @@ -29,7 +29,7 @@ - + @@ -37,7 +37,7 @@ - + diff --git a/navalplanner-webapp/src/main/webapp/orders/_edition.zul b/navalplanner-webapp/src/main/webapp/orders/_edition.zul index d9515c2b3..d74bf8274 100644 --- a/navalplanner-webapp/src/main/webapp/orders/_edition.zul +++ b/navalplanner-webapp/src/main/webapp/orders/_edition.zul @@ -37,7 +37,7 @@ - + diff --git a/navalplanner-webapp/src/main/webapp/orders/_listOrderElementTaskQualityForms.zul b/navalplanner-webapp/src/main/webapp/orders/_listOrderElementTaskQualityForms.zul index 6f34c6d7e..ac24b8d8f 100644 --- a/navalplanner-webapp/src/main/webapp/orders/_listOrderElementTaskQualityForms.zul +++ b/navalplanner-webapp/src/main/webapp/orders/_listOrderElementTaskQualityForms.zul @@ -22,6 +22,7 @@ apply="org.navalplanner.web.orders.AssignedTaskQualityFormsToOrderElementController" > + @@ -36,60 +37,17 @@ - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - -