. */ declare(strict_types=1); namespace FireflyIII\Handlers\Observer; use FireflyIII\Models\Account; use FireflyIII\Models\Attachment; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\Attachment\AttachmentRepositoryInterface; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; class DeletedAccountObserver { public function deleting(Account $account): void { Log::debug('Observe "deleting" of an account.'); $repository = app(AttachmentRepositoryInterface::class); $repository->setUser($account->user); DB::table('account_piggy_bank')->where('account_id', $account->id)->delete(); /** @var Attachment $attachment */ foreach ($account->attachments()->get() as $attachment) { $repository->destroy($attachment); } $journalIds = Transaction::where('account_id', $account->id)->get(['transactions.transaction_journal_id'])->pluck('transaction_journal_id')->toArray(); $groupIds = array_map(function (array $item) { return $item['transaction_group_id']; }, TransactionJournal::whereIn('id', $journalIds)->get(['transaction_journals.transaction_group_id'])->toArray()); if (count($journalIds) > 0) { Transaction::whereIn('transaction_journal_id', $journalIds)->delete(); TransactionJournal::whereIn('id', $journalIds)->delete(); } if (count($groupIds) > 0) { TransactionGroup::whereIn('id', $groupIds)->delete(); } Log::debug(sprintf('Delete %d journal(s)', count($journalIds))); Log::debug(sprintf('Delete %d group(s)', count($groupIds))); $account->notes()->delete(); $account->locations()->delete(); } }