diff --git a/app/Http/Controllers/Api/CategoriesController.php b/app/Http/Controllers/Api/CategoriesController.php index c518813405..91b0d7f7dc 100644 --- a/app/Http/Controllers/Api/CategoriesController.php +++ b/app/Http/Controllers/Api/CategoriesController.php @@ -24,10 +24,50 @@ class CategoriesController extends Controller public function index(Request $request) { $this->authorize('view', Category::class); - $allowed_columns = ['id', 'name', 'category_type', 'category_type', 'use_default_eula', 'eula_text', 'require_acceptance', 'checkin_email', 'assets_count', 'accessories_count', 'consumables_count', 'components_count', 'licenses_count', 'image']; + $allowed_columns = [ + 'id', + 'name', + 'category_type', + 'category_type', + 'use_default_eula', + 'eula_text', + 'require_acceptance', + 'checkin_email', + 'assets_count', + 'accessories_count', + 'consumables_count', + 'components_count', + 'licenses_count', + 'image', + ]; + + $categories = Category::select([ + 'id', + 'created_at', + 'updated_at', + 'name', 'category_type', + 'use_default_eula', + 'eula_text', + 'require_acceptance', + 'checkin_email', + 'image' + ])->withCount('accessories as accessories_count', 'consumables as consumables_count', 'components as components_count', 'licenses as licenses_count'); + + + /* + * This checks to see if we should override the Admin Setting to show archived assets in list. + * We don't currently use it within the Snipe-IT GUI, but will be useful for API integrations where they + * may actually need to fetch assets that are archived. + * + * @see \App\Models\Category::showableAssets() + */ + if ($request->input('archived')=='true') { + $categories = $categories->withCount('assets as assets_count'); + } else { + $categories = $categories->withCount('showableAssets as assets_count'); + } + - $categories = Category::select(['id', 'created_at', 'updated_at', 'name', 'category_type', 'use_default_eula', 'eula_text', 'require_acceptance', 'checkin_email', 'image']) - ->withCount('assets as assets_count', 'accessories as accessories_count', 'consumables as consumables_count', 'components as components_count', 'licenses as licenses_count'); if ($request->filled('search')) { $categories = $categories->TextSearch($request->input('search')); diff --git a/app/Models/Category.php b/app/Models/Category.php index b00e5a7bf9..c06ac38543 100755 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -194,7 +194,25 @@ class Category extends SnipeModel */ public function assets() { - return $this->hasManyThrough(\App\Models\Asset::class, \App\Models\AssetModel::class, 'category_id', 'model_id'); + return $this->hasManyThrough(Asset::class, \App\Models\AssetModel::class, 'category_id', 'model_id'); + } + + /** + * Establishes the category -> assets relationship but also takes into consideration + * the setting to show archived in lists. + * + * We could have complicated the assets() method above, but keeping this separate + * should give us more flexibility if we need to return actually archived assets + * by their category. + * + * @author [A. Gianotto] [] + * @since [v6.1.0] + * @see \App\Models\Asset::scopeAssetsForShow() + * @return \Illuminate\Database\Eloquent\Relations\Relation + */ + public function showableAssets() + { + return $this->hasManyThrough(Asset::class, \App\Models\AssetModel::class, 'category_id', 'model_id')->AssetsForShow(); } /** diff --git a/resources/views/categories/view.blade.php b/resources/views/categories/view.blade.php index 6e33594b17..9b361c46c7 100644 --- a/resources/views/categories/view.blade.php +++ b/resources/views/categories/view.blade.php @@ -39,7 +39,7 @@
  • {{ ucwords($category_type_route) }} @if ($category->category_type=='asset') - {{ $category->assets()->AssetsForShow()->count() }} + {{ $category->showableAssets()->count() }} @endif
  • diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php index 1dd732b97a..296a940b3f 100755 --- a/resources/views/dashboard.blade.php +++ b/resources/views/dashboard.blade.php @@ -274,7 +274,7 @@
    - +

    {{ trans('general.asset') }} {{ trans('general.locations') }}