diff --git a/app/Http/Controllers/Account/EditController.php b/app/Http/Controllers/Account/EditController.php index 5fad8ba628..d55afb0d69 100644 --- a/app/Http/Controllers/Account/EditController.php +++ b/app/Http/Controllers/Account/EditController.php @@ -27,7 +27,6 @@ namespace FireflyIII\Http\Controllers\Account; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Requests\AccountFormRequest; use FireflyIII\Models\Account; -use FireflyIII\Models\Note; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use Illuminate\Http\Request; @@ -70,6 +69,9 @@ class EditController extends Controller * @param AccountRepositoryInterface $repository * * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + * + * @SuppressWarnings(PHPMD.CyclomaticComplexity) + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function edit(Request $request, Account $account, AccountRepositoryInterface $repository) { @@ -87,9 +89,6 @@ class EditController extends Controller } $request->session()->forget('accounts.edit.fromUpdate'); - // pre fill some useful values. - - // the opening balance is tricky: $openingBalanceAmount = (string)$repository->getOpeningBalanceAmount($account); $openingBalanceDate = $repository->getOpeningBalanceDate($account); $default = app('amount')->getDefaultCurrency(); @@ -110,14 +109,9 @@ class EditController extends Controller 'openingBalance' => $openingBalanceAmount, 'virtualBalance' => $account->virtual_balance, 'currency_id' => $currency->id, - 'notes' => '', + 'notes' => $this->repository->getNoteText($account), 'active' => $hasOldInput ? (bool)$request->old('active') : $account->active, ]; - /** @var Note $note */ - $note = $this->repository->getNote($account); - if (null !== $note) { - $preFilled['notes'] = $note->text; - } $request->session()->flash('preFilled', $preFilled); diff --git a/app/Http/Controllers/Account/IndexController.php b/app/Http/Controllers/Account/IndexController.php new file mode 100644 index 0000000000..199dfa7924 --- /dev/null +++ b/app/Http/Controllers/Account/IndexController.php @@ -0,0 +1,126 @@ +. + */ +/** @noinspection CallableParameterUseCaseInTypeContextInspection */ +declare(strict_types=1); + +namespace FireflyIII\Http\Controllers\Account; + +use Carbon\Carbon; +use FireflyIII\Http\Controllers\Controller; +use FireflyIII\Models\Account; +use FireflyIII\Repositories\Account\AccountRepositoryInterface; +use Illuminate\Http\Request; +use Illuminate\Pagination\LengthAwarePaginator; +use Preferences; + +/** + * + * Class IndexController + */ +class IndexController extends Controller +{ + /** @var AccountRepositoryInterface */ + private $repository; + + /** + * + */ + public function __construct() + { + parent::__construct(); + + // translations: + $this->middleware( + function ($request, $next) { + app('view')->share('mainTitleIcon', 'fa-credit-card'); + app('view')->share('title', trans('firefly.accounts')); + + $this->repository = app(AccountRepositoryInterface::class); + + return $next($request); + } + ); + } + + /** + * @param Request $request + * @param string $what + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function index(Request $request, string $what) + { + $what = $what ?? 'asset'; + $subTitle = trans('firefly.' . $what . '_accounts'); + $subTitleIcon = config('firefly.subIconsByIdentifier.' . $what); + $types = config('firefly.accountTypesByIdentifier.' . $what); + $collection = $this->repository->getAccountsByType($types); + $total = $collection->count(); + $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); + $pageSize = (int)Preferences::get('listPageSize', 50)->data; + $accounts = $collection->slice(($page - 1) * $pageSize, $pageSize); + unset($collection); + /** @var Carbon $start */ + $start = clone session('start', Carbon::now()->startOfMonth()); + /** @var Carbon $end */ + $end = clone session('end', Carbon::now()->endOfMonth()); + $start->subDay(); + + $ids = $accounts->pluck('id')->toArray(); + $startBalances = app('steam')->balancesByAccounts($accounts, $start); + $endBalances = app('steam')->balancesByAccounts($accounts, $end); + $activities = app('steam')->getLastActivities($ids); + + $accounts->each( + function (Account $account) use ($activities, $startBalances, $endBalances) { + $account->lastActivityDate = $this->isInArray($activities, $account->id); + $account->startBalance = $this->isInArray($startBalances, $account->id); + $account->endBalance = $this->isInArray($endBalances, $account->id); + $account->difference = bcsub($account->endBalance, $account->startBalance); + } + ); + + // make paginator: + $accounts = new LengthAwarePaginator($accounts, $total, $pageSize, $page); + $accounts->setPath(route('accounts.index', [$what])); + + return view('accounts.index', compact('what', 'subTitleIcon', 'subTitle', 'page', 'accounts')); + } + + + /** + * @param array $array + * @param int $entryId + * + * @return null|mixed + */ + protected function isInArray(array $array, int $entryId) + { + $result = '0'; + if (isset($array[$entryId])) { + $result = $array[$entryId]; + } + + return $result; + } + + +} diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/Account/ShowController.php similarity index 77% rename from app/Http/Controllers/AccountController.php rename to app/Http/Controllers/Account/ShowController.php index 58ddb87578..7ef899cba9 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/Account/ShowController.php @@ -1,7 +1,7 @@ . */ -/** @noinspection CallableParameterUseCaseInTypeContextInspection */ + declare(strict_types=1); -namespace FireflyIII\Http\Controllers; +namespace FireflyIII\Http\Controllers\Account; use Carbon\Carbon; -use ExpandedForm; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Collector\JournalCollectorInterface; -use FireflyIII\Http\Requests\AccountFormRequest; +use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; use FireflyIII\Models\Transaction; @@ -36,16 +35,15 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\CacheProperties; use Illuminate\Http\Request; -use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; use Preferences; use View; /** - * Class AccountController. * + * Class ShowController */ -class AccountController extends Controller +class ShowController extends Controller { /** @var CurrencyRepositoryInterface */ private $currencyRepos; @@ -73,53 +71,6 @@ class AccountController extends Controller ); } - /** - * @param Request $request - * @param string $what - * - * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View - */ - public function index(Request $request, string $what) - { - $what = $what ?? 'asset'; - $subTitle = trans('firefly.' . $what . '_accounts'); - $subTitleIcon = config('firefly.subIconsByIdentifier.' . $what); - $types = config('firefly.accountTypesByIdentifier.' . $what); - $collection = $this->repository->getAccountsByType($types); - $total = $collection->count(); - $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); - $pageSize = (int)Preferences::get('listPageSize', 50)->data; - $accounts = $collection->slice(($page - 1) * $pageSize, $pageSize); - unset($collection); - /** @var Carbon $start */ - $start = clone session('start', Carbon::now()->startOfMonth()); - /** @var Carbon $end */ - $end = clone session('end', Carbon::now()->endOfMonth()); - $start->subDay(); - - $ids = $accounts->pluck('id')->toArray(); - $startBalances = app('steam')->balancesByAccounts($accounts, $start); - $endBalances = app('steam')->balancesByAccounts($accounts, $end); - $activities = app('steam')->getLastActivities($ids); - - $accounts->each( - function (Account $account) use ($activities, $startBalances, $endBalances) { - $account->lastActivityDate = $this->isInArray($activities, $account->id); - $account->startBalance = $this->isInArray($startBalances, $account->id); - $account->endBalance = $this->isInArray($endBalances, $account->id); - $account->difference = bcsub($account->endBalance, $account->startBalance); - } - ); - - // make paginator: - $accounts = new LengthAwarePaginator($accounts, $total, $pageSize, $page); - $accounts->setPath(route('accounts.index', [$what])); - - return view('accounts.index', compact('what', 'subTitleIcon', 'subTitle', 'page', 'accounts')); - } - - - /** @noinspection MoreThanThreeArgumentsInspection */ /** * Show an account. * @@ -138,17 +89,12 @@ class AccountController extends Controller if (AccountType::INITIAL_BALANCE === $account->accountType->type) { return $this->redirectToOriginalAccount($account); } - if (null === $start) { - $start = session('start'); - } - if (null === $end) { - $end = session('end'); - } + $start = $start ?? session('start'); + $end = $end ?? session('end'); if ($end < $start) { throw new FireflyException('End is after start!'); // @codeCoverageIgnore } - $what = config(sprintf('firefly.shortNamesByFullName.%s', $account->accountType->type)); // used for menu $today = new Carbon; $subTitleIcon = config(sprintf('firefly.subIconsByIdentifier.%s', $account->accountType->type)); @@ -178,7 +124,6 @@ class AccountController extends Controller ); } - /** * Show an account. * @@ -222,22 +167,9 @@ class AccountController extends Controller ); } - /** - * @param array $array - * @param int $entryId - * - * @return null|mixed - */ - protected function isInArray(array $array, int $entryId) - { - $result = '0'; - if (isset($array[$entryId])) { - $result = $array[$entryId]; - } - return $result; - } + /** @noinspection MoreThanThreeArgumentsInspection */ /** * This method returns "period entries", so nov-2015, dec-2015, etc etc (this depends on the users session range) @@ -250,6 +182,7 @@ class AccountController extends Controller * * @return Collection * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ private function getPeriodOverview(Account $account, ?Carbon $date): Collection { @@ -332,4 +265,4 @@ class AccountController extends Controller return redirect(route('accounts.show', [$opposingTransaction->account_id])); } -} +} \ No newline at end of file diff --git a/app/Http/Controllers/Auth/TwoFactorController.php b/app/Http/Controllers/Auth/TwoFactorController.php index 3bc779fde6..80bc9de73e 100644 --- a/app/Http/Controllers/Auth/TwoFactorController.php +++ b/app/Http/Controllers/Auth/TwoFactorController.php @@ -42,7 +42,7 @@ class TwoFactorController extends Controller * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View * * @throws FireflyException - * + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function index(Request $request) { diff --git a/routes/web.php b/routes/web.php index 9de923e8c3..a3deac49cd 100755 --- a/routes/web.php +++ b/routes/web.php @@ -108,8 +108,9 @@ Route::group( */ Route::group( ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'accounts', 'as' => 'accounts.'], function () { - Route::get('{what}', ['uses' => 'AccountController@index', 'as' => 'index'])->where('what', 'revenue|asset|expense'); + // show: + Route::get('{what}', ['uses' => 'Account\IndexController@index', 'as' => 'index'])->where('what', 'revenue|asset|expense'); // create Route::get('create/{what}', ['uses' => 'Account\CreateController@create', 'as' => 'create'])->where('what', 'revenue|asset|expense'); @@ -125,8 +126,8 @@ Route::group( Route::post('destroy/{account}', ['uses' => 'Account\DeleteController@destroy', 'as' => 'destroy']); // show - Route::get('show/{account}/all', ['uses' => 'AccountController@showAll', 'as' => 'show.all']); - Route::get('show/{account}/{start_date?}/{end_date?}', ['uses' => 'AccountController@show', 'as' => 'show']); + Route::get('show/{account}/all', ['uses' => 'Account\ShowController@showAll', 'as' => 'show.all']); + Route::get('show/{account}/{start_date?}/{end_date?}', ['uses' => 'Account\ShowController@show', 'as' => 'show']); // reconcile routes: Route::get('reconcile/{account}/index/{start_date?}/{end_date?}', ['uses' => 'Account\ReconcileController@reconcile', 'as' => 'reconcile']); diff --git a/tests/Feature/Controllers/Account/DeleteControllerTest.php b/tests/Feature/Controllers/Account/DeleteControllerTest.php index 5269cd3927..7133f2f7dc 100644 --- a/tests/Feature/Controllers/Account/DeleteControllerTest.php +++ b/tests/Feature/Controllers/Account/DeleteControllerTest.php @@ -31,13 +31,21 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use Illuminate\Support\Collection; use Tests\TestCase; - +use Log; /** * * Class DeleteControllerTest */ class DeleteControllerTest extends TestCase { + /** + * + */ + public function setUp(): void + { + parent::setUp(); + Log::debug(sprintf('Now in %s.', \get_class($this))); + } /** * @covers \FireflyIII\Http\Controllers\Account\DeleteController * @covers \FireflyIII\Http\Controllers\Controller diff --git a/tests/Feature/Controllers/Account/EditControllerTest.php b/tests/Feature/Controllers/Account/EditControllerTest.php index 69f0832259..d9b45c48e7 100644 --- a/tests/Feature/Controllers/Account/EditControllerTest.php +++ b/tests/Feature/Controllers/Account/EditControllerTest.php @@ -34,22 +34,26 @@ use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use Illuminate\Support\Collection; use Mockery; use Tests\TestCase; - +use Log; /** * * Class EditControllerTest */ class EditControllerTest extends TestCase { - + /** + * + */ + public function setUp(): void + { + parent::setUp(); + Log::debug(sprintf('Now in %s.', \get_class($this))); + } /** * @covers \FireflyIII\Http\Controllers\Account\EditController */ public function testEdit(): void { - $note = new Note(); - $note->text = 'This is a test'; - // mock stuff $journalRepos = $this->mock(JournalRepositoryInterface::class); $repository = $this->mock(CurrencyRepositoryInterface::class); $accountRepos = $this->mock(AccountRepositoryInterface::class); @@ -57,7 +61,7 @@ class EditControllerTest extends TestCase $repository->shouldReceive('findNull')->once()->andReturn(TransactionCurrency::find(1)); $repository->shouldReceive('get')->andReturn(new Collection); $journalRepos->shouldReceive('firstNull')->once()->andReturn(new TransactionJournal); - $accountRepos->shouldReceive('getNote')->andReturn($note)->once(); + $accountRepos->shouldReceive('getNoteText')->andReturn('Some text')->once(); $accountRepos->shouldReceive('getOpeningBalanceAmount')->andReturnNull(); $accountRepos->shouldReceive('getOpeningBalanceDate')->andReturnNull(); $accountRepos->shouldReceive('getMetaValue')->withArgs([Mockery::any(), 'currency_id'])->andReturn('1'); @@ -73,7 +77,7 @@ class EditControllerTest extends TestCase $response->assertStatus(200); // has bread crumb $response->assertSee('