From b43ea5c108205ee587d10ecd2612099aa296f937 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 6 Mar 2021 15:00:34 +0100 Subject: [PATCH] Add bills and piggy banks --- .../Models/ObjectGroup/ListController.php | 33 +++++++++++++++++++ .../ObjectGroup/ObjectGroupRepository.php | 8 +++++ .../ObjectGroupRepositoryInterface.php | 7 ++++ 3 files changed, 48 insertions(+) diff --git a/app/Api/V1/Controllers/Models/ObjectGroup/ListController.php b/app/Api/V1/Controllers/Models/ObjectGroup/ListController.php index 41a2352ee2..258e641ce7 100644 --- a/app/Api/V1/Controllers/Models/ObjectGroup/ListController.php +++ b/app/Api/V1/Controllers/Models/ObjectGroup/ListController.php @@ -25,6 +25,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\ObjectGroup; use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Models\ObjectGroup; use FireflyIII\Repositories\ObjectGroup\ObjectGroupRepositoryInterface; +use FireflyIII\Transformers\BillTransformer; use FireflyIII\Transformers\PiggyBankTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; @@ -96,4 +97,36 @@ class ListController extends Controller return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } + + /** + * List all bills + * + * @param ObjectGroup $objectGroup + * + * @return JsonResponse + * @codeCoverageIgnore + */ + public function bills(ObjectGroup $objectGroup): JsonResponse + { + $manager = $this->getManager(); + + $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; + // get list of piggy banks. Count it and split it. + $collection = $this->repository->getBills($objectGroup); + $count = $collection->count(); + $bills = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + + // make paginator: + $paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.currencies.bills', [$objectGroup->id]) . $this->buildParams()); + + /** @var BillTransformer $transformer */ + $transformer = app(BillTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new FractalCollection($bills, $transformer, 'bills'); + $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); + + return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); + } } \ No newline at end of file diff --git a/app/Repositories/ObjectGroup/ObjectGroupRepository.php b/app/Repositories/ObjectGroup/ObjectGroupRepository.php index 4522dce4a8..27ae1b5c40 100644 --- a/app/Repositories/ObjectGroup/ObjectGroupRepository.php +++ b/app/Repositories/ObjectGroup/ObjectGroupRepository.php @@ -163,6 +163,14 @@ class ObjectGroupRepository implements ObjectGroupRepositoryInterface return $objectGroup->piggyBanks; } + /** + * @inheritDoc + */ + public function getBills(ObjectGroup $objectGroup): Collection + { + return $objectGroup->bills; + } + /** * @inheritDoc */ diff --git a/app/Repositories/ObjectGroup/ObjectGroupRepositoryInterface.php b/app/Repositories/ObjectGroup/ObjectGroupRepositoryInterface.php index 0a8d8b2763..70ebf4d04d 100644 --- a/app/Repositories/ObjectGroup/ObjectGroupRepositoryInterface.php +++ b/app/Repositories/ObjectGroup/ObjectGroupRepositoryInterface.php @@ -61,6 +61,13 @@ interface ObjectGroupRepositoryInterface */ public function getPiggyBanks(ObjectGroup $objectGroup): Collection; + /** + * @param ObjectGroup $objectGroup + * + * @return Collection + */ + public function getBills(ObjectGroup $objectGroup): Collection; + /** * Sort */