Historie: Task-Notizen + Link sichtbar, Navigation zu Tagen mit Einträgen

- Notizfeld pro Task in der Reflexion (optional, jeder Status) — nutzt das
  bestehende dropReason-Feld (Limit 200->500). Wird in der Historie bei JEDEM
  Status angezeigt (bisher nur bei "verworfen").
- Optionaler Tages-Link wird in der Historie jetzt angezeigt.
- Historie-Pfeile springen zum naechsten/vorherigen Tag MIT Eintraegen statt
  starr ueber Werktage — Wochenend-Arbeit (z. B. Sa 6.6.) ist nun erreichbar.
  Default-Tag = juengster Tag vor heute mit Eintrag.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Raffael SheikhandClaude Opus 4.8 committed 2026-06-07 13:04:52 +02:00
1 parent 6e7a910ed3
commit 6acf9977ec
4 files changed
+116 -56

No files matched your search

+33 -6
View File
@@ -1,12 +1,11 @@
import { TRPCError } from '@trpc/server';
import { and, eq, gte, isNull, lt, lte, asc, desc, inArray } from 'drizzle-orm';
import { and, eq, gt, gte, isNull, lt, lte, asc, desc, inArray } from 'drizzle-orm';
import { dayEntry, todo, blocker, user, type Db, type DayEntry, type Todo } from '@cockpit/db';
import { DayEntrySchemas } from '@cockpit/shared';
import { router, protectedProcedure } from '../trpc.js';
import {
todayIso,
previousWerktag,
nextWerktag,
addCalendarDays,
workdayCutoffMs,
isWorkdaySealed,
@@ -618,7 +617,18 @@ export const dayEntryRouter = router({
.input(DayEntrySchemas.historyForDateInput)
.query(async ({ ctx, input }) => {
const today = todayIso();
const date = input.date ?? previousWerktag(today);
// Default-Tag = der jüngste Tag VOR heute, an dem es überhaupt Einträge gibt
// (nicht starr der vorige Werktag — sonst sieht man Wochenend-Arbeit nicht).
const fallbackDate =
(
await ctx.db
.select({ d: dayEntry.date })
.from(dayEntry)
.where(lt(dayEntry.date, today))
.orderBy(desc(dayEntry.date))
.limit(1)
)[0]?.d ?? previousWerktag(today);
const date = input.date ?? fallbackDate;
const isToday = date === today;
const entries = await ctx.db.select().from(dayEntry).where(eq(dayEntry.date, date));
@@ -669,11 +679,28 @@ export const dayEntryRouter = router({
.map((u) => u.name)
.sort((a, b) => a.localeCompare(b));
const nw = nextWerktag(date);
// Pfeil-Navigation springt zum nächsten/vorherigen Tag MIT Einträgen
// (überspringt leere Tage, erreicht aber Wochenend-Arbeit).
const prevRow = (
await ctx.db
.select({ d: dayEntry.date })
.from(dayEntry)
.where(lt(dayEntry.date, date))
.orderBy(desc(dayEntry.date))
.limit(1)
)[0];
const nextRow = (
await ctx.db
.select({ d: dayEntry.date })
.from(dayEntry)
.where(and(gt(dayEntry.date, date), lte(dayEntry.date, today)))
.orderBy(asc(dayEntry.date))
.limit(1)
)[0];
return {
date,
prevDate: previousWerktag(date),
nextDate: nw < today ? nw : null,
prevDate: prevRow?.d ?? null,
nextDate: nextRow?.d ?? null,
entries: list,
ohneEintrag,
};