latest() ->get() ->map(function ($worker) { // Map languages from database comma-separated string $langs = $worker->language ? array_map('trim', explode(',', $worker->language)) : ['English']; // Map skills dynamically from database $mappedSkills = $worker->skills->pluck('name')->toArray(); if (empty($mappedSkills)) { $mappedSkills = ['cooking', 'cleaning']; } // Preferred job types: full-time / part-time / live-in / live-out $jobTypes = ['full-time', 'part-time', 'live-in', 'live-out']; $preferredJobType = $worker->preferred_job_type ?? $jobTypes[$worker->id % 4]; return [ 'id' => $worker->id, 'name' => $worker->name, 'email' => $worker->email, 'phone' => $worker->phone, 'gender' => $worker->gender ?? 'Female', 'age' => $worker->age, 'religion' => $worker->religion, 'visa_status' => $worker->visa_status, 'in_country' => (bool)$worker->in_country, 'language' => $worker->language ?? 'English', 'languages' => $langs, 'nationality' => $worker->nationality, 'country' => $worker->country, 'city' => $worker->city, 'area' => $worker->area, 'preferred_location' => $worker->preferred_location, 'live_in_out' => $worker->live_in_out ?? 'Live-in', 'experience' => $worker->experience, 'salary' => (int)$worker->salary, 'skills' => $mappedSkills, 'preferred_job_type' => $preferredJobType, 'status' => $worker->status, 'availability' => $worker->availability, 'verified' => (bool)$worker->verified, 'bio' => $worker->bio, 'documents' => $worker->documents, 'joined_at' => $worker->created_at ? $worker->created_at->format('Y-m-d') : 'N/A', ]; }); return Inertia::render('Admin/Workers/Index', [ 'workers' => $workers, ]); } /** * Toggle worker active/inactive status. */ public function toggleStatus(Request $request, $id) { $validated = $request->validate([ 'status' => 'required|in:active,inactive,suspended,banned', ]); $worker = \App\Models\Worker::findOrFail($id); $worker->status = $validated['status']; $worker->save(); return back()->with('success', "Worker status has been updated to {$validated['status']}."); } /** * Override worker availability. */ public function availabilityOverride(Request $request, $id) { $validated = $request->validate([ 'availability' => 'required|string', ]); $worker = \App\Models\Worker::findOrFail($id); $worker->availability = $validated['availability']; $worker->save(); return back()->with('success', "Worker availability has been overridden to '{$validated['availability']}' successfully."); } /** * Flag worker as fraudulent or suspicious. */ public function flagFraud(Request $request, $id) { $validated = $request->validate([ 'is_fraud' => 'required|boolean', 'reason' => 'nullable|string' ]); $worker = \App\Models\Worker::findOrFail($id); $worker->status = $validated['is_fraud'] ? 'suspended' : 'active'; $worker->save(); $statusStr = $validated['is_fraud'] ? 'FLAGGED FOR FRAUD' : 'UNFLAGGED'; return back()->with('success', "Worker #{$id} has been {$statusStr}. Notes: {$validated['reason']}"); } /** * Moderation profile updates. */ public function updateProfile(Request $request, $id) { $validated = $request->validate([ 'name' => 'required|string', 'phone' => 'required|string', 'gender' => 'nullable|string', 'language' => 'nullable|string', 'preferred_location' => 'nullable|string', 'live_in_out' => 'nullable|string', 'experience' => 'required|string', 'salary' => 'nullable|numeric', 'nationality' => 'nullable|string', 'visa_status' => 'nullable|string|in:Tourist Visa,Employment Visa,Residence Visa', 'age' => 'nullable|integer', 'in_country' => 'nullable', 'preferred_job_type' => 'nullable|string', 'skills' => 'nullable|string', ]); $worker = \App\Models\Worker::findOrFail($id); $worker->name = $validated['name']; $worker->phone = $validated['phone']; $worker->gender = $validated['gender'] ?? $worker->gender; $worker->language = $validated['language'] ?? $worker->language; $worker->preferred_location = $validated['preferred_location'] ?? $worker->preferred_location; $worker->live_in_out = $validated['live_in_out'] ?? $worker->live_in_out; $worker->experience = $validated['experience']; $worker->salary = $validated['salary'] ?? $worker->salary; $worker->nationality = $validated['nationality'] ?? $worker->nationality; $worker->visa_status = $validated['visa_status'] ?? $worker->visa_status; $worker->age = $validated['age'] ?? $worker->age; if (isset($validated['in_country'])) { $worker->in_country = filter_var($validated['in_country'], FILTER_VALIDATE_BOOLEAN); } $worker->preferred_job_type = $validated['preferred_job_type'] ?? $worker->preferred_job_type; $worker->save(); if ($request->has('skills')) { $skillsArray = array_filter(array_map('trim', explode(',', $validated['skills'] ?? ''))); $skillIds = []; foreach ($skillsArray as $name) { $skill = \App\Models\Skill::firstOrCreate(['name' => $name]); $skillIds[] = $skill->id; } $worker->skills()->sync($skillIds); } return back()->with('success', "Worker #{$id} profile details moderated and updated successfully."); } /** * Verify an employer's company details. */ public function verifyEmployer(Request $request, $id) { $sponsor = \App\Models\Sponsor::findOrFail($id); $sponsor->is_verified = true; $sponsor->save(); return back()->with('success', "Employer #{$id} verification status set to APPROVED."); } /** * Suspend employer. */ public function suspendEmployer(Request $request, $id) { $validated = $request->validate([ 'reason' => 'nullable|string' ]); $sponsor = \App\Models\Sponsor::findOrFail($id); $sponsor->status = 'suspended'; $sponsor->save(); return back()->with('success', "Employer #{$id} has been suspended. Reason: " . ($validated['reason'] ?? 'Unspecified violation')); } }