migrant-web/app/Http/Controllers/Admin/WorkerController.php
2026-06-03 14:22:56 +05:30

145 lines
4.4 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Inertia\Inertia;
class WorkerController extends Controller
{
/**
* Display a listing of all workers.
*/
public function index()
{
$workers = \App\Models\Worker::with('category')
->latest()
->get()
->map(function ($worker) {
return [
'id' => $worker->id,
'name' => $worker->name,
'email' => $worker->email,
'nationality' => $worker->nationality,
'category' => $worker->category ? $worker->category->name : 'N/A',
'experience' => $worker->experience,
'status' => $worker->status,
'availability' => $worker->availability,
'verified' => (bool)$worker->verified,
'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',
'category' => 'required|string',
'experience' => 'required|string',
'bio' => 'nullable|string'
]);
$worker = \App\Models\Worker::findOrFail($id);
$category = \App\Models\WorkerCategory::where('name', $validated['category'])->first();
if ($category) {
$worker->category_id = $category->id;
}
$worker->name = $validated['name'];
$worker->experience = $validated['experience'];
$worker->bio = $validated['bio'] ?? $worker->bio;
$worker->save();
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'));
}
}