Bug #1592: Save Order before showing it

Otherwise the MutableTreeModel associated is initialized with a Order
that is not saved yet. When it's used, e.g., when adding a
subtask, it fails.

The MutableTreeModel#nodesByDomainObject map wouldn't find the node
associated to the Order, because the hashCode is different. At first
the Order is a new object so it returns a different hashCode, once
saved another. With these changes, when initializing the
MutableTreeModel it has already been saved.
This commit is contained in:
Óscar González Fernández 2012-12-11 18:56:12 +01:00
parent cc7f0388b9
commit 787916b50d
2 changed files with 14 additions and 5 deletions

View file

@ -940,6 +940,10 @@ public class OrderCRUDController extends GenericForwardComposer {
prepareEditWindow(_("Edit project"));
}
public IOrderModel getOrderModel() {
return orderModel;
}
private Desktop getDesktop() {
return listWindow.getDesktop();
}
@ -1068,7 +1072,6 @@ public class OrderCRUDController extends GenericForwardComposer {
detailsWindow.setVisible(false);
setupOrderAuthorizationController();
detailsWindow.getAttributes();
saveAndContinue(false);
}
public ProjectDetailsController getCreationPopup() {

View file

@ -42,6 +42,7 @@ import org.libreplan.web.planner.consolidations.AdvanceConsolidationController;
import org.libreplan.web.planner.tabs.MultipleTabsPlannerController;
import org.springframework.beans.factory.annotation.Autowired;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Desktop;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.SuspendNotAllowedException;
import org.zkoss.zk.ui.WrongValueException;
@ -138,13 +139,18 @@ public class ProjectDetailsController extends GenericForwardComposer {
public void accept() {
if (validate()) {
if (tabs != null) {
tabs.goToOrderDetails(orderController.getOrder());
}
Desktop desktop = window.getDesktop();
IOrderModel orderModel = orderController.getOrderModel();
if (bdProjectTemplate.getSelectedElement() != null) {
OrderTemplate template = (OrderTemplate) bdProjectTemplate
.getSelectedElement();
orderController.createFromTemplate(template);
orderModel.prepareCreationFrom(template, desktop);
} else {
orderModel.initEdit(orderController.getOrder(), desktop);
}
orderModel.save();
if (tabs != null) {
tabs.goToOrderDetails(orderController.getOrder());
}
orderController.editNewCreatedOrder(window);
}