From 121453937ca5edd6b599a51e124ff20a1a1a83bc Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Mon, 29 Sep 2025 12:03:39 +0200 Subject: [PATCH] implemented user column in time tracking list --- frontend/src/routes/time/Index.svelte | 8 +++++++- .../java/de/srsoftware/umbrella/time/TimeModule.java | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/frontend/src/routes/time/Index.svelte b/frontend/src/routes/time/Index.svelte index ec29bf1..89040c1 100644 --- a/frontend/src/routes/time/Index.svelte +++ b/frontend/src/routes/time/Index.svelte @@ -26,6 +26,7 @@ let ranges = {}; let timeMap = $derived.by(calcYearMap); let selectionSum = $derived(sortedTimes.filter(time => selected[time.id]).map(time => time.duration).reduce((acc, a) => acc + a, 0)); + let users = null; async function addTime(task_id){ const url = api(`time/track_task/${task_id}`); @@ -107,6 +108,7 @@ tasks = json.tasks; projects = json.projects; docLinks = json.documents; + users = json.users; } else { error(resp); } @@ -207,6 +209,7 @@ {t('month')} {t('start')}{t('end')} {t('duration')} + {t('user')} {t('subject')} {t('projects')} / {t('tasks')} {t('state')} @@ -232,7 +235,7 @@ {:else} toggleSelect(time.id)}> {time.start}{#if time.end_time}{time.start.startsWith(time.end_date)?time.end.substring(11):time.end}{/if} - {#if line>0 && Math.abs(sortedTimes[line-1].start_time - time.end_time)<100} + {#if line>0 && (sortedTimes[line-1].user_id == time.user_id) && (Math.abs(sortedTimes[line-1].start_time - time.end_time)<100)} {/if} @@ -241,6 +244,9 @@ {time.duration.toFixed(3)} h {/if} + + {users[time.user_id].name} + {detail = time.id}}> {time.subject} diff --git a/time/src/main/java/de/srsoftware/umbrella/time/TimeModule.java b/time/src/main/java/de/srsoftware/umbrella/time/TimeModule.java index 71f20ea..a964216 100644 --- a/time/src/main/java/de/srsoftware/umbrella/time/TimeModule.java +++ b/time/src/main/java/de/srsoftware/umbrella/time/TimeModule.java @@ -196,14 +196,21 @@ public class TimeModule extends BaseHandler implements TimeService { boolean showClosed = false; var times = timeDb.listTimes(taskIds, showClosed); times.putAll(timeDb.listUserTimes(user.id(), showClosed)); - taskIds = times.values().stream().map(Time::taskIds).flatMap(Collection::stream).collect(toSet()); + taskIds.clear(); + var userIds = new HashSet(); + times.values().forEach(time -> { + taskIds.addAll(time.taskIds()); + userIds.add(time.userId()); + }); var tasks = taskService().load(taskIds); + var users = userService().list(null,null,userIds); var result = new HashMap(); var docList = documentService().docsReferencedByTimes(times.keySet()); result.put(DOCUMENTS,docList); result.put(TIMES,mapValues(times)); result.put(TASKS,mapValues(tasks)); result.put(PROJECTS,mapValues(projects)); + result.put(USERS,mapValues(users)); return sendContent(ex,result); }