diff --git a/app/controllers/ReportController.php b/app/controllers/ReportController.php index 9bceec4d4d..c341f971ea 100644 --- a/app/controllers/ReportController.php +++ b/app/controllers/ReportController.php @@ -174,7 +174,11 @@ class ReportController extends BaseController $withdrawals = $journals->filter( function (TransactionJournal $journal) { if ($journal->transactionType->type == 'Withdrawal' && count($journal->budgets) == 0) { - return $journal; + + // count groups related to balance. + if ($journal->transactiongroups()->where('relation', 'balance')->count() == 0) { + return $journal; + } } } ); @@ -184,10 +188,15 @@ class ReportController extends BaseController $deposits = $journals->filter( function (TransactionJournal $journal) { if ($journal->transactionType->type == 'Deposit' && count($journal->budgets) == 0) { - return $journal; + // count groups related to balance. + if ($journal->transactiongroups()->where('relation', 'balance')->count() == 0) { + return $journal; + } } } ); + + /* * Filter transfers (not yet used) */ diff --git a/app/controllers/TransactionController.php b/app/controllers/TransactionController.php index 14f0fbf4a5..44555c2e0a 100644 --- a/app/controllers/TransactionController.php +++ b/app/controllers/TransactionController.php @@ -23,6 +23,37 @@ class TransactionController extends BaseController View::share('mainTitleIcon', 'fa-repeat'); } + public function alreadyRelated(TransactionJournal $journal) + { + + $ids = []; + /** @var TransactionGroup $group */ + foreach ($journal->transactiongroups()->get() as $group) { + /** @var TransactionJournal $jrnl */ + foreach ($group->transactionjournals()->get() as $jrnl) { + if ($jrnl->id != $journal->id) { + $ids[] = $jrnl->id; + } + } + } + $unique = array_unique($ids); + if (count($ids) > 0) { + + /** @var \FireflyIII\Database\TransactionJournal $repository */ + $repository = App::make('FireflyIII\Database\TransactionJournal'); + $set = $repository->getByIds($ids); + $set->each( + function (TransactionJournal $journal) { + $journal->amount = mf($journal->getAmount()); + } + ); + + return Response::json($set->toArray()); + } else { + return (new Collection)->toArray(); + } + } + /** * Shows the view helping the user to create a new transaction journal. * @@ -122,6 +153,33 @@ class TransactionController extends BaseController } } + public function doRelate() + { + $id = intval(Input::get('id')); + $sister = intval(Input::get('relateTo')); + + /** @var \FireflyIII\Database\TransactionJournal $repository */ + $repository = App::make('FireflyIII\Database\TransactionJournal'); + + $journal = $repository->find($id); + $sis = $repository->find($sister); + + if ($journal && $sis) { + $group = new TransactionGroup; + $group->relation = 'balance'; + $group->user_id = $repository->getUser()->id; + $group->save(); + $group->transactionjournals()->save($journal); + $group->transactionjournals()->save($sis); + + return Response::json(true); + } + + return Response::json(false); + + + } + /** * Shows the view to edit a transaction. * @@ -308,6 +366,24 @@ class TransactionController extends BaseController return View::make('transactions.relate', compact('journal', 'members')); } + public function relatedSearch(TransactionJournal $journal) + { + $search = e(trim(Input::get('searchValue'))); + + /** @var \FireflyIII\Database\TransactionJournal $repository */ + $repository = App::make('FireflyIII\Database\TransactionJournal'); + + $result = $repository->searchRelated($search, $journal); + $result->each( + function (TransactionJournal $j) { + $j->amount = mf($j->getAmount()); + } + ); + + return Response::json($result->toArray()); + // build custom query. TODO move + } + /** * @param TransactionJournal $journal * @@ -329,10 +405,10 @@ class TransactionController extends BaseController ); $members = new Collection; /** @var TransactionGroup $group */ - foreach($journal->transactiongroups()->get() as $group) { + foreach ($journal->transactiongroups()->get() as $group) { /** @var TransactionJournal $jrnl */ - foreach($group->transactionjournals()->get() as $jrnl) { - if($jrnl->id != $journal->id) { + foreach ($group->transactionjournals()->get() as $jrnl) { + if ($jrnl->id != $journal->id) { $members->push($jrnl); } } diff --git a/app/lib/FireflyIII/Database/TransactionJournal.php b/app/lib/FireflyIII/Database/TransactionJournal.php index f772e56ee9..e74ca8163d 100644 --- a/app/lib/FireflyIII/Database/TransactionJournal.php +++ b/app/lib/FireflyIII/Database/TransactionJournal.php @@ -473,7 +473,8 @@ class TransactionJournal implements TransactionJournalInterface, CUD, CommonData */ public function get() { - return $this->getUser()->transactionjournals()->with(['TransactionType','transactions','transactions.account','transactions.account.accountType'])->get(); + return $this->getUser()->transactionjournals()->with(['TransactionType', 'transactions', 'transactions.account', 'transactions.account.accountType']) + ->get(); } /** @@ -549,7 +550,7 @@ class TransactionJournal implements TransactionJournalInterface, CUD, CommonData public function getDepositsPaginated($limit = 50) { - $offset = intval(\Input::get('page')) > 0 ? (intval(\Input::get('page'))-1) * $limit : 0; + $offset = intval(\Input::get('page')) > 0 ? (intval(\Input::get('page')) - 1) * $limit : 0; $set = $this->getUser()->transactionJournals()->transactionTypes(['Deposit'])->withRelevantData()->take($limit)->offset($offset)->orderBy( 'date', 'DESC' @@ -588,7 +589,7 @@ class TransactionJournal implements TransactionJournalInterface, CUD, CommonData public function getTransfersPaginated($limit = 50) { - $offset = intval(\Input::get('page')) > 0 ? (intval(\Input::get('page'))-1) * $limit : 0; + $offset = intval(\Input::get('page')) > 0 ? (intval(\Input::get('page')) - 1) * $limit : 0; $set = $this->getUser()->transactionJournals()->transactionTypes(['Transfer'])->withRelevantData()->take($limit)->offset($offset)->orderBy( 'date', 'DESC' @@ -604,7 +605,7 @@ class TransactionJournal implements TransactionJournalInterface, CUD, CommonData public function getWithdrawalsPaginated($limit = 50) { - $offset = intval(\Input::get('page')) > 0 ? (intval(\Input::get('page'))-1) * $limit : 0; + $offset = intval(\Input::get('page')) > 0 ? (intval(\Input::get('page')) - 1) * $limit : 0; $set = $this->getUser()->transactionJournals()->transactionTypes(['Withdrawal'])->withRelevantData()->take($limit)->offset($offset)->orderBy( 'date', 'DESC' @@ -617,4 +618,37 @@ class TransactionJournal implements TransactionJournalInterface, CUD, CommonData return \Paginator::make($items, $count, $limit); } + + /** + * @param string $query + * @param \TransactionJournal $journal + * + * @return Collection + */ + public function searchRelated($query, \TransactionJournal $journal) + { + $start = clone $journal->date; + $end = clone $journal->date; + $start->startOfMonth(); + $end->endOfMonth(); + + // get already related transactions: + $exclude = [$journal->id]; + foreach ($journal->transactiongroups()->get() as $group) { + foreach ($group->transactionjournals() as $jrnl) { + $exclude[] = $jrnl->id; + } + } + $exclude = array_unique($exclude); + + $query = $this->getUser()->transactionjournals() + ->withRelevantData() + ->before($end) + ->after($start) + ->whereNotIn('id', $exclude) + ->where('description', 'LIKE', '%' . $query . '%') + ->get(); + + return $query; + } } \ No newline at end of file diff --git a/app/routes.php b/app/routes.php index c0b0db1226..344267aa96 100644 --- a/app/routes.php +++ b/app/routes.php @@ -256,6 +256,9 @@ Route::group( Route::get('/transaction/delete/{tj}', ['uses' => 'TransactionController@delete', 'as' => 'transactions.delete']); Route::get('/transaction/show/{tj}', ['uses' => 'TransactionController@show', 'as' => 'transactions.show']); Route::get('/transaction/relate/{tj}', ['uses' => 'TransactionController@relate', 'as' => 'transactions.relate']); + Route::post('/transactions/relatedSearch/{tj}', ['uses' => 'TransactionController@relatedSearch', 'as' => 'transactions.relatedSearch']); + Route::post('/transactions/alreadyRelated/{tj}', ['uses' => 'TransactionController@alreadyRelated', 'as' => 'transactions.alreadyRelated']); + Route::post('/transactions/doRelate', ['uses' => 'TransactionController@doRelate', 'as' => 'transactions.doRelate']); // user controller Route::get('/logout', ['uses' => 'UserController@logout', 'as' => 'logout']); diff --git a/app/views/index.blade.php b/app/views/index.blade.php index 7ec4ff6bea..587f3a6f34 100644 --- a/app/views/index.blade.php +++ b/app/views/index.blade.php @@ -110,6 +110,7 @@ @endif + @stop @section('scripts') diff --git a/app/views/layouts/default.blade.php b/app/views/layouts/default.blade.php index 2df8600ca6..e215c4b029 100644 --- a/app/views/layouts/default.blade.php +++ b/app/views/layouts/default.blade.php @@ -79,6 +79,11 @@ + +
Spent {{mf($journal->getAmount())}}
No counter transaction!
- Add counter transaction + Add counter transaction
@@ -48,5 +48,6 @@ @endif @stop @section('scripts') - +{{HTML::script('assets/javascript/firefly/reports.js')}} +{{HTML::script('assets/javascript/firefly/related-manager.js')}} @stop \ No newline at end of file diff --git a/app/views/transactions/relate.blade.php b/app/views/transactions/relate.blade.php index c83380916f..d3cb6d62d3 100644 --- a/app/views/transactions/relate.blade.php +++ b/app/views/transactions/relate.blade.php @@ -2,14 +2,23 @@ - -