James Cole
2022-10-06 06:17:49 +02:00
parent 187e1914e3
commit 553a9be3d5
2 changed files with 57 additions and 1 deletions

View File

@@ -25,11 +25,16 @@ namespace FireflyIII\Api\V1\Controllers\Models\Transaction;
use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Events\DestroyedTransactionGroup; use FireflyIII\Events\DestroyedTransactionGroup;
use FireflyIII\Events\UpdatedAccount;
use FireflyIII\Models\Account;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionGroup;
use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepository;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Log;
/** /**
* Class DestroyController * Class DestroyController
@@ -37,6 +42,7 @@ use Illuminate\Http\JsonResponse;
class DestroyController extends Controller class DestroyController extends Controller
{ {
private JournalRepositoryInterface $repository; private JournalRepositoryInterface $repository;
private TransactionGroupRepository $groupRepository;
/** /**
* TransactionController constructor. * TransactionController constructor.
@@ -54,6 +60,9 @@ class DestroyController extends Controller
$this->repository = app(JournalRepositoryInterface::class); $this->repository = app(JournalRepositoryInterface::class);
$this->repository->setUser($admin); $this->repository->setUser($admin);
$this->groupRepository = app(TransactionGroupRepository::class);
$this->groupRepository->setUser($admin);
return $next($request); return $next($request);
} }
); );
@@ -72,11 +81,32 @@ class DestroyController extends Controller
*/ */
public function destroy(TransactionGroup $transactionGroup): JsonResponse public function destroy(TransactionGroup $transactionGroup): JsonResponse
{ {
$this->repository->destroyGroup($transactionGroup); // grab asset account(s) from group:
$accounts = [];
/** @var TransactionJournal $journal */
foreach($transactionGroup->transactionJournals as $journal) {
/** @var Transaction $transaction */
foreach($journal->transactions as $transaction) {
$type = $transaction->account->accountType->type;
// if is valid liability, trigger event!
if(in_array($type, config('firefly.valid_liabilities'))) {
$accounts[] = $transaction->account;
}
}
}
$this->groupRepository->destroy($transactionGroup);
// trigger just after destruction // trigger just after destruction
event(new DestroyedTransactionGroup($transactionGroup)); event(new DestroyedTransactionGroup($transactionGroup));
app('preferences')->mark(); app('preferences')->mark();
/** @var Account $account */
foreach($accounts as $account) {
Log::debug(sprintf('Now going to trigger updated account event for account #%d', $account->id));
event(new UpdatedAccount($account));
}
return response()->json([], 204); return response()->json([], 204);
} }

View File

@@ -23,8 +23,12 @@ declare(strict_types=1);
namespace FireflyIII\Http\Controllers\Transaction; namespace FireflyIII\Http\Controllers\Transaction;
use FireflyIII\Events\UpdatedAccount;
use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Models\Account;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionGroup;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface; use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface;
use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View; use Illuminate\Contracts\View\View;
@@ -111,10 +115,32 @@ class DeleteController extends Controller
$objectType = strtolower($journal->transaction_type_type ?? $journal->transactionType->type); $objectType = strtolower($journal->transaction_type_type ?? $journal->transactionType->type);
session()->flash('success', (string) trans('firefly.deleted_' . strtolower($objectType), ['description' => $group->title ?? $journal->description])); session()->flash('success', (string) trans('firefly.deleted_' . strtolower($objectType), ['description' => $group->title ?? $journal->description]));
// grab asset account(s) from group:
$accounts = [];
/** @var TransactionJournal $journal */
foreach($group->transactionJournals as $journal) {
/** @var Transaction $transaction */
foreach($journal->transactions as $transaction) {
$type = $transaction->account->accountType->type;
// if is valid liability, trigger event!
if(in_array($type, config('firefly.valid_liabilities'))) {
$accounts[] = $transaction->account;
}
}
}
$this->repository->destroy($group); $this->repository->destroy($group);
app('preferences')->mark(); app('preferences')->mark();
/** @var Account $account */
foreach($accounts as $account) {
Log::debug(sprintf('Now going to trigger updated account event for account #%d', $account->id));
event(new UpdatedAccount($account));
}
return redirect($this->getPreviousUrl('transactions.delete.url')); return redirect($this->getPreviousUrl('transactions.delete.url'));
} }
} }