diff --git a/application-engine/src/main/java/com/netgrif/application/engine/menu/services/MenuItemService.java b/application-engine/src/main/java/com/netgrif/application/engine/menu/services/MenuItemService.java index 90283ee4d29..8ae2a3fd8bd 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/menu/services/MenuItemService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/menu/services/MenuItemService.java @@ -267,18 +267,21 @@ public void moveItem(Case itemCase, String destUri) throws TransitionNotExecutab } List casesToSave = new ArrayList<>(); - List parentIdList = MenuItemUtils.getCaseIdsFromCaseRef(itemCase, MenuItemConstants.FIELD_PARENT_ID); - if (parentIdList != null && !parentIdList.isEmpty()) { - Case oldParent = removeChildItemFromParent(parentIdList.get(0), itemCase); + List oldParentIdList = MenuItemUtils.getCaseIdsFromCaseRef(itemCase, MenuItemConstants.FIELD_PARENT_ID); + Case newParent = getOrCreateFolderItem(destUri); + + String oldParentId = oldParentIdList != null && !oldParentIdList.isEmpty() ? oldParentIdList.getFirst() : null; + boolean parentChanged = !Objects.equals(oldParentId, newParent != null ? newParent.getStringId() : null); + + if (parentChanged && oldParentId != null) { + Case oldParent = removeChildItemFromParent(oldParentId, itemCase); casesToSave.add(oldParent); } - - Case newParent = getOrCreateFolderItem(destUri); - if (newParent != null) { + if (parentChanged && newParent != null) { itemCase.getDataField(MenuItemConstants.FIELD_PARENT_ID).setValue(List.of(newParent.getStringId())); appendChildCaseIdInMemory(newParent, itemCase.getStringId()); casesToSave.add(newParent); - } else { + } else if (newParent == null) { itemCase.getDataField(MenuItemConstants.FIELD_PARENT_ID).setValue(null); }