From a0cb1b9d9e70e13553577960e0db31d9e8d8c1b5 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 16 May 2015 09:41:14 +0200 Subject: [PATCH] Clean up and split chart controllers --- app/Http/Controllers/AccountController.php | 2 +- .../Controllers/Chart/AccountController.php | 95 ++++ app/Http/Controllers/Chart/BillController.php | 141 ++++++ .../Controllers/Chart/BudgetController.php | 161 +++++++ .../Controllers/Chart/CategoryController.php | 167 +++++++ .../Controllers/Chart/PiggyBankController.php | 58 +++ .../ReportController.php} | 82 +--- app/Http/Controllers/Controller.php | 2 +- .../Controllers/GoogleChartController.php | 431 ------------------ app/Http/Controllers/JsonController.php | 1 - .../Controllers/TransactionController.php | 2 +- app/Http/Middleware/Authenticate.php | 5 +- app/Http/routes.php | 37 +- 13 files changed, 660 insertions(+), 524 deletions(-) create mode 100644 app/Http/Controllers/Chart/AccountController.php create mode 100644 app/Http/Controllers/Chart/BillController.php create mode 100644 app/Http/Controllers/Chart/BudgetController.php create mode 100644 app/Http/Controllers/Chart/CategoryController.php create mode 100644 app/Http/Controllers/Chart/PiggyBankController.php rename app/Http/Controllers/{ReportChartController.php => Chart/ReportController.php} (55%) delete mode 100644 app/Http/Controllers/GoogleChartController.php diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index 7851147ad8..1e55f4b445 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -137,7 +137,7 @@ class AccountController extends Controller */ public function index(AccountRepositoryInterface $repository, $what) { - $subTitle = trans('firefly.' . $what.'_accounts'); + $subTitle = trans('firefly.' . $what . '_accounts'); $subTitleIcon = Config::get('firefly.subIconsByIdentifier.' . $what); $types = Config::get('firefly.accountTypesByIdentifier.' . $what); $accounts = $repository->getAccounts($types); diff --git a/app/Http/Controllers/Chart/AccountController.php b/app/Http/Controllers/Chart/AccountController.php new file mode 100644 index 0000000000..9d420ed923 --- /dev/null +++ b/app/Http/Controllers/Chart/AccountController.php @@ -0,0 +1,95 @@ +addColumn(trans('firefly.dayOfMonth'), 'date'); + + $frontPage = Preferences::get('frontPageAccounts', []); + $start = Session::get('start', Carbon::now()->startOfMonth()); + $end = Session::get('end', Carbon::now()->endOfMonth()); + $accounts = $repository->getFrontpageAccounts($frontPage); + + $index = 1; + /** @var Account $account */ + foreach ($accounts as $account) { + $chart->addColumn(trans('firefly.balanceFor', ['name' => $account->name]), 'number'); + $chart->addCertainty($index); + $index++; + } + $current = clone $start; + $current->subDay(); + $today = Carbon::now(); + while ($end >= $current) { + $row = [clone $current]; + $certain = $current < $today; + foreach ($accounts as $account) { + $row[] = Steam::balance($account, $current); + $row[] = $certain; + } + $chart->addRowArray($row); + $current->addDay(); + } + $chart->generate(); + + return Response::json($chart->getData()); + + } + + /** + * Shows an account's balance for a single month. + * + * @param GChart $chart + * @param Account $account + * + * @return \Symfony\Component\HttpFoundation\Response + */ + public function single(GChart $chart, Account $account) + { + $chart->addColumn(trans('firefly.dayOfMonth'), 'date'); + $chart->addColumn(trans('firefly.balanceFor', ['name' => $account->name]), 'number'); + $chart->addCertainty(1); + + $start = Session::get('start', Carbon::now()->startOfMonth()); + $end = Session::get('end', Carbon::now()->endOfMonth()); + $current = clone $start; + $today = new Carbon; + + while ($end >= $current) { + $certain = $current < $today; + $chart->addRow(clone $current, Steam::balance($account, $current), $certain); + $current->addDay(); + } + + + $chart->generate(); + + return Response::json($chart->getData()); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Chart/BillController.php b/app/Http/Controllers/Chart/BillController.php new file mode 100644 index 0000000000..17b3157e87 --- /dev/null +++ b/app/Http/Controllers/Chart/BillController.php @@ -0,0 +1,141 @@ +addColumn(trans('firefly.date'), 'date'); + $chart->addColumn(trans('firefly.maxAmount'), 'number'); + $chart->addColumn(trans('firefly.minAmount'), 'number'); + $chart->addColumn(trans('firefly.billEntry'), 'number'); + + // get first transaction or today for start: + $results = $repository->getJournals($bill); + /** @var TransactionJournal $result */ + foreach ($results as $result) { + $chart->addRow(clone $result->date, floatval($bill->amount_max), floatval($bill->amount_min), floatval($result->amount)); + } + + $chart->generate(); + + return Response::json($chart->getData()); + + } + + /** + * Shows all bills and whether or not theyve been paid this month (pie chart). + * + * @param GChart $chart + * + * @param BillRepositoryInterface $repository + * @param AccountRepositoryInterface $accounts + * + * @return \Symfony\Component\HttpFoundation\Response + */ + public function bills(GChart $chart, BillRepositoryInterface $repository, AccountRepositoryInterface $accounts) + { + $chart->addColumn(trans('firefly.name'), 'string'); + $chart->addColumn(trans('firefly.amount'), 'number'); + + $start = Session::get('start', Carbon::now()->startOfMonth()); + $end = Session::get('end', Carbon::now()->endOfMonth()); + $bills = $repository->getActiveBills(); + $paid = new Collection; // journals. + $unpaid = new Collection; // bills + // loop paid and create single entry: + $paidDescriptions = []; + $paidAmount = 0; + $unpaidDescriptions = []; + $unpaidAmount = 0; + + /** @var Bill $bill */ + foreach ($bills as $bill) { + $ranges = $repository->getRanges($bill, $start, $end); + + foreach ($ranges as $range) { + // paid a bill in this range? + $journals = $repository->getJournalsInRange($bill, $range['start'], $range['end']); + if ($journals->count() == 0) { + $unpaid->push([$bill, $range['start']]); + } else { + $paid = $paid->merge($journals); + } + + } + } + + $creditCards = $accounts->getCreditCards(); + foreach ($creditCards as $creditCard) { + $balance = Steam::balance($creditCard, null, true); + $date = new Carbon($creditCard->getMeta('ccMonthlyPaymentDate')); + if ($balance < 0) { + // unpaid! create a fake bill that matches the amount. + $description = $creditCard->name; + $amount = $balance * -1; + $fakeBill = $repository->createFakeBill($description, $date, $amount); + unset($description, $amount); + $unpaid->push([$fakeBill, $date]); + } + if ($balance == 0) { + // find transfer(s) TO the credit card which should account for + // anything paid. If not, the CC is not yet used. + $journals = $accounts->getTransfersInRange($creditCard, $start, $end); + $paid = $paid->merge($journals); + } + } + + + /** @var TransactionJournal $entry */ + foreach ($paid as $entry) { + + $paidDescriptions[] = $entry->description; + $paidAmount += floatval($entry->amount); + } + + // loop unpaid: + /** @var Bill $entry */ + foreach ($unpaid as $entry) { + $description = $entry[0]->name . ' (' . $entry[1]->format('jS M Y') . ')'; + $amount = ($entry[0]->amount_max + $entry[0]->amount_min) / 2; + $unpaidDescriptions[] = $description; + $unpaidAmount += $amount; + unset($amount, $description); + } + + $chart->addRow(trans('firefly.unpaid') . ': ' . join(', ', $unpaidDescriptions), $unpaidAmount); + $chart->addRow(trans('firefly.paid') . ': ' . join(', ', $paidDescriptions), $paidAmount); + $chart->generate(); + + return Response::json($chart->getData()); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Chart/BudgetController.php b/app/Http/Controllers/Chart/BudgetController.php new file mode 100644 index 0000000000..7d19b009e9 --- /dev/null +++ b/app/Http/Controllers/Chart/BudgetController.php @@ -0,0 +1,161 @@ +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()); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Chart/CategoryController.php b/app/Http/Controllers/Chart/CategoryController.php new file mode 100644 index 0000000000..aa8ae7cbca --- /dev/null +++ b/app/Http/Controllers/Chart/CategoryController.php @@ -0,0 +1,167 @@ +addColumn(trans('firefly.category'), 'string'); + $chart->addColumn(trans('firefly.spent'), 'number'); + + $start = Session::get('start', Carbon::now()->startOfMonth()); + $end = Session::get('end', Carbon::now()->endOfMonth()); + $set = $repository->getCategoriesAndExpenses($start, $end); + + foreach ($set as $entry) { + $isEncrypted = intval($entry->encrypted) == 1 ? true : false; + $name = strlen($entry->name) == 0 ? trans('firefly.noCategory') : $entry->name; + $name = $isEncrypted ? Crypt::decrypt($name) : $name; + $chart->addRow($name, floatval($entry->sum)); + } + + $chart->generate(); + + return Response::json($chart->getData()); + + } + + /** + * Show an overview for a category. + * + * @param GChart $chart + * @param CategoryRepositoryInterface $repository + * @param Category $category + * + * @return \Symfony\Component\HttpFoundation\Response + */ + public function overview(GChart $chart, CategoryRepositoryInterface $repository, Category $category) + { + // oldest transaction in category: + $start = $repository->getFirstActivityDate($category); + + $range = Preferences::get('viewRange', '1M')->data; + // jump to start of week / month / year / etc + $start = Navigation::startOfPeriod($start, $range); + + $chart->addColumn(trans('firefly.period'), 'date'); + $chart->addColumn(trans('firefly.spent'), 'number'); + + $end = new Carbon; + while ($start <= $end) { + + $currentEnd = Navigation::endOfPeriod($start, $range->data); + $spent = $repository->spentInPeriod($category, $start, $currentEnd); + $chart->addRow(clone $start, $spent); + + $start = Navigation::addPeriod($start, $range->data, 0); + } + + $chart->generate(); + + return Response::json($chart->getData()); + + + } + + + /** + * @param GChart $chart + * @param CategoryRepositoryInterface $repository + * @param Category $category + * + * @return \Symfony\Component\HttpFoundation\Response + */ + public function period(GChart $chart, CategoryRepositoryInterface $repository, Category $category) + { + $start = clone Session::get('start', Carbon::now()->startOfMonth()); + $chart->addColumn(trans('firefly.period'), 'date'); + $chart->addColumn(trans('firefly.spent'), 'number'); + + $end = Session::get('end', Carbon::now()->endOfMonth()); + while ($start <= $end) { + $spent = $repository->spentOnDaySum($category, $start); + $chart->addRow(clone $start, $spent); + $start->addDay(); + } + + $chart->generate(); + + return Response::json($chart->getData()); + + + } + + + /** + * @param GChart $chart + * @param CategoryRepositoryInterface $repository + * @param $year + * @param bool $shared + * + * @return \Symfony\Component\HttpFoundation\Response + */ + public function year(GChart $chart, CategoryRepositoryInterface $repository, $year, $shared = false) + { + $start = new Carbon($year . '-01-01'); + $end = new Carbon($year . '-12-31'); + $shared = $shared == 'shared' ? true : false; + $categories = $repository->getCategories(); + + // add columns: + $chart->addColumn(trans('firefly.month'), 'date'); + foreach ($categories as $category) { + $chart->addColumn($category->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 ($categories as $category) { + $spent = $repository->spentInPeriod($category, $start, $month, $shared); + $row[] = $spent; + } + $chart->addRowArray($row); + + $start->addMonth(); + } + + $chart->generate(); + + return Response::json($chart->getData()); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Chart/PiggyBankController.php b/app/Http/Controllers/Chart/PiggyBankController.php new file mode 100644 index 0000000000..6662c4af9c --- /dev/null +++ b/app/Http/Controllers/Chart/PiggyBankController.php @@ -0,0 +1,58 @@ +addColumn(trans('firefly.date'), 'date'); + $chart->addColumn(trans('firefly.balance'), 'number'); + + /** @var Collection $set */ + $set = $repository->getEventSummarySet($piggyBank); + $sum = 0; + + foreach ($set as $entry) { + $sum += floatval($entry->sum); + $chart->addRow(new Carbon($entry->date), $sum); + } + + $chart->generate(); + + return Response::json($chart->getData()); + + } +} \ No newline at end of file diff --git a/app/Http/Controllers/ReportChartController.php b/app/Http/Controllers/Chart/ReportController.php similarity index 55% rename from app/Http/Controllers/ReportChartController.php rename to app/Http/Controllers/Chart/ReportController.php index 8adf8a4b7a..0980cf9525 100644 --- a/app/Http/Controllers/ReportChartController.php +++ b/app/Http/Controllers/Chart/ReportController.php @@ -1,93 +1,23 @@ 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()); - } - - public function yearCategories(GChart $chart, CategoryRepositoryInterface $repository, $year, $shared = false) - { - $start = new Carbon($year . '-01-01'); - $end = new Carbon($year . '-12-31'); - $shared = $shared == 'shared' ? true : false; - $categories = $repository->getCategories(); - - // add columns: - $chart->addColumn(trans('firefly.month'), 'date'); - foreach ($categories as $category) { - $chart->addColumn($category->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 ($categories as $category) { - $spent = $repository->spentInPeriod($category, $start, $month, $shared); - $row[] = $spent; - } - $chart->addRowArray($row); - - $start->addMonth(); - } - - $chart->generate(); - - return Response::json($chart->getData()); - } - /** * Summarizes all income and expenses, per month, for a given year. * diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 8030bf45be..2c66882c87 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -20,7 +20,7 @@ abstract class Controller extends BaseController /** @var string */ protected $monthAndDayFormat; - /** @var string */ + /** @var string */ protected $monthFormat; /** diff --git a/app/Http/Controllers/GoogleChartController.php b/app/Http/Controllers/GoogleChartController.php deleted file mode 100644 index 62bf1d916c..0000000000 --- a/app/Http/Controllers/GoogleChartController.php +++ /dev/null @@ -1,431 +0,0 @@ -addColumn(trans('firefly.dayOfMonth'), 'date'); - $chart->addColumn(trans('firefly.balanceFor', ['name' => $account->name]), 'number'); - $chart->addCertainty(1); - - $start = Session::get('start', Carbon::now()->startOfMonth()); - $end = Session::get('end', Carbon::now()->endOfMonth()); - $current = clone $start; - $today = new Carbon; - - while ($end >= $current) { - $certain = $current < $today; - $chart->addRow(clone $current, Steam::balance($account, $current), $certain); - $current->addDay(); - } - - - $chart->generate(); - - return Response::json($chart->getData()); - } - - /** - * @param GChart $chart - * @param AccountRepositoryInterface $repository - * - * @return \Symfony\Component\HttpFoundation\Response - */ - public function allAccountsBalanceChart(GChart $chart, AccountRepositoryInterface $repository) - { - $chart->addColumn(trans('firefly.dayOfMonth'), 'date'); - - $frontPage = Preferences::get('frontPageAccounts', []); - $start = Session::get('start', Carbon::now()->startOfMonth()); - $end = Session::get('end', Carbon::now()->endOfMonth()); - $accounts = $repository->getFrontpageAccounts($frontPage); - - $index = 1; - /** @var Account $account */ - foreach ($accounts as $account) { - $chart->addColumn(trans('firefly.balanceFor', ['name' => $account->name]), 'number'); - $chart->addCertainty($index); - $index++; - } - $current = clone $start; - $current->subDay(); - $today = Carbon::now(); - while ($end >= $current) { - $row = [clone $current]; - $certain = $current < $today; - foreach ($accounts as $account) { - $row[] = Steam::balance($account, $current); - $row[] = $certain; - } - $chart->addRowArray($row); - $current->addDay(); - } - $chart->generate(); - - return Response::json($chart->getData()); - - } - - /** - * @param GChart $chart - * @param BudgetRepositoryInterface $repository - * - * @return \Symfony\Component\HttpFoundation\Response - */ - public function allBudgetsHomeChart(GChart $chart, BudgetRepositoryInterface $repository) - { - $chart->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()); - - } - - /** - * @param GChart $chart - * @param CategoryRepositoryInterface $repository - * - * @return \Symfony\Component\HttpFoundation\Response - */ - public function allCategoriesHomeChart(GChart $chart, CategoryRepositoryInterface $repository) - { - $chart->addColumn(trans('firefly.category'), 'string'); - $chart->addColumn(trans('firefly.spent'), 'number'); - - $start = Session::get('start', Carbon::now()->startOfMonth()); - $end = Session::get('end', Carbon::now()->endOfMonth()); - $set = $repository->getCategoriesAndExpenses($start, $end); - - foreach ($set as $entry) { - $isEncrypted = intval($entry->encrypted) == 1 ? true : false; - $name = strlen($entry->name) == 0 ? trans('firefly.noCategory') : $entry->name; - $name = $isEncrypted ? Crypt::decrypt($name) : $name; - $chart->addRow($name, floatval($entry->sum)); - } - - $chart->generate(); - - return Response::json($chart->getData()); - - } - - /** - * @param GChart $chart - * @param BillRepositoryInterface $repository - * @param Bill $bill - * - * @return \Symfony\Component\HttpFoundation\Response - */ - public function billOverview(GChart $chart, BillRepositoryInterface $repository, Bill $bill) - { - - $chart->addColumn(trans('firefly.date'), 'date'); - $chart->addColumn(trans('firefly.maxAmount'), 'number'); - $chart->addColumn(trans('firefly.minAmount'), 'number'); - $chart->addColumn(trans('firefly.billEntry'), 'number'); - - // get first transaction or today for start: - $results = $repository->getJournals($bill); - /** @var TransactionJournal $result */ - foreach ($results as $result) { - $chart->addRow(clone $result->date, floatval($bill->amount_max), floatval($bill->amount_min), floatval($result->amount)); - } - - $chart->generate(); - - return Response::json($chart->getData()); - - } - - /** - * @param GChart $chart - * - * @param BillRepositoryInterface $repository - * @param AccountRepositoryInterface $accounts - * - * @return \Symfony\Component\HttpFoundation\Response - */ - public function billsOverview(GChart $chart, BillRepositoryInterface $repository, AccountRepositoryInterface $accounts) - { - $chart->addColumn(trans('firefly.name'), 'string'); - $chart->addColumn(trans('firefly.amount'), 'number'); - - $start = Session::get('start', Carbon::now()->startOfMonth()); - $end = Session::get('end', Carbon::now()->endOfMonth()); - $bills = $repository->getActiveBills(); - $paid = new Collection; // journals. - $unpaid = new Collection; // bills - // loop paid and create single entry: - $paidDescriptions = []; - $paidAmount = 0; - $unpaidDescriptions = []; - $unpaidAmount = 0; - - /** @var Bill $bill */ - foreach ($bills as $bill) { - $ranges = $repository->getRanges($bill, $start, $end); - - foreach ($ranges as $range) { - // paid a bill in this range? - $journals = $repository->getJournalsInRange($bill, $range['start'], $range['end']); - if ($journals->count() == 0) { - $unpaid->push([$bill, $range['start']]); - } else { - $paid = $paid->merge($journals); - } - - } - } - - $creditCards = $accounts->getCreditCards(); - foreach ($creditCards as $creditCard) { - $balance = Steam::balance($creditCard, null, true); - $date = new Carbon($creditCard->getMeta('ccMonthlyPaymentDate')); - if ($balance < 0) { - // unpaid! create a fake bill that matches the amount. - $description = $creditCard->name; - $amount = $balance * -1; - $fakeBill = $repository->createFakeBill($description, $date, $amount); - unset($description, $amount); - $unpaid->push([$fakeBill, $date]); - } - if ($balance == 0) { - // find transfer(s) TO the credit card which should account for - // anything paid. If not, the CC is not yet used. - $journals = $accounts->getTransfersInRange($creditCard, $start, $end); - $paid = $paid->merge($journals); - } - } - - - /** @var TransactionJournal $entry */ - foreach ($paid as $entry) { - - $paidDescriptions[] = $entry->description; - $paidAmount += floatval($entry->amount); - } - - // loop unpaid: - /** @var Bill $entry */ - foreach ($unpaid as $entry) { - $description = $entry[0]->name . ' (' . $entry[1]->format('jS M Y') . ')'; - $amount = ($entry[0]->amount_max + $entry[0]->amount_min) / 2; - $unpaidDescriptions[] = $description; - $unpaidAmount += $amount; - unset($amount, $description); - } - - $chart->addRow(trans('firefly.unpaid') . ': ' . join(', ', $unpaidDescriptions), $unpaidAmount); - $chart->addRow(trans('firefly.paid') . ': ' . join(', ', $paidDescriptions), $paidAmount); - $chart->generate(); - - return Response::json($chart->getData()); - } - - /** - * @param GChart $chart - * @param BudgetRepositoryInterface $repository - * @param Budget $budget - * @param LimitRepetition $repetition - * - * @return \Symfony\Component\HttpFoundation\Response - */ - public function budgetLimitSpending(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()); - - } - - /** - * @param GChart $chart - * @param CategoryRepositoryInterface $repository - * @param Category $category - * - * @return \Symfony\Component\HttpFoundation\Response - */ - public function categoryOverviewChart(GChart $chart, CategoryRepositoryInterface $repository, Category $category) - { - // oldest transaction in category: - $start = $repository->getFirstActivityDate($category); - - /** @var Preference $range */ - $range = Preferences::get('viewRange', '1M'); - // jump to start of week / month / year / etc (TODO). - $start = Navigation::startOfPeriod($start, $range->data); - - $chart->addColumn(trans('firefly.period'), 'date'); - $chart->addColumn(trans('firefly.spent'), 'number'); - - $end = new Carbon; - while ($start <= $end) { - - $currentEnd = Navigation::endOfPeriod($start, $range->data); - $spent = $repository->spentInPeriod($category, $start, $currentEnd); - $chart->addRow(clone $start, $spent); - - $start = Navigation::addPeriod($start, $range->data, 0); - } - - $chart->generate(); - - return Response::json($chart->getData()); - - - } - - /** - * @param GChart $chart - * @param CategoryRepositoryInterface $repository - * @param Category $category - * - * @return \Symfony\Component\HttpFoundation\Response - */ - public function categoryPeriodChart(GChart $chart, CategoryRepositoryInterface $repository, Category $category) - { - $start = clone Session::get('start', Carbon::now()->startOfMonth()); - $chart->addColumn(trans('firefly.period'), 'date'); - $chart->addColumn(trans('firefly.spent'), 'number'); - - $end = Session::get('end', Carbon::now()->endOfMonth()); - while ($start <= $end) { - $spent = $repository->spentOnDaySum($category, $start); - $chart->addRow(clone $start, $spent); - $start->addDay(); - } - - $chart->generate(); - - return Response::json($chart->getData()); - - - } - - - /** - * @param GChart $chart - * @param PiggyBankRepositoryInterface $repository - * @param PiggyBank $piggyBank - * - * @return \Symfony\Component\HttpFoundation\Response - */ - public function piggyBankHistory(GChart $chart, PiggyBankRepositoryInterface $repository, PiggyBank $piggyBank) - { - $chart->addColumn(trans('firefly.date'), 'date'); - $chart->addColumn(trans('firefly.balance'), 'number'); - - /** @var Collection $set */ - $set = $repository->getEventSummarySet($piggyBank); - $sum = 0; - - foreach ($set as $entry) { - $sum += floatval($entry->sum); - $chart->addRow(new Carbon($entry->date), $sum); - } - - $chart->generate(); - - return Response::json($chart->getData()); - - } -} diff --git a/app/Http/Controllers/JsonController.php b/app/Http/Controllers/JsonController.php index 6ca21159dc..958772c6f7 100644 --- a/app/Http/Controllers/JsonController.php +++ b/app/Http/Controllers/JsonController.php @@ -12,7 +12,6 @@ use FireflyIII\Repositories\Category\CategoryRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Repositories\Tag\TagRepositoryInterface; use Illuminate\Support\Collection; -use Preferences; use Response; use Session; use Steam; diff --git a/app/Http/Controllers/TransactionController.php b/app/Http/Controllers/TransactionController.php index ae9bd25181..4073013202 100644 --- a/app/Http/Controllers/TransactionController.php +++ b/app/Http/Controllers/TransactionController.php @@ -49,7 +49,7 @@ class TransactionController extends Controller $piggies[0] = trans('form.noPiggybank'); $preFilled = Session::has('preFilled') ? Session::get('preFilled') : []; $respondTo = ['account_id', 'account_from_id']; - $subTitle = trans('form.add_new_'.$what); + $subTitle = trans('form.add_new_' . $what); foreach ($respondTo as $r) { if (!is_null(Input::get($r))) { diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index c40f66c263..d4a32536b8 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -2,11 +2,12 @@ use App; use Closure; +use Config; use FireflyIII\Models\Preference; use Illuminate\Contracts\Auth\Guard; use Illuminate\Http\Request; use Preferences; -use Config; + /** * Class Authenticate * @@ -55,7 +56,7 @@ class Authenticate $pref = Preferences::get('language', 'en'); App::setLocale($pref->data); - setlocale(LC_TIME, Config::get('firefly.locales.'.$pref->data)); + setlocale(LC_TIME, Config::get('firefly.locales.' . $pref->data)); return $next($request); } diff --git a/app/Http/routes.php b/app/Http/routes.php index f4f837c5e7..b8c22ffce9 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -188,7 +188,7 @@ Route::get('/register', ['uses' => 'Auth\AuthController@getRegister', 'as' => 'r Route::controllers( [ - 'auth' => 'Auth\AuthController', + 'auth' => 'Auth\AuthController', 'password' => 'Auth\PasswordController', ] ); @@ -284,8 +284,12 @@ Route::group( Route::get('/chart/home/bills', ['uses' => 'GoogleChartController@billsOverview']); Route::get('/chart/budget/{budget}/{limitrepetition}', ['uses' => 'GoogleChartController@budgetLimitSpending']); - Route::get('/chart/reports/income-expenses/{year}/{shared?}', ['uses' => 'GoogleChartController@yearInExp'])->where(['year' => '[0-9]{4}','shared'=> 'shared']); - Route::get('/chart/reports/income-expenses-sum/{year}/{shared?}', ['uses' => 'GoogleChartController@yearInExpSum'])->where(['year' => '[0-9]{4}','shared'=> 'shared']); + Route::get('/chart/reports/income-expenses/{year}/{shared?}', ['uses' => 'GoogleChartController@yearInExp'])->where( + ['year' => '[0-9]{4}', 'shared' => 'shared'] + ); + Route::get('/chart/reports/income-expenses-sum/{year}/{shared?}', ['uses' => 'GoogleChartController@yearInExpSum'])->where( + ['year' => '[0-9]{4}', 'shared' => 'shared'] + ); Route::get('/chart/bills/{bill}', ['uses' => 'GoogleChartController@billOverview']); Route::get('/chart/piggy-history/{piggyBank}', ['uses' => 'GoogleChartController@piggyBankHistory']); Route::get('/chart/category/{category}/period', ['uses' => 'GoogleChartController@categoryPeriodChart']); @@ -354,22 +358,33 @@ Route::group( */ Route::get('/reports', ['uses' => 'ReportController@index', 'as' => 'reports.index']); //Route::get('/reports/{year}', ['uses' => 'ReportController@year', 'as' => 'reports.year'])->where(['year' => '[0-9]{4}']); - Route::get('/reports/{year}/{shared?}', ['uses' => 'ReportController@year', 'as' => 'reports.year'])->where(['year' => '[0-9]{4}','shared'=> 'shared']); - Route::get('/reports/{year}/{month}/{shared?}', ['uses' => 'ReportController@month', 'as' => 'reports.month'])->where(['year' => '[0-9]{4}','month' => '[0-9]{1,2}','shared' => 'shared']); + Route::get('/reports/{year}/{shared?}', ['uses' => 'ReportController@year', 'as' => 'reports.year'])->where(['year' => '[0-9]{4}', 'shared' => 'shared']); + Route::get('/reports/{year}/{month}/{shared?}', ['uses' => 'ReportController@month', 'as' => 'reports.month'])->where( + ['year' => '[0-9]{4}', 'month' => '[0-9]{1,2}', 'shared' => 'shared'] + ); // pop ups for budget report: Route::get('/reports/modal/{account}/{year}/{month}/no-budget', ['uses' => 'ReportController@modalNoBudget', 'as' => 'reports.no-budget']); - Route::get('/reports/modal/{account}/{year}/{month}/balanced-transfers', ['uses' => 'ReportController@modalBalancedTransfers', 'as' => 'reports.balanced-transfers']); - Route::get('/reports/modal/{account}/{year}/{month}/left-unbalanced', ['uses' => 'ReportController@modalLeftUnbalanced', 'as' => 'reports.left-unbalanced']); + Route::get( + '/reports/modal/{account}/{year}/{month}/balanced-transfers', + ['uses' => 'ReportController@modalBalancedTransfers', 'as' => 'reports.balanced-transfers'] + ); + Route::get( + '/reports/modal/{account}/{year}/{month}/left-unbalanced', ['uses' => 'ReportController@modalLeftUnbalanced', 'as' => 'reports.left-unbalanced'] + ); /** * Report Chart Controller: */ - Route::get('/report/chart/in-out/{year}/{shared?}', ['uses' => 'ReportChartController@yearInOut'])->where(['year' => '[0-9]{4}','shared'=> 'shared']); - Route::get('/report/chart/in-out-sum/{year}/{shared?}', ['uses' => 'ReportChartController@yearInOutSummarized'])->where(['year' => '[0-9]{4}','shared'=> 'shared']); + Route::get('/report/chart/in-out/{year}/{shared?}', ['uses' => 'ReportChartController@yearInOut'])->where(['year' => '[0-9]{4}', 'shared' => 'shared']); + Route::get('/report/chart/in-out-sum/{year}/{shared?}', ['uses' => 'ReportChartController@yearInOutSummarized'])->where( + ['year' => '[0-9]{4}', 'shared' => 'shared'] + ); - Route::get('/report/chart/budgets/{year}/{shared?}', ['uses' => 'ReportChartController@yearBudgets'])->where(['year' => '[0-9]{4}','shared'=> 'shared']); - Route::get('/report/chart/categories/{year}/{shared?}', ['uses' => 'ReportChartController@yearCategories'])->where(['year' => '[0-9]{4}','shared'=> 'shared']); + Route::get('/report/chart/budgets/{year}/{shared?}', ['uses' => 'ReportChartController@yearBudgets'])->where(['year' => '[0-9]{4}', 'shared' => 'shared']); + Route::get('/report/chart/categories/{year}/{shared?}', ['uses' => 'ReportChartController@yearCategories'])->where( + ['year' => '[0-9]{4}', 'shared' => 'shared'] + ); /** * Search Controller