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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void detachFromParent() {
|
||||||
|
parent = null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,8 @@
|
||||||
access="field"
|
access="field"
|
||||||
cascade="all"
|
cascade="all"
|
||||||
class="org.libreplan.business.orders.entities.OrderLineGroup"
|
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"
|
<many-to-one name="template"
|
||||||
access="field"
|
access="field"
|
||||||
|
|
|
||||||
|
|
@ -217,7 +217,10 @@ public class PlanningStateCreator {
|
||||||
|
|
||||||
public PlanningState retrieveOrCreate(Desktop desktop, Order order,
|
public PlanningState retrieveOrCreate(Desktop desktop, Order order,
|
||||||
IActionsOnRetrieval onRetrieval) {
|
IActionsOnRetrieval onRetrieval) {
|
||||||
Object existent = desktop.getAttribute(ATTRIBUTE_NAME);
|
Object existent = null;
|
||||||
|
if (desktop != null) {
|
||||||
|
existent = desktop.getAttribute(ATTRIBUTE_NAME);
|
||||||
|
}
|
||||||
if (existent instanceof PlanningState) {
|
if (existent instanceof PlanningState) {
|
||||||
PlanningState result = (PlanningState) existent;
|
PlanningState result = (PlanningState) existent;
|
||||||
if (ObjectUtils.equals(order.getId(), result.getOrder().getId())) {
|
if (ObjectUtils.equals(order.getId(), result.getOrder().getId())) {
|
||||||
|
|
@ -230,7 +233,9 @@ public class PlanningStateCreator {
|
||||||
}
|
}
|
||||||
PlanningState result = createPlanning(reload(order));
|
PlanningState result = createPlanning(reload(order));
|
||||||
result.onRetrieval();
|
result.onRetrieval();
|
||||||
desktop.setAttribute(ATTRIBUTE_NAME, result);
|
if (desktop != null) {
|
||||||
|
desktop.setAttribute(ATTRIBUTE_NAME, result);
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,9 +33,7 @@ import javax.ws.rs.Produces;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
import javax.ws.rs.core.Response.Status;
|
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.daos.IIntegrationEntityDAO;
|
||||||
import org.libreplan.business.common.entities.EntityNameEnum;
|
|
||||||
import org.libreplan.business.common.exceptions.InstanceNotFoundException;
|
import org.libreplan.business.common.exceptions.InstanceNotFoundException;
|
||||||
import org.libreplan.business.common.exceptions.ValidationException;
|
import org.libreplan.business.common.exceptions.ValidationException;
|
||||||
import org.libreplan.business.orders.daos.IOrderDAO;
|
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.Order;
|
||||||
import org.libreplan.business.orders.entities.OrderElement;
|
import org.libreplan.business.orders.entities.OrderElement;
|
||||||
import org.libreplan.business.orders.entities.OrderLineGroup;
|
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.InstanceConstraintViolationsListDTO;
|
||||||
import org.libreplan.ws.common.api.OrderDTO;
|
import org.libreplan.ws.common.api.OrderDTO;
|
||||||
import org.libreplan.ws.common.impl.ConfigurationOrderElementConverter;
|
import org.libreplan.ws.common.impl.ConfigurationOrderElementConverter;
|
||||||
|
|
@ -75,10 +73,7 @@ public class OrderElementServiceREST extends
|
||||||
private IOrderElementDAO orderElementDAO;
|
private IOrderElementDAO orderElementDAO;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IScenarioManager scenarioManager;
|
private IOrderModel orderModel;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private IEntitySequenceDAO entitySequenceDAO;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@GET
|
@GET
|
||||||
|
|
@ -136,15 +131,17 @@ public class OrderElementServiceREST extends
|
||||||
try {
|
try {
|
||||||
OrderElement orderElement = orderElementDAO.findByCode(code);
|
OrderElement orderElement = orderElementDAO.findByCode(code);
|
||||||
if (orderElement.isOrder()) {
|
if (orderElement.isOrder()) {
|
||||||
orderDAO.remove(orderElement.getId());
|
orderModel.remove((Order) orderElement);
|
||||||
} else {
|
} else {
|
||||||
Order order = orderDAO.loadOrderAvoidingProxyFor(orderElement);
|
Order order = orderDAO.loadOrderAvoidingProxyFor(orderElement);
|
||||||
order.useSchedulingDataFor(scenarioManager.getCurrent());
|
orderModel.initEdit(order, null);
|
||||||
|
order = orderModel.getOrder();
|
||||||
|
|
||||||
orderElement = findOrderElement(order, orderElement.getId());
|
orderElement = findOrderElement(order, orderElement.getId());
|
||||||
|
|
||||||
OrderLineGroup parent = orderElement.getParent();
|
OrderLineGroup parent = orderElement.getParent();
|
||||||
parent.remove(orderElement);
|
parent.remove(orderElement);
|
||||||
|
orderElement.detachFromParent();
|
||||||
|
|
||||||
if (!parent.isOrder() && parent.getChildren().isEmpty()) {
|
if (!parent.isOrder() && parent.getChildren().isEmpty()) {
|
||||||
OrderElement newElement = parent.toLeaf();
|
OrderElement newElement = parent.toLeaf();
|
||||||
|
|
@ -152,13 +149,10 @@ public class OrderElementServiceREST extends
|
||||||
newElement.setCode(UUID.randomUUID().toString());
|
newElement.setCode(UUID.randomUUID().toString());
|
||||||
}
|
}
|
||||||
parent.getParent().replace(parent, newElement);
|
parent.getParent().replace(parent, newElement);
|
||||||
if (order.isCodeAutogenerated()) {
|
parent.detachFromParent();
|
||||||
order.generateOrderElementCodes(entitySequenceDAO
|
|
||||||
.getNumberOfDigitsCode(EntityNameEnum.ORDER));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
orderDAO.save(order);
|
orderModel.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
return Response.ok().build();
|
return Response.ok().build();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue