diff --git a/accounting/src/main/java/de/srsoftware/umbrella/accounting/AccountingModule.java b/accounting/src/main/java/de/srsoftware/umbrella/accounting/AccountingModule.java index 0fe66115..b0b115eb 100644 --- a/accounting/src/main/java/de/srsoftware/umbrella/accounting/AccountingModule.java +++ b/accounting/src/main/java/de/srsoftware/umbrella/accounting/AccountingModule.java @@ -13,10 +13,12 @@ import de.srsoftware.umbrella.core.exceptions.UmbrellaException; import de.srsoftware.umbrella.core.model.*; import org.json.JSONObject; +import static de.srsoftware.umbrella.core.constants.Path.SOURCES; +import static de.srsoftware.umbrella.core.constants.Path.DESTINATIONS; + import java.io.IOException; import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.ZoneOffset; import java.util.HashMap; import java.util.Map; import java.util.Optional; @@ -72,6 +74,8 @@ public class AccountingModule extends BaseHandler implements AccountingService { var head = path.pop(); return switch (head) { case null -> postEntry(user.get(),ex); + case SOURCES -> postSearchSources(user.get(),ex); + case DESTINATIONS -> postSearchDestinations(user.get(),ex); default -> super.doPost(path,ex); }; } catch (UmbrellaException e){ @@ -170,4 +174,18 @@ public class AccountingModule extends BaseHandler implements AccountingService { return sendContent(ex,newAccount != null ? newAccount : transaction); } + + public boolean postSearchDestinations(UmbrellaUser user, HttpExchange ex) throws IOException { + var key = body(ex); + var users = userService().search(key); + // TODO: search known transactions for possible destinations + return sendContent(ex,mapValues(users)); + } + + public boolean postSearchSources(UmbrellaUser user, HttpExchange ex) throws IOException { + var key = body(ex); + var users = userService().search(key); + // TODO: search known transactions for possible sources + return sendContent(ex,mapValues(users)); + } } diff --git a/core/src/main/java/de/srsoftware/umbrella/core/api/UserService.java b/core/src/main/java/de/srsoftware/umbrella/core/api/UserService.java index ae5769e4..e8073262 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/api/UserService.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/api/UserService.java @@ -22,4 +22,5 @@ public interface UserService { Optional loadUser(Optional sessionToken) throws UmbrellaException; Optional loadUser(HttpExchange ex) throws UmbrellaException; Optional refreshSession(HttpExchange ex); + Map search(String key); } diff --git a/core/src/main/java/de/srsoftware/umbrella/core/constants/Path.java b/core/src/main/java/de/srsoftware/umbrella/core/constants/Path.java index 5a0f7bb6..399c84c2 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/constants/Path.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/constants/Path.java @@ -13,6 +13,8 @@ public class Path { public static final String COMPANY = "company"; public static final String CONNECTED = "connected"; + public static final String DESTINATIONS = "destinations"; + public static final String EVALUATE = "evaluate"; public static final String ITEM = "item"; @@ -44,6 +46,7 @@ public class Path { public static final String SEARCH = "search"; public static final String SELECT = "select"; public static final String SETTINGS = "settings"; + public static final String SOURCES = "sources"; public static final String STATES = "states"; public static final String STARTED = "started"; public static final String STATE = "state"; diff --git a/frontend/src/routes/accounting/add_entry.svelte b/frontend/src/routes/accounting/add_entry.svelte index a45317ff..a1215f22 100644 --- a/frontend/src/routes/accounting/add_entry.svelte +++ b/frontend/src/routes/accounting/add_entry.svelte @@ -27,8 +27,7 @@ }); let router = useTinyRouter(); - async function getUsers(text){ - var url = api('user/search'); + async function getTerminal(text,url){ var res = await post(url,text); if (res.ok){ yikes(); @@ -40,6 +39,16 @@ } } + async function getDestinations(text){ + var url = api('accounting/destinations'); + return await getTerminal(text,url); + } + + async function getSources(text){ + var url = api('accounting/sources'); + return await getTerminal(text,url); + } + async function save(){ let data = { ...entry, @@ -68,24 +77,32 @@
{#if new_account} {t('create_new_object',{object:t('account')})} + {t('account name')} - - + + + {t('currency')} - + + +
+ {t('first transaction')} {:else} - {t('add_object',{object:t('entry')})} + {t('add_object',{object:t('transaction')})} + {/if} {t('date')} - + + + {t('source')} - + {t('destination')} - + {t('amount')} @@ -100,14 +117,3 @@
-
-
-{JSON.stringify(entry,null,2)}
-
-
- -
-
-{JSON.stringify(user,null,2)}
-
-
diff --git a/frontend/src/routes/accounting/index.svelte b/frontend/src/routes/accounting/index.svelte index e69022eb..e4184537 100644 --- a/frontend/src/routes/accounting/index.svelte +++ b/frontend/src/routes/accounting/index.svelte @@ -33,7 +33,6 @@
- {t('accounts')} @@ -47,4 +46,6 @@ {/each} + {t('accounts')} +
\ No newline at end of file diff --git a/user/src/main/java/de/srsoftware/umbrella/user/UserModule.java b/user/src/main/java/de/srsoftware/umbrella/user/UserModule.java index e836000d..2e895e95 100644 --- a/user/src/main/java/de/srsoftware/umbrella/user/UserModule.java +++ b/user/src/main/java/de/srsoftware/umbrella/user/UserModule.java @@ -555,7 +555,7 @@ public class UserModule extends BaseHandler implements UserService { var requestingUser = loadUser(ex); if (!(requestingUser.isPresent() && requestingUser.get() instanceof DbUser dbUser)) return unauthorized(ex); var key = body(ex); - return sendContent(ex,mapValues(users.search(key))); + return sendContent(ex,mapValues(search(key))); } @Override @@ -576,6 +576,11 @@ public class UserModule extends BaseHandler implements UserService { return score; } + @Override + public Map search(String key) { + return users.search(key); + } + private boolean update(HttpExchange ex, DbUser user, JSONObject json) throws UmbrellaException, IOException { var id = user.id(); var name = json.has(NAME) && json.get(NAME) instanceof String s && !s.isBlank() ? s : user.name();