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; return false;
} }
public void detachFromParent() {
parent = null;
}
} }

View file

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

View file

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

View file

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