diff --git a/app/Http/Controllers/BillController.php b/app/Http/Controllers/BillController.php index 3c6b01cb5e..e867c87b95 100644 --- a/app/Http/Controllers/BillController.php +++ b/app/Http/Controllers/BillController.php @@ -31,6 +31,7 @@ use FireflyIII\Models\Note; use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\Bill\BillRepositoryInterface; use Illuminate\Http\Request; +use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; use Preferences; use URL; @@ -167,15 +168,19 @@ class BillController extends Controller * * @return View */ - public function index(BillRepositoryInterface $repository) + public function index(Request $request, BillRepositoryInterface $repository) { /** @var Carbon $start */ $start = session('start'); /** @var Carbon $end */ - $end = session('end'); + $end = session('end'); + $page = 0 === intval($request->get('page')) ? 1 : intval($request->get('page')); + $pageSize = intval(Preferences::get('listPageSize', 50)->data); + $collection = $repository->getBills(); + $total = $collection->count(); + $collection = $collection->slice(($page - 1) * $pageSize, $pageSize); - $bills = $repository->getBills(); - $bills->each( + $collection->each( function (Bill $bill) use ($repository, $start, $end) { // paid in this period? $bill->paidDates = $repository->getPaidDatesInRange($bill, $start, $end); @@ -188,6 +193,9 @@ class BillController extends Controller $bill->nextExpectedMatch = $repository->nextExpectedMatch($bill, $lastPaidDate); } ); + // paginate bills + $bills= new LengthAwarePaginator($collection, $total, $pageSize, $page); + $bills->setPath(route('bills.index')); return view('bills.index', compact('bills')); } diff --git a/app/Http/Controllers/BudgetController.php b/app/Http/Controllers/BudgetController.php index b36a59c99d..50c21f95d3 100644 --- a/app/Http/Controllers/BudgetController.php +++ b/app/Http/Controllers/BudgetController.php @@ -35,6 +35,7 @@ use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Support\CacheProperties; use Illuminate\Http\Request; +use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; use Log; use Preferences; @@ -175,11 +176,13 @@ class BudgetController extends Controller * @SuppressWarnings(PHPMD.CyclomaticComplexity) complex because of while loop * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ - public function index(string $moment = null) + public function index(Request $request, string $moment = null) { - $range = Preferences::get('viewRange', '1M')->data; - $start = session('start', new Carbon); - $end = session('end', new Carbon); + $range = Preferences::get('viewRange', '1M')->data; + $start = session('start', new Carbon); + $end = session('end', new Carbon); + $page = 0 === intval($request->get('page')) ? 1 : intval($request->get('page')); + $pageSize = intval(Preferences::get('listPageSize', 50)->data); // make date if present: if (null !== $moment || 0 !== strlen(strval($moment))) { @@ -197,6 +200,8 @@ class BudgetController extends Controller $prev = app('navigation')->startOfPeriod($prev, $range); $this->repository->cleanupBudgets(); $budgets = $this->repository->getActiveBudgets(); + $total = $budgets->count(); + $budgets = $budgets->slice(($page - 1) * $pageSize, $pageSize); $inactive = $this->repository->getInactiveBudgets(); $periodStart = $start->formatLocalized($this->monthAndDayFormat); $periodEnd = $end->formatLocalized($this->monthAndDayFormat); @@ -206,6 +211,10 @@ class BudgetController extends Controller $spent = array_sum(array_column($budgetInformation, 'spent')); $budgeted = array_sum(array_column($budgetInformation, 'budgeted')); + // paginate budgets + $budgets = new LengthAwarePaginator($budgets, $total, $pageSize, $page); + $budgets->setPath(route('budgets.index')); + // select thing for last 12 periods: $previousLoop = []; $previousDate = clone $start; @@ -248,6 +257,7 @@ class BudgetController extends Controller 'prevText', 'periodStart', 'periodEnd', + 'page', 'budgetInformation', 'inactive', 'budgets', diff --git a/app/Http/Controllers/CategoryController.php b/app/Http/Controllers/CategoryController.php index fbaede5e46..61f1c9980f 100644 --- a/app/Http/Controllers/CategoryController.php +++ b/app/Http/Controllers/CategoryController.php @@ -34,6 +34,7 @@ use FireflyIII\Repositories\Category\CategoryRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Support\CacheProperties; use Illuminate\Http\Request; +use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; use Log; use Preferences; @@ -136,16 +137,24 @@ class CategoryController extends Controller * * @return View */ - public function index(CategoryRepositoryInterface $repository) + public function index(Request $request, CategoryRepositoryInterface $repository) { - $categories = $repository->getCategories(); + $page = 0 === intval($request->get('page')) ? 1 : intval($request->get('page')); + $pageSize = intval(Preferences::get('listPageSize', 50)->data); + $collection = $repository->getCategories(); + $total = $collection->count(); + $collection = $collection->slice(($page - 1) * $pageSize, $pageSize); - $categories->each( + $collection->each( function (Category $category) use ($repository) { $category->lastActivity = $repository->lastUseDate($category, new Collection); } ); + // paginate categories + $categories = new LengthAwarePaginator($collection, $total, $pageSize, $page); + $categories->setPath(route('categories.index')); + return view('categories.index', compact('categories')); } diff --git a/app/Http/Controllers/CurrencyController.php b/app/Http/Controllers/CurrencyController.php index 4240db44f3..4dea312903 100644 --- a/app/Http/Controllers/CurrencyController.php +++ b/app/Http/Controllers/CurrencyController.php @@ -28,6 +28,7 @@ use FireflyIII\Models\TransactionCurrency; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; use Illuminate\Http\Request; +use Illuminate\Pagination\LengthAwarePaginator; use Log; use Preferences; use View; @@ -198,12 +199,19 @@ class CurrencyController extends Controller */ public function index(Request $request) { - $currencies = $this->repository->get(); - $currencies = $currencies->sortBy( + $page = 0 === intval($request->get('page')) ? 1 : intval($request->get('page')); + $pageSize = intval(Preferences::get('listPageSize', 50)->data); + $collection = $this->repository->get(); + $total = $collection->count(); + $collection = $collection->sortBy( function (TransactionCurrency $currency) { return $currency->name; } ); + $collection = $collection->slice(($page - 1) * $pageSize, $pageSize); + $currencies = new LengthAwarePaginator($collection, $total, $pageSize, $page); + $currencies->setPath(route('currencies.index')); + $defaultCurrency = $this->repository->getCurrencyByPreference(Preferences::get('currencyPreference', config('firefly.default_currency', 'EUR'))); $isOwner = true; if (!$this->userRepository->hasRole(auth()->user(), 'owner')) { diff --git a/app/Http/Controllers/PiggyBankController.php b/app/Http/Controllers/PiggyBankController.php index 66cce45402..75ecd6284e 100644 --- a/app/Http/Controllers/PiggyBankController.php +++ b/app/Http/Controllers/PiggyBankController.php @@ -30,7 +30,7 @@ use FireflyIII\Models\PiggyBank; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use Illuminate\Http\Request; -use Illuminate\Support\Collection; +use Illuminate\Pagination\LengthAwarePaginator; use Log; use Preferences; use Response; @@ -199,17 +199,19 @@ class PiggyBankController extends Controller * * @return View */ - public function index(PiggyBankRepositoryInterface $piggyRepository) + public function index(Request $request, PiggyBankRepositoryInterface $piggyRepository) { - /** @var Collection $piggyBanks */ - $piggyBanks = $piggyRepository->getPiggyBanks(); + $collection = $piggyRepository->getPiggyBanks(); + $total = $collection->count(); + $page = 0 === intval($request->get('page')) ? 1 : intval($request->get('page')); + $pageSize = intval(Preferences::get('listPageSize', 50)->data); /** @var Carbon $end */ $end = session('end', Carbon::now()->endOfMonth()); $accounts = []; Log::debug('Looping piggues'); /** @var PiggyBank $piggyBank */ - foreach ($piggyBanks as $piggyBank) { + foreach ($collection as $piggyBank) { $piggyBank->savedSoFar = $piggyBank->currentRelevantRep()->currentamount ?? '0'; $piggyBank->percentage = 0 !== bccomp('0', $piggyBank->savedSoFar) ? intval($piggyBank->savedSoFar / $piggyBank->targetamount * 100) : 0; $piggyBank->leftToSave = bcsub($piggyBank->targetamount, strval($piggyBank->savedSoFar)); @@ -236,6 +238,11 @@ class PiggyBankController extends Controller } } + // paginate piggy banks + $collection = $collection->slice(($page - 1) * $pageSize, $pageSize); + $piggyBanks = new LengthAwarePaginator($collection, $total, $pageSize, $page); + $piggyBanks->setPath(route('piggy-banks.index')); + return view('piggy-banks.index', compact('piggyBanks', 'accounts')); } diff --git a/resources/views/budgets/index.twig b/resources/views/budgets/index.twig index dd460d05fb..f0b12e1493 100644 --- a/resources/views/budgets/index.twig +++ b/resources/views/budgets/index.twig @@ -83,7 +83,7 @@ {% endif %} - {% if budgets.count == 0 and inactive.count == 0 %} + {% if budgets.count == 0 and inactive.count == 0 and page == 1 %} {% include 'partials.empty' with {what: 'default', type: 'budgets',route: route('budgets.create')} %} {# make FF ignore demo for now. #} {% set shownDemo = true %} @@ -134,6 +134,9 @@
+ | {% endif %} | {{ 'currency'|_ }} | {{ 'number_of_decimals'|_ }} | @@ -31,12 +34,12 @@ {% for currency in currencies %}
---|---|---|---|
- - | ++ + | {% endif %}{{ currency.name }} ({{ currency.code }}) ({{ currency.symbol|raw }}) | {{ currency.decimal_places }} | @@ -52,6 +55,9 @@ {% endfor %}