Files
timebank-cc-public/tinker_scripts/find_users_with_lekkernassuh_transactions.php

118 lines
3.4 KiB
PHP

use App\Models\User;
use App\Models\Organization;
use App\Models\Transaction;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
// Get Lekkernassuh organization
$lekkernassuh = Organization::where('name', 'Lekkernassuh')->first();
if (!$lekkernassuh) {
echo "Lekkernassuh organization not found\n";
return;
}
$lekkernassuhAccountId = $lekkernassuh->accounts()->first()?->id;
if (!$lekkernassuhAccountId) {
echo "Lekkernassuh organization has no accounts\n";
return;
}
// Get transactions involving Lekkernassuh
$transactionAccountIds = Transaction::where('from_account_id', $lekkernassuhAccountId)
->orWhere('to_account_id', $lekkernassuhAccountId)
->get();
// Extract all account IDs from transactions
$accountIds = [];
foreach ($transactionAccountIds as $transaction) {
if ($transaction->from_account_id !== $lekkernassuhAccountId) {
$accountIds[] = $transaction->from_account_id;
}
if ($transaction->to_account_id !== $lekkernassuhAccountId) {
$accountIds[] = $transaction->to_account_id;
}
}
$accountIds = array_unique($accountIds);
// Get user accounts from those IDs
$userAccounts = DB::table('accounts')
->whereIn('id', $accountIds)
->where('accountable_type', 'App\Models\User')
->select('accountable_id')
->distinct()
->get();
$userIds = $userAccounts->pluck('accountable_id')->unique();
// Get users who logged in this year
$usersWithTransactions = User::whereIn('id', $userIds)
->where('last_login_at', '>=', Carbon::now()->startOfYear())
->with('accounts')
->get();
// Filter by users with balance and sort by total balance
$usersWithBalance = [];
foreach ($usersWithTransactions as $user) {
$totalBalance = 0;
foreach ($user->accounts as $account) {
$balance = $account->balance;
if ($balance > 0) {
$totalBalance += $balance;
}
}
if ($totalBalance > 0) {
$lastLogin = null;
if ($user->last_login_at) {
if (is_string($user->last_login_at)) {
$lastLogin = Carbon::parse($user->last_login_at)->format('Y-m-d H:i');
} else {
$lastLogin = $user->last_login_at->format('Y-m-d H:i');
}
}
$usersWithBalance[] = [
'user_id' => $user->id,
'name' => $user->name,
'email' => $user->email,
'last_login' => $lastLogin,
'total_balance' => $totalBalance,
'total_balance_formatted' => tbFormat($totalBalance),
];
}
}
// Sort by total balance descending
usort($usersWithBalance, function ($a, $b) {
return $b['total_balance'] <=> $a['total_balance'];
});
// Display results
echo "\n=== Users with Lekkernassuh Transactions ===\n";
echo sprintf("Total users found: %d\n\n", count($usersWithBalance));
echo sprintf("%-5s | %-25s | %-30s | %-20s | %-15s\n", 'ID', 'Name', 'Email', 'Last Login', 'Balance');
echo str_repeat("-", 105) . "\n";
foreach ($usersWithBalance as $user) {
$lastLogin = $user['last_login'] ?? 'N/A';
echo sprintf(
"%-5s | %-25s | %-30s | %-20s | %s\n",
$user['user_id'],
substr($user['name'], 0, 25),
substr($user['email'], 0, 30),
is_string($lastLogin) ? $lastLogin : 'N/A',
$user['total_balance_formatted']
);
}
echo "\n" . str_repeat("=", 105) . "\n";
echo sprintf("Total balance across all users: %s\n", tbFormat(
array_sum(array_column($usersWithBalance, 'total_balance'))
));