Browse Source

completed company deletion implementation

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
module/company
Stephan Richter 3 months ago
parent
commit
e664a80581
  1. 10
      company/src/main/java/de/srsoftware/umbrella/company/CompanyModule.java
  2. 17
      company/src/main/java/de/srsoftware/umbrella/company/SqliteDb.java
  3. 4
      company/src/main/java/de/srsoftware/umbrella/company/api/CompanyDb.java
  4. 45
      core/src/main/java/de/srsoftware/umbrella/core/Constants.java
  5. 4
      core/src/main/java/de/srsoftware/umbrella/core/ModuleRegistry.java
  6. 5
      core/src/main/java/de/srsoftware/umbrella/core/api/DocumentService.java
  7. 5
      core/src/main/java/de/srsoftware/umbrella/core/api/ItemService.java
  8. 3
      core/src/main/java/de/srsoftware/umbrella/core/model/Customer.java
  9. 4
      core/src/main/java/de/srsoftware/umbrella/core/model/Document.java
  10. 13
      core/src/main/java/de/srsoftware/umbrella/core/model/Item.java
  11. 3
      core/src/main/java/de/srsoftware/umbrella/core/model/Position.java
  12. 7
      core/src/main/java/de/srsoftware/umbrella/core/model/PositionList.java
  13. 3
      core/src/main/java/de/srsoftware/umbrella/core/model/Sender.java
  14. 5
      core/src/main/java/de/srsoftware/umbrella/core/model/Template.java
  15. 2
      core/src/main/java/de/srsoftware/umbrella/core/model/Type.java
  16. 47
      documents/src/main/java/de/srsoftware/umbrella/documents/Constants.java
  17. 23
      documents/src/main/java/de/srsoftware/umbrella/documents/DocumentApi.java
  18. 3
      documents/src/main/java/de/srsoftware/umbrella/documents/DocumentDb.java
  19. 7
      documents/src/main/java/de/srsoftware/umbrella/documents/SqliteDb.java
  20. 2
      documents/src/main/java/de/srsoftware/umbrella/documents/TemplateDoc.java
  21. 1
      documents/src/main/java/de/srsoftware/umbrella/documents/model/CompanySettings.java
  22. 1
      documents/src/main/java/de/srsoftware/umbrella/documents/model/CustomerSettings.java
  23. 1
      frontend/src/routes/company/Index.svelte
  24. 3
      items/src/main/java/de/srsoftware/umbrella/items/Constants.java
  25. 9
      items/src/main/java/de/srsoftware/umbrella/items/ItemApi.java
  26. 1
      items/src/main/java/de/srsoftware/umbrella/items/ItemDb.java
  27. 1
      items/src/main/java/de/srsoftware/umbrella/items/SqliteDb.java

10
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); 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); var company = get(companyId);
if (!membership(companyId,user.id())) throw forbidden("You are mot a member of company {0}",company.name()); 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 if (!registry.documentService().list(companyId).isEmpty()) throw forbidden("There are documents owned by {0}",company.name());
// TODO: check, whether company is referenced by a item if (!registry.itemService().list(companyId).isEmpty()) throw forbidden("There are items owned by {0}",company.name());
// TODO: check, whether company is referenced by a project if (!registry.projectService().listCompanyProjects(companyId,true).isEmpty()) throw forbidden("There are projects owned by {0}",company.name());
return false; return sendContent(ex, companyDb.drop(companyId));
} }
@Override @Override

17
company/src/main/java/de/srsoftware/umbrella/company/SqliteDb.java

@ -94,11 +94,22 @@ CREATE TABLE IF NOT EXISTS "companies" (
} }
@Override @Override
public void dropUser(long company_id, long user_id) { public long drop(long companyId) {
try { 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) { } 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);
} }
} }

4
company/src/main/java/de/srsoftware/umbrella/company/api/CompanyDb.java

@ -9,13 +9,15 @@ import java.util.Map;
public interface CompanyDb { public interface CompanyDb {
void addUser(long company_id, long user_id); void addUser(long company_id, long user_id);
long drop(long companyId);
void dropUser(long company_id, long user_id); void dropUser(long company_id, long user_id);
Collection<Long> getMembers(long companyId) throws UmbrellaException; Collection<Long> getMembers(long companyId) throws UmbrellaException;
Map<Long,Company> listCompaniesOf(long id) throws UmbrellaException; Map<Long,Company> listCompaniesOf(long id) throws UmbrellaException;
Company load(long companyId) throws UmbrellaException; Company load(long companyId) throws UmbrellaException;
Company save(Company company); Company save(Company company);
} }

45
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_BANK_ACCOUNT = "bank_account";
public static final String FIELD_COURT = "court"; public static final String FIELD_COURT = "court";
public static final String FIELD_CURRENCY = "currency"; 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_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_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"; public static final String GET = "GET";
@ -112,6 +154,7 @@ public class Constants {
public static final String TABLE_SETTINGS = "settings"; public static final String TABLE_SETTINGS = "settings";
public static final String TAGS = "tags"; public static final String TAGS = "tags";
public static final String TAX = "tax";
public static final String TEMPLATE = "template"; public static final String TEMPLATE = "template";
public static final String TEXT = "text"; public static final String TEXT = "text";
public static final String THOUSANDS_SEPARATOR = "thousands_separator"; 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 TYPE = "type";
public static final String UMBRELLA = "Umbrella"; 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 URL = "url";
public static final String USER = "user"; public static final String USER = "user";
public static final String USER_ID = "user_id"; public static final String USER_ID = "user_id";

4
core/src/main/java/de/srsoftware/umbrella/core/ModuleRegistry.java

@ -91,6 +91,10 @@ public class ModuleRegistry {
return documentService; return documentService;
} }
public ItemService itemService(){
return itemService;
}
public NoteService noteService(){ public NoteService noteService(){
return noteService; return noteService;
} }

5
core/src/main/java/de/srsoftware/umbrella/core/api/DocumentService.java

@ -1,5 +1,10 @@
/* © SRSoftware 2025 */ /* © SRSoftware 2025 */
package de.srsoftware.umbrella.core.api; 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 { public interface DocumentService {
Map<Long, Document> list(long companyId) throws UmbrellaException;
} }

5
core/src/main/java/de/srsoftware/umbrella/core/api/ItemService.java

@ -1,5 +1,10 @@
/* © SRSoftware 2025 */ /* © SRSoftware 2025 */
package de.srsoftware.umbrella.core.api; 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 { public interface ItemService {
Collection<Item> list(long companyId) throws UmbrellaException;
} }

3
documents/src/main/java/de/srsoftware/umbrella/documents/model/Customer.java → core/src/main/java/de/srsoftware/umbrella/core/model/Customer.java

@ -1,9 +1,8 @@
/* © SRSoftware 2025 */ /* © 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.Constants.*;
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingFieldException; 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.tools.Mappable;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException; import de.srsoftware.umbrella.core.exceptions.UmbrellaException;

4
documents/src/main/java/de/srsoftware/umbrella/documents/model/Document.java → core/src/main/java/de/srsoftware/umbrella/core/model/Document.java

@ -1,11 +1,9 @@
/* © SRSoftware 2025 */ /* © 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.Constants.*;
import static de.srsoftware.umbrella.core.ResponseCode.HTTP_UNPROCESSABLE; import static de.srsoftware.umbrella.core.ResponseCode.HTTP_UNPROCESSABLE;
import static de.srsoftware.umbrella.core.Util.mapMarkdown; 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 static java.util.Optional.empty;
import de.srsoftware.tools.Mappable; import de.srsoftware.tools.Mappable;

13
items/src/main/java/de/srsoftware/umbrella/items/Item.java → core/src/main/java/de/srsoftware/umbrella/core/model/Item.java

@ -1,10 +1,9 @@
/* © SRSoftware 2025 */ /* © 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.*;
import static de.srsoftware.umbrella.core.Constants.CODE; import static de.srsoftware.umbrella.core.Constants.CODE;
import static de.srsoftware.umbrella.core.Util.mapMarkdown; import static de.srsoftware.umbrella.core.Util.mapMarkdown;
import static de.srsoftware.umbrella.items.Constants.*;
import de.srsoftware.tools.Mappable; import de.srsoftware.tools.Mappable;
import java.sql.ResultSet; 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 { public static Item of(ResultSet rs) throws SQLException {
var id = rs.getLong(ID); var id = rs.getLong(ID);
var companyId = rs.getLong(COMPANY_ID); var companyId = rs.getLong(COMPANY_ID);
var code = rs.getString(CODE); var code = rs.getString(CODE);
var name = rs.getString(NAME); var name = rs.getString(NAME);
var desc = rs.getString(DESCRIPTION); var desc = rs.getString(DESCRIPTION);
var unit = rs.getString(UNIT); var unit = rs.getString(UNIT);
var unitPrice = rs.getLong(UNIT_PRICE); 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); return new Item(id,companyId,code,name,desc,unit,unitPrice,tax);
} }

3
documents/src/main/java/de/srsoftware/umbrella/documents/model/Position.java → core/src/main/java/de/srsoftware/umbrella/core/model/Position.java

@ -1,10 +1,9 @@
/* © SRSoftware 2025 */ /* © 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.Constants.*;
import static de.srsoftware.umbrella.core.Util.mapMarkdown; import static de.srsoftware.umbrella.core.Util.mapMarkdown;
import static de.srsoftware.umbrella.documents.Constants.*;
import de.srsoftware.tools.Mappable; import de.srsoftware.tools.Mappable;
import java.util.*; import java.util.*;

7
documents/src/main/java/de/srsoftware/umbrella/documents/model/PositionList.java → core/src/main/java/de/srsoftware/umbrella/core/model/PositionList.java

@ -1,8 +1,7 @@
/* © SRSoftware 2025 */ /* © 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.Constants.*;
import static de.srsoftware.umbrella.documents.Constants.*;
import de.srsoftware.tools.Pair; import de.srsoftware.tools.Pair;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException; import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
@ -20,8 +19,8 @@ public class PositionList extends HashMap<Integer,Position> {
} }
public Position addItem(JSONObject item) { public Position addItem(JSONObject item) {
var itemCode = item.getString(FIELD_CODE); var itemCode = item.getString(CODE);
var unit = item.getString(FIELD_UNIT); var unit = item.getString(UNIT);
var name = item.getString(NAME); var name = item.getString(NAME);
var description = item.getString(DESCRIPTION); var description = item.getString(DESCRIPTION);
var unitPrice = item.getLong(FIELD_UNIT_PRICE); var unitPrice = item.getLong(FIELD_UNIT_PRICE);

3
documents/src/main/java/de/srsoftware/umbrella/documents/model/Sender.java → core/src/main/java/de/srsoftware/umbrella/core/model/Sender.java

@ -1,9 +1,8 @@
/* © SRSoftware 2025 */ /* © 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.Constants.*;
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingFieldException; import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingFieldException;
import static de.srsoftware.umbrella.documents.Constants.*;
import de.srsoftware.tools.Mappable; import de.srsoftware.tools.Mappable;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException; import de.srsoftware.umbrella.core.exceptions.UmbrellaException;

5
documents/src/main/java/de/srsoftware/umbrella/documents/model/Template.java → core/src/main/java/de/srsoftware/umbrella/core/model/Template.java

@ -1,8 +1,7 @@
/* © SRSoftware 2025 */ /* © 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.Constants.*;
import static de.srsoftware.umbrella.documents.Constants.FIELD_COMPANY;
import de.srsoftware.tools.Mappable; import de.srsoftware.tools.Mappable;
import java.sql.ResultSet; import java.sql.ResultSet;
@ -17,6 +16,6 @@ public record Template(long id, long company, String name, byte[] data) implemen
@Override @Override
public Map<String, Object> toMap() { public Map<String, Object> toMap() {
return Map.of(ID,id,FIELD_COMPANY,company, NAME,name); return Map.of(ID,id, FIELD_COMPANY,company, NAME,name);
} }
} }

2
documents/src/main/java/de/srsoftware/umbrella/documents/model/Type.java → core/src/main/java/de/srsoftware/umbrella/core/model/Type.java

@ -1,5 +1,5 @@
/* © SRSoftware 2025 */ /* © SRSoftware 2025 */
package de.srsoftware.umbrella.documents.model; package de.srsoftware.umbrella.core.model;

47
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 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 MOVE = "move";
public static final String PATH_ADD_ITEM = "add_item"; public static final String PATH_ADD_ITEM = "add_item";

23
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.tools.Strings.escapeHtmlEntities;
import static de.srsoftware.umbrella.core.ConnectionProvider.connect; import static de.srsoftware.umbrella.core.ConnectionProvider.connect;
import static de.srsoftware.umbrella.core.Constants.*; 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.LIST;
import static de.srsoftware.umbrella.core.Paths.STATES; import static de.srsoftware.umbrella.core.Paths.STATES;
import static de.srsoftware.umbrella.core.ResponseCode.HTTP_UNPROCESSABLE; import static de.srsoftware.umbrella.core.ResponseCode.HTTP_UNPROCESSABLE;
import static de.srsoftware.umbrella.core.Util.request; import static de.srsoftware.umbrella.core.Util.request;
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.*; 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.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.DEBUG;
import static java.lang.System.Logger.Level.WARNING; import static java.lang.System.Logger.Level.WARNING;
import static java.net.HttpURLConnection.*; 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.api.*;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException; import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.core.model.*; 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.*;
import de.srsoftware.umbrella.documents.model.Customer;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.text.MessageFormat; import java.text.MessageFormat;
@ -400,6 +409,11 @@ public class DocumentApi extends BaseHandler implements DocumentService {
return new JSONArray(s); return new JSONArray(s);
} }
public Map<Long, Document> list(long companyId) throws UmbrellaException{
return db.listDocs(companyId);
}
private boolean listCompaniesDocuments(HttpExchange ex, UmbrellaUser user, Token token) throws UmbrellaException { private boolean listCompaniesDocuments(HttpExchange ex, UmbrellaUser user, Token token) throws UmbrellaException {
try { try {
var json = json(ex); var json = json(ex);
@ -407,7 +421,7 @@ public class DocumentApi extends BaseHandler implements DocumentService {
long companyId = json.getLong(COMPANY); long companyId = json.getLong(COMPANY);
var company = modules.companyService().get(companyId); var company = modules.companyService().get(companyId);
if (!modules.companyService().membership(companyId,user.id())) throw forbidden("You are mot a member of company {0}",company); 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<Long,Object>(); var map = new HashMap<Long,Object>();
for (var entry : docs.entrySet()) map.put(entry.getKey(),entry.getValue().summary()); for (var entry : docs.entrySet()) map.put(entry.getKey(),entry.getValue().summary());
return sendContent(ex,new JSONObject(map).toString(2)); 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 { private boolean patchDocument(long docId, UmbrellaUser user, HttpExchange ex) throws UmbrellaException, IOException {
var doc = getDocument(docId,user).a; var doc = getDocument(docId,user).a;
doc.patch(json(ex)); doc.patch(json(ex));

3
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.tools.Pair;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException; 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 de.srsoftware.umbrella.documents.model.*;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;

7
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.*;
import static de.srsoftware.tools.jdbc.Query.SelectQuery.ALL; import static de.srsoftware.tools.jdbc.Query.SelectQuery.ALL;
import static de.srsoftware.umbrella.core.Constants.*; 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.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.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.lang.System.Logger.Level.*;
import static java.text.MessageFormat.format; import static java.text.MessageFormat.format;
import static java.time.ZoneOffset.UTC; 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.Pair;
import de.srsoftware.tools.jdbc.Query; import de.srsoftware.tools.jdbc.Query;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException; 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.*;
import de.srsoftware.umbrella.documents.model.Type;
import java.sql.Connection; import java.sql.Connection;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;

2
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.tools.MimeType.*;
import static de.srsoftware.umbrella.core.Constants.ERROR_MISSING_FIELD; 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.core.Constants.USER;
import static de.srsoftware.umbrella.documents.Constants.FIELD_PRICE_FORMAT;
import static java.lang.System.Logger.Level.TRACE; import static java.lang.System.Logger.Level.TRACE;
import static java.nio.charset.StandardCharsets.UTF_8; import static java.nio.charset.StandardCharsets.UTF_8;
import static java.text.MessageFormat.format; import static java.text.MessageFormat.format;

1
documents/src/main/java/de/srsoftware/umbrella/documents/model/CompanySettings.java

@ -2,6 +2,7 @@
package de.srsoftware.umbrella.documents.model; package de.srsoftware.umbrella.documents.model;
import static de.srsoftware.tools.Optionals.emptyIfNull; import static de.srsoftware.tools.Optionals.emptyIfNull;
import static de.srsoftware.umbrella.core.Constants.*;
import static de.srsoftware.umbrella.documents.Constants.*; import static de.srsoftware.umbrella.documents.Constants.*;
import java.sql.ResultSet; import java.sql.ResultSet;

1
documents/src/main/java/de/srsoftware/umbrella/documents/model/CustomerSettings.java

@ -2,6 +2,7 @@
package de.srsoftware.umbrella.documents.model; package de.srsoftware.umbrella.documents.model;
import static de.srsoftware.umbrella.core.Constants.*;
import static de.srsoftware.umbrella.documents.Constants.*; import static de.srsoftware.umbrella.documents.Constants.*;
import de.srsoftware.tools.Mappable; import de.srsoftware.tools.Mappable;

1
frontend/src/routes/company/Index.svelte

@ -41,6 +41,7 @@
} else { } else {
error = await resp.text(); error = await resp.text();
} }
return false;
} }
async function loadCompanies(){ async function loadCompanies(){

3
items/src/main/java/de/srsoftware/umbrella/items/Constants.java

@ -5,7 +5,4 @@ public class Constants {
private Constants(){} private Constants(){}
public static final String CONFIG_DATABASE = "umbrella.modules.items.database"; public static final String CONFIG_DATABASE = "umbrella.modules.items.database";
public static final String TABLE_ITEMS = "items"; 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";
} }

9
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.ModuleRegistry;
import de.srsoftware.umbrella.core.api.ItemService; import de.srsoftware.umbrella.core.api.ItemService;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException; 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.Token;
import de.srsoftware.umbrella.core.model.UmbrellaUser; import de.srsoftware.umbrella.core.model.UmbrellaUser;
import java.io.IOException; import java.io.IOException;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.Optional; import java.util.Optional;
@ -50,13 +52,18 @@ public class ItemApi extends BaseHandler implements ItemService {
} }
} }
@Override
public Collection<Item> list(long companyId) throws UmbrellaException {
return itemDb.list(companyId);
}
private boolean listItems(HttpExchange ex, UmbrellaUser user) throws IOException, UmbrellaException { private boolean listItems(HttpExchange ex, UmbrellaUser user) throws IOException, UmbrellaException {
var json = json(ex); var json = json(ex);
if (!(json.has(COMPANY_ID) && json.get(COMPANY_ID) instanceof Number cid)) throw missingFieldException(COMPANY_ID); if (!(json.has(COMPANY_ID) && json.get(COMPANY_ID) instanceof Number cid)) throw missingFieldException(COMPANY_ID);
var companyId = cid.longValue(); var companyId = cid.longValue();
var company = registry.companyService().get(companyId); 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()); 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() .stream()
.map(Item::toMap) .map(Item::toMap)
.map(HashMap::new) .map(HashMap::new)

1
items/src/main/java/de/srsoftware/umbrella/items/ItemDb.java

@ -2,6 +2,7 @@
package de.srsoftware.umbrella.items; package de.srsoftware.umbrella.items;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException; import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.core.model.Item;
import java.util.Collection; import java.util.Collection;
public interface ItemDb { public interface ItemDb {

1
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 static de.srsoftware.umbrella.items.Constants.TABLE_ITEMS;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException; import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.core.model.Item;
import java.sql.Connection; import java.sql.Connection;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Collection; import java.util.Collection;

Loading…
Cancel
Save