This commit is contained in:
Carsten Graf
2026-01-23 18:33:33 +01:00
parent 587bdd2722
commit 563d4fc373
5 changed files with 132 additions and 43 deletions

View File

@@ -64,6 +64,9 @@ document.addEventListener('DOMContentLoaded', async function() {
// Ping-IP laden
loadPingIP();
// Statistiken laden
loadUserStats();
loadWeek();
document.getElementById('prevWeek').addEventListener('click', function() {
@@ -520,6 +523,7 @@ function updateOvertimeDisplay() {
// Gesamtstunden berechnen - direkt aus DOM-Elementen lesen für Echtzeit-Aktualisierung
let totalHours = 0;
let vacationHours = 0;
const startDateObj = new Date(startDate);
for (let i = 0; i < 7; i++) {
const date = new Date(startDateObj);
@@ -532,8 +536,30 @@ function updateOvertimeDisplay() {
const sickCheckbox = document.querySelector(`input[data-date="${dateStr}"][data-field="sick_status"]`);
const sickStatus = sickCheckbox ? sickCheckbox.checked : (currentEntries[dateStr]?.sick_status || false);
// Wenn Urlaub oder Krank, zähle nur diese Stunden (nicht zusätzlich Arbeitsstunden)
if (vacationType === 'full') {
totalHours += 8; // Ganzer Tag Urlaub = 8 Stunden
vacationHours += 8; // Ganzer Tag Urlaub = 8 Stunden
} else if (vacationType === 'half') {
vacationHours += 4; // Halber Tag Urlaub = 4 Stunden
// Bei halbem Tag Urlaub können noch Arbeitsstunden vorhanden sein
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 breakInput = document.querySelector(`input[data-date="${dateStr}"][data-field="break_minutes"]`);
const startTime = startInput ? startInput.value : '';
const endTime = endInput ? endInput.value : '';
const breakMinutes = parseInt(breakInput ? breakInput.value : 0) || 0;
if (startTime && endTime) {
const start = new Date(`2000-01-01T${startTime}`);
const end = new Date(`2000-01-01T${endTime}`);
const diffMs = end - start;
const hours = (diffMs / (1000 * 60 * 60)) - (breakMinutes / 60);
totalHours += hours;
} else if (currentEntries[dateStr]?.total_hours) {
// Fallback auf gespeicherte Werte
totalHours += parseFloat(currentEntries[dateStr].total_hours) || 0;
}
} else if (sickStatus) {
totalHours += 8; // Krank = 8 Stunden
} else {
@@ -559,24 +585,6 @@ function updateOvertimeDisplay() {
}
}
// Urlaubsstunden berechnen (Urlaub zählt als normale Arbeitszeit)
let vacationHours = 0;
const startDateObj2 = new Date(startDate);
for (let i = 0; i < 7; i++) {
const date = new Date(startDateObj2);
date.setDate(date.getDate() + i);
const dateStr = formatDate(date);
const vacationSelect = document.querySelector(`select[data-date="${dateStr}"][data-field="vacation_type"]`);
const vacationType = vacationSelect ? vacationSelect.value : (currentEntries[dateStr]?.vacation_type || '');
if (vacationType === 'full') {
vacationHours += 8; // Ganzer Tag = 8 Stunden
} else if (vacationType === 'half') {
vacationHours += 4; // Halber Tag = 4 Stunden
}
}
// Genommene Überstunden berechnen - direkt aus DOM lesen
let overtimeTaken = 0;
const startDateObj3 = new Date(startDate);
@@ -1172,7 +1180,8 @@ async function submitWeekWithReason(versionReason) {
const versionText = result.version ? ` (Version ${result.version})` : '';
alert(`Stundenzettel wurde erfolgreich eingereicht${versionText}!`);
loadWeek(); // Neu laden um Status zu aktualisieren
// Statistiken werden durch updateOvertimeDisplay() aktualisiert
// Statistiken aktualisieren
loadUserStats();
} else {
console.error('Fehler-Details:', result);
alert(result.error || 'Fehler beim Einreichen des Stundenzettels');