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:
@@ -1340,10 +1340,18 @@ class TimeEntryService {
|
|||||||
const originalEndTime = workEndUTC;
|
const originalEndTime = workEndUTC;
|
||||||
|
|
||||||
if (startFix) {
|
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) {
|
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
|
// Parse Zeit-String (YYYY-MM-DD HH:MM:SS) direkt
|
||||||
@@ -1462,10 +1470,16 @@ class TimeEntryService {
|
|||||||
const originalPEndTime = pEndTime;
|
const originalPEndTime = pEndTime;
|
||||||
|
|
||||||
if (pauseStartFix) {
|
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) {
|
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)
|
// Berechne Dauer (aus Strings)
|
||||||
@@ -1542,6 +1556,10 @@ class TimeEntryService {
|
|||||||
day.statusText = 'Abgeschlossen';
|
day.statusText = 'Abgeschlossen';
|
||||||
} else {
|
} else {
|
||||||
// Laufender Arbeitstag
|
// 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) => {
|
const parseTimeString = (timeStr) => {
|
||||||
if (typeof timeStr === 'string') {
|
if (typeof timeStr === 'string') {
|
||||||
const parts = timeStr.split(' ')[1]; // "HH:MM:SS"
|
const parts = timeStr.split(' ')[1]; // "HH:MM:SS"
|
||||||
@@ -1552,13 +1570,30 @@ class TimeEntryService {
|
|||||||
return { hours: timeStr.getHours(), minutes: timeStr.getMinutes() };
|
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 startHours = start.hours;
|
||||||
const startMinutes = start.minutes;
|
const startMinutes = start.minutes;
|
||||||
|
|
||||||
workBlock.workTime = `${startHours.toString().padStart(2,'0')}:${startMinutes.toString().padStart(2,'0')} - jetzt`;
|
workBlock.workTime = `${startHours.toString().padStart(2,'0')}:${startMinutes.toString().padStart(2,'0')} - jetzt`;
|
||||||
|
workBlock.workTimeFixed = !!startFix;
|
||||||
workBlock.completed = false;
|
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
|
// Prüfe auf Pausen NUR für diesen laufenden Arbeitsblock
|
||||||
const blockEntries = allEntries.filter(e => {
|
const blockEntries = allEntries.filter(e => {
|
||||||
// Parse state if it's a JSON string
|
// Parse state if it's a JSON string
|
||||||
|
|||||||
Reference in New Issue
Block a user