. */ declare(strict_types=1); namespace FireflyIII\Api\V1\Controllers\Insight\Income; use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Requests\Insight\GenericRequest; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Account\OperationsRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\ApiSupport; use Illuminate\Http\JsonResponse; /** * * Class AccountController * * Shows income information grouped or limited by date. * Ie. all income grouped by account + currency. */ class AccountController extends Controller { use ApiSupport; private CurrencyRepositoryInterface $currencyRepository; private OperationsRepositoryInterface $opsRepository; private AccountRepositoryInterface $repository; /** * AccountController constructor. * * @codeCoverageIgnore */ public function __construct() { parent::__construct(); $this->middleware( function ($request, $next) { $user = auth()->user(); $this->repository = app(AccountRepositoryInterface::class); $this->repository->setUser($user); $this->currencyRepository = app(CurrencyRepositoryInterface::class); $this->currencyRepository->setUser($user); $this->opsRepository = app(OperationsRepositoryInterface::class); $this->opsRepository->setUser($user); return $next($request); } ); } /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/#/insight/insightIncomeAsset * * @param GenericRequest $request * * @return JsonResponse */ public function asset(GenericRequest $request): JsonResponse { $start = $request->getStart(); $end = $request->getEnd(); $assetAccounts = $request->getAssetAccounts(); $income = $this->opsRepository->sumIncomeByDestination($start, $end, $assetAccounts); $result = []; /** @var array $entry */ foreach ($income as $entry) { $result[] = [ 'id' => (string) $entry['id'], 'name' => $entry['name'], 'difference' => $entry['sum'], 'difference_float' => (float) $entry['sum'], 'currency_id' => (string) $entry['currency_id'], 'currency_code' => $entry['currency_code'], ]; } return response()->json($result); } /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/#/insight/insightIncomeRevenue * * @param GenericRequest $request * * @return JsonResponse */ public function revenue(GenericRequest $request): JsonResponse { $start = $request->getStart(); $end = $request->getEnd(); $assetAccounts = $request->getAssetAccounts(); $revenueAccounts = $request->getRevenueAccounts(); $income = $this->opsRepository->sumIncomeBySource($start, $end, $assetAccounts, $revenueAccounts); $result = []; /** @var array $entry */ foreach ($income as $entry) { $result[] = [ 'id' => (string) $entry['id'], 'name' => $entry['name'], 'difference' => $entry['sum'], 'difference_float' => (float) $entry['sum'], 'currency_id' => (string) $entry['currency_id'], 'currency_code' => $entry['currency_code'], ]; } return response()->json($result); } }