diff --git a/company/src/main/java/de/srsoftware/umbrella/company/CompanyModule.java b/company/src/main/java/de/srsoftware/umbrella/company/CompanyModule.java index e14236a..51c7878 100644 --- a/company/src/main/java/de/srsoftware/umbrella/company/CompanyModule.java +++ b/company/src/main/java/de/srsoftware/umbrella/company/CompanyModule.java @@ -201,7 +201,6 @@ public class CompanyModule extends BaseHandler implements CompanyService { var json = json(ex); 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 companies = companyDb.find(user.id(),keys); return sendContent(ex,mapValues(companies)); } diff --git a/documents/src/main/java/de/srsoftware/umbrella/documents/SqliteDb.java b/documents/src/main/java/de/srsoftware/umbrella/documents/SqliteDb.java index 735c0e0..51113ec 100644 --- a/documents/src/main/java/de/srsoftware/umbrella/documents/SqliteDb.java +++ b/documents/src/main/java/de/srsoftware/umbrella/documents/SqliteDb.java @@ -338,12 +338,32 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255) rs.close(); var query = Query.select(ALL).from(TABLE_DOCUMENTS).where(COMPANY_ID,in(companyIds.toArray())); - for (var key : keys) query.where(format("CONCAT({0},\" \",{1},\" \",{2},\" \",{3},\" \",{4},\" \",{5},\" \",{6},\" \",{7},\" \",{8},\" \",{9})",NUMBER,FIELD_HEAD,FIELD_FOOTER,SENDER,FIELD_TAX_NUMBER,FIELD_BANK_ACCOUNT,FIELD_CUSTOMER,FIELD_CUSTOMER_NUMBER,FIELD_CUSTOMER_TAX_NUMBER,FIELD_CUSTOMER_EMAIL),like("%"+key+"%")); + if (fulltext) { + for (var key : keys) query.where(format("CONCAT({0},\" \",{1},\" \",{2},\" \",{3},\" \",{4},\" \",{5},\" \",{6},\" \",{7},\" \",{8},\" \",{9})",NUMBER,FIELD_HEAD,FIELD_FOOTER,SENDER,FIELD_TAX_NUMBER,FIELD_BANK_ACCOUNT,FIELD_CUSTOMER,FIELD_CUSTOMER_NUMBER,FIELD_CUSTOMER_TAX_NUMBER,FIELD_CUSTOMER_EMAIL),like("%"+key+"%")); + } else { + for (var key : keys) query.where(format("CONCAT({0},\" \",{1},\" \",{2},\" \",{3},\" \",{4})",NUMBER,FIELD_HEAD,FIELD_FOOTER,SENDER,FIELD_CUSTOMER),like("%"+key+"%")); + } rs = query.exec(db); var map = new HashMap(); while (rs.next()) map.put(rs.getLong(ID),toDoc(rs,types)); rs.close(); + if (fulltext){ + var additionalDocIds = new HashSet(); + query = select(FIELD_DOCUMENT_ID).from(TABLE_POSITIONS).leftJoin(FIELD_DOCUMENT_ID,TABLE_DOCUMENTS,ID).where(COMPANY_ID,in(companyIds.toArray())); + for (var key : keys) query.where(format("CONCAT({0},\" \",{1},\" \",{2},\" \",{3})",FIELD_ITEM_CODE,UNIT,TITLE,DESCRIPTION),like("%"+key+"%")); + rs = query.exec(db); + while (rs.next()) additionalDocIds.add(rs.getLong(FIELD_DOCUMENT_ID)); + rs.close(); + + additionalDocIds.removeAll(map.keySet()); + + query = select(ALL).from(TABLE_DOCUMENTS).where(ID,in(additionalDocIds.toArray())); + rs = query.exec(db); + while (rs.next()) map.put(rs.getLong(ID),toDoc(rs,types)); + rs.close(); + } + rs = Query.select(ALL).from(TABLE_POSITIONS).where(FIELD_DOCUMENT_ID,in(map.keySet().toArray())).exec(db); while (rs.next()){ var docId = rs.getLong(FIELD_DOCUMENT_ID); diff --git a/frontend/src/routes/search/Search.svelte b/frontend/src/routes/search/Search.svelte index 5ff5959..0781874 100644 --- a/frontend/src/routes/search/Search.svelte +++ b/frontend/src/routes/search/Search.svelte @@ -23,7 +23,7 @@ async function setKey(ev){ if (ev) ev.preventDefault(); key = input; - + doSearch(null); } onMount(() => { @@ -130,6 +130,7 @@ Umbrella – {t('search')}: {key} +