diff --git a/app/Http/Controllers/Account/ReconcileController.php b/app/Http/Controllers/Account/ReconcileController.php index d8fd0cd6c3..047de6bc14 100644 --- a/app/Http/Controllers/Account/ReconcileController.php +++ b/app/Http/Controllers/Account/ReconcileController.php @@ -41,7 +41,6 @@ use Illuminate\Http\Request; use Illuminate\Support\Collection; use Log; use Preferences; -use Session; /** * Class ReconcileController. @@ -217,6 +216,7 @@ class ReconcileController extends Controller $transactionsUri = route('accounts.reconcile.transactions', [$account->id, '%start%', '%end%']); $overviewUri = route('accounts.reconcile.overview', [$account->id, '%start%', '%end%']); $indexUri = route('accounts.reconcile', [$account->id, '%start%', '%end%']); + return view( 'accounts.reconcile.index', compact( 'account', 'currency', 'subTitleIcon', 'start', 'end', 'subTitle', 'startBalance', 'endBalance', 'transactionsUri', @@ -370,7 +370,9 @@ class ReconcileController extends Controller $collector->setAccounts(new Collection([$account])) ->setRange($selectionStart, $selectionEnd)->withBudgetInformation()->withOpposingAccount()->withCategoryInformation(); $transactions = $collector->getJournals(); - $html = view('accounts.reconcile.transactions', compact('account', 'transactions','currency', 'start', 'end', 'selectionStart', 'selectionEnd'))->render(); + $html = view( + 'accounts.reconcile.transactions', compact('account', 'transactions', 'currency', 'start', 'end', 'selectionStart', 'selectionEnd') + )->render(); return response()->json(['html' => $html, 'startBalance' => $startBalance, 'endBalance' => $endBalance]); } @@ -441,7 +443,6 @@ class ReconcileController extends Controller $this->repository->update($journal, $data); - // @codeCoverageIgnoreStart if (1 === (int)$request->get('return_to_edit')) { session()->put('reconcile.edit.fromUpdate', true); diff --git a/app/Http/Controllers/Admin/ConfigurationController.php b/app/Http/Controllers/Admin/ConfigurationController.php index f444af9ee5..f38c2263a8 100644 --- a/app/Http/Controllers/Admin/ConfigurationController.php +++ b/app/Http/Controllers/Admin/ConfigurationController.php @@ -29,7 +29,6 @@ use FireflyIII\Http\Requests\ConfigurationRequest; use FireflyIII\Support\Facades\FireflyConfig; use Preferences; use Redirect; -use Session; use View; /** diff --git a/app/Http/Controllers/Admin/HomeController.php b/app/Http/Controllers/Admin/HomeController.php index ecd403b1f3..92d0760119 100644 --- a/app/Http/Controllers/Admin/HomeController.php +++ b/app/Http/Controllers/Admin/HomeController.php @@ -28,7 +28,6 @@ use FireflyIII\Http\Middleware\IsDemoUser; use FireflyIII\Http\Middleware\IsSandStormUser; use Illuminate\Http\Request; use Log; -use Session; /** * Class HomeController. diff --git a/app/Http/Controllers/Admin/UpdateController.php b/app/Http/Controllers/Admin/UpdateController.php index 28ae82489f..9aadf140dc 100644 --- a/app/Http/Controllers/Admin/UpdateController.php +++ b/app/Http/Controllers/Admin/UpdateController.php @@ -32,7 +32,6 @@ use FireflyIII\Services\Github\Object\Release; use FireflyIII\Services\Github\Request\UpdateRequest; use Illuminate\Http\Request; use Log; -use Session; /** * Class HomeController. diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 0f514dc232..a1df8408c6 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -30,7 +30,6 @@ use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\User; use Log; use Preferences; -use Session; use View; /** diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index b67861652d..265cd0924d 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -29,7 +29,6 @@ use Illuminate\Auth\Events\Registered; use Illuminate\Foundation\Auth\RegistersUsers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; -use Session; /** * @codeCoverageIgnore diff --git a/app/Http/Controllers/BudgetController.php b/app/Http/Controllers/BudgetController.php index f82fa49e95..f14ed31da5 100644 --- a/app/Http/Controllers/BudgetController.php +++ b/app/Http/Controllers/BudgetController.php @@ -127,8 +127,8 @@ class BudgetController extends Controller $warnText = (string)trans( 'firefly.over_budget_warn', [ - 'amount' => app('amount')->formatAnything($currency, $average, false), - 'over_amount' => app('amount')->formatAnything($currency, $current, false), + 'amount' => app('amount')->formatAnything($currency, $average, false), + 'over_amount' => app('amount')->formatAnything($currency, $current, false), ] ); } diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index ec49442c69..2e206063ff 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -34,7 +34,6 @@ use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Routing\Controller as BaseController; use Log; use Route; -use Session; use URL; use View; @@ -99,7 +98,7 @@ class Controller extends BaseController } // share language - $language = Preferences::get('language', config('firefly.default_language', 'en_US'))->data; + $language = Preferences::get('language', config('firefly.default_language', 'en_US'))->data; View::share('language', $language); View::share('shownDemo', $shownDemo); diff --git a/app/Http/Controllers/JsonController.php b/app/Http/Controllers/JsonController.php index 1ab9a93808..fddd772a25 100644 --- a/app/Http/Controllers/JsonController.php +++ b/app/Http/Controllers/JsonController.php @@ -22,10 +22,6 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers; -use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; -use FireflyIII\Repositories\Category\CategoryRepositoryInterface; -use FireflyIII\Repositories\Journal\JournalRepositoryInterface; -use FireflyIII\Repositories\Tag\TagRepositoryInterface; use Illuminate\Http\Request; /** diff --git a/app/Http/Controllers/NewUserController.php b/app/Http/Controllers/NewUserController.php index d8e7a85fe2..cf3d0223e0 100644 --- a/app/Http/Controllers/NewUserController.php +++ b/app/Http/Controllers/NewUserController.php @@ -28,7 +28,6 @@ use FireflyIII\Models\TransactionCurrency; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use Preferences; -use Session; use View; /** diff --git a/app/Http/Controllers/PiggyBankController.php b/app/Http/Controllers/PiggyBankController.php index 1e34577ae1..8fe2936832 100644 --- a/app/Http/Controllers/PiggyBankController.php +++ b/app/Http/Controllers/PiggyBankController.php @@ -35,7 +35,6 @@ use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; use Log; use Preferences; -use Session; use Symfony\Component\HttpFoundation\ParameterBag; use View; @@ -158,7 +157,7 @@ class PiggyBankController extends Controller } /** - * @param PiggyBank $piggyBank + * @param PiggyBank $piggyBank * * @return \Illuminate\Http\RedirectResponse */ @@ -210,7 +209,7 @@ class PiggyBankController extends Controller } /** - * @param Request $request + * @param Request $request * * @return View */ @@ -263,7 +262,7 @@ class PiggyBankController extends Controller } /** - * @param Request $request + * @param Request $request * * @return \Illuminate\Http\JsonResponse */ @@ -284,15 +283,15 @@ class PiggyBankController extends Controller } /** - * @param Request $request - * @param PiggyBank $piggyBank + * @param Request $request + * @param PiggyBank $piggyBank * * @return \Illuminate\Http\RedirectResponse */ public function postAdd(Request $request, PiggyBank $piggyBank) { - $amount = $request->get('amount') ?? '0'; - $currency = app('amount')->getDefaultCurrency(); + $amount = $request->get('amount') ?? '0'; + $currency = app('amount')->getDefaultCurrency(); $currencyId = (int)$this->accountRepos->getMetaValue($piggyBank->account, 'currency_id'); if ($currencyId > 0) { $currency = $this->currencyRepos->findNull($currencyId); @@ -324,15 +323,15 @@ class PiggyBankController extends Controller } /** - * @param Request $request - * @param PiggyBank $piggyBank + * @param Request $request + * @param PiggyBank $piggyBank * * @return \Illuminate\Http\RedirectResponse */ public function postRemove(Request $request, PiggyBank $piggyBank) { - $amount = $request->get('amount') ?? '0'; - $currency = app('amount')->getDefaultCurrency(); + $amount = $request->get('amount') ?? '0'; + $currency = app('amount')->getDefaultCurrency(); $currencyId = (int)$this->accountRepos->getMetaValue($piggyBank->account, 'currency_id'); if ($currencyId > 0) { $currency = $this->currencyRepos->findNull($currencyId); @@ -404,7 +403,7 @@ class PiggyBankController extends Controller } /** - * @param PiggyBank $piggyBank + * @param PiggyBank $piggyBank * * @return View */ @@ -418,7 +417,7 @@ class PiggyBankController extends Controller } /** - * @param PiggyBankFormRequest $request + * @param PiggyBankFormRequest $request * * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector */ @@ -445,8 +444,8 @@ class PiggyBankController extends Controller } /** - * @param PiggyBankFormRequest $request - * @param PiggyBank $piggyBank + * @param PiggyBankFormRequest $request + * @param PiggyBank $piggyBank * * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector */ diff --git a/app/Http/Controllers/PreferencesController.php b/app/Http/Controllers/PreferencesController.php index 2a2dedfe55..17e8adc52b 100644 --- a/app/Http/Controllers/PreferencesController.php +++ b/app/Http/Controllers/PreferencesController.php @@ -27,7 +27,6 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; use Illuminate\Http\Request; use Preferences; -use Session; use View; /** diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index dc2f2cdd3a..12c9923f6c 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -44,7 +44,6 @@ use Laravel\Passport\Passport; use Log; use phpseclib\Crypt\RSA; use Preferences; -use Session; use View; /** diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php index 7d4b3ea82f..bfb00130f7 100644 --- a/app/Http/Controllers/ReportController.php +++ b/app/Http/Controllers/ReportController.php @@ -36,7 +36,6 @@ use Illuminate\Http\RedirectResponse; use Illuminate\Support\Collection; use Log; use Preferences; -use Session; use View; /** diff --git a/app/Http/Controllers/RuleController.php b/app/Http/Controllers/RuleController.php index 55eed182cb..05cafcd305 100644 --- a/app/Http/Controllers/RuleController.php +++ b/app/Http/Controllers/RuleController.php @@ -45,7 +45,6 @@ use Illuminate\Http\Request; use Illuminate\Support\Collection; use Log; use Preferences; -use Session; use Throwable; use View; diff --git a/app/Http/Controllers/RuleGroupController.php b/app/Http/Controllers/RuleGroupController.php index 0f91704347..16c44dea94 100644 --- a/app/Http/Controllers/RuleGroupController.php +++ b/app/Http/Controllers/RuleGroupController.php @@ -33,7 +33,6 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; use Illuminate\Http\Request; use Preferences; -use Session; use View; /** diff --git a/app/Http/Controllers/TagController.php b/app/Http/Controllers/TagController.php index 0a67591875..43a8b57470 100644 --- a/app/Http/Controllers/TagController.php +++ b/app/Http/Controllers/TagController.php @@ -32,7 +32,6 @@ use FireflyIII\Support\CacheProperties; use Illuminate\Http\Request; use Illuminate\Support\Collection; use Preferences; -use Session; use View; /** diff --git a/app/Http/Controllers/Transaction/ConvertController.php b/app/Http/Controllers/Transaction/ConvertController.php index 64962a9e67..ed0aca2d5e 100644 --- a/app/Http/Controllers/Transaction/ConvertController.php +++ b/app/Http/Controllers/Transaction/ConvertController.php @@ -30,7 +30,6 @@ use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use Illuminate\Http\Request; -use Session; use View; /** diff --git a/app/Http/Controllers/Transaction/LinkController.php b/app/Http/Controllers/Transaction/LinkController.php index e12f51afd5..c238f36f01 100644 --- a/app/Http/Controllers/Transaction/LinkController.php +++ b/app/Http/Controllers/Transaction/LinkController.php @@ -30,7 +30,6 @@ use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface; use Log; use Preferences; -use Session; use URL; /** diff --git a/app/Http/Controllers/Transaction/MassController.php b/app/Http/Controllers/Transaction/MassController.php index d9aca02868..a99e87edbc 100644 --- a/app/Http/Controllers/Transaction/MassController.php +++ b/app/Http/Controllers/Transaction/MassController.php @@ -23,19 +23,22 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers\Transaction; use Carbon\Carbon; +use FireflyIII\Helpers\Collector\JournalCollectorInterface; +use FireflyIII\Helpers\Filter\NegativeAmountFilter; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Requests\MassDeleteJournalRequest; use FireflyIII\Http\Requests\MassEditBulkJournalRequest; use FireflyIII\Http\Requests\MassEditJournalRequest; use FireflyIII\Models\AccountType; +use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; -use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; +use FireflyIII\Transformers\TransactionTransformer; use Illuminate\Support\Collection; use Preferences; -use Session; +use Symfony\Component\HttpFoundation\ParameterBag; use View; /** @@ -69,7 +72,7 @@ class MassController extends Controller * * @return View */ - public function delete(Collection $journals) + public function delete(Collection $journals): View { $subTitle = trans('firefly.mass_delete_journals'); @@ -88,12 +91,12 @@ class MassController extends Controller { $ids = $request->get('confirm_mass_delete'); $set = new Collection; - if (is_array($ids)) { - /** @var int $journalId */ + if (\is_array($ids)) { + /** @var string $journalId */ foreach ($ids as $journalId) { /** @var TransactionJournal $journal */ - $journal = $this->repository->find((int)$journalId); - if (null !== $journal->id && (int)$journalId === $journal->id) { + $journal = $this->repository->findNull((int)$journalId); + if (null !== $journal && (int)$journalId === $journal->id) { $set->push($journal); } } @@ -132,75 +135,31 @@ class MassController extends Controller $budgetRepository = app(BudgetRepositoryInterface::class); $budgets = $budgetRepository->getBudgets(); - // skip transactions that have multiple destinations, multiple sources or are an opening balance. - $filtered = new Collection; - $messages = []; - /** @var TransactionJournal $journal */ - foreach ($journals as $journal) { - $sources = $this->repository->getJournalSourceAccounts($journal); - $destinations = $this->repository->getJournalDestinationAccounts($journal); - if ($sources->count() > 1) { - $messages[] = trans('firefly.cannot_edit_multiple_source', ['description' => $journal->description, 'id' => $journal->id]); - continue; - } - - if ($destinations->count() > 1) { - $messages[] = trans('firefly.cannot_edit_multiple_dest', ['description' => $journal->description, 'id' => $journal->id]); - continue; - } - if (TransactionType::OPENING_BALANCE === $this->repository->getTransactionType($journal)) { - $messages[] = trans('firefly.cannot_edit_opening_balance'); - continue; - } - - // cannot edit reconciled transactions / journals: - if ($this->repository->isJournalReconciled($journal)) { - $messages[] = trans('firefly.cannot_edit_reconciled', ['description' => $journal->description, 'id' => $journal->id]); - continue; - } - - $filtered->push($journal); - } - - if (count($messages) > 0) { - session()->flash('info', $messages); - } - // put previous url in session $this->rememberPreviousUri('transactions.mass-edit.uri'); - // collect some useful meta data for the mass edit: - $filtered->each( - function (TransactionJournal $journal) { - $transaction = $this->repository->getFirstPosTransaction($journal); - $currency = $transaction->transactionCurrency; - $journal->amount = (float)$transaction->amount; - $sources = $this->repository->getJournalSourceAccounts($journal); - $destinations = $this->repository->getJournalDestinationAccounts($journal); - $journal->transaction_count = $journal->transactions()->count(); - $journal->currency_symbol = $currency->symbol; - $journal->transaction_type_type = $journal->transactionType->type; + // use the collector to get them. + $transformer = new TransactionTransformer(new ParameterBag); + /** @var JournalCollectorInterface $collector */ + $collector = app(JournalCollectorInterface::class); + $collector->setUser(auth()->user()); + $collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation(); + $collector->setJournals($journals); + $collector->addFilter(NegativeAmountFilter::class); + $transactions = $collector->getJournals(); - $journal->foreign_amount = (float)$transaction->foreign_amount; - $journal->foreign_currency = $transaction->foreignCurrency; + // add some filters: - if (null !== $sources->first()) { - $journal->source_account_id = $sources->first()->id; - $journal->source_account_name = $sources->first()->editname; - } - if (null !== $destinations->first()) { - $journal->destination_account_id = $destinations->first()->id; - $journal->destination_account_name = $destinations->first()->editname; - } + + // transform to array + $journals = $transactions->map( + function (Transaction $transaction) use ($transformer) { + $result = $transformer->transform($transaction); + + return $result; } ); - if (0 === $filtered->count()) { - session()->flash('error', trans('firefly.no_edit_multiple_left')); - } - - $journals = $filtered; - return view('transactions.mass.edit', compact('journals', 'subTitle', 'accounts', 'budgets')); } diff --git a/app/Http/Controllers/Transaction/SingleController.php b/app/Http/Controllers/Transaction/SingleController.php index 3ef98a6fd4..325570e0b5 100644 --- a/app/Http/Controllers/Transaction/SingleController.php +++ b/app/Http/Controllers/Transaction/SingleController.php @@ -40,7 +40,6 @@ use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use Illuminate\Http\Request; use Log; use Preferences; -use Session; use View; /** diff --git a/app/Http/Controllers/Transaction/SplitController.php b/app/Http/Controllers/Transaction/SplitController.php index 936b5cf15b..e3e1fe1116 100644 --- a/app/Http/Controllers/Transaction/SplitController.php +++ b/app/Http/Controllers/Transaction/SplitController.php @@ -42,7 +42,6 @@ use FireflyIII\Transformers\TransactionTransformer; use Illuminate\Http\Request; use Illuminate\Support\Collection; use Preferences; -use Session; use Steam; use Symfony\Component\HttpFoundation\ParameterBag; use View; @@ -143,7 +142,7 @@ class SplitController extends Controller if ($this->isOpeningBalance($journal)) { return $this->redirectToAccount($journal); // @codeCoverageIgnore } - $data = $request->getAll(); + $data = $request->getAll(); // keep current bill: $data['bill_id'] = $journal->bill_id; @@ -221,7 +220,7 @@ class SplitController extends Controller $array['transactions'] = $this->updateWithPrevious($array['transactions'], $request->old()); // update journal amount and foreign amount: - $array['journal_amount'] = array_sum(array_column($array['transactions'], 'amount')); + $array['journal_amount'] = array_sum(array_column($array['transactions'], 'amount')); $array['journal_foreign_amount'] = array_sum(array_column($array['transactions'], 'foreign_amount')); return $array; diff --git a/app/Repositories/Journal/JournalRepository.php b/app/Repositories/Journal/JournalRepository.php index 4847148cff..69c99fa925 100644 --- a/app/Repositories/Journal/JournalRepository.php +++ b/app/Repositories/Journal/JournalRepository.php @@ -132,6 +132,20 @@ class JournalRepository implements JournalRepositoryInterface return $journal; } + /** + * Find a specific journal. + * + * @param int $journalId + * + * @deprecated + * + * @return TransactionJournal|null + */ + public function findNull(int $journalId): ?TransactionJournal + { + return $this->user->transactionJournals()->where('id', $journalId)->first(); + } + /** * @param Transaction $transaction * diff --git a/app/Repositories/Journal/JournalRepositoryInterface.php b/app/Repositories/Journal/JournalRepositoryInterface.php index a3738e4c69..86190749ed 100644 --- a/app/Repositories/Journal/JournalRepositoryInterface.php +++ b/app/Repositories/Journal/JournalRepositoryInterface.php @@ -68,11 +68,22 @@ interface JournalRepositoryInterface * Find a specific journal. * * @param int $journalId + * @deprecated * * @return TransactionJournal */ public function find(int $journalId): TransactionJournal; + /** + * Find a specific journal. + * + * @param int $journalId + * @deprecated + * + * @return TransactionJournal|null + */ + public function findNull(int $journalId): ?TransactionJournal; + /** * @param Transaction $transaction * diff --git a/app/Transformers/TransactionTransformer.php b/app/Transformers/TransactionTransformer.php index 0a12a23c2a..1956162c06 100644 --- a/app/Transformers/TransactionTransformer.php +++ b/app/Transformers/TransactionTransformer.php @@ -157,16 +157,12 @@ class TransactionTransformer extends TransformerAbstract $categoryName = null; $budgetId = null; $budgetName = null; - $categoryId = null === $transaction->transaction_category_id ? $transaction->transaction_journal_category_id - : $transaction->transaction_category_id; - $categoryName = null === $transaction->transaction_category_name ? $transaction->transaction_journal_category_name - : $transaction->transaction_category_name; + $categoryId = $transaction->transaction_category_id ?? $transaction->transaction_journal_category_id; + $categoryName = $transaction->transaction_category_name ?? $transaction->transaction_journal_category_name; if ($transaction->transaction_type_type === TransactionType::WITHDRAWAL) { - $budgetId = null === $transaction->transaction_budget_id ? $transaction->transaction_journal_budget_id - : $transaction->transaction_budget_id; - $budgetName = null === $transaction->transaction_budget_name ? $transaction->transaction_journal_budget_name - : $transaction->transaction_budget_name; + $budgetId = $transaction->transaction_budget_id ?? $transaction->transaction_journal_budget_id; + $budgetName = $transaction->transaction_budget_name ?? $transaction->transaction_journal_budget_name; } /** @var Note $dbNote */ $dbNote = $transaction->transactionJournal->notes()->first(); @@ -250,7 +246,7 @@ class TransactionTransformer extends TransformerAbstract } // expand description. - if (strlen((string)$transaction->transaction_description) > 0) { + if (\strlen((string)$transaction->transaction_description) > 0) { $data['description'] = $transaction->transaction_description . ' (' . $transaction->description . ')'; } diff --git a/resources/views/transactions/mass/edit.twig b/resources/views/transactions/mass/edit.twig index 285308adbe..1da5e566db 100644 --- a/resources/views/transactions/mass/edit.twig +++ b/resources/views/transactions/mass/edit.twig @@ -30,105 +30,101 @@