|
|
|
@ -4,10 +4,15 @@ const mins = document.getElementById('minuten');
|
|
|
|
const NewEntryButton = document.getElementById('newEntrySubmitButton')
|
|
|
|
const NewEntryButton = document.getElementById('newEntrySubmitButton')
|
|
|
|
const SETStudySaveButton = document.getElementById('SETStudySaveButton')
|
|
|
|
const SETStudySaveButton = document.getElementById('SETStudySaveButton')
|
|
|
|
const SETMonthGoalSaveButton = document.getElementById('SETMonthGoalSaveButton')
|
|
|
|
const SETMonthGoalSaveButton = document.getElementById('SETMonthGoalSaveButton')
|
|
|
|
|
|
|
|
const rule55hCheck = document.getElementById('rule55hCheck')
|
|
|
|
var allowToSend = false;
|
|
|
|
var allowToSend = false;
|
|
|
|
const monate = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
|
|
|
|
const monate = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
|
|
|
|
const currentDate = new Date();
|
|
|
|
const currentDate = new Date();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 55h-Regel (Jahresansicht): wird beim Start aus den Settings geladen und beim Umschalten
|
|
|
|
|
|
|
|
// live aktualisiert, damit getActualDataAndFillView() sie synchron verwenden kann.
|
|
|
|
|
|
|
|
var rule55Active = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// Trigger
|
|
|
|
// Trigger
|
|
|
|
@ -15,10 +20,13 @@ const currentDate = new Date();
|
|
|
|
|
|
|
|
|
|
|
|
// Wenn das Dokument komplett geladen ist
|
|
|
|
// Wenn das Dokument komplett geladen ist
|
|
|
|
document.addEventListener('DOMContentLoaded', (event) => {
|
|
|
|
document.addEventListener('DOMContentLoaded', (event) => {
|
|
|
|
initDB().then(() => {
|
|
|
|
initDB().then(async () => {
|
|
|
|
console.log('IndexedDB erfolgreich initialisiert.');
|
|
|
|
console.log('IndexedDB erfolgreich initialisiert.');
|
|
|
|
// Hier kannst du die App weiter initialisieren, z.B. Daten laden oder die UI aufbauen
|
|
|
|
// Hier kannst du die App weiter initialisieren, z.B. Daten laden oder die UI aufbauen
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 55h-Regel Einstellung laden, bevor die erste Jahresansicht berechnet wird
|
|
|
|
|
|
|
|
await loadRule55Setting();
|
|
|
|
|
|
|
|
|
|
|
|
// Bildschirm mit dem Inhalt für den aktuellen Tag füllen
|
|
|
|
// Bildschirm mit dem Inhalt für den aktuellen Tag füllen
|
|
|
|
getActualDataAndFillView();
|
|
|
|
getActualDataAndFillView();
|
|
|
|
|
|
|
|
|
|
|
|
@ -28,6 +36,46 @@ document.addEventListener('DOMContentLoaded', (event) => {
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Lädt die 55h-Regel Einstellung (SettingsID 3) aus der DB, setzt rule55Active
|
|
|
|
|
|
|
|
// und synchronisiert die Checkbox sowie den Badge in der Jahres-Card.
|
|
|
|
|
|
|
|
async function loadRule55Setting() {
|
|
|
|
|
|
|
|
const result = await getAllEntries('settings')
|
|
|
|
|
|
|
|
const setting = result.find(element => element.SettingsID === 3)
|
|
|
|
|
|
|
|
rule55Active = (setting == undefined) ? false : !!parseInt(setting.SettingsValue)
|
|
|
|
|
|
|
|
rule55hCheck.checked = rule55Active
|
|
|
|
|
|
|
|
updateRule55Badge()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Zeigt/versteckt den "55h-Regel aktiv"-Hinweis an der Jahres-Card
|
|
|
|
|
|
|
|
function updateRule55Badge() {
|
|
|
|
|
|
|
|
document.getElementById('rule55Badge').classList.toggle('d-none', !rule55Active)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Einstellungen wenn die 55h-Regel umgeschaltet wird
|
|
|
|
|
|
|
|
rule55hCheck.addEventListener('change', () => {
|
|
|
|
|
|
|
|
rule55Active = rule55hCheck.checked
|
|
|
|
|
|
|
|
updateRule55Badge()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const Rule55SettingsData = {
|
|
|
|
|
|
|
|
SettingsID: 3,
|
|
|
|
|
|
|
|
SettingsValue: rule55Active ? 1 : 0,
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
getAllEntries('settings')
|
|
|
|
|
|
|
|
.then(function(result) {
|
|
|
|
|
|
|
|
const SETDBData = result.find(element => element.SettingsID === 3)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (SETDBData != undefined) {
|
|
|
|
|
|
|
|
updateEntry(SETDBData.id, 'settings', Rule55SettingsData)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
addEntry(Rule55SettingsData, 'settings')
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Jahresansicht mit/ohne Deckel neu berechnen
|
|
|
|
|
|
|
|
getActualDataAndFillView(cursorMonth, cursorYear)
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Änderungen überwachen damit die das Formular nicht zu früh abgesendet wird
|
|
|
|
// Änderungen überwachen damit die das Formular nicht zu früh abgesendet wird
|
|
|
|
@ -216,12 +264,15 @@ async function getActualDataAndFillView(monat = currentDate.getMonth(), jahr = c
|
|
|
|
document.getElementById('monthHourOther').innerText = formatDuration(sumDurations(filteredEntries,3,true), true)
|
|
|
|
document.getElementById('monthHourOther').innerText = formatDuration(sumDurations(filteredEntries,3,true), true)
|
|
|
|
|
|
|
|
|
|
|
|
// Jahres Ansicht füllen (Dienstjahr, gekoppelt an den gerade angezeigten Monat/Jahr)
|
|
|
|
// Jahres Ansicht füllen (Dienstjahr, gekoppelt an den gerade angezeigten Monat/Jahr)
|
|
|
|
|
|
|
|
// Bei aktiver 55h-Regel wird jeder Monat mit LDC/Sonstiges-Anteil auf max. 55h gedeckelt,
|
|
|
|
|
|
|
|
// reine Dienststunden zählen dabei immer voll (siehe calculateServiceYearTotal).
|
|
|
|
var requestServiceYear = getServiceYear(new Date(jahr, monat, 1));
|
|
|
|
var requestServiceYear = getServiceYear(new Date(jahr, monat, 1));
|
|
|
|
var yearData = await filterEntriesByServiceYear(requestServiceYear)
|
|
|
|
var yearEntries = await filterEntriesByServiceYear(requestServiceYear)
|
|
|
|
yearData = formatDuration(sumDurations(yearData, null, true), true)
|
|
|
|
var yearData = formatDuration(calculateServiceYearTotal(yearEntries, rule55Active), true)
|
|
|
|
document.getElementById('yearHours').innerText = yearData
|
|
|
|
document.getElementById('yearHours').innerText = yearData
|
|
|
|
document.getElementById('yearRest').innerText = 600 - parseInt(yearData)
|
|
|
|
document.getElementById('yearRest').innerText = 600 - parseInt(yearData)
|
|
|
|
document.getElementById('prBarYear').style.width = `${Math.round((100/600)*parseInt(yearData))}%`
|
|
|
|
document.getElementById('prBarYear').style.width = `${Math.round((100/600)*parseInt(yearData))}%`
|
|
|
|
|
|
|
|
updateRule55Badge()
|
|
|
|
|
|
|
|
|
|
|
|
} catch (error) {
|
|
|
|
} catch (error) {
|
|
|
|
console.error('Fehler bei der Initialisierung oder Filterung:', error);
|
|
|
|
console.error('Fehler bei der Initialisierung oder Filterung:', error);
|
|
|
|
|