diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityForm.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityForm.java index 2b237841b..2292b51f5 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityForm.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityForm.java @@ -405,9 +405,8 @@ public class QualityForm extends BaseEntity { public boolean checkConstraintAdvanceTypeIsNotNullIfReportAdvance() { if (advanceType == null) { return !isReportAdvance(); - } else { - return isReportAdvance(); } + return true; } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/qualityforms/IQualityFormModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/qualityforms/IQualityFormModel.java index 1f8212e1b..a11183d36 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/qualityforms/IQualityFormModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/qualityforms/IQualityFormModel.java @@ -121,4 +121,14 @@ public interface IQualityFormModel { */ void upQualityFormItem(QualityFormItem qualityFormItem); + /** + * Check if exist any {@link QualityFormItem } of the current quality form with the 100 percentage + */ + boolean hasItemWithTotalPercentage(); + + /** + * Check if the current {@link QualityFormItem } has a 100 percentage + * @param qualityFormItem + */ + Boolean isTotalPercentage(QualityFormItem item); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/qualityforms/QualityFormCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/qualityforms/QualityFormCRUDController.java index 3f835aa6e..5b4411f9c 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/qualityforms/QualityFormCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/qualityforms/QualityFormCRUDController.java @@ -42,6 +42,7 @@ import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.WrongValueException; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.util.GenericForwardComposer; +import org.zkoss.zul.Checkbox; import org.zkoss.zul.Column; import org.zkoss.zul.Combobox; import org.zkoss.zul.Constraint; @@ -336,6 +337,29 @@ public class QualityFormCRUDController extends GenericForwardComposer { * @param QualityFormItem */ public void confirmDeleteQualityFormItem(QualityFormItem item) { + if (qualityFormModel.isTotalPercentage(item)) { + try { + if (Messagebox + .show( + _("Deleting thi item, it will disable the report progress option. Are you sure?"), + _("Confirm"), + Messagebox.OK | Messagebox.CANCEL, + Messagebox.QUESTION) == Messagebox.OK) { + Checkbox reportProgress = (Checkbox) editWindow + .getFellowIfAny("checkBoxReportProgress"); + disabledCheckbocReportProgress(reportProgress); + } else { + return; + } + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + deleteQualityFormItem(item); + } + + private void deleteQualityFormItem(QualityFormItem item) { qualityFormModel.confirmDeleteQualityFormItem(item); Util.reloadBindings(gridQualityFormItems); } @@ -491,4 +515,28 @@ public class QualityFormCRUDController extends GenericForwardComposer { predicate = getSelectedName(); } + public void validateReportProgress(Component comp) { + Checkbox checkbox = (Checkbox) comp; + if (checkbox != null) { + if ((checkbox.isChecked()) && (!hasItemWithTotalPercentage())) { + disabledCheckbocReportProgress(checkbox); + messagesForUser + .showMessage( + Level.ERROR, + _("The quality form must have an item with 100% value to report progress")); + } + } + } + + private boolean hasItemWithTotalPercentage() { + return this.qualityFormModel.hasItemWithTotalPercentage(); + } + + private void disabledCheckbocReportProgress(Checkbox reportProgress) { + if (reportProgress != null) { + getQualityForm().setReportAdvance(false); + reportProgress.setChecked(false); + reportProgress.invalidate(); + } + } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/qualityforms/QualityFormModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/qualityforms/QualityFormModel.java index 0307d303d..85b6c525a 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/qualityforms/QualityFormModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/qualityforms/QualityFormModel.java @@ -21,6 +21,7 @@ package org.navalplanner.web.qualityforms; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -52,6 +53,8 @@ public class QualityFormModel implements IQualityFormModel { private List listQualityForms = new ArrayList(); + private final BigDecimal totalPercentage = new BigDecimal(100).setScale(2); + public QualityFormModel() { } @@ -197,4 +200,25 @@ public class QualityFormModel implements IQualityFormModel { this.getQualityForm().moveQualityFormItem(qualityFormItem, newPosition); } + @Override + public boolean hasItemWithTotalPercentage() { + // Check if the current quality form has any item with 100 percentage to + // can report progress + if (getQualityForm() != null) { + for (QualityFormItem item : this.getQualityForm() + .getQualityFormItems()) { + if (isTotalPercentage(item)) { + return true; + } + } + } + return false; + } + + @Override + public Boolean isTotalPercentage(QualityFormItem item) { + return (item.getPercentage() != null) ? (item.getPercentage() + .equals(totalPercentage)) : false; + } + } diff --git a/navalplanner-webapp/src/main/webapp/qualityforms/_editQualityForm.zul b/navalplanner-webapp/src/main/webapp/qualityforms/_editQualityForm.zul index 6bd69b9b9..473087216 100644 --- a/navalplanner-webapp/src/main/webapp/qualityforms/_editQualityForm.zul +++ b/navalplanner-webapp/src/main/webapp/qualityforms/_editQualityForm.zul @@ -61,7 +61,8 @@