From f2ff18f19b1a7a345663e3cb981583b81d9af52b Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Thu, 23 Jul 2026 13:30:06 +0200 Subject: [PATCH] implemented search on in stock locations Signed-off-by: Stephan Richter --- frontend/src/routes/search/Search.svelte | 16 +++++++- .../srsoftware/umbrella/stock/SqliteDb.java | 38 ++++++++++++++----- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/frontend/src/routes/search/Search.svelte b/frontend/src/routes/search/Search.svelte index 118954e7..7de4bd0c 100644 --- a/frontend/src/routes/search/Search.svelte +++ b/frontend/src/routes/search/Search.svelte @@ -265,8 +265,10 @@ {t('stock')} + {#if Object.keys(stock.items).length } + {t('items')} + {/if} + {#if Object.keys(stock.locations).length} + {t('locations')} + + {/if} {/if} {#if times} 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 3b59e7c2..b78fd73a 100644 --- a/stock/src/main/java/de/srsoftware/umbrella/stock/SqliteDb.java +++ b/stock/src/main/java/de/srsoftware/umbrella/stock/SqliteDb.java @@ -132,7 +132,7 @@ public class SqliteDb extends BaseDb implements StockDb { private void createItemsTable() { try { var sql = "CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255) NOT NULL, {3} TEXT, {4} VARCHAR(255))"; - sql = format(sql, TABLE_ITEMS, ID, Field.CODE, NAME, LOCATION_ID); + sql = format(sql, TABLE_ITEMS, ID, Field.CODE, NAME, LOCATION_ID); db.prepareStatement(sql).execute(); } catch (SQLException e) { throw failedToCreateTable(TABLE_ITEMS).causedBy(e); @@ -142,7 +142,7 @@ public class SqliteDb extends BaseDb implements StockDb { private void createItemPropsTable() { try { var sql = "CREATE TABLE IF NOT EXISTS {0} ( {1} INT NOT NULL, {2} INT NOT NULL, {3} VARCHAR(255) NOT NULL, PRIMARY KEY({1}, {2}))"; - sql = format(sql, TABLE_ITEM_PROPERTIES, ITEM_ID, PROPERTY_ID,VALUE); + sql = format(sql, TABLE_ITEM_PROPERTIES, ITEM_ID, PROPERTY_ID,VALUE); db.prepareStatement(sql).execute(); } catch (SQLException e) { throw failedToCreateTable(TABLE_ITEM_PROPERTIES).causedBy(e); @@ -152,7 +152,7 @@ public class SqliteDb extends BaseDb implements StockDb { private void createLocationsTable() { try { var sql = "CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255) DEFAULT NULL, {3} VARCHAR(255) NOT NULL, {4} TEXT)"; - sql = format(sql, TABLE_LOCATIONS, ID, LOCATION_ID, NAME, DESCRIPTION); + sql = format(sql, TABLE_LOCATIONS, ID, LOCATION_ID, NAME, DESCRIPTION); db.prepareStatement(sql).execute(); } catch (SQLException e) { throw failedToCreateTable(TABLE_LOCATIONS).causedBy(e); @@ -162,7 +162,7 @@ public class SqliteDb extends BaseDb implements StockDb { private void createPropertiesTable() { try { var sql = "CREATE TABLE IF NOT EXISTS {0} ( {1} INTEGER PRIMARY KEY, {2} VARCHAR(255) NOT NULL, {3} INT NOT NULL, {4} VARCHAR(255))"; - sql = format(sql, TABLE_PROPERTIES, ID, NAME, TYPE, UNIT); + sql = format(sql, TABLE_PROPERTIES, ID, NAME, TYPE, UNIT); db.prepareStatement(sql).execute(); } catch (SQLException e) { throw failedToCreateTable(TABLE_PROPERTIES).causedBy(e); @@ -209,16 +209,16 @@ public class SqliteDb extends BaseDb implements StockDb { @Override public Map findItems(Collection owners, Collection keys, boolean fulltext) { try { - var items = new HashMap(); var ownerCodes = owners.stream().map(Owner::dbCode).toArray(); - var query = select(ALL).from(TABLE_ITEMS).where(OWNER, in(ownerCodes)); + var query = select(ALL).from(TABLE_ITEMS).where(OWNER, in(ownerCodes)); if (fulltext) { query.leftJoin(ID,TABLE_ITEM_PROPERTIES,ITEM_ID); for (var key : keys) query.where(format("CONCAT({0},\" \",{1},\" \",{2})", NAME, DESCRIPTION,VALUE),like("%"+key+"%")); } else { for (var key : keys) query.where(NAME,like("%"+key+"%")); } - var rs = query.exec(db); + var rs = query.exec(db); + var items = new HashMap(); while (rs.next()){ var item = Item.of(rs); items.put(item.id(),item); @@ -232,13 +232,31 @@ public class SqliteDb extends BaseDb implements StockDb { @Override public Map findLocations(Collection owners, Collection keys, boolean fulltext) { - return Map.of(); + try { + var ownerCodes = owners.stream().map(Owner::dbCode).toArray(); + var query = select(ALL).from(TABLE_LOCATIONS).where(OWNER, in(ownerCodes)); + if (fulltext) { + for (var key : keys) query.where(format("CONCAT({0},\" \",{1})", NAME, DESCRIPTION), like("%" + key + "%")); + } else { + for (var key : keys) query.where(NAME, like("%" + key + "%")); + } + var rs = query.exec(db); + var locations = new HashMap(); + while (rs.next()) { + var location = DbLocation.of(rs); + locations.put(location.id(), location); + } + rs.close(); + return locations; + } catch (SQLException e){ + throw databaseException(FAILED_TO_LIST_ENTITIES, TYPE,t(LOCATIONS)).causedBy(e); + } } @Override public Collection listChildLocations(long parentId) { try { - var rs = select(ALL).from(TABLE_LOCATIONS).where(PARENT_LOCATION_ID,equal(parentId)).exec(db); + var rs = select(ALL).from(TABLE_LOCATIONS).where(PARENT_LOCATION_ID,equal(parentId)).exec(db); var list = new ArrayList(); while (rs.next()) list.add(DbLocation.of(rs)); rs.close(); @@ -251,7 +269,7 @@ public class SqliteDb extends BaseDb implements StockDb { @Override public Collection listCompanyLocations(Company company) { try { - var rs = select(ALL).from(TABLE_LOCATIONS).where(OWNER,equal(company.dbCode())).where(PARENT_LOCATION_ID,isNull()).exec(db); + var rs = select(ALL).from(TABLE_LOCATIONS).where(OWNER,equal(company.dbCode())).where(PARENT_LOCATION_ID,isNull()).exec(db); var list = new ArrayList(); while (rs.next()) list.add(DbLocation.of(rs)); rs.close();