From 5f4db7874c90e5c127805063f3fec48913da1ccb Mon Sep 17 00:00:00 2001 From: Sander Dorigo Date: Sun, 12 Oct 2014 08:19:18 +0200 Subject: [PATCH] New view and what-not for feature. --- app/controllers/RecurringController.php | 29 ++++++++++-- .../EloquentTransactionJournalRepository.php | 10 +++++ .../TransactionJournalRepositoryInterface.php | 8 ++++ .../Recurring/EloquentRecurringTrigger.php | 44 +++++++++++++++++++ app/routes.php | 1 + app/views/recurring/show.blade.php | 14 +++++- 6 files changed, 101 insertions(+), 5 deletions(-) diff --git a/app/controllers/RecurringController.php b/app/controllers/RecurringController.php index 3ff0fea28b..a8f8cec1e9 100644 --- a/app/controllers/RecurringController.php +++ b/app/controllers/RecurringController.php @@ -21,7 +21,7 @@ class RecurringController extends BaseController public function __construct(RTR $repository, RI $helper) { $this->_repository = $repository; - $this->_helper = $helper; + $this->_helper = $helper; View::share('title', 'Recurring transactions'); View::share('mainTitleIcon', 'fa-rotate-right'); @@ -102,6 +102,27 @@ class RecurringController extends BaseController } + /** + * @param RecurringTransaction $recurringTransaction + * @return mixed + */ + public function rescan(RecurringTransaction $recurringTransaction) + { + // do something! + /** @var \Firefly\Storage\TransactionJournal\TransactionJournalRepositoryInterface $repo */ + $repo = App::make('Firefly\Storage\TransactionJournal\TransactionJournalRepositoryInterface'); + $set = $repo->get(); + + /** @var TransactionJournal $journal */ + foreach ($set as $journal) { + Event::fire('recurring.rescan', [$recurringTransaction, $journal]); + } + Session::flash('success','Rescanned everything.'); + return Redirect::back(); + + + } + public function store() { $data = Input::except(['_token', 'post_submit_action']); @@ -170,14 +191,14 @@ class RecurringController extends BaseController Session::flash('error', 'Could not update recurring transaction: ' . $messageBag->first()); return Redirect::route('transactions.edit', $recurringTransaction->id)->withInput() - ->withErrors($messageBag); + ->withErrors($messageBag); } break; case 'validate_only': - $data = Input::all(); - $data['id'] = $recurringTransaction->id; + $data = Input::all(); + $data['id'] = $recurringTransaction->id; $messageBags = $this->_helper->validate($data); Session::flash('warnings', $messageBags['warnings']); diff --git a/app/lib/Firefly/Storage/TransactionJournal/EloquentTransactionJournalRepository.php b/app/lib/Firefly/Storage/TransactionJournal/EloquentTransactionJournalRepository.php index 2f2751d873..bb36f667e2 100644 --- a/app/lib/Firefly/Storage/TransactionJournal/EloquentTransactionJournalRepository.php +++ b/app/lib/Firefly/Storage/TransactionJournal/EloquentTransactionJournalRepository.php @@ -5,6 +5,7 @@ namespace Firefly\Storage\TransactionJournal; use Carbon\Carbon; use Illuminate\Queue\Jobs\Job; +use Illuminate\Support\Collection; use Illuminate\Support\MessageBag; /** @@ -24,6 +25,15 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito $this->_user = \Auth::user(); } + /** + * Get them ALL + * + * @return Collection + */ + public function get() { + return $this->_user->transactionjournals()->with('transactions')->get(); + } + /** * @param Job $job * @param array $payload diff --git a/app/lib/Firefly/Storage/TransactionJournal/TransactionJournalRepositoryInterface.php b/app/lib/Firefly/Storage/TransactionJournal/TransactionJournalRepositoryInterface.php index 8726de1f3e..2d01a7884d 100644 --- a/app/lib/Firefly/Storage/TransactionJournal/TransactionJournalRepositoryInterface.php +++ b/app/lib/Firefly/Storage/TransactionJournal/TransactionJournalRepositoryInterface.php @@ -4,6 +4,7 @@ namespace Firefly\Storage\TransactionJournal; use Carbon\Carbon; use Illuminate\Queue\Jobs\Job; +use Illuminate\Support\Collection; /** * Interface TransactionJournalRepositoryInterface @@ -20,6 +21,13 @@ interface TransactionJournalRepositoryInterface */ public function importTransaction(Job $job, array $payload); + /** + * Get them ALL + * + * @return Collection + */ + public function get(); + /** * @param Job $job * @param array $payload diff --git a/app/lib/Firefly/Trigger/Recurring/EloquentRecurringTrigger.php b/app/lib/Firefly/Trigger/Recurring/EloquentRecurringTrigger.php index 0223091ee5..6ec7dfc62d 100644 --- a/app/lib/Firefly/Trigger/Recurring/EloquentRecurringTrigger.php +++ b/app/lib/Firefly/Trigger/Recurring/EloquentRecurringTrigger.php @@ -32,6 +32,48 @@ class EloquentRecurringTrigger { } + public function rescan(\RecurringTransaction $recurring, \TransactionJournal $journal) + { + /* + * Match words. + */ + $wordMatch = false; + $matches = explode(' ', $recurring->match); + $description = strtolower($journal->description); + $count = 0; + foreach ($matches as $word) { + if (!(strpos($description, $word) === false)) { + $count++; + } + } + if ($count > 0) { + $wordMatch = true; + } + + /* + * Match amount. + */ + $transactions = $journal->transactions()->get(); + $amountMatch = false; + if (count($transactions) > 1) { + + $amount = max(floatval($transactions[0]->amount), floatval($transactions[1]->amount)); + $min = floatval($recurring->amount_min); + $max = floatval($recurring->amount_max); + if ($amount >= $min && $amount <= $max) { + $amountMatch = true; + } + } + + /* + * If both, update! + */ + if ($wordMatch && $amountMatch) { + $journal->recurringTransaction()->associate($recurring); + $journal->save(); + } + } + /** * Trigger! * @@ -39,6 +81,8 @@ class EloquentRecurringTrigger */ public function subscribe(Dispatcher $events) { + //Event::fire('recurring.rematch', [$recurringTransaction, $journal]); + $events->listen('recurring.rescan', 'Firefly\Trigger\Recurring\EloquentRecurringTrigger@rescan'); // $events->listen('recurring.destroy', 'Firefly\Trigger\Recurring\EloquentRecurringTrigger@destroy'); // $events->listen('recurring.store', 'Firefly\Trigger\Recurring\EloquentRecurringTrigger@store'); // $events->listen('recurring.update', 'Firefly\Trigger\Recurring\EloquentRecurringTrigger@update'); diff --git a/app/routes.php b/app/routes.php index d3e124e4fd..9fd2bf8fe4 100644 --- a/app/routes.php +++ b/app/routes.php @@ -219,6 +219,7 @@ Route::group(['before' => 'auth'], function () { // 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/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']); diff --git a/app/views/recurring/show.blade.php b/app/views/recurring/show.blade.php index 918b52d638..07450a0840 100644 --- a/app/views/recurring/show.blade.php +++ b/app/views/recurring/show.blade.php @@ -1,7 +1,7 @@ @extends('layouts.default') @section('content')
-
+
{{{$recurring->name}}} @@ -53,6 +53,18 @@
+
+
+
+ More +
+ +
+