diff --git a/app/Http/Controllers/CardMemberController.php b/app/Http/Controllers/CardMemberController.php
index 55c0a9d..dfe0dc0 100644
--- a/app/Http/Controllers/CardMemberController.php
+++ b/app/Http/Controllers/CardMemberController.php
@@ -60,24 +60,20 @@ class CardMemberController extends Controller
$total = $json['meta']['total'] ?? count($members);
$lastPage = $json['meta']['last_page'] ?? ceil($total / $pageSize);
-
- return view('pages.member management.card-member', [
- 'members' => $members,
- 'currentPage' => $page,
- 'lastPage' => $lastPage,
- 'total' => $total,
- 'search' => $search,
- ]);
} else {
Log::warning('No card member data found or invalid API response: ', $json);
- return view('pages.member management.card-member', [
- 'members' => [],
- 'currentPage' => 1,
- 'lastPage' => 1,
- 'total' => 0,
- 'search' => $search,
- ]);
+ $members = [];
+ $total = 0;
+ $lastPage = 1;
}
+
+ return view('pages.member management.card-member', [
+ 'members' => $members,
+ 'currentPage' => $page,
+ 'lastPage' => $lastPage,
+ 'total' => $total,
+ 'search' => $search,
+ ]);
} catch (\Exception $e) {
Log::error('Error fetching card member data: ' . $e->getMessage());
return view('pages.member management.card-member', [
@@ -89,4 +85,151 @@ class CardMemberController extends Controller
]);
}
}
+
+ public function lockedAccounts(Request $request)
+ {
+ try {
+ $user = Session::get('user');
+ $accessToken = $user['access_token'] ?? null;
+
+ if (!$accessToken) {
+ Log::info('No access token found, redirecting to login from locked-account');
+ return redirect()->route('login')->with('error', 'Please log in to view locked accounts.');
+ }
+
+ $page = $request->input('page', 1);
+ $pageSize = 5; // Fixed at 5 per page as per sample
+ $search = $request->input('_search', null);
+
+ $response = Http::withHeaders([
+ 'Accept' => 'application/json',
+ 'Authorization' => 'Bearer ' . $accessToken,
+ ])->get("{$this->apiBaseUrl}/cms/member", [
+ 'page' => $page,
+ 'page_size' => $pageSize,
+ '_search' => $search,
+ '_locked' => 1, // Fetch only locked accounts
+ ]);
+
+ if ($response->status() === 401 || $response->status() === 403) {
+ Log::warning('Unauthorized or Forbidden API response: ', $response->json());
+ return redirect()->route('login')->with('error', 'Your session has expired. Please log in again.');
+ }
+
+ $json = $response->json();
+
+ Log::info("Locked Account API Response (Page {$page}): ", $json);
+
+ if ($response->successful() && isset($json['data']) && is_array($json['data'])) {
+ $members = array_map(function ($member) {
+ Log::info('Processing locked account record: ', $member);
+ return [
+ 'id' => $member['lcard_uuid'] ?? null,
+ 'cardNumber' => $member['card_number'] ?? '',
+ 'firstName' => $member['firstname'] ?? '',
+ 'lastName' => $member['lastname'] ?? '',
+ 'birthday' => $member['birthdate'] ?? '',
+ 'cardType' => $member['card_type'] ?? '',
+ 'status' => $member['is_validated'] ? 'Active' : 'Inactive',
+ ];
+ }, $json['data']);
+
+ $total = $json['meta']['total'] ?? count($members);
+ $lastPage = $json['meta']['last_page'] ?? ceil($total / $pageSize);
+ } else {
+ Log::warning('No locked account data found or invalid API response: ', $json);
+ $members = [];
+ $total = 0;
+ $lastPage = 1;
+ }
+
+ return view('pages.member management.locked-account', [
+ 'members' => $members,
+ 'currentPage' => $page,
+ 'lastPage' => $lastPage,
+ 'total' => $total,
+ 'search' => $search,
+ ]);
+ } catch (\Exception $e) {
+ Log::error('Error fetching locked account data: ' . $e->getMessage());
+ return view('pages.member management.locked-account', [
+ 'members' => [],
+ 'currentPage' => 1,
+ 'lastPage' => 1,
+ 'total' => 0,
+ 'search' => $search,
+ ]);
+ }
+ }
+
+ public function show($uuid)
+ {
+ try {
+ $user = Session::get('user');
+ $accessToken = $user['access_token'] ?? null;
+
+ if (!$accessToken) {
+ return redirect()->route('login')->with('error', 'Please log in to view a card member.');
+ }
+
+ $response = Http::withHeaders([
+ 'Accept' => 'application/json',
+ 'Authorization' => 'Bearer ' . $accessToken,
+ ])->get("{$this->apiBaseUrl}/cms/member/{$uuid}");
+
+ $json = $response->json();
+
+ if ($response->successful() && isset($json['data'])) {
+ $member = [
+ 'id' => $json['data']['lcard_uuid'] ?? null,
+ 'cardNumber' => $json['data']['card_number'] ?? '',
+ 'firstName' => $json['data']['firstname'] ?? '',
+ 'lastName' => $json['data']['lastname'] ?? '',
+ 'birthday' => $json['data']['birthdate'] ?? '',
+ 'cardType' => $json['data']['card_type'] ?? '',
+ 'status' => $json['data']['is_validated'] ? 'Active' : 'Inactive',
+ ];
+
+ // Determine the view based on the referring route
+ $previousUrl = url()->previous();
+ if (str_contains($previousUrl, 'locked-account')) {
+ return view('pages.locked-account-view', ['member' => $member]);
+ }
+ return view('pages.card-member-view', ['member' => $member]);
+ } else {
+ Log::warning('No card member found or invalid API response: ', $json);
+ return redirect()->back()->with('error', 'Card member not found.');
+ }
+ } catch (\Exception $e) {
+ Log::error('Error fetching card member for view: ' . $e->getMessage());
+ return redirect()->back()->with('error', 'An error occurred while loading the card member.');
+ }
+ }
+
+ public function activate($uuid)
+ {
+ try {
+ $user = Session::get('user');
+ $accessToken = $user['access_token'] ?? null;
+
+ if (!$accessToken) {
+ return redirect()->route('login')->with('error', 'Please log in to activate an account.');
+ }
+
+ $response = Http::withHeaders([
+ 'Accept' => 'application/json',
+ 'Authorization' => 'Bearer ' . $accessToken,
+ ])->post("{$this->apiBaseUrl}/cms/memberActivate/{$uuid}");
+
+ if ($response->successful()) {
+ return redirect()->route('locked-account')->with('success', 'Account activated successfully.');
+ } else {
+ Log::warning('Failed to activate account: ', $response->json());
+ return redirect()->back()->with('error', $response->json()['message'] ?? 'Failed to activate account. Please try again.');
+ }
+ } catch (\Exception $e) {
+ Log::error('Error activating account: ' . $e->getMessage());
+ return redirect()->back()->with('error', 'An error occurred while activating the account.');
+ }
+ }
}
\ No newline at end of file
diff --git a/resources/views/components/card-member-component.blade.php b/resources/views/components/card-member-component.blade.php
index 1803efe..7308826 100644
--- a/resources/views/components/card-member-component.blade.php
+++ b/resources/views/components/card-member-component.blade.php
@@ -257,8 +257,9 @@
rowHtml += `
`;
tableConfig.actions.forEach(action => {
if (action === 'view') {
+ const route = tableConfig.pageTitle === 'Locked Account' ? 'locked-account.show' : 'card-member.show';
rowHtml += `
-
+
`;
}
@@ -279,13 +280,15 @@
if (!pagination) return;
pagination.innerHTML = '';
+ const routeName = tableConfig.pageTitle === 'Locked Account' ? 'locked-account.index' : 'card-member.index';
+
const prevLi = document.createElement('li');
prevLi.className = `page-item ${currentPage === 1 ? 'disabled' : ''}`;
prevLi.innerHTML = `« `;
prevLi.addEventListener('click', (e) => {
e.preventDefault();
if (currentPage > 1) {
- window.location.href = `{{ route('card-member.index') }}?page=${currentPage - 1}&_search=${tableConfig.search || ''}`;
+ window.location.href = `{{ route('') }}/${routeName}?page=${currentPage - 1}&_search=${tableConfig.search || ''}`;
}
});
pagination.appendChild(prevLi);
@@ -296,7 +299,7 @@
li.innerHTML = `${i} `;
li.addEventListener('click', (e) => {
e.preventDefault();
- window.location.href = `{{ route('card-member.index') }}?page=${i}&_search=${tableConfig.search || ''}`;
+ window.location.href = `{{ route('') }}/${routeName}?page=${i}&_search=${tableConfig.search || ''}`;
});
pagination.appendChild(li);
}
@@ -307,7 +310,7 @@
nextLi.addEventListener('click', (e) => {
e.preventDefault();
if (currentPage < tableConfig.lastPage) {
- window.location.href = `{{ route('card-member.index') }}?page=${currentPage + 1}&_search=${tableConfig.search || ''}`;
+ window.location.href = `{{ route('') }}/${routeName}?page=${currentPage + 1}&_search=${tableConfig.search || ''}`;
}
});
pagination.appendChild(nextLi);
@@ -408,7 +411,8 @@
return;
}
const memberId = this.getAttribute('data-id');
- window.location.href = `{{ route('card-member.show', '') }}/${memberId}`;
+ const route = tableConfig.pageTitle === 'Locked Account' ? 'locked-account.show' : 'card-member.show';
+ window.location.href = `{{ route('') }}/${route}/${memberId}`;
});
});
}
diff --git a/resources/views/pages/card-member-view.blade.php b/resources/views/pages/card-member-view.blade.php
index a2b5b75..e471876 100644
--- a/resources/views/pages/card-member-view.blade.php
+++ b/resources/views/pages/card-member-view.blade.php
@@ -26,7 +26,7 @@
Status: {{ $member['status'] }}
- Back
+ Back
@endsection
\ No newline at end of file
diff --git a/resources/views/pages/locked-account-view.blade.php b/resources/views/pages/locked-account-view.blade.php
new file mode 100644
index 0000000..67e6b29
--- /dev/null
+++ b/resources/views/pages/locked-account-view.blade.php
@@ -0,0 +1,44 @@
+@extends('layouts.app')
+
+@section('page_title', 'View Locked Account')
+
+@section('content')
+
+
+
+ @if (session('error'))
+
+ {{ session('error') }}
+
+
+ @endif
+
+ Card Number: {{ $member['cardNumber'] }}
+
+
+ First Name: {{ $member['firstName'] }}
+
+
+ Last Name: {{ $member['lastName'] }}
+
+
+ Birthday: {{ $member['birthday'] ? date('F d, Y', strtotime($member['birthday'])) : 'N/A' }}
+
+
+ Card Type: {{ $member['cardType'] }}
+
+
+ Status: {{ $member['status'] }}
+
+
+
+
+@endsection
\ No newline at end of file
diff --git a/resources/views/pages/member management/locked-accounts.blade.php b/resources/views/pages/member management/locked-accounts.blade.php
index 2fce484..07e8a77 100644
--- a/resources/views/pages/member management/locked-accounts.blade.php
+++ b/resources/views/pages/member management/locked-accounts.blade.php
@@ -3,31 +3,42 @@
@section('page_title', 'Locked Account')
@section('content')
- @php
- $members = [
- ['id' => 1, 'cardNumber' => '1234-5678-9012-3456', 'firstName' => 'John', 'lastName' => 'Doe', 'birthday' => '1990-05-15', 'cardType' => 'Gold', 'status' => 'Inactive'],
- ['id' => 2, 'cardNumber' => '9876-5432-1098-7654', 'firstName' => 'Jane', 'lastName' => 'Smith', 'birthday' => '1985-11-22', 'cardType' => 'Silver', 'status' => 'Inactive'],
- ['id' => 3, 'cardNumber' => '4567-8901-2345-6789', 'firstName' => 'Alice', 'lastName' => 'Johnson', 'birthday' => '1992-03-10', 'cardType' => 'Platinum', 'status' => 'Inactive'],
- ['id' => 4, 'cardNumber' => '3210-9876-5432-1098', 'firstName' => 'Bob', 'lastName' => 'Brown', 'birthday' => '1988-07-30', 'cardType' => 'Gold', 'status' => 'Inactive']
- ];
- @endphp
-
- @include('components.table-component', [
- 'pageTitle' => 'Locked Account',
- 'data' => $members,
- 'columns' => [
- ['name' => 'Card Number', 'key' => 'cardNumber', 'sortable' => true],
- ['name' => 'First Name', 'key' => 'firstName', 'sortable' => true],
- ['name' => 'Last Name', 'key' => 'lastName', 'sortable' => true],
- ['name' => 'Birthday', 'key' => 'birthday', 'sortable' => true],
- ['name' => 'Card Type', 'key' => 'cardType', 'sortable' => true],
- ['name' => 'Status', 'key' => 'status', 'sortable' => true]
- ],
- 'actions' => ['view'],
- 'showAddButton' => false,
- 'showCheckboxes' => false,
- 'showBatchDelete' => false,
- 'showEditModal' => false,
- 'showViewModal' => true
- ])
+
+ @if (session('success'))
+
+ {{ session('success') }}
+
+
+ @endif
+ @if (session('error'))
+
+ {{ session('error') }}
+
+
+ @endif
+ @include('components.table-component', [
+ 'pageTitle' => 'Locked Account',
+ 'data' => $members ?? [],
+ 'columns' => [
+ ['name' => 'Card Number', 'key' => 'cardNumber', 'sortable' => true],
+ ['name' => 'First Name', 'key' => 'firstName', 'sortable' => true],
+ ['name' => 'Last Name', 'key' => 'lastName', 'sortable' => true],
+ ['name' => 'Birthday', 'key' => 'birthday', 'sortable' => true],
+ ['name' => 'Card Type', 'key' => 'cardType', 'sortable' => true],
+ ['name' => 'Status', 'key' => 'status', 'sortable' => true]
+ ],
+ 'actions' => ['view'],
+ 'showAddButton' => false,
+ 'showCheckboxes' => false,
+ 'showBatchDelete' => false,
+ 'showEditModal' => false,
+ 'showViewModal' => true,
+ 'currentPage' => $currentPage ?? 1,
+ 'lastPage' => $lastPage ?? 1,
+ 'total' => $total ?? 0,
+ ])
+
+
No locked accounts found.
+
+
@endsection
\ No newline at end of file
diff --git a/routes/web.php b/routes/web.php
index 2bbaf6f..7af9ada 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -183,6 +183,9 @@ Route::get('/notification', [NotificationController::class, 'index'])->name('not
Route::get('/notification/create', [NotificationController::class, 'create'])->name('notification.create');
Route::post('/notification', [NotificationController::class, 'store'])->name('notification.store');
-//Card Member
+//Member Management
Route::get('/card-member', [CardMemberController::class, 'index'])->name('card-member');
-Route::get('/card-member/{uuid}', [CardMemberController::class, 'show'])->name('card-member.show');
\ No newline at end of file
+Route::get('/locked-account', [CardMemberController::class, 'lockedAccounts'])->name('locked-account');
+Route::get('/card-member/{uuid}', [CardMemberController::class, 'show'])->name('card-member.show');
+Route::get('/locked-account/{uuid}', [CardMemberController::class, 'show'])->name('locked-account.show');
+Route::post('/locked-account/activate/{uuid}', [CardMemberController::class, 'activate'])->name('locked-account.activate');
\ No newline at end of file