From e1fbdca5c1ef4689609df2c679b6ef2e90635790 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 27 Jun 2020 13:08:51 +0200 Subject: [PATCH] Make list grouped. --- .../PiggyBank/PiggyBankRepository.php | 1 + app/Support/Form/PiggyBankForm.php | 34 ++++++++++++++++--- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/app/Repositories/PiggyBank/PiggyBankRepository.php b/app/Repositories/PiggyBank/PiggyBankRepository.php index 7db78aa20d..fe5e14c097 100644 --- a/app/Repositories/PiggyBank/PiggyBankRepository.php +++ b/app/Repositories/PiggyBank/PiggyBankRepository.php @@ -281,6 +281,7 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface $currency = app('amount')->getDefaultCurrency(); $set = $this->getPiggyBanks(); + /** @var PiggyBank $piggy */ foreach ($set as $piggy) { $currentAmount = $this->getRepetition($piggy)->currentamount ?? '0'; diff --git a/app/Support/Form/PiggyBankForm.php b/app/Support/Form/PiggyBankForm.php index d5c315524d..017e01ac50 100644 --- a/app/Support/Form/PiggyBankForm.php +++ b/app/Support/Form/PiggyBankForm.php @@ -47,17 +47,43 @@ class PiggyBankForm */ public function piggyBankList(string $name, $value = null, array $options = null): string { - // make repositories /** @var PiggyBankRepositoryInterface $repository */ $repository = app(PiggyBankRepositoryInterface::class); $piggyBanks = $repository->getPiggyBanksWithAmount(); - $array = [ - 0 => (string)trans('firefly.none_in_select_list'), + $title = (string) trans('firefly.default_group_title_name'); + $array = []; + $subList = [ + 0 => [ + 'group' => [ + 'title' => $title, + ], + 'piggies' => [ + (string) trans('firefly.none_in_select_list'), + ], + ], ]; /** @var PiggyBank $piggy */ foreach ($piggyBanks as $piggy) { - $array[$piggy->id] = $piggy->name; + $group = $piggy->objectGroups->first(); + $groupTitle = null; + $groupOrder = 0; + if (null !== $group) { + $groupTitle = $group->title; + $groupOrder = $group->order; + } + $subList[$groupOrder] = $subList[$groupOrder] ?? [ + 'group' => [ + 'title' => $groupTitle, + ], + 'piggies' => [], + ]; + $subList[$groupOrder]['piggies'][$piggy->id] = $piggy->name; + } + ksort($subList); + foreach ($subList as $info) { + $groupTitle = $info['group']['title']; + $array[$groupTitle] = $info['piggies']; } return $this->select($name, $array, $value, $options);