Umstellung auf Arbeitstage
This commit is contained in:
@@ -55,15 +55,16 @@ function registerTimesheetRoutes(app) {
|
||||
}
|
||||
|
||||
// User-Daten laden (für Überstunden-Berechnung)
|
||||
db.get('SELECT wochenstunden FROM users WHERE id = ?', [userId], (err, user) => {
|
||||
db.get('SELECT wochenstunden, arbeitstage FROM users WHERE id = ?', [userId], (err, user) => {
|
||||
if (err) {
|
||||
console.error('Fehler beim Laden der User-Daten:', err);
|
||||
return res.status(500).json({ error: 'Fehler beim Laden der User-Daten' });
|
||||
}
|
||||
|
||||
const wochenstunden = user?.wochenstunden || 0;
|
||||
const arbeitstage = user?.arbeitstage || 5;
|
||||
const overtimeValue = overtime_taken_hours ? parseFloat(overtime_taken_hours) : 0;
|
||||
const fullDayHours = wochenstunden > 0 ? wochenstunden / 5 : 0;
|
||||
const fullDayHours = wochenstunden > 0 && arbeitstage > 0 ? wochenstunden / arbeitstage : 0;
|
||||
|
||||
// Überstunden-Logik: Prüfe ob ganzer Tag oder weniger
|
||||
let isFullDayOvertime = false;
|
||||
@@ -96,11 +97,11 @@ function registerTimesheetRoutes(app) {
|
||||
finalEndTime = null;
|
||||
// Keine Tätigkeit setzen - Überstunden werden über overtime_taken_hours in der PDF angezeigt
|
||||
} else if (vacation_type === 'full') {
|
||||
total_hours = 8; // Ganzer Tag Urlaub = 8 Stunden normale Arbeitszeit
|
||||
total_hours = fullDayHours; // Ganzer Tag Urlaub = (Wochenarbeitszeit / Arbeitstage) Stunden normale Arbeitszeit
|
||||
} else if (isSick) {
|
||||
total_hours = 8; // Krank = 8 Stunden normale Arbeitszeit
|
||||
total_hours = fullDayHours; // Krank = (Wochenarbeitszeit / Arbeitstage) Stunden normale Arbeitszeit
|
||||
finalActivity1Desc = 'Krank';
|
||||
finalActivity1Hours = 8;
|
||||
finalActivity1Hours = fullDayHours;
|
||||
} else if (normalizedStartTime && normalizedEndTime) {
|
||||
const start = new Date(`2000-01-01T${normalizedStartTime}`);
|
||||
const end = new Date(`2000-01-01T${normalizedEndTime}`);
|
||||
@@ -314,13 +315,14 @@ function registerTimesheetRoutes(app) {
|
||||
const startDay = parseInt(startDateParts[2]);
|
||||
|
||||
// User-Daten laden für Überstunden-Berechnung
|
||||
db.get('SELECT wochenstunden FROM users WHERE id = ?', [userId], (err, user) => {
|
||||
db.get('SELECT wochenstunden, arbeitstage FROM users WHERE id = ?', [userId], (err, user) => {
|
||||
if (err) {
|
||||
return res.status(500).json({ error: 'Fehler beim Laden der User-Daten' });
|
||||
}
|
||||
|
||||
const wochenstunden = user?.wochenstunden || 0;
|
||||
const fullDayHours = wochenstunden > 0 ? wochenstunden / 5 : 8;
|
||||
const arbeitstage = user?.arbeitstage || 5;
|
||||
const fullDayHours = wochenstunden > 0 && arbeitstage > 0 ? wochenstunden / arbeitstage : 8;
|
||||
|
||||
// Feiertage laden: Feiertag zählt als ausgefüllt (kein Start/Ende nötig)
|
||||
getHolidaysForDateRange(week_start, week_end)
|
||||
@@ -348,12 +350,23 @@ function registerTimesheetRoutes(app) {
|
||||
continue; // Tag ist ausgefüllt
|
||||
}
|
||||
|
||||
// Prüfe ob 8 Überstunden (ganzer Tag) eingetragen sind
|
||||
// Prüfe ob Überstunden (ganzer Tag) eingetragen sind
|
||||
const overtimeValue = entry && entry.overtime_taken_hours ? parseFloat(entry.overtime_taken_hours) : 0;
|
||||
const isFullDayOvertime = overtimeValue > 0 && Math.abs(overtimeValue - fullDayHours) < 0.01;
|
||||
|
||||
if (isFullDayOvertime) {
|
||||
continue; // Tag ist ausgefüllt (8 Überstunden = ganzer Tag)
|
||||
continue; // Tag ist ausgefüllt (Überstunden = ganzer Tag)
|
||||
}
|
||||
|
||||
// Wenn Überstunden > fullDayHours, dann müssen Start/Ende vorhanden sein
|
||||
if (overtimeValue > fullDayHours) {
|
||||
const hasStartTime = entry && entry.start_time && entry.start_time.toString().trim() !== '';
|
||||
const hasEndTime = entry && entry.end_time && entry.end_time.toString().trim() !== '';
|
||||
|
||||
if (!entry || !hasStartTime || !hasEndTime) {
|
||||
missingDays.push(dateStr);
|
||||
continue; // Weiter zum nächsten Tag
|
||||
}
|
||||
}
|
||||
|
||||
// Bei halbem Tag Urlaub oder keinem Urlaub müssen Start- und Endzeit vorhanden sein
|
||||
|
||||
Reference in New Issue
Block a user