diff --git a/app/lib/Firefly/Trigger/Journals/EloquentJournalTrigger.php b/app/lib/Firefly/Trigger/Journals/EloquentJournalTrigger.php new file mode 100644 index 0000000000..ee92f3786d --- /dev/null +++ b/app/lib/Firefly/Trigger/Journals/EloquentJournalTrigger.php @@ -0,0 +1,92 @@ +transaction_type->type == 'Withdrawal') { + $transaction = $journal->transactions()->orderBy('amount', 'DESC')->first(); + $amount = floatval($transaction->amount); + $description = $journal->description; + $beneficiary = $transaction->account->name; + + // make an array of parts: + $parts = explode(' ', $description); + $parts[] = $beneficiary; + $today = new Carbon; + $set = \RecurringTransactionReminder:: + leftJoin( + 'recurring_transactions', 'recurring_transactions.id', '=', 'reminders.recurring_transaction_id' + ) + ->where('startdate', '<', $today->format('Y-m-d')) + ->where('enddate', '>', $today->format('Y-m-d')) + ->where('amount_min', '<=', $amount) + ->where('amount_max', '>=', $amount)->get(['reminders.*']); + /** @var \RecurringTransctionReminder $reminder */ + foreach ($set as $reminder) { + /** @var \RecurringTransaction $RT */ + $RT = $reminder->recurring_transaction; + $matches = explode(' ', $RT->match); + $matchCount = 0; + foreach ($parts as $part) { + if (in_array($part, $matches)) { + $matchCount++; + } + } + if ($matchCount >= count($matches)) { + // we have a match! + \Log::debug( + 'Match between new journal "' . join('/', $parts) . '" and RT ' . join('/', $matches) . '.' + ); + $journal->recurringTransaction()->associate($RT); + $journal->save(); + // also update the reminder. + $reminder->active = 0; + $reminder->save(); + return true; + } + } + } + return true; + + } + + /** + * @param Dispatcher $events + */ + public function subscribe(Dispatcher $events) + { + $events->listen('journals.store', 'Firefly\Trigger\Journals\EloquentJournalTrigger@store'); + $events->listen('journals.update', 'Firefly\Trigger\Journals\EloquentJournalTrigger@update'); + + } + + /** + * @param \TransactionJournal $journal + * + * @return bool + */ + public function update(\TransactionJournal $journal) + { + return true; + + } + +} \ No newline at end of file diff --git a/bootstrap/start.php b/bootstrap/start.php index a2e2cb98a3..08314820de 100644 --- a/bootstrap/start.php +++ b/bootstrap/start.php @@ -91,5 +91,6 @@ Event::subscribe('Firefly\Trigger\Limits\EloquentLimitTrigger'); Event::subscribe('Firefly\Trigger\Piggybanks\EloquentPiggybankTrigger'); Event::subscribe('Firefly\Trigger\Budgets\EloquentBudgetTrigger'); Event::subscribe('Firefly\Trigger\Recurring\EloquentRecurringTrigger'); +Event::subscribe('Firefly\Trigger\Journals\EloquentJournalTrigger'); return $app;