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; } }