. */ declare(strict_types=1); namespace FireflyIII\Http\Controllers\Json; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\PiggyBank; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use Illuminate\Http\JsonResponse; use Log; use Throwable; /** * Class FrontpageController. */ class FrontpageController extends Controller { /** * Piggy bank pie chart. * * @param PiggyBankRepositoryInterface $repository * * @return JsonResponse */ public function piggyBanks(PiggyBankRepositoryInterface $repository): JsonResponse { $set = $repository->getPiggyBanks(); $info = []; /** @var PiggyBank $piggyBank */ foreach ($set as $piggyBank) { $amount = $repository->getCurrentAmount($piggyBank); if (1 === bccomp($amount, '0')) { // percentage! $pct = round(($amount / $piggyBank->targetamount) * 100); $entry = [ 'id' => $piggyBank->id, 'name' => $piggyBank->name, 'amount' => $amount, 'target' => $piggyBank->targetamount, 'percentage' => $pct, ]; $info[] = $entry; } } $html = ''; if (\count($info) > 0) { try { $html = view('json.piggy-banks', compact('info'))->render(); // @codeCoverageIgnoreStart } catch (Throwable $e) { Log::error(sprintf('Cannot render json.piggy-banks: %s', $e->getMessage())); $html = 'Could not render view.'; } // @codeCoverageIgnoreEnd } return response()->json(['html' => $html]); } }