/** * Shows a budget list with spent/left/overspent. * * @return \Symfony\Component\HttpFoundation\Response */ public function frontpage(BudgetRepositoryInterface $repository) { Log::debug('Hello'); $start = session('start', Carbon::now()->startOfMonth()); $end = session('end', Carbon::now()->endOfMonth()); // chart properties for cache: $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('budget'); $cache->addProperty('all'); if ($cache->has()) { return Response::json($cache->get()); } $budgets = $repository->getActiveBudgets(); $repetitions = $repository->getAllBudgetLimitRepetitions($start, $end); $allEntries = new Collection(); /** @var Budget $budget */ foreach ($budgets as $budget) { // get relevant repetitions: $reps = $this->filterRepetitions($repetitions, $budget, $start, $end); if ($reps->count() === 0) { $collection = $this->spentInPeriodSingle($repository, $budget, $start, $end); $allEntries = $allEntries->merge($collection); continue; } $collection = $this->spentInPeriodMulti($repository, $budget, $reps); $allEntries = $allEntries->merge($collection); } $entry = $this->spentInPeriodWithout($repository, $start, $end); $allEntries->push($entry); $data = $this->generator->frontpage($allEntries); $cache->store($data); return Response::json($data); }
/** * Shows a budget list with spent/left/overspent. * * @param BudgetRepositoryInterface $repository * * @param ARI $accountRepository * * @return \Symfony\Component\HttpFoundation\Response */ public function frontpage(BudgetRepositoryInterface $repository, ARI $accountRepository) { $start = Session::get('start', Carbon::now()->startOfMonth()); $end = Session::get('end', Carbon::now()->endOfMonth()); // chart properties for cache: $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('budget'); $cache->addProperty('all'); if ($cache->has()) { return Response::json($cache->get()); // @codeCoverageIgnore } $budgets = $repository->getBudgetsAndLimitsInRange($start, $end); $allEntries = new Collection(); $accounts = $accountRepository->getAccounts(['Default account', 'Asset account', 'Cash account']); bcscale(2); /** @var Budget $budget */ foreach ($budgets as $budget) { // we already have amount, startdate and enddate. // if this "is" a limit repetition (as opposed to a budget without one entirely) // depends on whether startdate and enddate are null. $name = $budget->name; if (is_null($budget->startdate) && is_null($budget->enddate)) { $currentStart = clone $start; $currentEnd = clone $end; $expenses = $repository->balanceInPeriod($budget, $currentStart, $currentEnd, $accounts); $amount = 0; $left = 0; $spent = $expenses; $overspent = 0; } else { $currentStart = clone $budget->startdate; $currentEnd = clone $budget->enddate; $expenses = $repository->balanceInPeriod($budget, $currentStart, $currentEnd, $accounts); $amount = $budget->amount; // smaller than 1 means spent MORE than budget allows. $left = bccomp(bcadd($budget->amount, $expenses), '0') < 1 ? 0 : bcadd($budget->amount, $expenses); $spent = bccomp(bcadd($budget->amount, $expenses), '0') < 1 ? $amount * -1 : $expenses; $overspent = bccomp(bcadd($budget->amount, $expenses), '0') < 1 ? bcadd($budget->amount, $expenses) : 0; } $allEntries->push([$name, $left, $spent, $overspent, $amount, $expenses]); } $noBudgetExpenses = $repository->getWithoutBudgetSum($start, $end); $allEntries->push([trans('firefly.noBudget'), 0, 0, $noBudgetExpenses, 0, 0]); $data = $this->generator->frontpage($allEntries); $cache->store($data); return Response::json($data); }