ajax()) {
$attendances = Attendance::query();
return DataTables::eloquent($attendances)
->addIndexColumn()
->addColumn('working_time', function ($item) {
if ($item->check_in) {
$checkIn = Carbon::parse($item->check_in);
$checkOut = $item->check_out ? Carbon::parse($item->check_out) : Carbon::today()->endOfDay(); // Akhir hari: 23:59
$diff = $checkIn->diff($checkOut);
if ($diff->h > 0) {
return $diff->format('%h jam %i menit');
} else {
return $diff->format('%i menit');
}
}
return '-';
})
->addColumn('check_in_image', function ($item) {
if ($item->check_in) {
$imageUrl = Storage::url("attendances/{$item->attachments->first()->formatted_attachment}");
return '
';
}
return '-';
})
->addColumn('check_out_image', function ($item) {
if ($item->check_out) {
$imageUrl = Storage::url("attendances/{$item->attachments()->latest()->first()->formatted_attachment}");
return '
';
}
return '-';
})
->rawColumns(['check_in_image', 'check_out_image'])
->make();
}
return view('pages.admin.manage.attendances', [
'pageTitle' => 'Kehadiran',
'checkInAttendance' => Attendance::where('user_id', Auth::id())->whereDate('created_at', today())->first(),
'checkOutAttendance' => Attendance::where('user_id', Auth::id())->whereDate('created_at', today())->whereNotNull('check_out')->first(),
]);
}
public function store(AttendanceRequest $request): JsonResponse
{
$validatedData = $request->validated();
$checkInAttendance = Attendance::where('user_id', Auth::id())->whereDate('created_at', today())->first();
DB::transaction(function () use ($validatedData, $checkInAttendance) {
if (! $checkInAttendance) {
$newAttendance = Attendance::create([
'user_id' => Auth::id(),
'barbershop_id' => Auth::user()->barbershop_id,
'check_in' => now(),
]);
} else {
$newAttendance = $checkInAttendance;
$newAttendance->update([
'check_out' => now(),
]);
}
$this->uploadAttachment($validatedData['image'], 'attendances', Attendance::class, $newAttendance->id);
});
return response()->json([
'status' => 'success',
'message' => 'Image saved successfully!',
], 200);
}
}