Icons, Footer, Stundenformel
This commit is contained in:
BIN
public/apple-touch-icon.png
Normal file
BIN
public/apple-touch-icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
@@ -1072,4 +1072,13 @@ table input[type="text"] {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
}
|
||||
}
|
||||
|
||||
/* App Footer */
|
||||
.app-footer {
|
||||
text-align: center;
|
||||
padding: 16px;
|
||||
color: #888;
|
||||
font-size: 13px;
|
||||
margin-top: 24px;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
@@ -440,12 +440,17 @@ function renderWeek() {
|
||||
|
||||
// Stunden zur Summe hinzufügen
|
||||
// Bei ganztägigem Urlaub oder Krank sollten es bereits 8 Stunden sein (vom Backend gesetzt)
|
||||
// Feiertag: 8h Basis + gearbeitete Stunden (jede gearbeitete Stunde = Überstunde)
|
||||
// Feiertag Werktag: 8h Basis + gearbeitete Stunden (jede gearbeitete Stunde = Überstunde)
|
||||
// Feiertag am Wochenende: keine Tagesarbeitsstunden, nur gearbeitete Stunden (z. B. Reise)
|
||||
// Bei halbem Tag Urlaub werden die Urlaubsstunden später in der Überstunden-Berechnung hinzugezählt
|
||||
// Wochenend-Prozentsätze: Nur auf tatsächlich gearbeitete Stunden anwenden (nicht auf Urlaub, Krankheit, Feiertage)
|
||||
let hoursToAdd = 0;
|
||||
if (isHoliday) {
|
||||
hoursToAdd = fullDayHours + (hours || 0); // (Wochenarbeitszeit / Arbeitstage) Feiertag + gearbeitete Stunden (= Überstunden)
|
||||
if (isWeekend) {
|
||||
hoursToAdd = hours || 0; // Feiertag am Wochenende: keine Tagesarbeitsstunden
|
||||
} else {
|
||||
hoursToAdd = fullDayHours + (hours || 0); // (Wochenarbeitszeit / Arbeitstage) Feiertag + gearbeitete Stunden (= Überstunden)
|
||||
}
|
||||
} else {
|
||||
hoursToAdd = hours || 0;
|
||||
// Wochenend-Prozentsatz anwenden (nur wenn weekend_travel aktiviert UND es ist ein Wochenendtag)
|
||||
@@ -488,6 +493,9 @@ function renderWeek() {
|
||||
}
|
||||
} else if (isSick) {
|
||||
hoursDisplay = fullDayHours.toFixed(2) + ' h (Krank)';
|
||||
} else if (isHoliday && isWeekend) {
|
||||
// Feiertag am Wochenende: keine Tagesarbeitsstunden
|
||||
hoursDisplay = (hours ? hours.toFixed(2) : '0') + ' h (Feiertag)';
|
||||
} else if (isHoliday && !hours) {
|
||||
hoursDisplay = fullDayHours.toFixed(2) + ' h (Feiertag)';
|
||||
} else if (isHoliday && hours) {
|
||||
@@ -818,7 +826,9 @@ function updateOvertimeDisplay() {
|
||||
} else if (sickStatus) {
|
||||
totalHours += fullDayHours; // Krank = (Wochenarbeitszeit / Arbeitstage) Stunden
|
||||
} else if (currentHolidayDates.has(dateStr)) {
|
||||
// Feiertag: (Wochenarbeitszeit / Arbeitstage) Basis + gearbeitete Stunden (jede Stunde = Überstunde)
|
||||
// Feiertag: Werktag = Basis + gearbeitete Stunden; Wochenende = nur gearbeitete Stunden (keine Tagesarbeitsstunden)
|
||||
const dayOfWeek = date.getDay();
|
||||
const isWeekendHoliday = (dayOfWeek === 6 || dayOfWeek === 0);
|
||||
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 startTime = startInput ? startInput.value : '';
|
||||
@@ -833,7 +843,11 @@ function updateOvertimeDisplay() {
|
||||
} else if (currentEntries[dateStr]?.total_hours) {
|
||||
worked = parseFloat(currentEntries[dateStr].total_hours) || 0;
|
||||
}
|
||||
totalHours += fullDayHours + worked; // (Wochenarbeitszeit / Arbeitstage) Feiertag + gearbeitete Stunden (= Überstunden)
|
||||
if (isWeekendHoliday) {
|
||||
totalHours += worked; // Feiertag am Wochenende: keine Tagesarbeitsstunden
|
||||
} else {
|
||||
totalHours += fullDayHours + worked; // (Wochenarbeitszeit / Arbeitstage) Feiertag + gearbeitete Stunden (= Überstunden)
|
||||
}
|
||||
} else {
|
||||
// Wenn 8 Überstunden (ganzer Tag) eingetragen sind, zählt der Tag als 0 Stunden
|
||||
if (isFullDayOvertime) {
|
||||
@@ -922,7 +936,8 @@ function updateOvertimeDisplay() {
|
||||
const totalHoursWithVacation = totalHours + vacationHours;
|
||||
const adjustedSollStunden = sollStunden - (fullDayOvertimeDays * fullDayHours);
|
||||
// overtimeHours = Überstunden diese Woche (wie im Backend berechnet)
|
||||
const overtimeHours = totalHoursWithVacation - adjustedSollStunden;
|
||||
// Genommene Überstunden werden abgezogen, um die Netto-Überstunden zu erhalten
|
||||
const overtimeHours = totalHoursWithVacation - adjustedSollStunden - overtimeTaken;
|
||||
|
||||
// Überstunden-Anzeige aktualisieren
|
||||
const overtimeSummaryItem = document.getElementById('overtimeSummaryItem');
|
||||
@@ -1206,8 +1221,12 @@ async function saveEntry(input) {
|
||||
currentEntries[date].total_hours = totalHours;
|
||||
} else {
|
||||
// Zurück zu normaler Anzeige basierend auf anderen Status
|
||||
const d = new Date(date);
|
||||
const isWeekendHoliday = isHoliday && (d.getDay() === 6 || d.getDay() === 0);
|
||||
if (isSick) {
|
||||
hoursElement.textContent = fullDayHours.toFixed(2) + ' h (Krank)';
|
||||
} else if (isWeekendHoliday) {
|
||||
hoursElement.textContent = (hours ? hours.toFixed(2) : '0') + ' h (Feiertag)';
|
||||
} else if (isHoliday && !hours) {
|
||||
hoursElement.textContent = fullDayHours.toFixed(2) + ' h (Feiertag)';
|
||||
} else if (isHoliday && hours) {
|
||||
@@ -1369,11 +1388,17 @@ async function saveEntry(input) {
|
||||
currentEntries[date].total_hours = totalHours;
|
||||
} else if (isSick) {
|
||||
hoursText = fullDayHours.toFixed(2) + ' h (Krank)';
|
||||
} else if (isHoliday && result.total_hours <= fullDayHours) {
|
||||
hoursText = fullDayHours.toFixed(2) + ' h (Feiertag)';
|
||||
} else if (isHoliday && result.total_hours > fullDayHours) {
|
||||
const overtime = result.total_hours - fullDayHours;
|
||||
hoursText = fullDayHours.toFixed(2) + ' + ' + overtime.toFixed(2) + ' h (Überst.)';
|
||||
} else if (isHoliday) {
|
||||
const d = new Date(date);
|
||||
const isWeekendHoliday = (d.getDay() === 6 || d.getDay() === 0);
|
||||
if (isWeekendHoliday) {
|
||||
hoursText = (result.total_hours || 0).toFixed(2) + ' h (Feiertag)';
|
||||
} else if (result.total_hours <= fullDayHours) {
|
||||
hoursText = fullDayHours.toFixed(2) + ' h (Feiertag)';
|
||||
} else {
|
||||
const overtime = result.total_hours - fullDayHours;
|
||||
hoursText = fullDayHours.toFixed(2) + ' + ' + overtime.toFixed(2) + ' h (Überst.)';
|
||||
}
|
||||
}
|
||||
|
||||
hoursElement.textContent = hoursText;
|
||||
@@ -1973,8 +1998,12 @@ function toggleSickStatus(dateStr) {
|
||||
currentEntries[dateStr].total_hours = fullDayHours;
|
||||
} else {
|
||||
// Zurück zu normaler Anzeige basierend auf anderen Status
|
||||
const d = new Date(dateStr);
|
||||
const isWeekendHoliday = isHoliday && (d.getDay() === 6 || d.getDay() === 0);
|
||||
if (isFullDayVacation) {
|
||||
hoursElement.textContent = fullDayHours.toFixed(2) + ' h (Urlaub)';
|
||||
} else if (isWeekendHoliday) {
|
||||
hoursElement.textContent = (hours ? hours.toFixed(2) : '0') + ' h (Feiertag)';
|
||||
} else if (isHoliday && !hours) {
|
||||
hoursElement.textContent = fullDayHours.toFixed(2) + ' h (Feiertag)';
|
||||
} else if (isHoliday && hours) {
|
||||
|
||||
@@ -7,12 +7,12 @@
|
||||
"theme_color": "#0a5ea8",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/public/images/icons/icon-192x192.png",
|
||||
"src": "/images/icons/icon-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/public/images/icons/icon-512x512.png",
|
||||
"src": "/images/icons/icon-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user