Commit Graph

31 Commits

Author SHA1 Message Date
7dd3873148 Merge branch 'main' into feature/soft-delete 2026-02-23 17:59:29 +01:00
0c0fbf42ef updates icons 2026-02-23 17:57:25 +01:00
simon.franken
ddb0926dba Implement soft-delete for client targets and balance corrections
Deleting a target or correction sets deletedAt instead of hard-deleting.
Creating a target for a user+client that has a soft-deleted record
reactivates it (clears deletedAt, applies new weeklyHours/startDate)
rather than failing the unique constraint. All reads filter deletedAt = null
on the target, its corrections, and the parent client.
2026-02-23 15:48:07 +01:00
simon.franken
1a7d13d5b9 Implement soft-delete for clients, projects, and time entries
Replace hard deletes with deletedAt timestamp flags on all three entities.
Deleting a client or project only sets its own deletedAt; child records are
excluded implicitly by filtering on parent deletedAt in every read query.
Raw SQL statistics queries also filter out soft-deleted parents.
FK ON DELETE CASCADE removed from Project→Client and TimeEntry→Project.
2026-02-23 15:21:13 +01:00
simon.franken
685a311001 Add break time feature to time entries
- Add breakMinutes field to TimeEntry model and database migration
- Users can now add break duration (minutes) to time entries
- Break time is subtracted from total tracked duration
- Validation ensures break time cannot exceed total entry duration
- Statistics and client target balance calculations account for breaks
- Frontend UI includes break time input in TimeEntryFormModal
- Duration displays show break time deduction (e.g., '7h (−1h break)')
- Both project/client statistics and weekly balance calculations updated
2026-02-23 14:39:30 +01:00
simon.franken
3fa13e1428 Use icon.svg in Navbar and LoginPage instead of Clock icon 2026-02-23 10:55:33 +01:00
simon.franken
2e629d8017 Merge branch 'main' into feature/adjust-timer-start-time 2026-02-23 10:53:54 +01:00
simon.franken
6e0567d021 icon update 2026-02-23 10:53:39 +01:00
simon.franken
3ab39643dd Disable Stop button when no project is selected 2026-02-23 10:47:07 +01:00
simon.franken
e01e5e59df Remove cancel confirmation — discard timer immediately on click 2026-02-23 10:44:34 +01:00
simon.franken
06596dcee9 Add cancel (discard) timer feature
Allows users to discard a running timer without creating a time entry.
A trash icon in the timer widget reveals a confirmation step ('Discard / Keep')
to prevent accidental data loss. Backend exposes a new DELETE /api/timer
endpoint that simply deletes the ongoingTimer row.
2026-02-23 10:41:50 +01:00
simon.franken
7358fa6256 Add ability to manually adjust the running timer's start time
Allows users to retroactively correct the start time of an ongoing timer
without stopping it. A pencil icon in the timer widget opens an inline
time input pre-filled with the current start time; confirming sends the
new time to the backend which validates it is in the past before persisting.
2026-02-23 10:32:38 +01:00
4b0cfaa699 increases limit for corrections 2026-02-18 20:32:40 +01:00
658a70f3ac fix 2026-02-18 19:31:47 +01:00
simon.franken
408f49ba10 update 2026-02-18 16:23:44 +01:00
simon.franken
0f6e55302a update 2026-02-18 16:08:42 +01:00
simon.franken
f5c0a0b2f7 improvements 2026-02-18 15:26:36 +01:00
simon.franken
4cce62934e adds targets 2026-02-18 14:27:44 +01:00
simon.franken
a352318e8a adapts time format 2026-02-18 12:43:17 +01:00
simon.franken
f77e94f7b7 update time visualization 2026-02-18 10:53:15 +01:00
simon.franken
6a6a3ba00b refactoring 2026-02-18 10:26:15 +01:00
64fd134044 improvements 2026-02-16 19:54:15 +01:00
81b4a8ead2 small UI fix 2026-02-16 19:36:15 +01:00
c516a097a3 small adaptions 2026-02-16 19:28:23 +01:00
9206453394 adds statistics 2026-02-16 19:15:23 +01:00
2311cd8265 fix 2026-02-16 18:25:09 +01:00
simon.franken
fc06dac40e update 2026-02-16 17:12:47 +01:00
simon.franken
a9228d19c8 fix 2026-02-16 16:09:07 +01:00
simon.franken
d200254783 fix infinite redirect 2026-02-16 15:41:59 +01:00
simon.franken
d3b8df3deb fix 2026-02-16 11:01:07 +01:00
simon.franken
7d678c1c4d creates application 2026-02-16 10:15:27 +01:00