diff --git a/app/Http/Controllers/Account/ReconcileController.php b/app/Http/Controllers/Account/ReconcileController.php index b3adeaa54d..f27e763540 100644 --- a/app/Http/Controllers/Account/ReconcileController.php +++ b/app/Http/Controllers/Account/ReconcileController.php @@ -36,6 +36,7 @@ use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; +use FireflyIII\Support\Http\Controllers\UserRedirection; use Log; /** @@ -45,6 +46,7 @@ use Log; */ class ReconcileController extends Controller { + use UserRedirection; /** @var AccountRepositoryInterface The account repository */ private $accountRepos; /** @var CurrencyRepositoryInterface The currency repository */ @@ -370,32 +372,4 @@ class ReconcileController extends Controller // redirect to previous URL. return redirect($this->getPreviousUri('reconcile.edit.uri')); } - - /** - * Redirect user to the original asset account. - * - * @param Account $account - * - * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector - * - * @throws FireflyException - */ - protected function redirectToOriginalAccount(Account $account) // user redirection + nav - { - /** @var Transaction $transaction */ - $transaction = $account->transactions()->first(); - if (null === $transaction) { - throw new FireflyException(sprintf('Expected a transaction. Account #%d has none. BEEP, error.', $account->id)); // @codeCoverageIgnore - } - - $journal = $transaction->transactionJournal; - /** @var Transaction $opposingTransaction */ - $opposingTransaction = $journal->transactions()->where('transactions.id', '!=', $transaction->id)->first(); - - if (null === $opposingTransaction) { - throw new FireflyException('Expected an opposing transaction. This account has none. BEEP, error.'); // @codeCoverageIgnore - } - - return redirect(route('accounts.show', [$opposingTransaction->account_id])); - } } diff --git a/app/Http/Controllers/Account/ShowController.php b/app/Http/Controllers/Account/ShowController.php index 9b30915742..8c9e8241e1 100644 --- a/app/Http/Controllers/Account/ShowController.php +++ b/app/Http/Controllers/Account/ShowController.php @@ -29,11 +29,11 @@ use FireflyIII\Helpers\Collector\JournalCollectorInterface; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; -use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\CacheProperties; +use FireflyIII\Support\Http\Controllers\UserRedirection; use Illuminate\Http\Request; use Illuminate\Support\Collection; use View; @@ -45,6 +45,8 @@ use View; */ class ShowController extends Controller { + use UserRedirection; + /** @var CurrencyRepositoryInterface The currency repository */ private $currencyRepos; /** @var AccountRepositoryInterface The account repository */ @@ -242,32 +244,4 @@ class ShowController extends Controller return $entries; } - - /** - * Redirect to the original account. - * - * @param Account $account - * - * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector - * - * @throws FireflyException - */ - protected function redirectToOriginalAccount(Account $account) // user redirection + nav - { - /** @var Transaction $transaction */ - $transaction = $account->transactions()->first(); - if (null === $transaction) { - throw new FireflyException('Expected a transaction. This account has none. BEEP, error.'); - } - - $journal = $transaction->transactionJournal; - /** @var Transaction $opposingTransaction */ - $opposingTransaction = $journal->transactions()->where('transactions.id', '!=', $transaction->id)->first(); - - if (null === $opposingTransaction) { - throw new FireflyException('Expected an opposing transaction. This account has none. BEEP, error.'); // @codeCoverageIgnore - } - - return redirect(route('accounts.show', [$opposingTransaction->account_id])); - } } diff --git a/app/Http/Controllers/Json/ReconcileController.php b/app/Http/Controllers/Json/ReconcileController.php index 9ba91a78f9..8f5e791376 100644 --- a/app/Http/Controllers/Json/ReconcileController.php +++ b/app/Http/Controllers/Json/ReconcileController.php @@ -34,6 +34,7 @@ use FireflyIII\Models\Transaction; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; +use FireflyIII\Support\Http\Controllers\UserRedirection; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Collection; @@ -48,7 +49,7 @@ use Throwable; */ class ReconcileController extends Controller { - + use UserRedirection; /** @var AccountRepositoryInterface The account repository */ private $accountRepos; /** @var CurrencyRepositoryInterface The currency repository */ @@ -200,32 +201,4 @@ class ReconcileController extends Controller return response()->json(['html' => $html, 'startBalance' => $startBalance, 'endBalance' => $endBalance]); } - - /** - * Redirect to actual account. - * - * @param Account $account - * - * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector - * - * @throws FireflyException - */ - protected function redirectToOriginalAccount(Account $account) // user redirection + nav - { - /** @var Transaction $transaction */ - $transaction = $account->transactions()->first(); - if (null === $transaction) { - throw new FireflyException(sprintf('Expected a transaction. Account #%d has none. BEEP, error.', $account->id)); // @codeCoverageIgnore - } - - $journal = $transaction->transactionJournal; - /** @var Transaction $opposingTransaction */ - $opposingTransaction = $journal->transactions()->where('transactions.id', '!=', $transaction->id)->first(); - - if (null === $opposingTransaction) { - throw new FireflyException('Expected an opposing transaction. This account has none. BEEP, error.'); // @codeCoverageIgnore - } - - return redirect(route('accounts.show', [$opposingTransaction->account_id])); - } } diff --git a/app/Support/Http/Controllers/UserRedirection.php b/app/Support/Http/Controllers/UserRedirection.php new file mode 100644 index 0000000000..edbaf8d349 --- /dev/null +++ b/app/Support/Http/Controllers/UserRedirection.php @@ -0,0 +1,65 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Support\Http\Controllers; + +use FireflyIII\Models\Account; +use FireflyIII\Models\Transaction; +use Illuminate\Http\RedirectResponse; +use Log; + +/** + * Trait UserRedirection + * + * @package FireflyIII\Support\Http\Controllers + */ +trait UserRedirection +{ + /** + * @param Account $account + * + * @return RedirectResponse|\Illuminate\Routing\Redirector + */ + protected function redirectToOriginalAccount(Account $account) + { + /** @var Transaction $transaction */ + $transaction = $account->transactions()->first(); + if (null === $transaction) { + app('session')->flash('error', trans('firefly.account_missing_transaction', ['name' => $account->name, 'id' => $account->id])); + Log::error(sprintf('Expected a transaction. Account #%d has none. BEEP, error.', $account->id)); + + return redirect(route('index')); + } + + $journal = $transaction->transactionJournal; + /** @var Transaction $opposingTransaction */ + $opposingTransaction = $journal->transactions()->where('transactions.id', '!=', $transaction->id)->first(); + + if (null === $opposingTransaction) { + app('session')->flash('error', trans('firefly.account_missing_transaction', ['name' => $account->name, 'id' => $account->id])); + Log::error(sprintf('Expected an opposing transaction. Account #%d has none. BEEP, error.', $account->id)); + } + + return redirect(route('accounts.show', [$opposingTransaction->account_id])); + } +} \ No newline at end of file diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index 5e4104c4cc..29daa784c0 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -677,6 +677,7 @@ return [ 'list_inactive_rule' => 'inactive rule', // accounts: + 'account_missing_transaction' => 'Account #:id (":name") cannot be viewed directly, but Firefly is missing redirect information.', 'details_for_asset' => 'Details for asset account ":name"', 'details_for_expense' => 'Details for expense account ":name"', 'details_for_revenue' => 'Details for revenue account ":name"',