fix: correct exit time handling in calculateDay function and update tests
This commit is contained in:
@@ -96,7 +96,13 @@ function isValidWorkDay(day) {
|
||||
}
|
||||
|
||||
function calculateWorkedTime(entryTimes, exitTimes) {
|
||||
if (!entryTimes || !exitTimes || !Array.isArray(entryTimes) || !Array.isArray(exitTimes) || entryTimes.length === 0) {
|
||||
if (
|
||||
!entryTimes ||
|
||||
!exitTimes ||
|
||||
!Array.isArray(entryTimes) ||
|
||||
!Array.isArray(exitTimes) ||
|
||||
entryTimes.length === 0
|
||||
) {
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -144,7 +150,7 @@ function floatHoursToHHMM(decimalHours) {
|
||||
|
||||
function calculateDay(day) {
|
||||
// Create a mutable copy of exit times to potentially add the current time.
|
||||
const exitTimes = [...day.exitTime]
|
||||
// const exitTimes = [...day.exitTime]
|
||||
|
||||
// If there's one more entry than exits, it means the user is currently clocked in.
|
||||
if (day.entryTime.length > 0 && day.entryTime.length === day.exitTime.length + 1) {
|
||||
@@ -153,7 +159,7 @@ function calculateDay(day) {
|
||||
const mm = String(now.getMinutes()).padStart(2, '0')
|
||||
const ss = String(now.getSeconds()).padStart(2, '0')
|
||||
// Add the current time as the "exit" for the last entry.
|
||||
exitTimes.push(`${hh}:${mm}:${ss}`)
|
||||
day.exitTime.push(`${hh}:${mm}:${ss}`)
|
||||
}
|
||||
|
||||
if (day.entryTime.length === 0) {
|
||||
@@ -162,7 +168,7 @@ function calculateDay(day) {
|
||||
// The -0.25 for a 15-minute break seems to be a business rule.
|
||||
// It should probably only be subtracted once per day, not per interval.
|
||||
// Let's subtract it from the total.
|
||||
let totalHours = calculateWorkedTime(day.entryTime, exitTimes)
|
||||
let totalHours = calculateWorkedTime(day.entryTime, day.exitTime)
|
||||
if (totalHours > 0) {
|
||||
totalHours -= 0.25
|
||||
}
|
||||
|
||||
@@ -58,6 +58,7 @@ describe('calculateDay', () => {
|
||||
expect(day.workedHours).toBe(2.75)
|
||||
expect(day.overtime).toBe(2.75 - 8) // -5.25
|
||||
expect(totalHours).toBe(2.75)
|
||||
expect(day.exitTime[0]).toBe('12:00:00')
|
||||
|
||||
vi.useRealTimers()
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user