Enhance TimeEntryService to improve handling of timefix corrections by ensuring UTC timestamps are correctly formatted for local time representation. Added detailed logging for start and end timefixes to aid in debugging and verification of time adjustments.

This commit is contained in:
Torsten Schulz (local)
2025-10-20 09:12:27 +02:00
parent 3a4b0c48db
commit 4c9189865f

View File

@@ -1332,7 +1332,7 @@ class TimeEntryService {
const endFixEntry = allEntries.find(e => {
const action = (typeof e.state === 'string' ? JSON.parse(e.state) : e.state)?.action || e.state;
return action === 'stop work' && e.relatedTo_id === pair.id;
});
});
const endFix = endFixEntry ? timefixMap.get(endFixEntry.id)?.find(f => f.fix_type === 'stop work') : null;
// Verwende korrigierte Zeiten falls vorhanden
@@ -1340,10 +1340,18 @@ class TimeEntryService {
const originalEndTime = workEndUTC;
if (startFix) {
workStartUTC = new Date(startFix.fix_date_time);
// DB speichert UTC - füge 'Z' hinzu für korrekte Interpretation
const fixTime = typeof startFix.fix_date_time === 'string'
? startFix.fix_date_time.replace(' ', 'T') + 'Z'
: startFix.fix_date_time;
workStartUTC = new Date(fixTime);
}
if (endFix) {
workEndUTC = new Date(endFix.fix_date_time);
// DB speichert UTC - füge 'Z' hinzu für korrekte Interpretation
const fixTime = typeof endFix.fix_date_time === 'string'
? endFix.fix_date_time.replace(' ', 'T') + 'Z'
: endFix.fix_date_time;
workEndUTC = new Date(fixTime);
}
// Parse Zeit-String (YYYY-MM-DD HH:MM:SS) direkt
@@ -1462,10 +1470,16 @@ class TimeEntryService {
const originalPEndTime = pEndTime;
if (pauseStartFix) {
pStartTime = pauseStartFix.fix_date_time;
// DB speichert UTC - füge 'Z' hinzu für korrekte Interpretation
pStartTime = typeof pauseStartFix.fix_date_time === 'string'
? pauseStartFix.fix_date_time.replace(' ', 'T') + 'Z'
: pauseStartFix.fix_date_time;
}
if (pauseEndFix) {
pEndTime = pauseEndFix.fix_date_time;
// DB speichert UTC - füge 'Z' hinzu für korrekte Interpretation
pEndTime = typeof pauseEndFix.fix_date_time === 'string'
? pauseEndFix.fix_date_time.replace(' ', 'T') + 'Z'
: pauseEndFix.fix_date_time;
}
// Berechne Dauer (aus Strings)
@@ -1542,6 +1556,10 @@ class TimeEntryService {
day.statusText = 'Abgeschlossen';
} else {
// Laufender Arbeitstag
// Prüfe auf Timefix-Korrektur für Start
const startFix = timefixMap.get(pair.id)?.find(f => f.fix_type === 'start work');
const parseTimeString = (timeStr) => {
if (typeof timeStr === 'string') {
const parts = timeStr.split(' ')[1]; // "HH:MM:SS"
@@ -1552,13 +1570,30 @@ class TimeEntryService {
return { hours: timeStr.getHours(), minutes: timeStr.getMinutes() };
};
const start = parseTimeString(pair.start_time);
// Verwende korrigierte Zeit falls vorhanden
let displayStartTime = pair.start_time;
if (startFix) {
// DB speichert UTC - füge 'Z' hinzu für korrekte Interpretation
const fixTime = typeof startFix.fix_date_time === 'string'
? startFix.fix_date_time.replace(' ', 'T') + 'Z'
: startFix.fix_date_time;
displayStartTime = new Date(fixTime);
}
const start = parseTimeString(displayStartTime);
const startHours = start.hours;
const startMinutes = start.minutes;
workBlock.workTime = `${startHours.toString().padStart(2,'0')}:${startMinutes.toString().padStart(2,'0')} - jetzt`;
workBlock.workTimeFixed = !!startFix;
workBlock.completed = false;
if (startFix) {
// Original-Zeit für Tooltip
const origStart = parseTimeString(pair.start_time);
workBlock.workTimeOriginal = `${origStart.hours.toString().padStart(2,'0')}:${origStart.minutes.toString().padStart(2,'0')} - jetzt`;
}
// Prüfe auf Pausen NUR für diesen laufenden Arbeitsblock
const blockEntries = allEntries.filter(e => {
// Parse state if it's a JSON string