diff --git a/lib/models/month_start.dart b/lib/models/month_start.dart index d225ba9..0c0e5ca 100644 --- a/lib/models/month_start.dart +++ b/lib/models/month_start.dart @@ -14,7 +14,8 @@ class MonthStart { }); /// Basis für kumulierte Differenz - int get carryBaseMinutes => startMinutes + overtimeMinutes + correctionMinutes; + int get carryBaseMinutes => + startMinutes + correctionMinutes - overtimeMinutes; static MonthStart fromJson(Map json) { final bookings = (json['bookings'] as List?) ?? const []; diff --git a/lib/screens/monthly_view.dart b/lib/screens/monthly_view.dart index 95eb301..ba730ce 100644 --- a/lib/screens/monthly_view.dart +++ b/lib/screens/monthly_view.dart @@ -316,9 +316,11 @@ class _MonthlyViewState extends State { 'T': _days.where((d) => d.code == 'T').length, }; + final startMinutes = _monthStartInfo?.startMinutes ?? 0; final correctionMin = _monthStartInfo?.correctionMinutes ?? 0; - final nextCarryMin = - cumulative.isNotEmpty ? cumulative.last : _carryBaseMinutes; + final overtimeMin = _monthStartInfo?.overtimeMinutes ?? 0; + final saldoMin = istTotal - sollTotal; + final nextCarryMin = startMinutes + correctionMin + saldoMin - overtimeMin; final rows = List.generate(_days.length, (i) { final day = effectiveDays[i]; @@ -438,12 +440,12 @@ class _MonthlyViewState extends State { _MonthlySummaryFooter( month: _monthStart, fontSize: _fontSize, - uebertragStartText: minutesToSignedHHMM(_carryBaseMinutes), + uebertragStartText: minutesToSignedHHMM(startMinutes), sollText: minutesToHHMM(sollTotal), istText: minutesToHHMM(istTotal), correctionText: minutesToSignedHHMM(correctionMin), - saldoText: minutesToSignedHHMM(istTotal - sollTotal), - paidOvertimeText: '—', + saldoText: minutesToSignedHHMM(saldoMin), + paidOvertimeText: minutesToSignedHHMM(overtimeMin), uebertragNextText: minutesToSignedHHMM(nextCarryMin), restUrlaubText: '$startVacation', urlaubUebertragText: '$vacationCarry', diff --git a/lib/utils/work_time.dart b/lib/utils/work_time.dart index 4e33ae0..7da8b3a 100644 --- a/lib/utils/work_time.dart +++ b/lib/utils/work_time.dart @@ -26,6 +26,8 @@ int effectiveWorkedMinutes( if (worked <= 6 * 60) return worked; + final maxRequiredBreak = (worked - 6 * 60).clamp(0, requiredBreakOver6h); + // Lücken summieren int gaps = 0; for (var i = 0; i < sorted.length - 1; i++) { @@ -33,7 +35,12 @@ int effectiveWorkedMinutes( if (gap > 0) gaps += gap; } - final extraBreak = (requiredBreakOver6h - gaps).clamp(0, requiredBreakOver6h); + final extraBreak = (maxRequiredBreak - gaps).clamp(0, maxRequiredBreak); final effective = worked - extraBreak; +// int effective = worked - extraBreak; +// final diff = 30 - gaps; + +// if (diff > 0) effective -= diff; + return effective < 0 ? 0 : effective; }