From 0cd0abe8bbd81be16d31b5c2e6320b6c0ce37d58 Mon Sep 17 00:00:00 2001 From: snipe Date: Sat, 22 Feb 2025 14:20:21 +0000 Subject: [PATCH] Fixed #16282 - adds accessories tab to assets Signed-off-by: snipe --- app/Http/Controllers/Api/AssetsController.php | 7 +- app/Http/Transformers/AssetsTransformer.php | 1 + .../Transformers/LocationsTransformer.php | 1 + app/Models/AccessoryCheckout.php | 4 +- app/Models/Asset.php | 12 ++++ app/Presenters/AssetPresenter.php | 68 +++++++++++++++++++ resources/views/hardware/view.blade.php | 53 ++++++++++++++- resources/views/locations/view.blade.php | 8 ++- 8 files changed, 147 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/Api/AssetsController.php b/app/Http/Controllers/Api/AssetsController.php index cfa7652501..87ecdcb607 100644 --- a/app/Http/Controllers/Api/AssetsController.php +++ b/app/Http/Controllers/Api/AssetsController.php @@ -1230,7 +1230,10 @@ class AssetsController extends Controller { $this->authorize('view', Asset::class); $this->authorize('view', $asset); - $accessory_checkouts = AccessoryCheckout::AssetsAssigned()->with('adminuser')->with('accessories'); + $accessory_checkouts = AccessoryCheckout::AssetsAssigned() + ->where('assigned_to', $asset->id) + ->with('adminuser') + ->with('accessories'); $offset = ($request->input('offset') > $accessory_checkouts->count()) ? $accessory_checkouts->count() : app('api_offset_value'); $limit = app('api_limit_value'); @@ -1239,6 +1242,8 @@ class AssetsController extends Controller $accessory_checkouts = $accessory_checkouts->skip($offset)->take($limit)->get(); return (new AssetsTransformer)->transformCheckedoutAccessories($accessory_checkouts, $total); } + + /** * Generate asset labels by tag * diff --git a/app/Http/Transformers/AssetsTransformer.php b/app/Http/Transformers/AssetsTransformer.php index c5110ac8ee..378fba2873 100644 --- a/app/Http/Transformers/AssetsTransformer.php +++ b/app/Http/Transformers/AssetsTransformer.php @@ -309,6 +309,7 @@ class AssetsTransformer 'id' => $accessory_checkout->accessory->id, 'name' => $accessory_checkout->accessory->name, ], + 'assigned_to' => $accessory_checkout->assigned_to, 'image' => ($accessory_checkout->accessory->image) ? Storage::disk('public')->url('accessories/'.e($accessory_checkout->accessory->image)) : null, 'note' => $accessory_checkout->note ? e($accessory_checkout->note) : null, 'created_by' => $accessory_checkout->adminuser ? [ diff --git a/app/Http/Transformers/LocationsTransformer.php b/app/Http/Transformers/LocationsTransformer.php index 331f3839b2..0a58becfeb 100644 --- a/app/Http/Transformers/LocationsTransformer.php +++ b/app/Http/Transformers/LocationsTransformer.php @@ -100,6 +100,7 @@ class LocationsTransformer $array = [ 'id' => $accessory_checkout->id, + 'assigned_to' => $accessory_checkout->assigned_to, 'accessory' => [ 'id' => $accessory_checkout->accessory->id, 'name' => $accessory_checkout->accessory->name, diff --git a/app/Models/AccessoryCheckout.php b/app/Models/AccessoryCheckout.php index 2dc51160ae..61ffcd08e5 100755 --- a/app/Models/AccessoryCheckout.php +++ b/app/Models/AccessoryCheckout.php @@ -57,7 +57,7 @@ class AccessoryCheckout extends Model */ public function adminuser() { - return $this->hasOne(\App\Models\User::class, 'created_by'); + return $this->hasOne(\App\Models\User::class, 'id', 'created_by'); } /** @@ -118,7 +118,7 @@ class AccessoryCheckout extends Model $query->where('assigned_type', '=', Location::class); } - public function scopeAssetAssigned(Builder $query): void + public function scopeAssetsAssigned(Builder $query): void { $query->where('assigned_type', '=', Asset::class); } diff --git a/app/Models/Asset.php b/app/Models/Asset.php index ce8b870eb2..0d4606e4b4 100644 --- a/app/Models/Asset.php +++ b/app/Models/Asset.php @@ -523,6 +523,18 @@ class Asset extends Depreciable return $this->morphMany(self::class, 'assigned', 'assigned_type', 'assigned_to')->withTrashed(); } + /** + * Establishes the accessory -> asset assignment relationship + * + * @author A. Gianotto + * @since [v3.0] + * @return \Illuminate\Database\Eloquent\Relations\Relation + */ + public function assignedAccessories() + { + return $this->morphMany(\App\Models\AccessoryCheckout::class, 'assigned', 'assigned_type', 'assigned_to'); + } + /** * Get the asset's location based on the assigned user diff --git a/app/Presenters/AssetPresenter.php b/app/Presenters/AssetPresenter.php index abd6769d3b..10f7dff066 100644 --- a/app/Presenters/AssetPresenter.php +++ b/app/Presenters/AssetPresenter.php @@ -352,6 +352,74 @@ class AssetPresenter extends Presenter return json_encode($layout); } + + public static function assignedAccessoriesDataTableLayout() + { + $layout = [ + [ + 'field' => 'id', + 'searchable' => false, + 'sortable' => false, + 'switchable' => true, + 'title' => trans('general.id'), + 'visible' => false, + ], + [ + 'field' => 'accessory', + 'searchable' => false, + 'sortable' => false, + 'switchable' => true, + 'title' => trans('general.accessory'), + 'visible' => true, + 'formatter' => 'accessoriesLinkObjFormatter', + ], + [ + 'field' => 'image', + 'searchable' => false, + 'sortable' => false, + 'switchable' => true, + 'title' => trans('general.image'), + 'visible' => true, + 'formatter' => 'imageFormatter', + ], + [ + 'field' => 'note', + 'searchable' => false, + 'sortable' => false, + 'switchable' => true, + 'title' => trans('general.notes'), + 'visible' => true, + ], + [ + 'field' => 'created_at', + 'searchable' => false, + 'sortable' => false, + 'switchable' => true, + 'title' => trans('admin/hardware/table.checkout_date'), + 'visible' => true, + 'formatter' => 'dateDisplayFormatter', + ], + [ + 'field' => 'created_by', + 'searchable' => false, + 'sortable' => false, + 'title' => trans('general.created_by'), + 'visible' => false, + 'formatter' => 'usersLinkObjFormatter', + ], + [ + 'field' => 'available_actions', + 'searchable' => false, + 'sortable' => false, + 'switchable' => false, + 'title' => trans('table.actions'), + 'formatter' => 'accessoriesInOutFormatter', + ], + ]; + + return json_encode($layout); + } + /** * Generate html link to this items name. * @return string diff --git a/resources/views/hardware/view.blade.php b/resources/views/hardware/view.blade.php index 531bfa63f6..481f61d4ac 100755 --- a/resources/views/hardware/view.blade.php +++ b/resources/views/hardware/view.blade.php @@ -77,13 +77,30 @@ -