with(['employerProfile', 'sponsor']); // Search if ($request->filled('search')) { $search = $request->input('search'); $query->where(function($q) use ($search) { $q->where('name', 'like', "%{$search}%") ->orWhere('email', 'like', "%{$search}%") ->orWhereHas('employerProfile', function($qp) use ($search) { $qp->where('company_name', 'like', "%{$search}%") ->orWhere('phone', 'like', "%{$search}%"); }); }); } // Status filter (on sponsor status) if ($request->filled('status') && $request->input('status') !== 'All') { $status = strtolower($request->input('status')); $query->whereHas('sponsor', function($qs) use ($status) { $qs->where('status', $status); }); } // Location filter if ($request->filled('location') && $request->input('location') !== 'All') { $location = $request->input('location'); $query->whereHas('employerProfile', function($qp) use ($location) { $qp->where('country', $location); }); } // Sorting $sortField = $request->input('sort_field', 'created_at'); $sortOrder = $request->input('sort_order', 'desc'); if (in_array($sortField, ['name', 'email', 'created_at'])) { $query->orderBy($sortField, $sortOrder); } else { $query->orderBy('created_at', 'desc'); } $employers = $query->paginate(10)->withQueryString(); // Transform results to format status correctly from sponsor $employers->getCollection()->transform(function($emp) { $emp->status = $emp->sponsor ? $emp->sponsor->status : 'active'; return $emp; }); return Inertia::render('Admin/Employers/Index', [ 'employers' => $employers, 'sponsors' => $employers, 'filters' => $request->only(['search', 'status', 'location', 'sort_field', 'sort_order']) ]); } /** * Export employers as CSV. */ public function export(Request $request) { $query = User::where('role', 'employer')->with(['employerProfile', 'sponsor']); // Search if ($request->filled('search')) { $search = $request->input('search'); $query->where(function($q) use ($search) { $q->where('name', 'like', "%{$search}%") ->orWhere('email', 'like', "%{$search}%") ->orWhereHas('employerProfile', function($qp) use ($search) { $qp->where('company_name', 'like', "%{$search}%") ->orWhere('phone', 'like', "%{$search}%"); }); }); } // Status filter if ($request->filled('status') && $request->input('status') !== 'All') { $status = strtolower($request->input('status')); $query->whereHas('sponsor', function($qs) use ($status) { $qs->where('status', $status); }); } $employers = $query->get(); $headers = [ "Content-type" => "text/csv", "Content-Disposition" => "attachment; filename=employers_export_" . date('Ymd_His') . ".csv", "Pragma" => "no-cache", "Cache-Control" => "must-revalidate, post-check=0, pre-check=0", "Expires" => "0" ]; $columns = ['ID', 'Name', 'Email', 'Company Name', 'Phone', 'Country', 'Status', 'Subscription Status', 'Created At']; $callback = function() use ($employers, $columns) { $file = fopen('php://output', 'w'); fputcsv($file, $columns); foreach ($employers as $emp) { fputcsv($file, [ $emp->id, $emp->name, $emp->email, $emp->employerProfile->company_name ?? 'N/A', $emp->employerProfile->phone ?? 'N/A', $emp->employerProfile->country ?? 'N/A', $emp->sponsor ? $emp->sponsor->status : 'active', $emp->subscription_status ?? 'none', $emp->created_at ? $emp->created_at->toDateTimeString() : 'N/A', ]); } fclose($file); }; return response()->stream($callback, 200, $headers); } /** * Verify / approve employer profile. */ public function verify($id) { $user = User::where('role', 'employer')->findOrFail($id); if ($user->employerProfile) { $user->employerProfile->update([ 'verification_status' => 'approved' ]); } $sponsor = Sponsor::where('email', $user->email)->first(); if ($sponsor) { $sponsor->update([ 'is_verified' => true, 'status' => 'active' ]); } return back()->with('success', "Employer '{$user->name}' profile verified and activated successfully."); } /** * Suspend an employer. */ public function suspend($id) { $user = User::where('role', 'employer')->findOrFail($id); $sponsor = Sponsor::where('email', $user->email)->first(); if ($sponsor) { $sponsor->update(['status' => 'suspended']); } return back()->with('success', "Employer '{$user->name}' suspended successfully."); } /** * Activate a suspended/inactive employer. */ public function activate($id) { $user = User::where('role', 'employer')->findOrFail($id); $sponsor = Sponsor::where('email', $user->email)->first(); if ($sponsor) { $sponsor->update(['status' => 'active']); } return back()->with('success', "Employer '{$user->name}' activated successfully."); } /** * Delete an employer. */ public function delete($id) { $user = User::where('role', 'employer')->findOrFail($id); $name = $user->name; $sponsor = Sponsor::where('email', $user->email)->first(); if ($sponsor) { $sponsor->delete(); } if ($user->employerProfile) { $user->employerProfile->delete(); } $user->delete(); return back()->with('success', "Employer '{$name}' deleted successfully."); } /** * Update an employer's fields. */ public function update(Request $request, $id) { $user = User::where('role', 'employer')->findOrFail($id); $validated = $request->validate([ 'name' => 'required|string|max:255', 'email' => 'required|email|unique:users,email,' . $user->id, 'company_name' => 'nullable|string|max:255', 'phone' => 'nullable|string', 'country' => 'nullable|string', 'subscription_status' => 'nullable|string', ]); $user->update([ 'name' => $validated['name'], 'email' => $validated['email'], 'subscription_status' => $validated['subscription_status'] ?? $user->subscription_status, ]); if ($user->employerProfile) { $user->employerProfile->update([ 'company_name' => $validated['company_name'] ?? $user->employerProfile->company_name, 'phone' => $validated['phone'] ?? $user->employerProfile->phone, 'country' => $validated['country'] ?? $user->employerProfile->country, ]); } else { EmployerProfile::create([ 'user_id' => $user->id, 'company_name' => $validated['company_name'], 'phone' => $validated['phone'], 'country' => $validated['country'], ]); } $sponsor = Sponsor::where('email', $user->email)->first(); if ($sponsor) { $sponsor->update([ 'full_name' => $validated['name'], 'email' => $validated['email'], 'mobile' => $validated['phone'] ?? $sponsor->mobile, 'organization_name' => $validated['company_name'] ?? $sponsor->organization_name, 'city' => $validated['country'] ?? $sponsor->city, ]); } return back()->with('success', "Employer details saved successfully."); } }