- Added a 'Create Member Profile' page for existing users who don't have a member record. - Updated MemberDashboardController to redirect to profile creation instead of aborting 404. - Added 'member.profile.create' and 'member.profile.store' routes.
91 lines
3.1 KiB
PHP
91 lines
3.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Member;
|
|
use App\Support\AuditLogger;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
class MemberDashboardController extends Controller
|
|
{
|
|
public function show(Request $request)
|
|
{
|
|
$user = $request->user();
|
|
$member = $user->member;
|
|
|
|
if (! $member) {
|
|
return redirect()->route('member.profile.create');
|
|
}
|
|
|
|
$member->load([
|
|
'payments.submittedBy',
|
|
'payments.verifiedByCashier',
|
|
'payments.verifiedByAccountant',
|
|
'payments.verifiedByChair',
|
|
'payments.rejectedBy'
|
|
]);
|
|
|
|
$pendingPayment = $member->getPendingPayment();
|
|
|
|
return view('member.dashboard', [
|
|
'member' => $member,
|
|
'payments' => $member->payments()->latest('paid_at')->get(),
|
|
'pendingPayment' => $pendingPayment,
|
|
]);
|
|
}
|
|
|
|
public function createProfile()
|
|
{
|
|
$user = Auth::user();
|
|
if ($user->member) {
|
|
return redirect()->route('member.dashboard');
|
|
}
|
|
return view('member.create-profile');
|
|
}
|
|
|
|
public function storeProfile(Request $request)
|
|
{
|
|
$user = Auth::user();
|
|
if ($user->member) {
|
|
return redirect()->route('member.dashboard');
|
|
}
|
|
|
|
$validated = $request->validate([
|
|
'full_name' => ['required', 'string', 'max:255'],
|
|
'phone' => ['nullable', 'string', 'max:20'],
|
|
'national_id' => ['nullable', 'string', 'max:20'],
|
|
'address_line_1' => ['nullable', 'string', 'max:255'],
|
|
'address_line_2' => ['nullable', 'string', 'max:255'],
|
|
'city' => ['nullable', 'string', 'max:100'],
|
|
'postal_code' => ['nullable', 'string', 'max:10'],
|
|
'emergency_contact_name' => ['nullable', 'string', 'max:255'],
|
|
'emergency_contact_phone' => ['nullable', 'string', 'max:20'],
|
|
'terms_accepted' => ['required', 'accepted'],
|
|
]);
|
|
|
|
$member = Member::create([
|
|
'user_id' => $user->id,
|
|
'full_name' => $validated['full_name'],
|
|
'email' => $user->email,
|
|
'phone' => $validated['phone'] ?? null,
|
|
'national_id' => $validated['national_id'] ?? null,
|
|
'address_line_1' => $validated['address_line_1'] ?? null,
|
|
'address_line_2' => $validated['address_line_2'] ?? null,
|
|
'city' => $validated['city'] ?? null,
|
|
'postal_code' => $validated['postal_code'] ?? null,
|
|
'emergency_contact_name' => $validated['emergency_contact_name'] ?? null,
|
|
'emergency_contact_phone' => $validated['emergency_contact_phone'] ?? null,
|
|
'membership_status' => Member::STATUS_PENDING,
|
|
'membership_type' => Member::TYPE_REGULAR,
|
|
]);
|
|
|
|
AuditLogger::log('member.created_profile', $member, [
|
|
'user_id' => $user->id,
|
|
'name' => $member->full_name,
|
|
]);
|
|
|
|
return redirect()->route('member.dashboard')
|
|
->with('status', __('Profile completed! Please submit your membership payment.'));
|
|
}
|
|
} |