Checkin Seite erstellt

This commit is contained in:
2026-01-30 18:59:00 +01:00
parent a1ddaf5a35
commit 32f40124a8
10 changed files with 619 additions and 42 deletions

View File

@@ -372,8 +372,13 @@ function renderWeek() {
// Stunden zur Summe hinzufügen
// Bei ganztägigem Urlaub oder Krank sollten es bereits 8 Stunden sein (vom Backend gesetzt)
// Feiertag: 8h Basis + gearbeitete Stunden (jede gearbeitete Stunde = Überstunde)
// Bei halbem Tag Urlaub werden die Urlaubsstunden später in der Überstunden-Berechnung hinzugezählt
totalHours += hours;
if (isHoliday) {
totalHours += 8 + (hours || 0); // 8h Feiertag + gearbeitete Stunden (= Überstunden)
} else {
totalHours += hours;
}
// Bearbeitung ist immer möglich, auch nach Abschicken
// Bei ganztägigem Urlaub oder Krank werden Zeitfelder deaktiviert; Feiertag: Anzeige, Zeitfelder optional (Überstunden)
@@ -404,7 +409,7 @@ function renderWeek() {
data-date="${dateStr}" data-field="break_minutes"
${timeFieldsDisabled} ${disabled} oninput="saveEntry(this)" onchange="saveEntry(this)">
</td>
<td><strong id="hours_${dateStr}">${isFullDayVacation ? '8.00 h (Urlaub)' : isSick ? '8.00 h (Krank)' : isHoliday && !hours ? '8.00 h (Feiertag)' : hours.toFixed(2) + ' h'}</strong></td>
<td><strong id="hours_${dateStr}">${isFullDayVacation ? '8.00 h (Urlaub)' : isSick ? '8.00 h (Krank)' : isHoliday && !hours ? '8.00 h (Feiertag)' : isHoliday && hours ? '8.00 + ' + hours.toFixed(2) + ' h (Überst.)' : hours.toFixed(2) + ' h'}</strong></td>
</tr>
<tr class="activities-row">
<td colspan="6" class="activities-cell">
@@ -576,7 +581,7 @@ function renderWeek() {
vacationHours += 4; // Halber Tag = 4 Stunden
}
});
// Überstunden berechnen
let overtimeTaken = 0;
Object.values(currentEntries).forEach(e => {
@@ -664,6 +669,23 @@ function updateOvertimeDisplay() {
}
} else if (sickStatus) {
totalHours += 8; // Krank = 8 Stunden
} else if (currentHolidayDates.has(dateStr)) {
// Feiertag: 8h Basis + gearbeitete Stunden (jede Stunde = Überstunde)
const startInput = document.querySelector(`input[data-date="${dateStr}"][data-field="start_time"]`);
const endInput = document.querySelector(`input[data-date="${dateStr}"][data-field="end_time"]`);
const startTime = startInput ? startInput.value : '';
const endTime = endInput ? endInput.value : '';
let worked = 0;
if (startTime && endTime) {
const breakInput = document.querySelector(`input[data-date="${dateStr}"][data-field="break_minutes"]`);
const breakMinutes = parseInt(breakInput ? breakInput.value : 0) || 0;
const start = new Date(`2000-01-01T${startTime}`);
const end = new Date(`2000-01-01T${endTime}`);
worked = (end - start) / (1000 * 60 * 60) - (breakMinutes / 60);
} else if (currentEntries[dateStr]?.total_hours) {
worked = parseFloat(currentEntries[dateStr].total_hours) || 0;
}
totalHours += 8 + worked; // 8h Feiertag + gearbeitete Stunden (= Überstunden)
} else {
// Wenn 8 Überstunden (ganzer Tag) eingetragen sind, zählt der Tag als 0 Stunden
if (isFullDayOvertime) {
@@ -710,10 +732,7 @@ function updateOvertimeDisplay() {
}
// Überstunden berechnen (wie im Backend: mit adjustedSollStunden)
// Wenn 8 Überstunden genommen wurden, zählen diese Tage als 0 Stunden
// Die negativen Stunden (wegen 0 statt Sollstunden) werden durch die verbrauchten Überstunden ausgeglichen
// Daher: adjustedSollStunden = sollStunden - (fullDayOvertimeDays * fullDayHours)
// So werden die Tage mit 8 Überstunden nicht zu negativen Überstunden führen
// totalHours enthält bereits Feiertagsstunden (8h oder gearbeitete Stunden) aus dem Feiertag-Zweig oben
const totalHoursWithVacation = totalHours + vacationHours;
const adjustedSollStunden = sollStunden - (fullDayOvertimeDays * fullDayHours);
// overtimeHours = Überstunden diese Woche (wie im Backend berechnet)