Bug #1555: Fix issue adding condition in both UI and web service
FEA: ItEr77S04BugFixing
This commit is contained in:
parent
774b97a26b
commit
944d59e2b9
7 changed files with 82 additions and 19 deletions
|
|
@ -109,6 +109,8 @@ public interface IOrderElementDAO extends IIntegrationEntityDAO<OrderElement> {
|
|||
|
||||
EffortDuration calculateMinWorkedHours(final List<OrderElement> list);
|
||||
|
||||
boolean isAlreadyInUse(OrderElement orderElement);
|
||||
|
||||
boolean isAlreadyInUseThisOrAnyOfItsChildren(OrderElement orderElement);
|
||||
|
||||
/**
|
||||
|
|
@ -130,6 +132,8 @@ public interface IOrderElementDAO extends IIntegrationEntityDAO<OrderElement> {
|
|||
|
||||
boolean hasImputedExpenseSheet(Long id) throws InstanceNotFoundException;
|
||||
|
||||
boolean hasImputedExpenseSheetThisOrAnyOfItsChildren(Long id) throws InstanceNotFoundException;
|
||||
|
||||
OrderElement findByExternalCode(String code) throws InstanceNotFoundException;
|
||||
|
||||
public List<OrderElement> findByLabelsAndCriteria(Set<Label> labels,
|
||||
|
|
|
|||
|
|
@ -421,7 +421,8 @@ public class OrderElementDAO extends IntegrationEntityDAO<OrderElement>
|
|||
return min;
|
||||
}
|
||||
|
||||
private boolean isAlreadyInUse(OrderElement orderElement) {
|
||||
@Override
|
||||
public boolean isAlreadyInUse(OrderElement orderElement) {
|
||||
if (orderElement.isNewObject()) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -518,7 +519,14 @@ public class OrderElementDAO extends IntegrationEntityDAO<OrderElement>
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean hasImputedExpenseSheet(Long id) throws InstanceNotFoundException {
|
||||
public boolean hasImputedExpenseSheet(Long id)
|
||||
throws InstanceNotFoundException {
|
||||
OrderElement orderElement = find(id);
|
||||
return (!expenseSheetLineDAO.findByOrderElement(orderElement).isEmpty());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasImputedExpenseSheetThisOrAnyOfItsChildren(Long id) throws InstanceNotFoundException {
|
||||
OrderElement orderElement = find(id);
|
||||
return (!expenseSheetLineDAO.findByOrderElementAndChildren(orderElement).isEmpty());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ public interface IOrderModel extends IIntegrationEntityModel {
|
|||
|
||||
PlanningState getPlanningState();
|
||||
|
||||
boolean hasImputedExpenseSheets(OrderElement order);
|
||||
boolean hasImputedExpenseSheetsThisOrAnyOfItsChildren(OrderElement order);
|
||||
|
||||
void removeAskedEndDate(EndDateCommunication endDate);
|
||||
|
||||
|
|
@ -145,4 +145,7 @@ public interface IOrderModel extends IIntegrationEntityModel {
|
|||
|
||||
boolean isAnyTaskWithConstraint(PositionConstraintType type);
|
||||
|
||||
boolean isOnlyChildAndParentAlreadyInUseByHoursOrExpenses(
|
||||
OrderElement orderElement);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -843,7 +843,7 @@ public class OrderCRUDController extends GenericForwardComposer {
|
|||
}
|
||||
|
||||
private void remove(Order order) {
|
||||
boolean hasImputedExpenseSheets = orderModel.hasImputedExpenseSheets(order);
|
||||
boolean hasImputedExpenseSheets = orderModel.hasImputedExpenseSheetsThisOrAnyOfItsChildren(order);
|
||||
if (hasImputedExpenseSheets) {
|
||||
messagesForUser
|
||||
.showMessage(
|
||||
|
|
|
|||
|
|
@ -702,7 +702,8 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
|
|||
|
||||
@Override
|
||||
public void remove(OrderElement element) {
|
||||
boolean hasImputedExpenseSheets = orderModel.hasImputedExpenseSheets(element);
|
||||
boolean hasImputedExpenseSheets = orderModel
|
||||
.hasImputedExpenseSheetsThisOrAnyOfItsChildren(element);
|
||||
if (hasImputedExpenseSheets) {
|
||||
messagesForUser
|
||||
.showMessage(
|
||||
|
|
@ -719,10 +720,22 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
|
|||
Level.ERROR,
|
||||
_("You cannot remove the task \"{0}\" because it has work reported on it or any of its children",
|
||||
element.getName()));
|
||||
} else {
|
||||
super.remove(element);
|
||||
getRenderer().removeCodeTextbox(element);
|
||||
return;
|
||||
}
|
||||
|
||||
boolean onlyChildAndParentAlreadyInUseByHoursOrExpenses = orderModel
|
||||
.isOnlyChildAndParentAlreadyInUseByHoursOrExpenses(element);
|
||||
if (onlyChildAndParentAlreadyInUseByHoursOrExpenses) {
|
||||
messagesForUser
|
||||
.showMessage(
|
||||
Level.ERROR,
|
||||
_("You cannot remove the task \"{0}\" because it is the only child of its parent and its parent has tracked time or imputed expenses",
|
||||
element.getName()));
|
||||
return;
|
||||
}
|
||||
|
||||
super.remove(element);
|
||||
getRenderer().removeCodeTextbox(element);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -869,12 +869,12 @@ public class OrderModel extends IntegrationEntityModel implements IOrderModel {
|
|||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public boolean hasImputedExpenseSheets(OrderElement order) {
|
||||
public boolean hasImputedExpenseSheetsThisOrAnyOfItsChildren(OrderElement order) {
|
||||
if (order.isNewObject()) {
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
return orderElementDAO.hasImputedExpenseSheet(order.getId());
|
||||
return orderElementDAO.hasImputedExpenseSheetThisOrAnyOfItsChildren(order.getId());
|
||||
} catch (InstanceNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
|
@ -931,4 +931,24 @@ public class OrderModel extends IntegrationEntityModel implements IOrderModel {
|
|||
return planningState.getRootTask().isAnyTaskWithConstraint(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public boolean isOnlyChildAndParentAlreadyInUseByHoursOrExpenses(
|
||||
OrderElement orderElement) {
|
||||
try {
|
||||
OrderLineGroup parent = orderElement.getParent();
|
||||
if (!parent.isOrder() && parent.getChildren().size() == 1) {
|
||||
if (orderElementDAO.isAlreadyInUse(parent)) {
|
||||
return true;
|
||||
}
|
||||
if (orderElementDAO.hasImputedExpenseSheet(parent.getId())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
} catch (InstanceNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -169,22 +169,37 @@ public class OrderElementServiceREST extends
|
|||
}
|
||||
|
||||
private String checkRemovalValidation(OrderElement orderElement) {
|
||||
if (orderElementDAO.isAlreadyInUseThisOrAnyOfItsChildren(orderElement)) {
|
||||
return "You cannot remove the order element '"
|
||||
+ orderElement.getName()
|
||||
+ "' because it or any of its children have tracked time in some work report";
|
||||
}
|
||||
try {
|
||||
if (orderElementDAO.hasImputedExpenseSheet(orderElement.getId())) {
|
||||
if (orderElementDAO
|
||||
.isAlreadyInUseThisOrAnyOfItsChildren(orderElement)) {
|
||||
return "You cannot remove the order element '"
|
||||
+ orderElement.getName()
|
||||
+ "' because it or any of its children have tracked expenses in some expense sheet";
|
||||
+ "' because it or any of its children have tracked time in some work report";
|
||||
}
|
||||
if (orderElementDAO.hasImputedExpenseSheetThisOrAnyOfItsChildren(orderElement.getId())) {
|
||||
return "You cannot remove the order element '"
|
||||
+ orderElement.getName()
|
||||
+ "' because it or any of its children have tracked expenses in some expenses sheet";
|
||||
}
|
||||
|
||||
OrderLineGroup parent = orderElement.getParent();
|
||||
if (!parent.isOrder() && parent.getChildren().size() == 1) {
|
||||
if (orderElementDAO.isAlreadyInUse(parent)) {
|
||||
return "You cannot remove the order element '"
|
||||
+ orderElement.getName()
|
||||
+ "' because it is the only child of its parent and its parent has tracked time in some work report";
|
||||
}
|
||||
if (orderElementDAO.hasImputedExpenseSheet(parent.getId())) {
|
||||
return "You cannot remove the order element '"
|
||||
+ orderElement.getName()
|
||||
+ "' because it is the only child of its parent and its parent has tracked expenses in some expenses sheet";
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
} catch (InstanceNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private OrderElement findOrderElement(OrderElement orderElement, Long id) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue