From 0c8308f5a41753e8086e3708c0ff3b362a3a11e9 Mon Sep 17 00:00:00 2001 From: snipe Date: Mon, 15 May 2017 20:55:39 -0700 Subject: [PATCH] Fixes for ordering on asset listing --- app/Http/Controllers/Api/AssetsController.php | 25 +++++++++++++------ app/Models/Asset.php | 23 ++++++++++++++++- 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/Api/AssetsController.php b/app/Http/Controllers/Api/AssetsController.php index b79030d2f6..ebc4a1619f 100644 --- a/app/Http/Controllers/Api/AssetsController.php +++ b/app/Http/Controllers/Api/AssetsController.php @@ -84,7 +84,7 @@ class AssetsController extends Controller $assets = Company::scopeCompanyables(Asset::select('assets.*'))->with( 'assetLoc', 'assetstatus', 'defaultLoc', 'assetlog', 'company', - 'model.category', 'model.manufacturer', 'model.fieldset', 'assigneduser'); + 'model.category', 'model.manufacturer', 'model.fieldset', 'assigneduser','supplier'); // If we should search on everything if (($request->has('search')) && (count($filter) == 0)) { @@ -96,6 +96,8 @@ class AssetsController extends Controller } } + + // These are used by the API to query against specific ID numbers if ($request->has('status_id')) { $assets->where('status_id', '=', $request->input('status_id')); } @@ -112,6 +114,10 @@ class AssetsController extends Controller $assets->ByLocationId($request->input('location_id')); } + if ($request->has('supplier_id')) { + $assets->where('assets.supplier_id', '=', $request->input('supplier_id')); + } + if ($request->has('company_id')) { $assets->where('assets.company_id', '=', $request->input('company_id')); } @@ -125,9 +131,9 @@ class AssetsController extends Controller $offset = request('offset', 0); $limit = $request->input('limit', 50); $order = $request->input('order') === 'asc' ? 'asc' : 'desc'; - $sort = in_array($request->input('sort'), $allowed_columns) ? $request->input('sort') : 'assets.created_at'; - $assets->orderBy($sort, $order); + + // This is used by the sidenav, mostly switch ($request->input('status')) { case 'Deleted': $assets->withTrashed()->Deleted(); @@ -154,7 +160,10 @@ class AssetsController extends Controller - switch ($sort) { + // This handles all of the pivot sorting (versus the assets.* fields in the allowed_columns array) + $column_sort = in_array($request->input('sort'), $allowed_columns) ? $request->input('sort') : 'assets.created_at'; + + switch ($request->input('sort')) { case 'model': $assets->OrderModels($order); break; @@ -176,15 +185,17 @@ class AssetsController extends Controller case 'status_label': $assets->OrderStatus($order); break; + case 'supplier': + $assets->OrderSupplier($order); + break; case 'assigned_to': $assets->OrderAssigned($order); break; default: - $assets->orderBy($sort, $order); + $assets->orderBy($column_sort, $order); break; } - - + $total = $assets->count(); $assets = $assets->skip($offset)->take($limit)->get(); return (new AssetsTransformer)->transformAssets($assets, $total); diff --git a/app/Models/Asset.php b/app/Models/Asset.php index 619a41b13f..da9f0f31af 100644 --- a/app/Models/Asset.php +++ b/app/Models/Asset.php @@ -727,10 +727,15 @@ class Asset extends Depreciable $query->where('manufacturers.name', 'LIKE', '%'.$search.'%'); }); }); + })->orWhere(function ($query) use ($search) { $query->whereHas('assetstatus', function ($query) use ($search) { $query->where('status_labels.name', 'LIKE', '%'.$search.'%'); }); + })->orWhere(function ($query) use ($search) { + $query->whereHas('supplier', function ($query) use ($search) { + $query->where('suppliers.name', 'LIKE', '%'.$search.'%'); + }); })->orWhere(function ($query) use ($search) { $query->whereHas('company', function ($query) use ($search) { $query->where('companies.name', 'LIKE', '%'.$search.'%'); @@ -937,7 +942,7 @@ class Asset extends Depreciable return $query->join('status_labels', 'assets.status_id', '=', 'status_labels.id')->orderBy('status_labels.name', $order); } - /** + /** * Query builder scope to order on company * * @param \Illuminate\Database\Query\Builder $query Query builder instance @@ -1025,6 +1030,20 @@ class Asset extends Depreciable return $query->join('locations', 'locations.id', '=', 'assets.rtd_location_id')->orderBy('locations.name', $order); } + + /** + * Query builder scope to order on supplier name + * + * @param \Illuminate\Database\Query\Builder $query Query builder instance + * @param text $order Order + * + * @return \Illuminate\Database\Query\Builder Modified query builder + */ + public function scopeOrderSupplier($query, $order) + { + return $query->leftJoin('suppliers', 'assets.supplier_id', '=', 'suppliers.id')->orderBy('suppliers.name', $order); + } + /** * Query builder scope to search on location ID * @@ -1047,4 +1066,6 @@ class Asset extends Depreciable }); }); } + + }