addColumn(trans('firefly.budget'), 'string'); $chart->addColumn(trans('firefly.left'), 'number'); $chart->addColumn(trans('firefly.spent'), 'number'); $chart->addColumn(trans('firefly.overspent'), 'number'); $budgets = $repository->getBudgets(); $start = Session::get('start', Carbon::now()->startOfMonth()); $end = Session::get('end', Carbon::now()->endOfMonth()); $allEntries = new Collection; foreach ($budgets as $budget) { $repetitions = $repository->getBudgetLimitRepetitions($budget, $start, $end); if ($repetitions->count() == 0) { $expenses = $repository->sumBudgetExpensesInPeriod($budget, $start, $end); $allEntries->push([$budget->name, 0, 0, $expenses]); continue; } /** @var LimitRepetition $repetition */ foreach ($repetitions as $repetition) { $expenses = $repository->sumBudgetExpensesInPeriod($budget, $repetition->startdate, $repetition->enddate); $left = $expenses < floatval($repetition->amount) ? floatval($repetition->amount) - $expenses : 0; $spent = $expenses > floatval($repetition->amount) ? 0 : $expenses; $overspent = $expenses > floatval($repetition->amount) ? $expenses - floatval($repetition->amount) : 0; $allEntries->push( [$budget->name . ' (' . $repetition->startdate->formatLocalized($this->monthAndDayFormat) . ')', $left, $spent, $overspent ] ); } } $noBudgetExpenses = $repository->getWithoutBudgetSum($start, $end); $allEntries->push([trans('firefly.noBudget'), 0, 0, $noBudgetExpenses]); foreach ($allEntries as $entry) { if ($entry[1] != 0 || $entry[2] != 0 || $entry[3] != 0) { $chart->addRow($entry[0], $entry[1], $entry[2], $entry[3]); } } $chart->generate(); return Response::json($chart->getData()); } /** * Shows the amount left in a specific budget limit. * * @param GChart $chart * @param BudgetRepositoryInterface $repository * @param Budget $budget * @param LimitRepetition $repetition * * @return \Symfony\Component\HttpFoundation\Response */ public function budgetLimit(GChart $chart, BudgetRepositoryInterface $repository, Budget $budget, LimitRepetition $repetition) { $start = clone $repetition->startdate; $end = $repetition->enddate; $chart->addColumn(trans('firefly.day'), 'date'); $chart->addColumn(trans('firefly.left'), 'number'); $amount = $repetition->amount; while ($start <= $end) { /* * Sum of expenses on this day: */ $sum = $repository->expensesOnDay($budget, $start); $amount += $sum; $chart->addRow(clone $start, $amount); $start->addDay(); } $chart->generate(); return Response::json($chart->getData()); } /** * Show a yearly overview for a budget. * * @param GChart $chart * @param BudgetRepositoryInterface $repository * @param $year * @param bool $shared * * @return \Symfony\Component\HttpFoundation\Response */ public function year(GChart $chart, BudgetRepositoryInterface $repository, $year, $shared = false) { $start = new Carbon($year . '-01-01'); $end = new Carbon($year . '-12-31'); $shared = $shared == 'shared' ? true : false; $budgets = $repository->getBudgets(); // add columns: $chart->addColumn(trans('firefly.month'), 'date'); foreach ($budgets as $budget) { $chart->addColumn($budget->name, 'number'); } while ($start < $end) { // month is the current end of the period: $month = clone $start; $month->endOfMonth(); // make a row: $row = [clone $start]; // each budget, fill the row: foreach ($budgets as $budget) { $spent = $repository->spentInPeriod($budget, $start, $month, $shared); $row[] = $spent; } $chart->addRowArray($row); $start->addMonth(); } $chart->generate(); return Response::json($chart->getData()); } }