From b2a1c2f3070f9e6e976c4acb34e2484b0c56bf24 Mon Sep 17 00:00:00 2001 From: Cristina Alvarino Date: Fri, 26 Aug 2011 10:01:18 +0200 Subject: [PATCH] [Bug #1143] A quality form cannot be deleted if it is associated to any task FEA: ItEr75S04BugFixing --- .../qualityforms/daos/IQualityFormDAO.java | 3 ++ .../qualityforms/daos/QualityFormDAO.java | 14 ++++++++ .../web/qualityforms/IQualityFormModel.java | 2 ++ .../QualityFormCRUDController.java | 32 +++++++++++++++++++ .../web/qualityforms/QualityFormModel.java | 6 ++++ 5 files changed, 57 insertions(+) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/IQualityFormDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/IQualityFormDAO.java index 160e8a60c..d0fc7d28c 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/IQualityFormDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/IQualityFormDAO.java @@ -26,6 +26,7 @@ import java.util.List; import org.hibernate.NonUniqueResultException; import org.navalplanner.business.common.daos.IGenericDAO; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; +import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.qualityforms.entities.QualityForm; import org.navalplanner.business.qualityforms.entities.QualityFormType; @@ -52,4 +53,6 @@ public interface IQualityFormDAO extends IGenericDAO { boolean existsOtherWorkReportTypeByName(QualityForm qualityForm); boolean existsByNameAnotherTransaction(QualityForm qualityForm); + + void checkHasTasks(QualityForm qualityForm) throws ValidationException; } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/QualityFormDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/QualityFormDAO.java index 3beb45b08..cfa4933d1 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/QualityFormDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/QualityFormDAO.java @@ -22,11 +22,13 @@ package org.navalplanner.business.qualityforms.daos; import java.math.BigDecimal; +import java.util.Collections; import java.util.List; import org.apache.commons.lang.Validate; import org.hibernate.Criteria; import org.hibernate.NonUniqueResultException; +import org.hibernate.Query; import org.hibernate.criterion.Restrictions; import org.navalplanner.business.advance.daos.IAdvanceTypeDAO; import org.navalplanner.business.advance.entities.AdvanceType; @@ -150,4 +152,16 @@ public class QualityFormDAO extends GenericDAOHibernate super.save(entity); } + @Override + public void checkHasTasks(QualityForm qualityForm) throws ValidationException { + Query query = getSession().createQuery( + "FROM TaskQualityForm taskQualityForm JOIN taskQualityForm.qualityForm tq WHERE tq IN (:qualityForms)"); + query.setParameterList("qualityForms", Collections.singleton(qualityForm)); + if (!query.list().isEmpty()) { + throw ValidationException + .invalidValue( + "Cannot delete quality form. It is being used at this moment by some task.", + qualityForm); + } + } } 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 be5e972b0..672bfbe31 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 @@ -132,4 +132,6 @@ public interface IQualityFormModel { * @param qualityFormItem */ Boolean isTotalPercentage(QualityFormItem item); + + void checkHasTasks(QualityForm qualityForm) throws ValidationException; } 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 c4c22a7df..2bad3ad79 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 @@ -27,15 +27,18 @@ import java.math.BigDecimal; import java.util.Iterator; import java.util.List; +import org.apache.commons.logging.LogFactory; import org.hibernate.validator.InvalidValue; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.qualityforms.entities.QualityForm; import org.navalplanner.business.qualityforms.entities.QualityFormItem; import org.navalplanner.business.qualityforms.entities.QualityFormType; +import org.navalplanner.business.users.entities.Profile; import org.navalplanner.web.common.BaseCRUDController; import org.navalplanner.web.common.Level; import org.navalplanner.web.common.Util; +import org.navalplanner.web.users.ProfileCRUDController; import org.springframework.beans.factory.annotation.Autowired; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.WrongValueException; @@ -58,6 +61,8 @@ import org.zkoss.zul.impl.InputElement; */ public class QualityFormCRUDController extends BaseCRUDController { + private static final org.apache.commons.logging.Log LOG = LogFactory.getLog(QualityFormCRUDController.class); + @Autowired private IQualityFormModel qualityFormModel; @@ -465,4 +470,31 @@ public class QualityFormCRUDController extends BaseCRUDController { Util.reloadBindings(qualityForms); } } + + @Override + protected boolean beforeDeleting(QualityForm qualityForm){ + return !isReferencedByOtherEntities(qualityForm); + } + + private boolean isReferencedByOtherEntities(QualityForm qualityForm) { + try { + qualityFormModel.checkHasTasks(qualityForm); + return false; + } catch (ValidationException e) { + showCannotDeleteQualityFormDialog(e.getInvalidValue().getMessage(), + qualityForm); + } + return true; + } + + private void showCannotDeleteQualityFormDialog(String message, QualityForm qualityForm) { + try { + Messagebox.show(_(message), _("Warning"), Messagebox.OK, + Messagebox.EXCLAMATION); + } catch (InterruptedException e) { + LOG.error( + _("Error on showing warning message removing qualityForm: ", + qualityForm.getId()), e); + } + } } 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 e153982fc..7bb75e5da 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 @@ -31,6 +31,7 @@ import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.qualityforms.daos.IQualityFormDAO; import org.navalplanner.business.qualityforms.entities.QualityForm; import org.navalplanner.business.qualityforms.entities.QualityFormItem; +import org.navalplanner.business.users.entities.Profile; import org.navalplanner.web.common.concurrentdetection.OnConcurrentModification; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; @@ -217,4 +218,9 @@ public class QualityFormModel implements IQualityFormModel { .equals(totalPercentage)) : false; } + @Override + @Transactional(readOnly = true) + public void checkHasTasks(QualityForm qualityForm) throws ValidationException { + qualityFormDAO.checkHasTasks(qualityForm); + } }