ajax()) { $attendances = Attendance::with(['user', 'user.biography', 'attachments']) ->barbershop() ->when(in_array(auth()->user()->role_id, [4, 5]), function ($query) { return $query->where('user_id', auth()->id()); }); return DataTables::eloquent($attendances) ->addIndexColumn() ->editColumn('created_at', function ($item) { return formatDateIndo($item->created_at); }) ->addColumn('working_time', function ($item) { if ($item->check_in) { $checkIn = Carbon::parse($item->check_in); if (! $item->check_out && $item->created_at->isToday()) { $checkOut = now(); } elseif (! $item->check_out && ! $item->created_at->isToday()) { $checkOut = $checkIn->copy()->endOfDay(); } else { $checkOut = Carbon::parse($item->check_out); } $diff = $checkIn->diff($checkOut); if ($diff->h > 0) { return $diff->format('%h jam %i menit %s detik'); } else { return $diff->format('%i menit %s detik'); } } return '-'; }) ->editColumn('check_out', function ($item) { return $item->check_out ?: '-'; }) ->addColumn('check_in_image', function ($item) { if ($item->check_in) { $imageUrl = Storage::url("attendances/{$item->attachments->first()->formatted_attachment}"); return 'Check-in Image'; } return '-'; }) ->addColumn('check_out_image', function ($item) { if ($item->check_out) { $imageUrl = Storage::url("attendances/{$item->attachments()->latest()->first()->formatted_attachment}"); return 'Check-out Image'; } return '-'; }) ->rawColumns(['check_in_image', 'check_out_image']) ->make(); } return view('pages.admin.manage.attendances', [ 'pageTitle' => 'Kehadiran', 'checkInAttendance' => Attendance::with('attachments')->where('user_id', Auth::id())->whereDate('created_at', today())->first(), 'checkOutAttendance' => Attendance::with('attachments')->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, ! $checkInAttendance ? 'check_in' : 'check_out'); }); return response()->json([ 'status' => 'success', 'message' => 'Image saved successfully!', ], 200); } }