Various includes fixed, optimize account deletion.

This commit is contained in:
James Cole 2025-02-16 19:30:40 +01:00
parent 6c38b87ec5
commit 344bfbe059
No known key found for this signature in database
GPG Key ID: B49A324B7EAD6D80
7 changed files with 36 additions and 21 deletions

View File

@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\System;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Transformers\UserTransformer;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\DB;
use League\Fractal\Resource\Item;
/**
@ -48,7 +49,7 @@ class AboutController extends Controller
$replace = ['\~', '# '];
$phpVersion = str_replace($search, $replace, PHP_VERSION);
$phpOs = str_replace($search, $replace, PHP_OS);
$currentDriver = \DB::getDriverName();
$currentDriver = DB::getDriverName();
$data
= [
'version' => config('firefly.version'),

View File

@ -30,6 +30,7 @@ use FireflyIII\Handlers\Events\UpdatedGroupEventHandler;
use FireflyIII\Models\TransactionGroup;
use FireflyIII\Models\TransactionJournal;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class CorrectsGroupAccounts extends Command
{
@ -45,7 +46,7 @@ class CorrectsGroupAccounts extends Command
{
$groups = [];
$res = TransactionJournal::groupBy('transaction_group_id')
->get(['transaction_group_id', \DB::raw('COUNT(transaction_group_id) as the_count')])// @phpstan-ignore-line
->get(['transaction_group_id', DB::raw('COUNT(transaction_group_id) as the_count')])// @phpstan-ignore-line
;
/** @var TransactionJournal $journal */

View File

@ -30,6 +30,7 @@ use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Support\Models\AccountBalanceCalculator;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class CorrectsUnevenAmount extends Command
@ -118,10 +119,10 @@ class CorrectsUnevenAmount extends Command
private function fixUnevenAmounts(): void
{
$journals = \DB::table('transactions')
$journals = DB::table('transactions')
->groupBy('transaction_journal_id')
->whereNull('deleted_at')
->get(['transaction_journal_id', \DB::raw('SUM(amount) AS the_sum')]) // @phpstan-ignore-line
->get(['transaction_journal_id', DB::raw('SUM(amount) AS the_sum')]) // @phpstan-ignore-line
;
/** @var \stdClass $entry */
@ -262,7 +263,7 @@ class CorrectsUnevenAmount extends Command
private function matchCurrencies(): void
{
$journals = TransactionJournal::leftJoin('transactions', 'transaction_journals.id', 'transactions.transaction_journal_id')
->where('transactions.transaction_currency_id', '!=', \DB::raw('transaction_journals.transaction_currency_id'))
->where('transactions.transaction_currency_id', '!=', DB::raw('transaction_journals.transaction_currency_id'))
->get(['transaction_journals.*'])
;

View File

@ -26,11 +26,14 @@ namespace FireflyIII\Handlers\Observer;
use FireflyIII\Models\Account;
use FireflyIII\Models\Attachment;
use FireflyIII\Models\PiggyBank;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionGroup;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Attachment\AttachmentRepositoryInterface;
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface;
use FireflyIII\Support\Facades\Amount;
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
/**
@ -72,24 +75,31 @@ class AccountObserver
*/
public function deleting(Account $account): void
{
// app('log')->debug('Observe "deleting" of an account.');
$account->accountMeta()->delete();
app('log')->debug('Observe "deleting" of an account.');
$repository = app(AttachmentRepositoryInterface::class);
$repository->setUser($account->user);
/** @var PiggyBank $piggy */
foreach ($account->piggyBanks()->get() as $piggy) {
$piggy->accounts()->detach($account);
}
DB::table('account_piggy_bank')->where('account_id', $account->id)->delete();
/** @var Attachment $attachment */
foreach ($account->attachments()->get() as $attachment) {
$repository->destroy($attachment);
}
foreach ($account->transactions()->get() as $transaction) {
$transaction->delete();
$journalIds = Transaction::where('account_id', $account->id)->get(['transactions.transaction_journal_id'])->pluck('transaction_journal_id')->toArray();
$groupIds = TransactionJournal::whereIn('id', $journalIds)->get(['transaction_journals.transaction_group_id'])->pluck('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();
}

View File

@ -29,6 +29,7 @@ use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Models\Account;
use FireflyIII\Models\Transaction;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Support\Facades\Steam;
use FireflyIII\Support\Http\Controllers\PeriodOverview;
@ -80,6 +81,7 @@ class ShowController extends Controller
* */
public function show(Request $request, Account $account, ?Carbon $start = null, ?Carbon $end = null)
{
$objectType = config(sprintf('firefly.shortNamesByFullName.%s', $account->accountType->type));
if (!$this->isEditableAccount($account)) {

View File

@ -31,6 +31,7 @@ use FireflyIII\Models\RecurrenceTransaction;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\DB;
/**
* Class AccountDestroyService
@ -46,8 +47,6 @@ class AccountDestroyService
$this->moveTransactions($account, $moveTo);
$this->updateRecurrences($account, $moveTo);
}
$this->destroyJournals($account);
// delete recurring transactions with this account:
if (null === $moveTo) {
$this->destroyRecurrences($account);
@ -59,6 +58,7 @@ class AccountDestroyService
// delete account meta:
$account->accountMeta()->delete();
// delete account.
// at this point the account observer interferes and deletes most of the other stuff.
$account->delete();
}
@ -134,8 +134,8 @@ class AccountDestroyService
private function updateRecurrences(Account $account, Account $moveTo): void
{
\DB::table('recurrences_transactions')->where('source_id', $account->id)->update(['source_id' => $moveTo->id]);
\DB::table('recurrences_transactions')->where('destination_id', $account->id)->update(['destination_id' => $moveTo->id]);
DB::table('recurrences_transactions')->where('source_id', $account->id)->update(['source_id' => $moveTo->id]);
DB::table('recurrences_transactions')->where('destination_id', $account->id)->update(['destination_id' => $moveTo->id]);
}
private function destroyJournals(Account $account): void

View File

@ -199,7 +199,7 @@ trait ModelInformation
++$index;
// amount_exactly:
$journalTriggers[$index] = 'amount_exactly';
$journalTriggers[$index] = 'amount_is';
$values[$index] = $destination->amount;
++$index;
@ -244,7 +244,7 @@ trait ModelInformation
// notes (if)
$notes = $journal->notes()->first();
if (null !== $notes) {
$journalTriggers[$index] = 'notes_are';
$journalTriggers[$index] = 'notes_is';
$values[$index] = $notes->text;
}