From 1c2206cb9f797d7be7461037744ae183c0ef4fdb Mon Sep 17 00:00:00 2001 From: James Cole Date: Thu, 3 Jan 2019 18:57:34 +0100 Subject: [PATCH] Fix issue with recurring transactions and piggy banks. --- .../V1/Controllers/TransactionController.php | 2 +- app/Events/StoredTransactionJournal.php | 6 +----- .../Transaction/SingleController.php | 2 +- app/Jobs/CreateRecurringTransactions.php | 18 +++++++++++++++++- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/Api/V1/Controllers/TransactionController.php b/app/Api/V1/Controllers/TransactionController.php index ce74aa411d..9199ec45e9 100644 --- a/app/Api/V1/Controllers/TransactionController.php +++ b/app/Api/V1/Controllers/TransactionController.php @@ -246,7 +246,7 @@ class TransactionController extends Controller $data['user'] = auth()->user()->id; $journal = $repository->store($data); - event(new StoredTransactionJournal($journal, 0)); + event(new StoredTransactionJournal($journal)); $manager = new Manager(); $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; diff --git a/app/Events/StoredTransactionJournal.php b/app/Events/StoredTransactionJournal.php index 3e1348eb69..bc66a813fc 100644 --- a/app/Events/StoredTransactionJournal.php +++ b/app/Events/StoredTransactionJournal.php @@ -38,18 +38,14 @@ class StoredTransactionJournal extends Event /** @var TransactionJournal The journal that was stored. */ public $journal; - /** @var int The piggy bank ID. */ - public $piggyBankId; /** * Create a new event instance. * * @param TransactionJournal $journal - * @param int $piggyBankId */ - public function __construct(TransactionJournal $journal, int $piggyBankId) + public function __construct(TransactionJournal $journal) { $this->journal = $journal; - $this->piggyBankId = $piggyBankId; } } diff --git a/app/Http/Controllers/Transaction/SingleController.php b/app/Http/Controllers/Transaction/SingleController.php index 8dd1d44ea1..7a2cec0444 100644 --- a/app/Http/Controllers/Transaction/SingleController.php +++ b/app/Http/Controllers/Transaction/SingleController.php @@ -400,7 +400,7 @@ class SingleController extends Controller session()->flash('info', $this->attachments->getMessages()->get('attachments')); } - event(new StoredTransactionJournal($journal, $data['piggy_bank_id'])); + event(new StoredTransactionJournal($journal)); session()->flash('success_uri', route('transactions.show', [$journal->id])); session()->flash('success', (string)trans('firefly.stored_journal', ['description' => $journal->description])); diff --git a/app/Jobs/CreateRecurringTransactions.php b/app/Jobs/CreateRecurringTransactions.php index cb0651baee..55e5bca7e0 100644 --- a/app/Jobs/CreateRecurringTransactions.php +++ b/app/Jobs/CreateRecurringTransactions.php @@ -48,6 +48,8 @@ namespace FireflyIII\Jobs; use Carbon\Carbon; use FireflyIII\Events\RequestedReportOnJournals; use FireflyIII\Events\StoredTransactionJournal; +use FireflyIII\Factory\PiggyBankEventFactory; +use FireflyIII\Factory\PiggyBankFactory; use FireflyIII\Models\Recurrence; use FireflyIII\Models\RecurrenceMeta; use FireflyIII\Models\RecurrenceRepetition; @@ -356,9 +358,23 @@ class CreateRecurringTransactions implements ShouldQueue // get piggy bank ID from meta data: $piggyBankId = $this->getPiggyId($recurrence); + Log::debug(sprintf('Piggy bank ID for recurrence #%d is #%d', $recurrence->id, $piggyBankId)); // trigger event: - event(new StoredTransactionJournal($journal, $piggyBankId)); + event(new StoredTransactionJournal($journal)); + + // link to piggy bank: + /** @var PiggyBankFactory $factory */ + $factory = app(PiggyBankFactory::class); + $factory->setUser($recurrence->user); + + $piggyBank = $factory->find($piggyBankId, null); + if (null !== $piggyBank) { + /** @var PiggyBankEventFactory $factory */ + $factory = app(PiggyBankEventFactory::class); + $factory->create($journal, $piggyBank); + } + $collection->push($journal); // update recurring thing: