. */ declare(strict_types=1); namespace FireflyIII\Api\V1\Controllers\Insight\Expense; 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 expense information grouped or limited by date. * I.e. all expenses 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/insightExpenseAsset * * @param GenericRequest $request * * @return JsonResponse */ public function asset(GenericRequest $request): JsonResponse { $start = $request->getStart(); $end = $request->getEnd(); $assetAccounts = $request->getAssetAccounts(); $expenses = $this->opsRepository->sumExpensesBySource($start, $end, $assetAccounts); $result = []; /** @var array $expense */ foreach ($expenses as $expense) { $result[] = [ 'id' => (string) $expense['id'], 'name' => $expense['name'], 'difference' => $expense['sum'], 'difference_float' => (float) $expense['sum'], // float but on purpose. 'currency_id' => (string) $expense['currency_id'], 'currency_code' => $expense['currency_code'], ]; } return response()->json($result); } /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/#/insight/insightExpenseExpense * * @param GenericRequest $request * * @return JsonResponse */ public function expense(GenericRequest $request): JsonResponse { $start = $request->getStart(); $end = $request->getEnd(); $assetAccounts = $request->getAssetAccounts(); $expenseAccounts = $request->getExpenseAccounts(); $expenses = $this->opsRepository->sumExpensesByDestination($start, $end, $assetAccounts, $expenseAccounts); $result = []; /** @var array $expense */ foreach ($expenses as $expense) { $result[] = [ 'id' => (string) $expense['id'], 'name' => $expense['name'], 'difference' => $expense['sum'], 'difference_float' => (float) $expense['sum'], // float but on purpose. 'currency_id' => (string) $expense['currency_id'], 'currency_code' => $expense['currency_code'], ]; } return response()->json($result); } }