diff --git a/marlo-web/src/main/java/org/cgiar/ccafs/marlo/action/crp/admin/ShfrmManagementAction.java b/marlo-web/src/main/java/org/cgiar/ccafs/marlo/action/crp/admin/ShfrmManagementAction.java index c3b062fdfb..8072c56966 100644 --- a/marlo-web/src/main/java/org/cgiar/ccafs/marlo/action/crp/admin/ShfrmManagementAction.java +++ b/marlo-web/src/main/java/org/cgiar/ccafs/marlo/action/crp/admin/ShfrmManagementAction.java @@ -146,6 +146,8 @@ public String save() { if (priorityActionsDB != null) { try { + List subActions = new ArrayList<>(); + for (ShfrmPriorityAction actionDB : priorityActionsDB) { if (this.priorityActions != null && !this.priorityActions.isEmpty()) { Set actionIdsInFrontend = this.priorityActions.stream().filter(Objects::nonNull) @@ -153,10 +155,28 @@ public String save() { if (!actionIdsInFrontend.contains(actionDB.getId())) { // Validate previous sub actions in DB for each priority actions - if (actionDB.getShfrmSubActions() == null - || (actionDB.getShfrmSubActions() != null && actionDB.getShfrmSubActions().isEmpty())) { - shfrmPriorityActionManager.deleteShfrmPriorityAction(actionDB.getId()); + + try { + subActions = shfrmSubActionManager.findAll().stream() + .filter(subActionDB -> subActionDB.getShfrmPriorityAction() != null + && subActionDB.getShfrmPriorityAction().getId() != null + && subActionDB.getShfrmPriorityAction().getId().equals(actionDB.getId())) + .collect(Collectors.toList());; + + + if (subActions != null && !subActions.isEmpty()) { + + // delete sub actions + for (ShfrmSubAction subActionDelete : subActions) { + if (subActionDelete != null && subActionDelete.getId() != null) { + shfrmSubActionManager.deleteShfrmSubAction(subActionDelete.getId()); + } + } + } + } catch (Exception e) { + logger.error("error deleting sub actions", e); } + shfrmPriorityActionManager.deleteShfrmPriorityAction(actionDB.getId()); } @@ -224,10 +244,30 @@ public String save() { } else { // Delete all priority actions DB try { + List subActions = new ArrayList<>(); + if (priorityActionsDB != null && !priorityActionsDB.isEmpty()) { - priorityActionsDB.forEach(priorityAction -> { - shfrmPriorityActionManager.deleteShfrmPriorityAction(priorityAction.getId()); - }); + for (ShfrmPriorityAction priorityActionDB : priorityActionsDB) { + + subActions = shfrmSubActionManager.findAll().stream() + .filter(subActionDB -> subActionDB.getShfrmPriorityAction() != null + && subActionDB.getShfrmPriorityAction().getId() != null + && subActionDB.getShfrmPriorityAction().getId().equals(priorityActionDB.getId())) + .collect(Collectors.toList());; + + + if (subActions != null && !subActions.isEmpty()) { + + // delete sub actions + for (ShfrmSubAction subActionDelete : subActions) { + if (subActionDelete != null && subActionDelete.getId() != null) { + shfrmSubActionManager.deleteShfrmSubAction(subActionDelete.getId()); + } + } + } + + shfrmPriorityActionManager.deleteShfrmPriorityAction(priorityActionDB.getId()); + } } } catch (Exception e) { logger.error("error deleting priority actions: " + e); diff --git a/marlo-web/src/main/webapp/WEB-INF/global/macros/deliverableMacros.ftl b/marlo-web/src/main/webapp/WEB-INF/global/macros/deliverableMacros.ftl index 083b53af2c..9dadac764d 100644 --- a/marlo-web/src/main/webapp/WEB-INF/global/macros/deliverableMacros.ftl +++ b/marlo-web/src/main/webapp/WEB-INF/global/macros/deliverableMacros.ftl @@ -1580,7 +1580,7 @@ [#-- ${(shfrmPriorityActions[${priorityAction_index}].shfrmSubActions)![]} --] [#if priorityAction.shfrmSubActions?has_content]
- [@customForm.select name="" label="" i18nkey="deliverable.shfrmContribution.subAction.help" listName="shfrmPriorityActions[${priorityAction_index}].shfrmSubActions" keyFieldName="id" displayFieldName="name" multiple=false required=true className=" deliverableList" disabled=!editable/] + [@customForm.select name="" label="" i18nkey="deliverable.shfrmContribution.subAction.help" listName="shfrmPriorityActions[${priorityAction_index}].shfrmSubActions" keyFieldName="id" displayFieldName="composedName" multiple=false required=true className=" deliverableList" disabled=!editable/]
[/#if]