migrant-web/app/Http/Controllers/Admin/WorkerVerificationController.php
2026-05-15 17:40:21 +05:30

180 lines
6.7 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
use Inertia\Inertia;
class WorkerVerificationController extends Controller
{
/**
* Display a listing of worker identity verifications.
*/
public function index(Request $request)
{
$status = $request->input('status', 'all');
// Scaffolding mock dataset supporting pagination and status filtering
$allVerifications = [
[
'id' => 101,
'worker_name' => 'Fatima Zahra',
'nationality' => 'Morocco',
'passport_number' => 'MA9823471',
'processed_at' => '2026-05-14 10:15',
'status' => 'approved',
'verification_method' => 'Auto-OCR',
'document_images' => [
'https://images.unsplash.com/photo-1544717305-2782549b5136?q=80&w=600&auto=format&fit=crop',
'https://images.unsplash.com/photo-1573496359142-b8d87734a5a2?q=80&w=600&auto=format&fit=crop'
],
'ocr_data' => [
'Name' => 'Fatima Zahra',
'DOB' => '1992-08-14',
'Nationality' => 'Morocco',
'Passport No.' => 'MA9823471',
'Expiry' => '2030-11-20',
]
],
[
'id' => 102,
'worker_name' => 'Maria Santos',
'nationality' => 'Philippines',
'passport_number' => 'P1234567A',
'processed_at' => '2026-05-14 09:30',
'status' => 'approved',
'verification_method' => 'Auto-OCR',
'document_images' => [
'https://images.unsplash.com/photo-1580489944761-15a19d654956?q=80&w=600&auto=format&fit=crop'
],
'ocr_data' => [
'Name' => 'Maria Santos',
'DOB' => '1990-05-10',
'Nationality' => 'Philippines',
'Passport No.' => 'P1234567A',
'Expiry' => '2029-04-15',
]
],
[
'id' => 103,
'worker_name' => 'Amina Diop',
'nationality' => 'Senegal',
'passport_number' => 'SN8765432',
'processed_at' => '2026-05-13 14:20',
'status' => 'approved',
'verification_method' => 'Auto-OCR',
'document_images' => [
'https://images.unsplash.com/photo-1531746020798-e6953c6e8e04?q=80&w=600&auto=format&fit=crop'
],
'ocr_data' => [
'Name' => 'Amina Diop',
'DOB' => '1994-12-01',
'Nationality' => 'Senegal',
'Passport No.' => 'SN8765432',
'Expiry' => '2031-08-10',
]
],
[
'id' => 104,
'worker_name' => 'Siti Aminah',
'nationality' => 'Indonesia',
'passport_number' => 'B76543210',
'processed_at' => '2026-05-13 11:05',
'status' => 'approved',
'verification_method' => 'Auto-OCR',
'document_images' => [
'https://images.unsplash.com/photo-1534528741775-53994a69daeb?q=80&w=600&auto=format&fit=crop'
],
'ocr_data' => [
'Name' => 'Siti Aminah',
'DOB' => '1988-03-25',
'Nationality' => 'Indonesia',
'Passport No.' => 'B76543210',
'Expiry' => '2028-09-30',
]
],
[
'id' => 105,
'worker_name' => 'Grace Omondi',
'nationality' => 'Kenya',
'passport_number' => 'KE5432198',
'processed_at' => '2026-05-12 16:45',
'status' => 'approved',
'verification_method' => 'Auto-OCR',
'document_images' => [
'https://images.unsplash.com/photo-1567532939604-b6b5b0db2604?q=80&w=600&auto=format&fit=crop'
],
'ocr_data' => [
'Name' => 'Grace Omondi',
'DOB' => '1995-07-19',
'Nationality' => 'Kenya',
'Passport No.' => 'KE5432198',
'Expiry' => '2025-02-14',
]
],
[
'id' => 106,
'worker_name' => 'Leila Bekri',
'nationality' => 'Tunisia',
'passport_number' => 'TN4321987',
'processed_at' => '2026-05-12 10:10',
'status' => 'approved',
'verification_method' => 'Auto-OCR',
'document_images' => [
'https://images.unsplash.com/photo-1544005313-94ddf0286df2?q=80&w=600&auto=format&fit=crop'
],
'ocr_data' => [
'Name' => 'Leila Bekri',
'DOB' => '1991-09-08',
'Nationality' => 'Tunisia',
'Passport No.' => 'TN4321987',
'Expiry' => '2032-01-25',
]
],
];
// Filter by status
if ($status !== 'all') {
$filtered = array_filter($allVerifications, function ($item) use ($status) {
return $item['status'] === $status;
});
} else {
$filtered = $allVerifications;
}
$page = $request->input('page', 1);
$perPage = 20;
$total = count($filtered);
$slice = array_slice($filtered, ($page - 1) * $perPage, $perPage);
// Generate paginator
$paginator = new LengthAwarePaginator($slice, $total, $perPage, $page, [
'path' => $request->url(),
'query' => $request->query(),
]);
return Inertia::render('Admin/Workers/Verifications', [
'verifications' => $paginator,
'status' => $status,
]);
}
/**
* Process verification approval or rejection.
*/
public function verify(Request $request, $worker)
{
$validated = $request->validate([
'action' => 'required|in:approve,reject',
'rejection_reason' => 'required_if:action,reject|nullable|string',
'ocr_overrides' => 'nullable|array',
]);
$statusMsg = $validated['action'] === 'approve' ? 'approved' : 'rejected';
return back()->with('success', "Worker verification #{$worker} has been {$statusMsg} successfully.");
}
}