From e664a805816554e2c9b5d68b64fd002dc8d9643a Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Sat, 9 Aug 2025 14:25:25 +0200 Subject: [PATCH] completed company deletion implementation Signed-off-by: Stephan Richter --- .../umbrella/company/CompanyModule.java | 10 ++-- .../srsoftware/umbrella/company/SqliteDb.java | 17 +++++-- .../umbrella/company/api/CompanyDb.java | 4 +- .../srsoftware/umbrella/core/Constants.java | 45 ++++++++++++++++++ .../umbrella/core/ModuleRegistry.java | 4 ++ .../umbrella/core/api/DocumentService.java | 5 ++ .../umbrella/core/api/ItemService.java | 5 ++ .../umbrella/core}/model/Customer.java | 3 +- .../umbrella/core}/model/Document.java | 4 +- .../srsoftware/umbrella/core/model}/Item.java | 13 +++-- .../umbrella/core}/model/Position.java | 3 +- .../umbrella/core}/model/PositionList.java | 7 ++- .../umbrella/core}/model/Sender.java | 3 +- .../umbrella/core}/model/Template.java | 5 +- .../srsoftware/umbrella/core}/model/Type.java | 2 +- .../umbrella/documents/Constants.java | 47 +------------------ .../umbrella/documents/DocumentApi.java | 23 +++++++-- .../umbrella/documents/DocumentDb.java | 3 ++ .../umbrella/documents/SqliteDb.java | 7 +-- .../umbrella/documents/TemplateDoc.java | 2 +- .../documents/model/CompanySettings.java | 1 + .../documents/model/CustomerSettings.java | 1 + frontend/src/routes/company/Index.svelte | 1 + .../srsoftware/umbrella/items/Constants.java | 3 -- .../de/srsoftware/umbrella/items/ItemApi.java | 9 +++- .../de/srsoftware/umbrella/items/ItemDb.java | 1 + .../srsoftware/umbrella/items/SqliteDb.java | 1 + 27 files changed, 138 insertions(+), 91 deletions(-) rename {documents/src/main/java/de/srsoftware/umbrella/documents => core/src/main/java/de/srsoftware/umbrella/core}/model/Customer.java (96%) rename {documents/src/main/java/de/srsoftware/umbrella/documents => core/src/main/java/de/srsoftware/umbrella/core}/model/Document.java (98%) rename {items/src/main/java/de/srsoftware/umbrella/items => core/src/main/java/de/srsoftware/umbrella/core/model}/Item.java (78%) rename {documents/src/main/java/de/srsoftware/umbrella/documents => core/src/main/java/de/srsoftware/umbrella/core}/model/Position.java (98%) rename {documents/src/main/java/de/srsoftware/umbrella/documents => core/src/main/java/de/srsoftware/umbrella/core}/model/PositionList.java (95%) rename {documents/src/main/java/de/srsoftware/umbrella/documents => core/src/main/java/de/srsoftware/umbrella/core}/model/Sender.java (96%) rename {documents/src/main/java/de/srsoftware/umbrella/documents => core/src/main/java/de/srsoftware/umbrella/core}/model/Template.java (74%) rename {documents/src/main/java/de/srsoftware/umbrella/documents => core/src/main/java/de/srsoftware/umbrella/core}/model/Type.java (64%) 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 c3fc712..9d54888 100644 --- a/company/src/main/java/de/srsoftware/umbrella/company/CompanyModule.java +++ b/company/src/main/java/de/srsoftware/umbrella/company/CompanyModule.java @@ -32,13 +32,13 @@ public class CompanyModule extends BaseHandler implements CompanyService { this.registry = registry.add(this); } - private boolean deleteCompany(long companyId, UmbrellaUser user, HttpExchange ex) { + private boolean deleteCompany(long companyId, UmbrellaUser user, HttpExchange ex) throws IOException { var company = get(companyId); if (!membership(companyId,user.id())) throw forbidden("You are mot a member of company {0}",company.name()); - // TODO: check, whether company is referenced by a document - // TODO: check, whether company is referenced by a item - // TODO: check, whether company is referenced by a project - return false; + if (!registry.documentService().list(companyId).isEmpty()) throw forbidden("There are documents owned by {0}",company.name()); + if (!registry.itemService().list(companyId).isEmpty()) throw forbidden("There are items owned by {0}",company.name()); + if (!registry.projectService().listCompanyProjects(companyId,true).isEmpty()) throw forbidden("There are projects owned by {0}",company.name()); + return sendContent(ex, companyDb.drop(companyId)); } @Override diff --git a/company/src/main/java/de/srsoftware/umbrella/company/SqliteDb.java b/company/src/main/java/de/srsoftware/umbrella/company/SqliteDb.java index 12a94d2..76a4117 100644 --- a/company/src/main/java/de/srsoftware/umbrella/company/SqliteDb.java +++ b/company/src/main/java/de/srsoftware/umbrella/company/SqliteDb.java @@ -94,11 +94,22 @@ CREATE TABLE IF NOT EXISTS "companies" ( } @Override - public void dropUser(long company_id, long user_id) { + public long drop(long companyId) { try { - delete().from(TABLE_COMPANIES_USERS).where(COMPANY_ID,equal(company_id)).where(USER_ID,equal(user_id)).execute(db); + delete().from(TABLE_COMPANIES_USERS).where(COMPANY_ID,equal(companyId)).execute(db); + delete().from(TABLE_COMPANIES).where(ID,equal(companyId)).execute(db); + return companyId; } catch (SQLException e) { - throw databaseException("Failed to assign user {0} to company {1}"); + throw databaseException("Failed to remove company {0}",companyId); + } + } + + @Override + public void dropUser(long companyId, long userId) { + try { + delete().from(TABLE_COMPANIES_USERS).where(COMPANY_ID,equal(companyId)).where(USER_ID,equal(userId)).execute(db); + } catch (SQLException e) { + throw databaseException("Failed to remove user {0} from company {1}",userId,companyId); } } diff --git a/company/src/main/java/de/srsoftware/umbrella/company/api/CompanyDb.java b/company/src/main/java/de/srsoftware/umbrella/company/api/CompanyDb.java index 6426145..b62d495 100644 --- a/company/src/main/java/de/srsoftware/umbrella/company/api/CompanyDb.java +++ b/company/src/main/java/de/srsoftware/umbrella/company/api/CompanyDb.java @@ -9,13 +9,15 @@ import java.util.Map; public interface CompanyDb { void addUser(long company_id, long user_id); + long drop(long companyId); + void dropUser(long company_id, long user_id); Collection getMembers(long companyId) throws UmbrellaException; Map listCompaniesOf(long id) throws UmbrellaException; - Company load(long companyId) throws UmbrellaException; + Company save(Company company); } diff --git a/core/src/main/java/de/srsoftware/umbrella/core/Constants.java b/core/src/main/java/de/srsoftware/umbrella/core/Constants.java index a6504a2..75a032a 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/Constants.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/Constants.java @@ -54,8 +54,50 @@ public class Constants { public static final String FIELD_BANK_ACCOUNT = "bank_account"; public static final String FIELD_COURT = "court"; public static final String FIELD_CURRENCY = "currency"; + public static final String FIELD_END_TIME = "end_time"; public static final String FIELD_PHONE = "phone"; + public static final String FIELD_START_TIME = "start_time"; + public static final String FIELD_TASKS = "tasks"; public static final String FIELD_TAX_NUMBER = "tax_number"; + public static final String FIELD_TAX = "tax"; + public static final String FIELD_UNIT_PRICE = "unit_price"; + + public static final String FIELD_AMOUNT = "amount"; + public static final String FIELD_COMPANY = "company"; + public static final String FIELD_COMPANY_ID = "company_id"; + public static final String FIELD_CUSTOMER = "customer"; + public static final String FIELD_CUSTOMER_EMAIL = "customer_email"; + public static final String FIELD_CUSTOMER_NUMBER = "customer_number"; + public static final String FIELD_CUSTOMER_TAX_NUMBER = "customer_tax_number"; + public static final String FIELD_DEFAULT_HEADER = "default_header"; + public static final String FIELD_DEFAULT_FOOTER = "default_footer"; + public static final String FIELD_DEFAULT_MAIL = "type_mail_text"; + public static final String FIELD_DELIVERY = "delivery"; + public static final String FIELD_DELIVERY_DATE = "delivery_date"; + public static final String FIELD_DOCUMENT = "document"; + public static final String FIELD_DOCUMENT_ID = "document_id"; + public static final String FIELD_DOC_TYPE_ID = "document_type_id"; + public static final String FIELD_FOOTER = "footer"; + public static final String FIELD_GROSS_SUM = "gross_sum"; + public static final String FIELD_HEAD = "head"; + public static final String FIELD_ITEM = "item"; + public static final String FIELD_ITEM_CODE = "item_code"; + public static final String FIELD_NET_PRICE = "net_price"; + public static final String FIELD_NET_SUM = "net_sum"; + public static final String FIELD_NEXT_TYPE = "next_type_id"; + public static final String FIELD_POS = "pos"; + public static final String FIELD_POSITIONS = "positions"; + public static final String FIELD_PRICE = "single_price"; + public static final String FIELD_PRICE_FORMAT = "price_format"; + public static final String FIELD_TEMPLATE_ID = "template_id"; + public static final String FIELD_TAX_ID = "tax_id"; + public static final String FIELD_TIME_ID = "time_id"; + public static final String FIELD_TYPE = "type"; + public static final String FIELD_TYPE_ID = "type_id"; + public static final String FIELD_TYPE_NUMBER = "type_number"; + public static final String FIELD_TYPE_PREFIX = "type_prefix"; + public static final String FIELD_TYPE_SUFFIX = "type_suffix"; + public static final String FIELD_UNIT = "unit"; public static final String GET = "GET"; @@ -112,6 +154,7 @@ public class Constants { public static final String TABLE_SETTINGS = "settings"; public static final String TAGS = "tags"; + public static final String TAX = "tax"; public static final String TEMPLATE = "template"; public static final String TEXT = "text"; public static final String THOUSANDS_SEPARATOR = "thousands_separator"; @@ -122,6 +165,8 @@ public class Constants { public static final String TYPE = "type"; public static final String UMBRELLA = "Umbrella"; + public static final String UNIT = "unit"; + public static final String UNIT_PRICE = "unit_price"; public static final String URL = "url"; public static final String USER = "user"; public static final String USER_ID = "user_id"; diff --git a/core/src/main/java/de/srsoftware/umbrella/core/ModuleRegistry.java b/core/src/main/java/de/srsoftware/umbrella/core/ModuleRegistry.java index 3bc81df..d052247 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/ModuleRegistry.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/ModuleRegistry.java @@ -91,6 +91,10 @@ public class ModuleRegistry { return documentService; } + public ItemService itemService(){ + return itemService; + } + public NoteService noteService(){ return noteService; } diff --git a/core/src/main/java/de/srsoftware/umbrella/core/api/DocumentService.java b/core/src/main/java/de/srsoftware/umbrella/core/api/DocumentService.java index 464d752..055c4d5 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/api/DocumentService.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/api/DocumentService.java @@ -1,5 +1,10 @@ /* © SRSoftware 2025 */ package de.srsoftware.umbrella.core.api; +import de.srsoftware.umbrella.core.exceptions.UmbrellaException; +import de.srsoftware.umbrella.core.model.Document; +import java.util.Map; + public interface DocumentService { + Map list(long companyId) throws UmbrellaException; } diff --git a/core/src/main/java/de/srsoftware/umbrella/core/api/ItemService.java b/core/src/main/java/de/srsoftware/umbrella/core/api/ItemService.java index adcc0bd..ade844c 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/api/ItemService.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/api/ItemService.java @@ -1,5 +1,10 @@ /* © SRSoftware 2025 */ package de.srsoftware.umbrella.core.api; +import de.srsoftware.umbrella.core.exceptions.UmbrellaException; +import de.srsoftware.umbrella.core.model.Item; +import java.util.Collection; + public interface ItemService { + Collection list(long companyId) throws UmbrellaException; } diff --git a/documents/src/main/java/de/srsoftware/umbrella/documents/model/Customer.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Customer.java similarity index 96% rename from documents/src/main/java/de/srsoftware/umbrella/documents/model/Customer.java rename to core/src/main/java/de/srsoftware/umbrella/core/model/Customer.java index 830e82e..9adfd94 100644 --- a/documents/src/main/java/de/srsoftware/umbrella/documents/model/Customer.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Customer.java @@ -1,9 +1,8 @@ /* © SRSoftware 2025 */ -package de.srsoftware.umbrella.documents.model; +package de.srsoftware.umbrella.core.model; import static de.srsoftware.umbrella.core.Constants.*; import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingFieldException; -import static de.srsoftware.umbrella.documents.Constants.FIELD_TAX_ID; import de.srsoftware.tools.Mappable; import de.srsoftware.umbrella.core.exceptions.UmbrellaException; diff --git a/documents/src/main/java/de/srsoftware/umbrella/documents/model/Document.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Document.java similarity index 98% rename from documents/src/main/java/de/srsoftware/umbrella/documents/model/Document.java rename to core/src/main/java/de/srsoftware/umbrella/core/model/Document.java index e7bdf9b..2150a44 100644 --- a/documents/src/main/java/de/srsoftware/umbrella/documents/model/Document.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Document.java @@ -1,11 +1,9 @@ /* © SRSoftware 2025 */ -package de.srsoftware.umbrella.documents.model; +package de.srsoftware.umbrella.core.model; import static de.srsoftware.umbrella.core.Constants.*; import static de.srsoftware.umbrella.core.ResponseCode.HTTP_UNPROCESSABLE; import static de.srsoftware.umbrella.core.Util.mapMarkdown; -import static de.srsoftware.umbrella.documents.Constants.*; -import static de.srsoftware.umbrella.documents.Constants.FIELD_CUSTOMER; import static java.util.Optional.empty; import de.srsoftware.tools.Mappable; diff --git a/items/src/main/java/de/srsoftware/umbrella/items/Item.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Item.java similarity index 78% rename from items/src/main/java/de/srsoftware/umbrella/items/Item.java rename to core/src/main/java/de/srsoftware/umbrella/core/model/Item.java index c887fc8..e2a91cd 100644 --- a/items/src/main/java/de/srsoftware/umbrella/items/Item.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Item.java @@ -1,10 +1,9 @@ /* © SRSoftware 2025 */ -package de.srsoftware.umbrella.items; +package de.srsoftware.umbrella.core.model; import static de.srsoftware.umbrella.core.Constants.*; import static de.srsoftware.umbrella.core.Constants.CODE; import static de.srsoftware.umbrella.core.Util.mapMarkdown; -import static de.srsoftware.umbrella.items.Constants.*; import de.srsoftware.tools.Mappable; import java.sql.ResultSet; @@ -15,12 +14,12 @@ public record Item(long id, long companyId, String code, String name, String des public static Item of(ResultSet rs) throws SQLException { var id = rs.getLong(ID); var companyId = rs.getLong(COMPANY_ID); - var code = rs.getString(CODE); - var name = rs.getString(NAME); - var desc = rs.getString(DESCRIPTION); - var unit = rs.getString(UNIT); + var code = rs.getString(CODE); + var name = rs.getString(NAME); + var desc = rs.getString(DESCRIPTION); + var unit = rs.getString(UNIT); var unitPrice = rs.getLong(UNIT_PRICE); - var tax = rs.getInt(TAX); + var tax = rs.getInt(TAX); return new Item(id,companyId,code,name,desc,unit,unitPrice,tax); } diff --git a/documents/src/main/java/de/srsoftware/umbrella/documents/model/Position.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Position.java similarity index 98% rename from documents/src/main/java/de/srsoftware/umbrella/documents/model/Position.java rename to core/src/main/java/de/srsoftware/umbrella/core/model/Position.java index 7384762..fa1af63 100644 --- a/documents/src/main/java/de/srsoftware/umbrella/documents/model/Position.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Position.java @@ -1,10 +1,9 @@ /* © SRSoftware 2025 */ -package de.srsoftware.umbrella.documents.model; +package de.srsoftware.umbrella.core.model; import static de.srsoftware.umbrella.core.Constants.*; import static de.srsoftware.umbrella.core.Util.mapMarkdown; -import static de.srsoftware.umbrella.documents.Constants.*; import de.srsoftware.tools.Mappable; import java.util.*; diff --git a/documents/src/main/java/de/srsoftware/umbrella/documents/model/PositionList.java b/core/src/main/java/de/srsoftware/umbrella/core/model/PositionList.java similarity index 95% rename from documents/src/main/java/de/srsoftware/umbrella/documents/model/PositionList.java rename to core/src/main/java/de/srsoftware/umbrella/core/model/PositionList.java index 6ea7fcb..5ce5c2e 100644 --- a/documents/src/main/java/de/srsoftware/umbrella/documents/model/PositionList.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/PositionList.java @@ -1,8 +1,7 @@ /* © SRSoftware 2025 */ -package de.srsoftware.umbrella.documents.model; +package de.srsoftware.umbrella.core.model; import static de.srsoftware.umbrella.core.Constants.*; -import static de.srsoftware.umbrella.documents.Constants.*; import de.srsoftware.tools.Pair; import de.srsoftware.umbrella.core.exceptions.UmbrellaException; @@ -20,8 +19,8 @@ public class PositionList extends HashMap { } public Position addItem(JSONObject item) { - var itemCode = item.getString(FIELD_CODE); - var unit = item.getString(FIELD_UNIT); + var itemCode = item.getString(CODE); + var unit = item.getString(UNIT); var name = item.getString(NAME); var description = item.getString(DESCRIPTION); var unitPrice = item.getLong(FIELD_UNIT_PRICE); diff --git a/documents/src/main/java/de/srsoftware/umbrella/documents/model/Sender.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Sender.java similarity index 96% rename from documents/src/main/java/de/srsoftware/umbrella/documents/model/Sender.java rename to core/src/main/java/de/srsoftware/umbrella/core/model/Sender.java index 02e2528..7caf37d 100644 --- a/documents/src/main/java/de/srsoftware/umbrella/documents/model/Sender.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Sender.java @@ -1,9 +1,8 @@ /* © SRSoftware 2025 */ -package de.srsoftware.umbrella.documents.model; +package de.srsoftware.umbrella.core.model; import static de.srsoftware.umbrella.core.Constants.*; import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingFieldException; -import static de.srsoftware.umbrella.documents.Constants.*; import de.srsoftware.tools.Mappable; import de.srsoftware.umbrella.core.exceptions.UmbrellaException; diff --git a/documents/src/main/java/de/srsoftware/umbrella/documents/model/Template.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Template.java similarity index 74% rename from documents/src/main/java/de/srsoftware/umbrella/documents/model/Template.java rename to core/src/main/java/de/srsoftware/umbrella/core/model/Template.java index f814934..7e27af0 100644 --- a/documents/src/main/java/de/srsoftware/umbrella/documents/model/Template.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Template.java @@ -1,8 +1,7 @@ /* © SRSoftware 2025 */ -package de.srsoftware.umbrella.documents.model; +package de.srsoftware.umbrella.core.model; import static de.srsoftware.umbrella.core.Constants.*; -import static de.srsoftware.umbrella.documents.Constants.FIELD_COMPANY; import de.srsoftware.tools.Mappable; import java.sql.ResultSet; @@ -17,6 +16,6 @@ public record Template(long id, long company, String name, byte[] data) implemen @Override public Map toMap() { - return Map.of(ID,id,FIELD_COMPANY,company, NAME,name); + return Map.of(ID,id, FIELD_COMPANY,company, NAME,name); } } diff --git a/documents/src/main/java/de/srsoftware/umbrella/documents/model/Type.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Type.java similarity index 64% rename from documents/src/main/java/de/srsoftware/umbrella/documents/model/Type.java rename to core/src/main/java/de/srsoftware/umbrella/core/model/Type.java index 37f178c..6fe365c 100644 --- a/documents/src/main/java/de/srsoftware/umbrella/documents/model/Type.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Type.java @@ -1,5 +1,5 @@ /* © SRSoftware 2025 */ -package de.srsoftware.umbrella.documents.model; +package de.srsoftware.umbrella.core.model; diff --git a/documents/src/main/java/de/srsoftware/umbrella/documents/Constants.java b/documents/src/main/java/de/srsoftware/umbrella/documents/Constants.java index 8706d07..371f315 100644 --- a/documents/src/main/java/de/srsoftware/umbrella/documents/Constants.java +++ b/documents/src/main/java/de/srsoftware/umbrella/documents/Constants.java @@ -23,52 +23,7 @@ public class Constants { public static final String ERROR_ADDRESS_MISSING = "{0} address does not contain street address / post code / city"; - public static final String FIELD_AMOUNT = "amount"; - public static final String FIELD_CODE = "code"; - public static final String FIELD_COMPANY = "company"; - public static final String FIELD_COMPANY_ID = "company_id"; - public static final String FIELD_CUSTOMER = "customer"; - public static final String FIELD_CUSTOMER_EMAIL = "customer_email"; - public static final String FIELD_CUSTOMER_NUMBER = "customer_number"; - public static final String FIELD_CUSTOMER_TAX_NUMBER = "customer_tax_number"; - public static final String FIELD_DEFAULT_HEADER = "default_header"; - public static final String FIELD_DEFAULT_FOOTER = "default_footer"; - public static final String FIELD_DEFAULT_MAIL = "type_mail_text"; - public static final String FIELD_DELIVERY = "delivery"; - public static final String FIELD_DELIVERY_DATE = "delivery_date"; - public static final String FIELD_DOC = "doc"; - public static final String FIELD_DOCID = "doc_id"; - public static final String FIELD_DOCUMENT = "document"; - public static final String FIELD_DOCUMENT_ID = "document_id"; - public static final String FIELD_DOC_TYPE_ID = "document_type_id"; - public static final String FIELD_END_TIME = "end_time"; - public static final String FIELD_FOOTER = "footer"; - public static final String FIELD_GROSS_SUM = "gross_sum"; - public static final String FIELD_HEAD = "head"; - public static final String FIELD_ITEM = "item"; - public static final String FIELD_ITEM_CODE = "item_code"; - public static final String FIELD_NET_PRICE = "net_price"; - public static final String FIELD_NET_SUM = "net_sum"; - public static final String FIELD_NEXT_TYPE = "next_type_id"; - public static final String FIELD_POS = "pos"; - public static final String FIELD_POSITIONS = "positions"; - public static final String FIELD_PRICE = "single_price"; - public static final String FIELD_PRICE_FORMAT = "price_format"; - public static final String FIELD_PROJECTS = "projects"; - public static final String FIELD_RECEIVER = "receiver"; - public static final String FIELD_START_TIME = "start_time"; - public static final String FIELD_TEMPLATE_ID = "template_id"; - public static final String FIELD_TASKS = "tasks"; - public static final String FIELD_TAX = "tax"; - public static final String FIELD_TAX_ID = "tax_id"; - public static final String FIELD_TIME_ID = "time_id"; - public static final String FIELD_TYPE = "type"; - public static final String FIELD_TYPE_ID = "type_id"; - public static final String FIELD_TYPE_NUMBER = "type_number"; - public static final String FIELD_TYPE_PREFIX = "type_prefix"; - public static final String FIELD_TYPE_SUFFIX = "type_suffix"; - public static final String FIELD_UNIT = "unit"; - public static final String FIELD_UNIT_PRICE = "unit_price"; + public static final String MOVE = "move"; public static final String PATH_ADD_ITEM = "add_item"; diff --git a/documents/src/main/java/de/srsoftware/umbrella/documents/DocumentApi.java b/documents/src/main/java/de/srsoftware/umbrella/documents/DocumentApi.java index dc8c31e..1913af0 100644 --- a/documents/src/main/java/de/srsoftware/umbrella/documents/DocumentApi.java +++ b/documents/src/main/java/de/srsoftware/umbrella/documents/DocumentApi.java @@ -13,14 +13,23 @@ import static de.srsoftware.tools.Optionals.isSet; import static de.srsoftware.tools.Strings.escapeHtmlEntities; import static de.srsoftware.umbrella.core.ConnectionProvider.connect; import static de.srsoftware.umbrella.core.Constants.*; +import static de.srsoftware.umbrella.core.Constants.FIELD_AMOUNT; +import static de.srsoftware.umbrella.core.Constants.FIELD_COMPANY; +import static de.srsoftware.umbrella.core.Constants.FIELD_CUSTOMER; +import static de.srsoftware.umbrella.core.Constants.FIELD_DOCUMENT; +import static de.srsoftware.umbrella.core.Constants.FIELD_ITEM_CODE; +import static de.srsoftware.umbrella.core.Constants.FIELD_PRICE_FORMAT; +import static de.srsoftware.umbrella.core.Constants.FIELD_TIME_ID; +import static de.srsoftware.umbrella.core.Constants.FIELD_TYPE; +import static de.srsoftware.umbrella.core.Constants.FIELD_UNIT; import static de.srsoftware.umbrella.core.Paths.LIST; import static de.srsoftware.umbrella.core.Paths.STATES; import static de.srsoftware.umbrella.core.ResponseCode.HTTP_UNPROCESSABLE; import static de.srsoftware.umbrella.core.Util.request; import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.*; +import static de.srsoftware.umbrella.core.model.Document.State.NEW; +import static de.srsoftware.umbrella.core.model.Document.State.SENT; import static de.srsoftware.umbrella.documents.Constants.*; -import static de.srsoftware.umbrella.documents.model.Document.State.NEW; -import static de.srsoftware.umbrella.documents.model.Document.State.SENT; import static java.lang.System.Logger.Level.DEBUG; import static java.lang.System.Logger.Level.WARNING; import static java.net.HttpURLConnection.*; @@ -46,8 +55,8 @@ import de.srsoftware.umbrella.core.ModuleRegistry; import de.srsoftware.umbrella.core.api.*; import de.srsoftware.umbrella.core.exceptions.UmbrellaException; import de.srsoftware.umbrella.core.model.*; +import de.srsoftware.umbrella.core.model.Customer; import de.srsoftware.umbrella.documents.model.*; -import de.srsoftware.umbrella.documents.model.Customer; import java.io.File; import java.io.IOException; import java.text.MessageFormat; @@ -400,6 +409,11 @@ public class DocumentApi extends BaseHandler implements DocumentService { return new JSONArray(s); } + public Map list(long companyId) throws UmbrellaException{ + return db.listDocs(companyId); + } + + private boolean listCompaniesDocuments(HttpExchange ex, UmbrellaUser user, Token token) throws UmbrellaException { try { var json = json(ex); @@ -407,7 +421,7 @@ public class DocumentApi extends BaseHandler implements DocumentService { long companyId = json.getLong(COMPANY); var company = modules.companyService().get(companyId); if (!modules.companyService().membership(companyId,user.id())) throw forbidden("You are mot a member of company {0}",company); - var docs = db.listDocs(companyId); + var docs = list(companyId); var map = new HashMap(); for (var entry : docs.entrySet()) map.put(entry.getKey(),entry.getValue().summary()); return sendContent(ex,new JSONObject(map).toString(2)); @@ -417,6 +431,7 @@ public class DocumentApi extends BaseHandler implements DocumentService { } } + private boolean patchDocument(long docId, UmbrellaUser user, HttpExchange ex) throws UmbrellaException, IOException { var doc = getDocument(docId,user).a; doc.patch(json(ex)); diff --git a/documents/src/main/java/de/srsoftware/umbrella/documents/DocumentDb.java b/documents/src/main/java/de/srsoftware/umbrella/documents/DocumentDb.java index 4927c9d..32fd86e 100644 --- a/documents/src/main/java/de/srsoftware/umbrella/documents/DocumentDb.java +++ b/documents/src/main/java/de/srsoftware/umbrella/documents/DocumentDb.java @@ -3,6 +3,9 @@ package de.srsoftware.umbrella.documents; import de.srsoftware.tools.Pair; import de.srsoftware.umbrella.core.exceptions.UmbrellaException; +import de.srsoftware.umbrella.core.model.Document; +import de.srsoftware.umbrella.core.model.Template; +import de.srsoftware.umbrella.core.model.Type; import de.srsoftware.umbrella.documents.model.*; import java.util.Collection; import java.util.HashMap; 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 3097859..0821e9e 100644 --- a/documents/src/main/java/de/srsoftware/umbrella/documents/SqliteDb.java +++ b/documents/src/main/java/de/srsoftware/umbrella/documents/SqliteDb.java @@ -7,10 +7,11 @@ import static de.srsoftware.tools.jdbc.Condition.in; import static de.srsoftware.tools.jdbc.Query.*; import static de.srsoftware.tools.jdbc.Query.SelectQuery.ALL; import static de.srsoftware.umbrella.core.Constants.*; +import static de.srsoftware.umbrella.core.Constants.FIELD_COMPANY_ID; import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.databaseException; +import static de.srsoftware.umbrella.core.model.Document.DEFAULT_THOUSANDS_SEPARATOR; +import static de.srsoftware.umbrella.core.model.Document.State; import static de.srsoftware.umbrella.documents.Constants.*; -import static de.srsoftware.umbrella.documents.model.Document.DEFAULT_THOUSANDS_SEPARATOR; -import static de.srsoftware.umbrella.documents.model.Document.State; import static java.lang.System.Logger.Level.*; import static java.text.MessageFormat.format; import static java.time.ZoneOffset.UTC; @@ -18,8 +19,8 @@ import static java.time.ZoneOffset.UTC; import de.srsoftware.tools.Pair; import de.srsoftware.tools.jdbc.Query; import de.srsoftware.umbrella.core.exceptions.UmbrellaException; +import de.srsoftware.umbrella.core.model.*; import de.srsoftware.umbrella.documents.model.*; -import de.srsoftware.umbrella.documents.model.Type; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; diff --git a/documents/src/main/java/de/srsoftware/umbrella/documents/TemplateDoc.java b/documents/src/main/java/de/srsoftware/umbrella/documents/TemplateDoc.java index a3888de..b0714cb 100644 --- a/documents/src/main/java/de/srsoftware/umbrella/documents/TemplateDoc.java +++ b/documents/src/main/java/de/srsoftware/umbrella/documents/TemplateDoc.java @@ -3,8 +3,8 @@ package de.srsoftware.umbrella.documents; import static de.srsoftware.tools.MimeType.*; import static de.srsoftware.umbrella.core.Constants.ERROR_MISSING_FIELD; +import static de.srsoftware.umbrella.core.Constants.FIELD_PRICE_FORMAT; import static de.srsoftware.umbrella.core.Constants.USER; -import static de.srsoftware.umbrella.documents.Constants.FIELD_PRICE_FORMAT; import static java.lang.System.Logger.Level.TRACE; import static java.nio.charset.StandardCharsets.UTF_8; import static java.text.MessageFormat.format; diff --git a/documents/src/main/java/de/srsoftware/umbrella/documents/model/CompanySettings.java b/documents/src/main/java/de/srsoftware/umbrella/documents/model/CompanySettings.java index 30dafaf..4900208 100644 --- a/documents/src/main/java/de/srsoftware/umbrella/documents/model/CompanySettings.java +++ b/documents/src/main/java/de/srsoftware/umbrella/documents/model/CompanySettings.java @@ -2,6 +2,7 @@ package de.srsoftware.umbrella.documents.model; import static de.srsoftware.tools.Optionals.emptyIfNull; +import static de.srsoftware.umbrella.core.Constants.*; import static de.srsoftware.umbrella.documents.Constants.*; import java.sql.ResultSet; diff --git a/documents/src/main/java/de/srsoftware/umbrella/documents/model/CustomerSettings.java b/documents/src/main/java/de/srsoftware/umbrella/documents/model/CustomerSettings.java index f069d4b..2a96613 100644 --- a/documents/src/main/java/de/srsoftware/umbrella/documents/model/CustomerSettings.java +++ b/documents/src/main/java/de/srsoftware/umbrella/documents/model/CustomerSettings.java @@ -2,6 +2,7 @@ package de.srsoftware.umbrella.documents.model; +import static de.srsoftware.umbrella.core.Constants.*; import static de.srsoftware.umbrella.documents.Constants.*; import de.srsoftware.tools.Mappable; diff --git a/frontend/src/routes/company/Index.svelte b/frontend/src/routes/company/Index.svelte index 41141ff..e41a474 100644 --- a/frontend/src/routes/company/Index.svelte +++ b/frontend/src/routes/company/Index.svelte @@ -41,6 +41,7 @@ } else { error = await resp.text(); } + return false; } async function loadCompanies(){ diff --git a/items/src/main/java/de/srsoftware/umbrella/items/Constants.java b/items/src/main/java/de/srsoftware/umbrella/items/Constants.java index 7d21f03..899ab2a 100644 --- a/items/src/main/java/de/srsoftware/umbrella/items/Constants.java +++ b/items/src/main/java/de/srsoftware/umbrella/items/Constants.java @@ -5,7 +5,4 @@ public class Constants { private Constants(){} public static final String CONFIG_DATABASE = "umbrella.modules.items.database"; public static final String TABLE_ITEMS = "items"; - public static final String TAX = "tax"; - public static final String UNIT = "unit"; - public static final String UNIT_PRICE = "unit_price"; } diff --git a/items/src/main/java/de/srsoftware/umbrella/items/ItemApi.java b/items/src/main/java/de/srsoftware/umbrella/items/ItemApi.java index 370ed9b..36c48e9 100644 --- a/items/src/main/java/de/srsoftware/umbrella/items/ItemApi.java +++ b/items/src/main/java/de/srsoftware/umbrella/items/ItemApi.java @@ -16,9 +16,11 @@ import de.srsoftware.umbrella.core.BaseHandler; import de.srsoftware.umbrella.core.ModuleRegistry; import de.srsoftware.umbrella.core.api.ItemService; import de.srsoftware.umbrella.core.exceptions.UmbrellaException; +import de.srsoftware.umbrella.core.model.Item; import de.srsoftware.umbrella.core.model.Token; import de.srsoftware.umbrella.core.model.UmbrellaUser; import java.io.IOException; +import java.util.Collection; import java.util.HashMap; import java.util.Optional; @@ -50,13 +52,18 @@ public class ItemApi extends BaseHandler implements ItemService { } } + @Override + public Collection list(long companyId) throws UmbrellaException { + return itemDb.list(companyId); + } + private boolean listItems(HttpExchange ex, UmbrellaUser user) throws IOException, UmbrellaException { var json = json(ex); if (!(json.has(COMPANY_ID) && json.get(COMPANY_ID) instanceof Number cid)) throw missingFieldException(COMPANY_ID); var companyId = cid.longValue(); var company = registry.companyService().get(companyId); if (!registry.companyService().membership(companyId,user.id())) throw forbidden("You are mot a member of company {0}",company.name()); - var items = itemDb.list(companyId) + var items = list(companyId) .stream() .map(Item::toMap) .map(HashMap::new) diff --git a/items/src/main/java/de/srsoftware/umbrella/items/ItemDb.java b/items/src/main/java/de/srsoftware/umbrella/items/ItemDb.java index aea7262..2f43c2f 100644 --- a/items/src/main/java/de/srsoftware/umbrella/items/ItemDb.java +++ b/items/src/main/java/de/srsoftware/umbrella/items/ItemDb.java @@ -2,6 +2,7 @@ package de.srsoftware.umbrella.items; import de.srsoftware.umbrella.core.exceptions.UmbrellaException; +import de.srsoftware.umbrella.core.model.Item; import java.util.Collection; public interface ItemDb { diff --git a/items/src/main/java/de/srsoftware/umbrella/items/SqliteDb.java b/items/src/main/java/de/srsoftware/umbrella/items/SqliteDb.java index f09d38e..8de3705 100644 --- a/items/src/main/java/de/srsoftware/umbrella/items/SqliteDb.java +++ b/items/src/main/java/de/srsoftware/umbrella/items/SqliteDb.java @@ -8,6 +8,7 @@ import static de.srsoftware.umbrella.core.Constants.COMPANY_ID; import static de.srsoftware.umbrella.items.Constants.TABLE_ITEMS; import de.srsoftware.umbrella.core.exceptions.UmbrellaException; +import de.srsoftware.umbrella.core.model.Item; import java.sql.Connection; import java.sql.SQLException; import java.util.Collection;