diff --git a/app/config/app.php b/app/config/app.php
index b997979dd7..114350c2b5 100644
--- a/app/config/app.php
+++ b/app/config/app.php
@@ -39,9 +39,7 @@ return [
'Illuminate\Workbench\WorkbenchServiceProvider',
'Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider',
'Barryvdh\Debugbar\ServiceProvider',
- 'Firefly\Storage\StorageServiceProvider',
- 'Firefly\Helper\HelperServiceProvider',
- 'Firefly\Validation\ValidationServiceProvider',
+ 'FireflyIII\FF3ServiceProvider',
'DaveJamesMiller\Breadcrumbs\ServiceProvider',
'Grumpydictator\Gchart\GchartServiceProvider',
],
diff --git a/app/controllers/AccountController.php b/app/controllers/AccountController.php
index 08ddca55e8..c875e0be64 100644
--- a/app/controllers/AccountController.php
+++ b/app/controllers/AccountController.php
@@ -50,70 +50,6 @@ class AccountController extends BaseController
}
- /**
- * @param string $what
- *
- * @return \Illuminate\Http\JsonResponse
- * @throws FireflyException
- */
- public function json($what = 'default')
- {
- /** @var \FireflyIII\Database\Account $acct */
- $acct = App::make('FireflyIII\Database\Account');
-
- /** @var \FireflyIII\Shared\Json\Json $json */
- $json = App::make('FireflyIII\Shared\Json\Json');
-
- $parameters = $json->dataTableParameters();
-
- switch ($what) {
- default:
- throw new FireflyException('Cannot handle account type "' . e($what) . '".');
- break;
- case 'asset':
- $accounts = $acct->getAssetAccounts($parameters);
- $count = $acct->countAssetAccounts();
- break;
- case 'expense':
- $accounts = $acct->getExpenseAccounts($parameters);
- $count = $acct->countExpenseAccounts();
- break;
- case 'revenue':
- $accounts = $acct->getRevenueAccounts($parameters);
- $count = $acct->countRevenueAccounts();
- break;
- }
-
- /*
- * Output the set compatible with data tables:
- */
- $return = [
- 'draw' => intval(Input::get('draw')),
- 'recordsTotal' => $count,
- 'recordsFiltered' => $accounts->count(),
- 'data' => [],
- ];
-
- /*
- * Loop the accounts:
- */
- /** @var \Account $account */
- foreach ($accounts as $account) {
- $entry = [
- 'name' => ['name' => $account->name, 'url' => route('accounts.show', $account->id)],
- 'balance' => $account->balance(),
- 'id' => [
- 'edit' => route('accounts.edit', $account->id),
- 'delete' => route('accounts.delete', $account->id),
- ]
- ];
- $return['data'][] = $entry;
- }
-
-
- return Response::jsoN($return);
- }
-
/**
* @return \Illuminate\View\View
*/
diff --git a/app/controllers/ChartController.php b/app/controllers/ChartController.php
deleted file mode 100644
index 9b104ca379..0000000000
--- a/app/controllers/ChartController.php
+++ /dev/null
@@ -1,603 +0,0 @@
-_chart = $chart;
- $this->_accounts = $accounts;
- }
-
- /**
- * This method takes a budget, all limits and all their repetitions and displays three numbers per repetition:
- * the amount of money in the repetition (represented as "an envelope"), the amount spent and the spent percentage.
- *
- * @param Budget $budget
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function budgetDefault(\Budget $budget)
- {
- $expense = [];
- $left = [];
- $envelope = [];
- // get all limit repetitions for this budget.
- /** @var \Limit $limit */
- foreach ($budget->limits as $limit) {
- /** @var \LimitRepetition $rep */
- foreach ($limit->limitrepetitions as $rep) {
- // get the amount of money spent in this period on this budget.
- $spentInRep = $rep->amount - $rep->leftInRepetition();
- $pct = round((floatval($spentInRep) / floatval($limit->amount)) * 100, 2);
- $name = $rep->periodShow();
- $envelope[] = [$name, floatval($limit->amount)];
- $expense[] = [$name, floatval($spentInRep)];
- $left[] = [$name, $pct];
- }
- }
-
- $return = [
- 'chart_title' => 'Overview for budget ' . $budget->name,
- 'subtitle' => 'All envelopes',
- 'series' => [
- [
- 'type' => 'line',
- 'yAxis' => 1,
- 'name' => 'Amount in envelope',
- 'data' => $envelope
- ],
- [
- 'type' => 'column',
- 'name' => 'Expenses in envelope',
- 'data' => $expense
- ],
- [
- 'type' => 'line',
- 'yAxis' => 1,
- 'name' => 'Spent percentage for envelope',
- 'data' => $left
- ]
-
-
- ]
- ];
-
- return Response::json($return);
- }
-
- /**
- * This method takes a single limit repetition (so a single "envelope") and displays the amount of money spent
- * per day and subsequently how much money is left.
- *
- * @param LimitRepetition $rep
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function budgetLimit(\LimitRepetition $rep)
- {
- $budget = $rep->limit->budget;
- $current = clone $rep->startdate;
- $expense = [];
- $leftInLimit = [];
- $currentLeftInLimit = floatval($rep->limit->amount);
- while ($current <= $rep->enddate) {
- $spent = $this->_chart->spentOnDay($budget, $current);
- $spent = floatval($spent) == 0 ? null : floatval($spent);
- $entry = [$current->timestamp * 1000, $spent];
- $expense[] = $entry;
- $currentLeftInLimit = $currentLeftInLimit - $spent;
- $leftInLimit[] = [$current->timestamp * 1000, $currentLeftInLimit];
- $current->addDay();
- }
-
- $return = [
- 'chart_title' => 'Overview for budget ' . $budget->name,
- 'subtitle' =>
- 'Between ' . $rep->startdate->format('M jS, Y') . ' and ' . $rep->enddate->format('M jS, Y'),
- 'series' => [
- [
- 'type' => 'column',
- 'name' => 'Expenses per day',
- 'yAxis' => 1,
- 'data' => $expense
- ],
- [
- 'type' => 'line',
- 'name' => 'Left in envelope',
- 'data' => $leftInLimit
- ]
-
- ]
- ];
-
- return Response::json($return);
- }
-
- /**
- * This method takes a budget and gets all transactions in it which haven't got an envelope (limit).
- *
- * Usually this means that very old and unorganized or very NEW transactions get displayed; there was never an
- * envelope or it hasn't been created (yet).
- *
- *
- * @param Budget $budget
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function budgetNoLimits(\Budget $budget)
- {
- /*
- * Firefly can go about this two ways. Either it finds all transactions which definitely are IN an envelope
- * and exclude them or it searches for transactions outside of the range of any of the envelopes there are.
- *
- * Since either is kinda shitty Firefly uses the first one because it's easier to build.
- */
- $inRepetitions = $this->_chart->allJournalsInBudgetEnvelope($budget);
-
- /*
- * With this set of id's, Firefly can search for all journals NOT in that set.
- * BUT they have to be in the budget (duh).
- */
- $set = $this->_chart->journalsNotInSet($budget, $inRepetitions);
- /*
- * Next step: get all transactions for those journals.
- */
- $transactions = $this->_chart->transactionsByJournals($set);
-
-
- /*
- * this set builds the chart:
- */
- $expense = [];
-
- foreach ($transactions as $t) {
- $date = new Carbon($t->date);
- $expense[] = [$date->timestamp * 1000, floatval($t->aggregate)];
- }
- $return = [
- 'chart_title' => 'Overview for ' . $budget->name,
- 'subtitle' => 'Not organized by an envelope',
- 'series' => [
- [
- 'type' => 'column',
- 'name' => 'Expenses per day',
- 'data' => $expense
- ]
-
- ]
- ];
- return Response::json($return);
- }
-
- /**
- * This method gets all transactions within a budget within the period set by the current session
- * start and end date. It also includes any envelopes which might exist within this period.
- *
- * @param Budget $budget
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function budgetSession(\Budget $budget)
- {
- $series = [];
- $end = clone Session::get('end');
- $start = clone Session::get('start');
-
-
- /*
- * Expenses per day in the session's period. That's easy.
- */
- $expense = [];
- $current = clone Session::get('start');
- while ($current <= $end) {
- $spent = $this->_chart->spentOnDay($budget, $current);
- $spent = floatval($spent) == 0 ? null : floatval($spent);
- $expense[] = [$current->timestamp * 1000, $spent];
- $current->addDay();
- }
-
- $series[] = [
- 'type' => 'column',
- 'name' => 'Expenses per day',
- 'data' => $expense
- ];
- unset($expense, $spent, $current);
-
- /*
- * Find all limit repetitions (for this budget) between start and end. This is
- * quite a complex query.
- */
- $reps = $this->_chart->limitsInRange($budget, $start, $end);
-
- /*
- * For each limitrepetition Firefly creates a serie that contains the amount left in
- * the limitrepetition for its entire date-range. Entries are only actually included when they
- * fall into the charts date range.
- *
- * So example: the user has a session date from Jan 15 to Jan 30. The limitrepetition
- * starts at 1 Jan until 1 Feb.
- *
- * Firefly loops from 1 Jan to 1 Feb but only includes Jan 15 / Jan 30.
- * But it does keep count of the amount outside of these dates because otherwise the line might be wrong.
- */
- /** @var \LimitRepetition $repetition */
- foreach ($reps as $repetition) {
- $limitAmount = $repetition->limit->amount;
-
- // create a serie for the repetition.
- $currentSerie = [
- 'type' => 'spline',
- 'id' => 'rep-' . $repetition->id,
- 'yAxis' => 1,
- 'name' => 'Envelope #' . $repetition->id . ' in ' . $repetition->periodShow(),
- 'data' => []
- ];
- $current = clone $repetition->startdate;
- while ($current <= $repetition->enddate) {
- if ($current >= $start && $current <= $end) {
- // spent on limit:
- $spentSoFar = $this->_chart->spentOnLimitRepetitionBetweenDates(
- $repetition, $repetition->startdate, $current
- );
- $leftInLimit = floatval($limitAmount) - floatval($spentSoFar);
-
- $currentSerie['data'][] = [$current->timestamp * 1000, $leftInLimit];
- }
- $current->addDay();
- }
-
- // do something here.
- $series[] = $currentSerie;
- }
-
- $return = [
- 'chart_title' => 'Overview for budget ' . $budget->name,
- 'subtitle' =>
- 'Between ' . Session::get('start')->format('M jS, Y') . ' and ' . Session::get('end')->format(
- 'M jS, Y'
- ),
- 'series' => $series
- ];
-
- return Response::json($return);
-
- }
-
- /**
- * @param Category $category
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function categoryShowChart(Category $category)
- {
- $start = Session::get('start');
- $end = Session::get('end');
- $range = Session::get('range');
-
- $serie = $this->_chart->categoryShowChart($category, $range, $start, $end);
- $data = [
- 'chart_title' => $category->name,
- 'subtitle' => 'View more',
- 'series' => $serie
- ];
-
- return Response::json($data);
-
-
- }
-
- /**
- * @param Account $account
- *
- * @return mixed
- */
- public function homeAccount(Account $account = null)
- {
- // get preferences and accounts (if necessary):
- $start = Session::get('start');
- $end = Session::get('end');
-
- if (is_null($account)) {
- // get, depending on preferences:
- /** @var \Firefly\Helper\Preferences\PreferencesHelperInterface $prefs */
- $prefs = \App::make('Firefly\Helper\Preferences\PreferencesHelperInterface');
- $pref = $prefs->get('frontpageAccounts', []);
-
- /** @var \Firefly\Storage\Account\AccountRepositoryInterface $acct */
- $acct = \App::make('Firefly\Storage\Account\AccountRepositoryInterface');
- $accounts = $acct->getByIds($pref->data);
- } else {
- $accounts = [$account];
- }
- // loop and get array data.
-
- $url = count($accounts) == 1 && is_array($accounts)
- ? 'View more'
- :
- 'View more';
- $data = [
- 'chart_title' => count($accounts) == 1 ? $accounts[0]->name : 'All accounts',
- 'subtitle' => $url,
- 'series' => []
- ];
-
- foreach ($accounts as $account) {
- $data['series'][] = $this->_chart->account($account, $start, $end);
- }
-
- return Response::json($data);
- }
-
- /**
- * @param $name
- * @param $day
- * @param $month
- * @param $year
- *
- * @return $this
- */
- public function homeAccountInfo($name, $day, $month, $year)
- {
- $account = $this->_accounts->findByName($name);
-
- $date = Carbon::createFromDate($year, $month, $day);
- $result = $this->_chart->accountDailySummary($account, $date);
-
- return View::make('charts.info')->with('rows', $result['rows'])->with('sum', $result['sum'])->with(
- 'account', $account
- );
- }
-
- /**
- * @return \Illuminate\Http\JsonResponse
- */
- public function homeBudgets()
- {
- $start = Session::get('start');
- $end = Session::get('end');
- $data = [
- 'labels' => [],
- 'series' => [
- [
- 'name' => 'Limit',
- 'data' => []
- ],
- [
- 'name' => 'Spent',
- 'data' => []
- ],
- ]
- ];
-
- // Get all budgets.
- $budgets = \Auth::user()->budgets()->orderBy('name', 'ASC')->get();
- $budgetIds = [];
- /** @var \Budget $budget */
- foreach ($budgets as $budget) {
- $budgetIds[] = $budget->id;
-
- // Does the budget have a limit starting on $start?
- $rep = \LimitRepetition::
- leftJoin('limits', 'limit_repetitions.limit_id', '=', 'limits.id')->leftJoin(
- 'components', 'limits.component_id', '=', 'components.id'
- )->where('limit_repetitions.startdate', $start->format('Y-m-d'))->where(
- 'components.id', $budget->id
- )->first(['limit_repetitions.*']);
-
- if (is_null($rep)) {
- $limit = 0.0;
- $id = null;
- $parameter = 'useSession=true';
- } else {
- $limit = floatval($rep->amount);
- $id = $rep->id;
- $parameter = '';
- }
-
- // Date range to check for expenses made?
- if (is_null($rep)) {
- // use the session start and end for our search query
- $expenseStart = Session::get('start');
- $expenseEnd = Session::get('end');
-
- } else {
- // use the limit's start and end for our search query
- $expenseStart = $rep->startdate;
- $expenseEnd = $rep->enddate;
- }
- // How much have we spent on this budget?
- $expenses = floatval($budget->transactionjournals()->before($expenseEnd)->after($expenseStart)->lessThan(0)->sum('amount')) * -1;
-
- // Append to chart:
- if ($limit > 0 || $expenses > 0) {
- $data['labels'][] = $budget->name;
- $data['series'][0]['data'][] = [
- 'y' => $limit,
- 'url' => route('budgets.show', [$budget->id, $id]) . '?' . $parameter
- ];
- $data['series'][1]['data'][] = [
- 'y' => $expenses,
- 'url' => route('budgets.show', [$budget->id, $id]) . '?' . $parameter
- ];
- }
- }
- // Add expenses that have no budget:
- $set = \Auth::user()->transactionjournals()->whereNotIn(
- 'transaction_journals.id', function ($query) use ($start, $end) {
- $query->select('transaction_journals.id')->from('transaction_journals')
- ->leftJoin(
- 'component_transaction_journal', 'component_transaction_journal.transaction_journal_id', '=',
- 'transaction_journals.id'
- )
- ->leftJoin('components', 'components.id', '=', 'component_transaction_journal.component_id')
- ->where('transaction_journals.date', '>=', $start->format('Y-m-d'))
- ->where('transaction_journals.date', '<=', $end->format('Y-m-d'))
- ->where('components.class', 'Budget');
- }
- )->before($end)->after($start)->lessThan(0)->transactionTypes(['Withdrawal'])->sum('amount');
-
- // This can be debugged by using get(['transaction_journals.*','transactions.amount']);
- $data['labels'][] = 'No budget';
- $data['series'][0]['data'][] = [
- 'y' => 0,
- 'url' => route('budgets.nobudget', 'session')
- ];
- $data['series'][1]['data'][] = [
- 'y' => floatval($set) * -1,
- 'url' => route('budgets.nobudget', 'session')
- ];
-
- return Response::json($data);
-
- }
-
- /**
- * @return \Illuminate\Http\JsonResponse
- */
- public function homeCategories()
- {
- $start = Session::get('start');
- $end = Session::get('end');
-
- return Response::json($this->_chart->categories($start, $end));
-
-
- }
-
- /**
- * This method checks all recurring transactions, calculates the current "moment" and returns
- * a list of yet to be paid (and paid) recurring transactions. This list can be used to show a beautiful chart
- * to the end user who will love it and cherish it.
- *
- * @throws FireflyException
- */
- public function homeRecurring()
- {
- /** @var \Firefly\Helper\Toolkit\ToolkitInterface $toolkit */
- $toolkit = App::make('Firefly\Helper\Toolkit\ToolkitInterface');
-
- /*
- * Set of paid transaction journals.
- * Set of unpaid recurring transactions.
- */
- $paid = [];
- $unpaid = [];
-
- /*
- * Loop the recurring transactions.
- */
-
- /** @var \RecurringTransaction $recurring */
- foreach (\Auth::user()->recurringtransactions()->get() as $recurring) {
- /*
- * Start another loop starting at the $date.
- */
- $start = clone $recurring->date;
- $end = Carbon::now();
-
- /*
- * The jump we make depends on the $repeat_freq
- */
- $current = clone $start;
-
- while ($current <= $end) {
- /*
- * Get end of period for $current:
- */
- $currentEnd = clone $current;
- $toolkit->endOfPeriod($currentEnd, $recurring->repeat_freq);
-
- /*
- * In the current session range?
- */
- if (\Session::get('end') >= $current and $currentEnd >= \Session::get('start')) {
- /*
- * Lets see if we've already spent money on this recurring transaction (it hath recurred).
- */
- /** @var TransactionJournal $set */
- $transaction = \Auth::user()->transactionjournals()->where('recurring_transaction_id', $recurring->id)->after($current)->before($currentEnd)->first();
-
- if(is_null($transaction)) {
- $unpaid[] = $recurring;
- } else {
- $paid[] = $transaction;
- }
- }
-
- /*
- * Add some time for the next loop!
- */
- $toolkit->addPeriod($current, $recurring->repeat_freq, intval($recurring->skip));
-
- }
-
- }
- /*
- * Get some colors going.
- */
- $unPaidColours = $toolkit->colorRange('AA4643', 'FFFFFF', count($unpaid) == 0 ? 1 : count($unpaid));
- $paidColours = $toolkit->colorRange('4572A7', 'FFFFFF', count($paid) == 0 ? 1 : count($paid));
-
- /*
- * The chart serie:
- */
- $serie = [
- 'type' => 'pie',
- 'name' => 'Amount',
- 'data' => []
- ];
-
- /*
- * Loop paid and unpaid to make two haves for a pie chart.
- */
- /** @var TransactionJournal $entry */
- foreach ($paid as $index => $entry) {
- $transactions = $entry->transactions()->get();
- $amount = max(floatval($transactions[0]->amount), floatval($transactions[1]->amount));
- $serie['data'][] = [
- 'name' => 'Already paid "'.$entry->description.'"',
- 'y' => $amount,
- 'url' => route('transactions.show',$entry->id),
- 'objType' => 'paid',
- 'color' => $paidColours[$index]
- ];
- }
-
-
- /** @var RecurringTransaction $entry */
- foreach ($unpaid as $index => $entry) {
- $amount = (floatval($entry->amount_max) + floatval($entry->amount_min)) / 2;
- $serie['data'][] = [
- 'name' => 'Still due: '.$entry->name,
- 'y' => $amount,
- 'url' => route('recurring.show',$entry->id),
- 'objType' => 'unpaid',
- 'color' => $unPaidColours[$index]
- ];
- }
-
- return Response::json([$serie]);
-
- }
-}
\ No newline at end of file
diff --git a/app/controllers/HomeController.php b/app/controllers/HomeController.php
index ffd33b86cd..814436a793 100644
--- a/app/controllers/HomeController.php
+++ b/app/controllers/HomeController.php
@@ -1,7 +1,5 @@
_accounts = $accounts;
$this->_preferences = $preferences;
- $this->_journal = $journal;
}
public function jobDev()
@@ -85,12 +78,19 @@ class HomeController extends BaseController
*/
public function index()
{
- Event::fire('limits.check');
- Event::fire('piggybanks.check');
- Event::fire('recurring.check');
+// Event::fire('limits.check');
+// Event::fire('piggybanks.check');
+// Event::fire('recurring.check');
// count, maybe Firefly needs some introducing text to show:
- $count = $this->_accounts->count();
+ /** @var \FireflyIII\Database\Account $acct */
+ $acct = App::make('FireflyIII\Database\Account');
+
+ /** @var \FireflyIII\Database\TransactionJournal $jrnls */
+ $jrnls = App::make('FireflyIII\Database\TransactionJournal');
+
+ $count = $acct->countAssetAccounts();
+
$start = Session::get('start');
$end = Session::get('end');
@@ -98,14 +98,14 @@ class HomeController extends BaseController
// get the preference for the home accounts to show:
$frontpage = $this->_preferences->get('frontpageAccounts', []);
if ($frontpage->data == []) {
- $accounts = $this->_accounts->getActiveDefault();
+ $accounts = $acct->getAssetAccounts();
} else {
- $accounts = $this->_accounts->getByIds($frontpage->data);
+ $accounts = $acct->getByIds($frontpage->data);
}
$transactions = [];
foreach ($accounts as $account) {
- $set = $this->_journal->getByAccountInDateRange($account, 10, $start, $end);
+ $set = $jrnls->getInDateRangeAccount($account, 10, $start, $end);
if (count($set) > 0) {
$transactions[] = [$set, $account];
}
@@ -115,59 +115,4 @@ class HomeController extends BaseController
return View::make('index')->with('count', $count)->with('transactions', $transactions)->with('title', 'Firefly')
->with('subTitle', 'What\'s playing?')->with('mainTitleIcon', 'fa-fire');
}
-
- public function cleanup()
- {
- /** @var \FireflyIII\Database\TransactionJournal $jrnls */
- $jrnls = App::make('FireflyIII\Database\TransactionJournal');
-
- /** @var \FireflyIII\Database\Account $acct */
- $acct = \App::make('FireflyIII\Database\Account');
-
- /** @var \FireflyIII\Database\AccountType $acctType */
- $acctType = \App::make('FireflyIII\Database\AccountType');
- $rightAcctType = $acctType->findByWhat('revenue');
-
- $all = $jrnls->get();
-
- /** @var \TransactionJournal $entry */
- foreach ($all as $entry) {
- $wrongFromType = false;
- $wrongToType = false;
- $transactions = $entry->transactions;
- if (count($transactions) == 2) {
- switch ($entry->transactionType->type) {
- case 'Deposit':
- /** @var \Transaction $transaction */
- foreach ($transactions as $transaction) {
- if (floatval($transaction->amount) < 0) {
- $accountType = $transaction->account->accountType;
- if ($accountType->type == 'Beneficiary account') {
- // should be a Revenue account!
- $name = $transaction->account->name;
- /** @var \Account $account */
- $account = \Auth::user()->accounts()->where('name', $name)->where('account_type_id', $rightAcctType->id)->first();
- if (!$account) {
- $new = [
- 'name' => $name,
- 'what' => 'revenue'
- ];
- $account = $acct->store($new);
- }
- $transaction->account()->associate($account);
- $transaction->save();
- }
-
- echo 'Paid by: ' . $transaction->account->name . ' (' . $transaction->account->accountType->type . ')
';
- }
- }
- break;
- }
-
-
- }
- }
-
-
- }
}
\ No newline at end of file
diff --git a/app/controllers/JsonController.php b/app/controllers/JsonController.php
deleted file mode 100644
index 671e771b95..0000000000
--- a/app/controllers/JsonController.php
+++ /dev/null
@@ -1,186 +0,0 @@
-helper = $helper;
-
-
- }
-
- /**
- * Returns a list of categories.
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function categories()
- {
- /** @var \Firefly\Storage\Category\EloquentCategoryRepository $categories */
- $categories = App::make('Firefly\Storage\Category\CategoryRepositoryInterface');
- $list = $categories->get();
- $return = [];
- foreach ($list as $entry) {
- $return[] = $entry->name;
- }
-
- return Response::json($return);
-
-
- }
-
- /**
- * Returns a JSON list of all beneficiaries.
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function expenseAccounts()
- {
- /** @var \Firefly\Storage\Account\EloquentAccountRepository $accounts */
- $accounts = App::make('Firefly\Storage\Account\AccountRepositoryInterface');
- $list = $accounts->getOfTypes(['Expense account', 'Beneficiary account']);
- $return = [];
- foreach ($list as $entry) {
- $return[] = $entry->name;
- }
-
- return Response::json($return);
-
- }
-
- /**
- * Returns a list of transactions, expenses only, using the given parameters.
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function expenses()
- {
-
- /*
- * Gets most parameters from the Input::all() array:
- */
- $parameters = $this->helper->dataTableParameters();
-
- /*
- * Add some more parameters to fine tune the query:
- */
- $parameters['transactionTypes'] = ['Withdrawal'];
- $parameters['amount'] = 'negative';
-
- /*
- * Get the query:
- */
- $query = $this->helper->journalQuery($parameters);
-
- /*
- * Build result set:
- */
- $resultSet = $this->helper->journalDataset($parameters, $query);
-
-
- /*
- * Build return data:
- */
- return Response::json($resultSet);
- }
-
- /**
- *
- */
- public function recurringjournals(RecurringTransaction $recurringTransaction)
- {
- $parameters = $this->helper->dataTableParameters();
- $parameters['transactionTypes'] = ['Withdrawal'];
- $parameters['amount'] = 'negative';
-
- $query = $this->helper->journalQuery($parameters);
-
- $query->where('recurring_transaction_id', $recurringTransaction->id);
- $resultSet = $this->helper->journalDataset($parameters, $query);
-
-
- /*
- * Build return data:
- */
- return Response::json($resultSet);
- }
-
- public function recurring()
- {
- $parameters = $this->helper->dataTableParameters();
- $query = $this->helper->recurringTransactionsQuery($parameters);
- $resultSet = $this->helper->recurringTransactionsDataset($parameters, $query);
- return Response::json($resultSet);
- }
-
- /**
- * @return \Illuminate\Http\JsonResponse|string
- */
- public function revenue()
- {
- $parameters = $this->helper->dataTableParameters();
- $parameters['transactionTypes'] = ['Deposit'];
- $parameters['amount'] = 'positive';
-
- $query = $this->helper->journalQuery($parameters);
- $resultSet = $this->helper->journalDataset($parameters, $query);
-
-
- /*
- * Build return data:
- */
- return Response::json($resultSet);
- }
-
- /**
- * Returns a JSON list of all revenue accounts.
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function revenueAccounts()
- {
- /** @var \Firefly\Storage\Account\EloquentAccountRepository $accounts */
- $accounts = App::make('Firefly\Storage\Account\AccountRepositoryInterface');
- $list = $accounts->getOfTypes(['Revenue account']);
- $return = [];
- foreach ($list as $entry) {
- $return[] = $entry->name;
- }
-
- return Response::json($return);
-
- }
-
- /**
- * Returns a list of all transfers.
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function transfers()
- {
- $parameters = $this->helper->dataTableParameters();
- $parameters['transactionTypes'] = ['Transfer'];
- $parameters['amount'] = 'positive';
-
- $query = $this->helper->journalQuery($parameters);
- $resultSet = $this->helper->journalDataset($parameters, $query);
-
-
- /*
- * Build return data:
- */
- return Response::json($resultSet);
- }
-}
\ No newline at end of file
diff --git a/app/controllers/LimitController.php b/app/controllers/LimitController.php
deleted file mode 100644
index f76345a5cf..0000000000
--- a/app/controllers/LimitController.php
+++ /dev/null
@@ -1,162 +0,0 @@
-_budgets = $budgets;
- $this->_limits = $limits;
-
- View::share('title','Envelopes');
- View::share('mainTitleIcon', 'fa-tasks');
- }
-
- /**
- * @param Budget $budget
- *
- * @return $this
- */
- public function create(\Budget $budget = null)
- {
- $periods = \Config::get('firefly.periods_to_text');
- $prefilled = [
- 'startdate' => \Input::get('startdate') ? : date('Y-m-d'),
- 'repeat_freq' => \Input::get('repeat_freq') ? : 'monthly',
- 'budget_id' => $budget ? $budget->id : null
- ];
-
- /** @var \Firefly\Helper\Toolkit\Toolkit $toolkit */
- $toolkit = App::make('Firefly\Helper\Toolkit\Toolkit');
- $budgets = $toolkit->makeSelectList($this->_budgets->get());
-
- return View::make('limits.create')->with('budgets', $budgets)->with(
- 'periods', $periods
- )->with('prefilled', $prefilled)->with('subTitle','New envelope');
- }
-
- /**
- * @param Limit $limit
- *
- * @return $this
- */
- public function delete(\Limit $limit)
- {
- return View::make('limits.delete')->with('limit', $limit)->with('subTitle','Delete envelope');
- }
-
- /**
- * @param Limit $limit
- *
- * @return \Illuminate\Http\RedirectResponse
- */
- public function destroy(\Limit $limit)
- {
- Event::fire('limits.destroy', [$limit]); // before
- $success = $this->_limits->destroy($limit);
-
- if ($success) {
- Session::flash('success', 'The envelope was deleted.');
- } else {
- Session::flash('error', 'Could not delete the envelope. Check the logs to be sure.');
- }
- if (Input::get('from') == 'date') {
- return Redirect::route('budgets.index');
- } else {
- return Redirect::route('budgets.index.budget');
- }
- }
-
- /**
- * @param Limit $limit
- *
- * @return $this
- */
- public function edit(Limit $limit)
- {
- /** @var \Firefly\Helper\Toolkit\Toolkit $toolkit */
- $toolkit = App::make('Firefly\Helper\Toolkit\Toolkit');
-
- $budgets = $toolkit->makeSelectList($this->_budgets->get());
- $periods = \Config::get('firefly.periods_to_text');
-
- return View::make('limits.edit')->with('limit', $limit)->with('budgets', $budgets)->with(
- 'periods', $periods
- )->with('subTitle','Edit envelope');
- }
-
- /**
- * @param Budget $budget
- *
- * @return $this|\Illuminate\Http\RedirectResponse
- */
- public function store(Budget $budget = null)
- {
-
- // find a limit with these properties, as Firefly might already have one:
- $limit = $this->_limits->store(Input::all());
- if ($limit->validate()) {
- Session::flash('success', 'Envelope created!');
- Event::fire('limits.store', [$limit]);
- if (Input::get('from') == 'date') {
- return Redirect::route('budgets.index');
- } else {
- return Redirect::route('budgets.index.budget');
- }
- } else {
- Session::flash('error', 'Could not save new envelope.');
- $budgetId = $budget ? $budget->id : null;
- $parameters = [$budgetId, 'from' => Input::get('from')];
-
- return Redirect::route('budgets.limits.create', $parameters)->withInput()
- ->withErrors($limit->errors());
- }
- }
-
- /**
- * @param Limit $limit
- *
- * @return $this|\Illuminate\Http\RedirectResponse
- */
- public function update(\Limit $limit)
- {
-
-
- $limit = $this->_limits->update($limit, Input::all());
-
- if ($limit->validate()) {
- Event::fire('limits.update', [$limit]);
- Session::flash('success', 'Limit saved!');
- if (Input::get('from') == 'date') {
- return Redirect::route('budgets.index');
- } else {
- return Redirect::route('budgets.index.budget');
- }
-
-
- } else {
- Session::flash('error', 'Could not save new limit: ' . $limit->errors()->first());
-
- return Redirect::route('budgets.limits.edit', [$limit->id, 'from' => Input::get('from')])->withInput()
- ->withErrors($limit->errors());
- }
-
- }
-
-
-}
\ No newline at end of file
diff --git a/app/controllers/MigrateController.php b/app/controllers/MigrateController.php
deleted file mode 100644
index a9bd16c200..0000000000
--- a/app/controllers/MigrateController.php
+++ /dev/null
@@ -1,52 +0,0 @@
-with('index', 'Migration')->with('title','Migrate')->
- with('subTitle','From Firefly II to Firefly III');
- }
-
- /**
- *
- */
- public function upload()
- {
- if (Input::hasFile('file') && Input::file('file')->isValid()) {
- $path = storage_path();
- $fileName = 'firefly-iii-import-' . date('Y-m-d-H-i') . '.json';
- $fullName = $path . DIRECTORY_SEPARATOR . $fileName;
- if (Input::file('file')->move($path, $fileName)) {
- // so now Firefly pushes something in a queue and does something with it! Yay!
- \Log::debug('Pushed a job to start the import.');
- Queue::push('Firefly\Queue\Import@start', ['file' => $fullName, 'user' => \Auth::user()->id]);
- if (Config::get('queue.default') == 'sync') {
- Session::flash('success', 'Your data has been imported!');
- } else {
- Session::flash(
- 'success',
- 'The import job has been queued. Please be patient. Data will appear slowly. Please be patient.'
- );
- }
-
- return Redirect::route('index');
- }
- Session::flash('error', 'Could not save file to storage.');
- return Redirect::route('migrate.index');
-
- } else {
- Session::flash('error', 'Please upload a file.');
- return Redirect::route('migrate.index');
- }
-
- }
-
-}
\ No newline at end of file
diff --git a/app/filters.php b/app/filters.php
index 5b4cf13296..835ecba055 100644
--- a/app/filters.php
+++ b/app/filters.php
@@ -6,11 +6,10 @@ App::before(
function ($request) {
if (Auth::check()) {
- /** @var \Firefly\Helper\Toolkit\ToolkitInterface $toolkit */
- $toolkit = App::make('Firefly\Helper\Toolkit\ToolkitInterface');
- $toolkit->getDateRange();
- $toolkit->checkImportJobs();
- Event::fire('recurring.verify');
+ /** @var \FireflyIII\Shared\Toolkit\Filter $toolkit */
+ $filter = App::make('FireflyIII\Shared\Toolkit\Filter');
+ $filter->setSessionDateRange();
+ //Event::fire('recurring.verify');
}
}
diff --git a/app/lib/Firefly/Helper/Toolkit/Toolkit.php b/app/lib/Firefly/Helper/Toolkit/Toolkit.php
index 51941a2508..2e9dbeb725 100644
--- a/app/lib/Firefly/Helper/Toolkit/Toolkit.php
+++ b/app/lib/Firefly/Helper/Toolkit/Toolkit.php
@@ -107,9 +107,6 @@ class Toolkit implements ToolkitInterface
}
}
- /**
- * @return mixed
- */
protected function _getRange()
{
if (!is_null(\Session::get('range'))) {
diff --git a/app/lib/FireflyIII/Database/TransactionJournal.php b/app/lib/FireflyIII/Database/TransactionJournal.php
index 3355f458a8..8f26645ade 100644
--- a/app/lib/FireflyIII/Database/TransactionJournal.php
+++ b/app/lib/FireflyIII/Database/TransactionJournal.php
@@ -85,6 +85,34 @@ class TransactionJournal implements TransactionJournalInterface, CUD, CommonData
return $this->getuser()->transactionjournals()->withRelevantData()->before($end)->after($start)->get();
}
+ /**
+ * @param \Account $account
+ * @param int $count
+ * @param Carbon $start
+ * @param Carbon $end
+ *
+ * @return Collection
+ */
+ public function getInDateRangeAccount(\Account $account, $count = 20, Carbon $start, Carbon $end)
+ {
+
+ $accountID = $account->id;
+ $query = $this->_user
+ ->transactionjournals()
+ ->with(['transactions', 'transactioncurrency', 'transactiontype'])
+ ->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
+ ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id')
+ ->where('accounts.id', $accountID)
+ ->where('date', '>=', $start->format('Y-m-d'))
+ ->where('date', '<=', $end->format('Y-m-d'))
+ ->orderBy('transaction_journals.date', 'DESC')
+ ->orderBy('transaction_journals.id', 'DESC')
+ ->take($count)
+ ->get(['transaction_journals.*']);
+
+ return $query;
+ }
+
/**
* @return TransactionJournal
*/
diff --git a/app/lib/FireflyIII/FF3ServiceProvider.php b/app/lib/FireflyIII/FF3ServiceProvider.php
new file mode 100644
index 0000000000..2f8206f937
--- /dev/null
+++ b/app/lib/FireflyIII/FF3ServiceProvider.php
@@ -0,0 +1,28 @@
+app->bind('Interface', 'Class');
+
+ // preferences:
+ $this->app->bind('FireflyIII\Shared\Preferences\PreferencesInterface', 'FireflyIII\Shared\Preferences\Preferences');
+
+ }
+
+}
\ No newline at end of file
diff --git a/app/lib/FireflyIII/Shared/Toolkit/Filter.php b/app/lib/FireflyIII/Shared/Toolkit/Filter.php
new file mode 100644
index 0000000000..a927d64408
--- /dev/null
+++ b/app/lib/FireflyIII/Shared/Toolkit/Filter.php
@@ -0,0 +1,296 @@
+get('viewRange', '1M');
+
+ // default range:
+ $range = $viewRange->data;
+ \Session::put('range', $range);
+ }
+ return $range;
+
+ }
+
+ /**
+ * Save Session::get('start') and Session::get('end') for other methods to use.
+ */
+ public function setSessionDateRange()
+ {
+ /*
+ * Get the current range.
+ */
+ $range = $this->setSessionRangeValue();
+ $start = \Session::has('start') ? \Session::get('start') : new Carbon;
+
+ /*
+ * Force start date to at the start of the $range.
+ * Ie. the start of the week, month, year. This also to protect against nefarious users
+ * who change their session data (I just wanted to use the word "nefarious").
+ */
+ $start = $this->updateStartDate($range, $start);
+
+ /*
+ * Force end date to at the END of the $range. Always based on $start.
+ * Ie. the END of the week, month, year.
+ */
+ $end = $this->updateEndDate($range, $start);
+ #\Log::debug('After update, session end is : ' . $end->format('Y-m-d'));
+
+ /*
+ * get the name of the month, depending on the range. Purely for astetics
+ */
+ $period = $this->periodName($range, $start);
+
+ /*
+ * Get the date for the previous and next period.
+ * Ie. next week, next month, etc.
+ */
+ $prev = $this->previous($range, clone $start);
+ $next = $this->next($range, clone $start);
+
+ /*
+ * Save everything in the session:
+ */
+ \Session::put('start', $start);
+ \Session::put('end', $end);
+ \Session::put('range', $range);
+ \Session::put('period', $period);
+ \Session::put('prev', $this->periodName($range, $prev));
+ \Session::put('next', $this->periodName($range, $next));
+ return null;
+
+ }
+
+ /**
+ * @param $range
+ * @param Carbon $start
+ *
+ * @return Carbon
+ * @throws FireflyException
+ */
+ protected function updateStartDate($range, Carbon $start)
+ {
+ switch ($range) {
+ default:
+ throw new FireflyException('updateStartDate cannot handle $range ' . $range);
+ break;
+ case '1D':
+ $start->startOfDay();
+ break;
+ case '1W':
+ $start->startOfWeek();
+ break;
+ case '1M':
+ $start->startOfMonth();
+ break;
+ case '3M':
+ $start->firstOfQuarter();
+ break;
+ case '6M':
+ if (intval($start->format('m')) >= 7) {
+ $start->startOfYear()->addMonths(6);
+ } else {
+ $start->startOfYear();
+ }
+ break;
+ case '1Y':
+ $start->startOfYear();
+ break;
+ }
+
+ return $start;
+
+ }
+
+ /**
+ * @param $range
+ * @param Carbon $start
+ *
+ * @return Carbon
+ * @throws FireflyException
+ */
+ protected function updateEndDate($range, Carbon $start)
+ {
+ $end = clone $start;
+ switch ($range) {
+ default:
+ throw new FireflyException('updateEndDate cannot handle $range ' . $range);
+ break;
+ case '1D':
+ $end->endOfDay();
+ break;
+ case '1W':
+ $end->endOfWeek();
+ break;
+ case '1M':
+ $end->endOfMonth();
+ break;
+ case '3M':
+ $end->lastOfQuarter();
+ break;
+ case '6M':
+ if (intval($start->format('m')) >= 7) {
+ $end->endOfYear();
+ } else {
+ $end->startOfYear()->addMonths(6);
+ }
+ break;
+ case '1Y':
+ $end->endOfYear();
+ break;
+
+ }
+
+ return $end;
+ }
+
+ /**
+ * @param $range
+ * @param Carbon $date
+ *
+ * @return string
+ * @throws FireflyException
+ */
+ protected function periodName($range, Carbon $date)
+ {
+ switch ($range) {
+ default:
+ throw new FireflyException('No _periodName() for range "' . $range . '"');
+ break;
+ case '1D':
+ return $date->format('jS F Y');
+ break;
+ case '1W':
+ return 'week ' . $date->format('W, Y');
+ break;
+ case '1M':
+ return $date->format('F Y');
+ break;
+ case '3M':
+ $month = intval($date->format('m'));
+ return 'Q' . ceil(($month / 12) * 4) . ' ' . $date->format('Y');
+ break;
+ case '6M':
+ $month = intval($date->format('m'));
+ $half = ceil(($month / 12) * 2);
+ $halfName = $half == 1 ? 'first' : 'second';
+ return $halfName . ' half of ' . $date->format('d-m-Y');
+ break;
+ case '1Y':
+ return $date->format('Y');
+ break;
+
+
+ }
+ }
+
+ /**
+ * @param $range
+ * @param Carbon $date
+ *
+ * @return Carbon
+ * @throws FireflyException
+ */
+ protected function previous($range, Carbon $date)
+ {
+ switch ($range) {
+ default:
+ throw new FireflyException('Cannot do _previous() on ' . $range);
+ break;
+ case '1D':
+ $date->startOfDay()->subDay();
+ break;
+ case '1W':
+ $date->startOfWeek()->subWeek();
+ break;
+ case '1M':
+ $date->startOfMonth()->subMonth();
+ break;
+ case '3M':
+ $date->firstOfQuarter()->subMonths(3)->firstOfQuarter();
+ break;
+ case '6M':
+ $month = intval($date->format('m'));
+ if ($month <= 6) {
+ $date->startOfYear()->subMonths(6);
+ } else {
+ $date->startOfYear();
+ }
+ break;
+ case '1Y':
+ $date->startOfYear()->subYear();
+ break;
+
+ }
+ return $date;
+ }
+
+ /**
+ * @param $range
+ * @param Carbon $date
+ *
+ * @return Carbon
+ * @throws FireflyException
+ */
+ protected function next($range, Carbon $date)
+ {
+ switch ($range) {
+ case '1D':
+ $date->endOfDay()->addDay();
+ break;
+ case '1W':
+ $date->endOfWeek()->addDay()->startOfWeek();
+ break;
+ case '1M':
+ $date->endOfMonth()->addDay()->startOfMonth();
+ break;
+ case '3M':
+ $date->lastOfQuarter()->addDay();
+ break;
+ case '6M':
+ if (intval($date->format('m')) >= 7) {
+ $date->startOfYear()->addYear();
+ } else {
+ $date->startOfYear()->addMonths(6);
+ }
+ break;
+ case '1Y':
+ $date->startOfYear()->addYear();
+ break;
+ default:
+ throw new FireflyException('Cannot do _next() on ' . $range);
+ break;
+ }
+ return $date;
+ }
+}
\ No newline at end of file
diff --git a/app/routes.php b/app/routes.php
index d0c193ba21..b846454ab1 100644
--- a/app/routes.php
+++ b/app/routes.php
@@ -1,8 +1,5 @@
leftJoin('components', 'components.id', '=', 'limits.component_id')->where('components.class', 'Budget')->where(
- 'components.user_id', Auth::user()->id
- )->first(['limits.*']);
- }
- return null;
- }
-);
-
Route::bind(
'limitrepetition', function ($value, $route) {
if (Auth::check()) {
@@ -126,22 +111,18 @@ Route::bind(
);
-// a development route:
-Route::get('/dev', ['uses' => 'HomeController@jobDev']);
-
// protected routes:
Route::group(
['before' => 'auth'], function () {
- // some date routes:
+ // some date routes used for (well duh) date-based navigation.
Route::get('/prev', ['uses' => 'HomeController@sessionPrev', 'as' => 'sessionPrev']);
Route::get('/next', ['uses' => 'HomeController@sessionNext', 'as' => 'sessionNext']);
Route::get('/jump/{range}', ['uses' => 'HomeController@rangeJump', 'as' => 'rangeJump']);
Route::get('/cleanup', ['uses' => 'HomeController@cleanup', 'as' => 'cleanup']);
// account controller:
- Route::get('/accounts/json/{what}', ['uses' => 'AccountController@json', 'as' => 'accounts.json'])->where('what', 'revenue|asset|expense');
Route::get('/accounts/{what}', ['uses' => 'AccountController@index', 'as' => 'accounts.index'])->where('what', 'revenue|asset|expense');
Route::get('/accounts/create/{what}', ['uses' => 'AccountController@create', 'as' => 'accounts.create'])->where('what', 'revenue|asset|expense');
Route::get('/accounts/edit/{account}', ['uses' => 'AccountController@edit', 'as' => 'accounts.edit']);
@@ -150,23 +131,18 @@ Route::group(
// budget controller:
Route::get('/budgets', ['uses' => 'BudgetController@index', 'as' => 'budgets.index']);
- Route::get('/budgets/income', ['uses' => 'BudgetController@updateIncome', 'as' => 'budgets.income']);
- Route::get('/budgets/show/{budget}/{limitrepetition?}', ['uses' => 'BudgetController@show', 'as' => 'budgets.show']);
-
- #Route::get('/budgets/date', ['uses' => 'BudgetController@indexByDate', 'as' => 'budgets.index.date']);
- #Route::get('/budgets/budget', ['uses' => 'BudgetController@indexByBudget', 'as' => 'budgets.index.budget']);
+ Route::get('/budgets/income', ['uses' => 'BudgetController@updateIncome', 'as' => 'budgets.income']); # extra.
Route::get('/budgets/create', ['uses' => 'BudgetController@create', 'as' => 'budgets.create']);
- #Route::get('/budgets/nobudget/{period}', ['uses' => 'BudgetController@nobudget', 'as' => 'budgets.nobudget']);
-
Route::get('/budgets/edit/{budget}', ['uses' => 'BudgetController@edit', 'as' => 'budgets.edit']);
Route::get('/budgets/delete/{budget}', ['uses' => 'BudgetController@delete', 'as' => 'budgets.delete']);
+ Route::get('/budgets/show/{budget}/{limitrepetition?}', ['uses' => 'BudgetController@show', 'as' => 'budgets.show']);
// category controller:
Route::get('/categories', ['uses' => 'CategoryController@index', 'as' => 'categories.index']);
Route::get('/categories/create', ['uses' => 'CategoryController@create', 'as' => 'categories.create']);
- Route::get('/categories/show/{category}', ['uses' => 'CategoryController@show', 'as' => 'categories.show']);
Route::get('/categories/edit/{category}', ['uses' => 'CategoryController@edit', 'as' => 'categories.edit']);
Route::get('/categories/delete/{category}', ['uses' => 'CategoryController@delete', 'as' => 'categories.delete']);
+ Route::get('/categories/show/{category}', ['uses' => 'CategoryController@show', 'as' => 'categories.show']);
// google chart controller
Route::get('/chart/home/account', ['uses' => 'GoogleChartController@allAccountsBalanceChart']);
@@ -180,7 +156,7 @@ Route::group(
Route::get('/chart/reports/income-expenses-sum/{year}', ['uses' => 'GoogleChartController@yearInExpSum']);
Route::get('/chart/reports/budgets/{year}', ['uses' => 'GoogleChartController@budgetsReportChart']);
- // google chart (categories + budgets)
+ // google chart for components (categories + budgets combined)
Route::get('/chart/component/{component}/spending/{year}', ['uses' => 'GoogleChartController@componentsAndSpending']);
// google table controller
@@ -188,57 +164,23 @@ Route::group(
Route::get('/table/accounts/{what}', ['uses' => 'GoogleTableController@accountList']);
Route::get('/table/categories', ['uses' => 'GoogleTableController@categoryList']);
- // google table (categories + budgets)
-
+ // google table for components (categories + budgets)
Route::get('/table/component/{component}/{limitrepetition}/transactions', ['uses' => 'GoogleTableController@transactionsByComponent']);
- Route::get('/chart/home/info/{accountnameA}/{day}/{month}/{year}', ['uses' => 'ChartController@homeAccountInfo', 'as' => 'chart.info']);
- Route::get('/chart/categories/show/{category}', ['uses' => 'ChartController@categoryShowChart', 'as' => 'chart.showcategory']);
-
- // (new charts for budgets)
- Route::get('/chart/budget/{budget}/default', ['uses' => 'ChartController@budgetDefault', 'as' => 'chart.budget.default']);
- Route::get('chart/budget/{budget}/no_envelope', ['uses' => 'ChartController@budgetNoLimits', 'as' => 'chart.budget.nolimit']);
- Route::get('chart/budget/{budget}/session', ['uses' => 'ChartController@budgetSession', 'as' => 'chart.budget.session']);
- Route::get('chart/budget/envelope/{limitrepetition}', ['uses' => 'ChartController@budgetLimit', 'as' => 'chart.budget.limit']);
-
// home controller
Route::get('/', ['uses' => 'HomeController@index', 'as' => 'index']);
- Route::get('/flush', ['uses' => 'HomeController@flush', 'as' => 'flush']);
-
- // JSON controller:
- Route::get('/json/expense-accounts', ['uses' => 'JsonController@expenseAccounts', 'as' => 'json.expense-accounts']);
- Route::get('/json/revenue-accounts', ['uses' => 'JsonController@revenueAccounts', 'as' => 'json.revenue-accounts']);
- Route::get('/json/categories', ['uses' => 'JsonController@categories', 'as' => 'json.categories']);
- Route::get('/json/expenses', ['uses' => 'JsonController@expenses', 'as' => 'json.expenses']);
- Route::get('/json/revenue', ['uses' => 'JsonController@revenue', 'as' => 'json.revenue']);
- Route::get('/json/transfers', ['uses' => 'JsonController@transfers', 'as' => 'json.transfers']);
- Route::get('/json/recurring', ['uses' => 'JsonController@recurring', 'as' => 'json.recurring']);
- Route::get('/json/recurringjournals/{recurring}', ['uses' => 'JsonController@recurringjournals', 'as' => 'json.recurringjournals']);
-
- // limit controller:
- Route::get('/budgets/limits/create/{budget?}', ['uses' => 'LimitController@create', 'as' => 'budgets.limits.create']);
- Route::get('/budgets/limits/delete/{limit}', ['uses' => 'LimitController@delete', 'as' => 'budgets.limits.delete']);
- Route::get('/budgets/limits/edit/{limit}', ['uses' => 'LimitController@edit', 'as' => 'budgets.limits.edit']);
-
- Route::get('/migrate', ['uses' => 'MigrateController@index', 'as' => 'migrate.index']);
+ Route::get('/flush', ['uses' => 'HomeController@flush', 'as' => 'flush']); # even though nothing is cached.
// piggy bank controller
Route::get('/piggybanks', ['uses' => 'PiggybankController@index', 'as' => 'piggybanks.index']);
- Route::get('/piggybanks/add/{piggybank}', ['uses' => 'PiggybankController@add']);
- Route::get('/piggybanks/remove/{piggybank}', ['uses' => 'PiggybankController@remove']);
- Route::get('/piggybanks/edit/{piggybank}', ['uses' => 'PiggybankController@edit', 'as' => 'piggybanks.edit']);
+ Route::get('/piggybanks/add/{piggybank}', ['uses' => 'PiggybankController@add']); # add money
+ Route::get('/piggybanks/remove/{piggybank}', ['uses' => 'PiggybankController@remove']); #remove money
+
Route::get('/piggybanks/create', ['uses' => 'PiggybankController@create', 'as' => 'piggybanks.create']);
+ Route::get('/piggybanks/edit/{piggybank}', ['uses' => 'PiggybankController@edit', 'as' => 'piggybanks.edit']);
Route::get('/piggybanks/delete/{piggybank}', ['uses' => 'PiggybankController@delete', 'as' => 'piggybanks.delete']);
-
-
-// Route::get('/repeated',['uses' => 'PiggybankController@repeated','as' => 'piggybanks.index.repeated']);
-// Route::get('/piggybanks/create/repeated', ['uses' => 'PiggybankController@createRepeated','as' => 'piggybanks.create.repeated']);
-// Route::get('/piggybanks/addMoney/{piggybank}', ['uses' => 'PiggybankController@addMoney','as' => 'piggybanks.amount.add']);
-// Route::get('/piggybanks/removeMoney/{piggybank}', ['uses' => 'PiggybankController@removeMoney','as' => 'piggybanks.amount.remove']);
-// Route::get('/piggybanks/show/{piggybank}', ['uses' => 'PiggybankController@show','as' => 'piggybanks.show']);
-// Route::get('/piggybanks/delete/{piggybank}', ['uses' => 'PiggybankController@delete','as' => 'piggybanks.delete']);
-// Route::post('/piggybanks/updateAmount/{piggybank}',['uses' => 'PiggybankController@updateAmount','as' => 'piggybanks.updateAmount']);
+ Route::get('/piggybanks/show/{piggybank}', ['uses' => 'PiggybankController@show', 'as' => 'piggybanks.show']);
// preferences controller
Route::get('/preferences', ['uses' => 'PreferencesController@index', 'as' => 'preferences']);
@@ -249,11 +191,11 @@ Route::group(
// recurring transactions controller
Route::get('/recurring', ['uses' => 'RecurringController@index', 'as' => 'recurring.index']);
- Route::get('/recurring/show/{recurring}', ['uses' => 'RecurringController@show', 'as' => 'recurring.show']);
- Route::get('/recurring/rescan/{recurring}', ['uses' => 'RecurringController@rescan', 'as' => 'recurring.rescan']);
+ Route::get('/recurring/rescan/{recurring}', ['uses' => 'RecurringController@rescan', 'as' => 'recurring.rescan']); # rescan for matching.
Route::get('/recurring/create', ['uses' => 'RecurringController@create', 'as' => 'recurring.create']);
Route::get('/recurring/edit/{recurring}', ['uses' => 'RecurringController@edit', 'as' => 'recurring.edit']);
Route::get('/recurring/delete/{recurring}', ['uses' => 'RecurringController@delete', 'as' => 'recurring.delete']);
+ Route::get('/recurring/show/{recurring}', ['uses' => 'RecurringController@show', 'as' => 'recurring.show']);
// report controller:
Route::get('/reports', ['uses' => 'ReportController@index', 'as' => 'reports.index']);
@@ -263,25 +205,20 @@ Route::group(
Route::get('/search', ['uses' => 'SearchController@index', 'as' => 'search']);
// transaction controller:
- Route::get('/transactions/create/{what}', ['uses' => 'TransactionController@create', 'as' => 'transactions.create'])->where(
- ['what' => 'withdrawal|deposit|transfer']
+ Route::get('/transactions/{what}', ['uses' => 'TransactionController@index', 'as' => 'transactions.index'])->where(
+ ['what' => 'expenses|revenue|withdrawal|deposit|transfer|transfers']
+ );
+ Route::get('/transactions/create/{what}', ['uses' => 'TransactionController@create', 'as' => 'transactions.create'])->where(
+ ['what' => 'expenses|revenue|withdrawal|deposit|transfer|transfers']
);
- Route::get('/transaction/show/{tj}', ['uses' => 'TransactionController@show', 'as' => 'transactions.show']);
Route::get('/transaction/edit/{tj}', ['uses' => 'TransactionController@edit', 'as' => 'transactions.edit']);
Route::get('/transaction/delete/{tj}', ['uses' => 'TransactionController@delete', 'as' => 'transactions.delete']);
- Route::get('/transactions/index', ['uses' => 'TransactionController@index', 'as' => 'transactions.index']);
- Route::get('/transactions/expenses', ['uses' => 'TransactionController@expenses', 'as' => 'transactions.expenses']);
- Route::get('/transactions/revenue', ['uses' => 'TransactionController@revenue', 'as' => 'transactions.revenue']);
- Route::get('/transactions/transfers', ['uses' => 'TransactionController@transfers', 'as' => 'transactions.transfers']);
-
- Route::get('/transactions/expenses', ['uses' => 'TransactionController@expenses', 'as' => 'transactions.index.withdrawal']);
- Route::get('/transactions/revenue', ['uses' => 'TransactionController@revenue', 'as' => 'transactions.index.deposit']);
- Route::get('/transactions/transfers', ['uses' => 'TransactionController@transfers', 'as' => 'transactions.index.transfer']);
+ Route::get('/transaction/show/{tj}', ['uses' => 'TransactionController@show', 'as' => 'transactions.show']);
// user controller
Route::get('/logout', ['uses' => 'UserController@logout', 'as' => 'logout']);
- Route::post('budgets/amount/{budget}', ['uses' => 'BudgetController@amount']);
+ //Route::post('budgets/amount/{budget}', ['uses' => 'BudgetController@amount']);
}
@@ -297,8 +234,8 @@ Route::group(
// budget controller:
Route::post('/budgets/income', ['uses' => 'BudgetController@postUpdateIncome', 'as' => 'budgets.postIncome']);
- Route::post('/budgets/update/{budget}', ['uses' => 'BudgetController@update', 'as' => 'budgets.update']);
Route::post('/budgets/store', ['uses' => 'BudgetController@store', 'as' => 'budgets.store']);
+ Route::post('/budgets/update/{budget}', ['uses' => 'BudgetController@update', 'as' => 'budgets.update']);
Route::post('/budgets/destroy/{budget}', ['uses' => 'BudgetController@destroy', 'as' => 'budgets.destroy']);
// category controller
@@ -306,22 +243,12 @@ Route::group(
Route::post('/categories/update/{category}', ['uses' => 'CategoryController@update', 'as' => 'categories.update']);
Route::post('/categories/destroy/{category}', ['uses' => 'CategoryController@destroy', 'as' => 'categories.destroy']);
- // limit controller:
- Route::post('/budgets/limits/store/{budget?}', ['uses' => 'LimitController@store', 'as' => 'budgets.limits.store']);
- Route::post('/budgets/limits/destroy/{limit}', ['uses' => 'LimitController@destroy', 'as' => 'budgets.limits.destroy']);
- Route::post('/budgets/limits/update/{limit}', ['uses' => 'LimitController@update', 'as' => 'budgets.limits.update']);
-
- Route::post('/migrate/upload', ['uses' => 'MigrateController@upload', 'as' => 'migrate.upload']);
-
-
// piggy bank controller
Route::post('/piggybanks/store', ['uses' => 'PiggybankController@store', 'as' => 'piggybanks.store']);
- #Route::post('/piggybanks/store/repeated', ['uses' => 'PiggybankController@storeRepeated', 'as' => 'piggybanks.store.repeated']);
Route::post('/piggybanks/update/{piggybank}', ['uses' => 'PiggybankController@update', 'as' => 'piggybanks.update']);
Route::post('/piggybanks/destroy/{piggybank}', ['uses' => 'PiggybankController@destroy', 'as' => 'piggybanks.destroy']);
- #Route::post('/piggybanks/mod/{piggybank}', ['uses' => 'PiggybankController@modMoney', 'as' => 'piggybanks.modMoney']);
- Route::post('/piggybanks/add/{piggybank}', ['uses' => 'PiggybankController@postAdd', 'as' => 'piggybanks.add']);
- Route::post('/piggybanks/remove/{piggybank}', ['uses' => 'PiggybankController@postRemove', 'as' => 'piggybanks.remove']);
+ Route::post('/piggybanks/add/{piggybank}', ['uses' => 'PiggybankController@postAdd', 'as' => 'piggybanks.add']); # add money
+ Route::post('/piggybanks/remove/{piggybank}', ['uses' => 'PiggybankController@postRemove', 'as' => 'piggybanks.remove']); # remove money.
// preferences controller
@@ -337,7 +264,7 @@ Route::group(
// transaction controller:
Route::post('/transactions/store/{what}', ['uses' => 'TransactionController@store', 'as' => 'transactions.store'])->where(
- ['what' => 'withdrawal|deposit|transfer']
+ ['what' => 'expenses|revenue|withdrawal|deposit|transfer|transfers']
);
Route::post('/transaction/update/{tj}', ['uses' => 'TransactionController@update', 'as' => 'transactions.update']);
Route::post('/transaction/destroy/{tj}', ['uses' => 'TransactionController@destroy', 'as' => 'transactions.destroy']);
diff --git a/app/views/partials/menu.blade.php b/app/views/partials/menu.blade.php
index 21a5068f89..b27ec1f4ad 100644
--- a/app/views/partials/menu.blade.php
+++ b/app/views/partials/menu.blade.php
@@ -12,40 +12,6 @@