The Subscription Transactions feature provides insights into user subscriptions. Key components include:
On page load, the /api:BVaDN9hl/subscriptions/stats?filter%5Bemail%5D=&page=1&per_page=15&search=&status=&type= endpoint is called to retrieve the subscription revenue data. It runs App\Http\Controllers\Admin\SubscriptionsController@stats.
{
"total_subscription_revenue": "1,074,000"
}
/api:BVaDN9hl/subscriptions/transaction?filter%5Bemail%5D=&page=1&per_page=15&search=&status=&type= endpoint is called to retrieve the subscription transactions data. It runs App\Http\Controllers\Admin\SubscriptionsController@transaction.
{
"data": [
{
"sid": 1234,
"name": "Sam Uzima",
"email": "u******il.com",
"phone_number": "+2547*****66",
"subscription_date": "Mar 05, 2025",
"renewal_date": "Mar 05, 2025",
"plan": "Monthly",
"sub_status": "Inactive",
"sub_bg_color": "/docs/1.0/financial-admin/subscription-transaction#7C022533",
"sub_color": "/docs/1.0/financial-admin/subscription-transaction#7C0225",
"account_status": "Active",
"account_bg_color": "/docs/1.0/financial-admin/subscription-transaction#7BBF7433",
"account_color": "/docs/1.0/financial-admin/subscription-transaction#7bbf74"
},
---
{
---
}
],
"links": {
"first": "http://127.0.0.1:8080/api:BVaDN9hl/subscriptions/transaction?page=1",
"last": "http://127.0.0.1:8080/api:BVaDN9hl/subscriptions/transaction?page=124",
"prev": null,
"next": "http://127.0.0.1:8080/api:BVaDN9hl/subscriptions/transaction?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 124,
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "http://127.0.0.1:8080/api:BVaDN9hl/subscriptions/transaction?page=1",
"label": "1",
"active": true
},
"url": null,
"label": "...",
"active": false
},
{
"url": "http://127.0.0.1:8080/api:BVaDN9hl/subscriptions/transaction?page=2",
"label": "Next »",
"active": false
}
],
"path": "http://127.0.0.1:8080/api:BVaDN9hl/subscriptions/transaction",
"per_page": 15,
"to": 15,
"total": 1859
}
}
The Subscription Revenue section provides insights into subscription revenue generated. Key components include:
The data in the section is calculated based on the subscription transactions.
public function stats()
{
$filter_emails_v2 = User::adminAccounts()->pluck('id');
$subs = DB::table('user_subscriptions')->whereNotIn('users_id', $filter_emails_v2)->get();
$yearly = 0;
$monthly = 0;
foreach ($subs as $item) {
if($item->is_active === true) {
if($item->subscriptions_id === 2) {
$yearly = $yearly + 10000;
}
$monthly = $monthly + 1000;
}
$var_1 = 'none';
}
$total_subscription_revenue = number_format($yearly + $monthly, 0);
return RespondWithSuccess::run(...[
'body' => [
'total_subscription_revenue' => $total_subscription_revenue,
]
]);
}
The Subscription Transactions section provides a table view of all subscription transactions. Key components include:
The table is paginated to display 15 records per page. Admins can navigate through the pages using the pagination controls.
public function transaction(Request $request)
{
$validator = Validator::make($request->all(), [
'search' => 'nullable|string',
'page' => 'required|numeric',
'per_page' => 'required|numeric',
'status' => 'nullable|string',
]);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 422);
}
$data = $validator->validated();
$per_page = $data['per_page'];
$search = $data['search'];
$nonAdminUserIds = User::query()->adminAccounts()->pluck('id');
$filter = User::query()->whereNotIn('id', $nonAdminUserIds);
if ($search) {
$users = QueryBuilder::for($filter)
->allowedFilters('email')
->pluck('id');
} else {
$users = QueryBuilder::for($filter)
->pluck('id');
}
$transactions = DB::table('user_subscriptions as sub')
->leftJoin('subscriptions as s', 's.id', '=', 'sub.subscriptions_id')
->leftJoin('users as u', 'u.id', '=', 'sub.users_id')
->leftJoin('k_y_c_s as k', 'k.users_id', '=', 'sub.users_id')
->whereIn('sub.users_id', $users)
->whereNotNull('u.id')
->whereNotNull('sub.renewed_at')
->select(
'sub.id as sid',
'u.firstname as firstname',
'u.lastname as lastname',
'u.email as email',
DB::raw('u.kyc->>\'kyc_contact\' as contact '),
DB::raw('k.phone->>\'phone\' as kyc'),
'sub.renewed_at as renewed_at',
'sub.ends_at as ends_at',
's.period',
'sub.is_active as sub_status',
)
->orderBy('sub.renewed_at', 'desc')
->paginate($per_page);
$transactions->getCollection()->map(function ($transaction) {
//account status
$date = Carbon::parse($transaction->ends_at);
$transaction->account_status = true;
if ($date < now() && abs($date->diffInDays(Carbon::now())) > 60) {
$transaction->account_status = false;
}
if ($transaction->contact) {
$transaction->phone_number = $transaction->contact;
} elseif ($transaction->kyc) {
$transaction->phone_number = $transaction->kyc;
} else {
$transaction->phone_number = "-";
}
});
return SubscriptionResource::collection($transactions);
}
The Search Subscription Transactions feature allows admins to search for specific subscription transactions. Admins can search by user name, email, or phone number to filter the results.