diff --git a/app/Repositories/TransactionGroup/TransactionGroupRepository.php b/app/Repositories/TransactionGroup/TransactionGroupRepository.php index 679d203136..18bb3bcbf9 100644 --- a/app/Repositories/TransactionGroup/TransactionGroupRepository.php +++ b/app/Repositories/TransactionGroup/TransactionGroupRepository.php @@ -311,9 +311,7 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterfac { /** @var GroupUpdateService $service */ $service = app(GroupUpdateService::class); - $updatedGroup = $service->update($transactionGroup, $data); - - return $updatedGroup; + return $service->update($transactionGroup, $data); } /** diff --git a/app/Services/Internal/Update/GroupUpdateService.php b/app/Services/Internal/Update/GroupUpdateService.php index 0bca2eb1de..a6658b2195 100644 --- a/app/Services/Internal/Update/GroupUpdateService.php +++ b/app/Services/Internal/Update/GroupUpdateService.php @@ -27,6 +27,7 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Factory\TransactionJournalFactory; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; +use FireflyIII\Services\Internal\Destroy\JournalDestroyService; use Log; /** @@ -67,6 +68,9 @@ class GroupUpdateService Log::debug('Going to update split group.'); + $existing = $transactionGroup->transactionJournals->pluck('id')->toArray(); + $updated = []; + /** * @var int $index * @var array $transaction @@ -96,9 +100,20 @@ class GroupUpdateService if (null !== $journal) { Log::debug('Call updateTransactionJournal'); $this->updateTransactionJournal($transactionGroup, $journal, $transaction); + $updated[] = $journal->id; Log::debug('Done calling updateTransactionJournal'); } } + $result = array_diff($existing, $updated); + if (count($result) > 0) { + /** @var string $deletedId */ + foreach ($result as $deletedId) { + $journal = $transactionGroup->transactionJournals()->find((int)$deletedId); + /** @var JournalDestroyService $service */ + $service = app(JournalDestroyService::class); + $service->destroy($journal); + } + } app('preferences')->mark();