completed company deletion implementation
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -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;
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
@@ -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.*;
|
||||||
@@ -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);
|
||||||
@@ -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;
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/* © SRSoftware 2025 */
|
/* © SRSoftware 2025 */
|
||||||
package de.srsoftware.umbrella.documents.model;
|
package de.srsoftware.umbrella.core.model;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -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";
|
||||||
|
|||||||
@@ -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,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,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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -41,6 +41,7 @@
|
|||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error = await resp.text();
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadCompanies(){
|
async function loadCompanies(){
|
||||||
|
|||||||
@@ -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";
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user