. */ /** @noinspection CallableParameterUseCaseInTypeContextInspection */ declare(strict_types=1); namespace FireflyIII\Http\Controllers\Account; use Carbon\Carbon; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\Account; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; /** * * Class IndexController */ class IndexController extends Controller { /** @var AccountRepositoryInterface */ private $repository; /** * */ public function __construct() { parent::__construct(); // translations: $this->middleware( function ($request, $next) { app('view')->share('mainTitleIcon', 'fa-credit-card'); app('view')->share('title', trans('firefly.accounts')); $this->repository = app(AccountRepositoryInterface::class); return $next($request); } ); } /** * @param Request $request * @param string $what * * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function index(Request $request, string $what) { $what = $what ?? 'asset'; $subTitle = trans('firefly.' . $what . '_accounts'); $subTitleIcon = config('firefly.subIconsByIdentifier.' . $what); $types = config('firefly.accountTypesByIdentifier.' . $what); $collection = $this->repository->getAccountsByType($types); $total = $collection->count(); $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; $accounts = $collection->slice(($page - 1) * $pageSize, $pageSize); unset($collection); /** @var Carbon $start */ $start = clone session('start', Carbon::now()->startOfMonth()); /** @var Carbon $end */ $end = clone session('end', Carbon::now()->endOfMonth()); $start->subDay(); $ids = $accounts->pluck('id')->toArray(); $startBalances = app('steam')->balancesByAccounts($accounts, $start); $endBalances = app('steam')->balancesByAccounts($accounts, $end); $activities = app('steam')->getLastActivities($ids); $accounts->each( function (Account $account) use ($activities, $startBalances, $endBalances) { $account->lastActivityDate = $this->isInArray($activities, $account->id); $account->startBalance = $this->isInArray($startBalances, $account->id); $account->endBalance = $this->isInArray($endBalances, $account->id); $account->difference = bcsub($account->endBalance, $account->startBalance); } ); // make paginator: $accounts = new LengthAwarePaginator($accounts, $total, $pageSize, $page); $accounts->setPath(route('accounts.index', [$what])); return view('accounts.index', compact('what', 'subTitleIcon', 'subTitle', 'page', 'accounts')); } /** * @param array $array * @param int $entryId * * @return null|mixed */ protected function isInArray(array $array, int $entryId) { $result = '0'; if (isset($array[$entryId])) { $result = $array[$entryId]; } return $result; } }