mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Various includes fixed, optimize account deletion.
This commit is contained in:
parent
6c38b87ec5
commit
344bfbe059
@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\System;
|
|||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Transformers\UserTransformer;
|
use FireflyIII\Transformers\UserTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
use League\Fractal\Resource\Item;
|
use League\Fractal\Resource\Item;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -48,7 +49,7 @@ class AboutController extends Controller
|
|||||||
$replace = ['\~', '# '];
|
$replace = ['\~', '# '];
|
||||||
$phpVersion = str_replace($search, $replace, PHP_VERSION);
|
$phpVersion = str_replace($search, $replace, PHP_VERSION);
|
||||||
$phpOs = str_replace($search, $replace, PHP_OS);
|
$phpOs = str_replace($search, $replace, PHP_OS);
|
||||||
$currentDriver = \DB::getDriverName();
|
$currentDriver = DB::getDriverName();
|
||||||
$data
|
$data
|
||||||
= [
|
= [
|
||||||
'version' => config('firefly.version'),
|
'version' => config('firefly.version'),
|
||||||
|
@ -30,6 +30,7 @@ use FireflyIII\Handlers\Events\UpdatedGroupEventHandler;
|
|||||||
use FireflyIII\Models\TransactionGroup;
|
use FireflyIII\Models\TransactionGroup;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
class CorrectsGroupAccounts extends Command
|
class CorrectsGroupAccounts extends Command
|
||||||
{
|
{
|
||||||
@ -45,7 +46,7 @@ class CorrectsGroupAccounts extends Command
|
|||||||
{
|
{
|
||||||
$groups = [];
|
$groups = [];
|
||||||
$res = TransactionJournal::groupBy('transaction_group_id')
|
$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 */
|
/** @var TransactionJournal $journal */
|
||||||
|
@ -30,6 +30,7 @@ use FireflyIII\Models\Transaction;
|
|||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use FireflyIII\Support\Models\AccountBalanceCalculator;
|
use FireflyIII\Support\Models\AccountBalanceCalculator;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
class CorrectsUnevenAmount extends Command
|
class CorrectsUnevenAmount extends Command
|
||||||
@ -118,10 +119,10 @@ class CorrectsUnevenAmount extends Command
|
|||||||
|
|
||||||
private function fixUnevenAmounts(): void
|
private function fixUnevenAmounts(): void
|
||||||
{
|
{
|
||||||
$journals = \DB::table('transactions')
|
$journals = DB::table('transactions')
|
||||||
->groupBy('transaction_journal_id')
|
->groupBy('transaction_journal_id')
|
||||||
->whereNull('deleted_at')
|
->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 */
|
/** @var \stdClass $entry */
|
||||||
@ -262,7 +263,7 @@ class CorrectsUnevenAmount extends Command
|
|||||||
private function matchCurrencies(): void
|
private function matchCurrencies(): void
|
||||||
{
|
{
|
||||||
$journals = TransactionJournal::leftJoin('transactions', 'transaction_journals.id', 'transactions.transaction_journal_id')
|
$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.*'])
|
->get(['transaction_journals.*'])
|
||||||
;
|
;
|
||||||
|
|
||||||
|
@ -26,11 +26,14 @@ namespace FireflyIII\Handlers\Observer;
|
|||||||
|
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Models\Attachment;
|
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\Attachment\AttachmentRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Support\Facades\Amount;
|
use FireflyIII\Support\Facades\Amount;
|
||||||
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -53,7 +56,7 @@ class AccountObserver
|
|||||||
$repository = app(AccountRepositoryInterface::class);
|
$repository = app(AccountRepositoryInterface::class);
|
||||||
$currency = $repository->getAccountCurrency($account);
|
$currency = $repository->getAccountCurrency($account);
|
||||||
if (null !== $currency && $currency->id !== $userCurrency->id && '' !== (string) $account->virtual_balance && 0 !== bccomp($account->virtual_balance, '0')) {
|
if (null !== $currency && $currency->id !== $userCurrency->id && '' !== (string) $account->virtual_balance && 0 !== bccomp($account->virtual_balance, '0')) {
|
||||||
$converter = new ExchangeRateConverter();
|
$converter = new ExchangeRateConverter();
|
||||||
$converter->setUserGroup($account->user->userGroup);
|
$converter->setUserGroup($account->user->userGroup);
|
||||||
$converter->setIgnoreSettings(true);
|
$converter->setIgnoreSettings(true);
|
||||||
$account->native_virtual_balance = $converter->convert($currency, $userCurrency, today(), $account->virtual_balance);
|
$account->native_virtual_balance = $converter->convert($currency, $userCurrency, today(), $account->virtual_balance);
|
||||||
@ -72,24 +75,31 @@ class AccountObserver
|
|||||||
*/
|
*/
|
||||||
public function deleting(Account $account): void
|
public function deleting(Account $account): void
|
||||||
{
|
{
|
||||||
// app('log')->debug('Observe "deleting" of an account.');
|
app('log')->debug('Observe "deleting" of an account.');
|
||||||
$account->accountMeta()->delete();
|
|
||||||
|
|
||||||
$repository = app(AttachmentRepositoryInterface::class);
|
$repository = app(AttachmentRepositoryInterface::class);
|
||||||
$repository->setUser($account->user);
|
$repository->setUser($account->user);
|
||||||
|
|
||||||
/** @var PiggyBank $piggy */
|
DB::table('account_piggy_bank')->where('account_id', $account->id)->delete();
|
||||||
foreach ($account->piggyBanks()->get() as $piggy) {
|
|
||||||
$piggy->accounts()->detach($account);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @var Attachment $attachment */
|
/** @var Attachment $attachment */
|
||||||
foreach ($account->attachments()->get() as $attachment) {
|
foreach ($account->attachments()->get() as $attachment) {
|
||||||
$repository->destroy($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->notes()->delete();
|
||||||
$account->locations()->delete();
|
$account->locations()->delete();
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ use FireflyIII\Exceptions\FireflyException;
|
|||||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
||||||
use FireflyIII\Http\Controllers\Controller;
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
|
use FireflyIII\Models\Transaction;
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Support\Facades\Steam;
|
use FireflyIII\Support\Facades\Steam;
|
||||||
use FireflyIII\Support\Http\Controllers\PeriodOverview;
|
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)
|
public function show(Request $request, Account $account, ?Carbon $start = null, ?Carbon $end = null)
|
||||||
{
|
{
|
||||||
|
|
||||||
$objectType = config(sprintf('firefly.shortNamesByFullName.%s', $account->accountType->type));
|
$objectType = config(sprintf('firefly.shortNamesByFullName.%s', $account->accountType->type));
|
||||||
|
|
||||||
if (!$this->isEditableAccount($account)) {
|
if (!$this->isEditableAccount($account)) {
|
||||||
|
@ -31,6 +31,7 @@ use FireflyIII\Models\RecurrenceTransaction;
|
|||||||
use FireflyIII\Models\Transaction;
|
use FireflyIII\Models\Transaction;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AccountDestroyService
|
* Class AccountDestroyService
|
||||||
@ -46,8 +47,6 @@ class AccountDestroyService
|
|||||||
$this->moveTransactions($account, $moveTo);
|
$this->moveTransactions($account, $moveTo);
|
||||||
$this->updateRecurrences($account, $moveTo);
|
$this->updateRecurrences($account, $moveTo);
|
||||||
}
|
}
|
||||||
$this->destroyJournals($account);
|
|
||||||
|
|
||||||
// delete recurring transactions with this account:
|
// delete recurring transactions with this account:
|
||||||
if (null === $moveTo) {
|
if (null === $moveTo) {
|
||||||
$this->destroyRecurrences($account);
|
$this->destroyRecurrences($account);
|
||||||
@ -59,6 +58,7 @@ class AccountDestroyService
|
|||||||
// delete account meta:
|
// delete account meta:
|
||||||
$account->accountMeta()->delete();
|
$account->accountMeta()->delete();
|
||||||
// delete account.
|
// delete account.
|
||||||
|
// at this point the account observer interferes and deletes most of the other stuff.
|
||||||
$account->delete();
|
$account->delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,8 +134,8 @@ class AccountDestroyService
|
|||||||
|
|
||||||
private function updateRecurrences(Account $account, Account $moveTo): void
|
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('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('destination_id', $account->id)->update(['destination_id' => $moveTo->id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function destroyJournals(Account $account): void
|
private function destroyJournals(Account $account): void
|
||||||
|
@ -199,7 +199,7 @@ trait ModelInformation
|
|||||||
++$index;
|
++$index;
|
||||||
|
|
||||||
// amount_exactly:
|
// amount_exactly:
|
||||||
$journalTriggers[$index] = 'amount_exactly';
|
$journalTriggers[$index] = 'amount_is';
|
||||||
$values[$index] = $destination->amount;
|
$values[$index] = $destination->amount;
|
||||||
++$index;
|
++$index;
|
||||||
|
|
||||||
@ -244,7 +244,7 @@ trait ModelInformation
|
|||||||
// notes (if)
|
// notes (if)
|
||||||
$notes = $journal->notes()->first();
|
$notes = $journal->notes()->first();
|
||||||
if (null !== $notes) {
|
if (null !== $notes) {
|
||||||
$journalTriggers[$index] = 'notes_are';
|
$journalTriggers[$index] = 'notes_is';
|
||||||
$values[$index] = $notes->text;
|
$values[$index] = $notes->text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user