Checkin Seite erstellt
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user