Compare commits

..

7 Commits

Author SHA1 Message Date
StephanRichter 1d7b47aaa0 made project page the entrypoint
Build Docker Image / Docker-Build (push) Successful in 2m39s
Build Docker Image / Clean-Registry (push) Successful in 5s
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
2026-06-17 15:07:44 +02:00
StephanRichter f49b44cd56 Merge branch 'bugfix/pipeline'
Build Docker Image / Clean-Registry (push) Successful in 6s
Build Docker Image / Docker-Build (push) Failing after 14m18s
2026-06-17 09:21:55 +02:00
StephanRichter 60777feaa3 dropped call to make.eldorado.srsoftware.de
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
2026-06-17 09:18:03 +02:00
StephanRichter bcc1182dea improved time table: now updating started time when starting new time track
Build Docker Image / Docker-Build (push) Successful in 2m25s
Build Docker Image / Clean-Registry (push) Failing after 10m18s
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
2026-06-17 09:14:57 +02:00
StephanRichter 4a83bb6bee overhauled account index page:
Build Docker Image / Docker-Build (push) Successful in 2m34s
Build Docker Image / Clean-Registry (push) Successful in 5s
- dropped ids from display
- ordered accounts by name

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
2026-06-16 08:32:06 +02:00
StephanRichter 0879b53a88 improved translations
Build Docker Image / Clean-Registry (push) Successful in 5s
Build Docker Image / Docker-Build (push) Failing after 17m15s
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
2026-06-16 08:26:47 +02:00
StephanRichter 6aa858e299 improved range of states of tasks in easylist
Build Docker Image / Docker-Build (push) Successful in 3m47s
Build Docker Image / Clean-Registry (push) Successful in 6s
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
2026-06-08 10:53:05 +02:00
37 changed files with 40 additions and 92 deletions
-5
View File
@@ -41,11 +41,6 @@ jobs:
docker push ${{ secrets.REGISTRY_PATH }}/umbrella:${{ gitea.ref_name }}
docker push ${{ secrets.REGISTRY_PATH }}/umbrella:$TAG
- name: Restart umbrella.srsoftware.de
if: github.ref == 'refs/heads/dev'
run: |
curl -X POST -H "Authorization: Bearer ${{ secrets.ELDORADO_MAKE_BEARER }}" -d umbrella_25_start https://make.eldorado.srsoftware.de/launch
Clean-Registry:
runs-on: ubuntu-latest
steps:
@@ -14,6 +14,7 @@ import de.srsoftware.umbrella.bookmarks.BookmarkApi;
import de.srsoftware.umbrella.company.CompanyModule;
import de.srsoftware.umbrella.contact.ContactModule;
import de.srsoftware.umbrella.core.SettingsService;
import de.srsoftware.umbrella.core.Util;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.documents.DocumentApi;
import de.srsoftware.umbrella.files.FileModule;
@@ -33,6 +34,7 @@ import de.srsoftware.umbrella.translations.Translations;
import de.srsoftware.umbrella.user.UserModule;
import de.srsoftware.umbrella.web.WebHandler;
import de.srsoftware.umbrella.wiki.WikiModule;
import java.io.File;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.concurrent.Executors;
@@ -15,6 +15,7 @@ import static java.lang.System.Logger.Level.*;
import static java.lang.System.Logger.Level.WARNING;
import static java.nio.charset.StandardCharsets.UTF_8;
import com.xrbpowered.jparsedown.JParsedown;
import de.srsoftware.tools.Mappable;
import de.srsoftware.tools.Query;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
@@ -31,6 +32,7 @@ import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
import org.json.JSONObject;
public class Util {
-1
View File
@@ -1 +0,0 @@
*.db-journal
Binary file not shown.
Binary file not shown.
Binary file not shown.
-74
View File
@@ -1,74 +0,0 @@
{
"umbrella": {
"base_url": "http://127.0.0.1:5173",
"logging": {
"rootLevel": "INFO"
},
"http": {
"port": 8080
},
"threads": 16,
"modules": {
"accounting": {
"database": "demodata/accounting.db"
},
"bookmark": {
"database": "demodata/bookmark.db"
},
"company": {
"database": "demodata/company.db"
},
"contact": {
"database": "demodata/contacts.db"
},
"document": {
"database": "demodata/documents.db",
"templates": "demodata/templates"
},
"files": {
"database": "demodata/files.db",
"base_dir": "demodata/filestore"
},
"journal": {
"database": "demodata/journal.db"
},
"message": {
"database": "demodata/message.db",
"smtp": {
"from": "umbrella@example.com",
"host": "none",
"pass": "none",
"port": 587,
"user": "none"
}
},
"notes": {
"database": "demodata/notes.db"
},
"poll": {
"database": "demodata/poll.db"
},
"project": {
"database": "demodata/projects.db"
},
"stock": {
"database": "demodata/stock.db"
},
"tags": {
"database": "demodata/tags.db"
},
"task": {
"database": "demodata/tasks.db"
},
"time": {
"database": "demodata/times.db"
},
"user": {
"database": "demodata/users.db"
},
"wiki": {
"database": "demodata/wiki.db"
}
}
}
}
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -90,7 +90,7 @@
{#if messages.warning}
<span class="warn">{@html messages.warning}</span>
{/if}
<Route path="/" component={User} />
<Route path="/" component={ProjectList} />
<Route path="/account/:id" component={Account} />
<Route path="/accounting" component={Accounts} />
<Route path="/accounting/new" component={NewAccount} />
+1 -1
View File
@@ -115,7 +115,7 @@
function select(index){
candidate = candidates[index];
<disableDropdown></disableDropdown>();
disableDropdown();
onSelect(candidate);
}
+2 -2
View File
@@ -44,9 +44,9 @@
</span>
<ul>
{#each accounts as account (account.id)}
{#each accounts.toSorted((a,b) => a.name.localeCompare(b.name)) as account (account.id)}
<li>
<a {onclick} href="/account/{account.id}">{account.name} ({account.id})</a>
<a {onclick} href="/account/{account.id}">{account.name}</a>
</li>
{/each}
</ul>
+1 -1
View File
@@ -137,7 +137,7 @@
<legend>{t('state_open')}</legend>
{#if sorted}
{#each sorted as task}
{#if task.status == 20 && match(task)}
{#if task.status < 60 && task.status >= 20 && match(task)}
<div href={`/task/${task.id}/view`} title={task.description.source} task_id={task.id} {onclick} {oncontextmenu} {ontouchstart} {ontouchend} onmousedown={ontouchstart} onmouseup={ontouchend} >
{task.name}
</div>
+11 -3
View File
@@ -1,7 +1,7 @@
<script>
import { onMount } from 'svelte';
import { useTinyRouter } from 'svelte-tiny-router';
import { api, drop, patch, post } from '../../urls.svelte.js';
import { api, drop, get, patch, post } from '../../urls.svelte.js';
import { error, yikes } from '../../warn.svelte';
import { t } from '../../translations.svelte.js';
import { timetrack } from '../../user.svelte.js';
@@ -41,10 +41,18 @@
});
async function addTime(task_id){
const url = api(`time/track_task/${task_id}`);
const resp = await post(url,now()); // create new time or return time with assigned tasks
let url = api(`time/track_task/${task_id}`);
let resp = await post(url,now()); // create new time or return time with assigned tasks
if (resp.ok) {
const track = await resp.json();
if (timetrack.running){
url = api(`time/${timetrack.running.id}`);
resp = await get(url);
if (resp.ok){
let previous = await resp.json();
times[previous.id] = previous;
}
}
timetrack.running = track;
} else {
error(resp);
@@ -14,8 +14,11 @@ import de.srsoftware.configuration.Configuration;
import de.srsoftware.tools.Path;
import de.srsoftware.umbrella.core.BaseHandler;
import de.srsoftware.umbrella.core.ModuleRegistry;
import de.srsoftware.umbrella.core.Util;
import de.srsoftware.umbrella.core.api.MarkdownService;
import de.srsoftware.umbrella.core.constants.Field;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -79,8 +79,15 @@ public class TimeModule extends BaseHandler implements TimeService {
if (user.isEmpty()) return unauthorized(ex);
var head = path.pop();
return switch (head) {
case STARTED -> getStartedTime(user.get(),ex);
case null, default -> super.doGet(path,ex);
case STARTED -> getStartedTime(user.get(),ex);
case null -> super.doGet(path,ex);
default -> {
try {
yield sendContent(ex,timeDb.load(Long.parseLong(head)));
} catch (NumberFormatException ignored) {
yield super.doGet(path,ex);
}
}
};
} catch (UmbrellaException e){
return send(ex,e);
+3
View File
@@ -17,6 +17,7 @@
"abort": "abbrechen",
"account": "Konto",
"accounting": "Konten",
"account name": "Konto-Name",
"accounts": "Konten",
"actions": "Aktionen",
"add_login_service": "Login-Service anlegen",
@@ -75,6 +76,7 @@
"CREATE_USERS": "Nutzer anlegen",
"create_pdf": "PDF erzeugen",
"created_with": "erzeugt mit {tool} von {producer}",
"currency": "Währung",
"customer": "Kunde",
"customer_address": "Adresse",
"customer_email": "Emailadresse des Kunden",
@@ -162,6 +164,7 @@
"files": "Dateien",
"filter": "Filter",
"filter by tags": "Nach Tags filtern",
"first_transaction": "erste Transaktion",
"footer": "Fuß-Text",
"foreign_id": "externe Kennung",
"forgot_pass" : "Password vergessen?",
+5 -2
View File
@@ -17,6 +17,7 @@
"abort": "abort",
"account": "account",
"accounting": "accounting",
"account name": "Account name",
"accounts": "accounts",
"actions": "actions",
"add_login_service": "add login service",
@@ -75,6 +76,7 @@
"CREATE_USERS": "create users",
"create_pdf": "create PDF",
"created_with": "created with {tool} by {producer}",
"currency": "Currency",
"customer": "customer",
"customer_address": "address",
"customer_email": "customer email address",
@@ -162,6 +164,7 @@
"files": "files",
"filter": "filter",
"filter by tags": "filter by tags",
"first_transaction": "first transaction",
"footer": "footer",
"foreign_id": "external ID",
"forgot_pass" : "forgot password?",
@@ -459,11 +462,11 @@
"wiki_pages": "wiki pages",
"year": "year",
"You have been added to the new project '{project}', created by {user}:\n\n{body}": "You have been added to the new project '{project}', created by {user}:\n\n{body}",
"You can view/edit this transaction at {base_url}/account/{id}": "Du kannst diese transaktion unter {base_url}/account/{id} ansehen",
"You can view/edit this transaction at {base_url}/account/{id}": "You can view/edit this transaction at {base_url}/account/{id}",
"You can view/edit this project at {base_url}/project/{id}/view": "You can view/edit this project at {base_url}/project/{id}/view",
"You can view/edit this task at {base_url}/task/{id}/view": "You can view/edit this task at {base_url}/task/{id}/view",
"You can view/edit this wiki page at {base_url}/wiki/{id}/view": "You can view/edit this wiki page at {base_url}/wiki/{id}/view",
"You have been added to the new project '{project}', created by {user}:\n\n{body}": "You have been added to the new project '{project}', created by {user}:\n\n{body}",
"You may change your notification settings at {base_url}/message/settings": "You may change your notification settings at {base_url}/message/settings .",
"Your token to create a new password" : "Your token to create a new password",
"your_profile": "your profile"