This commit is contained in:
mohanmd 2026-06-30 11:57:40 +05:30
commit 4a77c7689c
13 changed files with 384 additions and 312 deletions

View File

@ -234,6 +234,8 @@ public function register(Request $request)
$emiratesIdEmployer = null; $emiratesIdEmployer = null;
$emiratesIdIssuePlace = null; $emiratesIdIssuePlace = null;
$emiratesIdOccupation = null; $emiratesIdOccupation = null;
$emiratesIdCardNumber = null;
$emiratesIdGender = null;
if (is_array($emiratesIdInput)) { if (is_array($emiratesIdInput)) {
$emiratesIdNumber = $emiratesIdInput['emirates_id_number'] ?? $emiratesIdInput['id_number'] ?? $emiratesIdInput['id number'] ?? $emiratesIdInput['card_number'] ?? null; $emiratesIdNumber = $emiratesIdInput['emirates_id_number'] ?? $emiratesIdInput['id_number'] ?? $emiratesIdInput['id number'] ?? $emiratesIdInput['card_number'] ?? null;
@ -244,10 +246,12 @@ public function register(Request $request)
} }
$emiratesIdDob = $emiratesIdInput['date_of_birth'] ?? $emiratesIdInput['date of birth'] ?? $emiratesIdInput['dob'] ?? null; $emiratesIdDob = $emiratesIdInput['date_of_birth'] ?? $emiratesIdInput['date of birth'] ?? $emiratesIdInput['dob'] ?? null;
$emiratesIdNationality = $emiratesIdInput['nationality'] ?? null; $emiratesIdNationality = $emiratesIdInput['nationality'] ?? null;
$emiratesIdGender = $emiratesIdInput['gender'] ?? $emiratesIdInput['sex'] ?? null;
$emiratesIdIssueDate = $emiratesIdInput['issue_date'] ?? $emiratesIdInput['issue date'] ?? null; $emiratesIdIssueDate = $emiratesIdInput['issue_date'] ?? $emiratesIdInput['issue date'] ?? null;
$emiratesIdEmployer = $emiratesIdInput['employer'] ?? null; $emiratesIdEmployer = $emiratesIdInput['employer'] ?? null;
$emiratesIdIssuePlace = $emiratesIdInput['issue_place'] ?? $emiratesIdInput['issue place'] ?? null; $emiratesIdIssuePlace = $emiratesIdInput['issue_place'] ?? $emiratesIdInput['issue place'] ?? $emiratesIdInput['issuing_place'] ?? null;
$emiratesIdOccupation = $emiratesIdInput['occupation'] ?? $emiratesIdInput['occuption'] ?? null; $emiratesIdOccupation = $emiratesIdInput['occupation'] ?? $emiratesIdInput['occuption'] ?? null;
$emiratesIdCardNumber = $emiratesIdInput['card_number'] ?? null;
} }
// Create inactive User // Create inactive User
@ -279,6 +283,9 @@ public function register(Request $request)
'emirates_id_employer' => $emiratesIdEmployer, 'emirates_id_employer' => $emiratesIdEmployer,
'emirates_id_issue_place' => $emiratesIdIssuePlace, 'emirates_id_issue_place' => $emiratesIdIssuePlace,
'emirates_id_occupation' => $emiratesIdOccupation, 'emirates_id_occupation' => $emiratesIdOccupation,
'emirates_id_nationality' => $emiratesIdNationality,
'emirates_id_gender' => $emiratesIdGender,
'emirates_id_card_number' => $emiratesIdCardNumber,
'address' => $request->address, 'address' => $request->address,
]); ]);
@ -299,6 +306,17 @@ public function register(Request $request)
'status' => 'inactive', 'status' => 'inactive',
'fcm_token' => $request->fcm_token, 'fcm_token' => $request->fcm_token,
'emirates_id' => $emiratesIdNumber, 'emirates_id' => $emiratesIdNumber,
'emirates_id_card_number' => $emiratesIdCardNumber,
'emirates_id_name' => $emiratesIdName,
'emirates_id_dob' => $emiratesIdDob,
'emirates_id_issue_date' => $emiratesIdIssueDate,
'emirates_id_expiry' => $emiratesIdExpiry,
'emirates_id_employer' => $emiratesIdEmployer,
'emirates_id_issue_place' => $emiratesIdIssuePlace,
'emirates_id_occupation' => $emiratesIdOccupation,
'emirates_id_nationality' => $emiratesIdNationality,
'emirates_id_gender' => $emiratesIdGender,
'nationality' => $emiratesIdNationality,
'address' => $request->address, 'address' => $request->address,
]); ]);

View File

@ -38,34 +38,23 @@ public function getProfile(Request $request)
'name' => $employer->name, 'name' => $employer->name,
'email' => $employer->email, 'email' => $employer->email,
'phone' => $profile->phone, 'phone' => $profile->phone,
'address' => $profile->address, 'country' => $profile->country,
'language' => $profile->language ?? 'English',
'notifications' => (bool)($profile->notifications ?? true), 'notifications' => (bool)($profile->notifications ?? true),
'verification_status' => $profile->verification_status ?? 'approved', 'verification_status' => $profile->verification_status ?? 'approved',
'emirates_id_number' => $profile->emirates_id_number,
'emirates_id_expiry' => $profile->emirates_id_expiry,
'id_number' => $profile->emirates_id_number,
'card_number' => $profile->emirates_id_card_number,
'full_name' => $profile->emirates_id_name,
'date_of_birth' => $profile->emirates_id_dob,
'nationality' => $profile->nationality,
'gender' => $profile->emirates_id_gender,
'issue_date' => $profile->emirates_id_issue_date,
'expiry_date' => $profile->emirates_id_expiry,
'occupation' => $profile->emirates_id_occupation,
'employer' => $profile->emirates_id_employer,
'issuing_place' => $profile->emirates_id_issue_place,
'emirates_id' => [ 'emirates_id' => [
'emirates_id_number' => $profile->emirates_id_number, 'emirates_id_number' => $profile->emirates_id_number,
'name' => $profile->emirates_id_name, 'name' => $profile->emirates_id_name,
'date_of_birth' => $profile->emirates_id_dob, 'date_of_birth' => $profile->emirates_id_dob,
'nationality' => $profile->nationality,
'issue_date' => $profile->emirates_id_issue_date, 'issue_date' => $profile->emirates_id_issue_date,
'expiry_date' => $profile->emirates_id_expiry, 'expiry_date' => $profile->emirates_id_expiry,
'employer' => $profile->emirates_id_employer, 'employer' => $profile->emirates_id_employer,
'issue_place' => $profile->emirates_id_issue_place, 'issue_place' => $profile->emirates_id_issue_place,
'occupation' => $profile->emirates_id_occupation, 'occupation' => $profile->emirates_id_occupation,
'card_number' => $profile->emirates_id_card_number, 'nationality' => $profile->emirates_id_nationality,
'gender' => $profile->emirates_id_gender, 'gender' => $profile->emirates_id_gender,
'card_number' => $profile->emirates_id_card_number,
'country' => 'United Arab Emirates',
], ],
]; ];
@ -277,34 +266,23 @@ public function updateProfile(Request $request)
'name' => $employer->name, 'name' => $employer->name,
'email' => $employer->email, 'email' => $employer->email,
'phone' => $profile->phone, 'phone' => $profile->phone,
'address' => $profile->address, 'country' => $profile->country,
'language' => $profile->language,
'notifications' => (bool)$profile->notifications, 'notifications' => (bool)$profile->notifications,
'verification_status' => $profile->verification_status ?? 'approved', 'verification_status' => $profile->verification_status ?? 'approved',
'emirates_id_number' => $profile->emirates_id_number,
'emirates_id_expiry' => $profile->emirates_id_expiry,
'id_number' => $profile->emirates_id_number,
'card_number' => $profile->emirates_id_card_number,
'full_name' => $profile->emirates_id_name,
'date_of_birth' => $profile->emirates_id_dob,
'nationality' => $profile->nationality,
'gender' => $profile->emirates_id_gender,
'issue_date' => $profile->emirates_id_issue_date,
'expiry_date' => $profile->emirates_id_expiry,
'occupation' => $profile->emirates_id_occupation,
'employer' => $profile->emirates_id_employer,
'issuing_place' => $profile->emirates_id_issue_place,
'emirates_id' => [ 'emirates_id' => [
'emirates_id_number' => $profile->emirates_id_number, 'emirates_id_number' => $profile->emirates_id_number,
'name' => $profile->emirates_id_name, 'name' => $profile->emirates_id_name,
'date_of_birth' => $profile->emirates_id_dob, 'date_of_birth' => $profile->emirates_id_dob,
'nationality' => $profile->nationality,
'issue_date' => $profile->emirates_id_issue_date, 'issue_date' => $profile->emirates_id_issue_date,
'expiry_date' => $profile->emirates_id_expiry, 'expiry_date' => $profile->emirates_id_expiry,
'employer' => $profile->emirates_id_employer, 'employer' => $profile->emirates_id_employer,
'issue_place' => $profile->emirates_id_issue_place, 'issue_place' => $profile->emirates_id_issue_place,
'occupation' => $profile->emirates_id_occupation, 'occupation' => $profile->emirates_id_occupation,
'card_number' => $profile->emirates_id_card_number, 'nationality' => $profile->emirates_id_nationality,
'gender' => $profile->emirates_id_gender, 'gender' => $profile->emirates_id_gender,
'card_number' => $profile->emirates_id_card_number,
'country' => 'United Arab Emirates',
], ],
]; ];

View File

@ -66,48 +66,13 @@ public function register(Request $request)
$licenseExpiry = $request->license_expiry; $licenseExpiry = $request->license_expiry;
$licenseInput = $request->input('license'); $licenseInput = $request->input('license');
$licenseData = null; $licenseNumber = null;
if (is_array($licenseInput)) { if (is_array($licenseInput)) {
$licenseExpiry = $licenseExpiry ?? ($licenseInput['expiry_date'] ?? $licenseInput['license_expiry'] ?? null); $rawExpiry = $licenseInput['expiry_date'] ?? $licenseInput['license_expiry'] ?? null;
$licenseData = [ if ($rawExpiry) {
'document_type' => $licenseInput['document_type'] ?? null, $licenseExpiry = $licenseExpiry ?? \App\Services\OcrDocumentService::normaliseDate($rawExpiry);
'country' => $licenseInput['country'] ?? null,
'authority' => $licenseInput['authority'] ?? null,
'license_no' => $licenseInput['license_no'] ?? $licenseInput['license_number'] ?? null,
'company_name' => $licenseInput['company_name'] ?? $licenseInput['organization_name'] ?? null,
'business_name' => $licenseInput['business_name'] ?? null,
'license_category' => $licenseInput['license_category'] ?? null,
'legal_type' => $licenseInput['legal_type'] ?? null,
'issue_date' => $licenseInput['issue_date'] ?? null,
'expiry_date' => $licenseInput['expiry_date'] ?? ($licenseInput['license_expiry'] ?? null),
'main_license_no' => $licenseInput['main_license_no'] ?? null,
'register_no' => $licenseInput['register_no'] ?? null,
'dcci_no' => $licenseInput['dcci_no'] ?? null,
'members' => $licenseInput['members'] ?? null,
];
} else {
$licenseData = [
'document_type' => $request->document_type,
'country' => $request->country,
'authority' => $request->authority,
'license_no' => $request->license_no,
'company_name' => $request->company_name,
'business_name' => $request->business_name,
'license_category' => $request->license_category,
'legal_type' => $request->legal_type,
'issue_date' => $request->issue_date,
'expiry_date' => $request->expiry_date,
'main_license_no' => $request->main_license_no,
'register_no' => $request->register_no,
'dcci_no' => $request->dcci_no,
'members' => $request->members,
];
} }
$licenseNumber = $licenseInput['license_number'] ?? $licenseInput['license_no'] ?? $licenseInput['document_number'] ?? null;
if (is_array($licenseData)) {
$licenseData = array_filter($licenseData, function ($val) {
return !is_null($val);
});
} }
$emiratesIdInput = $request->input('emirates_id'); $emiratesIdInput = $request->input('emirates_id');
@ -120,6 +85,8 @@ public function register(Request $request)
$emiratesIdEmployer = null; $emiratesIdEmployer = null;
$emiratesIdIssuePlace = null; $emiratesIdIssuePlace = null;
$emiratesIdOccupation = null; $emiratesIdOccupation = null;
$emiratesIdGender = null;
$emiratesIdCardNumber = null;
if (is_array($emiratesIdInput)) { if (is_array($emiratesIdInput)) {
$emiratesId = $emiratesIdInput['emirates_id_number'] ?? $emiratesIdInput['id_number'] ?? $emiratesIdInput['id number'] ?? $emiratesIdInput['card_number'] ?? null; $emiratesId = $emiratesIdInput['emirates_id_number'] ?? $emiratesIdInput['id_number'] ?? $emiratesIdInput['id number'] ?? $emiratesIdInput['card_number'] ?? null;
@ -130,10 +97,12 @@ public function register(Request $request)
} }
$emiratesIdDob = $emiratesIdInput['date_of_birth'] ?? $emiratesIdInput['date of birth'] ?? $emiratesIdInput['dob'] ?? null; $emiratesIdDob = $emiratesIdInput['date_of_birth'] ?? $emiratesIdInput['date of birth'] ?? $emiratesIdInput['dob'] ?? null;
$emiratesIdNationality = $emiratesIdInput['nationality'] ?? null; $emiratesIdNationality = $emiratesIdInput['nationality'] ?? null;
$emiratesIdGender = $emiratesIdInput['gender'] ?? $emiratesIdInput['sex'] ?? null;
$emiratesIdIssueDate = $emiratesIdInput['issue_date'] ?? $emiratesIdInput['issue date'] ?? null; $emiratesIdIssueDate = $emiratesIdInput['issue_date'] ?? $emiratesIdInput['issue date'] ?? null;
$emiratesIdEmployer = $emiratesIdInput['employer'] ?? null; $emiratesIdEmployer = $emiratesIdInput['employer'] ?? null;
$emiratesIdIssuePlace = $emiratesIdInput['issue_place'] ?? $emiratesIdInput['issue place'] ?? null; $emiratesIdIssuePlace = $emiratesIdInput['issue_place'] ?? $emiratesIdInput['issue place'] ?? null;
$emiratesIdOccupation = $emiratesIdInput['occupation'] ?? $emiratesIdInput['occuption'] ?? null; $emiratesIdOccupation = $emiratesIdInput['occupation'] ?? $emiratesIdInput['occuption'] ?? null;
$emiratesIdCardNumber = $emiratesIdInput['card_number'] ?? null;
} }
$emiratesIdPath = null; $emiratesIdPath = null;
@ -142,9 +111,9 @@ public function register(Request $request)
$apiToken = Str::random(80); $apiToken = Str::random(80);
$sponsor = DB::transaction(function () use ( $sponsor = DB::transaction(function () use (
$request, $email, $licensePath, $emiratesIdPath, $emiratesId, $apiToken, $licenseExpiry, $request, $email, $licensePath, $emiratesIdPath, $emiratesId, $apiToken, $licenseExpiry, $licenseNumber, $licenseInput,
$emiratesIdExpiry, $emiratesIdName, $emiratesIdDob, $emiratesIdIssueDate, $emiratesIdEmployer, $emiratesIdExpiry, $emiratesIdName, $emiratesIdDob, $emiratesIdIssueDate, $emiratesIdEmployer,
$emiratesIdIssuePlace, $emiratesIdOccupation, $licenseData $emiratesIdIssuePlace, $emiratesIdOccupation, $emiratesIdNationality, $emiratesIdGender, $emiratesIdCardNumber
) { ) {
return Sponsor::create([ return Sponsor::create([
'full_name' => $request->full_name, 'full_name' => $request->full_name,
@ -160,6 +129,8 @@ public function register(Request $request)
'emirates_id_file' => $emiratesIdPath, 'emirates_id_file' => $emiratesIdPath,
'emirates_id' => $emiratesId, 'emirates_id' => $emiratesId,
'license_expiry' => $licenseExpiry, 'license_expiry' => $licenseExpiry,
'license_number' => $licenseNumber,
'license_data' => $licenseInput,
'status' => 'active', 'status' => 'active',
'is_verified' => false, 'is_verified' => false,
'subscription_status' => 'none', 'subscription_status' => 'none',
@ -172,7 +143,9 @@ public function register(Request $request)
'emirates_id_employer' => $emiratesIdEmployer, 'emirates_id_employer' => $emiratesIdEmployer,
'emirates_id_issue_place' => $emiratesIdIssuePlace, 'emirates_id_issue_place' => $emiratesIdIssuePlace,
'emirates_id_occupation' => $emiratesIdOccupation, 'emirates_id_occupation' => $emiratesIdOccupation,
'license_data' => $licenseData, 'emirates_id_nationality' => $emiratesIdNationality,
'emirates_id_gender' => $emiratesIdGender,
'emirates_id_card_number' => $emiratesIdCardNumber,
]); ]);
}); });
@ -188,7 +161,40 @@ public function register(Request $request)
'success' => true, 'success' => true,
'message' => 'Sponsor account registered successfully. Your license is pending admin review.', 'message' => 'Sponsor account registered successfully. Your license is pending admin review.',
'data' => [ 'data' => [
'sponsor' => $sponsor->makeHidden(['password', 'api_token']), 'sponsor' => [
'id' => $sponsor->id,
'full_name' => $sponsor->full_name,
'organization_name' => $sponsor->organization_name,
'mobile' => $sponsor->mobile,
'email' => $sponsor->email,
'nationality' => $sponsor->nationality,
'city' => $sponsor->city,
'address' => $sponsor->address,
'country_code' => $sponsor->country_code,
'is_verified' => $sponsor->is_verified,
'status' => $sponsor->status,
'license_file' => $sponsor->license_file ? asset($sponsor->license_file) : null,
'emirates_id_file' => $sponsor->emirates_id_file ? asset($sponsor->emirates_id_file) : null,
'license_expiry' => $sponsor->license_expiry ? $sponsor->license_expiry->toDateString() : null,
'license_number' => $sponsor->license_number,
'license' => $sponsor->license_data,
'validity' => $sponsor->license_expiry ? ($sponsor->license_expiry->isFuture() ? 'Valid' : 'Expired') : 'Pending Review',
'joined_at' => $sponsor->created_at->toIso8601String(),
'emirates_id' => [
'emirates_id_number' => $sponsor->emirates_id,
'name' => $sponsor->emirates_id_name,
'date_of_birth' => $sponsor->emirates_id_dob,
'issue_date' => $sponsor->emirates_id_issue_date,
'expiry_date' => $sponsor->emirates_id_expiry,
'employer' => $sponsor->emirates_id_employer,
'issue_place' => $sponsor->emirates_id_issue_place,
'occupation' => $sponsor->emirates_id_occupation,
'nationality' => $sponsor->emirates_id_nationality,
'gender' => $sponsor->emirates_id_gender,
'card_number' => $sponsor->emirates_id_card_number,
'country' => 'United Arab Emirates',
],
],
'token' => $apiToken, 'token' => $apiToken,
] ]
], 201); ], 201);
@ -264,7 +270,40 @@ public function login(Request $request)
'success' => true, 'success' => true,
'message' => 'Login successful.', 'message' => 'Login successful.',
'data' => [ 'data' => [
'sponsor' => $sponsor->makeHidden(['password', 'api_token']), 'sponsor' => [
'id' => $sponsor->id,
'full_name' => $sponsor->full_name,
'organization_name' => $sponsor->organization_name,
'mobile' => $sponsor->mobile,
'email' => $sponsor->email,
'nationality' => $sponsor->nationality,
'city' => $sponsor->city,
'address' => $sponsor->address,
'country_code' => $sponsor->country_code,
'is_verified' => $sponsor->is_verified,
'status' => $sponsor->status,
'license_file' => $sponsor->license_file ? asset($sponsor->license_file) : null,
'emirates_id_file' => $sponsor->emirates_id_file ? asset($sponsor->emirates_id_file) : null,
'license_expiry' => $sponsor->license_expiry ? $sponsor->license_expiry->toDateString() : null,
'license_number' => $sponsor->license_number,
'license' => $sponsor->license_data,
'validity' => $sponsor->license_expiry ? ($sponsor->license_expiry->isFuture() ? 'Valid' : 'Expired') : 'Pending Review',
'joined_at' => $sponsor->created_at->toIso8601String(),
'emirates_id' => [
'emirates_id_number' => $sponsor->emirates_id,
'name' => $sponsor->emirates_id_name,
'date_of_birth' => $sponsor->emirates_id_dob,
'issue_date' => $sponsor->emirates_id_issue_date,
'expiry_date' => $sponsor->emirates_id_expiry,
'employer' => $sponsor->emirates_id_employer,
'issue_place' => $sponsor->emirates_id_issue_place,
'occupation' => $sponsor->emirates_id_occupation,
'nationality' => $sponsor->emirates_id_nationality,
'gender' => $sponsor->emirates_id_gender,
'card_number' => $sponsor->emirates_id_card_number,
'country' => 'United Arab Emirates',
],
],
'token' => $apiToken, 'token' => $apiToken,
] ]
], 200); ], 200);
@ -308,10 +347,13 @@ public function uploadLicense(Request $request)
$licenseFile = $request->file('license_file'); $licenseFile = $request->file('license_file');
$ocrLicense = \App\Services\OcrDocumentService::extractSponsorLicenseData($licenseFile); $ocrLicense = \App\Services\OcrDocumentService::extractSponsorLicenseData($licenseFile);
$extractedExpiry = $ocrLicense['expiry_date']; $extractedExpiry = $ocrLicense['expiry_date'];
$extractedNumber = $ocrLicense['license_number'];
$sponsor->update([ $sponsor->update([
'license_file' => null, 'license_file' => null,
'license_expiry' => $extractedExpiry, 'license_expiry' => $extractedExpiry,
'license_number' => $extractedNumber,
'license_data' => $ocrLicense,
]); ]);
return response()->json([ return response()->json([

View File

@ -66,8 +66,22 @@ public function getDashboard(Request $request)
'license_file' => $sponsor->license_file ? asset($sponsor->license_file) : null, 'license_file' => $sponsor->license_file ? asset($sponsor->license_file) : null,
'emirates_id_file' => $sponsor->emirates_id_file ? asset($sponsor->emirates_id_file) : null, 'emirates_id_file' => $sponsor->emirates_id_file ? asset($sponsor->emirates_id_file) : null,
'license_expiry' => $sponsor->license_expiry ? $sponsor->license_expiry->toDateString() : null, 'license_expiry' => $sponsor->license_expiry ? $sponsor->license_expiry->toDateString() : null,
'license_number' => $sponsor->license_number,
'license' => $sponsor->license_data,
'validity' => $sponsor->license_expiry ? ($sponsor->license_expiry->isFuture() ? 'Valid' : 'Expired') : 'Pending Review', 'validity' => $sponsor->license_expiry ? ($sponsor->license_expiry->isFuture() ? 'Valid' : 'Expired') : 'Pending Review',
'joined_at' => $sponsor->created_at->toIso8601String(), 'joined_at' => $sponsor->created_at->toIso8601String(),
'emirates_id' => [
'emirates_id_number' => $sponsor->emirates_id,
'name' => $sponsor->emirates_id_name,
'date_of_birth' => $sponsor->emirates_id_dob,
'issue_date' => $sponsor->emirates_id_issue_date,
'expiry_date' => $sponsor->emirates_id_expiry,
'employer' => $sponsor->emirates_id_employer,
'issue_place' => $sponsor->emirates_id_issue_place,
'occupation' => $sponsor->emirates_id_occupation,
'nationality' => $sponsor->emirates_id_nationality,
'gender' => $sponsor->emirates_id_gender,
],
], ],
'recent_charity_events' => $recentEvents, 'recent_charity_events' => $recentEvents,
'total_events' => Announcement::where(function ($q) use ($sponsorId) { 'total_events' => Announcement::where(function ($q) use ($sponsorId) {
@ -305,7 +319,40 @@ public function getProfile(Request $request)
return response()->json([ return response()->json([
'success' => true, 'success' => true,
'data' => [ 'data' => [
'sponsor' => $this->buildSponsorResponse($sponsor) 'sponsor' => [
'id' => $sponsor->id,
'full_name' => $sponsor->full_name,
'organization_name' => $sponsor->organization_name,
'mobile' => $sponsor->mobile,
'email' => $sponsor->email,
'nationality' => $sponsor->nationality,
'city' => $sponsor->city,
'address' => $sponsor->address,
'country_code' => $sponsor->country_code,
'is_verified' => $sponsor->is_verified,
'status' => $sponsor->status,
'license_file' => $sponsor->license_file ? asset($sponsor->license_file) : null,
'emirates_id_file' => $sponsor->emirates_id_file ? asset($sponsor->emirates_id_file) : null,
'license_expiry' => $sponsor->license_expiry ? $sponsor->license_expiry->toDateString() : null,
'license_number' => $sponsor->license_number,
'license' => $sponsor->license_data,
'validity' => $sponsor->license_expiry ? ($sponsor->license_expiry->isFuture() ? 'Valid' : 'Expired') : 'Pending Review',
'joined_at' => $sponsor->created_at->toIso8601String(),
'emirates_id' => [
'emirates_id_number' => $sponsor->emirates_id,
'name' => $sponsor->emirates_id_name,
'date_of_birth' => $sponsor->emirates_id_dob,
'issue_date' => $sponsor->emirates_id_issue_date,
'expiry_date' => $sponsor->emirates_id_expiry,
'employer' => $sponsor->emirates_id_employer,
'issue_place' => $sponsor->emirates_id_issue_place,
'occupation' => $sponsor->emirates_id_occupation,
'nationality' => $sponsor->emirates_id_nationality,
'gender' => $sponsor->emirates_id_gender,
'card_number' => $sponsor->emirates_id_card_number,
'country' => 'United Arab Emirates',
],
]
] ]
], 200); ], 200);
} }
@ -339,7 +386,7 @@ private function buildSponsorResponse(Sponsor $sponsor): array
$emiratesIdData = [ $emiratesIdData = [
'emirates_id_number' => $sponsor->emirates_id, 'emirates_id_number' => $sponsor->emirates_id,
'name' => $sponsor->emirates_id_name, 'name' => $sponsor->emirates_id_name,
'nationality' => $sponsor->nationality, 'nationality' => $sponsor->emirates_id_nationality,
'date_of_birth' => $sponsor->emirates_id_dob, 'date_of_birth' => $sponsor->emirates_id_dob,
'expiry_date' => $sponsor->emirates_id_expiry, 'expiry_date' => $sponsor->emirates_id_expiry,
'issue_date' => $sponsor->emirates_id_issue_date, 'issue_date' => $sponsor->emirates_id_issue_date,
@ -348,6 +395,7 @@ private function buildSponsorResponse(Sponsor $sponsor): array
'occupation' => $sponsor->emirates_id_occupation, 'occupation' => $sponsor->emirates_id_occupation,
'card_number' => $sponsor->emirates_id_card_number, 'card_number' => $sponsor->emirates_id_card_number,
'gender' => $sponsor->emirates_id_gender, 'gender' => $sponsor->emirates_id_gender,
'country' => 'United Arab Emirates',
]; ];
} }

View File

@ -29,6 +29,7 @@ class EmployerProfile extends Model
'emirates_id_employer', 'emirates_id_employer',
'emirates_id_issue_place', 'emirates_id_issue_place',
'emirates_id_occupation', 'emirates_id_occupation',
'emirates_id_nationality',
'emirates_id_card_number', 'emirates_id_card_number',
'emirates_id_gender', 'emirates_id_gender',
'address', 'address',

View File

@ -43,9 +43,12 @@ class Sponsor extends Authenticatable
'emirates_id_employer', 'emirates_id_employer',
'emirates_id_issue_place', 'emirates_id_issue_place',
'emirates_id_occupation', 'emirates_id_occupation',
'emirates_id_nationality',
'emirates_id_gender',
'license_number',
'license_data',
'emirates_id_card_number', 'emirates_id_card_number',
'emirates_id_gender', 'emirates_id_gender',
'license_data',
]; ];
protected $hidden = [ protected $hidden = [
@ -105,7 +108,7 @@ public function toArray()
$emiratesIdData = [ $emiratesIdData = [
'emirates_id_number' => $this->emirates_id, 'emirates_id_number' => $this->emirates_id,
'name' => $this->emirates_id_name, 'name' => $this->emirates_id_name,
'nationality' => $this->nationality, 'nationality' => $this->emirates_id_nationality,
'date_of_birth' => $this->emirates_id_dob, 'date_of_birth' => $this->emirates_id_dob,
'expiry_date' => $this->emirates_id_expiry, 'expiry_date' => $this->emirates_id_expiry,
'issue_date' => $this->emirates_id_issue_date, 'issue_date' => $this->emirates_id_issue_date,
@ -114,6 +117,7 @@ public function toArray()
'occupation' => $this->emirates_id_occupation, 'occupation' => $this->emirates_id_occupation,
'card_number' => $this->emirates_id_card_number, 'card_number' => $this->emirates_id_card_number,
'gender' => $this->emirates_id_gender, 'gender' => $this->emirates_id_gender,
'country' => 'United Arab Emirates',
]; ];
} }

View File

@ -162,7 +162,7 @@ public static function extractPassportData(UploadedFile $file): array
* "2023-04-11" "2023-04-11" (pass-through) * "2023-04-11" "2023-04-11" (pass-through)
* "11 APR 2023" "2023-04-11" * "11 APR 2023" "2023-04-11"
*/ */
private static function normaliseDate(string $raw): string public static function normaliseDate(string $raw): string
{ {
$raw = trim($raw); $raw = trim($raw);
if (empty($raw)) { if (empty($raw)) {

View File

@ -12,13 +12,21 @@
public function up(): void public function up(): void
{ {
Schema::table('employer_profiles', function (Blueprint $table) { Schema::table('employer_profiles', function (Blueprint $table) {
if (!Schema::hasColumn('employer_profiles', 'emirates_id_card_number')) {
$table->string('emirates_id_card_number')->nullable(); $table->string('emirates_id_card_number')->nullable();
}
if (!Schema::hasColumn('employer_profiles', 'emirates_id_gender')) {
$table->string('emirates_id_gender')->nullable(); $table->string('emirates_id_gender')->nullable();
}
}); });
Schema::table('sponsors', function (Blueprint $table) { Schema::table('sponsors', function (Blueprint $table) {
if (!Schema::hasColumn('sponsors', 'emirates_id_card_number')) {
$table->string('emirates_id_card_number')->nullable(); $table->string('emirates_id_card_number')->nullable();
}
if (!Schema::hasColumn('sponsors', 'emirates_id_gender')) {
$table->string('emirates_id_gender')->nullable(); $table->string('emirates_id_gender')->nullable();
}
}); });
} }

View File

@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('sponsors', function (Blueprint $table) {
$table->string('license_number')->nullable()->after('license_expiry');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('sponsors', function (Blueprint $table) {
$table->dropColumn('license_number');
});
}
};

View File

@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('sponsors', function (Blueprint $table) {
if (!Schema::hasColumn('sponsors', 'license_data')) {
$table->json('license_data')->nullable()->after('license_number');
}
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('sponsors', function (Blueprint $table) {
if (Schema::hasColumn('sponsors', 'license_data')) {
$table->dropColumn('license_data');
}
});
}
};

View File

@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('sponsors', function (Blueprint $table) {
$table->string('emirates_id_nationality')->nullable()->after('emirates_id_name');
});
Schema::table('employer_profiles', function (Blueprint $table) {
$table->string('emirates_id_nationality')->nullable()->after('emirates_id_name');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('sponsors', function (Blueprint $table) {
$table->dropColumn('emirates_id_nationality');
});
Schema::table('employer_profiles', function (Blueprint $table) {
$table->dropColumn('emirates_id_nationality');
});
}
};

View File

@ -0,0 +1,42 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('sponsors', function (Blueprint $table) {
if (!Schema::hasColumn('sponsors', 'emirates_id_gender')) {
$table->string('emirates_id_gender')->nullable()->after('emirates_id_nationality');
}
});
Schema::table('employer_profiles', function (Blueprint $table) {
if (!Schema::hasColumn('employer_profiles', 'emirates_id_gender')) {
$table->string('emirates_id_gender')->nullable()->after('emirates_id_nationality');
}
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('sponsors', function (Blueprint $table) {
if (Schema::hasColumn('sponsors', 'emirates_id_gender')) {
$table->dropColumn('emirates_id_gender');
}
});
Schema::table('employer_profiles', function (Blueprint $table) {
if (Schema::hasColumn('employer_profiles', 'emirates_id_gender')) {
$table->dropColumn('emirates_id_gender');
}
});
}
};

View File

@ -63,87 +63,28 @@
"type": "object", "type": "object",
"description": "Optional JSON object containing extracted organization/trade license details.", "description": "Optional JSON object containing extracted organization/trade license details.",
"properties": { "properties": {
"license_number": { "document_type": { "type": "string", "example": "dubai_commercial_license" },
"type": "string", "country": { "type": "string", "example": "United Arab Emirates" },
"example": "123456" "authority": { "type": "string", "example": "Dubai Economy and Tourism" },
}, "license_no": { "type": "string", "example": "1426961" },
"organization_name": { "company_name": { "type": "string", "example": "NEST CLIMATE TECHNICAL SERVICES L.L.C" },
"type": "string", "business_name": { "type": "string", "example": "NEST CLIMATE TECHNICAL SERVICES L.L.C" },
"example": "Al-Rashidi Charitable Foundation" "license_category": { "type": "string", "example": "Dep. of Economic Development" },
}, "legal_type": { "type": "string", "example": "Limited Liability Company(LLC)" },
"expiry_date": { "issue_date": { "type": "string", "example": "22/10/2024" },
"type": "string", "expiry_date": { "type": "string", "example": "21/10/2026" },
"example": "2028-06-12" "main_license_no": { "type": "string", "example": "1426961" },
}, "register_no": { "type": "string", "example": "2436760" },
"document_type": { "dcci_no": { "type": "string", "example": "570232" },
"type": "string",
"example": "dubai_commercial_license"
},
"country": {
"type": "string",
"example": "United Arab Emirates"
},
"authority": {
"type": "string",
"example": "Dubai Economy and Tourism"
},
"license_no": {
"type": "string",
"example": "828302"
},
"company_name": {
"type": "string",
"example": "MSJ INTERNATIONAL TECHNICAL SERVICES L.L.C"
},
"business_name": {
"type": "string",
"example": "MSJ INTERNATIONAL TECHNICAL SERVICES L.L.C"
},
"license_category": {
"type": "string",
"example": "Dep. of Economic Development"
},
"legal_type": {
"type": "string",
"example": "Limited Liability Company Single Owner(LLC- - SO)"
},
"issue_date": {
"type": "string",
"example": "06/03/2019"
},
"main_license_no": {
"type": "string",
"example": "828302"
},
"register_no": {
"type": "string",
"example": "1656486"
},
"dcci_no": {
"type": "string",
"example": "317412"
},
"members": { "members": {
"type": "array", "type": "array",
"items": { "items": {
"type": "object", "type": "object",
"properties": { "properties": {
"person_no": { "person_no": { "type": "string", "example": "1709285" },
"type": "string", "name": { "type": "string", "example": "SEYED ABDUL RAHMAN SHERIF NISAR" },
"example": "752967" "nationality": { "type": "string", "example": "India" },
}, "role": { "type": "string", "example": "Manager" }
"name": {
"type": "string",
"example": "Lo lo wallus issued in"
},
"nationality": {
"type": "string",
"example": "India"
},
"role": {
"type": "string",
"example": "Shares Owner Who"
}
} }
} }
} }
@ -165,6 +106,10 @@
"type": "string", "type": "string",
"example": "NPL" "example": "NPL"
}, },
"gender": {
"type": "string",
"example": "Male"
},
"date_of_birth": { "date_of_birth": {
"type": "string", "type": "string",
"example": "1988-03-22" "example": "1988-03-22"
@ -192,11 +137,8 @@
"card_number": { "card_number": {
"type": "string", "type": "string",
"example": "151023946" "example": "151023946"
},
"gender": {
"type": "string",
"example": "M"
} }
} }
}, },
"organization_name": { "organization_name": {
@ -6701,139 +6643,34 @@
"license": { "license": {
"type": "object", "type": "object",
"properties": { "properties": {
"license_number": { "document_type": { "type": "string", "example": "dubai_commercial_license" },
"type": "string", "country": { "type": "string", "example": "United Arab Emirates" },
"example": "828302" "authority": { "type": "string", "example": "Dubai Economy and Tourism" },
}, "license_no": { "type": "string", "example": "1426961" },
"organization_name": { "company_name": { "type": "string", "example": "NEST CLIMATE TECHNICAL SERVICES L.L.C" },
"type": "string", "business_name": { "type": "string", "example": "NEST CLIMATE TECHNICAL SERVICES L.L.C" },
"example": "MSJ INTERNATIONAL TECHNICAL SERVICES L.L.C" "license_category": { "type": "string", "example": "Dep. of Economic Development" },
}, "legal_type": { "type": "string", "example": "Limited Liability Company(LLC)" },
"expiry_date": { "issue_date": { "type": "string", "example": "22/10/2024" },
"type": "string", "expiry_date": { "type": "string", "example": "21/10/2026" },
"example": "2026-05-03" "main_license_no": { "type": "string", "example": "1426961" },
}, "register_no": { "type": "string", "example": "2436760" },
"document_type": { "dcci_no": { "type": "string", "example": "570232" }
"type": "string",
"example": "dubai_commercial_license"
},
"country": {
"type": "string",
"example": "United Arab Emirates"
},
"authority": {
"type": "string",
"example": "Dubai Economy and Tourism"
},
"license_no": {
"type": "string",
"example": "828302"
},
"company_name": {
"type": "string",
"example": "MSJ INTERNATIONAL TECHNICAL SERVICES L.L.C"
},
"business_name": {
"type": "string",
"example": "MSJ INTERNATIONAL TECHNICAL SERVICES L.L.C"
},
"license_category": {
"type": "string",
"example": "Dep. of Economic Development"
},
"legal_type": {
"type": "string",
"example": "Limited Liability Company Single Owner(LLC- - SO)"
},
"issue_date": {
"type": "string",
"example": "06/03/2019"
},
"main_license_no": {
"type": "string",
"example": "828302"
},
"register_no": {
"type": "string",
"example": "1656486"
},
"dcci_no": {
"type": "string",
"example": "317412"
},
"members": {
"type": "array",
"items": {
"type": "object",
"properties": {
"person_no": {
"type": "string",
"example": "752967"
},
"name": {
"type": "string",
"example": "Lo lo wallus issued in"
},
"nationality": {
"type": "string",
"example": "India"
},
"role": {
"type": "string",
"example": "Shares Owner Who"
}
}
}
}
} }
}, },
"emirates_id": { "emirates_id": {
"type": "object", "type": "object",
"properties": { "properties": {
"emirates_id_number": { "emirates_id_number": { "type": "string", "example": "784-1988-5310327-2" },
"type": "string", "name": { "type": "string", "example": "KRISHNA PRASAD" },
"example": "784-1988-5310327-2" "date_of_birth": { "type": "string", "example": "1988-03-22" },
}, "issue_date": { "type": "string", "example": "2023-04-11" },
"name": { "expiry_date": { "type": "string", "example": "2028-04-11" },
"type": "string", "employer": { "type": "string", "example": "Federal Authority" },
"example": "KRISHNA PRASAD" "issue_place": { "type": "string", "example": "Abu Dhabi" },
}, "occupation": { "type": "string", "example": "Manager" },
"nationality": { "nationality": { "type": "string", "example": "NPL" },
"type": "string", "gender": { "type": "string", "example": "Male" }
"example": "NPL"
},
"date_of_birth": {
"type": "string",
"example": "1988-03-22"
},
"expiry_date": {
"type": "string",
"example": "2028-04-11"
},
"issue_date": {
"type": "string",
"example": "2023-04-11"
},
"employer": {
"type": "string",
"example": "Federal Authority"
},
"issue_place": {
"type": "string",
"example": "Abu Dhabi"
},
"occupation": {
"type": "string",
"example": "Manager"
},
"card_number": {
"type": "string",
"example": "987654321"
},
"gender": {
"type": "string",
"example": "Male"
}
} }
}, },
"created_at": { "created_at": {