diff --git a/app/Http/Controllers/Json/AutoCompleteController.php b/app/Http/Controllers/Json/AutoCompleteController.php new file mode 100644 index 0000000000..28dc7495d8 --- /dev/null +++ b/app/Http/Controllers/Json/AutoCompleteController.php @@ -0,0 +1,101 @@ +getAccountsByType( + [AccountType::REVENUE, AccountType::EXPENSE, AccountType::BENEFICIARY, AccountType::DEFAULT, AccountType::ASSET] + )->pluck('name')->toArray() + ); + sort($return); + + return Response::json($return); + + } + + /** + * Returns a JSON list of all beneficiaries. + * + * @param AccountRepositoryInterface $repository + * + * @return \Illuminate\Http\JsonResponse + * + */ + public function expenseAccounts(AccountRepositoryInterface $repository) + { + $set = $repository->getAccountsByType([AccountType::EXPENSE, AccountType::BENEFICIARY]); + $filtered = $set->filter( + function (Account $account) { + if ($account->active) { + return $account; + } + + return false; + } + ); + $return = array_unique($filtered->pluck('name')->toArray()); + + sort($return); + + return Response::json($return); + } + + /** + * @param AccountRepositoryInterface $repository + * + * @return \Illuminate\Http\JsonResponse + * + */ + public function revenueAccounts(AccountRepositoryInterface $repository) + { + $set = $repository->getAccountsByType([AccountType::REVENUE]); + $filtered = $set->filter( + function (Account $account) { + if ($account->active) { + return $account; + } + + return false; + } + ); + $return = array_unique($filtered->pluck('name')->toArray()); + sort($return); + + return Response::json($return); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/JsonController.php b/app/Http/Controllers/JsonController.php index 849b0631f9..06a4aa4d1d 100644 --- a/app/Http/Controllers/JsonController.php +++ b/app/Http/Controllers/JsonController.php @@ -62,27 +62,6 @@ class JsonController extends Controller return Response::json(['html' => $view]); } - /** - * Returns a JSON list of all accounts. - * - * @param AccountRepositoryInterface $repository - * - * @return \Illuminate\Http\JsonResponse - * - */ - public function allAccounts(AccountRepositoryInterface $repository) - { - $return = array_unique( - $repository->getAccountsByType( - [AccountType::REVENUE, AccountType::EXPENSE, AccountType::BENEFICIARY, AccountType::DEFAULT, AccountType::ASSET] - )->pluck('name')->toArray() - ); - sort($return); - - return Response::json($return); - - } - /** * @param JournalCollectorInterface $collector * @@ -235,36 +214,6 @@ class JsonController extends Controller return Response::json($return); } - /** - * Returns a JSON list of all beneficiaries. - * - * @param AccountRepositoryInterface $repository - * - * @return \Illuminate\Http\JsonResponse - * - */ - public function expenseAccounts(AccountRepositoryInterface $repository) - { - $return = array_unique($repository->getAccountsByType([AccountType::EXPENSE, AccountType::BENEFICIARY])->pluck('name')->toArray()); - sort($return); - - return Response::json($return); - } - - /** - * @param AccountRepositoryInterface $repository - * - * @return \Illuminate\Http\JsonResponse - * - */ - public function revenueAccounts(AccountRepositoryInterface $repository) - { - $return = array_unique($repository->getAccountsByType([AccountType::REVENUE])->pluck('name')->toArray()); - sort($return); - - return Response::json($return); - } - /** * Returns a JSON list of all beneficiaries. * diff --git a/app/Repositories/Account/FindAccountsTrait.php b/app/Repositories/Account/FindAccountsTrait.php index e06a598a47..6bd9a42d45 100644 --- a/app/Repositories/Account/FindAccountsTrait.php +++ b/app/Repositories/Account/FindAccountsTrait.php @@ -205,10 +205,12 @@ trait FindAccountsTrait */ public function getCashAccount(): Account { - $type = AccountType::where('type', AccountType::CASH)->first(); - $account = Account::firstOrCreateEncrypted( - ['user_id' => $this->user->id, 'account_type_id' => $type->id, 'name' => 'Cash account', 'active' => 1] + $type = AccountType::where('type', AccountType::CASH)->first(); + $account = Account::firstOrCreateEncrypted( + ['user_id' => $this->user->id, 'account_type_id' => $type->id, 'name' => 'Cash account'] ); + $account->active = true; + $account->save(); return $account; } diff --git a/app/Repositories/Journal/SupportJournalsTrait.php b/app/Repositories/Journal/SupportJournalsTrait.php index df57879971..ee36766599 100644 --- a/app/Repositories/Journal/SupportJournalsTrait.php +++ b/app/Repositories/Journal/SupportJournalsTrait.php @@ -117,8 +117,11 @@ trait SupportJournalsTrait if (strlen($data['source_account_name']) > 0) { $sourceType = AccountType::where('type', 'Revenue account')->first(); $sourceAccount = Account::firstOrCreateEncrypted( - ['user_id' => $user->id, 'account_type_id' => $sourceType->id, 'name' => $data['source_account_name'], 'active' => 1] + ['user_id' => $user->id, 'account_type_id' => $sourceType->id, 'name' => $data['source_account_name']] ); + // always make account active + $sourceAccount->active = true; + $sourceAccount->save(); Log::debug(sprintf('source account name is "%s", account is %d', $data['source_account_name'], $sourceAccount->id)); @@ -132,8 +135,11 @@ trait SupportJournalsTrait $sourceType = AccountType::where('type', AccountType::CASH)->first(); $sourceAccount = Account::firstOrCreateEncrypted( - ['user_id' => $user->id, 'account_type_id' => $sourceType->id, 'name' => 'Cash account', 'active' => 1] + ['user_id' => $user->id, 'account_type_id' => $sourceType->id, 'name' => 'Cash account'] ); + // always make account active + $sourceAccount->active = true; + $sourceAccount->save(); return [ 'source' => $sourceAccount, @@ -161,10 +167,13 @@ trait SupportJournalsTrait 'user_id' => $user->id, 'account_type_id' => $destinationType->id, 'name' => $data['destination_account_name'], - 'active' => 1, ] ); + // always make account active + $destinationAccount->active = true; + $destinationAccount->save(); + Log::debug(sprintf('destination account name is "%s", account is %d', $data['destination_account_name'], $destinationAccount->id)); return [ @@ -175,8 +184,11 @@ trait SupportJournalsTrait Log::debug('destination_account_name is empty, so default to cash account!'); $destinationType = AccountType::where('type', AccountType::CASH)->first(); $destinationAccount = Account::firstOrCreateEncrypted( - ['user_id' => $user->id, 'account_type_id' => $destinationType->id, 'name' => 'Cash account', 'active' => 1] + ['user_id' => $user->id, 'account_type_id' => $destinationType->id, 'name' => 'Cash account'] ); + // always make account active + $destinationAccount->active = true; + $destinationAccount->save(); return [ 'source' => $sourceAccount, diff --git a/routes/web.php b/routes/web.php index 5557e08cf1..403958be0a 100755 --- a/routes/web.php +++ b/routes/web.php @@ -430,9 +430,9 @@ Route::group( */ Route::group( ['middleware' => 'user-full-auth', 'prefix' => 'json', 'as' => 'json.'], function () { - Route::get('expense-accounts', ['uses' => 'JsonController@expenseAccounts', 'as' => 'expense-accounts']); - Route::get('all-accounts', ['uses' => 'JsonController@allAccounts', 'as' => 'all-accounts']); - Route::get('revenue-accounts', ['uses' => 'JsonController@revenueAccounts', 'as' => 'revenue-accounts']); + Route::get('expense-accounts', ['uses' => 'Json\AutoCompleteController@expenseAccounts', 'as' => 'expense-accounts']); + Route::get('all-accounts', ['uses' => 'Json\AutoCompleteController@allAccounts', 'as' => 'all-accounts']); + Route::get('revenue-accounts', ['uses' => 'Json\AutoCompleteController@revenueAccounts', 'as' => 'revenue-accounts']); Route::get('categories', ['uses' => 'JsonController@categories', 'as' => 'categories']); Route::get('budgets', ['uses' => 'JsonController@budgets', 'as' => 'budgets']); Route::get('tags', ['uses' => 'JsonController@tags', 'as' => 'tags']);