member management functionality works
This commit is contained in:
parent
2ed97e9578
commit
060f41ada6
|
@ -60,6 +60,12 @@ class CardMemberController extends Controller
|
|||
|
||||
$total = $json['meta']['total'] ?? count($members);
|
||||
$lastPage = $json['meta']['last_page'] ?? ceil($total / $pageSize);
|
||||
} else {
|
||||
Log::warning('No card member data found or invalid API response: ', $json);
|
||||
$members = [];
|
||||
$total = 0;
|
||||
$lastPage = 1;
|
||||
}
|
||||
|
||||
return view('pages.member management.card-member', [
|
||||
'members' => $members,
|
||||
|
@ -68,16 +74,6 @@ class CardMemberController extends Controller
|
|||
'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,
|
||||
]);
|
||||
}
|
||||
} 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.');
|
||||
}
|
||||
}
|
||||
}
|
|
@ -257,8 +257,9 @@
|
|||
rowHtml += `<td class="text-center">`;
|
||||
tableConfig.actions.forEach(action => {
|
||||
if (action === 'view') {
|
||||
const route = tableConfig.pageTitle === 'Locked Account' ? 'locked-account.show' : 'card-member.show';
|
||||
rowHtml += `
|
||||
<a href="{{ route('card-member.show', '') }}/${row.id}" class="btn btn-sm view-btn me-1" title="View">
|
||||
<a href="{{ route('') }}/${route}/${row.id}" class="btn btn-sm view-btn me-1" title="View">
|
||||
<i class="fa-solid fa-eye"></i>
|
||||
</a>`;
|
||||
}
|
||||
|
@ -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 = `<a class="page-link" href="#" aria-label="Previous"><span aria-hidden="true">«</span></a>`;
|
||||
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 = `<a class="page-link" href="#">${i}</a>`;
|
||||
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}`;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
<div class="mb-3">
|
||||
<strong>Status:</strong> {{ $member['status'] }}
|
||||
</div>
|
||||
<a href="{{ route('card-member.index') }}" class="btn btn-secondary">Back</a>
|
||||
<a href="{{ route('card-member') }}" class="btn btn-secondary">Back</a>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
|
@ -0,0 +1,44 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('page_title', 'View Locked Account')
|
||||
|
||||
@section('content')
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="mb-0 fw-bold text-dark">View Locked Account</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
@if (session('error'))
|
||||
<div class="alert alert-danger alert-dismissible fade show" role="alert">
|
||||
{{ session('error') }}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
@endif
|
||||
<div class="mb-3">
|
||||
<strong>Card Number:</strong> {{ $member['cardNumber'] }}
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<strong>First Name:</strong> {{ $member['firstName'] }}
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<strong>Last Name:</strong> {{ $member['lastName'] }}
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<strong>Birthday:</strong> {{ $member['birthday'] ? date('F d, Y', strtotime($member['birthday'])) : 'N/A' }}
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<strong>Card Type:</strong> {{ $member['cardType'] }}
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<strong>Status:</strong> {{ $member['status'] }}
|
||||
</div>
|
||||
<div class="d-flex gap-2">
|
||||
<a href="{{ route('locked-account') }}" class="btn btn-secondary">Back</a>
|
||||
<form action="{{ route('locked-account.activate', $member['id']) }}" method="POST">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-success" onclick="return confirm('Are you sure you want to activate this account?')">Activate Account</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
|
@ -3,18 +3,22 @@
|
|||
@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
|
||||
|
||||
<div id="locked-account-table">
|
||||
@if (session('success'))
|
||||
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
||||
{{ session('success') }}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
@endif
|
||||
@if (session('error'))
|
||||
<div class="alert alert-danger alert-dismissible fade show" role="alert">
|
||||
{{ session('error') }}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
@endif
|
||||
@include('components.table-component', [
|
||||
'pageTitle' => 'Locked Account',
|
||||
'data' => $members,
|
||||
'data' => $members ?? [],
|
||||
'columns' => [
|
||||
['name' => 'Card Number', 'key' => 'cardNumber', 'sortable' => true],
|
||||
['name' => 'First Name', 'key' => 'firstName', 'sortable' => true],
|
||||
|
@ -28,6 +32,13 @@
|
|||
'showCheckboxes' => false,
|
||||
'showBatchDelete' => false,
|
||||
'showEditModal' => false,
|
||||
'showViewModal' => true
|
||||
'showViewModal' => true,
|
||||
'currentPage' => $currentPage ?? 1,
|
||||
'lastPage' => $lastPage ?? 1,
|
||||
'total' => $total ?? 0,
|
||||
])
|
||||
<div id="no-data-message" style="display: {{ empty($members ?? []) ? 'block' : 'none' }}; text-align: center; margin-top: 20px;">
|
||||
<p>No locked accounts found.</p>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
|
@ -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('/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');
|
Loading…
Reference in New Issue