[Bug #1143] A quality form cannot be deleted if it is associated to any task

FEA: ItEr75S04BugFixing
This commit is contained in:
Cristina Alvarino 2011-08-26 10:01:18 +02:00 committed by Manuel Rego Casasnovas
parent 0063dd5e74
commit b2a1c2f307
5 changed files with 57 additions and 0 deletions

View file

@ -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<QualityForm, Long> {
boolean existsOtherWorkReportTypeByName(QualityForm qualityForm);
boolean existsByNameAnotherTransaction(QualityForm qualityForm);
void checkHasTasks(QualityForm qualityForm) throws ValidationException;
}

View file

@ -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<QualityForm, Long>
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);
}
}
}

View file

@ -132,4 +132,6 @@ public interface IQualityFormModel {
* @param qualityFormItem
*/
Boolean isTotalPercentage(QualityFormItem item);
void checkHasTasks(QualityForm qualityForm) throws ValidationException;
}

View file

@ -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<QualityForm> {
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<QualityForm> {
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);
}
}
}

View file

@ -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);
}
}