ItEr49S04ValidacionEProbasFuncionaisItEr48S04: [Bug #368] Fixed bug. Added method "isAlreadyInUseThisOrAnyOfItsChildren" at OrderElementDAO.
This commit is contained in:
parent
e8376460da
commit
efd6bb9e74
6 changed files with 61 additions and 3 deletions
|
|
@ -113,4 +113,6 @@ public interface IOrderElementDAO extends IGenericDAO<OrderElement, Long> {
|
|||
|
||||
BigDecimal calculateMinWorkedHours(final List<OrderElement> list);
|
||||
|
||||
boolean isAlreadyInUseThisOrAnyOfItsChildren(OrderElement orderElement);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -119,4 +119,6 @@ public interface IOrderModel {
|
|||
|
||||
boolean userCanWrite(Order order, String loginName);
|
||||
|
||||
boolean isAlreadyInUse(OrderElement element);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue