input('search.value', ''); if (!empty($search)) { $data->where(function ($query) use ($search) { $query->where('category', 'like', '%' . $search . '%') ->orWhere('reason', 'like', '%' . $search . '%') ->orWhereHas('user', function ($q) use ($search) { $q->where('name', 'like', '%' . $search . '%') ->orWhereHas('profile', function ($p) use ($search) { $p->where('nip', 'like', '%' . $search . '%'); }); }); }); } if ($request->has('status') && !empty($request->status)) { $data->where('status', $request->status); } if ($request->has('category') && !empty($request->category)) { $data->where('category', $request->category); } if ($request->has('start_date') && !empty($request->start_date)) { $data->where('start_date', '>=', $request->start_date); } if ($request->has('end_date') && !empty($request->end_date)) { $data->where('end_date', '<=', $request->end_date); } $total_data = $data->get()->count(); $length = intval($request->input('length', 0)); $start = intval($request->input('start', 0)); $data = $data->orderBy("created_at", "desc"); if (!$length && !$start) { $data = $data->get(); } else { $data = $data->skip($start)->take($length)->get(); } return response()->json([ 'message' => 'Data berhasil diambil.', 'data' => $data, 'draw' => $request->input('draw'), 'recordsTotal' => $total_data, 'recordsFiltered' => $total_data, ], 200); } public function show(string $id) { $data = Permission::with(['user.profile', 'approver'])->find($id); if (!$data) { return response()->json([ 'message' => 'Data tidak ditemukan.', 'data' => null ], 422); } return response()->json([ 'message' => 'Data berhasil diambil.', 'data' => $data ], 200); } public function approve(Request $request, string $id) { $permission = Permission::find($id); if (!$permission) { return response()->json([ 'message' => 'Data tidak ditemukan.', 'data' => null ], 422); } $validator = Validator::make($request->all(), [ 'status' => 'required|in:accepted,rejected', ]); if ($validator->fails()) { return response()->json([ 'message' => Str::ucfirst($validator->errors()->first()), 'data' => null ], 422); } $permission->update([ 'status' => $request->status, 'approved_by' => $request->user()->id, 'approved_at' => now(), ]); $message = $request->status === 'accepted' ? 'Izin berhasil disetujui.' : 'Izin berhasil ditolak.'; return response()->json([ 'message' => $message, 'data' => $permission->load(['user.profile', 'approver']) ], 200); } public function statistics(Request $request) { $thisMonth = now()->format('Y-m'); $stats = [ 'total' => Permission::count(), 'pending' => Permission::where('status', 'pending')->count(), 'approved' => Permission::where('status', 'accepted')->count(), 'rejected' => Permission::where('status', 'rejected')->count(), 'this_month' => [ 'total' => Permission::where('created_at', 'like', $thisMonth . '%')->count(), 'pending' => Permission::where('created_at', 'like', $thisMonth . '%')->where('status', 'pending')->count(), 'approved' => Permission::where('created_at', 'like', $thisMonth . '%')->where('status', 'accepted')->count(), 'rejected' => Permission::where('created_at', 'like', $thisMonth . '%')->where('status', 'rejected')->count(), ] ]; return response()->json([ 'message' => 'Statistik berhasil diambil.', 'data' => $stats ], 200); } }