fix: create startOfTour from startBegin on same day as tour start

This commit is contained in:
Marcel Arndt 2025-06-30 07:55:14 +02:00
parent b9fd09a79f
commit c2b5f55d2d
1 changed files with 9 additions and 12 deletions

View File

@ -2,15 +2,15 @@ import { Logger } from '@nestjs/common';
import { Anomaly, Employee, Prisma, Tour } from '@prisma/client'; import { Anomaly, Employee, Prisma, Tour } from '@prisma/client';
import { import {
Interval, Interval,
addDays,
addMilliseconds, addMilliseconds,
addMinutes, addMinutes,
differenceInMinutes,
format, format,
getHours,
getMinutes,
isBefore, isBefore,
isWithinInterval, isWithinInterval,
set, set,
subMilliseconds, subMilliseconds
} from 'date-fns'; } from 'date-fns';
import { getTimezoneOffset, toZonedTime } from 'date-fns-tz'; import { getTimezoneOffset, toZonedTime } from 'date-fns-tz';
@ -108,7 +108,7 @@ export class EmployeesLoggedInDetector extends AnomalyDetector {
startOfTour, startOfTour,
getTimezoneOffset('Europe/Berlin', startOfTour), getTimezoneOffset('Europe/Berlin', startOfTour),
), ),
'HH:mm', 'dd.MM.yy HH:mm',
)}`, )}`,
}, },
...(attendanceInterval ...(attendanceInterval
@ -119,7 +119,7 @@ export class EmployeesLoggedInDetector extends AnomalyDetector {
attendanceInterval.start, attendanceInterval.start,
getTimezoneOffset('Europe/Berlin', startOfTour), getTimezoneOffset('Europe/Berlin', startOfTour),
), ),
'HH:mm', 'dd.MM.yy HH:mm',
)}${ )}${
attendanceInterval.end attendanceInterval.end
? ` - ${format( ? ` - ${format(
@ -363,16 +363,13 @@ export class EmployeesLoggedInDetector extends AnomalyDetector {
if (!startBegin) return null; if (!startBegin) return null;
const [hours, minutes] = startBegin.split(':').map((v) => +v); const [hours, minutes] = startBegin.split(':').map((v) => +v);
const tempDate = subMilliseconds( let modifiedTime = subMilliseconds(
set(startDate, { hours, minutes }), set(startDate, { hours, minutes }),
getTimezoneOffset('Europe/Berlin', startDate), getTimezoneOffset('Europe/Berlin', startDate),
); );
const hourValue = getHours(tempDate); if (differenceInMinutes(modifiedTime, startDate) / 60 < -4) {
const minuteValue = getMinutes(tempDate); modifiedTime = addDays(modifiedTime, 1);
const modifiedTime = set(startDate, { }
hours: hourValue,
minutes: minuteValue,
});
// this.logger.debug( // this.logger.debug(
// `getStartOfTour(${startDate.toISOString()}, ${startBegin}): ${modifiedTime.toISOString()}`, // `getStartOfTour(${startDate.toISOString()}, ${startBegin}): ${modifiedTime.toISOString()}`,