diff --git a/app/Http/Controllers/Settings/Categories.php b/app/Http/Controllers/Settings/Categories.php index ebead8492..4bbad1a59 100644 --- a/app/Http/Controllers/Settings/Categories.php +++ b/app/Http/Controllers/Settings/Categories.php @@ -20,8 +20,12 @@ class Categories extends Controller $transfer_id = Category::transfer(); - $types = collect(['expense' => 'Expense', 'income' => 'Income', 'item' => 'Item', 'other' => 'Other']) - ->prepend(trans('general.all_type', ['type' => trans_choice('general.types', 2)]), ''); + $types = collect([ + 'expense' => trans_choice('general.expenses', 1), + 'income' => trans_choice('general.incomes', 1), + 'item' => trans_choice('general.items', 1), + 'other' => trans_choice('general.others', 1), + ])->prepend(trans('general.all_type', ['type' => trans_choice('general.types', 2)]), ''); return view('settings.categories.index', compact('categories', 'types', 'transfer_id')); } @@ -43,7 +47,14 @@ class Categories extends Controller */ public function create() { - return view('settings.categories.create'); + $types = [ + 'expense' => trans_choice('general.expenses', 1), + 'income' => trans_choice('general.incomes', 1), + 'item' => trans_choice('general.items', 1), + 'other' => trans_choice('general.others', 1), + ]; + + return view('settings.categories.create', compact('types')); } /** @@ -73,9 +84,16 @@ class Categories extends Controller */ public function edit(Category $category) { - $transfer_id = Category::transfer(); + $types = [ + 'expense' => trans_choice('general.expenses', 1), + 'income' => trans_choice('general.incomes', 1), + 'item' => trans_choice('general.items', 1), + 'other' => trans_choice('general.others', 1), + ]; - return view('settings.categories.edit', compact('category', 'transfer_id')); + $type_disabled = (Category::where('type', $category->type)->count() == 1) ?: false; + + return view('settings.categories.edit', compact('category', 'types', 'type_disabled')); } /** @@ -122,6 +140,15 @@ class Categories extends Controller */ public function destroy(Category $category) { + // Can not delete the last category by type + if (Category::where('type', $category->type)->count() == 1) { + $message = trans('messages.error.last_category', ['type' => strtolower(trans_choice('general.' . $category->type . 's', 1))]); + + flash($message)->warning(); + + return redirect('settings/categories'); + } + $relationships = $this->countRelationships($category, [ 'items' => 'items', 'invoices' => 'invoices', @@ -130,11 +157,6 @@ class Categories extends Controller 'payments' => 'payments', ]); - // Can't delete transfer category - if ($category->id == Category::transfer()) { - return redirect('settings/categories'); - } - if (empty($relationships)) { $category->delete(); diff --git a/resources/lang/en-GB/general.php b/resources/lang/en-GB/general.php index 627a417e7..530c03a9e 100644 --- a/resources/lang/en-GB/general.php +++ b/resources/lang/en-GB/general.php @@ -37,6 +37,7 @@ return [ 'updates' => 'Update|Updates', 'numbers' => 'Number|Numbers', 'statuses' => 'Status|Statuses', + 'others' => 'Other|Others', 'dashboard' => 'Dashboard', 'banking' => 'Banking', diff --git a/resources/lang/en-GB/messages.php b/resources/lang/en-GB/messages.php index 491beb1c2..63825167f 100644 --- a/resources/lang/en-GB/messages.php +++ b/resources/lang/en-GB/messages.php @@ -14,6 +14,7 @@ return [ 'not_user_company' => 'Error: You are not allowed to manage this company!', 'customer' => 'Error: User not created! :name already uses this email address.', 'no_file' => 'Error: No file selected!', + 'last_category' => 'Error: Can not delete the last :type category!', ], 'warning' => [ 'deleted' => 'Warning: You are not allowed to delete :name because it has :text related.', diff --git a/resources/views/settings/categories/create.blade.php b/resources/views/settings/categories/create.blade.php index ab398ae85..c0f3fdab3 100644 --- a/resources/views/settings/categories/create.blade.php +++ b/resources/views/settings/categories/create.blade.php @@ -10,7 +10,7 @@