ItEr41S08CUAltaFormularioCalidadeItEr40S09 : Add master/details and constraints of the property quality form type 'by percentage'.
This commit is contained in:
parent
442ac2f7fe
commit
e32eb78452
10 changed files with 561 additions and 109 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<TaskQualityForm> getTaskQualityForms() {
|
||||
return assignedTaskQualityFormsToOrderElementModel
|
||||
.getTaskQualityForms();
|
||||
|
|
@ -188,20 +207,341 @@ public class AssignedTaskQualityFormsToOrderElementController extends
|
|||
.getNotAssignedQualityForms();
|
||||
}
|
||||
|
||||
public List<TaskQualityFormItem> 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<Date>() {
|
||||
@Override
|
||||
public Date get() {
|
||||
return item.getDate();
|
||||
}
|
||||
}, new Util.Setter<Date>() {
|
||||
|
||||
@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<Boolean>() {
|
||||
@Override
|
||||
public Boolean get() {
|
||||
return item.getPassed();
|
||||
}
|
||||
}, new Util.Setter<Boolean>() {
|
||||
|
||||
@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<Row> 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<Row> rows = (List<Row>) 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<TaskQualityFormItem> 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<TaskQualityFormItem>();
|
||||
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<TaskQualityFormItem> 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<TaskQualityFormItem> 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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"));
|
||||
|
|
|
|||
|
|
@ -193,6 +193,10 @@ public class OrderElementController extends GenericForwardComposer {
|
|||
selectTab("tabRequirements");
|
||||
return;
|
||||
}
|
||||
selectTab("tabTaskQualityForm");
|
||||
if (!assignedTaskQualityFormsController.confirm()) {
|
||||
return;
|
||||
}
|
||||
close();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
<window id="${arg.top_id}" title="${i18n:_('Edit order element')}"
|
||||
width="950px" left="50px" top="50px"
|
||||
closable="true" visible="false">
|
||||
<tabbox height="620px">
|
||||
<tabbox height="620px" id="tabboxOrderElement">
|
||||
<tabs>
|
||||
<tab id="tabDetails" label="${i18n:_('Details')}"></tab>
|
||||
<tab label="${i18n:_('Assigned hours')}"></tab>
|
||||
|
|
@ -37,7 +37,7 @@
|
|||
<tab label="${i18n:_('Labels')}"></tab>
|
||||
<tab id="tabRequirements" label="${i18n:_('Criterion Requirement')}"></tab>
|
||||
<tab label="${i18n:_('Materials')}"></tab>
|
||||
<tab label="${i18n:_('Task quality forms')}"></tab>
|
||||
<tab id="tabTaskQualityForm" label="${i18n:_('Task quality forms')}"></tab>
|
||||
</tabs>
|
||||
<tabpanels>
|
||||
<tabpanel>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
<tab id="tabRequirements" label="${i18n:_('Criterion Requirement')}"
|
||||
onClick = "controller.reloadHoursGroupOrder();"/>
|
||||
<tab label="${i18n:_('Materials')}" />
|
||||
<tab label="${i18n:_('Task quality forms')}" />
|
||||
<tab id="tabTaskQualityForm" label="${i18n:_('Task quality forms')}" />
|
||||
</tabs>
|
||||
<tabpanels>
|
||||
<tabpanel>
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
apply="org.navalplanner.web.orders.AssignedTaskQualityFormsToOrderElementController" >
|
||||
<!-- Quality Forms-->
|
||||
<vbox>
|
||||
<vbox id="messagesContainerTaskQualityForms"/>
|
||||
<panel title="${i18n:_('Task quality forms')}" border="normal">
|
||||
<panelchildren>
|
||||
<!-- Assign quality form -->
|
||||
|
|
@ -36,60 +37,17 @@
|
|||
</hbox>
|
||||
</vbox>
|
||||
<separator bar="false" spacing="40px" orient="vertical"/>
|
||||
<newdatasortablegrid id="assignedTaskQualityForms" height="100px" fixedLayout="true"
|
||||
<grid id="assignedTaskQualityForms" height="300px" fixedLayout="true"
|
||||
rowRenderer = "@{assignedTaskQualityFormsController.taskQualityFormsRowRenderer}"
|
||||
model="@{assignedTaskQualityFormsController.taskQualityForms}">
|
||||
<columns>
|
||||
<newdatasortablecolumn label="${i18n:_('Name')}" sort="auto(qualityForm.name)"/>
|
||||
<newdatasortablecolumn label="${i18n:_('Type')}" />
|
||||
<newdatasortablecolumn label="${i18n:_('Operations')}" />
|
||||
<column width="25px"/>
|
||||
<column label="${i18n:_('Task quality form name')}" sort="auto(qualityForm.name)"/>
|
||||
<column label="${i18n:_('Type')}" />
|
||||
<column label="${i18n:_('Operations')}" />
|
||||
</columns>
|
||||
<rows>
|
||||
<row self="@{each='taskQualityForm'}" value="@{taskQualityForm}">
|
||||
<label value="@{taskQualityForm.qualityForm.name}" />
|
||||
<label value="@{taskQualityForm.qualityForm.qualityFormType}" />
|
||||
</grid>
|
||||
|
||||
<hbox>
|
||||
<button sclass="icono" image="/common/img/ico_editar1.png"
|
||||
hoverImage="/common/img/ico_editar.png"
|
||||
tooltiptext="${i18n:_('Edit')}"
|
||||
onClick="assignedTaskQualityFormsController.editTaskQualityForm(self.parent.parent.value);">
|
||||
</button>
|
||||
|
||||
<button sclass="icono" image="/common/img/ico_borrar1.png"
|
||||
hoverImage="/common/img/ico_borrar.png"
|
||||
tooltiptext="${i18n:_('Delete')}"
|
||||
onClick="assignedTaskQualityFormsController.confirmRemove(self.parent.parent.value)">
|
||||
</button>
|
||||
</hbox>
|
||||
|
||||
</row>
|
||||
</rows>
|
||||
</newdatasortablegrid>
|
||||
|
||||
<separator bar="false" spacing="40px" orient="vertical"/>
|
||||
<panel title="${i18n:_('Task quality form Item Edition')}" border="none">
|
||||
<panelchildren>
|
||||
<grid id="editedTaskQualityFormItems" height="100px" fixedLayout="true"
|
||||
model="@{assignedTaskQualityFormsController.taskQualityFormItems}">
|
||||
<columns>
|
||||
<column label="${i18n:_('Name')}" sort="auto(name)"/>
|
||||
<column label="${i18n:_('Position')}" />
|
||||
<column label="${i18n:_('Percentage')}" />
|
||||
<column label="${i18n:_('Passed')}" />
|
||||
<column label="${i18n:_('Date')}" />
|
||||
</columns>
|
||||
<rows>
|
||||
<row self="@{each='taskQualityFormItem'}" value="@{taskQualityFormItem}">
|
||||
<label value="@{taskQualityFormItem.name}" />
|
||||
<label value="@{taskQualityFormItem.position}" />
|
||||
<label value="@{taskQualityFormItem.percentage}" />
|
||||
<checkbox checked="@{taskQualityFormItem.passed}" />
|
||||
<datebox value="@{taskQualityFormItem.date}"/>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
</panelchildren>
|
||||
</panel>
|
||||
<separator bar="false" spacing="40px" orient="vertical"/>
|
||||
</panelchildren>
|
||||
</panel>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue