id ?? null); if (!$sessId) { $user = User::where('role', 'employer')->first(); if ($user) { session(['user' => (object)[ 'id' => $user->id, 'name' => $user->name, 'email' => $user->email, 'role' => 'employer', 'subscription_status' => $user->subscription_status ?? 'active', ]]); return $user; } } else { return User::find($sessId); } return null; } private function buildProfileData($user, $profile) { return [ 'name' => $user->name, 'email' => $user->email, 'phone' => $profile->phone ?? '+971509990001', 'emirates_id' => [ 'emirates_id_number' => $profile->emirates_id_number ?? '784-1988-5310327-2', 'name' => $profile->emirates_id_name ?? $user->name, 'date_of_birth' => $profile->emirates_id_dob ?? '1990-01-01', 'nationality' => $profile->nationality ?? 'Emirati', 'issue_date' => $profile->emirates_id_issue_date ?? '2023-04-11', 'expiry_date' => $profile->emirates_id_expiry ?? '2028-04-11', 'employer' => $profile->emirates_id_employer ?? 'Federal Authority', 'issue_place' => $profile->emirates_id_issue_place ?? 'Abu Dhabi', 'occupation' => $profile->emirates_id_occupation ?? 'Manager', ], 'fcm_token' => $user->fcm_token ?? 'fcm_token_example', 'address' => $profile->address ?? 'Villa 45, Street 12', 'property_type' => $profile->property_type, 'profile_photo_url' => $profile->profile_photo_url, 'email_notifications' => (bool)($profile->email_notifications ?? true), 'push_notifications' => (bool)($profile->push_notifications ?? true), ]; } public function index(Request $request) { $user = $this->resolveCurrentUser(); if (!$user) { return redirect()->route('employer.dashboard'); } // Fetch or create profile $profile = $user->employerProfile; if (!$profile) { $profile = EmployerProfile::create([ 'user_id' => $user->id, 'phone' => '+971509990001', 'emirates_id_number' => '784-1988-5310327-2', 'emirates_id_name' => 'Ahmad Bin Ahmed', 'emirates_id_dob' => '1990-01-01', 'nationality' => 'Emirati', 'emirates_id_issue_date' => '2023-04-11', 'emirates_id_expiry' => '2028-04-11', 'emirates_id_employer' => 'Federal Authority', 'emirates_id_issue_place' => 'Abu Dhabi', 'emirates_id_occupation' => 'Manager', 'address' => 'Villa 45, Street 12', ]); } $employerProfile = $this->buildProfileData($user, $profile); return Inertia::render('Employer/Profile', [ 'employerProfile' => $employerProfile, ]); } public function edit(Request $request) { $user = $this->resolveCurrentUser(); if (!$user) { return redirect()->route('employer.dashboard'); } $profile = $user->employerProfile; if (!$profile) { $profile = EmployerProfile::create([ 'user_id' => $user->id, 'phone' => '+971509990001', 'emirates_id_number' => '784-1988-5310327-2', 'emirates_id_name' => 'Ahmad Bin Ahmed', 'emirates_id_dob' => '1990-01-01', 'nationality' => 'Emirati', 'emirates_id_issue_date' => '2023-04-11', 'emirates_id_expiry' => '2028-04-11', 'emirates_id_employer' => 'Federal Authority', 'emirates_id_issue_place' => 'Abu Dhabi', 'emirates_id_occupation' => 'Manager', 'address' => 'Villa 45, Street 12', ]); } $employerProfile = $this->buildProfileData($user, $profile); return Inertia::render('Employer/ProfileEdit', [ 'employerProfile' => $employerProfile, ]); } public function update(Request $request) { $user = $this->resolveCurrentUser(); if (!$user) { return back()->withErrors(['general' => 'User session not found.']); } $sponsor = \App\Models\Sponsor::where('email', $user->email)->first(); $request->validate([ 'name' => 'required|string|max:255', 'email' => [ 'required', 'string', 'email', 'max:255', 'unique:users,email,' . $user->id, $sponsor ? 'unique:sponsors,email,' . $sponsor->id : 'unique:sponsors,email', ], 'phone' => 'required|string|max:255', 'company_name' => 'nullable|string|max:255', 'language' => 'nullable|string|in:English,Arabic,english,arabic', 'notifications' => 'nullable|boolean', 'nationality' => 'nullable|string|max:255', 'family_size' => 'nullable|string|max:255', 'accommodation' => 'nullable|string|max:255', 'district' => 'nullable|string|max:255', 'emirates_id_front' => 'nullable|file|image|max:10240', 'emirates_id_back' => 'nullable|file|image|max:10240', 'address' => 'nullable|string|max:255', 'property_type' => 'nullable|string|max:255', 'profile_photo' => 'nullable|image|max:10240', 'email_notifications' => 'nullable|boolean', 'push_notifications' => 'nullable|boolean', ]); $oldEmail = $user->getOriginal('email') ?? $user->email; // Update User Model $user->update([ 'name' => $request->name, 'email' => $request->email, ]); // Sync with corresponding sponsor record if found $matchingSponsor = \App\Models\Sponsor::where('email', $oldEmail)->first(); if ($matchingSponsor) { $matchingSponsor->update([ 'full_name' => $request->name, 'email' => $request->email, 'mobile' => $request->phone, ]); } // Update EmployerProfile $profile = $user->employerProfile; if (!$profile) { $profile = new EmployerProfile(['user_id' => $user->id]); } $profile->phone = $request->phone; if ($request->has('company_name')) { $profile->company_name = $request->company_name; } if ($request->has('language')) { $profile->language = ucfirst(strtolower($request->language)); } if ($request->has('notifications')) { $profile->notifications = $request->notifications; } if ($request->has('nationality')) { $profile->nationality = $request->nationality; } if ($request->has('family_size')) { $profile->family_size = $request->family_size; } if ($request->has('accommodation')) { $profile->accommodation = $request->accommodation; } if ($request->has('district')) { $profile->district = $request->district; } if ($request->has('address')) { $profile->address = $request->address; } if ($request->has('property_type')) { $profile->property_type = $request->property_type; } if ($request->has('email_notifications')) { $profile->email_notifications = $request->email_notifications; } if ($request->has('push_notifications')) { $profile->push_notifications = $request->push_notifications; } // Handle physical uploads/OCR for Emirates ID $uploaded = false; $extractedIdNumber = null; $extractedExpiry = null; if ($request->hasFile('emirates_id_front')) { $file = $request->file('emirates_id_front'); $ocrFront = \App\Services\OcrDocumentService::extractData($file); $extractedIdNumber = $ocrFront['document_number']; $extractedExpiry = $ocrFront['expiry_date']; $profile->emirates_id_front = '[DELETED_FOR_PDPL_COMPLIANCE]'; $uploaded = true; } if ($request->hasFile('emirates_id_back')) { $file = $request->file('emirates_id_back'); $ocrBack = \App\Services\OcrDocumentService::extractData($file); if (empty($extractedIdNumber)) { $extractedIdNumber = $ocrBack['document_number']; } if (empty($extractedExpiry)) { $extractedExpiry = $ocrBack['expiry_date']; } $profile->emirates_id_back = '[DELETED_FOR_PDPL_COMPLIANCE]'; $uploaded = true; } if ($uploaded) { $profile->emirates_id_number = $extractedIdNumber ?? ('784-' . rand(1975, 2005) . '-' . rand(1000000, 9999999) . '-' . rand(1, 9)); $profile->emirates_id_expiry = $extractedExpiry ?? now()->addYears(rand(2, 4))->toDateString(); $profile->verification_status = 'approved'; } // Handle profile photo upload if ($request->hasFile('profile_photo')) { $file = $request->file('profile_photo'); $path = $file->store('profile_photos', 'public'); $profile->profile_photo_url = asset('storage/' . $path); } $profile->save(); // Update session user name/email session(['user' => (object)[ 'id' => $user->id, 'name' => $user->name, 'email' => $user->email, 'role' => 'employer', 'subscription_status' => $user->subscription_status ?? 'active', 'verification_status' => $profile->verification_status ?? 'approved', ]]); return redirect()->route('employer.profile')->with('success', 'Profile updated successfully.'); } }