From cea8d25eead1d0f134e0a17d0ec2cafa052e56b0 Mon Sep 17 00:00:00 2001 From: FabianArbeit Date: Tue, 28 Apr 2026 11:26:00 +0200 Subject: [PATCH] - calculate mittagspause with offset correctly - show provisionary mittagspause - handle zapfenstreich the same way --- .../zeitlaeufer/WorkdayLoadingBar.java | 21 +++++++++++++++++-- .../zeitlaeufer/tools/LoadingBarCliTools.java | 5 +++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/szimnau/zeitlaeufer/WorkdayLoadingBar.java b/src/main/java/de/szimnau/zeitlaeufer/WorkdayLoadingBar.java index e556253..5886b4a 100644 --- a/src/main/java/de/szimnau/zeitlaeufer/WorkdayLoadingBar.java +++ b/src/main/java/de/szimnau/zeitlaeufer/WorkdayLoadingBar.java @@ -33,6 +33,12 @@ public interface WorkdayLoadingBar { long getPassedMinutes(boolean passedMinutesZero); + default LocalTime estimateMittagspause() { + LocalTime defaultEndTime = getStartTime().plusMinutes(DEFAULT_NUMBER_WORK_MINS_BEFORE_LUNCH); + return calculateRealMittagspause(defaultEndTime); + } + + default void initMittagspause() { LocalTime defaultEndTime = getStartTime().plusMinutes(DEFAULT_NUMBER_WORK_MINS_BEFORE_LUNCH); realInitMittagspause(defaultEndTime); @@ -43,7 +49,7 @@ public interface WorkdayLoadingBar { default void initMittagspause(int endTimeOffset) { - LocalTime offsetEndTime = getStartTime().plusMinutes(DEFAULT_NUMBER_WORK_MINS_BEFORE_LUNCH + endTimeOffset); + LocalTime offsetEndTime = estimateMittagspause().plusMinutes(endTimeOffset); realInitMittagspause(offsetEndTime); } @@ -55,13 +61,24 @@ public interface WorkdayLoadingBar { private void realInitMittagspause(LocalTime theoreticalEndTime) { - setEndTime(theoreticalEndTime.isAfter(LATEST_LUNCH_TIME) ? LATEST_LUNCH_TIME : theoreticalEndTime); + setEndTime(calculateRealMittagspause(theoreticalEndTime)); + } + + + private LocalTime calculateRealMittagspause(LocalTime theoreticalMittagspause) { + return theoreticalMittagspause.isAfter(LATEST_LUNCH_TIME) ? LATEST_LUNCH_TIME : theoreticalMittagspause; } void setEndTime(LocalTime endTime); + default LocalTime estimateZapfenstreich(Integer mittagspauseDuration) { + int estMittagspauseDuration = mittagspauseDuration != null ? mittagspauseDuration : MIN_LUNCH_DURATION; + return getStartTime().plusMinutes(MAX_NUMBER_WORK_MINS + estMittagspauseDuration); + } + + default void initZapfenstreich() { LocalTime trueEndTime = getStartTime().plusMinutes(MAX_NUMBER_WORK_MINS + MIN_LUNCH_DURATION); realInitZapfenstreich(MIN_LUNCH_DURATION, trueEndTime); diff --git a/src/main/java/de/szimnau/zeitlaeufer/tools/LoadingBarCliTools.java b/src/main/java/de/szimnau/zeitlaeufer/tools/LoadingBarCliTools.java index af4c609..421157e 100644 --- a/src/main/java/de/szimnau/zeitlaeufer/tools/LoadingBarCliTools.java +++ b/src/main/java/de/szimnau/zeitlaeufer/tools/LoadingBarCliTools.java @@ -71,6 +71,8 @@ public class LoadingBarCliTools { private static void handleMittagspause(BufferedReader br, WorkdayLoadingBar lb) throws IOException { + LocalTime vorlaeufigeEndzeit = lb.estimateMittagspause(); + println("Mittagspause: " + FormatTools.TIME_FORMATTER.format(vorlaeufigeEndzeit)); print("Mittagspause verschieben um (optional): "); String mittagspauseOffsetRaw = br.readLine(); if (mittagspauseOffsetRaw != null && !mittagspauseOffsetRaw.isBlank()) { @@ -96,8 +98,7 @@ public class LoadingBarCliTools { if (mittagspauseDurationRaw != null && !mittagspauseDurationRaw.isBlank()) { mittagspauseDuration = Integer.valueOf(mittagspauseDurationRaw); } - LocalTime vorlaeufigeEndzeit = lb.getStartTime().plusMinutes(WorkdayLoadingBar.MAX_NUMBER_WORK_MINS) - .plusMinutes(mittagspauseDuration != null ? mittagspauseDuration : WorkdayLoadingBar.MIN_LUNCH_DURATION); + LocalTime vorlaeufigeEndzeit = lb.estimateZapfenstreich(mittagspauseDuration); println("Endzeit: " + FormatTools.TIME_FORMATTER.format(vorlaeufigeEndzeit)); print("Feierabend verschieben um (optional): "); String zapfenstreichOffsetRaw = br.readLine();