. */ 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\Models\Budget; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Budget\NoBudgetRepositoryInterface; use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; use Illuminate\Http\JsonResponse; use Illuminate\Support\Collection; /** * Class BudgetController */ class BudgetController extends Controller { private NoBudgetRepositoryInterface $noRepository; private OperationsRepositoryInterface $opsRepository; private BudgetRepositoryInterface $repository; /** * AccountController constructor. * * @codeCoverageIgnore */ public function __construct() { parent::__construct(); $this->middleware( function ($request, $next) { $this->opsRepository = app(OperationsRepositoryInterface::class); $this->repository = app(BudgetRepositoryInterface::class); $this->noRepository = app(NoBudgetRepositoryInterface::class); $user = auth()->user(); $this->opsRepository->setUser($user); $this->repository->setUser($user); $this->noRepository->setUser($user); return $next($request); } ); } /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/#/insight/insightExpenseBudget * * @param GenericRequest $request * * @return JsonResponse */ public function budget(GenericRequest $request): JsonResponse { $start = $request->getStart(); $end = $request->getEnd(); $budgets = $request->getBudgets(); $assetAccounts = $request->getAssetAccounts(); $result = []; if (0 === $budgets->count()) { $budgets = $this->repository->getActiveBudgets(); } /** @var Budget $budget */ foreach ($budgets as $budget) { $expenses = $this->opsRepository->sumExpenses($start, $end, $assetAccounts, new Collection([$budget])); /** @var array $expense */ foreach ($expenses as $expense) { $result[] = [ 'id' => (string) $budget->id, 'name' => $budget->name, 'difference' => $expense['sum'], 'difference_float' => (float) $expense['sum'], '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/insightExpenseNoBudget * * @param GenericRequest $request * * @return JsonResponse */ public function noBudget(GenericRequest $request): JsonResponse { $start = $request->getStart(); $end = $request->getEnd(); $assetAccounts = $request->getAssetAccounts(); $result = []; $expenses = $this->noRepository->sumExpenses($start, $end, $assetAccounts); /** @var array $expense */ foreach ($expenses as $expense) { $result[] = [ 'difference' => $expense['sum'], 'difference_float' => (float) $expense['sum'], 'currency_id' => (string) $expense['currency_id'], 'currency_code' => $expense['currency_code'], ]; } return response()->json($result); } }