Remove properly order element using OrderModel class
In that way we are sure that everything is removed properly. We have to manually detach the removed element from its parent in order to avoid delete the parent too. FEA: ItEr77S13AllowDeleteOrderElements
This commit is contained in:
parent
7c24830ef6
commit
fe0835ef66
4 changed files with 21 additions and 17 deletions
|
|
@ -1584,4 +1584,8 @@ public abstract class OrderElement extends IntegrationEntity implements
|
|||
return false;
|
||||
}
|
||||
|
||||
public void detachFromParent() {
|
||||
parent = null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,7 +55,8 @@
|
|||
access="field"
|
||||
cascade="all"
|
||||
class="org.libreplan.business.orders.entities.OrderLineGroup"
|
||||
index="idx_order_element_on_parent"/>
|
||||
index="idx_order_element_on_parent"
|
||||
lazy="false" />
|
||||
|
||||
<many-to-one name="template"
|
||||
access="field"
|
||||
|
|
|
|||
|
|
@ -217,7 +217,10 @@ public class PlanningStateCreator {
|
|||
|
||||
public PlanningState retrieveOrCreate(Desktop desktop, Order order,
|
||||
IActionsOnRetrieval onRetrieval) {
|
||||
Object existent = desktop.getAttribute(ATTRIBUTE_NAME);
|
||||
Object existent = null;
|
||||
if (desktop != null) {
|
||||
existent = desktop.getAttribute(ATTRIBUTE_NAME);
|
||||
}
|
||||
if (existent instanceof PlanningState) {
|
||||
PlanningState result = (PlanningState) existent;
|
||||
if (ObjectUtils.equals(order.getId(), result.getOrder().getId())) {
|
||||
|
|
@ -230,7 +233,9 @@ public class PlanningStateCreator {
|
|||
}
|
||||
PlanningState result = createPlanning(reload(order));
|
||||
result.onRetrieval();
|
||||
desktop.setAttribute(ATTRIBUTE_NAME, result);
|
||||
if (desktop != null) {
|
||||
desktop.setAttribute(ATTRIBUTE_NAME, result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -33,9 +33,7 @@ import javax.ws.rs.Produces;
|
|||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.Response.Status;
|
||||
|
||||
import org.libreplan.business.common.daos.IEntitySequenceDAO;
|
||||
import org.libreplan.business.common.daos.IIntegrationEntityDAO;
|
||||
import org.libreplan.business.common.entities.EntityNameEnum;
|
||||
import org.libreplan.business.common.exceptions.InstanceNotFoundException;
|
||||
import org.libreplan.business.common.exceptions.ValidationException;
|
||||
import org.libreplan.business.orders.daos.IOrderDAO;
|
||||
|
|
@ -43,7 +41,7 @@ import org.libreplan.business.orders.daos.IOrderElementDAO;
|
|||
import org.libreplan.business.orders.entities.Order;
|
||||
import org.libreplan.business.orders.entities.OrderElement;
|
||||
import org.libreplan.business.orders.entities.OrderLineGroup;
|
||||
import org.libreplan.business.scenarios.IScenarioManager;
|
||||
import org.libreplan.web.orders.IOrderModel;
|
||||
import org.libreplan.ws.common.api.InstanceConstraintViolationsListDTO;
|
||||
import org.libreplan.ws.common.api.OrderDTO;
|
||||
import org.libreplan.ws.common.impl.ConfigurationOrderElementConverter;
|
||||
|
|
@ -75,10 +73,7 @@ public class OrderElementServiceREST extends
|
|||
private IOrderElementDAO orderElementDAO;
|
||||
|
||||
@Autowired
|
||||
private IScenarioManager scenarioManager;
|
||||
|
||||
@Autowired
|
||||
private IEntitySequenceDAO entitySequenceDAO;
|
||||
private IOrderModel orderModel;
|
||||
|
||||
@Override
|
||||
@GET
|
||||
|
|
@ -136,15 +131,17 @@ public class OrderElementServiceREST extends
|
|||
try {
|
||||
OrderElement orderElement = orderElementDAO.findByCode(code);
|
||||
if (orderElement.isOrder()) {
|
||||
orderDAO.remove(orderElement.getId());
|
||||
orderModel.remove((Order) orderElement);
|
||||
} else {
|
||||
Order order = orderDAO.loadOrderAvoidingProxyFor(orderElement);
|
||||
order.useSchedulingDataFor(scenarioManager.getCurrent());
|
||||
orderModel.initEdit(order, null);
|
||||
order = orderModel.getOrder();
|
||||
|
||||
orderElement = findOrderElement(order, orderElement.getId());
|
||||
|
||||
OrderLineGroup parent = orderElement.getParent();
|
||||
parent.remove(orderElement);
|
||||
orderElement.detachFromParent();
|
||||
|
||||
if (!parent.isOrder() && parent.getChildren().isEmpty()) {
|
||||
OrderElement newElement = parent.toLeaf();
|
||||
|
|
@ -152,13 +149,10 @@ public class OrderElementServiceREST extends
|
|||
newElement.setCode(UUID.randomUUID().toString());
|
||||
}
|
||||
parent.getParent().replace(parent, newElement);
|
||||
if (order.isCodeAutogenerated()) {
|
||||
order.generateOrderElementCodes(entitySequenceDAO
|
||||
.getNumberOfDigitsCode(EntityNameEnum.ORDER));
|
||||
}
|
||||
parent.detachFromParent();
|
||||
}
|
||||
|
||||
orderDAO.save(order);
|
||||
orderModel.save();
|
||||
}
|
||||
|
||||
return Response.ok().build();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue