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:
Manuel Rego Casasnovas 2012-11-05 18:08:17 +01:00
parent 7c24830ef6
commit fe0835ef66
4 changed files with 21 additions and 17 deletions

View file

@ -1584,4 +1584,8 @@ public abstract class OrderElement extends IntegrationEntity implements
return false;
}
public void detachFromParent() {
parent = null;
}
}

View file

@ -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"

View file

@ -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;
}

View file

@ -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();