Clean up API code and fix test code.

This commit is contained in:
James Cole
2019-09-04 17:39:39 +02:00
parent f52584d46b
commit f9f1fa0fcb
60 changed files with 812 additions and 1191 deletions

View File

@@ -27,13 +27,11 @@ namespace FireflyIII\Api\V1\Controllers;
use DB; use DB;
use FireflyIII\Transformers\UserTransformer; use FireflyIII\Transformers\UserTransformer;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use League\Fractal\Manager;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
/** /**
* Returns basic information about this installation. * Returns basic information about this installation.
*
* @codeCoverageIgnore * @codeCoverageIgnore
* Class AboutController. * Class AboutController.
*/ */
@@ -68,14 +66,11 @@ class AboutController extends Controller
/** /**
* Returns information about the user. * Returns information about the user.
* *
* @param Request $request
* @return JsonResponse * @return JsonResponse
*/ */
public function user(Request $request): JsonResponse public function user(): JsonResponse
{ {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var UserTransformer $transformer */ /** @var UserTransformer $transformer */
$transformer = app(UserTransformer::class); $transformer = app(UserTransformer::class);

View File

@@ -38,11 +38,9 @@ use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
/** /**
* Class AccountController. * Class AccountController.
@@ -100,12 +98,8 @@ class AccountController extends Controller
*/ */
public function index(Request $request): JsonResponse public function index(Request $request): JsonResponse
{ {
// create some objects: $manager = $this->getManager();
$manager = new Manager; $type = $request->get('type') ?? 'all';
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// read type from URI
$type = $request->get('type') ?? 'all';
$this->parameters->set('type', $type); $this->parameters->set('type', $type);
// types to get, page size: // types to get, page size:
@@ -121,8 +115,6 @@ class AccountController extends Controller
$paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.accounts.index') . $this->buildParams()); $paginator->setPath(route('api.v1.accounts.index') . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var AccountTransformer $transformer */ /** @var AccountTransformer $transformer */
$transformer = app(AccountTransformer::class); $transformer = app(AccountTransformer::class);
@@ -138,18 +130,16 @@ class AccountController extends Controller
/** /**
* List all piggies. * List all piggies.
* *
* @param Request $request
* @param Account $account * @param Account $account
* *
* @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
* *
* @return JsonResponse
*/ */
public function piggyBanks(Request $request, Account $account): JsonResponse public function piggyBanks(Account $account): JsonResponse
{ {
// create some objects: // create some objects:
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// types to get, page size: // types to get, page size:
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
@@ -163,9 +153,6 @@ class AccountController extends Controller
$paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.accounts.piggy_banks', [$account->id]) . $this->buildParams()); $paginator->setPath(route('api.v1.accounts.piggy_banks', [$account->id]) . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var PiggyBankTransformer $transformer */ /** @var PiggyBankTransformer $transformer */
$transformer = app(PiggyBankTransformer::class); $transformer = app(PiggyBankTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -180,16 +167,13 @@ class AccountController extends Controller
/** /**
* Show single instance. * Show single instance.
* *
* @param Request $request
* @param Account $account * @param Account $account
* *
* @return JsonResponse * @return JsonResponse
*/ */
public function show(Request $request, Account $account): JsonResponse public function show(Account $account): JsonResponse
{ {
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var AccountTransformer $transformer */ /** @var AccountTransformer $transformer */
$transformer = app(AccountTransformer::class); $transformer = app(AccountTransformer::class);
@@ -210,9 +194,7 @@ class AccountController extends Controller
{ {
$data = $request->getAllAccountData(); $data = $request->getAllAccountData();
$account = $this->repository->store($data); $account = $this->repository->store($data);
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var AccountTransformer $transformer */ /** @var AccountTransformer $transformer */
$transformer = app(AccountTransformer::class); $transformer = app(AccountTransformer::class);
@@ -247,9 +229,7 @@ class AccountController extends Controller
} }
$types = $this->mapTransactionTypes($this->parameters->get('type')); $types = $this->mapTransactionTypes($this->parameters->get('type'));
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var User $admin */ /** @var User $admin */
$admin = auth()->user(); $admin = auth()->user();
@@ -292,9 +272,7 @@ class AccountController extends Controller
$data = $request->getUpdateData(); $data = $request->getUpdateData();
$data['type'] = config('firefly.shortNamesByFullName.' . $account->accountType->type); $data['type'] = config('firefly.shortNamesByFullName.' . $account->accountType->type);
$this->repository->update($account, $data); $this->repository->update($account, $data);
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var AccountTransformer $transformer */ /** @var AccountTransformer $transformer */
$transformer = app(AccountTransformer::class); $transformer = app(AccountTransformer::class);

View File

@@ -35,11 +35,9 @@ use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response as LaravelResponse; use Illuminate\Http\Response as LaravelResponse;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
use function strlen; use function strlen;
/** /**
@@ -53,6 +51,7 @@ class AttachmentController extends Controller
/** /**
* AccountController constructor. * AccountController constructor.
*
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function __construct() public function __construct()
@@ -72,7 +71,9 @@ class AttachmentController extends Controller
/** /**
* Remove the specified resource from storage. * Remove the specified resource from storage.
*
* @codeCoverageIgnore * @codeCoverageIgnore
*
* @param Attachment $attachment * @param Attachment $attachment
* *
* @return JsonResponse * @return JsonResponse
@@ -88,6 +89,7 @@ class AttachmentController extends Controller
* Download an attachment. * Download an attachment.
* *
* @param Attachment $attachment * @param Attachment $attachment
*
* @codeCoverageIgnore * @codeCoverageIgnore
* @return LaravelResponse * @return LaravelResponse
* @throws FireflyException * @throws FireflyException
@@ -122,15 +124,12 @@ class AttachmentController extends Controller
/** /**
* Display a listing of the resource. * Display a listing of the resource.
* *
* @param Request $request
* @codeCoverageIgnore
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore
*/ */
public function index(Request $request): JsonResponse public function index(): JsonResponse
{ {
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// types to get, page size: // types to get, page size:
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
@@ -144,9 +143,6 @@ class AttachmentController extends Controller
$paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.attachments.index') . $this->buildParams()); $paginator->setPath(route('api.v1.attachments.index') . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var AttachmentTransformer $transformer */ /** @var AttachmentTransformer $transformer */
$transformer = app(AttachmentTransformer::class); $transformer = app(AttachmentTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -160,16 +156,13 @@ class AttachmentController extends Controller
/** /**
* Display the specified resource. * Display the specified resource.
* *
* @param Request $request
* @param Attachment $attachment * @param Attachment $attachment
*
* @return JsonResponse * @return JsonResponse
*/ */
public function show(Request $request, Attachment $attachment): JsonResponse public function show(Attachment $attachment): JsonResponse
{ {
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var AttachmentTransformer $transformer */ /** @var AttachmentTransformer $transformer */
$transformer = app(AttachmentTransformer::class); $transformer = app(AttachmentTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -191,9 +184,7 @@ class AttachmentController extends Controller
{ {
$data = $request->getAll(); $data = $request->getAll();
$attachment = $this->repository->store($data); $attachment = $this->repository->store($data);
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var AttachmentTransformer $transformer */ /** @var AttachmentTransformer $transformer */
$transformer = app(AttachmentTransformer::class); $transformer = app(AttachmentTransformer::class);
@@ -208,7 +199,7 @@ class AttachmentController extends Controller
* Update the specified resource in storage. * Update the specified resource in storage.
* *
* @param AttachmentUpdateRequest $request * @param AttachmentUpdateRequest $request
* @param Attachment $attachment * @param Attachment $attachment
* *
* @return JsonResponse * @return JsonResponse
*/ */
@@ -216,9 +207,7 @@ class AttachmentController extends Controller
{ {
$data = $request->getAll(); $data = $request->getAll();
$this->repository->update($attachment, $data); $this->repository->update($attachment, $data);
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var AttachmentTransformer $transformer */ /** @var AttachmentTransformer $transformer */
$transformer = app(AttachmentTransformer::class); $transformer = app(AttachmentTransformer::class);
@@ -231,8 +220,10 @@ class AttachmentController extends Controller
/** /**
* Upload an attachment. * Upload an attachment.
*
* @codeCoverageIgnore * @codeCoverageIgnore
* @param Request $request *
* @param Request $request
* @param Attachment $attachment * @param Attachment $attachment
* *
* @return JsonResponse * @return JsonResponse

View File

@@ -32,13 +32,10 @@ use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Transformers\AvailableBudgetTransformer; use FireflyIII\Transformers\AvailableBudgetTransformer;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
/** /**
* Class AvailableBudgetController. * Class AvailableBudgetController.
@@ -48,8 +45,6 @@ class AvailableBudgetController extends Controller
{ {
/** @var AvailableBudgetRepositoryInterface */ /** @var AvailableBudgetRepositoryInterface */
private $abRepository; private $abRepository;
/** @var BudgetRepositoryInterface The budget repository */
private $repository;
/** /**
* AvailableBudgetController constructor. * AvailableBudgetController constructor.
@@ -63,9 +58,7 @@ class AvailableBudgetController extends Controller
function ($request, $next) { function ($request, $next) {
/** @var User $user */ /** @var User $user */
$user = auth()->user(); $user = auth()->user();
$this->repository = app(BudgetRepositoryInterface::class);
$this->abRepository = app(AvailableBudgetRepositoryInterface::class); $this->abRepository = app(AvailableBudgetRepositoryInterface::class);
$this->repository->setUser($user);
$this->abRepository->setUser($user); $this->abRepository->setUser($user);
return $next($request); return $next($request);
@@ -92,16 +85,12 @@ class AvailableBudgetController extends Controller
/** /**
* Display a listing of the resource. * Display a listing of the resource.
* *
* @param Request $request
*
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function index(Request $request): JsonResponse public function index(): JsonResponse
{ {
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// types to get, page size: // types to get, page size:
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
@@ -118,9 +107,6 @@ class AvailableBudgetController extends Controller
$paginator = new LengthAwarePaginator($availableBudgets, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($availableBudgets, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.available_budgets.index') . $this->buildParams()); $paginator->setPath(route('api.v1.available_budgets.index') . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var AvailableBudgetTransformer $transformer */ /** @var AvailableBudgetTransformer $transformer */
$transformer = app(AvailableBudgetTransformer::class); $transformer = app(AvailableBudgetTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -134,17 +120,14 @@ class AvailableBudgetController extends Controller
/** /**
* Display the specified resource. * Display the specified resource.
* *
* @param Request $request
* @param AvailableBudget $availableBudget * @param AvailableBudget $availableBudget
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function show(Request $request, AvailableBudget $availableBudget): JsonResponse public function show(AvailableBudget $availableBudget): JsonResponse
{ {
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var AvailableBudgetTransformer $transformer */ /** @var AvailableBudgetTransformer $transformer */
$transformer = app(AvailableBudgetTransformer::class); $transformer = app(AvailableBudgetTransformer::class);
@@ -172,10 +155,9 @@ class AvailableBudgetController extends Controller
if (null === $currency) { if (null === $currency) {
$currency = app('amount')->getDefaultCurrency(); $currency = app('amount')->getDefaultCurrency();
} }
$availableBudget = $this->abRepository->setAvailableBudget($currency, $data['start'], $data['end'], $data['amount']); $data['currency'] = $currency;
$manager = new Manager; $availableBudget = $this->abRepository->store($data);
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; $manager = $this->getManager();
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var AvailableBudgetTransformer $transformer */ /** @var AvailableBudgetTransformer $transformer */
$transformer = app(AvailableBudgetTransformer::class); $transformer = app(AvailableBudgetTransformer::class);
@@ -215,9 +197,7 @@ class AvailableBudgetController extends Controller
$this->abRepository->updateAvailableBudget($availableBudget, $data); $this->abRepository->updateAvailableBudget($availableBudget, $data);
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var AvailableBudgetTransformer $transformer */ /** @var AvailableBudgetTransformer $transformer */
$transformer = app(AvailableBudgetTransformer::class); $transformer = app(AvailableBudgetTransformer::class);

View File

@@ -38,11 +38,9 @@ use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
/** /**
* Class BillController. * Class BillController.
@@ -79,18 +77,14 @@ class BillController extends Controller
/** /**
* Display a listing of the resource. * Display a listing of the resource.
* *
* @param Request $request * @param Bill $bill
* @param Bill $bill
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function attachments(Request $request, Bill $bill): JsonResponse public function attachments(Bill $bill): JsonResponse
{ {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$collection = $this->repository->getAttachments($bill); $collection = $this->repository->getAttachments($bill);
@@ -101,9 +95,6 @@ class BillController extends Controller
$paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.bills.attachments', [$bill->id]) . $this->buildParams()); $paginator->setPath(route('api.v1.bills.attachments', [$bill->id]) . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var AttachmentTransformer $transformer */ /** @var AttachmentTransformer $transformer */
$transformer = app(AttachmentTransformer::class); $transformer = app(AttachmentTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -132,18 +123,13 @@ class BillController extends Controller
/** /**
* Display a listing of the resource. * Display a listing of the resource.
* *
* @param Request $request
*
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function index(Request $request): JsonResponse public function index(): JsonResponse
{ {
$bills = $this->repository->getBills(); $bills = $this->repository->getBills();
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$count = $bills->count(); $count = $bills->count();
$bills = $bills->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); $bills = $bills->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
@@ -162,17 +148,14 @@ class BillController extends Controller
/** /**
* List all of them. * List all of them.
* *
* @param Request $request * @param Bill $bill
* @param Bill $bill
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function rules(Request $request, Bill $bill): JsonResponse public function rules(Bill $bill): JsonResponse
{ {
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// types to get, page size: // types to get, page size:
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
@@ -186,9 +169,6 @@ class BillController extends Controller
$paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.bills.rules', [$bill->id]) . $this->buildParams()); $paginator->setPath(route('api.v1.bills.rules', [$bill->id]) . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RuleTransformer $transformer */ /** @var RuleTransformer $transformer */
$transformer = app(RuleTransformer::class); $transformer = app(RuleTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -204,18 +184,14 @@ class BillController extends Controller
/** /**
* Show the specified bill. * Show the specified bill.
* *
* @param Request $request * @param Bill $bill
* @param Bill $bill
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function show(Request $request, Bill $bill): JsonResponse public function show(Bill $bill): JsonResponse
{ {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var BillTransformer $transformer */ /** @var BillTransformer $transformer */
$transformer = app(BillTransformer::class); $transformer = app(BillTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -237,9 +213,7 @@ class BillController extends Controller
{ {
$bill = $this->repository->store($request->getAll()); $bill = $this->repository->store($request->getAll());
if (null !== $bill) { if (null !== $bill) {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var BillTransformer $transformer */ /** @var BillTransformer $transformer */
$transformer = app(BillTransformer::class); $transformer = app(BillTransformer::class);
@@ -270,9 +244,7 @@ class BillController extends Controller
$this->parameters->set('type', $type); $this->parameters->set('type', $type);
$types = $this->mapTransactionTypes($this->parameters->get('type')); $types = $this->mapTransactionTypes($this->parameters->get('type'));
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var User $admin */ /** @var User $admin */
$admin = auth()->user(); $admin = auth()->user();
@@ -325,9 +297,7 @@ class BillController extends Controller
{ {
$data = $request->getAll(); $data = $request->getAll();
$bill = $this->repository->update($bill, $data); $bill = $this->repository->update($bill, $data);
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var BillTransformer $transformer */ /** @var BillTransformer $transformer */
$transformer = app(BillTransformer::class); $transformer = app(BillTransformer::class);

View File

@@ -39,11 +39,9 @@ use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
/** /**
* Class BudgetController. * Class BudgetController.
@@ -83,16 +81,14 @@ class BudgetController extends Controller
/** /**
* Display a listing of the resource. * Display a listing of the resource.
* *
* @param Request $request * @param Budget $budget
* @param Budget $budget
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function budgetLimits(Request $request, Budget $budget): JsonResponse public function budgetLimits(Budget $budget): JsonResponse
{ {
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$this->parameters->set('budget_id', $budget->id); $this->parameters->set('budget_id', $budget->id);
$collection = $this->blRepository->getBudgetLimits($budget, $this->parameters->get('start'), $this->parameters->get('end')); $collection = $this->blRepository->getBudgetLimits($budget, $this->parameters->get('start'), $this->parameters->get('end'));
@@ -101,8 +97,6 @@ class BudgetController extends Controller
$paginator = new LengthAwarePaginator($budgetLimits, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($budgetLimits, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.budgets.budget_limits', [$budget->id]) . $this->buildParams()); $paginator->setPath(route('api.v1.budgets.budget_limits', [$budget->id]) . $this->buildParams());
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var BudgetLimitTransformer $transformer */ /** @var BudgetLimitTransformer $transformer */
$transformer = app(BudgetLimitTransformer::class); $transformer = app(BudgetLimitTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -132,16 +126,12 @@ class BudgetController extends Controller
/** /**
* Display a listing of the resource. * Display a listing of the resource.
* *
* @param Request $request
*
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function index(Request $request): JsonResponse public function index(): JsonResponse
{ {
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// types to get, page size: // types to get, page size:
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
@@ -155,9 +145,6 @@ class BudgetController extends Controller
$paginator = new LengthAwarePaginator($budgets, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($budgets, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.budgets.index') . $this->buildParams()); $paginator->setPath(route('api.v1.budgets.index') . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var BudgetTransformer $transformer */ /** @var BudgetTransformer $transformer */
$transformer = app(BudgetTransformer::class); $transformer = app(BudgetTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -171,17 +158,14 @@ class BudgetController extends Controller
/** /**
* Show a budget. * Show a budget.
* *
* @param Request $request * @param Budget $budget
* @param Budget $budget
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function show(Request $request, Budget $budget): JsonResponse public function show(Budget $budget): JsonResponse
{ {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var BudgetTransformer $transformer */ /** @var BudgetTransformer $transformer */
$transformer = app(BudgetTransformer::class); $transformer = app(BudgetTransformer::class);
@@ -205,9 +189,7 @@ class BudgetController extends Controller
{ {
$budget = $this->repository->store($request->getAll()); $budget = $this->repository->store($request->getAll());
if (null !== $budget) { if (null !== $budget) {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var BudgetTransformer $transformer */ /** @var BudgetTransformer $transformer */
$transformer = app(BudgetTransformer::class); $transformer = app(BudgetTransformer::class);
@@ -234,9 +216,7 @@ class BudgetController extends Controller
$data = $request->getAll(); $data = $request->getAll();
$data['budget'] = $budget; $data['budget'] = $budget;
$budgetLimit = $this->blRepository->storeBudgetLimit($data); $budgetLimit = $this->blRepository->storeBudgetLimit($data);
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var BudgetLimitTransformer $transformer */ /** @var BudgetLimitTransformer $transformer */
$transformer = app(BudgetLimitTransformer::class); $transformer = app(BudgetLimitTransformer::class);
@@ -271,9 +251,7 @@ class BudgetController extends Controller
$this->parameters->set('type', $type); $this->parameters->set('type', $type);
$types = $this->mapTransactionTypes($this->parameters->get('type')); $types = $this->mapTransactionTypes($this->parameters->get('type'));
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var User $admin */ /** @var User $admin */
$admin = auth()->user(); $admin = auth()->user();
@@ -325,9 +303,7 @@ class BudgetController extends Controller
{ {
$data = $request->getAll(); $data = $request->getAll();
$budget = $this->repository->update($budget, $data); $budget = $this->repository->update($budget, $data);
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var BudgetTransformer $transformer */ /** @var BudgetTransformer $transformer */
$transformer = app(BudgetTransformer::class); $transformer = app(BudgetTransformer::class);

View File

@@ -38,11 +38,9 @@ use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
/** /**
* Class BudgetLimitController. * Class BudgetLimitController.
@@ -51,12 +49,10 @@ use League\Fractal\Serializer\JsonApiSerializer;
class BudgetLimitController extends Controller class BudgetLimitController extends Controller
{ {
use TransactionFilter; use TransactionFilter;
/** @var BudgetRepositoryInterface The budget repository */
private $repository;
/** @var BudgetLimitRepositoryInterface */ /** @var BudgetLimitRepositoryInterface */
private $blRepository; private $blRepository;
/** @var BudgetRepositoryInterface The budget repository */
private $repository;
/** /**
* BudgetLimitController constructor. * BudgetLimitController constructor.
@@ -69,8 +65,8 @@ class BudgetLimitController extends Controller
$this->middleware( $this->middleware(
function ($request, $next) { function ($request, $next) {
/** @var User $user */ /** @var User $user */
$user = auth()->user(); $user = auth()->user();
$this->repository = app(BudgetRepositoryInterface::class); $this->repository = app(BudgetRepositoryInterface::class);
$this->blRepository = app(BudgetLimitRepositoryInterface::class); $this->blRepository = app(BudgetLimitRepositoryInterface::class);
$this->repository->setUser($user); $this->repository->setUser($user);
$this->blRepository->setUser($user); $this->blRepository->setUser($user);
@@ -105,8 +101,7 @@ class BudgetLimitController extends Controller
*/ */
public function index(Request $request): JsonResponse public function index(Request $request): JsonResponse
{ {
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$budgetId = (int)($request->get('budget_id') ?? 0); $budgetId = (int)($request->get('budget_id') ?? 0);
$budget = $this->repository->findNull($budgetId); $budget = $this->repository->findNull($budgetId);
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
@@ -125,8 +120,6 @@ class BudgetLimitController extends Controller
$paginator = new LengthAwarePaginator($budgetLimits, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($budgetLimits, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.budget_limits.index') . $this->buildParams()); $paginator->setPath(route('api.v1.budget_limits.index') . $this->buildParams());
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var BudgetLimitTransformer $transformer */ /** @var BudgetLimitTransformer $transformer */
$transformer = app(BudgetLimitTransformer::class); $transformer = app(BudgetLimitTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -140,17 +133,14 @@ class BudgetLimitController extends Controller
/** /**
* Display the specified resource. * Display the specified resource.
* *
* @param Request $request
* @param BudgetLimit $budgetLimit * @param BudgetLimit $budgetLimit
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function show(Request $request, BudgetLimit $budgetLimit): JsonResponse public function show(BudgetLimit $budgetLimit): JsonResponse
{ {
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var BudgetLimitTransformer $transformer */ /** @var BudgetLimitTransformer $transformer */
$transformer = app(BudgetLimitTransformer::class); $transformer = app(BudgetLimitTransformer::class);
@@ -179,9 +169,7 @@ class BudgetLimitController extends Controller
} }
$data['budget'] = $budget; $data['budget'] = $budget;
$budgetLimit = $this->blRepository->storeBudgetLimit($data); $budgetLimit = $this->blRepository->storeBudgetLimit($data);
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var BudgetLimitTransformer $transformer */ /** @var BudgetLimitTransformer $transformer */
$transformer = app(BudgetLimitTransformer::class); $transformer = app(BudgetLimitTransformer::class);
@@ -195,7 +183,7 @@ class BudgetLimitController extends Controller
/** /**
* Show all transactions. * Show all transactions.
* *
* @param Request $request * @param Request $request
* @param BudgetLimit $budgetLimit * @param BudgetLimit $budgetLimit
* *
* @return JsonResponse * @return JsonResponse
@@ -208,9 +196,7 @@ class BudgetLimitController extends Controller
$this->parameters->set('type', $type); $this->parameters->set('type', $type);
$types = $this->mapTransactionTypes($this->parameters->get('type')); $types = $this->mapTransactionTypes($this->parameters->get('type'));
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var User $admin */ /** @var User $admin */
$admin = auth()->user(); $admin = auth()->user();
@@ -251,7 +237,7 @@ class BudgetLimitController extends Controller
* Update the specified resource in storage. * Update the specified resource in storage.
* *
* @param BudgetLimitRequest $request * @param BudgetLimitRequest $request
* @param BudgetLimit $budgetLimit * @param BudgetLimit $budgetLimit
* *
* @return JsonResponse * @return JsonResponse
*/ */
@@ -260,9 +246,7 @@ class BudgetLimitController extends Controller
$data = $request->getAll(); $data = $request->getAll();
$data['budget'] = $budgetLimit->budget; $data['budget'] = $budgetLimit->budget;
$budgetLimit = $this->blRepository->updateBudgetLimit($budgetLimit, $data); $budgetLimit = $this->blRepository->updateBudgetLimit($budgetLimit, $data);
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var BudgetLimitTransformer $transformer */ /** @var BudgetLimitTransformer $transformer */
$transformer = app(BudgetLimitTransformer::class); $transformer = app(BudgetLimitTransformer::class);

View File

@@ -35,11 +35,9 @@ use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
/** /**
* Class CategoryController. * Class CategoryController.
@@ -91,16 +89,12 @@ class CategoryController extends Controller
/** /**
* Display a listing of the resource. * Display a listing of the resource.
* *
* @param Request $request
*
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function index(Request $request): JsonResponse public function index(): JsonResponse
{ {
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// types to get, page size: // types to get, page size:
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
@@ -114,9 +108,6 @@ class CategoryController extends Controller
$paginator = new LengthAwarePaginator($categories, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($categories, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.categories.index') . $this->buildParams()); $paginator->setPath(route('api.v1.categories.index') . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var CategoryTransformer $transformer */ /** @var CategoryTransformer $transformer */
$transformer = app(CategoryTransformer::class); $transformer = app(CategoryTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -132,17 +123,14 @@ class CategoryController extends Controller
/** /**
* Show the category. * Show the category.
* *
* @param Request $request
* @param Category $category * @param Category $category
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function show(Request $request, Category $category): JsonResponse public function show(Category $category): JsonResponse
{ {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var CategoryTransformer $transformer */ /** @var CategoryTransformer $transformer */
$transformer = app(CategoryTransformer::class); $transformer = app(CategoryTransformer::class);
@@ -165,9 +153,7 @@ class CategoryController extends Controller
{ {
$category = $this->repository->store($request->getAll()); $category = $this->repository->store($request->getAll());
if (null !== $category) { if (null !== $category) {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var CategoryTransformer $transformer */ /** @var CategoryTransformer $transformer */
$transformer = app(CategoryTransformer::class); $transformer = app(CategoryTransformer::class);
@@ -183,7 +169,7 @@ class CategoryController extends Controller
/** /**
* Show all transactions. * Show all transactions.
* *
* @param Request $request * @param Request $request
* *
* @param Category $category * @param Category $category
* *
@@ -197,9 +183,7 @@ class CategoryController extends Controller
$this->parameters->set('type', $type); $this->parameters->set('type', $type);
$types = $this->mapTransactionTypes($this->parameters->get('type')); $types = $this->mapTransactionTypes($this->parameters->get('type'));
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var User $admin */ /** @var User $admin */
$admin = auth()->user(); $admin = auth()->user();
@@ -242,7 +226,7 @@ class CategoryController extends Controller
* Update the category. * Update the category.
* *
* @param CategoryRequest $request * @param CategoryRequest $request
* @param Category $category * @param Category $category
* *
* @return JsonResponse * @return JsonResponse
*/ */
@@ -250,9 +234,7 @@ class CategoryController extends Controller
{ {
$data = $request->getAll(); $data = $request->getAll();
$category = $this->repository->update($category, $data); $category = $this->repository->update($category, $data);
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var CategoryTransformer $transformer */ /** @var CategoryTransformer $transformer */
$transformer = app(CategoryTransformer::class); $transformer = app(CategoryTransformer::class);

View File

@@ -49,6 +49,7 @@ class AccountController extends Controller
/** /**
* AccountController constructor. * AccountController constructor.
*
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function __construct() public function __construct()
@@ -126,7 +127,7 @@ class AccountController extends Controller
// loop all found currencies and build the data array for the chart. // loop all found currencies and build the data array for the chart.
/** /**
* @var int $currencyId * @var int $currencyId
* @var TransactionCurrency $currency * @var TransactionCurrency $currency
*/ */
foreach ($currencies as $currencyId => $currency) { foreach ($currencies as $currencyId => $currency) {
@@ -275,7 +276,7 @@ class AccountController extends Controller
// loop all found currencies and build the data array for the chart. // loop all found currencies and build the data array for the chart.
/** /**
* @var int $currencyId * @var int $currencyId
* @var TransactionCurrency $currency * @var TransactionCurrency $currency
*/ */
foreach ($currencies as $currencyId => $currency) { foreach ($currencies as $currencyId => $currency) {

View File

@@ -189,8 +189,8 @@ class CategoryController extends Controller
$oldSet = $set['entries']; $oldSet = $set['entries'];
$newSet = []; $newSet = [];
foreach ($categories as $category) { foreach ($categories as $category) {
$value = $oldSet[$category] ?? '0'; $value = $oldSet[$category] ?? '0';
$value = -1 === bccomp($value, '0') ? bcmul($value, '-1') : $value; $value = -1 === bccomp($value, '0') ? bcmul($value, '-1') : $value;
$newSet[$category] = $value; $newSet[$category] = $value;
} }
$tempData[$index]['entries'] = $newSet; $tempData[$index]['entries'] = $newSet;

View File

@@ -32,6 +32,7 @@ use Illuminate\Http\JsonResponse;
/** /**
* Class ConfigurationController. * Class ConfigurationController.
*
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
class ConfigurationController extends Controller class ConfigurationController extends Controller
@@ -80,7 +81,7 @@ class ConfigurationController extends Controller
* Update the configuration. * Update the configuration.
* *
* @param ConfigurationRequest $request * @param ConfigurationRequest $request
* @param string $name * @param string $name
* *
* @return JsonResponse * @return JsonResponse
*/ */

View File

@@ -30,6 +30,8 @@ use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController; use Illuminate\Routing\Controller as BaseController;
use League\Fractal\Manager;
use League\Fractal\Serializer\JsonApiSerializer;
use Log; use Log;
use Symfony\Component\HttpFoundation\ParameterBag; use Symfony\Component\HttpFoundation\ParameterBag;
@@ -81,6 +83,19 @@ class Controller extends BaseController
return $return; return $return;
} }
/**
* @return Manager
*/
protected function getManager(): Manager
{
// create some objects:
$manager = new Manager;
$baseUrl = request()->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
return $manager;
}
/** /**
* Method to grab all parameters from the URI. * Method to grab all parameters from the URI.
* *

View File

@@ -58,11 +58,9 @@ use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
/** /**
* Class CurrencyController. * Class CurrencyController.
@@ -110,9 +108,7 @@ class CurrencyController extends Controller
*/ */
public function accounts(Request $request, TransactionCurrency $currency): JsonResponse public function accounts(Request $request, TransactionCurrency $currency): JsonResponse
{ {
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// read type from URI // read type from URI
$type = $request->get('type') ?? 'all'; $type = $request->get('type') ?? 'all';
@@ -143,9 +139,6 @@ class CurrencyController extends Controller
$paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.currencies.accounts', [$currency->code]) . $this->buildParams()); $paginator->setPath(route('api.v1.currencies.accounts', [$currency->code]) . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var AccountTransformer $transformer */ /** @var AccountTransformer $transformer */
$transformer = app(AccountTransformer::class); $transformer = app(AccountTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -160,22 +153,17 @@ class CurrencyController extends Controller
/** /**
* Display a listing of the resource. * Display a listing of the resource.
* *
* @param Request $request
*
* @param TransactionCurrency $currency * @param TransactionCurrency $currency
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function availableBudgets(Request $request, TransactionCurrency $currency): JsonResponse public function availableBudgets(TransactionCurrency $currency): JsonResponse
{ {
/** @var User $admin */ /** @var User $admin */
$admin = auth()->user(); $admin = auth()->user();
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// types to get, page size: // types to get, page size:
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
@@ -197,9 +185,6 @@ class CurrencyController extends Controller
$paginator = new LengthAwarePaginator($availableBudgets, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($availableBudgets, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.currencies.available_budgets', [$currency->code]) . $this->buildParams()); $paginator->setPath(route('api.v1.currencies.available_budgets', [$currency->code]) . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var AvailableBudgetTransformer $transformer */ /** @var AvailableBudgetTransformer $transformer */
$transformer = app(AvailableBudgetTransformer::class); $transformer = app(AvailableBudgetTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -213,17 +198,14 @@ class CurrencyController extends Controller
/** /**
* List all bills * List all bills
* *
* @param Request $request
* @param TransactionCurrency $currency * @param TransactionCurrency $currency
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function bills(Request $request, TransactionCurrency $currency): JsonResponse public function bills(TransactionCurrency $currency): JsonResponse
{ {
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
/** @var BillRepositoryInterface $repository */ /** @var BillRepositoryInterface $repository */
$repository = app(BillRepositoryInterface::class); $repository = app(BillRepositoryInterface::class);
@@ -243,9 +225,6 @@ class CurrencyController extends Controller
$paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.currencies.bills', [$currency->code]) . $this->buildParams()); $paginator->setPath(route('api.v1.currencies.bills', [$currency->code]) . $this->buildParams());
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var BillTransformer $transformer */ /** @var BillTransformer $transformer */
$transformer = app(BillTransformer::class); $transformer = app(BillTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -259,20 +238,17 @@ class CurrencyController extends Controller
/** /**
* List all budget limits * List all budget limits
* *
* @param Request $request
*
* @param TransactionCurrency $currency * @param TransactionCurrency $currency
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function budgetLimits(Request $request, TransactionCurrency $currency): JsonResponse public function budgetLimits(TransactionCurrency $currency): JsonResponse
{ {
/** @var BudgetLimitRepositoryInterface $blRepository */ /** @var BudgetLimitRepositoryInterface $blRepository */
$blRepository = app(BudgetLimitRepositoryInterface::class); $blRepository = app(BudgetLimitRepositoryInterface::class);
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$collection = $blRepository->getAllBudgetLimitsByCurrency($currency, $this->parameters->get('start'), $this->parameters->get('end')); $collection = $blRepository->getAllBudgetLimitsByCurrency($currency, $this->parameters->get('start'), $this->parameters->get('end'));
$count = $collection->count(); $count = $collection->count();
@@ -280,8 +256,6 @@ class CurrencyController extends Controller
$paginator = new LengthAwarePaginator($budgetLimits, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($budgetLimits, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.currencies.budget_limits', [$currency->code]) . $this->buildParams()); $paginator->setPath(route('api.v1.currencies.budget_limits', [$currency->code]) . $this->buildParams());
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var BudgetLimitTransformer $transformer */ /** @var BudgetLimitTransformer $transformer */
$transformer = app(BudgetLimitTransformer::class); $transformer = app(BudgetLimitTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -295,20 +269,17 @@ class CurrencyController extends Controller
/** /**
* Show a list of known exchange rates * Show a list of known exchange rates
* *
* @param Request $request
* @param TransactionCurrency $currency * @param TransactionCurrency $currency
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function cer(Request $request, TransactionCurrency $currency): JsonResponse public function cer(TransactionCurrency $currency): JsonResponse
{ {
// create some objects: // create some objects:
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$collection = $this->repository->getExchangeRates($currency); $collection = $this->repository->getExchangeRates($currency);
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$count = $collection->count(); $count = $collection->count();
@@ -316,8 +287,6 @@ class CurrencyController extends Controller
$paginator = new LengthAwarePaginator($exchangeRates, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($exchangeRates, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.currencies.cer', [$currency->code]) . $this->buildParams()); $paginator->setPath(route('api.v1.currencies.cer', [$currency->code]) . $this->buildParams());
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var CurrencyExchangeRateTransformer $transformer */ /** @var CurrencyExchangeRateTransformer $transformer */
$transformer = app(CurrencyExchangeRateTransformer::class); $transformer = app(CurrencyExchangeRateTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -357,22 +326,19 @@ class CurrencyController extends Controller
/** /**
* Disable a currency. * Disable a currency.
* *
* @param Request $request
* @param TransactionCurrency $currency * @param TransactionCurrency $currency
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function disable(Request $request, TransactionCurrency $currency): JsonResponse public function disable(TransactionCurrency $currency): JsonResponse
{ {
// must be unused. // must be unused.
if ($this->repository->currencyInUse($currency)) { if ($this->repository->currencyInUse($currency)) {
return response()->json([], 409); return response()->json([], 409);
} }
$this->repository->disable($currency); $this->repository->disable($currency);
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user());
$this->parameters->set('defaultCurrency', $defaultCurrency); $this->parameters->set('defaultCurrency', $defaultCurrency);
@@ -390,18 +356,15 @@ class CurrencyController extends Controller
/** /**
* Enable a currency. * Enable a currency.
* *
* @param Request $request
* @param TransactionCurrency $currency * @param TransactionCurrency $currency
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function enable(Request $request, TransactionCurrency $currency): JsonResponse public function enable(TransactionCurrency $currency): JsonResponse
{ {
$this->repository->enable($currency); $this->repository->enable($currency);
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user());
$this->parameters->set('defaultCurrency', $defaultCurrency); $this->parameters->set('defaultCurrency', $defaultCurrency);
@@ -419,12 +382,10 @@ class CurrencyController extends Controller
/** /**
* Display a listing of the resource. * Display a listing of the resource.
* *
* @param Request $request
*
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function index(Request $request): JsonResponse public function index(): JsonResponse
{ {
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$collection = $this->repository->getAll(); $collection = $this->repository->getAll();
@@ -435,9 +396,7 @@ class CurrencyController extends Controller
$paginator->setPath(route('api.v1.currencies.index') . $this->buildParams()); $paginator->setPath(route('api.v1.currencies.index') . $this->buildParams());
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user());
$this->parameters->set('defaultCurrency', $defaultCurrency); $this->parameters->set('defaultCurrency', $defaultCurrency);
@@ -454,22 +413,19 @@ class CurrencyController extends Controller
/** /**
* Make the currency a default currency. * Make the currency a default currency.
* *
* @param Request $request
* @param TransactionCurrency $currency * @param TransactionCurrency $currency
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function makeDefault(Request $request, TransactionCurrency $currency): JsonResponse public function makeDefault(TransactionCurrency $currency): JsonResponse
{ {
$this->repository->enable($currency); $this->repository->enable($currency);
app('preferences')->set('currencyPreference', $currency->code); app('preferences')->set('currencyPreference', $currency->code);
app('preferences')->mark(); app('preferences')->mark();
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$this->parameters->set('defaultCurrency', $currency); $this->parameters->set('defaultCurrency', $currency);
@@ -486,19 +442,14 @@ class CurrencyController extends Controller
/** /**
* List all recurring transactions. * List all recurring transactions.
* *
* @param Request $request
*
* @param TransactionCurrency $currency * @param TransactionCurrency $currency
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function recurrences(Request $request, TransactionCurrency $currency): JsonResponse public function recurrences(TransactionCurrency $currency): JsonResponse
{ {
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// types to get, page size: // types to get, page size:
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
@@ -529,9 +480,6 @@ class CurrencyController extends Controller
$paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.currencies.recurrences', [$currency->code]) . $this->buildParams()); $paginator->setPath(route('api.v1.currencies.recurrences', [$currency->code]) . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RecurrenceTransformer $transformer */ /** @var RecurrenceTransformer $transformer */
$transformer = app(RecurrenceTransformer::class); $transformer = app(RecurrenceTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -546,16 +494,14 @@ class CurrencyController extends Controller
/** /**
* List all of them. * List all of them.
* *
* @param Request $request
* @param TransactionCurrency $currency * @param TransactionCurrency $currency
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function rules(Request $request, TransactionCurrency $currency): JsonResponse public function rules(TransactionCurrency $currency): JsonResponse
{ {
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
// get list of budgets. Count it and split it. // get list of budgets. Count it and split it.
@@ -583,9 +529,6 @@ class CurrencyController extends Controller
$paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.rules.index') . $this->buildParams()); $paginator->setPath(route('api.v1.rules.index') . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RuleTransformer $transformer */ /** @var RuleTransformer $transformer */
$transformer = app(RuleTransformer::class); $transformer = app(RuleTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -600,17 +543,14 @@ class CurrencyController extends Controller
/** /**
* Show a currency. * Show a currency.
* *
* @param Request $request
* @param TransactionCurrency $currency * @param TransactionCurrency $currency
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function show(Request $request, TransactionCurrency $currency): JsonResponse public function show(TransactionCurrency $currency): JsonResponse
{ {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user());
$this->parameters->set('defaultCurrency', $defaultCurrency); $this->parameters->set('defaultCurrency', $defaultCurrency);
@@ -640,9 +580,7 @@ class CurrencyController extends Controller
app('preferences')->set('currencyPreference', $currency->code); app('preferences')->set('currencyPreference', $currency->code);
app('preferences')->mark(); app('preferences')->mark();
} }
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user());
$this->parameters->set('defaultCurrency', $defaultCurrency); $this->parameters->set('defaultCurrency', $defaultCurrency);
@@ -675,9 +613,7 @@ class CurrencyController extends Controller
$this->parameters->set('type', $type); $this->parameters->set('type', $type);
$types = $this->mapTransactionTypes($this->parameters->get('type')); $types = $this->mapTransactionTypes($this->parameters->get('type'));
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var User $admin */ /** @var User $admin */
$admin = auth()->user(); $admin = auth()->user();
@@ -734,9 +670,7 @@ class CurrencyController extends Controller
app('preferences')->mark(); app('preferences')->mark();
} }
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user());
$this->parameters->set('defaultCurrency', $defaultCurrency); $this->parameters->set('defaultCurrency', $defaultCurrency);

View File

@@ -31,12 +31,11 @@ use FireflyIII\Transformers\CurrencyExchangeRateTransformer;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use League\Fractal\Manager;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
/** /**
* Class CurrencyExchangeRateController * Class CurrencyExchangeRateController
*
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
class CurrencyExchangeRateController extends Controller class CurrencyExchangeRateController extends Controller
@@ -75,11 +74,7 @@ class CurrencyExchangeRateController extends Controller
*/ */
public function index(Request $request): JsonResponse public function index(Request $request): JsonResponse
{ {
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$fromCurrency = $this->repository->findByCodeNull($request->get('from') ?? 'EUR'); $fromCurrency = $this->repository->findByCodeNull($request->get('from') ?? 'EUR');
$toCurrency = $this->repository->findByCodeNull($request->get('to') ?? 'USD'); $toCurrency = $this->repository->findByCodeNull($request->get('to') ?? 'USD');

View File

@@ -34,11 +34,9 @@ use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
/** /**
* Class ImportController * Class ImportController
@@ -51,6 +49,7 @@ class ImportController extends Controller
/** /**
* ImportController constructor. * ImportController constructor.
*
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function __construct() public function __construct()
@@ -69,16 +68,13 @@ class ImportController extends Controller
} }
/** /**
* @param Request $request
*
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function listAll(Request $request): JsonResponse public function listAll(): JsonResponse
{ {
// create some objects: // create some objects:
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
// get list of accounts. Count it and split it. // get list of accounts. Count it and split it.
@@ -90,9 +86,6 @@ class ImportController extends Controller
$paginator = new LengthAwarePaginator($importJobs, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($importJobs, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.import.list') . $this->buildParams()); $paginator->setPath(route('api.v1.import.list') . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var ImportJobTransformer $transformer */ /** @var ImportJobTransformer $transformer */
$transformer = app(ImportJobTransformer::class); $transformer = app(ImportJobTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -104,18 +97,14 @@ class ImportController extends Controller
} }
/** /**
* @param Request $request
* @param ImportJob $importJob * @param ImportJob $importJob
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function show(Request $request, ImportJob $importJob): JsonResponse public function show(ImportJob $importJob): JsonResponse
{ {
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var ImportJobTransformer $transformer */ /** @var ImportJobTransformer $transformer */
$transformer = app(ImportJobTransformer::class); $transformer = app(ImportJobTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -128,7 +117,7 @@ class ImportController extends Controller
/** /**
* Show all transactions * Show all transactions
* *
* @param Request $request * @param Request $request
* @param ImportJob $importJob * @param ImportJob $importJob
* *
* @return JsonResponse * @return JsonResponse
@@ -141,9 +130,7 @@ class ImportController extends Controller
$this->parameters->set('type', $type); $this->parameters->set('type', $type);
$types = $this->mapTransactionTypes($this->parameters->get('type')); $types = $this->mapTransactionTypes($this->parameters->get('type'));
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$tag = $importJob->tag; $tag = $importJob->tag;
$transactions = new Collection(); $transactions = new Collection();

View File

@@ -36,11 +36,9 @@ use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
/** /**
* Class LinkTypeController. * Class LinkTypeController.
@@ -98,16 +96,13 @@ class LinkTypeController extends Controller
/** /**
* List all of them. * List all of them.
* *
* @param Request $request
*
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function index(Request $request): JsonResponse public function index(): JsonResponse
{ {
// create some objects: // create some objects:
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
// get list of accounts. Count it and split it. // get list of accounts. Count it and split it.
@@ -119,9 +114,6 @@ class LinkTypeController extends Controller
$paginator = new LengthAwarePaginator($linkTypes, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($linkTypes, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.link_types.index') . $this->buildParams()); $paginator->setPath(route('api.v1.link_types.index') . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var LinkTypeTransformer $transformer */ /** @var LinkTypeTransformer $transformer */
$transformer = app(LinkTypeTransformer::class); $transformer = app(LinkTypeTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -136,17 +128,14 @@ class LinkTypeController extends Controller
/** /**
* List single resource. * List single resource.
* *
* @param Request $request
* @param LinkType $linkType * @param LinkType $linkType
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function show(Request $request, LinkType $linkType): JsonResponse public function show(LinkType $linkType): JsonResponse
{ {
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var LinkTypeTransformer $transformer */ /** @var LinkTypeTransformer $transformer */
$transformer = app(LinkTypeTransformer::class); $transformer = app(LinkTypeTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -176,9 +165,7 @@ class LinkTypeController extends Controller
$data = $request->getAll(); $data = $request->getAll();
// if currency ID is 0, find the currency by the code: // if currency ID is 0, find the currency by the code:
$linkType = $this->repository->store($data); $linkType = $this->repository->store($data);
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var LinkTypeTransformer $transformer */ /** @var LinkTypeTransformer $transformer */
$transformer = app(LinkTypeTransformer::class); $transformer = app(LinkTypeTransformer::class);
@@ -192,7 +179,7 @@ class LinkTypeController extends Controller
/** /**
* Delete the resource. * Delete the resource.
* *
* @param Request $request * @param Request $request
* @param LinkType $linkType * @param LinkType $linkType
* *
* @return JsonResponse * @return JsonResponse
@@ -205,9 +192,7 @@ class LinkTypeController extends Controller
$this->parameters->set('type', $type); $this->parameters->set('type', $type);
$types = $this->mapTransactionTypes($this->parameters->get('type')); $types = $this->mapTransactionTypes($this->parameters->get('type'));
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
// whatever is returned by the query, it must be part of these journals: // whatever is returned by the query, it must be part of these journals:
$journalIds = $this->repository->getJournalIds($linkType); $journalIds = $this->repository->getJournalIds($linkType);
@@ -254,7 +239,7 @@ class LinkTypeController extends Controller
* Update object. * Update object.
* *
* @param LinkTypeRequest $request * @param LinkTypeRequest $request
* @param LinkType $linkType * @param LinkType $linkType
* *
* @return JsonResponse * @return JsonResponse
* @throws FireflyException * @throws FireflyException
@@ -274,10 +259,7 @@ class LinkTypeController extends Controller
$data = $request->getAll(); $data = $request->getAll();
$this->repository->update($linkType, $data); $this->repository->update($linkType, $data);
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var LinkTypeTransformer $transformer */ /** @var LinkTypeTransformer $transformer */
$transformer = app(LinkTypeTransformer::class); $transformer = app(LinkTypeTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);

View File

@@ -31,13 +31,10 @@ use FireflyIII\Transformers\PiggyBankEventTransformer;
use FireflyIII\Transformers\PiggyBankTransformer; use FireflyIII\Transformers\PiggyBankTransformer;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
/** /**
* Class PiggyBankController. * Class PiggyBankController.
@@ -89,17 +86,12 @@ class PiggyBankController extends Controller
/** /**
* List all of them. * List all of them.
* *
* @param Request $request
*
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function index(Request $request): JsonResponse public function index(): JsonResponse
{ {
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// types to get, page size: // types to get, page size:
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
@@ -112,9 +104,6 @@ class PiggyBankController extends Controller
$paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.piggy_banks.index') . $this->buildParams()); $paginator->setPath(route('api.v1.piggy_banks.index') . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var PiggyBankTransformer $transformer */ /** @var PiggyBankTransformer $transformer */
$transformer = app(PiggyBankTransformer::class); $transformer = app(PiggyBankTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -129,19 +118,16 @@ class PiggyBankController extends Controller
/** /**
* List single resource. * List single resource.
* *
* @param Request $request
* @param PiggyBank $piggyBank * @param PiggyBank $piggyBank
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function piggyBankEvents(Request $request, PiggyBank $piggyBank): JsonResponse public function piggyBankEvents(PiggyBank $piggyBank): JsonResponse
{ {
// types to get, page size: // types to get, page size:
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$collection = $this->repository->getEvents($piggyBank); $collection = $this->repository->getEvents($piggyBank);
$count = $collection->count(); $count = $collection->count();
@@ -165,17 +151,14 @@ class PiggyBankController extends Controller
/** /**
* List single resource. * List single resource.
* *
* @param Request $request
* @param PiggyBank $piggyBank * @param PiggyBank $piggyBank
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function show(Request $request, PiggyBank $piggyBank): JsonResponse public function show(PiggyBank $piggyBank): JsonResponse
{ {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var PiggyBankTransformer $transformer */ /** @var PiggyBankTransformer $transformer */
$transformer = app(PiggyBankTransformer::class); $transformer = app(PiggyBankTransformer::class);
@@ -199,9 +182,7 @@ class PiggyBankController extends Controller
{ {
$piggyBank = $this->repository->store($request->getAll()); $piggyBank = $this->repository->store($request->getAll());
if (null !== $piggyBank) { if (null !== $piggyBank) {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var PiggyBankTransformer $transformer */ /** @var PiggyBankTransformer $transformer */
$transformer = app(PiggyBankTransformer::class); $transformer = app(PiggyBankTransformer::class);
@@ -219,7 +200,7 @@ class PiggyBankController extends Controller
* Update piggy bank. * Update piggy bank.
* *
* @param PiggyBankRequest $request * @param PiggyBankRequest $request
* @param PiggyBank $piggyBank * @param PiggyBank $piggyBank
* *
* @return JsonResponse * @return JsonResponse
*/ */
@@ -233,10 +214,7 @@ class PiggyBankController extends Controller
} }
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var PiggyBankTransformer $transformer */ /** @var PiggyBankTransformer $transformer */
$transformer = app(PiggyBankTransformer::class); $transformer = app(PiggyBankTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);

View File

@@ -30,12 +30,9 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Transformers\PreferenceTransformer; use FireflyIII\Transformers\PreferenceTransformer;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use League\Fractal\Manager;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
/** /**
* *
@@ -76,12 +73,10 @@ class PreferenceController extends Controller
/** /**
* List all of them. * List all of them.
* *
* @param Request $request
*
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function index(Request $request): JsonResponse public function index(): JsonResponse
{ {
/** @var User $user */ /** @var User $user */
$user = auth()->user(); $user = auth()->user();
@@ -99,12 +94,7 @@ class PreferenceController extends Controller
} }
} }
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var PreferenceTransformer $transformer */ /** @var PreferenceTransformer $transformer */
$transformer = app(PreferenceTransformer::class); $transformer = app(PreferenceTransformer::class);
@@ -119,20 +109,14 @@ class PreferenceController extends Controller
/** /**
* Return a single preference by name. * Return a single preference by name.
* *
* @param Request $request
* @param Preference $preference * @param Preference $preference
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function show(Request $request, Preference $preference): JsonResponse public function show(Preference $preference): JsonResponse
{ {
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var PreferenceTransformer $transformer */ /** @var PreferenceTransformer $transformer */
$transformer = app(PreferenceTransformer::class); $transformer = app(PreferenceTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -146,7 +130,7 @@ class PreferenceController extends Controller
* Update a preference. * Update a preference.
* *
* @param PreferenceRequest $request * @param PreferenceRequest $request
* @param Preference $preference * @param Preference $preference
* *
* @return JsonResponse * @return JsonResponse
*/ */
@@ -171,12 +155,7 @@ class PreferenceController extends Controller
} }
$result = app('preferences')->set($preference->name, $newValue); $result = app('preferences')->set($preference->name, $newValue);
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var PreferenceTransformer $transformer */ /** @var PreferenceTransformer $transformer */
$transformer = app(PreferenceTransformer::class); $transformer = app(PreferenceTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);

View File

@@ -37,11 +37,9 @@ use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
use Log; use Log;
/** /**
@@ -93,16 +91,12 @@ class RecurrenceController extends Controller
/** /**
* List all of them. * List all of them.
* *
* @param Request $request
*
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function index(Request $request): JsonResponse public function index(): JsonResponse
{ {
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// types to get, page size: // types to get, page size:
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
@@ -116,9 +110,6 @@ class RecurrenceController extends Controller
$paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.recurrences.index') . $this->buildParams()); $paginator->setPath(route('api.v1.recurrences.index') . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RecurrenceTransformer $transformer */ /** @var RecurrenceTransformer $transformer */
$transformer = app(RecurrenceTransformer::class); $transformer = app(RecurrenceTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -133,17 +124,14 @@ class RecurrenceController extends Controller
/** /**
* List single resource. * List single resource.
* *
* @param Request $request
* @param Recurrence $recurrence * @param Recurrence $recurrence
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function show(Request $request, Recurrence $recurrence): JsonResponse public function show(Recurrence $recurrence): JsonResponse
{ {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RecurrenceTransformer $transformer */ /** @var RecurrenceTransformer $transformer */
$transformer = app(RecurrenceTransformer::class); $transformer = app(RecurrenceTransformer::class);
@@ -162,14 +150,13 @@ class RecurrenceController extends Controller
* @param RecurrenceStoreRequest $request * @param RecurrenceStoreRequest $request
* *
* @return JsonResponse * @return JsonResponse
* @throws FireflyException
*/ */
public function store(RecurrenceStoreRequest $request): JsonResponse public function store(RecurrenceStoreRequest $request): JsonResponse
{ {
$data = $request->getAll(); $data = $request->getAll();
$recurrence = $this->repository->store($data); $recurrence = $this->repository->store($data);
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RecurrenceTransformer $transformer */ /** @var RecurrenceTransformer $transformer */
$transformer = app(RecurrenceTransformer::class); $transformer = app(RecurrenceTransformer::class);
@@ -196,10 +183,7 @@ class RecurrenceController extends Controller
$this->parameters->set('type', $type); $this->parameters->set('type', $type);
$types = $this->mapTransactionTypes($this->parameters->get('type')); $types = $this->mapTransactionTypes($this->parameters->get('type'));
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
// whatever is returned by the query, it must be part of these journals: // whatever is returned by the query, it must be part of these journals:
$journalIds = $this->repository->getJournalIds($recurrence); $journalIds = $this->repository->getJournalIds($recurrence);
@@ -276,9 +260,8 @@ class RecurrenceController extends Controller
{ {
$data = $request->getAll(); $data = $request->getAll();
$category = $this->repository->update($recurrence, $data); $category = $this->repository->update($recurrence, $data);
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RecurrenceTransformer $transformer */ /** @var RecurrenceTransformer $transformer */
$transformer = app(RecurrenceTransformer::class); $transformer = app(RecurrenceTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);

View File

@@ -23,7 +23,6 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers; namespace FireflyIII\Api\V1\Controllers;
use FireflyIII\Api\V1\Requests\RuleRequest;
use FireflyIII\Api\V1\Requests\RuleStoreRequest; use FireflyIII\Api\V1\Requests\RuleStoreRequest;
use FireflyIII\Api\V1\Requests\RuleTestRequest; use FireflyIII\Api\V1\Requests\RuleTestRequest;
use FireflyIII\Api\V1\Requests\RuleTriggerRequest; use FireflyIII\Api\V1\Requests\RuleTriggerRequest;
@@ -39,13 +38,10 @@ use FireflyIII\Transformers\RuleTransformer;
use FireflyIII\Transformers\TransactionGroupTransformer; use FireflyIII\Transformers\TransactionGroupTransformer;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
use Log; use Log;
/** /**
@@ -101,16 +97,12 @@ class RuleController extends Controller
/** /**
* List all of them. * List all of them.
* *
* @param Request $request
*
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function index(Request $request): JsonResponse public function index(): JsonResponse
{ {
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// types to get, page size: // types to get, page size:
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
@@ -124,9 +116,6 @@ class RuleController extends Controller
$paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.rules.index') . $this->buildParams()); $paginator->setPath(route('api.v1.rules.index') . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RuleTransformer $transformer */ /** @var RuleTransformer $transformer */
$transformer = app(RuleTransformer::class); $transformer = app(RuleTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -139,18 +128,15 @@ class RuleController extends Controller
} }
/** /**
* @param Request $request * @param Rule $rule
* @param Rule $rule
* *
* @return JsonResponse * @return JsonResponse
*/ */
public function moveDown(Request $request, Rule $rule): JsonResponse public function moveDown(Rule $rule): JsonResponse
{ {
$this->ruleRepository->moveDown($rule); $this->ruleRepository->moveDown($rule);
$rule = $this->ruleRepository->find($rule->id); $rule = $this->ruleRepository->find($rule->id);
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RuleTransformer $transformer */ /** @var RuleTransformer $transformer */
$transformer = app(RuleTransformer::class); $transformer = app(RuleTransformer::class);
@@ -163,18 +149,15 @@ class RuleController extends Controller
} }
/** /**
* @param Request $request * @param Rule $rule
* @param Rule $rule
* *
* @return JsonResponse * @return JsonResponse
*/ */
public function moveUp(Request $request, Rule $rule): JsonResponse public function moveUp(Rule $rule): JsonResponse
{ {
$this->ruleRepository->moveUp($rule); $this->ruleRepository->moveUp($rule);
$rule = $this->ruleRepository->find($rule->id); $rule = $this->ruleRepository->find($rule->id);
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RuleTransformer $transformer */ /** @var RuleTransformer $transformer */
$transformer = app(RuleTransformer::class); $transformer = app(RuleTransformer::class);
@@ -189,18 +172,14 @@ class RuleController extends Controller
/** /**
* List single resource. * List single resource.
* *
* @param Request $request * @param Rule $rule
* @param Rule $rule
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function show(Request $request, Rule $rule): JsonResponse public function show(Rule $rule): JsonResponse
{ {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RuleTransformer $transformer */ /** @var RuleTransformer $transformer */
$transformer = app(RuleTransformer::class); $transformer = app(RuleTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -221,10 +200,7 @@ class RuleController extends Controller
public function store(RuleStoreRequest $request): JsonResponse public function store(RuleStoreRequest $request): JsonResponse
{ {
$rule = $this->ruleRepository->store($request->getAll()); $rule = $this->ruleRepository->store($request->getAll());
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RuleTransformer $transformer */ /** @var RuleTransformer $transformer */
$transformer = app(RuleTransformer::class); $transformer = app(RuleTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -264,10 +240,7 @@ class RuleController extends Controller
$paginator->setPath(route('api.v1.rules.test', [$rule->id]) . $this->buildParams()); $paginator->setPath(route('api.v1.rules.test', [$rule->id]) . $this->buildParams());
// resulting list is presented as JSON thing. // resulting list is presented as JSON thing.
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var TransactionGroupTransformer $transformer */ /** @var TransactionGroupTransformer $transformer */
$transformer = app(TransactionGroupTransformer::class); $transformer = app(TransactionGroupTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -326,12 +299,9 @@ class RuleController extends Controller
*/ */
public function update(RuleUpdateRequest $request, Rule $rule): JsonResponse public function update(RuleUpdateRequest $request, Rule $rule): JsonResponse
{ {
$data = $request->getAll(); $data = $request->getAll();
$rule = $this->ruleRepository->update($rule, $data); $rule = $this->ruleRepository->update($rule, $data);
$manager = $this->getManager();
$manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RuleTransformer $transformer */ /** @var RuleTransformer $transformer */
$transformer = app(RuleTransformer::class); $transformer = app(RuleTransformer::class);

View File

@@ -40,14 +40,11 @@ use FireflyIII\Transformers\RuleTransformer;
use FireflyIII\Transformers\TransactionGroupTransformer; use FireflyIII\Transformers\TransactionGroupTransformer;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
use Log; use Log;
/** /**
@@ -62,6 +59,7 @@ class RuleGroupController extends Controller
/** /**
* RuleGroupController constructor. * RuleGroupController constructor.
*
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function __construct() public function __construct()
@@ -101,17 +99,12 @@ class RuleGroupController extends Controller
/** /**
* List all of them. * List all of them.
* *
* @param Request $request
*
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function index(Request $request): JsonResponse public function index(): JsonResponse
{ {
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// types to get, page size: // types to get, page size:
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
@@ -124,9 +117,6 @@ class RuleGroupController extends Controller
$paginator = new LengthAwarePaginator($ruleGroups, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($ruleGroups, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.rule_groups.index') . $this->buildParams()); $paginator->setPath(route('api.v1.rule_groups.index') . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RuleGroupTransformer $transformer */ /** @var RuleGroupTransformer $transformer */
$transformer = app(RuleGroupTransformer::class); $transformer = app(RuleGroupTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -138,18 +128,54 @@ class RuleGroupController extends Controller
} }
/** /**
* @param Request $request * @param RuleGroup $ruleGroup
*
* @return JsonResponse
*/
public function moveDown(RuleGroup $ruleGroup): JsonResponse
{
$this->ruleGroupRepository->moveDown($ruleGroup);
$ruleGroup = $this->ruleGroupRepository->find($ruleGroup->id);
$manager = $this->getManager();
/** @var RuleGroupTransformer $transformer */
$transformer = app(RuleGroupTransformer::class);
$transformer->setParameters($this->parameters);
$resource = new Item($ruleGroup, $transformer, 'rule_groups');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
/**
* @param RuleGroup $ruleGroup
*
* @return JsonResponse
*/
public function moveUp(RuleGroup $ruleGroup): JsonResponse
{
$this->ruleGroupRepository->moveUp($ruleGroup);
$ruleGroup = $this->ruleGroupRepository->find($ruleGroup->id);
$manager = $this->getManager();
/** @var RuleGroupTransformer $transformer */
$transformer = app(RuleGroupTransformer::class);
$transformer->setParameters($this->parameters);
$resource = new Item($ruleGroup, $transformer, 'rule_groups');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
/**
* @param RuleGroup $group * @param RuleGroup $group
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function rules(Request $request, RuleGroup $group): JsonResponse public function rules(RuleGroup $group): JsonResponse
{ {
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// types to get, page size: // types to get, page size:
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
@@ -162,9 +188,6 @@ class RuleGroupController extends Controller
$paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.rule_groups.rules', [$group->id]) . $this->buildParams()); $paginator->setPath(route('api.v1.rule_groups.rules', [$group->id]) . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RuleTransformer $transformer */ /** @var RuleTransformer $transformer */
$transformer = app(RuleTransformer::class); $transformer = app(RuleTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -179,18 +202,14 @@ class RuleGroupController extends Controller
/** /**
* List single resource. * List single resource.
* *
* @param Request $request
* @param RuleGroup $ruleGroup * @param RuleGroup $ruleGroup
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function show(Request $request, RuleGroup $ruleGroup): JsonResponse public function show(RuleGroup $ruleGroup): JsonResponse
{ {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RuleGroupTransformer $transformer */ /** @var RuleGroupTransformer $transformer */
$transformer = app(RuleGroupTransformer::class); $transformer = app(RuleGroupTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -211,9 +230,7 @@ class RuleGroupController extends Controller
public function store(RuleGroupRequest $request): JsonResponse public function store(RuleGroupRequest $request): JsonResponse
{ {
$ruleGroup = $this->ruleGroupRepository->store($request->getAll()); $ruleGroup = $this->ruleGroupRepository->store($request->getAll());
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RuleGroupTransformer $transformer */ /** @var RuleGroupTransformer $transformer */
$transformer = app(RuleGroupTransformer::class); $transformer = app(RuleGroupTransformer::class);
@@ -227,7 +244,7 @@ class RuleGroupController extends Controller
/** /**
* @param RuleGroupTestRequest $request * @param RuleGroupTestRequest $request
* @param RuleGroup $group * @param RuleGroup $group
* *
* @return JsonResponse * @return JsonResponse
* @throws FireflyException * @throws FireflyException
@@ -272,11 +289,7 @@ class RuleGroupController extends Controller
$paginator = new LengthAwarePaginator($transactions, $count, $pageSize, $parameters['page']); $paginator = new LengthAwarePaginator($transactions, $count, $pageSize, $parameters['page']);
$paginator->setPath(route('api.v1.rule_groups.test', [$group->id]) . $this->buildParams()); $paginator->setPath(route('api.v1.rule_groups.test', [$group->id]) . $this->buildParams());
// resulting list is presented as JSON thing. $manager = $this->getManager();
$manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$transformer = app(TransactionGroupTransformer::class); $transformer = app(TransactionGroupTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -290,7 +303,7 @@ class RuleGroupController extends Controller
* Execute the given rule group on a set of existing transactions. * Execute the given rule group on a set of existing transactions.
* *
* @param RuleGroupTriggerRequest $request * @param RuleGroupTriggerRequest $request
* @param RuleGroup $group * @param RuleGroup $group
* *
* @return JsonResponse * @return JsonResponse
* @throws Exception * @throws Exception
@@ -334,60 +347,14 @@ class RuleGroupController extends Controller
* Update a rule group. * Update a rule group.
* *
* @param RuleGroupRequest $request * @param RuleGroupRequest $request
* @param RuleGroup $ruleGroup * @param RuleGroup $ruleGroup
* *
* @return JsonResponse * @return JsonResponse
*/ */
public function update(RuleGroupRequest $request, RuleGroup $ruleGroup): JsonResponse public function update(RuleGroupRequest $request, RuleGroup $ruleGroup): JsonResponse
{ {
$ruleGroup = $this->ruleGroupRepository->update($ruleGroup, $request->getAll()); $ruleGroup = $this->ruleGroupRepository->update($ruleGroup, $request->getAll());
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RuleGroupTransformer $transformer */
$transformer = app(RuleGroupTransformer::class);
$transformer->setParameters($this->parameters);
$resource = new Item($ruleGroup, $transformer, 'rule_groups');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
/**
* @param Request $request
* @param RuleGroup $ruleGroup
* @return JsonResponse
*/
public function moveDown(Request $request, RuleGroup $ruleGroup): JsonResponse
{
$this->ruleGroupRepository->moveDown($ruleGroup);
$ruleGroup = $this->ruleGroupRepository->find($ruleGroup->id);
$manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RuleGroupTransformer $transformer */
$transformer = app(RuleGroupTransformer::class);
$transformer->setParameters($this->parameters);
$resource = new Item($ruleGroup, $transformer, 'rule_groups');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
/**
* @param Request $request
* @param RuleGroup $ruleGroup
* @return JsonResponse
*/
public function moveUp(Request $request, RuleGroup $ruleGroup): JsonResponse
{
$this->ruleGroupRepository->moveUp($ruleGroup);
$ruleGroup = $this->ruleGroupRepository->find($ruleGroup->id);
$manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var RuleGroupTransformer $transformer */ /** @var RuleGroupTransformer $transformer */
$transformer = app(RuleGroupTransformer::class); $transformer = app(RuleGroupTransformer::class);

View File

@@ -80,7 +80,7 @@ class SummaryController extends Controller
$this->budgetRepository = app(BudgetRepositoryInterface::class); $this->budgetRepository = app(BudgetRepositoryInterface::class);
$this->accountRepository = app(AccountRepositoryInterface::class); $this->accountRepository = app(AccountRepositoryInterface::class);
$this->abRepository = app(AvailableBudgetRepositoryInterface::class); $this->abRepository = app(AvailableBudgetRepositoryInterface::class);
$this->opsRepository = app(OperationsRepositoryInterface::class); $this->opsRepository = app(OperationsRepositoryInterface::class);
$this->billRepository->setUser($user); $this->billRepository->setUser($user);
$this->currencyRepos->setUser($user); $this->currencyRepos->setUser($user);

View File

@@ -37,11 +37,9 @@ use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
/** /**
* Class TagController * Class TagController
@@ -111,17 +109,12 @@ class TagController extends Controller
/** /**
* List all of them. * List all of them.
* *
* @param Request $request
*
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function index(Request $request): JsonResponse public function index(): JsonResponse
{ {
// create some objects: $manager = $this->getManager();
$manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// types to get, page size: // types to get, page size:
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
@@ -134,9 +127,6 @@ class TagController extends Controller
$paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.tags.index') . $this->buildParams()); $paginator->setPath(route('api.v1.tags.index') . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var TagTransformer $transformer */ /** @var TagTransformer $transformer */
$transformer = app(TagTransformer::class); $transformer = app(TagTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -150,18 +140,14 @@ class TagController extends Controller
/** /**
* List single resource. * List single resource.
* *
* @param Request $request
* @param Tag $tag * @param Tag $tag
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function show(Request $request, Tag $tag): JsonResponse public function show(Tag $tag): JsonResponse
{ {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var TagTransformer $transformer */ /** @var TagTransformer $transformer */
$transformer = app(TagTransformer::class); $transformer = app(TagTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -182,10 +168,7 @@ class TagController extends Controller
public function store(TagRequest $request): JsonResponse public function store(TagRequest $request): JsonResponse
{ {
$rule = $this->repository->store($request->getAll()); $rule = $this->repository->store($request->getAll());
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var TagTransformer $transformer */ /** @var TagTransformer $transformer */
$transformer = app(TagTransformer::class); $transformer = app(TagTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -199,7 +182,7 @@ class TagController extends Controller
* Show all transactions. * Show all transactions.
* *
* @param Request $request * @param Request $request
* @param Tag $tag * @param Tag $tag
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
@@ -211,10 +194,7 @@ class TagController extends Controller
$this->parameters->set('type', $type); $this->parameters->set('type', $type);
$types = $this->mapTransactionTypes($this->parameters->get('type')); $types = $this->mapTransactionTypes($this->parameters->get('type'));
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var User $admin */ /** @var User $admin */
$admin = auth()->user(); $admin = auth()->user();
@@ -255,16 +235,14 @@ class TagController extends Controller
* Update a rule. * Update a rule.
* *
* @param TagRequest $request * @param TagRequest $request
* @param Tag $tag * @param Tag $tag
* *
* @return JsonResponse * @return JsonResponse
*/ */
public function update(TagRequest $request, Tag $tag): JsonResponse public function update(TagRequest $request, Tag $tag): JsonResponse
{ {
$rule = $this->repository->update($tag, $request->getAll()); $rule = $this->repository->update($tag, $request->getAll());
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var TagTransformer $transformer */ /** @var TagTransformer $transformer */
$transformer = app(TagTransformer::class); $transformer = app(TagTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -275,10 +253,29 @@ class TagController extends Controller
} }
/**
* @param array $cloud
* @param float $min
* @param float $max
*
* @return array
*/
private function analyseTagCloud(array $cloud, float $min, float $max): array
{
foreach (array_keys($cloud['tags']) as $index) {
$cloud['tags'][$index]['relative'] = round($cloud['tags'][$index]['size'] / $max, 4);
}
$cloud['min'] = $min;
$cloud['max'] = $max;
return $cloud;
}
/** /**
* @param Collection $tags * @param Collection $tags
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
*
* @return array * @return array
*/ */
private function getTagCloud(Collection $tags, Carbon $start, Carbon $end): array private function getTagCloud(Collection $tags, Carbon $start, Carbon $end): array
@@ -307,21 +304,4 @@ class TagController extends Controller
return $cloud; return $cloud;
} }
/**
* @param array $cloud
* @param float $min
* @param float $max
* @return array
*/
private function analyseTagCloud(array $cloud, float $min, float $max): array
{
foreach (array_keys($cloud['tags']) as $index) {
$cloud['tags'][$index]['relative'] = round($cloud['tags'][$index]['size'] / $max, 4);
}
$cloud['min'] = $min;
$cloud['max'] = $max;
return $cloud;
}
} }

View File

@@ -28,7 +28,6 @@ use FireflyIII\Api\V1\Requests\TransactionStoreRequest;
use FireflyIII\Api\V1\Requests\TransactionUpdateRequest; use FireflyIII\Api\V1\Requests\TransactionUpdateRequest;
use FireflyIII\Events\StoredTransactionGroup; use FireflyIII\Events\StoredTransactionGroup;
use FireflyIII\Events\UpdatedTransactionGroup; use FireflyIII\Events\UpdatedTransactionGroup;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionGroup;
use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournal;
@@ -42,11 +41,9 @@ use FireflyIII\Transformers\TransactionGroupTransformer;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
use Log; use Log;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
@@ -59,11 +56,10 @@ class TransactionController extends Controller
/** @var TransactionGroupRepositoryInterface Group repository. */ /** @var TransactionGroupRepositoryInterface Group repository. */
private $groupRepository; private $groupRepository;
/** @var JournalRepositoryInterface The journal repository */
private $repository;
/** @var JournalAPIRepositoryInterface Journal API repos */ /** @var JournalAPIRepositoryInterface Journal API repos */
private $journalAPIRepository; private $journalAPIRepository;
/** @var JournalRepositoryInterface The journal repository */
private $repository;
/** /**
* TransactionController constructor. * TransactionController constructor.
@@ -91,18 +87,14 @@ class TransactionController extends Controller
} }
/** /**
* @param Request $request
* @param TransactionJournal $transactionJournal * @param TransactionJournal $transactionJournal
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function attachments(Request $request, TransactionJournal $transactionJournal): JsonResponse public function attachments(TransactionJournal $transactionJournal): JsonResponse
{ {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$attachments = $this->journalAPIRepository->getAttachments($transactionJournal); $attachments = $this->journalAPIRepository->getAttachments($transactionJournal);
/** @var AttachmentTransformer $transformer */ /** @var AttachmentTransformer $transformer */
@@ -160,10 +152,7 @@ class TransactionController extends Controller
$this->parameters->set('type', $type); $this->parameters->set('type', $type);
$types = $this->mapTransactionTypes($this->parameters->get('type')); $types = $this->mapTransactionTypes($this->parameters->get('type'));
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var User $admin */ /** @var User $admin */
$admin = auth()->user(); $admin = auth()->user();
@@ -200,19 +189,15 @@ class TransactionController extends Controller
} }
/** /**
* @param Request $request
* @param TransactionJournal $transactionJournal * @param TransactionJournal $transactionJournal
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function piggyBankEvents(Request $request, TransactionJournal $transactionJournal): JsonResponse public function piggyBankEvents(TransactionJournal $transactionJournal): JsonResponse
{ {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; $events = $this->journalAPIRepository->getPiggyBankEvents($transactionJournal);
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$events = $this->journalAPIRepository->getPiggyBankEvents($transactionJournal);
/** @var PiggyBankEventTransformer $transformer */ /** @var PiggyBankEventTransformer $transformer */
$transformer = app(PiggyBankEventTransformer::class); $transformer = app(PiggyBankEventTransformer::class);
@@ -227,18 +212,14 @@ class TransactionController extends Controller
/** /**
* Show a single transaction. * Show a single transaction.
* *
* @param Request $request
* @param TransactionGroup $transactionGroup * @param TransactionGroup $transactionGroup
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function show(Request $request, TransactionGroup $transactionGroup): JsonResponse public function show(TransactionGroup $transactionGroup): JsonResponse
{ {
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var User $admin */ /** @var User $admin */
$admin = auth()->user(); $admin = auth()->user();
// use new group collector: // use new group collector:
@@ -269,7 +250,6 @@ class TransactionController extends Controller
* @param TransactionStoreRequest $request * @param TransactionStoreRequest $request
* *
* @return JsonResponse * @return JsonResponse
* @throws FireflyException
*/ */
public function store(TransactionStoreRequest $request): JsonResponse public function store(TransactionStoreRequest $request): JsonResponse
{ {
@@ -283,10 +263,7 @@ class TransactionController extends Controller
event(new StoredTransactionGroup($transactionGroup)); event(new StoredTransactionGroup($transactionGroup));
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var User $admin */ /** @var User $admin */
$admin = auth()->user(); $admin = auth()->user();
// use new group collector: // use new group collector:
@@ -316,7 +293,7 @@ class TransactionController extends Controller
* Update a transaction. * Update a transaction.
* *
* @param TransactionUpdateRequest $request * @param TransactionUpdateRequest $request
* @param TransactionGroup $transactionGroup * @param TransactionGroup $transactionGroup
* *
* @return JsonResponse * @return JsonResponse
*/ */
@@ -325,9 +302,7 @@ class TransactionController extends Controller
Log::debug('Now in update routine.'); Log::debug('Now in update routine.');
$data = $request->getAll(); $data = $request->getAll();
$transactionGroup = $this->groupRepository->update($transactionGroup, $data); $transactionGroup = $this->groupRepository->update($transactionGroup, $data);
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
event(new UpdatedTransactionGroup($transactionGroup)); event(new UpdatedTransactionGroup($transactionGroup));

View File

@@ -34,11 +34,9 @@ use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
/** /**
* Class TransactionLinkController * Class TransactionLinkController
@@ -54,6 +52,7 @@ class TransactionLinkController extends Controller
/** /**
* TransactionLinkController constructor. * TransactionLinkController constructor.
*
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function __construct() public function __construct()
@@ -101,9 +100,7 @@ class TransactionLinkController extends Controller
public function index(Request $request): JsonResponse public function index(Request $request): JsonResponse
{ {
// create some objects: // create some objects:
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
// read type from URI // read type from URI
$name = $request->get('name'); $name = $request->get('name');
@@ -120,9 +117,6 @@ class TransactionLinkController extends Controller
$paginator = new LengthAwarePaginator($journalLinks, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($journalLinks, $count, $pageSize, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.transaction_links.index') . $this->buildParams()); $paginator->setPath(route('api.v1.transaction_links.index') . $this->buildParams());
// present to user.
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var TransactionLinkTransformer $transformer */ /** @var TransactionLinkTransformer $transformer */
$transformer = app(TransactionLinkTransformer::class); $transformer = app(TransactionLinkTransformer::class);
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
@@ -137,17 +131,14 @@ class TransactionLinkController extends Controller
/** /**
* List single resource. * List single resource.
* *
* @param Request $request
* @param TransactionJournalLink $journalLink * @param TransactionJournalLink $journalLink
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function show(Request $request, TransactionJournalLink $journalLink): JsonResponse public function show(TransactionJournalLink $journalLink): JsonResponse
{ {
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
/** @var TransactionLinkTransformer $transformer */ /** @var TransactionLinkTransformer $transformer */
$transformer = app(TransactionLinkTransformer::class); $transformer = app(TransactionLinkTransformer::class);
@@ -169,10 +160,7 @@ class TransactionLinkController extends Controller
*/ */
public function store(TransactionLinkRequest $request): JsonResponse public function store(TransactionLinkRequest $request): JsonResponse
{ {
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$data = $request->getAll(); $data = $request->getAll();
$inward = $this->journalRepository->findNull($data['inward_id'] ?? 0); $inward = $this->journalRepository->findNull($data['inward_id'] ?? 0);
$outward = $this->journalRepository->findNull($data['outward_id'] ?? 0); $outward = $this->journalRepository->findNull($data['outward_id'] ?? 0);
@@ -203,9 +191,7 @@ class TransactionLinkController extends Controller
*/ */
public function update(TransactionLinkRequest $request, TransactionJournalLink $journalLink): JsonResponse public function update(TransactionLinkRequest $request, TransactionJournalLink $journalLink): JsonResponse
{ {
$manager = new Manager; $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$data = $request->getAll(); $data = $request->getAll();
$data['inward'] = $this->journalRepository->findNull($data['inward_id'] ?? 0); $data['inward'] = $this->journalRepository->findNull($data['inward_id'] ?? 0);
$data['outward'] = $this->journalRepository->findNull($data['outward_id'] ?? 0); $data['outward'] = $this->journalRepository->findNull($data['outward_id'] ?? 0);

View File

@@ -31,13 +31,10 @@ use FireflyIII\Repositories\User\UserRepositoryInterface;
use FireflyIII\Transformers\UserTransformer; use FireflyIII\Transformers\UserTransformer;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
/** /**
@@ -52,6 +49,7 @@ class UserController extends Controller
/** /**
* UserController constructor. * UserController constructor.
*
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function __construct() public function __construct()
@@ -91,20 +89,14 @@ class UserController extends Controller
/** /**
* Display a listing of the resource. * Display a listing of the resource.
* *
* @param Request $request
*
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function index(Request $request): JsonResponse public function index(): JsonResponse
{ {
// user preferences // user preferences
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$manager = $this->getManager();
// make manager
$manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
// build collection // build collection
$collection = $this->repository->all(); $collection = $this->repository->all();
@@ -129,19 +121,15 @@ class UserController extends Controller
/** /**
* Show a single user. * Show a single user.
* *
* @param Request $request
* @param User $user * @param User $user
* *
* @return JsonResponse * @return JsonResponse
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function show(Request $request, User $user): JsonResponse public function show(User $user): JsonResponse
{ {
// make manager // make manager
$manager = new Manager(); $manager = $this->getManager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
// make resource // make resource
/** @var UserTransformer $transformer */ /** @var UserTransformer $transformer */
$transformer = app(UserTransformer::class); $transformer = app(UserTransformer::class);
@@ -161,13 +149,9 @@ class UserController extends Controller
*/ */
public function store(UserStoreRequest $request): JsonResponse public function store(UserStoreRequest $request): JsonResponse
{ {
$data = $request->getAll(); $data = $request->getAll();
$user = $this->repository->store($data); $user = $this->repository->store($data);
$manager = $this->getManager();
// make manager
$manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
// make resource // make resource
@@ -184,20 +168,15 @@ class UserController extends Controller
* Update a user. * Update a user.
* *
* @param UserUpdateRequest $request * @param UserUpdateRequest $request
* @param User $user * @param User $user
* *
* @return JsonResponse * @return JsonResponse
*/ */
public function update(UserUpdateRequest $request, User $user): JsonResponse public function update(UserUpdateRequest $request, User $user): JsonResponse
{ {
$data = $request->getAll(); $data = $request->getAll();
$user = $this->repository->update($user, $data); $user = $this->repository->update($user, $data);
$manager = $this->getManager();
// make manager
$manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
// make resource // make resource
/** @var UserTransformer $transformer */ /** @var UserTransformer $transformer */
$transformer = app(UserTransformer::class); $transformer = app(UserTransformer::class);

View File

@@ -28,6 +28,7 @@ use FireflyIII\Rules\IsBoolean;
/** /**
* Class AccountStoreRequest * Class AccountStoreRequest
*
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
class AccountStoreRequest extends Request class AccountStoreRequest extends Request

View File

@@ -28,11 +28,23 @@ use FireflyIII\Rules\IsBoolean;
/** /**
* Class AccountUpdateRequest * Class AccountUpdateRequest
*
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
class AccountUpdateRequest extends Request class AccountUpdateRequest extends Request
{ {
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
/** /**
* @return array * @return array
*/ */
@@ -79,17 +91,6 @@ class AccountUpdateRequest extends Request
return $data; return $data;
} }
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
/** /**
* The rules that the incoming request must be matched against. * The rules that the incoming request must be matched against.
* *

View File

@@ -30,6 +30,7 @@ use FireflyIII\Rules\IsValidAttachmentModel;
/** /**
* Class AttachmentStoreRequest * Class AttachmentStoreRequest
*
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
class AttachmentStoreRequest extends Request class AttachmentStoreRequest extends Request
@@ -77,6 +78,7 @@ class AttachmentStoreRequest extends Request
] ]
); );
$model = $this->string('model'); $model = $this->string('model');
return [ return [
'filename' => 'required|between:1,255', 'filename' => 'required|between:1,255',
'title' => 'between:1,255', 'title' => 'between:1,255',

View File

@@ -28,6 +28,7 @@ use FireflyIII\Rules\IsBoolean;
/** /**
* Class BudgetRequest * Class BudgetRequest
*
* @codeCoverageIgnore * @codeCoverageIgnore
* TODO AFTER 4.8,0: split this into two request classes. * TODO AFTER 4.8,0: split this into two request classes.
*/ */

View File

@@ -27,6 +27,7 @@ use FireflyIII\Models\Category;
/** /**
* Class CategoryRequest * Class CategoryRequest
*
* @codeCoverageIgnore * @codeCoverageIgnore
* TODO AFTER 4.8,0: split this into two request classes. * TODO AFTER 4.8,0: split this into two request classes.
*/ */

View File

@@ -28,6 +28,7 @@ use FireflyIII\Rules\IsBoolean;
/** /**
* Class ConfigurationRequest * Class ConfigurationRequest
*
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
class ConfigurationRequest extends Request class ConfigurationRequest extends Request

View File

@@ -28,6 +28,7 @@ use FireflyIII\Rules\IsBoolean;
/** /**
* Class CurrencyRequest * Class CurrencyRequest
*
* @codeCoverageIgnore * @codeCoverageIgnore
* TODO AFTER 4.8,0: split this into two request classes. * TODO AFTER 4.8,0: split this into two request classes.
*/ */

View File

@@ -29,6 +29,7 @@ use Illuminate\Validation\Rule;
/** /**
* *
* Class LinkTypeRequest * Class LinkTypeRequest
*
* @codeCoverageIgnore * @codeCoverageIgnore
* TODO AFTER 4.8,0: split this into two request classes. * TODO AFTER 4.8,0: split this into two request classes.
*/ */

View File

@@ -31,6 +31,7 @@ use FireflyIII\Rules\ZeroOrMore;
/** /**
* *
* Class PiggyBankRequest * Class PiggyBankRequest
*
* @codeCoverageIgnore * @codeCoverageIgnore
* TODO AFTER 4.8,0: split this into two request classes. * TODO AFTER 4.8,0: split this into two request classes.
*/ */

View File

@@ -26,6 +26,7 @@ namespace FireflyIII\Api\V1\Requests;
/** /**
* *
* Class PreferenceRequest * Class PreferenceRequest
*
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
class PreferenceRequest extends Request class PreferenceRequest extends Request

View File

@@ -93,18 +93,18 @@ class RecurrenceUpdateRequest extends Request
$recurrence = $this->route()->parameter('recurrence'); $recurrence = $this->route()->parameter('recurrence');
return [ return [
'type' => 'in:withdrawal,transfer,deposit', 'type' => 'in:withdrawal,transfer,deposit',
'title' => sprintf('between:1,255|uniqueObjectForUser:recurrences,title,%d', $recurrence->id), 'title' => sprintf('between:1,255|uniqueObjectForUser:recurrences,title,%d', $recurrence->id),
'description' => 'between:1,65000', 'description' => 'between:1,65000',
'first_date' => 'date', 'first_date' => 'date',
'apply_rules' => [new IsBoolean], 'apply_rules' => [new IsBoolean],
'active' => [new IsBoolean], 'active' => [new IsBoolean],
'repeat_until' => 'date', 'repeat_until' => 'date',
'nr_of_repetitions' => 'numeric|between:1,31', 'nr_of_repetitions' => 'numeric|between:1,31',
'repetitions.*.type' => 'in:daily,weekly,ndom,monthly,yearly', 'repetitions.*.type' => 'in:daily,weekly,ndom,monthly,yearly',
'repetitions.*.moment' => 'between:0,10', 'repetitions.*.moment' => 'between:0,10',
'repetitions.*.skip' => 'required|numeric|between:0,31', 'repetitions.*.skip' => 'required|numeric|between:0,31',
'repetitions.*.weekend' => 'required|numeric|min:1|max:4', 'repetitions.*.weekend' => 'required|numeric|min:1|max:4',
'transactions.*.description' => 'required|between:1,255', 'transactions.*.description' => 'required|between:1,255',
'transactions.*.amount' => 'required|numeric|more:0', 'transactions.*.amount' => 'required|numeric|more:0',

View File

@@ -75,8 +75,33 @@ class RuleGroupTestRequest extends Request
return []; return [];
} }
/**
* @return Collection
*/
private function getAccounts(): Collection
{
$accountList = '' === (string)$this->query('accounts') ? [] : explode(',', $this->query('accounts'));
$accounts = new Collection;
/** @var AccountRepositoryInterface $accountRepository */
$accountRepository = app(AccountRepositoryInterface::class);
foreach ($accountList as $accountId) {
Log::debug(sprintf('Searching for asset account with id "%s"', $accountId));
$account = $accountRepository->findNull((int)$accountId);
if ($this->validAccount($account)) {
/** @noinspection NullPointerExceptionInspection */
Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name));
$accounts->push($account);
}
}
return $accounts;
}
/** /**
* @param string $field * @param string $field
*
* @return Carbon|null * @return Carbon|null
*/ */
private function getDate(string $field): ?Carbon private function getDate(string $field): ?Carbon
@@ -112,32 +137,9 @@ class RuleGroupTestRequest extends Request
return 0 === (int)$this->query('triggered_limit') ? (int)config('firefly.test-triggers.range') : (int)$this->query('triggered_limit'); return 0 === (int)$this->query('triggered_limit') ? (int)config('firefly.test-triggers.range') : (int)$this->query('triggered_limit');
} }
/**
* @return Collection
*/
private function getAccounts(): Collection
{
$accountList = '' === (string)$this->query('accounts') ? [] : explode(',', $this->query('accounts'));
$accounts = new Collection;
/** @var AccountRepositoryInterface $accountRepository */
$accountRepository = app(AccountRepositoryInterface::class);
foreach ($accountList as $accountId) {
Log::debug(sprintf('Searching for asset account with id "%s"', $accountId));
$account = $accountRepository->findNull((int)$accountId);
if ($this->validAccount($account)) {
/** @noinspection NullPointerExceptionInspection */
Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name));
$accounts->push($account);
}
}
return $accounts;
}
/** /**
* @param Account|null $account * @param Account|null $account
*
* @return bool * @return bool
*/ */
private function validAccount(?Account $account): bool private function validAccount(?Account $account): bool

View File

@@ -75,18 +75,6 @@ class RuleGroupTriggerRequest extends Request
]; ];
} }
/**
* @param string $field
* @return Carbon|null
*/
private function getDate(string $field): ?Carbon
{
/** @var Carbon $result */
$result = null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field));
return $result;
}
/** /**
* @return Collection * @return Collection
*/ */
@@ -111,8 +99,22 @@ class RuleGroupTriggerRequest extends Request
return $accounts; return $accounts;
} }
/**
* @param string $field
*
* @return Carbon|null
*/
private function getDate(string $field): ?Carbon
{
/** @var Carbon $result */
$result = null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field));
return $result;
}
/** /**
* @param Account|null $account * @param Account|null $account
*
* @return bool * @return bool
*/ */
private function validAccount(?Account $account): bool private function validAccount(?Account $account): bool

View File

@@ -133,21 +133,6 @@ class RuleStoreRequest extends Request
); );
} }
/**
* Adds an error to the validator when there are no repetitions in the array of data.
*
* @param Validator $validator
*/
protected function atLeastOneTrigger(Validator $validator): void
{
$data = $validator->getData();
$triggers = $data['triggers'] ?? [];
// need at least one trigger
if (0 === count($triggers)) {
$validator->errors()->add('title', (string)trans('validation.at_least_one_trigger'));
}
}
/** /**
* Adds an error to the validator when there are no repetitions in the array of data. * Adds an error to the validator when there are no repetitions in the array of data.
* *
@@ -164,24 +149,18 @@ class RuleStoreRequest extends Request
} }
/** /**
* @return array * Adds an error to the validator when there are no repetitions in the array of data.
*
* @param Validator $validator
*/ */
private function getRuleTriggers(): array protected function atLeastOneTrigger(Validator $validator): void
{ {
$triggers = $this->get('triggers'); $data = $validator->getData();
$return = []; $triggers = $data['triggers'] ?? [];
if (is_array($triggers)) { // need at least one trigger
foreach ($triggers as $trigger) { if (0 === count($triggers)) {
$return[] = [ $validator->errors()->add('title', (string)trans('validation.at_least_one_trigger'));
'type' => $trigger['type'],
'value' => $trigger['value'],
'active' => $this->convertBoolean((string)($trigger['active'] ?? 'false')),
'stop_processing' => $this->convertBoolean((string)($trigger['stop_processing'] ?? 'false')),
];
}
} }
return $return;
} }
/** /**
@@ -204,4 +183,25 @@ class RuleStoreRequest extends Request
return $return; return $return;
} }
/**
* @return array
*/
private function getRuleTriggers(): array
{
$triggers = $this->get('triggers');
$return = [];
if (is_array($triggers)) {
foreach ($triggers as $trigger) {
$return[] = [
'type' => $trigger['type'],
'value' => $trigger['value'],
'active' => $this->convertBoolean((string)($trigger['active'] ?? 'false')),
'stop_processing' => $this->convertBoolean((string)($trigger['stop_processing'] ?? 'false')),
];
}
}
return $return;
}
} }

View File

@@ -75,8 +75,33 @@ class RuleTestRequest extends Request
return []; return [];
} }
/**
* @return Collection
*/
private function getAccounts(): Collection
{
$accountList = '' === (string)$this->query('accounts') ? [] : explode(',', $this->query('accounts'));
$accounts = new Collection;
/** @var AccountRepositoryInterface $accountRepository */
$accountRepository = app(AccountRepositoryInterface::class);
foreach ($accountList as $accountId) {
Log::debug(sprintf('Searching for asset account with id "%s"', $accountId));
$account = $accountRepository->findNull((int)$accountId);
if ($this->validAccount($account)) {
/** @noinspection NullPointerExceptionInspection */
Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name));
$accounts->push($account);
}
}
return $accounts;
}
/** /**
* @param string $field * @param string $field
*
* @return Carbon|null * @return Carbon|null
*/ */
private function getDate(string $field): ?Carbon private function getDate(string $field): ?Carbon
@@ -112,32 +137,9 @@ class RuleTestRequest extends Request
return 0 === (int)$this->query('triggered_limit') ? (int)config('firefly.test-triggers.range') : (int)$this->query('triggered_limit'); return 0 === (int)$this->query('triggered_limit') ? (int)config('firefly.test-triggers.range') : (int)$this->query('triggered_limit');
} }
/**
* @return Collection
*/
private function getAccounts(): Collection
{
$accountList = '' === (string)$this->query('accounts') ? [] : explode(',', $this->query('accounts'));
$accounts = new Collection;
/** @var AccountRepositoryInterface $accountRepository */
$accountRepository = app(AccountRepositoryInterface::class);
foreach ($accountList as $accountId) {
Log::debug(sprintf('Searching for asset account with id "%s"', $accountId));
$account = $accountRepository->findNull((int)$accountId);
if ($this->validAccount($account)) {
/** @noinspection NullPointerExceptionInspection */
Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name));
$accounts->push($account);
}
}
return $accounts;
}
/** /**
* @param Account|null $account * @param Account|null $account
*
* @return bool * @return bool
*/ */
private function validAccount(?Account $account): bool private function validAccount(?Account $account): bool

View File

@@ -74,18 +74,6 @@ class RuleTriggerRequest extends Request
]; ];
} }
/**
* @param string $field
* @return Carbon|null
*/
private function getDate(string $field): ?Carbon
{
/** @var Carbon $result */
$result = null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field));
return $result;
}
/** /**
* @return Collection * @return Collection
*/ */
@@ -110,8 +98,22 @@ class RuleTriggerRequest extends Request
return $accounts; return $accounts;
} }
/**
* @param string $field
*
* @return Carbon|null
*/
private function getDate(string $field): ?Carbon
{
/** @var Carbon $result */
$result = null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field));
return $result;
}
/** /**
* @param Account|null $account * @param Account|null $account
*
* @return bool * @return bool
*/ */
private function validAccount(?Account $account): bool private function validAccount(?Account $account): bool

View File

@@ -143,11 +143,9 @@ class RuleUpdateRequest extends Request
{ {
$data = $validator->getData(); $data = $validator->getData();
$actions = $data['actions'] ?? null; $actions = $data['actions'] ?? null;
if (is_array($actions)) { // need at least one action
// need at least one action if (is_array($actions) && 0 === count($actions)) {
if (0 === count($actions)) { $validator->errors()->add('title', (string)trans('validation.at_least_one_action'));
$validator->errors()->add('title', (string)trans('validation.at_least_one_action'));
}
} }
} }
@@ -160,11 +158,9 @@ class RuleUpdateRequest extends Request
{ {
$data = $validator->getData(); $data = $validator->getData();
$triggers = $data['triggers'] ?? null; $triggers = $data['triggers'] ?? null;
if (is_array($triggers)) { // need at least one trigger
// need at least one trigger if (is_array($triggers) && 0 === count($triggers)) {
if (0 === count($triggers)) { $validator->errors()->add('title', (string)trans('validation.at_least_one_trigger'));
$validator->errors()->add('title', (string)trans('validation.at_least_one_trigger'));
}
} }
} }

View File

@@ -192,7 +192,7 @@ class TransactionStoreRequest extends Request
{ {
$return = []; $return = [];
/** /**
* @var int $index * @var int $index
* @var array $transaction * @var array $transaction
*/ */
foreach ($this->get('transactions') as $index => $transaction) { foreach ($this->get('transactions') as $index => $transaction) {

View File

@@ -276,7 +276,7 @@ class TransactionUpdateRequest extends Request
Log::debug('Now in getTransactionData()'); Log::debug('Now in getTransactionData()');
$return = []; $return = [];
/** /**
* @var int $index * @var int $index
* @var array $transaction * @var array $transaction
*/ */
foreach ($this->get('transactions') as $index => $transaction) { foreach ($this->get('transactions') as $index => $transaction) {

View File

@@ -33,7 +33,9 @@ use FireflyIII\Repositories\Budget\NoBudgetRepositoryInterface;
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
use FireflyIII\Support\CacheProperties; use FireflyIII\Support\CacheProperties;
use FireflyIII\Support\Http\Controllers\BasicDataSupport; use FireflyIII\Support\Http\Controllers\BasicDataSupport;
use Illuminate\Contracts\View\Factory;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\View\View;
use Log; use Log;
use Throwable; use Throwable;
@@ -79,7 +81,7 @@ class BudgetController extends Controller
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* *
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View * @return Factory|View
*/ */
public function accountPerBudget(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end) public function accountPerBudget(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end)
{ {
@@ -131,7 +133,7 @@ class BudgetController extends Controller
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* *
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View * @return Factory|View
*/ */
public function accounts(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end) public function accounts(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end)
{ {
@@ -239,7 +241,7 @@ class BudgetController extends Controller
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* *
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View * @return Factory|View
*/ */
public function budgets(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end) public function budgets(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end)
{ {

View File

@@ -31,7 +31,9 @@ use FireflyIII\Repositories\Category\NoCategoryRepositoryInterface;
use FireflyIII\Repositories\Category\OperationsRepositoryInterface; use FireflyIII\Repositories\Category\OperationsRepositoryInterface;
use FireflyIII\Support\CacheProperties; use FireflyIII\Support\CacheProperties;
use FireflyIII\Support\Http\Controllers\BasicDataSupport; use FireflyIII\Support\Http\Controllers\BasicDataSupport;
use Illuminate\Contracts\View\Factory;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\View\View;
use Log; use Log;
use Throwable; use Throwable;
@@ -69,7 +71,7 @@ class CategoryController extends Controller
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* *
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View * @return Factory|View
*/ */
public function accountPerCategory(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) public function accountPerCategory(Collection $accounts, Collection $categories, Carbon $start, Carbon $end)
{ {
@@ -168,7 +170,7 @@ class CategoryController extends Controller
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* *
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View * @return Factory|View
*/ */
public function accounts(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) public function accounts(Collection $accounts, Collection $categories, Carbon $start, Carbon $end)
{ {
@@ -268,7 +270,113 @@ class CategoryController extends Controller
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* *
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View * @return array|string
*/
public function avgExpenses(Collection $accounts, Collection $categories, Carbon $start, Carbon $end)
{
$spent = $this->opsRepository->listExpenses($start, $end, $accounts, $categories);
$result = [];
foreach ($spent as $currency) {
$currencyId = $currency['currency_id'];
foreach ($currency['categories'] as $category) {
foreach ($category['transaction_journals'] as $journal) {
$destinationId = $journal['destination_account_id'];
$key = sprintf('%d-%d', $destinationId, $currency['currency_id']);
$result[$key] = $result[$key] ?? [
'transactions' => 0,
'sum' => '0',
'avg' => '0',
'avg_float' => 0,
'destination_account_name' => $journal['destination_account_name'],
'destination_account_id' => $journal['destination_account_id'],
'currency_id' => $currency['currency_id'],
'currency_name' => $currency['currency_name'],
'currency_symbol' => $currency['currency_symbol'],
'currency_decimal_places' => $currency['currency_decimal_places'],
];
$result[$key]['transactions']++;
$result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']);
$result[$key]['avg'] = bcdiv($result[$key]['sum'], (string)$result[$key]['transactions']);
$result[$key]['avg_float'] = (float)$result[$key]['avg'];
}
}
}
// sort by amount_float
// sort temp array by amount.
$amounts = array_column($result, 'avg_float');
array_multisort($amounts, SORT_ASC, $result);
try {
$result = view('reports.category.partials.avg-expenses', compact('result'))->render();
// @codeCoverageIgnoreStart
} catch (Throwable $e) {
Log::debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage()));
$result = sprintf('Could not render view: %s', $e->getMessage());
}
return $result;
}
/**
* @param Collection $accounts
* @param Collection $categories
* @param Carbon $start
* @param Carbon $end
*
* @return array|string
*/
public function avgIncome(Collection $accounts, Collection $categories, Carbon $start, Carbon $end)
{
$spent = $this->opsRepository->listIncome($start, $end, $accounts, $categories);
$result = [];
foreach ($spent as $currency) {
$currencyId = $currency['currency_id'];
foreach ($currency['categories'] as $category) {
foreach ($category['transaction_journals'] as $journal) {
$sourceId = $journal['source_account_id'];
$key = sprintf('%d-%d', $sourceId, $currency['currency_id']);
$result[$key] = $result[$key] ?? [
'transactions' => 0,
'sum' => '0',
'avg' => '0',
'avg_float' => 0,
'source_account_name' => $journal['source_account_name'],
'source_account_id' => $journal['source_account_id'],
'currency_id' => $currency['currency_id'],
'currency_name' => $currency['currency_name'],
'currency_symbol' => $currency['currency_symbol'],
'currency_decimal_places' => $currency['currency_decimal_places'],
];
$result[$key]['transactions']++;
$result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']);
$result[$key]['avg'] = bcdiv($result[$key]['sum'], (string)$result[$key]['transactions']);
$result[$key]['avg_float'] = (float)$result[$key]['avg'];
}
}
}
// sort by amount_float
// sort temp array by amount.
$amounts = array_column($result, 'avg_float');
array_multisort($amounts, SORT_DESC, $result);
try {
$result = view('reports.category.partials.avg-income', compact('result'))->render();
// @codeCoverageIgnoreStart
} catch (Throwable $e) {
Log::debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage()));
$result = sprintf('Could not render view: %s', $e->getMessage());
}
return $result;
}
/**
* @param Collection $accounts
* @param Collection $categories
* @param Carbon $start
* @param Carbon $end
*
* @return Factory|View
*/ */
public function categories(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) public function categories(Collection $accounts, Collection $categories, Carbon $start, Carbon $end)
{ {
@@ -808,19 +916,19 @@ class CategoryController extends Controller
foreach ($currency['categories'] as $category) { foreach ($currency['categories'] as $category) {
foreach ($category['transaction_journals'] as $journal) { foreach ($category['transaction_journals'] as $journal) {
$result[] = [ $result[] = [
'description' => $journal['description'], 'description' => $journal['description'],
'transaction_group_id' => $journal['transaction_group_id'], 'transaction_group_id' => $journal['transaction_group_id'],
'amount_float' => (float)$journal['amount'], 'amount_float' => (float)$journal['amount'],
'amount' => $journal['amount'], 'amount' => $journal['amount'],
'date' => $journal['date']->formatLocalized($this->monthAndDayFormat), 'date' => $journal['date']->formatLocalized($this->monthAndDayFormat),
'source_account_name' => $journal['source_account_name'], 'source_account_name' => $journal['source_account_name'],
'source_account_id' => $journal['source_account_id'], 'source_account_id' => $journal['source_account_id'],
'currency_id' => $currency['currency_id'], 'currency_id' => $currency['currency_id'],
'currency_name' => $currency['currency_name'], 'currency_name' => $currency['currency_name'],
'currency_symbol' => $currency['currency_symbol'], 'currency_symbol' => $currency['currency_symbol'],
'currency_decimal_places' => $currency['currency_decimal_places'], 'currency_decimal_places' => $currency['currency_decimal_places'],
'category_id' => $category['id'], 'category_id' => $category['id'],
'category_name' => $category['name'], 'category_name' => $category['name'],
]; ];
} }
} }
@@ -841,112 +949,6 @@ class CategoryController extends Controller
return $result; return $result;
} }
/**
* @param Collection $accounts
* @param Collection $categories
* @param Carbon $start
* @param Carbon $end
*
* @return array|string
*/
public function avgExpenses(Collection $accounts, Collection $categories, Carbon $start, Carbon $end)
{
$spent = $this->opsRepository->listExpenses($start, $end, $accounts, $categories);
$result = [];
foreach ($spent as $currency) {
$currencyId = $currency['currency_id'];
foreach ($currency['categories'] as $category) {
foreach ($category['transaction_journals'] as $journal) {
$destinationId = $journal['destination_account_id'];
$key = sprintf('%d-%d', $destinationId, $currency['currency_id']);
$result[$key] = $result[$key] ?? [
'transactions' => 0,
'sum' => '0',
'avg' => '0',
'avg_float' => 0,
'destination_account_name' => $journal['destination_account_name'],
'destination_account_id' => $journal['destination_account_id'],
'currency_id' => $currency['currency_id'],
'currency_name' => $currency['currency_name'],
'currency_symbol' => $currency['currency_symbol'],
'currency_decimal_places' => $currency['currency_decimal_places'],
];
$result[$key]['transactions']++;
$result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']);
$result[$key]['avg'] = bcdiv($result[$key]['sum'], (string)$result[$key]['transactions']);
$result[$key]['avg_float'] = (float)$result[$key]['avg'];
}
}
}
// sort by amount_float
// sort temp array by amount.
$amounts = array_column($result, 'avg_float');
array_multisort($amounts, SORT_ASC, $result);
try {
$result = view('reports.category.partials.avg-expenses', compact('result'))->render();
// @codeCoverageIgnoreStart
} catch (Throwable $e) {
Log::debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage()));
$result = sprintf('Could not render view: %s', $e->getMessage());
}
return $result;
}
/**
* @param Collection $accounts
* @param Collection $categories
* @param Carbon $start
* @param Carbon $end
*
* @return array|string
*/
public function avgIncome(Collection $accounts, Collection $categories, Carbon $start, Carbon $end)
{
$spent = $this->opsRepository->listIncome($start, $end, $accounts, $categories);
$result = [];
foreach ($spent as $currency) {
$currencyId = $currency['currency_id'];
foreach ($currency['categories'] as $category) {
foreach ($category['transaction_journals'] as $journal) {
$sourceId = $journal['source_account_id'];
$key = sprintf('%d-%d', $sourceId, $currency['currency_id']);
$result[$key] = $result[$key] ?? [
'transactions' => 0,
'sum' => '0',
'avg' => '0',
'avg_float' => 0,
'source_account_name' => $journal['source_account_name'],
'source_account_id' => $journal['source_account_id'],
'currency_id' => $currency['currency_id'],
'currency_name' => $currency['currency_name'],
'currency_symbol' => $currency['currency_symbol'],
'currency_decimal_places' => $currency['currency_decimal_places'],
];
$result[$key]['transactions']++;
$result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']);
$result[$key]['avg'] = bcdiv($result[$key]['sum'], (string)$result[$key]['transactions']);
$result[$key]['avg_float'] = (float)$result[$key]['avg'];
}
}
}
// sort by amount_float
// sort temp array by amount.
$amounts = array_column($result, 'avg_float');
array_multisort($amounts, SORT_DESC, $result);
try {
$result = view('reports.category.partials.avg-income', compact('result'))->render();
// @codeCoverageIgnoreStart
} catch (Throwable $e) {
Log::debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage()));
$result = sprintf('Could not render view: %s', $e->getMessage());
}
return $result;
}
/** /**
* @param array $array * @param array $array
* *

View File

@@ -28,7 +28,9 @@ use FireflyIII\Models\Account;
use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Account\OperationsRepositoryInterface; use FireflyIII\Repositories\Account\OperationsRepositoryInterface;
use FireflyIII\Support\Http\Controllers\AugumentData; use FireflyIII\Support\Http\Controllers\AugumentData;
use Illuminate\Contracts\View\Factory;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\View\View;
use Log; use Log;
use Throwable; use Throwable;
@@ -82,9 +84,9 @@ class DoubleController extends Controller
$result = []; $result = [];
foreach ($spent as $currency) { foreach ($spent as $currency) {
foreach ($currency['transaction_journals'] as $journal) { foreach ($currency['transaction_journals'] as $journal) {
$sourceId = $journal['source_account_id']; $sourceId = $journal['source_account_id'];
$key = sprintf('%d-%d', $sourceId, $currency['currency_id']); $key = sprintf('%d-%d', $sourceId, $currency['currency_id']);
$result[$key] = $result[$key] ?? [ $result[$key] = $result[$key] ?? [
'transactions' => 0, 'transactions' => 0,
'sum' => '0', 'sum' => '0',
'avg' => '0', 'avg' => '0',
@@ -137,16 +139,16 @@ class DoubleController extends Controller
$destinationId = $journal['destination_account_id']; $destinationId = $journal['destination_account_id'];
$key = sprintf('%d-%d', $destinationId, $currency['currency_id']); $key = sprintf('%d-%d', $destinationId, $currency['currency_id']);
$result[$key] = $result[$key] ?? [ $result[$key] = $result[$key] ?? [
'transactions' => 0, 'transactions' => 0,
'sum' => '0', 'sum' => '0',
'avg' => '0', 'avg' => '0',
'avg_float' => 0, 'avg_float' => 0,
'destination_account_name' => $journal['destination_account_name'], 'destination_account_name' => $journal['destination_account_name'],
'destination_account_id' => $journal['destination_account_id'], 'destination_account_id' => $journal['destination_account_id'],
'currency_id' => $currency['currency_id'], 'currency_id' => $currency['currency_id'],
'currency_name' => $currency['currency_name'], 'currency_name' => $currency['currency_name'],
'currency_symbol' => $currency['currency_symbol'], 'currency_symbol' => $currency['currency_symbol'],
'currency_decimal_places' => $currency['currency_decimal_places'], 'currency_decimal_places' => $currency['currency_decimal_places'],
]; ];
$result[$key]['transactions']++; $result[$key]['transactions']++;
$result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']); $result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']);
@@ -176,7 +178,7 @@ class DoubleController extends Controller
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* *
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View * @return Factory|View
*/ */
public function operations(Collection $accounts, Collection $double, Carbon $start, Carbon $end) public function operations(Collection $accounts, Collection $double, Carbon $start, Carbon $end)
{ {
@@ -295,7 +297,7 @@ class DoubleController extends Controller
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* *
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View * @return Factory|View
*/ */
public function operationsPerAsset(Collection $accounts, Collection $double, Carbon $start, Carbon $end) public function operationsPerAsset(Collection $accounts, Collection $double, Carbon $start, Carbon $end)
{ {

View File

@@ -41,6 +41,7 @@ class OperationsController extends Controller
/** /**
* OperationsController constructor. * OperationsController constructor.
*
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
public function __construct() public function __construct()
@@ -170,14 +171,12 @@ class OperationsController extends Controller
$sums[$currencyId]['sum'] = bcadd($sums[$currencyId]['in'], $sums[$currencyId]['out']); $sums[$currencyId]['sum'] = bcadd($sums[$currencyId]['in'], $sums[$currencyId]['out']);
} }
//try { try {
$result = view('reports.partials.operations', compact('sums'))->render(); $result = view('reports.partials.operations', compact('sums'))->render();
// @codeCoverageIgnoreStart } catch (Throwable $e) {
// } catch (Throwable $e) { Log::debug(sprintf('Could not render reports.partials.operations: %s', $e->getMessage()));
// Log::debug(sprintf('Could not render reports.partials.operations: %s', $e->getMessage())); $result = 'Could not render view.';
// $result = 'Could not render view.'; }
// }
// @codeCoverageIgnoreEnd
$cache->store($result); $cache->store($result);
return $result; return $result;

View File

@@ -29,7 +29,9 @@ use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
use FireflyIII\Models\Tag; use FireflyIII\Models\Tag;
use FireflyIII\Repositories\Tag\OperationsRepositoryInterface; use FireflyIII\Repositories\Tag\OperationsRepositoryInterface;
use Illuminate\Contracts\View\Factory;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\View\View;
use Log; use Log;
use Throwable; use Throwable;
@@ -67,7 +69,7 @@ class TagController extends Controller
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* *
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View * @return Factory|View
*/ */
public function accountPerTag(Collection $accounts, Collection $tags, Carbon $start, Carbon $end) public function accountPerTag(Collection $accounts, Collection $tags, Carbon $start, Carbon $end)
{ {
@@ -166,7 +168,7 @@ class TagController extends Controller
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* *
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View * @return Factory|View
*/ */
public function accounts(Collection $accounts, Collection $tags, Carbon $start, Carbon $end) public function accounts(Collection $accounts, Collection $tags, Carbon $start, Carbon $end)
{ {
@@ -372,7 +374,7 @@ class TagController extends Controller
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* *
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View * @return Factory|View
*/ */
public function tags(Collection $accounts, Collection $tags, Carbon $start, Carbon $end) public function tags(Collection $accounts, Collection $tags, Carbon $start, Carbon $end)
{ {

View File

@@ -190,6 +190,7 @@ class AvailableBudgetRepository implements AvailableBudgetRepositoryInterface
* @param string $amount * @param string $amount
* *
* @return AvailableBudget * @return AvailableBudget
* @deprecated
*/ */
public function setAvailableBudget(TransactionCurrency $currency, Carbon $start, Carbon $end, string $amount): AvailableBudget public function setAvailableBudget(TransactionCurrency $currency, Carbon $start, Carbon $end, string $amount): AvailableBudget
{ {

View File

@@ -39,6 +39,17 @@ interface AvailableBudgetRepositoryInterface
*/ */
public function destroyAvailableBudget(AvailableBudget $availableBudget): void; public function destroyAvailableBudget(AvailableBudget $availableBudget): void;
/**
* Find existing AB.
*
* @param TransactionCurrency $currency
* @param Carbon $start
* @param Carbon $end
*
* @return AvailableBudget|null
*/
public function find(TransactionCurrency $currency, Carbon $start, Carbon $end): ?AvailableBudget;
/** /**
* Return a list of all available budgets (in all currencies) (for the selected period). * Return a list of all available budgets (in all currencies) (for the selected period).
* *
@@ -59,32 +70,6 @@ interface AvailableBudgetRepositoryInterface
*/ */
public function getAvailableBudget(TransactionCurrency $currency, Carbon $start, Carbon $end): string; public function getAvailableBudget(TransactionCurrency $currency, Carbon $start, Carbon $end): string;
/**
* @param array $data
*
* @return AvailableBudget|null
*/
public function store(array $data): ?AvailableBudget;
/**
* @param AvailableBudget $availableBudget
* @param array $data
*
* @return AvailableBudget
*/
public function update(AvailableBudget $availableBudget, array $data): AvailableBudget;
/**
* Find existing AB.
*
* @param TransactionCurrency $currency
* @param Carbon $start
* @param Carbon $end
*
* @return AvailableBudget|null
*/
public function find(TransactionCurrency $currency, Carbon $start, Carbon $end): ?AvailableBudget;
/** /**
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
@@ -120,6 +105,7 @@ interface AvailableBudgetRepositoryInterface
* @param string $amount * @param string $amount
* *
* @return AvailableBudget * @return AvailableBudget
* @deprecated
*/ */
public function setAvailableBudget(TransactionCurrency $currency, Carbon $start, Carbon $end, string $amount): AvailableBudget; public function setAvailableBudget(TransactionCurrency $currency, Carbon $start, Carbon $end, string $amount): AvailableBudget;
@@ -128,6 +114,21 @@ interface AvailableBudgetRepositoryInterface
*/ */
public function setUser(User $user): void; public function setUser(User $user): void;
/**
* @param array $data
*
* @return AvailableBudget|null
*/
public function store(array $data): ?AvailableBudget;
/**
* @param AvailableBudget $availableBudget
* @param array $data
*
* @return AvailableBudget
*/
public function update(AvailableBudget $availableBudget, array $data): AvailableBudget;
/** /**
* @param AvailableBudget $availableBudget * @param AvailableBudget $availableBudget
* @param array $data * @param array $data

View File

@@ -25,6 +25,7 @@ namespace FireflyIII\Support;
use Crypt; use Crypt;
use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionCurrency;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Contracts\Encryption\DecryptException; use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Log; use Log;
@@ -279,7 +280,7 @@ class Amount
} }
/** /**
* @param User $user * @param User|Authenticatable $user
* *
* @return \FireflyIII\Models\TransactionCurrency * @return \FireflyIII\Models\TransactionCurrency
*/ */

View File

@@ -26,18 +26,20 @@ use Cache;
use Exception; use Exception;
use FireflyIII\Models\Preference; use FireflyIII\Models\Preference;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Log; use Log;
use Session; use Session;
/** /**
* Class Preferences. * Class Preferences.
*
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
class Preferences class Preferences
{ {
/** /**
* @param User $user * @param User $user
* @param string $search * @param string $search
* *
* @return Collection * @return Collection
@@ -92,7 +94,7 @@ class Preferences
/** /**
* @param string $name * @param string $name
* @param mixed $default * @param mixed $default
* *
* @return \FireflyIII\Models\Preference|null * @return \FireflyIII\Models\Preference|null
*/ */
@@ -115,7 +117,7 @@ class Preferences
/** /**
* @param \FireflyIII\User $user * @param \FireflyIII\User $user
* @param array $list * @param array $list
* *
* @return array * @return array
*/ */
@@ -140,9 +142,9 @@ class Preferences
} }
/** /**
* @param \FireflyIII\User $user * @param \FireflyIII\User|Authenticatable $user
* @param string $name * @param string $name
* @param null|string $default * @param null|string $default
* *
* @return \FireflyIII\Models\Preference|null * @return \FireflyIII\Models\Preference|null
*/ */
@@ -212,7 +214,7 @@ class Preferences
/** /**
* @param string $name * @param string $name
* @param mixed $value * @param mixed $value
* *
* @return \FireflyIII\Models\Preference * @return \FireflyIII\Models\Preference
*/ */
@@ -233,8 +235,8 @@ class Preferences
/** /**
* @param \FireflyIII\User $user * @param \FireflyIII\User $user
* @param string $name * @param string $name
* @param mixed $value * @param mixed $value
* *
* @return Preference * @return Preference
*/ */

View File

@@ -30,6 +30,7 @@ use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\RuleGroup\RuleGroupRepository; use FireflyIII\Repositories\RuleGroup\RuleGroupRepository;
use FireflyIII\TransactionRules\Processor; use FireflyIII\TransactionRules\Processor;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Log; use Log;
@@ -202,7 +203,7 @@ class RuleEngine
} }
/** /**
* @param User $user * @param User|Authenticatable $user
*/ */
public function setUser(User $user): void public function setUser(User $user): void
{ {

View File

@@ -23,12 +23,11 @@ declare(strict_types=1);
namespace Tests\Api\V1\Controllers; namespace Tests\Api\V1\Controllers;
use Preferences;
use Amount; use Amount;
use FireflyIII\Factory\TransactionCurrencyFactory; use FireflyIII\Factory\TransactionCurrencyFactory;
use FireflyIII\Models\AvailableBudget; use FireflyIII\Models\AvailableBudget;
use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Transformers\AvailableBudgetTransformer; use FireflyIII\Transformers\AvailableBudgetTransformer;
use Laravel\Passport\Passport; use Laravel\Passport\Passport;
@@ -62,7 +61,7 @@ class AvailableBudgetControllerTest extends TestCase
public function testStore(): void public function testStore(): void
{ {
Log::info(sprintf('Now in test %s.', __METHOD__)); Log::info(sprintf('Now in test %s.', __METHOD__));
$repository = $this->mock(BudgetRepositoryInterface::class); $abRepository = $this->mock(AvailableBudgetRepositoryInterface::class);
$transformer = $this->mock(AvailableBudgetTransformer::class); $transformer = $this->mock(AvailableBudgetTransformer::class);
$factory = $this->mock(TransactionCurrencyFactory::class); $factory = $this->mock(TransactionCurrencyFactory::class);
$availableBudget = new AvailableBudget; $availableBudget = new AvailableBudget;
@@ -76,8 +75,8 @@ class AvailableBudgetControllerTest extends TestCase
$factory->shouldReceive('find')->withArgs([2, ''])->once()->andReturn(TransactionCurrency::find(2)); $factory->shouldReceive('find')->withArgs([2, ''])->once()->andReturn(TransactionCurrency::find(2));
// mock calls: // mock calls:
$repository->shouldReceive('setUser')->atLeast()->once(); $abRepository->shouldReceive('setUser')->atLeast()->once();
$repository->shouldReceive('setAvailableBudget')->once()->andReturn($availableBudget); $abRepository->shouldReceive('store')->once()->andReturn($availableBudget);
// data to submit // data to submit
$data = [ $data = [
@@ -104,9 +103,9 @@ class AvailableBudgetControllerTest extends TestCase
{ {
Log::info(sprintf('Now in test %s.', __METHOD__)); Log::info(sprintf('Now in test %s.', __METHOD__));
// mock stuff: // mock stuff:
$repository = $this->mock(BudgetRepositoryInterface::class);
$transformer = $this->mock(AvailableBudgetTransformer::class); $transformer = $this->mock(AvailableBudgetTransformer::class);
$factory = $this->mock(TransactionCurrencyFactory::class); $factory = $this->mock(TransactionCurrencyFactory::class);
$abRepository = $this->mock(AvailableBudgetRepositoryInterface::class);
$availableBudget = new AvailableBudget; $availableBudget = new AvailableBudget;
// mock transformer // mock transformer
@@ -120,8 +119,8 @@ class AvailableBudgetControllerTest extends TestCase
Amount::shouldReceive('getDefaultCurrency')->once()->andReturn(TransactionCurrency::find(5)); Amount::shouldReceive('getDefaultCurrency')->once()->andReturn(TransactionCurrency::find(5));
// mock calls: // mock calls:
$repository->shouldReceive('setUser')->atLeast()->once(); $abRepository->shouldReceive('setUser')->atLeast()->once();
$repository->shouldReceive('setAvailableBudget')->once()->andReturn($availableBudget); $abRepository->shouldReceive('store')->once()->andReturn($availableBudget);
// data to submit // data to submit
$data = [ $data = [
@@ -149,9 +148,9 @@ class AvailableBudgetControllerTest extends TestCase
$availableBudget = $this->user()->availableBudgets()->first(); $availableBudget = $this->user()->availableBudgets()->first();
// mock stuff: // mock stuff:
$repository = $this->mock(BudgetRepositoryInterface::class); $abRepository = $this->mock(AvailableBudgetRepositoryInterface::class);
$transformer = $this->mock(AvailableBudgetTransformer::class); $transformer = $this->mock(AvailableBudgetTransformer::class);
$factory = $this->mock(TransactionCurrencyFactory::class); $factory = $this->mock(TransactionCurrencyFactory::class);
// mock transformer // mock transformer
$transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once(); $transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once();
@@ -164,8 +163,8 @@ class AvailableBudgetControllerTest extends TestCase
Amount::shouldReceive('getDefaultCurrency')->once()->andReturn(TransactionCurrency::find(5)); Amount::shouldReceive('getDefaultCurrency')->once()->andReturn(TransactionCurrency::find(5));
// mock calls: // mock calls:
$repository->shouldReceive('setUser')->once(); $abRepository->shouldReceive('setUser')->once();
$repository->shouldReceive('setAvailableBudget')->once()->andReturn($availableBudget); $abRepository->shouldReceive('store')->once()->andReturn($availableBudget);
// data to submit // data to submit
$data = [ $data = [
@@ -193,11 +192,11 @@ class AvailableBudgetControllerTest extends TestCase
{ {
Log::info(sprintf('Now in test %s.', __METHOD__)); Log::info(sprintf('Now in test %s.', __METHOD__));
// mock repositories // mock repositories
$repository = $this->mock(BudgetRepositoryInterface::class); $abRepository = $this->mock(AvailableBudgetRepositoryInterface::class);
$currencyRepository = $this->mock(CurrencyRepositoryInterface::class); $currencyRepository = $this->mock(CurrencyRepositoryInterface::class);
$transformer = $this->mock(AvailableBudgetTransformer::class); $transformer = $this->mock(AvailableBudgetTransformer::class);
$factory = $this->mock(TransactionCurrencyFactory::class); $factory = $this->mock(TransactionCurrencyFactory::class);
$euro = $this->getEuro(); $euro = $this->getEuro();
// mock facades: // mock facades:
Amount::shouldReceive('getDefaultCurrency')->atLeast()->once()->andReturn($euro); Amount::shouldReceive('getDefaultCurrency')->atLeast()->once()->andReturn($euro);
@@ -214,8 +213,8 @@ class AvailableBudgetControllerTest extends TestCase
$availableBudget = $this->user()->availableBudgets()->first(); $availableBudget = $this->user()->availableBudgets()->first();
// mock calls: // mock calls:
$repository->shouldReceive('setUser'); $abRepository->shouldReceive('setUser');
$repository->shouldReceive('updateAvailableBudget')->once()->andReturn($availableBudget); $abRepository->shouldReceive('updateAvailableBudget')->once()->andReturn($availableBudget);
$currencyRepository->shouldReceive('findNull')->andReturn($this->getEuro()); $currencyRepository->shouldReceive('findNull')->andReturn($this->getEuro());
// data to submit // data to submit

View File

@@ -24,9 +24,9 @@ declare(strict_types=1);
namespace Tests\Api\V1\Controllers; namespace Tests\Api\V1\Controllers;
use FireflyIII\Models\Budget; use FireflyIII\Models\Budget;
use FireflyIII\Models\BudgetLimit; use FireflyIII\Models\BudgetLimit;
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Transformers\BudgetLimitTransformer; use FireflyIII\Transformers\BudgetLimitTransformer;
use FireflyIII\Transformers\BudgetTransformer; use FireflyIII\Transformers\BudgetTransformer;
@@ -66,9 +66,11 @@ class BudgetControllerTest extends TestCase
// mock stuff: // mock stuff:
$repository = $this->mock(BudgetRepositoryInterface::class); $repository = $this->mock(BudgetRepositoryInterface::class);
$transformer = $this->mock(BudgetTransformer::class); $transformer = $this->mock(BudgetTransformer::class);
$blRepository = $this->mock(BudgetLimitRepositoryInterface::class);
// mock calls: // mock calls:
$repository->shouldReceive('setUser')->atLeast()->once(); $repository->shouldReceive('setUser')->atLeast()->once();
$blRepository->shouldReceive('setUser')->atLeast()->once();
$repository->shouldReceive('store')->once()->andReturn($budget); $repository->shouldReceive('store')->once()->andReturn($budget);
// mock transformer // mock transformer
@@ -107,10 +109,12 @@ class BudgetControllerTest extends TestCase
'amount' => 1, 'amount' => 1,
]; ];
// mock stuff: // mock stuff:
$repository = $this->mock(BudgetRepositoryInterface::class); $repository = $this->mock(BudgetRepositoryInterface::class);
$transformer = $this->mock(BudgetLimitTransformer::class); $blRepository = $this->mock(BudgetLimitRepositoryInterface::class);
$transformer = $this->mock(BudgetLimitTransformer::class);
$repository->shouldReceive('storeBudgetLimit')->andReturn($budgetLimit)->once(); $blRepository->shouldReceive('storeBudgetLimit')->andReturn($budgetLimit)->once();
$blRepository->shouldReceive('setUser')->atLeast()->once();
// mock transformer // mock transformer
$transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once(); $transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once();
@@ -140,11 +144,13 @@ class BudgetControllerTest extends TestCase
// mock repositories // mock repositories
$repository = $this->mock(BudgetRepositoryInterface::class); $repository = $this->mock(BudgetRepositoryInterface::class);
$transformer = $this->mock(BudgetTransformer::class); $transformer = $this->mock(BudgetTransformer::class);
$blRepository = $this->mock(BudgetLimitRepositoryInterface::class);
/** @var Budget $budget */ /** @var Budget $budget */
$budget = $this->user()->budgets()->first(); $budget = $this->user()->budgets()->first();
// mock calls: // mock calls:
$repository->shouldReceive('setUser'); $repository->shouldReceive('setUser');
$blRepository->shouldReceive('setUser');
$repository->shouldReceive('update')->once()->andReturn(new Budget); $repository->shouldReceive('update')->once()->andReturn(new Budget);
// mock calls to transformer: // mock calls to transformer:

View File

@@ -24,8 +24,8 @@ declare(strict_types=1);
namespace Tests\Api\V1\Controllers; namespace Tests\Api\V1\Controllers;
use FireflyIII\Models\BudgetLimit; use FireflyIII\Models\BudgetLimit;
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Transformers\BudgetLimitTransformer; use FireflyIII\Transformers\BudgetLimitTransformer;
use Laravel\Passport\Passport; use Laravel\Passport\Passport;
@@ -58,8 +58,10 @@ class BudgetLimitControllerTest extends TestCase
*/ */
public function testStore(): void public function testStore(): void
{ {
$budget = $this->user()->budgets()->first(); $budget = $this->user()->budgets()->first();
$transformer = $this->mock(BudgetLimitTransformer::class); $transformer = $this->mock(BudgetLimitTransformer::class);
$repository = $this->mock(BudgetRepositoryInterface::class);
$blRepository = $this->mock(BudgetLimitRepositoryInterface::class);
// mock calls to transformer: // mock calls to transformer:
$transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once(); $transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once();
@@ -83,13 +85,13 @@ class BudgetLimitControllerTest extends TestCase
'amount' => 1, 'amount' => 1,
]; ];
// mock stuff: // mock stuff:
$repository = $this->mock(BudgetRepositoryInterface::class);
$repository->shouldReceive('findNull')->andReturn($budget)->once(); $repository->shouldReceive('findNull')->andReturn($budget)->once();
$repository->shouldReceive('storeBudgetLimit')->andReturn($budgetLimit)->once(); $blRepository->shouldReceive('storeBudgetLimit')->andReturn($budgetLimit)->once();
// mock calls: // mock calls:
$repository->shouldReceive('setUser')->once(); $repository->shouldReceive('setUser')->once();
$blRepository->shouldReceive('setUser')->once();
// call API // call API
$response = $this->post(route('api.v1.budget_limits.store'), $data, ['Accept' => 'application/json']); $response = $this->post(route('api.v1.budget_limits.store'), $data, ['Accept' => 'application/json']);
@@ -113,8 +115,9 @@ class BudgetLimitControllerTest extends TestCase
]; ];
// mock stuff: // mock stuff:
$repository = $this->mock(BudgetRepositoryInterface::class); $repository = $this->mock(BudgetRepositoryInterface::class);
$repository->shouldReceive('findNull')->andReturn(null)->once(); //$repository->shouldReceive('findNull')->andReturn(null)->once();
$transformer = $this->mock(BudgetLimitTransformer::class); $transformer = $this->mock(BudgetLimitTransformer::class);
$blRepository = $this->mock(BudgetLimitRepositoryInterface::class);
// mock calls: // mock calls:
$repository->shouldReceive('setUser')->once(); $repository->shouldReceive('setUser')->once();
@@ -134,6 +137,7 @@ class BudgetLimitControllerTest extends TestCase
public function testUpdate(): void public function testUpdate(): void
{ {
$transformer = $this->mock(BudgetLimitTransformer::class); $transformer = $this->mock(BudgetLimitTransformer::class);
$blRepository = $this->mock(BudgetLimitRepositoryInterface::class);
$budget = $this->user()->budgets()->first(); $budget = $this->user()->budgets()->first();
$budgetLimit = BudgetLimit::create( $budgetLimit = BudgetLimit::create(
[ [
@@ -152,7 +156,7 @@ class BudgetLimitControllerTest extends TestCase
]; ];
// mock stuff: // mock stuff:
$repository = $this->mock(BudgetRepositoryInterface::class); $repository = $this->mock(BudgetRepositoryInterface::class);
$repository->shouldReceive('updateBudgetLimit')->andReturn($budgetLimit)->once(); $blRepository->shouldReceive('updateBudgetLimit')->andReturn($budgetLimit)->once();
// mock calls to transformer: // mock calls to transformer:
$transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once(); $transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once();
$transformer->shouldReceive('setCurrentScope')->withAnyArgs()->atLeast()->once()->andReturnSelf(); $transformer->shouldReceive('setCurrentScope')->withAnyArgs()->atLeast()->once()->andReturnSelf();
@@ -162,6 +166,7 @@ class BudgetLimitControllerTest extends TestCase
// mock calls: // mock calls:
$repository->shouldReceive('setUser')->once(); $repository->shouldReceive('setUser')->once();
$blRepository->shouldReceive('setUser')->once();
// call API // call API
$response = $this->put(route('api.v1.budget_limits.update', [$budgetLimit->id]), $data); $response = $this->put(route('api.v1.budget_limits.update', [$budgetLimit->id]), $data);

View File

@@ -24,6 +24,7 @@ namespace Tests\Api\V1\Controllers\Chart;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Laravel\Passport\Passport; use Laravel\Passport\Passport;
use Log; use Log;
@@ -54,15 +55,16 @@ class AvailableBudgetControllerTest extends TestCase
{ {
$availableBudget = $this->user()->availableBudgets()->first(); $availableBudget = $this->user()->availableBudgets()->first();
$repository = $this->mock(BudgetRepositoryInterface::class); $repository = $this->mock(BudgetRepositoryInterface::class);
$opsRepository = $this->mock(OperationsRepositoryInterface::class);
// get data: // get data:
$budget = $this->getBudget(); $budget = $this->getBudget();
// mock calls: // mock calls:
$repository->shouldReceive('setUser')->atLeast()->once(); $repository->shouldReceive('setUser')->atLeast()->once();
$opsRepository->shouldReceive('setUser')->atLeast()->once();
$repository->shouldReceive('getActiveBudgets')->atLeast()->once()->andReturn(new Collection([$budget])); $repository->shouldReceive('getActiveBudgets')->atLeast()->once()->andReturn(new Collection([$budget]));
$repository->shouldReceive('spentInPeriodMc')->atLeast()->once()-> $opsRepository->shouldReceive('spentInPeriodMc')->atLeast()->once()->andReturn(
andReturn(
[ [
[ [
'currency_id' => 1, 'currency_id' => 1,
@@ -78,8 +80,10 @@ class AvailableBudgetControllerTest extends TestCase
'start' => '2019-01-01', 'start' => '2019-01-01',
'end' => '2019-01-31', 'end' => '2019-01-31',
]; ];
$response = $this->get(route('api.v1.chart.ab.overview', [$availableBudget->id]) . '?' $response = $this->get(
. http_build_query($parameters), ['Accept' => 'application/json']); route('api.v1.chart.ab.overview', [$availableBudget->id]) . '?'
. http_build_query($parameters), ['Accept' => 'application/json']
);
$response->assertStatus(200); $response->assertStatus(200);
} }
@@ -90,15 +94,15 @@ class AvailableBudgetControllerTest extends TestCase
{ {
$availableBudget = $this->user()->availableBudgets()->first(); $availableBudget = $this->user()->availableBudgets()->first();
$repository = $this->mock(BudgetRepositoryInterface::class); $repository = $this->mock(BudgetRepositoryInterface::class);
$opsRepository = $this->mock(OperationsRepositoryInterface::class);
// get data: // get data:
$budget = $this->getBudget(); $budget = $this->getBudget();
// mock calls: // mock calls:
$repository->shouldReceive('setUser')->atLeast()->once(); $repository->shouldReceive('setUser')->atLeast()->once();
$opsRepository->shouldReceive('setUser')->atLeast()->once();
$repository->shouldReceive('getActiveBudgets')->atLeast()->once()->andReturn(new Collection([$budget])); $repository->shouldReceive('getActiveBudgets')->atLeast()->once()->andReturn(new Collection([$budget]));
$repository->shouldReceive('spentInPeriodMc')->atLeast()->once()-> $opsRepository->shouldReceive('spentInPeriodMc')->atLeast()->once()->andReturn(
andReturn(
[ [
[ [
'currency_id' => 1, 'currency_id' => 1,
@@ -114,8 +118,10 @@ class AvailableBudgetControllerTest extends TestCase
'start' => '2019-01-01', 'start' => '2019-01-01',
'end' => '2019-01-31', 'end' => '2019-01-31',
]; ];
$response = $this->get(route('api.v1.chart.ab.overview', [$availableBudget->id]) . '?' $response = $this->get(
. http_build_query($parameters), ['Accept' => 'application/json']); route('api.v1.chart.ab.overview', [$availableBudget->id]) . '?'
. http_build_query($parameters), ['Accept' => 'application/json']
);
$response->assertStatus(200); $response->assertStatus(200);
} }

View File

@@ -27,11 +27,12 @@ use Carbon\Carbon;
use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Helpers\Report\NetWorthInterface; use FireflyIII\Helpers\Report\NetWorthInterface;
use FireflyIII\Models\AccountType; use FireflyIII\Models\AccountType;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Models\TransactionType; use FireflyIII\Models\TransactionType;
use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Bill\BillRepositoryInterface;
use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Laravel\Passport\Passport; use Laravel\Passport\Passport;
@@ -57,95 +58,6 @@ class SummaryControllerTest extends TestCase
Log::info(sprintf('Now in %s.', get_class($this))); Log::info(sprintf('Now in %s.', get_class($this)));
} }
/**
* @covers \FireflyIII\Api\V1\Controllers\SummaryController
*/
public function testBasicInThePast(): void
{
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$billRepos = $this->mock(BillRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$collector = $this->mock(GroupCollectorInterface::class);
$netWorth = $this->mock(NetWorthInterface::class);
// data
$euro = $this->getEuro();
$budget = $this->user()->budgets()->inRandomOrder()->first();
$account = $this->getRandomAsset();
$journals = [
[
'amount' => '10',
'currency_id' => 1,
],
];
$netWorthData = [
[
'currency' => $euro,
'balance' => '232',
],
];
// mock calls.
$accountRepos->shouldReceive('setUser')->atLeast()->once();
$billRepos->shouldReceive('setUser')->atLeast()->once();
$budgetRepos->shouldReceive('setUser')->atLeast()->once();
$currencyRepos->shouldReceive('setUser')->atLeast()->once();
$netWorth->shouldReceive('setUser')->atLeast()->once();
// mock collector calls:
$collector->shouldReceive('setRange')->atLeast()->once()->andReturnSelf();
$collector->shouldReceive('setPage')->atLeast()->once()->andReturnSelf();
// used to get balance information (deposits)
$collector->shouldReceive('setTypes')->withArgs([[TransactionType::DEPOSIT]])->atLeast()->once()->andReturnSelf();
// same, but for withdrawals
$collector->shouldReceive('setTypes')->withArgs([[TransactionType::WITHDRAWAL]])->atLeast()->once()->andReturnSelf();
// system always returns one basic transaction (see above)
$collector->shouldReceive('getExtractedJournals')->atLeast()->once()->andReturn($journals);
// currency repos does some basic collecting
$currencyRepos->shouldReceive('findNull')->withArgs([1])->atLeast()->once()->andReturn($euro);
// bill repository return value
$billRepos->shouldReceive('getBillsPaidInRangePerCurrency')->atLeast()->once()->andReturn([1 => '123']);
$billRepos->shouldReceive('getBillsUnpaidInRangePerCurrency')->atLeast()->once()->andReturn([1 => '123']);
// budget repos
$budgetRepos->shouldReceive('getAvailableBudgetWithCurrency')->atLeast()->once()->andReturn([1 => '123']);
$budgetRepos->shouldReceive('getActiveBudgets')->atLeast()->once()->andReturn(new Collection([$budget]));
$budgetRepos->shouldReceive('spentInPeriodMc')->atLeast()->once()->andReturn(
[
[
'currency_id' => 1,
'currency_code' => 'EUR',
'currency_symbol' => 'x',
'currency_decimal_places' => 2,
'amount' => 321.21,
],
]
);
// account repos:
$accountRepos->shouldReceive('getActiveAccountsByType')->atLeast()->once()
->withArgs([[AccountType::ASSET, AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE]])->andReturn(new Collection([$account]));
$accountRepos->shouldReceive('getMetaValue')->atLeast()->once()->withArgs([Mockery::any(), 'include_net_worth'])->andReturn(true);
// net worth calculator
$netWorth->shouldReceive('getNetWorthByCurrency')->atLeast()->once()->andReturn($netWorthData);
$parameters = [
'start' => '2019-01-01',
'end' => '2019-01-31',
];
$response = $this->get(route('api.v1.summary.basic') . '?' . http_build_query($parameters));
$response->assertStatus(200);
// TODO AFTER 4.8,0: check if JSON is correct
}
/** /**
* Also includes NULL currencies for better coverage. * Also includes NULL currencies for better coverage.
* *
@@ -159,6 +71,8 @@ class SummaryControllerTest extends TestCase
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class); $currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$collector = $this->mock(GroupCollectorInterface::class); $collector = $this->mock(GroupCollectorInterface::class);
$netWorth = $this->mock(NetWorthInterface::class); $netWorth = $this->mock(NetWorthInterface::class);
$abRepos = $this->mock(AvailableBudgetRepositoryInterface::class);
$opsRepos = $this->mock(OperationsRepositoryInterface::class);
$date = new Carbon(); $date = new Carbon();
$date->addWeek(); $date->addWeek();
@@ -194,6 +108,8 @@ class SummaryControllerTest extends TestCase
$budgetRepos->shouldReceive('setUser')->atLeast()->once(); $budgetRepos->shouldReceive('setUser')->atLeast()->once();
$currencyRepos->shouldReceive('setUser')->atLeast()->once(); $currencyRepos->shouldReceive('setUser')->atLeast()->once();
$netWorth->shouldReceive('setUser')->atLeast()->once(); $netWorth->shouldReceive('setUser')->atLeast()->once();
$opsRepos->shouldReceive('setUser')->atLeast()->once();
$abRepos->shouldReceive('setUser')->atLeast()->once();
// mock collector calls: // mock collector calls:
$collector->shouldReceive('setRange')->atLeast()->once()->andReturnSelf(); $collector->shouldReceive('setRange')->atLeast()->once()->andReturnSelf();
@@ -217,9 +133,9 @@ class SummaryControllerTest extends TestCase
$billRepos->shouldReceive('getBillsUnpaidInRangePerCurrency')->atLeast()->once()->andReturn([1 => '123', 2 => '456']); $billRepos->shouldReceive('getBillsUnpaidInRangePerCurrency')->atLeast()->once()->andReturn([1 => '123', 2 => '456']);
// budget repos // budget repos
$budgetRepos->shouldReceive('getAvailableBudgetWithCurrency')->atLeast()->once()->andReturn([1 => '123', 2 => '456']); $abRepos->shouldReceive('getAvailableBudgetWithCurrency')->atLeast()->once()->andReturn([1 => '123', 2 => '456']);
$budgetRepos->shouldReceive('getActiveBudgets')->atLeast()->once()->andReturn(new Collection([$budget])); $budgetRepos->shouldReceive('getActiveBudgets')->atLeast()->once()->andReturn(new Collection([$budget]));
$budgetRepos->shouldReceive('spentInPeriodMc')->atLeast()->once()->andReturn( $opsRepos->shouldReceive('spentInPeriodMc')->atLeast()->once()->andReturn(
[ [
[ [
'currency_id' => 3, 'currency_id' => 3,
@@ -256,4 +172,97 @@ class SummaryControllerTest extends TestCase
$response->assertStatus(200); $response->assertStatus(200);
// TODO AFTER 4.8,0: check if JSON is correct // TODO AFTER 4.8,0: check if JSON is correct
} }
/**
* @covers \FireflyIII\Api\V1\Controllers\SummaryController
*/
public function testBasicInThePast(): void
{
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$billRepos = $this->mock(BillRepositoryInterface::class);
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
$currencyRepos = $this->mock(CurrencyRepositoryInterface::class);
$collector = $this->mock(GroupCollectorInterface::class);
$netWorth = $this->mock(NetWorthInterface::class);
$abRepos = $this->mock(AvailableBudgetRepositoryInterface::class);
$opsRepos = $this->mock(OperationsRepositoryInterface::class);
// data
$euro = $this->getEuro();
$budget = $this->user()->budgets()->inRandomOrder()->first();
$account = $this->getRandomAsset();
$journals = [
[
'amount' => '10',
'currency_id' => 1,
],
];
$netWorthData = [
[
'currency' => $euro,
'balance' => '232',
],
];
// mock calls.
$accountRepos->shouldReceive('setUser')->atLeast()->once();
$billRepos->shouldReceive('setUser')->atLeast()->once();
$budgetRepos->shouldReceive('setUser')->atLeast()->once();
$currencyRepos->shouldReceive('setUser')->atLeast()->once();
$netWorth->shouldReceive('setUser')->atLeast()->once();
$abRepos->shouldReceive('setUser')->atLeast()->once();
$opsRepos->shouldReceive('setUser')->atLeast()->once();
// mock collector calls:
$collector->shouldReceive('setRange')->atLeast()->once()->andReturnSelf();
$collector->shouldReceive('setPage')->atLeast()->once()->andReturnSelf();
// used to get balance information (deposits)
$collector->shouldReceive('setTypes')->withArgs([[TransactionType::DEPOSIT]])->atLeast()->once()->andReturnSelf();
// same, but for withdrawals
$collector->shouldReceive('setTypes')->withArgs([[TransactionType::WITHDRAWAL]])->atLeast()->once()->andReturnSelf();
// system always returns one basic transaction (see above)
$collector->shouldReceive('getExtractedJournals')->atLeast()->once()->andReturn($journals);
// currency repos does some basic collecting
$currencyRepos->shouldReceive('findNull')->withArgs([1])->atLeast()->once()->andReturn($euro);
// bill repository return value
$billRepos->shouldReceive('getBillsPaidInRangePerCurrency')->atLeast()->once()->andReturn([1 => '123']);
$billRepos->shouldReceive('getBillsUnpaidInRangePerCurrency')->atLeast()->once()->andReturn([1 => '123']);
// budget repos
$abRepos->shouldReceive('getAvailableBudgetWithCurrency')->atLeast()->once()->andReturn([1 => '123']);
$budgetRepos->shouldReceive('getActiveBudgets')->atLeast()->once()->andReturn(new Collection([$budget]));
$opsRepos->shouldReceive('spentInPeriodMc')->atLeast()->once()->andReturn(
[
[
'currency_id' => 1,
'currency_code' => 'EUR',
'currency_symbol' => 'x',
'currency_decimal_places' => 2,
'amount' => 321.21,
],
]
);
// account repos:
$accountRepos->shouldReceive('getActiveAccountsByType')->atLeast()->once()
->withArgs([[AccountType::ASSET, AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE]])->andReturn(new Collection([$account]));
$accountRepos->shouldReceive('getMetaValue')->atLeast()->once()->withArgs([Mockery::any(), 'include_net_worth'])->andReturn(true);
// net worth calculator
$netWorth->shouldReceive('getNetWorthByCurrency')->atLeast()->once()->andReturn($netWorthData);
$parameters = [
'start' => '2019-01-01',
'end' => '2019-01-31',
];
$response = $this->get(route('api.v1.summary.basic') . '?' . http_build_query($parameters));
$response->assertStatus(200);
// TODO AFTER 4.8,0: check if JSON is correct
}
} }