diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index 682c344f5e..44026114aa 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -3,6 +3,7 @@ use Auth; use Carbon\Carbon; use Config; +use ExpandedForm; use FireflyIII\Http\Requests\AccountFormRequest; use FireflyIII\Models\Account; use FireflyIII\Repositories\Account\AccountRepositoryInterface; @@ -57,17 +58,19 @@ class AccountController extends Controller * * @return \Illuminate\View\View */ - public function delete(Account $account) + public function delete(AccountRepositoryInterface $repository, Account $account) { - $typeName = Config::get('firefly.shortNamesByFullName.' . $account->accountType->type); - $subTitle = trans('firefly.delete_' . $typeName . '_account', ['name' => $account->name]); + $typeName = Config::get('firefly.shortNamesByFullName.' . $account->accountType->type); + $subTitle = trans('firefly.delete_' . $typeName . '_account', ['name' => $account->name]); + $accountList = Expandedform::makeSelectList($repository->getAccounts([$account->accountType->type]), true); + unset($accountList[$account->id]); // put previous url in session Session::put('accounts.delete.url', URL::previous()); Session::flash('gaEventCategory', 'accounts'); Session::flash('gaEventAction', 'delete-' . $typeName); - return view('accounts.delete', compact('account', 'subTitle')); + return view('accounts.delete', compact('account', 'subTitle', 'accountList')); } /** @@ -78,12 +81,12 @@ class AccountController extends Controller */ public function destroy(AccountRepositoryInterface $repository, Account $account) { - $type = $account->accountType->type; $typeName = Config::get('firefly.shortNamesByFullName.' . $type); $name = $account->name; + $moveTo = Auth::user()->accounts()->find(intval(Input::get('move_account_before_delete'))); - $repository->destroy($account); + $repository->destroy($account, $moveTo); Session::flash('success', trans('firefly.' . $typeName . '_deleted', ['name' => $name])); Preferences::mark(); diff --git a/app/Repositories/Account/AccountRepository.php b/app/Repositories/Account/AccountRepository.php index bf13acfafd..3dd955bcfc 100644 --- a/app/Repositories/Account/AccountRepository.php +++ b/app/Repositories/Account/AccountRepository.php @@ -46,11 +46,17 @@ class AccountRepository implements AccountRepositoryInterface /** * @param Account $account + * @param Account $moveTo * * @return boolean */ - public function destroy(Account $account) + public function destroy(Account $account, Account $moveTo = null) { + if (!is_null($moveTo)) { + // update all transactions: + DB::table('transactions')->where('account_id', $account->id)->update(['account_id' => $moveTo->id]); + } + $account->delete(); return true; diff --git a/app/Repositories/Account/AccountRepositoryInterface.php b/app/Repositories/Account/AccountRepositoryInterface.php index 605f8c15c2..a9a393c0c4 100644 --- a/app/Repositories/Account/AccountRepositoryInterface.php +++ b/app/Repositories/Account/AccountRepositoryInterface.php @@ -26,10 +26,11 @@ interface AccountRepositoryInterface /** * @param Account $account + * @param Account $moveTo * * @return boolean */ - public function destroy(Account $account); + public function destroy(Account $account, Account $moveTo = null); /** * @param array $types diff --git a/resources/lang/en/firefly.php b/resources/lang/en/firefly.php index dc03c468a3..fbc37815cc 100644 --- a/resources/lang/en/firefly.php +++ b/resources/lang/en/firefly.php @@ -204,6 +204,7 @@ return [ 'accountExtraHelp_expense' => '', 'accountExtraHelp_revenue' => '', 'account_type' => 'Account type', + 'save_transactions_by_moving' => 'Save these transaction(s) by moving them to another account:', // categories: 'new_category' => 'New category', diff --git a/resources/lang/nl/firefly.php b/resources/lang/nl/firefly.php index b367f336d5..303012b75d 100644 --- a/resources/lang/nl/firefly.php +++ b/resources/lang/nl/firefly.php @@ -206,6 +206,7 @@ return [ ' Ze hebben een schuld (debet) aan jou. De term komt uit de wereld van de boekhouding.' . ' De inkomsten die je hier ziet zijn negatief, want je kijkt uit hun perspectief. Zodra een debiteur geld naar jou ' . 'overmaakt gaat het er bij hen af (negatief).', + 'save_transactions_by_moving' => 'Bewaar deze transacties door ze aan een andere rekening te koppelen:', // categories: 'new_category' => 'Nieuwe categorie', diff --git a/resources/twig/accounts/delete.twig b/resources/twig/accounts/delete.twig index a5066bee5a..a3ccf25444 100644 --- a/resources/twig/accounts/delete.twig +++ b/resources/twig/accounts/delete.twig @@ -30,6 +30,12 @@ {{ Lang.choice('form.also_delete_piggyBanks', account.piggyBanks|length, {count: account.piggyBanks|length}) }} {% endif %}
++ {{ 'save_transactions_by_moving'|_ }} +
++ {{ Form.select('move_account_before_delete', accountList, null, {class: 'form-control'}) }} +