diff --git a/frontend/src/routes/stock/Index.svelte b/frontend/src/routes/stock/Index.svelte index ac8d15a..b36eaee 100644 --- a/frontend/src/routes/stock/Index.svelte +++ b/frontend/src/routes/stock/Index.svelte @@ -34,12 +34,16 @@ }); if (res.ok){ yikes(); - for (var owner of top_level){ - if (owner.locations && dropNestedLocation(owner.locations,loc)) break; - } + unlistLocation(loc); } else error(res); } + function unlistLocation(loc){ + for (var owner of top_level){ + if (owner.locations && dropNestedLocation(owner.locations,loc)) break; + } + } + function drag_item(item){ draggedLocation = null; draggedItem = item; @@ -72,11 +76,7 @@ if (res.ok){ yikes(); location = new_loc; - if (!draggedItem){ - for (var owner of top_level){ - if (owner.locations && dropNestedLocation(owner.locations,draggedLocation)) break; - } - } + if (!draggedItem) unlistLocation(draggedLocation); draggedItem = null; draggedLocation = null; } else { @@ -124,6 +124,18 @@ loadProperties(); } + function moveToTop(loc){ + if (patchLocation(location,'parent_location_id',0)){ + loc.parent_location_id = 0; + for (var owner of top_level){ + if (owner.locations && dropNestedLocation(owner.locations,loc)) { + owner.locations.push(loc); + break; + }; + } + } + } + async function patchLocation(location,field,newValue){ const data = {}; data[field] = newValue; @@ -172,7 +184,7 @@ patchLocation(location,'name',newName)} /> {#if location.parent_location_id} - + {/if} patchLocation(location,'description',newDesc)} /> diff --git a/stock/src/main/java/de/srsoftware/umbrella/stock/StockModule.java b/stock/src/main/java/de/srsoftware/umbrella/stock/StockModule.java index 833d3a2..b6dead0 100644 --- a/stock/src/main/java/de/srsoftware/umbrella/stock/StockModule.java +++ b/stock/src/main/java/de/srsoftware/umbrella/stock/StockModule.java @@ -250,9 +250,11 @@ public class StockModule extends BaseHandler implements StockService { if (json.has(PARENT_LOCATION_ID) && json.get(PARENT_LOCATION_ID) instanceof Number parentId){ if (parentId.longValue() != 0L) { var target = stockDb.loadLocation(parentId.longValue()); + if (target.id() == location.id()) throw forbidden("Location must not be it`s own parent!"); var targetOwner = target.owner().resolve(); if (!assigned(targetOwner, user)) throw forbidden("You are not allowed to edit \"{0}\"!", target.name()); if (!targetOwner.equals(owner)) throw unprocessable("You may not move locations from one owner ({0}) to another ({1})", owner, targetOwner); + LOG.log(WARNING,"Not checking, if location is moved to on of its own children!"); } }