Umstellung der Stundenberechnung auf Sollarbeitszeit.
This commit is contained in:
@@ -1003,13 +1003,9 @@ function updateOvertimeDisplay() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Überstunden berechnen (wie im Backend: mit adjustedSollStunden)
|
// Variante B: Überstunden/Fehlstunden = Gesamt − Soll (Soll immer vertraglich)
|
||||||
// totalHours enthält bereits Feiertagsstunden (8h oder gearbeitete Stunden) aus dem Feiertag-Zweig oben
|
|
||||||
const totalHoursWithVacation = totalHours + vacationHours;
|
const totalHoursWithVacation = totalHours + vacationHours;
|
||||||
const adjustedSollStunden = sollStunden - (fullDayOvertimeDays * fullDayHours);
|
const overtimeHours = totalHoursWithVacation - sollStunden;
|
||||||
// overtimeHours = Überstunden diese Woche (wie im Backend berechnet)
|
|
||||||
// Genommene Überstunden werden abgezogen, um die Netto-Überstunden zu erhalten
|
|
||||||
const overtimeHours = totalHoursWithVacation - adjustedSollStunden - overtimeTaken;
|
|
||||||
|
|
||||||
// Überstunden-Anzeige aktualisieren
|
// Überstunden-Anzeige aktualisieren
|
||||||
const overtimeSummaryItem = document.getElementById('overtimeSummaryItem');
|
const overtimeSummaryItem = document.getElementById('overtimeSummaryItem');
|
||||||
|
|||||||
@@ -507,19 +507,14 @@ function registerUserRoutes(app) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sollstunden berechnen
|
// Sollstunden berechnen (Variante B: immer vertraglich, nicht reduziert durch „genommen“)
|
||||||
const sollStunden = (wochenstunden / arbeitstage) * workdays;
|
const sollStunden = (wochenstunden / arbeitstage) * workdays;
|
||||||
|
|
||||||
// Überstunden für diese Woche: (totalHours + vacationHours + holidayHours) - adjustedSollStunden
|
|
||||||
const weekTotalHoursWithVacation = weekTotalHours + weekVacationHours + holidayHours;
|
const weekTotalHoursWithVacation = weekTotalHours + weekVacationHours + holidayHours;
|
||||||
const adjustedSollStunden = sollStunden - (fullDayOvertimeDays * fullDayHours);
|
// Überstunden/Fehlstunden = Gesamt − Soll (kann negativ sein)
|
||||||
// weekOvertimeHours = Überstunden diese Woche (wie im Frontend berechnet)
|
const weekOvertimeHours = weekTotalHoursWithVacation - sollStunden;
|
||||||
const weekOvertimeHours = weekTotalHoursWithVacation - adjustedSollStunden;
|
|
||||||
|
|
||||||
// Kumulativ addieren
|
// Kumulativ addieren
|
||||||
// WICHTIG: weekOvertimeHours enthält bereits die Überstunden dieser Woche (kann negativ sein bei 8 Überstunden)
|
|
||||||
// weekOvertimeTaken enthält die verbrauchten Überstunden (8 Stunden pro Tag mit 8 Überstunden)
|
|
||||||
// Die aktuellen Überstunden = Summe aller Wochen-Überstunden - verbrauchte Überstunden
|
|
||||||
totalOvertimeHours += weekOvertimeHours;
|
totalOvertimeHours += weekOvertimeHours;
|
||||||
totalOvertimeTaken += weekOvertimeTaken;
|
totalOvertimeTaken += weekOvertimeTaken;
|
||||||
totalVacationDays += weekVacationDays;
|
totalVacationDays += weekVacationDays;
|
||||||
@@ -528,10 +523,8 @@ function registerUserRoutes(app) {
|
|||||||
|
|
||||||
// Wenn alle Wochen verarbeitet wurden, Antwort senden
|
// Wenn alle Wochen verarbeitet wurden, Antwort senden
|
||||||
if (processedWeeks === weeks.length && !hasError) {
|
if (processedWeeks === weeks.length && !hasError) {
|
||||||
// Aktuelle Überstunden = Summe aller Wochen-Überstunden - verbrauchte Überstunden + Offset
|
// Variante B: Verbleibend = Summe Wochen-Überstunden + Offset („genommen“ nur Anzeige)
|
||||||
// weekOvertimeHours enthält bereits die korrekte Berechnung pro Woche (wie im Frontend)
|
const currentOvertime = totalOvertimeHours + overtimeOffsetHours;
|
||||||
// weekOvertimeTaken enthält die verbrauchten Überstunden (8 Stunden pro Tag mit 8 Überstunden)
|
|
||||||
const currentOvertime = (totalOvertimeHours - totalOvertimeTaken) + overtimeOffsetHours;
|
|
||||||
const remainingVacation = urlaubstage - totalVacationDays + vacationOffsetDays;
|
const remainingVacation = urlaubstage - totalVacationDays + vacationOffsetDays;
|
||||||
|
|
||||||
res.json({
|
res.json({
|
||||||
@@ -761,11 +754,10 @@ function registerUserRoutes(app) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sollstunden berechnen
|
// Sollstunden berechnen (Variante B: immer vertraglich)
|
||||||
const sollStunden = (wochenstunden / arbeitstage) * workdays;
|
const sollStunden = (wochenstunden / arbeitstage) * workdays;
|
||||||
const weekTotalHoursWithVacation = weekTotalHours + weekVacationHours + holidayHours;
|
const weekTotalHoursWithVacation = weekTotalHours + weekVacationHours + holidayHours;
|
||||||
const adjustedSollStunden = sollStunden - (fullDayOvertimeDays * fullDayHours);
|
const weekOvertimeHours = weekTotalHoursWithVacation - sollStunden;
|
||||||
const weekOvertimeHours = weekTotalHoursWithVacation - adjustedSollStunden;
|
|
||||||
|
|
||||||
// Kalenderwoche berechnen
|
// Kalenderwoche berechnen
|
||||||
const calendarWeek = getCalendarWeek(week.week_start);
|
const calendarWeek = getCalendarWeek(week.week_start);
|
||||||
@@ -780,7 +772,7 @@ function registerUserRoutes(app) {
|
|||||||
overtime_hours: parseFloat(weekOvertimeHours.toFixed(2)),
|
overtime_hours: parseFloat(weekOvertimeHours.toFixed(2)),
|
||||||
overtime_taken: parseFloat(weekOvertimeTaken.toFixed(2)),
|
overtime_taken: parseFloat(weekOvertimeTaken.toFixed(2)),
|
||||||
total_hours: parseFloat(weekTotalHoursWithVacation.toFixed(2)),
|
total_hours: parseFloat(weekTotalHoursWithVacation.toFixed(2)),
|
||||||
soll_stunden: parseFloat(adjustedSollStunden.toFixed(2)),
|
soll_stunden: parseFloat(sollStunden.toFixed(2)),
|
||||||
vacation_days: parseFloat(weekVacationDays.toFixed(1)),
|
vacation_days: parseFloat(weekVacationDays.toFixed(1)),
|
||||||
workdays: workdays
|
workdays: workdays
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -597,12 +597,11 @@ function registerVerwaltungRoutes(app) {
|
|||||||
const weekOvertimeHours = totalHoursWithVacation - sollStunden;
|
const weekOvertimeHours = totalHoursWithVacation - sollStunden;
|
||||||
|
|
||||||
// Kumulative Überstunden: Summe aller Wochen bis zur aktuellen Woche
|
// Kumulative Überstunden: Summe aller Wochen bis zur aktuellen Woche
|
||||||
// cumulativeOvertimeHours enthält bereits alle vorherigen Wochen
|
|
||||||
const totalCumulativeOvertimeHours = cumulativeOvertimeHours + weekOvertimeHours;
|
const totalCumulativeOvertimeHours = cumulativeOvertimeHours + weekOvertimeHours;
|
||||||
const totalCumulativeOvertimeTaken = cumulativeOvertimeTaken + overtimeTaken;
|
const totalCumulativeOvertimeTaken = cumulativeOvertimeTaken + overtimeTaken;
|
||||||
|
|
||||||
// Verbleibende Überstunden = kumulative Überstunden - kumulative genommene Überstunden
|
// Variante B: Verbleibend = Summe Wochen-Überstunden („genommen“ nur Anzeige)
|
||||||
const remainingOvertime = totalCumulativeOvertimeHours - totalCumulativeOvertimeTaken;
|
const remainingOvertime = totalCumulativeOvertimeHours;
|
||||||
const remainingOvertimeWithOffset = remainingOvertime + overtimeOffsetHours;
|
const remainingOvertimeWithOffset = remainingOvertime + overtimeOffsetHours;
|
||||||
|
|
||||||
// Verbleibende Urlaubstage (berücksichtigt alle eingereichten Wochen, nicht nur die aktuelle)
|
// Verbleibende Urlaubstage (berücksichtigt alle eingereichten Wochen, nicht nur die aktuelle)
|
||||||
|
|||||||
@@ -171,17 +171,17 @@ function getCurrentOvertimeForUser(userId, db, callback) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Variante B: Soll immer vertraglich, Verbleibend ohne Abzug „genommen“
|
||||||
const sollStunden = (wochenstunden / arbeitstage) * workdays;
|
const sollStunden = (wochenstunden / arbeitstage) * workdays;
|
||||||
const weekTotalHoursWithVacation = weekTotalHours + weekVacationHours + holidayHours;
|
const weekTotalHoursWithVacation = weekTotalHours + weekVacationHours + holidayHours;
|
||||||
const adjustedSollStunden = sollStunden - fullDayOvertimeDays * fullDayHours;
|
const weekOvertimeHours = weekTotalHoursWithVacation - sollStunden;
|
||||||
const weekOvertimeHours = weekTotalHoursWithVacation - adjustedSollStunden;
|
|
||||||
|
|
||||||
totalOvertimeHours += weekOvertimeHours;
|
totalOvertimeHours += weekOvertimeHours;
|
||||||
totalOvertimeTaken += weekOvertimeTaken;
|
totalOvertimeTaken += weekOvertimeTaken;
|
||||||
processedWeeks++;
|
processedWeeks++;
|
||||||
|
|
||||||
if (processedWeeks === weeks.length && !hasError) {
|
if (processedWeeks === weeks.length && !hasError) {
|
||||||
done(totalOvertimeHours - totalOvertimeTaken + overtimeOffsetHours);
|
done(totalOvertimeHours + overtimeOffsetHours);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -274,14 +274,17 @@
|
|||||||
totalOvertimeTaken += week.overtime_taken;
|
totalOvertimeTaken += week.overtime_taken;
|
||||||
});
|
});
|
||||||
const overtimeOffset = data.overtime_offset_hours || 0;
|
const overtimeOffset = data.overtime_offset_hours || 0;
|
||||||
const remainingOvertime = totalOvertime - totalOvertimeTaken + overtimeOffset;
|
// Variante B: Verbleibend = Summe Wochen-Überstunden + Offset („genommen“ nur Anzeige)
|
||||||
|
const remainingOvertime = totalOvertime + overtimeOffset;
|
||||||
|
// Gesamt Überstunden = Verbleibend + Genommen (kumuliert inkl. bereits verbrauchter)
|
||||||
|
const displayTotalOvertime = remainingOvertime + totalOvertimeTaken;
|
||||||
|
|
||||||
// Zusammenfassung anzeigen
|
// Zusammenfassung anzeigen
|
||||||
const totalOvertimeEl = document.getElementById('totalOvertime');
|
const totalOvertimeEl = document.getElementById('totalOvertime');
|
||||||
totalOvertimeEl.textContent =
|
totalOvertimeEl.textContent =
|
||||||
(totalOvertime >= 0 ? '+' : '') + formatHoursMin(totalOvertime);
|
(displayTotalOvertime >= 0 ? '+' : '') + formatHoursMin(displayTotalOvertime);
|
||||||
totalOvertimeEl.className =
|
totalOvertimeEl.className =
|
||||||
'summary-value ' + (totalOvertime >= 0 ? 'overtime-positive' : 'overtime-negative');
|
'summary-value ' + (displayTotalOvertime >= 0 ? 'overtime-positive' : 'overtime-negative');
|
||||||
|
|
||||||
const totalOvertimeTakenEl = document.getElementById('totalOvertimeTaken');
|
const totalOvertimeTakenEl = document.getElementById('totalOvertimeTaken');
|
||||||
totalOvertimeTakenEl.textContent =
|
totalOvertimeTakenEl.textContent =
|
||||||
|
|||||||
Reference in New Issue
Block a user