Let a day removed from a period stay removed

Taking one day out of a period the planner placed did nothing that
lasted: the period still asked for a full week, so the next sync put the
day straight back. The option was disabled rather than lying about it.

A removed day is now recorded as its own thing — no leave for this
parent, this child, this date — and the planner honours it on every
later sync. It is kept apart from the working-day overrides, which
answer a different question about the calendar rather than about the
plan.

The day belongs to the parent whose band was clicked, so removing one
parent's day leaves their partner's alone; where both parents were to be
off on one funding arrangement, the partner is simply funded on their
own instead. A removed day shortens what the period is asking for rather
than counting as a day the plan failed to find, so the advice about
closing a shortfall does not start arguing for a day nobody wants.

Nothing is removed without a way back: the toast undoes it, and the day
itself is marked in the calendar and offers to restore.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ei7gCZzdd751uZtPzb1Pep
This commit is contained in:
2026-09-19 16:05:17 +02:00
parent 6d92b87bf3
commit 8cfb9c82c6
39 changed files with 2362 additions and 31 deletions
+13 -2
View File
@@ -31,6 +31,7 @@ export const calendar = {
'calendar.weekdayWed': 'Wed',
'calendar.you': 'You',
'calendarDay.ariaWithEvents': '{date} with {count} event(s)',
'calendarDay.excludedAria': 'removed day — the planner skips it',
'calendarDay.klamdagAria': 'bridge day',
'calendarDay.overrideFreeAria': 'marked as a day off (exception)',
'calendarDay.overrideWorkingAria': 'marked as a working day (exception)',
@@ -52,6 +53,8 @@ export const calendar = {
'plannedDayModal.newTitle': 'Plan a Day',
'plannedDayModal.parentLabel': 'Parent',
'plannedDayModal.pinnedNotice': 'This day is pinned by you — the planner will not change it automatically.',
'plannedDayModal.excludedNotice': 'You removed this day for {parent}.',
'plannedDayModal.restoreExcludedButton': 'Put the day back',
'plannedDayModal.dayStatusLabel': 'This day is:',
'plannedDayModal.rangeTitle': 'Plan {count} days',
'plannedDayModal.parentModeLabel': 'Who is this for?',
@@ -138,10 +141,18 @@ export const calendar = {
'calendar.periodDeleteDayButton': 'This day',
'calendar.periodDeleteYearButton': 'This period',
'calendar.periodDeleteAllYearsButton': 'This period, every year',
'calendar.periodDeleteDayDisabledHint':
"Can't remove a single day from a recurring plan — the planner will add it back on the next sync. Delete the period instead.",
// "This day" now works on planner-placed days too: the removal is stored
// as a `PlannedDayExclusion` and survives every subsequent sync.
'calendar.periodDeleteDayHint':
'Only that day is removed. The rest of the period stays, and the planner will not add the day back.',
'calendar.periodDeleteAllYearsDisabledHint': 'This period is not linked to a recurring plan.',
'calendar.periodDeleteConfirmDay': 'Are you sure you want to remove this day?',
// Names both the date and the parent: a day is removed for ONE parent, and
// the partner's day on the same date stays (see PlannedDayExclusionService).
'calendar.periodDeleteConfirmDayNamed':
'Remove {date} for {parent}? The day stays removed until you restore it.',
'calendar.toastDayExcluded': '{date} removed for {parent}',
'calendar.toastDayRestored': '{date} restored for {parent}',
'calendar.periodDeleteConfirmYear': 'Are you sure you want to remove this period (this year only)?',
'calendar.periodDeleteConfirmAllYears': 'Are you sure you want to remove the period — every year?',
'calendar.wantsDubbeldagLabel': 'Allow double days (dubbeldagar)',