From 88cf456386ade5c4680c28d1289cb779101803ae Mon Sep 17 00:00:00 2001 From: snipe Date: Thu, 21 Nov 2019 22:03:56 -0800 Subject: [PATCH] Adding Dept to license seats (#7609) * Adding Dept to license seats * Added query scope to order by department * Make license seat department sortable * Disable license seat internal search - this never actually worked --- .../Controllers/Api/LicensesController.php | 15 +++++++++++---- .../Transformers/LicenseSeatsTransformer.php | 9 ++++++++- app/Models/LicenseSeat.php | 19 +++++++++++++++++++ app/Presenters/LicensePresenter.php | 12 +++++++++++- resources/views/licenses/view.blade.php | 2 +- .../views/partials/bootstrap-table.blade.php | 7 +++++++ 6 files changed, 57 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/Api/LicensesController.php b/app/Http/Controllers/Api/LicensesController.php index 183557023..2f260ac24 100644 --- a/app/Http/Controllers/Api/LicensesController.php +++ b/app/Http/Controllers/Api/LicensesController.php @@ -228,14 +228,21 @@ class LicensesController extends Controller $this->authorize('view', $license); - $seats = LicenseSeat::where('license_id', $licenseId)->with('license', 'user', 'asset'); + $seats = LicenseSeat::where('license_seats.license_id', $licenseId) + ->with('license', 'user', 'asset', 'user.department'); - $offset = (($seats) && (request('offset') > $seats->count())) ? 0 : request('offset', 0); - - $limit = request('limit', 50); $order = $request->input('order') === 'asc' ? 'asc' : 'desc'; + if ($request->input('sort')=='department') { + $seats->OrderDepartments($order); + } else { + $seats->orderBy('id', $order); + } + $total = $seats->count(); + $offset = (($seats) && (request('offset') > $total)) ? 0 : request('offset', 0); + $limit = request('limit', 50); + $seats = $seats->skip($offset)->take($limit)->get(); if ($seats) { diff --git a/app/Http/Transformers/LicenseSeatsTransformer.php b/app/Http/Transformers/LicenseSeatsTransformer.php index 65bb410ed..df53e782d 100644 --- a/app/Http/Transformers/LicenseSeatsTransformer.php +++ b/app/Http/Transformers/LicenseSeatsTransformer.php @@ -29,7 +29,14 @@ class LicenseSeatsTransformer 'name' => 'Seat '.$seat_count, 'assigned_user' => ($seat->user) ? [ 'id' => (int) $seat->user->id, - 'name'=> e($seat->user->present()->fullName) + 'name'=> e($seat->user->present()->fullName), + 'department'=> + ($seat->user->department) ? + [ + "id" => (int) $seat->user->department->id, + "name" => e($seat->user->department->name) + + ] : null ] : null, 'assigned_asset' => ($seat->asset) ? [ 'id' => (int) $seat->asset->id, diff --git a/app/Models/LicenseSeat.php b/app/Models/LicenseSeat.php index 17703ad2c..26a34f1df 100755 --- a/app/Models/LicenseSeat.php +++ b/app/Models/LicenseSeat.php @@ -55,4 +55,23 @@ class LicenseSeat extends Model implements ICompanyableChild return false; } + + /** + * Query builder scope to order on department + * + * @param \Illuminate\Database\Query\Builder $query Query builder instance + * @param text $order Order + * + * @return \Illuminate\Database\Query\Builder Modified query builder + */ + public function scopeOrderDepartments($query, $order) + { + return $query->leftJoin('users as license_seat_users', 'license_seats.assigned_to', '=', 'license_seat_users.id') + ->leftJoin('departments as license_user_dept', 'license_user_dept.id', '=', 'license_seat_users.department_id') + ->orderBy('license_user_dept.name', $order); + } + + + + } diff --git a/app/Presenters/LicensePresenter.php b/app/Presenters/LicensePresenter.php index 0cc226dc4..4503895ca 100644 --- a/app/Presenters/LicensePresenter.php +++ b/app/Presenters/LicensePresenter.php @@ -176,6 +176,15 @@ class LicensePresenter extends Presenter "visible" => true, "formatter" => "usersLinkObjFormatter" ], [ + "field" => "department", + "searchable" => false, + "sortable" => true, + "switchable" => true, + "title" => trans('general.department'), + "visible" => false, + "formatter" => "departmentNameLinkFormatter" + ], + [ "field" => "assigned_asset", "searchable" => false, "sortable" => false, @@ -191,7 +200,8 @@ class LicensePresenter extends Presenter "title" => trans('general.location'), "visible" => true, "formatter" => "locationsLinkObjFormatter" - ], [ + ], + [ "field" => "checkincheckout", "searchable" => false, "sortable" => false, diff --git a/resources/views/licenses/view.blade.php b/resources/views/licenses/view.blade.php index 1b8347c71..147c540e9 100755 --- a/resources/views/licenses/view.blade.php +++ b/resources/views/licenses/view.blade.php @@ -48,7 +48,7 @@ data-id-table="seatsTable-{{ $license->id }}" id="seatsTable-{{$license->id}}" data-pagination="true" - data-search="true" + data-search="false" data-side-pagination="server" data-show-columns="true" data-show-export="true" diff --git a/resources/views/partials/bootstrap-table.blade.php b/resources/views/partials/bootstrap-table.blade.php index 313253232..3cfdb73f2 100644 --- a/resources/views/partials/bootstrap-table.blade.php +++ b/resources/views/partials/bootstrap-table.blade.php @@ -447,6 +447,13 @@ } + function departmentNameLinkFormatter(value, row) { + if ((row.assigned_user) && (row.assigned_user.department) && (row.assigned_user.department.name)) { + return ' ' + row.assigned_user.department.name + ''; + } + + } + function assetNameLinkFormatter(value, row) { if ((row.asset) && (row.asset.name)) { return ' ' + row.asset.name + '';