Gehe zu button, Verwaltung Urlaubsberechnung

This commit is contained in:
2026-02-05 13:42:30 +01:00
parent 3c282a0f3c
commit 4bd289a990
5 changed files with 106 additions and 16 deletions

View File

@@ -241,19 +241,16 @@ function registerVerwaltungRoutes(app) {
return res.status(500).json({ error: 'Fehler beim Abrufen der Wochen' });
}
// Für jede Woche die neuesten Einträge abrufen
// Nur Wochen bis Ende der angezeigten Kalenderwoche (Stand Urlaub = Ende dieser KW)
const weeksUpToDisplayed = (weeks || []).filter((w) => w.week_end <= week_end);
let processedWeeks = 0;
let totalVacationDays = 0;
const vacationByDate = {};
if (!weeks || weeks.length === 0) {
// Keine eingereichten Wochen - setze totalVacationDays auf 0
totalVacationDays = 0;
// Weiter mit der normalen Verarbeitung der aktuellen Woche
if (weeksUpToDisplayed.length === 0) {
processCurrentWeek(0);
} else {
weeks.forEach((week) => {
// Einträge für diese Woche abrufen (nur neueste pro Tag)
weeksUpToDisplayed.forEach((week) => {
db.all(`SELECT date, vacation_type, updated_at, id
FROM timesheet_entries
WHERE user_id = ? AND date >= ? AND date <= ?
@@ -266,13 +263,11 @@ function registerVerwaltungRoutes(app) {
return res.status(500).json({ error: 'Fehler beim Abrufen der Einträge' });
}
// Filtere auf neuesten Eintrag pro Tag
(weekEntries || []).forEach(entry => {
const existing = vacationByDate[entry.date];
if (!existing) {
vacationByDate[entry.date] = entry;
} else {
// Vergleiche updated_at (falls vorhanden) oder id (höhere ID = neuer)
const existingTime = existing.updated_at ? new Date(existing.updated_at).getTime() : 0;
const currentTime = entry.updated_at ? new Date(entry.updated_at).getTime() : 0;
if (currentTime > existingTime || (currentTime === existingTime && entry.id > existing.id)) {
@@ -282,8 +277,7 @@ function registerVerwaltungRoutes(app) {
});
processedWeeks++;
if (processedWeeks === weeks.length) {
// Alle Wochen verarbeitet - summiere Urlaubstage
if (processedWeeks === weeksUpToDisplayed.length) {
Object.values(vacationByDate).forEach(entry => {
if (entry.vacation_type === 'full') {
totalVacationDays += 1;
@@ -291,8 +285,6 @@ function registerVerwaltungRoutes(app) {
totalVacationDays += 0.5;
}
});
// Weiter mit der normalen Verarbeitung der aktuellen Woche
processCurrentWeek(totalVacationDays);
}
});