From 21c5a7234964261b82d081800889827ea177bfd5 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Wed, 15 Oct 2025 21:13:08 +0200 Subject: [PATCH] implemented deletion of item properties Signed-off-by: Stephan Richter --- frontend/src/routes/stock/ItemProps.svelte | 9 +++++++-- .../main/java/de/srsoftware/umbrella/stock/SqliteDb.java | 8 ++++++-- .../main/java/de/srsoftware/umbrella/stock/StockDb.java | 3 +-- .../java/de/srsoftware/umbrella/stock/StockModule.java | 2 +- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/frontend/src/routes/stock/ItemProps.svelte b/frontend/src/routes/stock/ItemProps.svelte index ba468ff..b590c0b 100644 --- a/frontend/src/routes/stock/ItemProps.svelte +++ b/frontend/src/routes/stock/ItemProps.svelte @@ -19,7 +19,9 @@ return a.name.localeCompare(b.name); } - async function onclick(){ + async function onsubmit(ev){ + ev.preventDefault(); + ev.stopPropagation(); const url = api('stock/property'); const data = { item : { @@ -40,6 +42,7 @@ item.properties.push(prop); yikes(); } else error(res); + return false; } async function patch(key,newVal){ @@ -95,13 +98,15 @@ Code: patc {/if} +
{#if !add_prop.existing_prop_id} {:else} {properties.filter(p => p.id == add_prop.existing_prop_id)[0].unit} {/if} - + +
diff --git a/stock/src/main/java/de/srsoftware/umbrella/stock/SqliteDb.java b/stock/src/main/java/de/srsoftware/umbrella/stock/SqliteDb.java index 4499ed8..e81fad9 100644 --- a/stock/src/main/java/de/srsoftware/umbrella/stock/SqliteDb.java +++ b/stock/src/main/java/de/srsoftware/umbrella/stock/SqliteDb.java @@ -51,14 +51,18 @@ public class SqliteDb extends BaseDb implements StockDb { } @Override - public Property addProperty(long ownerId, long itemId, long existingPropId, Object value) { + public Property setProperty(long ownerId, long itemId, long existingPropId, Object value) { try { Property prop = null; var rs = select(ALL).from(TABLE_PROPERTIES).where(ID,equal(existingPropId)).exec(db); if (rs.next()) prop = Property.of(rs); rs.close(); if (prop == null) throw databaseException("Failed to add new property to item {0}",itemId); - replaceInto(TABLE_ITEM_PROPERTIES,OWNER,ITEM_ID,PROPERTY_ID,VALUE).values(ownerId,itemId,existingPropId,value).execute(db); + if ("".equals(value)){ + delete().from(TABLE_ITEM_PROPERTIES).where(OWNER,equal(ownerId)).where(ITEM_ID,equal(itemId)).where(PROPERTY_ID,equal(existingPropId)).execute(db); + } else { + replaceInto(TABLE_ITEM_PROPERTIES,OWNER,ITEM_ID,PROPERTY_ID,VALUE).values(ownerId,itemId,existingPropId,value).execute(db); + } return prop.value(value); } catch (SQLException e) { throw databaseException("Failed to add new property to item {0}",itemId); diff --git a/stock/src/main/java/de/srsoftware/umbrella/stock/StockDb.java b/stock/src/main/java/de/srsoftware/umbrella/stock/StockDb.java index ed5aba9..6a60915 100644 --- a/stock/src/main/java/de/srsoftware/umbrella/stock/StockDb.java +++ b/stock/src/main/java/de/srsoftware/umbrella/stock/StockDb.java @@ -6,7 +6,6 @@ import de.srsoftware.umbrella.core.model.*; import java.util.Collection; public interface StockDb { - Property addProperty(long ownerId, long itemId, long existingPropId, Object value); Property addNewProperty(long ownerId, long itemId, String name, Object value, String unit); Collection listChildLocations(long parentId); Collection listCompanyLocations(Company company); @@ -14,6 +13,6 @@ public interface StockDb { Collection listProperties(); Collection listUserLocations(UmbrellaUser userId); Item loadItem(Mappable owner, long itemId); - Item save(Item item); + Property setProperty(long ownerId, long itemId, long existingPropId, Object value); } 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 0f1f6d6..3dca260 100644 --- a/stock/src/main/java/de/srsoftware/umbrella/stock/StockModule.java +++ b/stock/src/main/java/de/srsoftware/umbrella/stock/StockModule.java @@ -182,7 +182,7 @@ public class StockModule extends BaseHandler implements StockService { Property property = null; if (propData.get("existing_prop_id") instanceof Number existingPropId && existingPropId.longValue() != 0L){ - property = stockDb.addProperty(ownerId,itemId.longValue(),existingPropId.longValue(),value); + property = stockDb.setProperty(ownerId,itemId.longValue(),existingPropId.longValue(),value); } else { if (!(propData.get("new_prop") instanceof JSONObject newProp)) throw unprocessable("data must contain either add_prop.existing_prop_id or add_prop.new_prop!"); if (!(newProp.get(NAME) instanceof String name) || name.isBlank()) throw unprocessable("data.add_prop.new_prop does not contain name!");