ItEr49S04ValidacionEProbasFuncionaisItEr48S04: [Bug #368] Fixed bug. Added method "isAlreadyInUseThisOrAnyOfItsChildren" at OrderElementDAO.

This commit is contained in:
Manuel Rego Casasnovas 2010-03-03 13:11:04 +01:00 committed by Javier Moran Rua
parent e8376460da
commit efd6bb9e74
6 changed files with 61 additions and 3 deletions

View file

@ -113,4 +113,6 @@ public interface IOrderElementDAO extends IGenericDAO<OrderElement, Long> {
BigDecimal calculateMinWorkedHours(final List<OrderElement> list);
boolean isAlreadyInUseThisOrAnyOfItsChildren(OrderElement orderElement);
}

View file

@ -38,6 +38,7 @@ import org.navalplanner.business.orders.entities.TaskSource;
import org.navalplanner.business.planner.daos.ITaskSourceDAO;
import org.navalplanner.business.templates.entities.OrderElementTemplate;
import org.navalplanner.business.workreports.daos.IWorkReportLineDAO;
import org.navalplanner.business.workreports.entities.WorkReport;
import org.navalplanner.business.workreports.entities.WorkReportLine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
@ -362,4 +363,31 @@ public class OrderElementDAO extends GenericDAOHibernate<OrderElement, Long>
return min;
}
private boolean isAlreadyInUse(OrderElement orderElement) {
boolean usedInWorkReports = !getSession().createCriteria(
WorkReport.class).add(
Restrictions.eq("orderElement", orderElement)).list().isEmpty();
boolean usedInWorkReportLines = !getSession().createCriteria(
WorkReportLine.class).add(
Restrictions.eq("orderElement", orderElement)).list().isEmpty();
return usedInWorkReports || usedInWorkReportLines;
}
@Override
public boolean isAlreadyInUseThisOrAnyOfItsChildren(
OrderElement orderElement) {
if (isAlreadyInUse(orderElement)) {
return true;
}
for (OrderElement child : orderElement.getChildren()) {
if (isAlreadyInUseThisOrAnyOfItsChildren(child)) {
return true;
}
}
return false;
}
}

View file

@ -119,4 +119,6 @@ public interface IOrderModel {
boolean userCanWrite(Order order, String loginName);
boolean isAlreadyInUse(OrderElement element);
}

View file

@ -277,7 +277,7 @@ public class OrderCRUDController extends GenericForwardComposer {
orderElementController.doAfterCompose(self
.getFellow("editOrderElement"));
orderElementTreeController = new OrderElementTreeController(
orderModel, orderElementController);
orderModel, orderElementController, messagesForUser);
TreeComponent orderElementsTree = (TreeComponent) editWindow
.getFellow("orderElementTree");

View file

@ -38,6 +38,8 @@ import org.navalplanner.business.orders.entities.OrderLineGroup;
import org.navalplanner.business.orders.entities.SchedulingState;
import org.navalplanner.business.requirements.entities.CriterionRequirement;
import org.navalplanner.business.templates.entities.OrderElementTemplate;
import org.navalplanner.web.common.IMessagesForUser;
import org.navalplanner.web.common.Level;
import org.navalplanner.web.common.Util;
import org.navalplanner.web.common.Util.Getter;
import org.navalplanner.web.common.Util.Setter;
@ -97,6 +99,8 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
@Resource
private IOrderTemplatesControllerEntryPoints orderTemplates;
private final IMessagesForUser messagesForUser;
public List<org.navalplanner.business.labels.entities.Label> getLabels() {
return orderModel.getLabels();
}
@ -107,10 +111,12 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
}
public OrderElementTreeController(IOrderModel orderModel,
OrderElementController orderElementController) {
OrderElementController orderElementController,
IMessagesForUser messagesForUser) {
super(OrderElement.class);
this.orderModel = orderModel;
this.orderElementController = orderElementController;
this.messagesForUser = messagesForUser;
}
public OrderElementController getOrderElementController() {
@ -673,4 +679,19 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
};
}
@Override
protected void remove(OrderElement element) {
boolean alreadyInUse = orderModel.isAlreadyInUse(element);
if (alreadyInUse) {
messagesForUser
.showMessage(
Level.ERROR,
_(
"You can not remove the order element \"{0}\" because of this or any of its children are already in use in some work reports",
element.getName()));
} else {
super.remove(element);
}
}
}

View file

@ -50,7 +50,6 @@ import org.navalplanner.business.labels.daos.ILabelDAO;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.orders.daos.IOrderDAO;
import org.navalplanner.business.orders.daos.IOrderElementDAO;
import org.navalplanner.business.orders.entities.CriterionRequirementOrderElementHandler;
import org.navalplanner.business.orders.entities.HoursGroup;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.orders.entities.OrderElement;
@ -754,4 +753,10 @@ public class OrderModel implements IOrderModel {
return false;
}
@Override
@Transactional(readOnly = true)
public boolean isAlreadyInUse(OrderElement element) {
return orderElementDAO.isAlreadyInUseThisOrAnyOfItsChildren(element);
}
}