fix(hr): robust HD detection and added debug logs

This commit is contained in:
2026-04-28 18:03:37 +08:00
parent 2da3068962
commit 68dbf494c5

View File

@@ -925,11 +925,22 @@ class AttendanceRecordController extends Controller
];
$shift = $user->employee->shift ?? null;
$workingHours = $shift ? $shift->working_hours : 8;
$shiftStart = $shift ? \Carbon\Carbon::parse($shift->start_time)->format('H:i') : null;
$shiftEnd = $shift ? \Carbon\Carbon::parse($shift->end_time)->format('H:i') : null;
$clockInTime = $record->clock_in ? \Carbon\Carbon::parse($record->clock_in)->format('H:i') : null;
$clockOutTime = $record->clock_out ? \Carbon\Carbon::parse($record->clock_out)->format('H:i') : null;
$workingHours = $shift ? (float)$shift->working_hours : 8.0;
$shiftStartStr = $shift ? \Carbon\Carbon::parse($shift->start_time)->format('H:i') : null;
$shiftEndStr = $shift ? \Carbon\Carbon::parse($shift->end_time)->format('H:i') : null;
$clockInStr = $record->clock_in ? \Carbon\Carbon::parse($record->clock_in)->format('H:i') : null;
$clockOutStr = $record->clock_out ? \Carbon\Carbon::parse($record->clock_out)->format('H:i') : null;
if ($user->id == 10 && ($dateKey == '2026-04-04' || $dateKey == '2026-04-05')) {
\Log::info("Calendar Debug Dinh Chavez {$dateKey}:", [
'workedHours' => $workedHours,
'workingHours' => $workingHours,
'shiftStart' => $shiftStartStr,
'clockIn' => $clockInStr,
'is_late' => $record->is_late,
'db_status' => $record->status
]);
}
if ($record->is_rest_day) {
$status = 'RD';
@@ -943,14 +954,14 @@ class AttendanceRecordController extends Controller
} else if ($record->status === 'absent') {
$status = 'A';
$label = 'Absent';
} else if ($record->status === 'half_day' || ($workingHours > 0 && $workedHours > 0 && $workedHours < ($workingHours * 0.85))) {
// Using 85% threshold to be safe
} else if ($record->status === 'half_day' || ($workingHours > 0 && $workedHours > 0 && $workedHours < ($workingHours * 0.9))) {
// Using 90% threshold for Half Day
$status = 'H';
$label = 'Half Day';
} else if ($record->is_late || ($shiftStart && $clockInTime && $clockInTime > $shiftStart)) {
} else if ($record->is_late || ($shiftStartStr && $clockInStr && $clockInStr > $shiftStartStr)) {
$status = 'L';
$label = 'Late';
} else if ($record->is_early_departure || ($shiftEnd && $clockOutTime && $clockOutTime < $shiftEnd)) {
} else if ($record->is_early_departure || ($shiftEndStr && $clockOutStr && $clockOutStr < $shiftEndStr)) {
$status = 'E';
$label = 'Early Checkout';
} else if ($record->overtime_hours > 0) {