From 03b4db82473cbf2fc7244b9e6277f86207143080 Mon Sep 17 00:00:00 2001 From: Carsten Graf Date: Thu, 12 Feb 2026 13:38:27 +0100 Subject: [PATCH] =?UTF-8?q?Resilliance=20und=20bessere=20erkennung=20ausge?= =?UTF-8?q?f=C3=BCllte=20tage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routes/user-routes.js | 13 ++++++++++--- services/overtime-service.js | 5 ++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/routes/user-routes.js b/routes/user-routes.js index 398d7af..ade56bf 100644 --- a/routes/user-routes.js +++ b/routes/user-routes.js @@ -393,6 +393,7 @@ function registerUserRoutes(app) { const endDate = new Date(week.week_end); let workdays = 0; let filledWorkdays = 0; + const fullDayHoursForCheck = wochenstunden > 0 && arbeitstage > 0 ? wochenstunden / arbeitstage : 8; for (let d = new Date(startDate); d <= endDate; d.setDate(d.getDate() + 1)) { const day = d.getDay(); @@ -408,15 +409,18 @@ function registerUserRoutes(app) { // Tag gilt als ausgefüllt wenn: // - Ganzer Tag Urlaub (vacation_type = 'full') // - Krank (sick_status = 1) + // - Ganzer Tag Überstunden (overtime_taken_hours = fullDayHours) // - ODER Start- und End-Zeit vorhanden sind if (entry) { const isFullDayVacation = entry.vacation_type === 'full'; const isSick = entry.sick_status === 1 || entry.sick_status === true; + const overtimeValue = entry.overtime_taken_hours ? parseFloat(entry.overtime_taken_hours) : 0; + const isFullDayOvertime = overtimeValue > 0 && Math.abs(overtimeValue - fullDayHoursForCheck) < 0.01; const hasStartAndEnd = entry.start_time && entry.end_time && entry.start_time.toString().trim() !== '' && entry.end_time.toString().trim() !== ''; - if (isFullDayVacation || isSick || hasStartAndEnd) { + if (isFullDayVacation || isSick || isFullDayOvertime || hasStartAndEnd) { filledWorkdays++; } } @@ -462,7 +466,7 @@ function registerUserRoutes(app) { const isFullDayOvertime = overtimeValue > 0 && Math.abs(overtimeValue - fullDayHours) < 0.01; if (entry.overtime_taken_hours) { - weekOvertimeTaken += entry.overtime_taken_hours; + weekOvertimeTaken += parseFloat(entry.overtime_taken_hours) || 0; } // Wenn 8 Überstunden eingetragen sind, zählt der Tag als 0 Stunden @@ -666,6 +670,7 @@ function registerUserRoutes(app) { const endDate = new Date(week.week_end); let workdays = 0; let filledWorkdays = 0; + const fullDayHoursForCheck = wochenstunden > 0 && arbeitstage > 0 ? wochenstunden / arbeitstage : 8; for (let d = new Date(startDate); d <= endDate; d.setDate(d.getDate() + 1)) { const day = d.getDay(); @@ -681,11 +686,13 @@ function registerUserRoutes(app) { if (entry) { const isFullDayVacation = entry.vacation_type === 'full'; const isSick = entry.sick_status === 1 || entry.sick_status === true; + const overtimeValue = entry.overtime_taken_hours ? parseFloat(entry.overtime_taken_hours) : 0; + const isFullDayOvertime = overtimeValue > 0 && Math.abs(overtimeValue - fullDayHoursForCheck) < 0.01; const hasStartAndEnd = entry.start_time && entry.end_time && entry.start_time.toString().trim() !== '' && entry.end_time.toString().trim() !== ''; - if (isFullDayVacation || isSick || hasStartAndEnd) { + if (isFullDayVacation || isSick || isFullDayOvertime || hasStartAndEnd) { filledWorkdays++; } } diff --git a/services/overtime-service.js b/services/overtime-service.js index 88814fa..fd0bcba 100644 --- a/services/overtime-service.js +++ b/services/overtime-service.js @@ -94,6 +94,7 @@ function getCurrentOvertimeForUser(userId, db, callback) { const endDate = new Date(week.week_end); let workdays = 0; let filledWorkdays = 0; + const fullDayHoursForCheck = wochenstunden > 0 && arbeitstage > 0 ? wochenstunden / arbeitstage : 8; for (let d = new Date(startDate); d <= endDate; d.setDate(d.getDate() + 1)) { const day = d.getDay(); @@ -108,12 +109,14 @@ function getCurrentOvertimeForUser(userId, db, callback) { if (entry) { const isFullDayVacation = entry.vacation_type === 'full'; const isSick = entry.sick_status === 1 || entry.sick_status === true; + const overtimeValue = entry.overtime_taken_hours ? parseFloat(entry.overtime_taken_hours) : 0; + const isFullDayOvertime = overtimeValue > 0 && Math.abs(overtimeValue - fullDayHoursForCheck) < 0.01; const hasStartAndEnd = entry.start_time && entry.end_time && entry.start_time.toString().trim() !== '' && entry.end_time.toString().trim() !== ''; - if (isFullDayVacation || isSick || hasStartAndEnd) { + if (isFullDayVacation || isSick || isFullDayOvertime || hasStartAndEnd) { filledWorkdays++; } }