get('count')) > 0 ? intval($request->get('count')) : 1; $keys = array_keys(config('firefly.rule-actions')); $actions = []; foreach ($keys as $key) { $actions[$key] = trans('firefly.rule_action_' . $key . '_choice'); } $view = view('rules.partials.action', compact('actions', 'count'))->render(); return Response::json(['html' => $view]); } /** * @param BillRepositoryInterface $repository * * @return \Symfony\Component\HttpFoundation\Response */ public function boxBillsPaid(BillRepositoryInterface $repository) { $start = session('start', Carbon::now()->startOfMonth()); $end = session('end', Carbon::now()->endOfMonth()); /* * Since both this method and the chart use the exact same data, we can suffice * with calling the one method in the bill repository that will get this amount. */ $amount = $repository->getBillsPaidInRange($start, $end); // will be a negative amount. $amount = bcmul($amount, '-1'); $currency = Amount::getDefaultCurrency(); $data = ['box' => 'bills-paid', 'amount' => Amount::formatAnything($currency, $amount, false), 'amount_raw' => $amount]; return Response::json($data); } /** * @param BillRepositoryInterface $repository * * @return \Illuminate\Http\JsonResponse */ public function boxBillsUnpaid(BillRepositoryInterface $repository) { $start = session('start', Carbon::now()->startOfMonth()); $end = session('end', Carbon::now()->endOfMonth()); $amount = $repository->getBillsUnpaidInRange($start, $end); // will be a positive amount. $currency = Amount::getDefaultCurrency(); $data = ['box' => 'bills-unpaid', 'amount' => Amount::formatAnything($currency, $amount, false), 'amount_raw' => $amount]; return Response::json($data); } /** * @return \Illuminate\Http\JsonResponse * @internal param AccountTaskerInterface $accountTasker * @internal param AccountRepositoryInterface $repository * */ public function boxIn() { $start = session('start', Carbon::now()->startOfMonth()); $end = session('end', Carbon::now()->endOfMonth()); // works for json too! $cache = new CacheProperties; $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('box-in'); if ($cache->has()) { return Response::json($cache->get()); // @codeCoverageIgnore } // try a collector for income: /** @var JournalCollectorInterface $collector */ $collector = app(JournalCollectorInterface::class); $collector->setAllAssetAccounts()->setRange($start, $end) ->setTypes([TransactionType::DEPOSIT]) ->withOpposingAccount(); $amount = strval($collector->getJournals()->sum('transaction_amount')); $currency = Amount::getDefaultCurrency(); $data = ['box' => 'in', 'amount' => Amount::formatAnything($currency, $amount, false), 'amount_raw' => $amount]; $cache->store($data); return Response::json($data); } /** * @return \Symfony\Component\HttpFoundation\Response * @internal param AccountTaskerInterface $accountTasker * @internal param AccountRepositoryInterface $repository * */ public function boxOut() { $start = session('start', Carbon::now()->startOfMonth()); $end = session('end', Carbon::now()->endOfMonth()); // works for json too! $cache = new CacheProperties; $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('box-out'); if ($cache->has()) { return Response::json($cache->get()); // @codeCoverageIgnore } // try a collector for expenses: /** @var JournalCollectorInterface $collector */ $collector = app(JournalCollectorInterface::class); $collector->setAllAssetAccounts()->setRange($start, $end) ->setTypes([TransactionType::WITHDRAWAL]) ->withOpposingAccount(); $amount = strval($collector->getJournals()->sum('transaction_amount')); $currency = Amount::getDefaultCurrency(); $data = ['box' => 'out', 'amount' => Amount::formatAnything($currency, $amount, false), 'amount_raw' => $amount]; $cache->store($data); return Response::json($data); } /** * @param BudgetRepositoryInterface $repository * * @return \Illuminate\Http\JsonResponse */ public function budgets(BudgetRepositoryInterface $repository) { $return = array_unique($repository->getBudgets()->pluck('name')->toArray()); sort($return); return Response::json($return); } /** * Returns a list of categories. * * @param CategoryRepositoryInterface $repository * * @return \Illuminate\Http\JsonResponse */ public function categories(CategoryRepositoryInterface $repository) { $return = array_unique($repository->getCategories()->pluck('name')->toArray()); sort($return); return Response::json($return); } /** * Returns a JSON list of all beneficiaries. * * @param TagRepositoryInterface $tagRepository * * @return \Illuminate\Http\JsonResponse */ public function tags(TagRepositoryInterface $tagRepository) { $return = array_unique($tagRepository->get()->pluck('tag')->toArray()); sort($return); return Response::json($return); } /** * @param JournalRepositoryInterface $repository * * @return \Illuminate\Http\JsonResponse */ public function transactionTypes(JournalRepositoryInterface $repository) { $return = array_unique($repository->getTransactionTypes()->pluck('type')->toArray()); sort($return); return Response::json($return); } /** * @param Request $request * * @return \Illuminate\Http\JsonResponse */ public function trigger(Request $request) { $count = intval($request->get('count')) > 0 ? intval($request->get('count')) : 1; $keys = array_keys(config('firefly.rule-triggers')); $triggers = []; foreach ($keys as $key) { if ($key !== 'user_action') { $triggers[$key] = trans('firefly.rule_trigger_' . $key . '_choice'); } } $view = view('rules.partials.trigger', compact('triggers', 'count'))->render(); return Response::json(['html' => $view]); } }