query('search', '')); $transactions = $balances->adminTransactions($search !== '' ? $search : null) ->map(function ($transaction): array { $metadata = $transaction->metadata ?? []; return [ 'id' => $transaction->id, 'username' => $transaction->username ?: 'Аккаунт удалён', 'account_id' => $transaction->account_id, 'created_at' => $transaction->created_at?->format('d.m.Y H:i:s'), 'type_label' => match ($transaction->type) { 'deposit' => 'Пополнение', 'spend' => 'Покупка в игре', 'admin_credit' => 'Начисление администратором', 'admin_debit' => 'Списание администратором', default => $transaction->type, }, 'description' => $metadata['reason'] ?? $metadata['description'] ?? $transaction->reference, 'admin' => isset($metadata['admin_username']) ? [ 'username' => $metadata['admin_username'], 'account_id' => $metadata['admin_account_id'], ] : null, 'amount' => (string) $transaction->amount, 'formatted_amount' => number_format((float) $transaction->amount, 2, ',', ' '), 'is_positive' => (float) $transaction->amount >= 0, 'formatted_balance_after' => number_format((float) $transaction->balance_after, 2, ',', ' '), ]; }) ->values() ->all(); return Inertia::render('Admin/Balances', [ ...$this->portalProps($request), 'transactions' => $transactions, 'search' => $search, 'adjustUrl' => route('admin.balances.adjust'), 'old' => [ 'account' => $request->old('account', ''), 'direction' => $request->old('direction', 'credit'), 'amount' => $request->old('amount', ''), 'reason' => $request->old('reason', ''), ], ]); } public function adjust( AdjustBalanceRequest $request, AzerothCoreAccountService $accounts, BalanceService $balances, ): RedirectResponse { $accountInput = trim($request->string('account')->toString()); $account = ctype_digit($accountInput) ? $accounts->findUserById((int) $accountInput) : $accounts->findUserByUsername($accountInput); if (! $account) { return back()->withInput()->withErrors(['account' => 'Игровой аккаунт не найден.']); } try { $transaction = $balances->adjustByAdmin( $account->id, $request->string('amount')->toString(), $request->string('direction')->toString(), $request->user()->id, $request->user()->username, $request->string('reason')->toString(), ); } catch (InvalidArgumentException $exception) { return back()->withInput()->withErrors(['amount' => $exception->getMessage()]); } return back()->with('status', sprintf( 'Счёт %s изменён. Теперь на нём %s Слёз Элуны.', $account->username, number_format((float) $transaction->balance_after, 2, ',', ' '), )); } }