diff --git a/frontend/src/routes/search/Search.svelte b/frontend/src/routes/search/Search.svelte index 6e8bc25..9883aaf 100644 --- a/frontend/src/routes/search/Search.svelte +++ b/frontend/src/routes/search/Search.svelte @@ -105,7 +105,7 @@ } } - async function handleStock(resp){ + async function handleStock(resp){ if (resp.ok){ const res = await resp.json(); stock = Object.keys(res).length ? res : null; @@ -219,6 +219,23 @@ {/if} +{#if stock} +
+ + {t('stock')} + + +
+{/if} {#if notes}
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 f5acaac..399ba61 100644 --- a/stock/src/main/java/de/srsoftware/umbrella/stock/SqliteDb.java +++ b/stock/src/main/java/de/srsoftware/umbrella/stock/SqliteDb.java @@ -191,19 +191,21 @@ public class SqliteDb extends BaseDb implements StockDb { } @Override - public Map find(long userId, Collection keys, boolean fulltext) { + public Map find(Collection owners, Collection keys, boolean fulltext) { try { var items = new HashMap(); - var query = select(ALL).from(TABLE_ITEMS).where(USER_ID, equal(userId)); + var ownerCodes = owners.stream().map(Owner::dbCode).toArray(); + var query = select(ALL).from(TABLE_ITEMS).where(OWNER, in(ownerCodes)); if (fulltext) { - // TODO: implement full-text search + 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); while (rs.next()){ - var project = Item.of(rs); - items.put(project.id(),project); + var item = Item.of(rs); + items.put(item.id(),item); } rs.close(); return items; 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 3c755f6..a145f44 100644 --- a/stock/src/main/java/de/srsoftware/umbrella/stock/StockDb.java +++ b/stock/src/main/java/de/srsoftware/umbrella/stock/StockDb.java @@ -5,13 +5,13 @@ import de.srsoftware.umbrella.core.api.Owner; import de.srsoftware.umbrella.core.model.*; import de.srsoftware.umbrella.core.model.Location; import java.util.Collection; -import java.util.List; import java.util.Map; +import java.util.Set; public interface StockDb { Property addNewProperty(long itemId, String name, Object value, String unit); Location delete(DbLocation location); - Map find(long userId, Collection keys, boolean fulltext); + Map find(Collection owners, Collection keys, boolean fulltext); Collection listChildLocations(long parentId); Collection listCompanyLocations(Company company); Collection listItemsAt(Location location); 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 e1b0ffa..261441d 100644 --- a/stock/src/main/java/de/srsoftware/umbrella/stock/StockModule.java +++ b/stock/src/main/java/de/srsoftware/umbrella/stock/StockModule.java @@ -397,7 +397,9 @@ public class StockModule extends BaseHandler implements StockService { if (!(json.has(KEY) && json.get(KEY) instanceof String key)) throw missingFieldException(KEY); var keys = Arrays.asList(key.split(" ")); var fulltext = json.has(FULLTEXT) && json.get(FULLTEXT) instanceof Boolean val && val; - var items = stockDb.find(user.id(),keys,fulltext); + Set owners = new HashSet<>(companyService().listCompaniesOf(user).values()); + owners.add(user); + var items = stockDb.find(owners,keys,fulltext); return sendContent(ex,mapValues(items)); }