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 @@
{{ Form::textGroup('name', trans('general.name'), 'id-card-o') }} - {{ Form::selectGroup('type', trans_choice('general.types', 1), 'bars', ['expense' => 'Expense', 'income' => 'Income', 'item' => 'Item', 'other' => 'Other'], config('general.types')) }} + {{ Form::selectGroup('type', trans_choice('general.types', 1), 'bars', $types, config('general.types')) }}
{!! Form::label('color', trans('general.color'), ['class' => 'control-label']) !!} diff --git a/resources/views/settings/categories/edit.blade.php b/resources/views/settings/categories/edit.blade.php index 4f993b9f1..cb47eee2f 100644 --- a/resources/views/settings/categories/edit.blade.php +++ b/resources/views/settings/categories/edit.blade.php @@ -14,11 +14,11 @@
{{ Form::textGroup('name', trans('general.name'), 'id-card-o') }} - @if ($category->id == $transfer_id) - {{ Form::selectGroup('type', trans_choice('general.types', 1), 'bars', ['expense' => 'Expense', 'income' => 'Income', 'item' => 'Item', 'other' => 'Other'], null, ['required' => 'required', 'disabled' => 'disabled']) }} - + @if ($type_disabled) + {{ Form::selectGroup('type', trans_choice('general.types', 1), 'bars', $types, null, ['required' => 'required', 'disabled' => 'disabled']) }} + @else - {{ Form::selectGroup('type', trans_choice('general.types', 1), 'bars', ['expense' => 'Expense', 'income' => 'Income', 'item' => 'Item', 'other' => 'Other']) }} + {{ Form::selectGroup('type', trans_choice('general.types', 1), 'bars', $types) }} @endif