Added scoping for categories and companies
Signed-off-by: snipe <snipe@snipe.net>
This commit is contained in:
parent
82d6e1510f
commit
6579fa72da
6 changed files with 76 additions and 10 deletions
|
@ -43,6 +43,7 @@ class CategoriesController extends Controller
|
||||||
|
|
||||||
$categories = Category::select([
|
$categories = Category::select([
|
||||||
'id',
|
'id',
|
||||||
|
'created_by',
|
||||||
'created_at',
|
'created_at',
|
||||||
'updated_at',
|
'updated_at',
|
||||||
'name', 'category_type',
|
'name', 'category_type',
|
||||||
|
@ -50,7 +51,7 @@ class CategoriesController extends Controller
|
||||||
'eula_text',
|
'eula_text',
|
||||||
'require_acceptance',
|
'require_acceptance',
|
||||||
'checkin_email',
|
'checkin_email',
|
||||||
'image'
|
'image',
|
||||||
])->withCount('accessories as accessories_count', 'consumables as consumables_count', 'components as components_count', 'licenses as licenses_count');
|
])->withCount('accessories as accessories_count', 'consumables as consumables_count', 'components as components_count', 'licenses as licenses_count');
|
||||||
|
|
||||||
|
|
||||||
|
@ -91,13 +92,33 @@ class CategoriesController extends Controller
|
||||||
$categories->where('checkin_email', '=', $request->input('checkin_email'));
|
$categories->where('checkin_email', '=', $request->input('checkin_email'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($request->filled('created_by')) {
|
||||||
|
$categories->where('created_by', '=', $request->input('created_by'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($request->filled('created_at')) {
|
||||||
|
$categories->where('created_at', '=', $request->input('created_at'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($request->filled('updated_at')) {
|
||||||
|
$categories->where('updated_at', '=', $request->input('updated_at'));
|
||||||
|
}
|
||||||
|
|
||||||
// Make sure the offset and limit are actually integers and do not exceed system limits
|
// Make sure the offset and limit are actually integers and do not exceed system limits
|
||||||
$offset = ($request->input('offset') > $categories->count()) ? $categories->count() : app('api_offset_value');
|
$offset = ($request->input('offset') > $categories->count()) ? $categories->count() : app('api_offset_value');
|
||||||
$limit = app('api_limit_value');
|
$limit = app('api_limit_value');
|
||||||
|
|
||||||
$order = $request->input('order') === 'asc' ? 'asc' : 'desc';
|
$order = $request->input('order') === 'asc' ? 'asc' : 'desc';
|
||||||
$sort = in_array($request->input('sort'), $allowed_columns) ? $request->input('sort') : 'assets_count';
|
$sort_override = $request->input('sort');
|
||||||
$categories->orderBy($sort, $order);
|
$column_sort = in_array($sort_override, $allowed_columns) ? $sort_override : 'created_at';
|
||||||
|
|
||||||
|
switch ($sort_override) {
|
||||||
|
case 'created_by':
|
||||||
|
$categories = $categories->OrderByCreatedBy($order);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$categories = $categories->orderBy($column_sort, $order);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
$total = $categories->count();
|
$total = $categories->count();
|
||||||
$categories = $categories->skip($offset)->take($limit)->get();
|
$categories = $categories->skip($offset)->take($limit)->get();
|
||||||
|
|
|
@ -56,17 +56,29 @@ class CompaniesController extends Controller
|
||||||
$companies->where('email', '=', $request->input('email'));
|
$companies->where('email', '=', $request->input('email'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($request->filled('created_by')) {
|
||||||
|
$companies->where('created_by', '=', $request->input('created_by'));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Make sure the offset and limit are actually integers and do not exceed system limits
|
// Make sure the offset and limit are actually integers and do not exceed system limits
|
||||||
$offset = ($request->input('offset') > $companies->count()) ? $companies->count() : app('api_offset_value');
|
$offset = ($request->input('offset') > $companies->count()) ? $companies->count() : app('api_offset_value');
|
||||||
$limit = app('api_limit_value');
|
$limit = app('api_limit_value');
|
||||||
|
|
||||||
|
|
||||||
$order = $request->input('order') === 'asc' ? 'asc' : 'desc';
|
$order = $request->input('order') === 'asc' ? 'asc' : 'desc';
|
||||||
$sort = in_array($request->input('sort'), $allowed_columns) ? $request->input('sort') : 'created_at';
|
$sort_override = $request->input('sort');
|
||||||
$companies->orderBy($sort, $order);
|
$column_sort = in_array($sort_override, $allowed_columns) ? $sort_override : 'created_at';
|
||||||
|
|
||||||
|
switch ($sort_override) {
|
||||||
|
case 'created_by':
|
||||||
|
$companies = $companies->OrderByCreatedBy($order);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$companies = $companies->orderBy($column_sort, $order);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
$total = $companies->count();
|
$total = $companies->count();
|
||||||
|
|
||||||
$companies = $companies->skip($offset)->take($limit)->get();
|
$companies = $companies->skip($offset)->take($limit)->get();
|
||||||
return (new CompaniesTransformer)->transformCompanies($companies, $total);
|
return (new CompaniesTransformer)->transformCompanies($companies, $total);
|
||||||
|
|
||||||
|
|
|
@ -62,6 +62,10 @@ class CategoriesTransformer
|
||||||
'consumables_count' => (int) $category->consumables_count,
|
'consumables_count' => (int) $category->consumables_count,
|
||||||
'components_count' => (int) $category->components_count,
|
'components_count' => (int) $category->components_count,
|
||||||
'licenses_count' => (int) $category->licenses_count,
|
'licenses_count' => (int) $category->licenses_count,
|
||||||
|
'created_by' => ($category->adminuser) ? [
|
||||||
|
'id' => (int) $category->adminuser->id,
|
||||||
|
'name'=> e($category->adminuser->present()->fullName()),
|
||||||
|
] : null,
|
||||||
'created_at' => Helper::getFormattedDateObject($category->created_at, 'datetime'),
|
'created_at' => Helper::getFormattedDateObject($category->created_at, 'datetime'),
|
||||||
'updated_at' => Helper::getFormattedDateObject($category->updated_at, 'datetime'),
|
'updated_at' => Helper::getFormattedDateObject($category->updated_at, 'datetime'),
|
||||||
];
|
];
|
||||||
|
|
|
@ -30,14 +30,18 @@ class CompaniesTransformer
|
||||||
'fax' => ($company->fax!='') ? e($company->fax): null,
|
'fax' => ($company->fax!='') ? e($company->fax): null,
|
||||||
'email' => ($company->email!='') ? e($company->email): null,
|
'email' => ($company->email!='') ? e($company->email): null,
|
||||||
'image' => ($company->image) ? Storage::disk('public')->url('companies/'.e($company->image)) : null,
|
'image' => ($company->image) ? Storage::disk('public')->url('companies/'.e($company->image)) : null,
|
||||||
'created_at' => Helper::getFormattedDateObject($company->created_at, 'datetime'),
|
|
||||||
'updated_at' => Helper::getFormattedDateObject($company->updated_at, 'datetime'),
|
|
||||||
'assets_count' => (int) $company->assets_count,
|
'assets_count' => (int) $company->assets_count,
|
||||||
'licenses_count' => (int) $company->licenses_count,
|
'licenses_count' => (int) $company->licenses_count,
|
||||||
'accessories_count' => (int) $company->accessories_count,
|
'accessories_count' => (int) $company->accessories_count,
|
||||||
'consumables_count' => (int) $company->consumables_count,
|
'consumables_count' => (int) $company->consumables_count,
|
||||||
'components_count' => (int) $company->components_count,
|
'components_count' => (int) $company->components_count,
|
||||||
'users_count' => (int) $company->users_count,
|
'users_count' => (int) $company->users_count,
|
||||||
|
'created_by' => ($company->adminuser) ? [
|
||||||
|
'id' => (int) $company->adminuser->id,
|
||||||
|
'name'=> e($company->adminuser->present()->fullName()),
|
||||||
|
] : null,
|
||||||
|
'created_at' => Helper::getFormattedDateObject($company->created_at, 'datetime'),
|
||||||
|
'updated_at' => Helper::getFormattedDateObject($company->updated_at, 'datetime'),
|
||||||
];
|
];
|
||||||
|
|
||||||
$permissions_array['available_actions'] = [
|
$permissions_array['available_actions'] = [
|
||||||
|
|
|
@ -228,6 +228,11 @@ class Category extends SnipeModel
|
||||||
return $this->hasMany(\App\Models\AssetModel::class, 'category_id');
|
return $this->hasMany(\App\Models\AssetModel::class, 'category_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function adminuser()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(\App\Models\User::class, 'created_by');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks for a category-specific EULA, and if that doesn't exist,
|
* Checks for a category-specific EULA, and if that doesn't exist,
|
||||||
* checks for a settings level EULA
|
* checks for a settings level EULA
|
||||||
|
@ -286,4 +291,9 @@ class Category extends SnipeModel
|
||||||
{
|
{
|
||||||
return $query->where('require_acceptance', '=', true);
|
return $query->where('require_acceptance', '=', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function scopeOrderByCreatedBy($query, $order)
|
||||||
|
{
|
||||||
|
return $query->leftJoin('users as admin_sort', 'categories.created_by', '=', 'admin_sort.id')->select('categories.*')->orderBy('admin_sort.first_name', $order)->orderBy('admin_sort.last_name', $order);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -295,6 +295,12 @@ final class Company extends SnipeModel
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function adminuser()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(\App\Models\User::class, 'created_by');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* I legit do not know what this method does, but we can't remove it (yet).
|
* I legit do not know what this method does, but we can't remove it (yet).
|
||||||
*
|
*
|
||||||
|
@ -330,4 +336,13 @@ final class Company extends SnipeModel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Query builder scope to order on the user that created it
|
||||||
|
*/
|
||||||
|
public function scopeOrderByCreatedBy($query, $order)
|
||||||
|
{
|
||||||
|
return $query->leftJoin('users as admin_sort', 'companies.created_by', '=', 'admin_sort.id')->select('companies.*')->orderBy('admin_sort.first_name', $order)->orderBy('admin_sort.last_name', $order);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue