diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/advance/entities/DirectAdvanceAssignment.java b/navalplanner-business/src/main/java/org/navalplanner/business/advance/entities/DirectAdvanceAssignment.java index 520597ccb..0c2912b48 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/advance/entities/DirectAdvanceAssignment.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/advance/entities/DirectAdvanceAssignment.java @@ -162,6 +162,15 @@ public class DirectAdvanceAssignment extends AdvanceAssignment { getOrderElement().markAsDirtyLastAdvanceMeasurementForSpreading(); } + public void removeAdvanceMeasurements( + Set advanceMeasurements) { + for (AdvanceMeasurement each: advanceMeasurements) { + each.setAdvanceAssignment(null); + } + this.advanceMeasurements.removeAll(advanceMeasurements); + getOrderElement().markAsDirtyLastAdvanceMeasurementForSpreading(); + } + public void clearAdvanceMeasurements() { this.advanceMeasurements.clear(); if (getOrderElement() != null) { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IManageOrderElementAdvancesModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IManageOrderElementAdvancesModel.java index f59515205..5d5fd217e 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IManageOrderElementAdvancesModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IManageOrderElementAdvancesModel.java @@ -119,4 +119,7 @@ public interface IManageOrderElementAdvancesModel { void createPercentageAdvances(OrderElement orderElement) throws DuplicateAdvanceAssignmentForOrderElementException, DuplicateValueTrueReportGlobalAdvanceException; + + void cancel(); + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesController.java index 33c208dba..78d8d4447 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesController.java @@ -118,6 +118,10 @@ public class ManageOrderElementAdvancesController extends return manageOrderElementAdvancesModel.getAdvanceAssignments(); } + public void cancel() { + manageOrderElementAdvancesModel.cancel(); + } + public boolean close() { return save(); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesModel.java index 8fd25e04c..9da039905 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesModel.java @@ -277,6 +277,30 @@ public class ManageOrderElementAdvancesModel implements } } + @Override + public void cancel() { + for (AdvanceAssignment each : listAdvanceAssignments) { + if (each instanceof DirectAdvanceAssignment) { + DirectAdvanceAssignment directAdvanceAssignment = (DirectAdvanceAssignment) each; + Set advanceMeasurements = getNewAdvanceMeasurementsFor(directAdvanceAssignment); + directAdvanceAssignment + .removeAdvanceMeasurements(advanceMeasurements); + } + } + } + + private Set getNewAdvanceMeasurementsFor( + DirectAdvanceAssignment directAdvanceAssignment) { + Set result = new HashSet(); + for (AdvanceMeasurement each : directAdvanceAssignment + .getAdvanceMeasurements()) { + if (each.getId() == null) { + result.add(each); + } + } + return result; + } + @Override public boolean addNewLineAdvanceAssignment() { DirectAdvanceAssignment newAdvance = DirectAdvanceAssignment.create(); @@ -761,7 +785,6 @@ public class ManageOrderElementAdvancesModel implements types.add(PredefinedAdvancedTypes.CHILDREN.getTypeName()); } - orderElementDAO.reattach(orderElement); Set indirects = getSpreadIndirectAdvanceAssignmentWithSameType( orderElement, types); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/advances/AdvanceAssignmentPlanningController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/advances/AdvanceAssignmentPlanningController.java index 8221faecb..20dda08b9 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/advances/AdvanceAssignmentPlanningController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/advances/AdvanceAssignmentPlanningController.java @@ -39,6 +39,7 @@ import org.zkoss.ganttz.data.Task; import org.zkoss.ganttz.extensions.IContextWithPlannerTask; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.SuspendNotAllowedException; +import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Window; @@ -99,7 +100,13 @@ public class AdvanceAssignmentPlanningController extends GenericForwardComposer manageOrderElementAdvancesController.openWindow(orderElement); } + public void onClose(Event event) { + cancel(); + event.stopPropagation(); + } + public void cancel() { + manageOrderElementAdvancesController.cancel(); advanceAssignmentPlanningModel.cancel(); close(); } diff --git a/navalplanner-webapp/src/main/webapp/planner/order.zul b/navalplanner-webapp/src/main/webapp/planner/order.zul index 7d02b439d..4e9c2ef8b 100644 --- a/navalplanner-webapp/src/main/webapp/planner/order.zul +++ b/navalplanner-webapp/src/main/webapp/planner/order.zul @@ -56,8 +56,7 @@ title="${advanceAssignmentController.title}" width="950px" visible="false" - closable="true" - onClose="self.visible = false; event.stopPropagation();" > + closable="true" >