mirror of
https://github.com/snipe/snipe-it.git
synced 2025-03-05 20:52:15 -08:00
Merge pull request #16272 from snipe/experiments/breadcrumbs
Some checks failed
Crowdin Action / upload-sources-to-crowdin (push) Has been cancelled
Docker images (Alpine) / docker (push) Has been cancelled
Docker images / docker (push) Has been cancelled
Tests in MySQL / PHP ${{ matrix.php-version }} (8.1) (push) Has been cancelled
Tests in MySQL / PHP ${{ matrix.php-version }} (8.2) (push) Has been cancelled
Tests in MySQL / PHP ${{ matrix.php-version }} (8.3) (push) Has been cancelled
Tests in SQLite / PHP ${{ matrix.php-version }} (8.1.1) (push) Has been cancelled
Some checks failed
Crowdin Action / upload-sources-to-crowdin (push) Has been cancelled
Docker images (Alpine) / docker (push) Has been cancelled
Docker images / docker (push) Has been cancelled
Tests in MySQL / PHP ${{ matrix.php-version }} (8.1) (push) Has been cancelled
Tests in MySQL / PHP ${{ matrix.php-version }} (8.2) (push) Has been cancelled
Tests in MySQL / PHP ${{ matrix.php-version }} (8.3) (push) Has been cancelled
Tests in SQLite / PHP ${{ matrix.php-version }} (8.1.1) (push) Has been cancelled
Experimental WIP - added breadcrumbs, route model binding for resource routes
This commit is contained in:
commit
5b63eb5a15
|
@ -122,6 +122,25 @@ class Handler extends ExceptionHandler
|
|||
}
|
||||
|
||||
|
||||
// This is traaaaash but it handles models that are not found while using route model binding :(
|
||||
// The only alternative is to set that at *each* route, which is crazypants
|
||||
if ($e instanceof \Illuminate\Database\Eloquent\ModelNotFoundException) {
|
||||
$model_name = last(explode('\\', $e->getModel()));
|
||||
$route = str_plural(strtolower(last(explode('\\', $e->getModel())))).'.index';
|
||||
|
||||
// Sigh. Fucking laravel.
|
||||
if ($route == 'assets.index') {
|
||||
$route = 'hardware.index';
|
||||
} elseif ($route == 'reporttemplates.index') {
|
||||
$route = 'reports/custom';
|
||||
} elseif ($route == 'predefinedkits.index') {
|
||||
$route = 'kits.index';
|
||||
}
|
||||
|
||||
return redirect()
|
||||
->route($route)
|
||||
->withError(trans('general.generic_model_not_found', ['model' => $model_name]));
|
||||
}
|
||||
|
||||
|
||||
if ($this->isHttpException($e) && (isset($statusCode)) && ($statusCode == '404' )) {
|
||||
|
|
|
@ -1520,11 +1520,11 @@ class Helper
|
|||
if ($redirect_option == 'target') {
|
||||
switch ($checkout_to_type) {
|
||||
case 'user':
|
||||
return route('users.show', ['user' => $request->assigned_user]);
|
||||
return route('users.show', $request->assigned_user);
|
||||
case 'location':
|
||||
return route('locations.show', ['location' => $request->assigned_location]);
|
||||
return route('locations.show', $request->assigned_location);
|
||||
case 'asset':
|
||||
return route('hardware.show', ['hardware' => $request->assigned_asset]);
|
||||
return route('hardware.show', $request->assigned_asset);
|
||||
}
|
||||
}
|
||||
return redirect()->back()->with('error', trans('admin/hardware/message.checkout.error'));
|
||||
|
|
|
@ -59,6 +59,8 @@ class IconHelper
|
|||
return 'fas fa-cog';
|
||||
case 'angle-left':
|
||||
return 'fas fa-angle-left';
|
||||
case 'angle-right':
|
||||
return 'fas fa-angle-right';
|
||||
case 'warning':
|
||||
return 'fas fa-exclamation-triangle';
|
||||
case 'kits':
|
||||
|
@ -184,6 +186,8 @@ class IconHelper
|
|||
return 'fa-regular fa-id-card';
|
||||
case 'department' :
|
||||
return 'fa-solid fa-building-user';
|
||||
case 'home' :
|
||||
return 'fa-solid fa-house';
|
||||
case 'note':
|
||||
case 'notes':
|
||||
return 'fas fa-sticky-note';
|
||||
|
|
|
@ -95,16 +95,10 @@ class AccessoriesController extends Controller
|
|||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @param int $accessoryId
|
||||
*/
|
||||
public function edit($accessoryId = null) : View | RedirectResponse
|
||||
public function edit(Accessory $accessory) : View | RedirectResponse
|
||||
{
|
||||
|
||||
if ($item = Accessory::find($accessoryId)) {
|
||||
$this->authorize($item);
|
||||
return view('accessories.edit', compact('item'))->with('category_type', 'accessory');
|
||||
}
|
||||
|
||||
return redirect()->route('accessories.index')->with('error', trans('admin/accessories/message.does_not_exist'));
|
||||
|
||||
$this->authorize('update', Accessory::class);
|
||||
return view('accessories.edit')->with('item', $accessory)->with('category_type', 'accessory');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -114,19 +108,12 @@ class AccessoriesController extends Controller
|
|||
* @param int $accessoryId
|
||||
* @since [v6.0]
|
||||
*/
|
||||
public function getClone($accessoryId = null) : View | RedirectResponse
|
||||
public function getClone(Accessory $accessory) : View | RedirectResponse
|
||||
{
|
||||
|
||||
$this->authorize('create', Accessory::class);
|
||||
|
||||
// Check if the asset exists
|
||||
if (is_null($accessory_to_clone = Accessory::find($accessoryId))) {
|
||||
// Redirect to the asset management page
|
||||
return redirect()->route('accessories.index')
|
||||
->with('error', trans('admin/accessories/message.does_not_exist', ['id' => $accessoryId]));
|
||||
}
|
||||
|
||||
$accessory = clone $accessory_to_clone;
|
||||
$accessory = clone $accessory;
|
||||
$accessory->id = null;
|
||||
$accessory->location_id = null;
|
||||
|
||||
|
@ -142,9 +129,9 @@ class AccessoriesController extends Controller
|
|||
* @param ImageUploadRequest $request
|
||||
* @param int $accessoryId
|
||||
*/
|
||||
public function update(ImageUploadRequest $request, $accessoryId = null) : RedirectResponse
|
||||
public function update(ImageUploadRequest $request, Accessory $accessory) : RedirectResponse
|
||||
{
|
||||
if ($accessory = Accessory::withCount('checkouts as checkouts_count')->find($accessoryId)) {
|
||||
if ($accessory = Accessory::withCount('checkouts as checkouts_count')->find($accessory->id)) {
|
||||
|
||||
$this->authorize($accessory);
|
||||
|
||||
|
@ -231,14 +218,10 @@ class AccessoriesController extends Controller
|
|||
* @see AccessoriesController::getDataView() method that generates the JSON response
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function show($accessoryID = null) : View | RedirectResponse
|
||||
public function show(Accessory $accessory) : View | RedirectResponse
|
||||
{
|
||||
$accessory = Accessory::withCount('checkouts as checkouts_count')->find($accessoryID);
|
||||
$accessory = Accessory::withCount('checkouts as checkouts_count')->find($accessory->id);
|
||||
$this->authorize('view', $accessory);
|
||||
if (isset($accessory->id)) {
|
||||
return view('accessories.view', compact('accessory'));
|
||||
}
|
||||
|
||||
return redirect()->route('accessories.index')->with('error', trans('admin/accessories/message.does_not_exist', ['id' => $accessoryID]));
|
||||
return view('accessories.view', compact('accessory'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -139,19 +139,12 @@ class AssetMaintenancesController extends Controller
|
|||
* @version v1.0
|
||||
* @since [v1.8]
|
||||
*/
|
||||
public function edit($assetMaintenanceId = null) : View | RedirectResponse
|
||||
public function edit(AssetMaintenance $maintenance) : View | RedirectResponse
|
||||
{
|
||||
$this->authorize('update', Asset::class);
|
||||
// Check if the asset maintenance exists
|
||||
$this->authorize('update', Asset::class);
|
||||
// Check if the asset maintenance exists
|
||||
if (is_null($assetMaintenance = AssetMaintenance::find($assetMaintenanceId))) {
|
||||
// Redirect to the asset maintenance management page
|
||||
return redirect()->route('maintenances.index')->with('error', trans('admin/asset_maintenances/message.not_found'));
|
||||
} elseif ((!$assetMaintenance->asset) || ($assetMaintenance->asset->deleted_at!='')) {
|
||||
// Redirect to the asset maintenance management page
|
||||
if ((!$maintenance->asset) || ($maintenance->asset->deleted_at!='')) {
|
||||
return redirect()->route('maintenances.index')->with('error', 'asset does not exist');
|
||||
} elseif (! Company::isCurrentUserHasAccess($assetMaintenance->asset)) {
|
||||
} elseif (! Company::isCurrentUserHasAccess($maintenance->asset)) {
|
||||
return static::getInsufficientPermissionsRedirect();
|
||||
}
|
||||
|
||||
|
@ -161,7 +154,7 @@ class AssetMaintenancesController extends Controller
|
|||
return view('asset_maintenances/edit')
|
||||
->with('selectedAsset', null)
|
||||
->with('assetMaintenanceType', $assetMaintenanceType)
|
||||
->with('item', $assetMaintenance);
|
||||
->with('item', $maintenance);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -174,24 +167,20 @@ class AssetMaintenancesController extends Controller
|
|||
* @version v1.0
|
||||
* @since [v1.8]
|
||||
*/
|
||||
public function update(Request $request, $assetMaintenanceId = null) : View | RedirectResponse
|
||||
public function update(Request $request, AssetMaintenance $maintenance) : View | RedirectResponse
|
||||
{
|
||||
$this->authorize('update', Asset::class);
|
||||
// Check if the asset maintenance exists
|
||||
if (is_null($assetMaintenance = AssetMaintenance::find($assetMaintenanceId))) {
|
||||
// Redirect to the asset maintenance management page
|
||||
return redirect()->route('maintenances.index')->with('error', trans('admin/asset_maintenances/message.not_found'));
|
||||
} elseif ((!$assetMaintenance->asset) || ($assetMaintenance->asset->deleted_at!='')) {
|
||||
// Redirect to the asset maintenance management page
|
||||
|
||||
if ((!$maintenance->asset) || ($maintenance->asset->deleted_at!='')) {
|
||||
return redirect()->route('maintenances.index')->with('error', 'asset does not exist');
|
||||
} elseif (! Company::isCurrentUserHasAccess($assetMaintenance->asset)) {
|
||||
} elseif (! Company::isCurrentUserHasAccess($maintenance->asset)) {
|
||||
return static::getInsufficientPermissionsRedirect();
|
||||
}
|
||||
|
||||
$assetMaintenance->supplier_id = $request->input('supplier_id');
|
||||
$assetMaintenance->is_warranty = $request->input('is_warranty');
|
||||
$assetMaintenance->cost = $request->input('cost');
|
||||
$assetMaintenance->notes = $request->input('notes');
|
||||
$maintenance->supplier_id = $request->input('supplier_id');
|
||||
$maintenance->is_warranty = $request->input('is_warranty');
|
||||
$maintenance->cost = $request->input('cost');
|
||||
$maintenance->notes = $request->input('notes');
|
||||
|
||||
$asset = Asset::find(request('asset_id'));
|
||||
|
||||
|
@ -200,39 +189,39 @@ class AssetMaintenancesController extends Controller
|
|||
}
|
||||
|
||||
// Save the asset maintenance data
|
||||
$assetMaintenance->asset_id = $request->input('asset_id');
|
||||
$assetMaintenance->asset_maintenance_type = $request->input('asset_maintenance_type');
|
||||
$assetMaintenance->title = $request->input('title');
|
||||
$assetMaintenance->start_date = $request->input('start_date');
|
||||
$assetMaintenance->completion_date = $request->input('completion_date');
|
||||
$maintenance->asset_id = $request->input('asset_id');
|
||||
$maintenance->asset_maintenance_type = $request->input('asset_maintenance_type');
|
||||
$maintenance->title = $request->input('title');
|
||||
$maintenance->start_date = $request->input('start_date');
|
||||
$maintenance->completion_date = $request->input('completion_date');
|
||||
|
||||
if (($assetMaintenance->completion_date == null)
|
||||
if (($maintenance->completion_date == null)
|
||||
) {
|
||||
if (($assetMaintenance->asset_maintenance_time !== 0)
|
||||
|| (! is_null($assetMaintenance->asset_maintenance_time))
|
||||
if (($maintenance->asset_maintenance_time !== 0)
|
||||
|| (! is_null($maintenance->asset_maintenance_time))
|
||||
) {
|
||||
$assetMaintenance->asset_maintenance_time = null;
|
||||
$maintenance->asset_maintenance_time = null;
|
||||
}
|
||||
}
|
||||
|
||||
if (($assetMaintenance->completion_date !== null)
|
||||
&& ($assetMaintenance->start_date !== '')
|
||||
&& ($assetMaintenance->start_date !== '0000-00-00')
|
||||
if (($maintenance->completion_date !== null)
|
||||
&& ($maintenance->start_date !== '')
|
||||
&& ($maintenance->start_date !== '0000-00-00')
|
||||
) {
|
||||
$startDate = Carbon::parse($assetMaintenance->start_date);
|
||||
$completionDate = Carbon::parse($assetMaintenance->completion_date);
|
||||
$assetMaintenance->asset_maintenance_time = $completionDate->diffInDays($startDate);
|
||||
$startDate = Carbon::parse($maintenance->start_date);
|
||||
$completionDate = Carbon::parse($maintenance->completion_date);
|
||||
$maintenance->asset_maintenance_time = $completionDate->diffInDays($startDate);
|
||||
}
|
||||
|
||||
// Was the asset maintenance created?
|
||||
if ($assetMaintenance->save()) {
|
||||
if ($maintenance->save()) {
|
||||
|
||||
// Redirect to the new asset maintenance page
|
||||
return redirect()->route('maintenances.index')
|
||||
->with('success', trans('admin/asset_maintenances/message.edit.success'));
|
||||
->with('success', trans('admin/asset_maintenances/message.edit.success'));
|
||||
}
|
||||
|
||||
return redirect()->back()->withInput()->withErrors($assetMaintenance->getErrors());
|
||||
return redirect()->back()->withInput()->withErrors($maintenance->getErrors());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -271,19 +260,13 @@ class AssetMaintenancesController extends Controller
|
|||
* @version v1.0
|
||||
* @since [v1.8]
|
||||
*/
|
||||
public function show($assetMaintenanceId) : View | RedirectResponse
|
||||
public function show(AssetMaintenance $maintenance) : View | RedirectResponse
|
||||
{
|
||||
$this->authorize('view', Asset::class);
|
||||
|
||||
// Check if the asset maintenance exists
|
||||
if (is_null($assetMaintenance = AssetMaintenance::find($assetMaintenanceId))) {
|
||||
// Redirect to the asset maintenance management page
|
||||
return redirect()->route('maintenances.index')
|
||||
->with('error', trans('admin/asset_maintenances/message.not_found'));
|
||||
} elseif (! Company::isCurrentUserHasAccess($assetMaintenance->asset)) {
|
||||
if (! Company::isCurrentUserHasAccess($maintenance->asset)) {
|
||||
return static::getInsufficientPermissionsRedirect();
|
||||
}
|
||||
|
||||
return view('asset_maintenances/view')->with('assetMaintenance', $assetMaintenance);
|
||||
return view('asset_maintenances/view')->with('assetMaintenance', $maintenance);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -109,16 +109,11 @@ class AssetModelsController extends Controller
|
|||
* @since [v1.0]
|
||||
* @param int $modelId
|
||||
*/
|
||||
public function edit($modelId = null) : View | RedirectResponse
|
||||
public function edit(AssetModel $model) : View | RedirectResponse
|
||||
{
|
||||
$this->authorize('update', AssetModel::class);
|
||||
if ($item = AssetModel::find($modelId)) {
|
||||
$category_type = 'asset';
|
||||
return view('models/edit', compact('item', 'category_type'))->with('depreciation_list', Helper::depreciationList());
|
||||
|
||||
}
|
||||
|
||||
return redirect()->route('models.index')->with('error', trans('admin/models/message.does_not_exist'));
|
||||
$category_type = 'asset';
|
||||
return view('models/edit', compact('category_type'))->with('item', $model)->with('depreciation_list', Helper::depreciationList());
|
||||
}
|
||||
|
||||
|
||||
|
@ -133,16 +128,11 @@ class AssetModelsController extends Controller
|
|||
* @return \Illuminate\Http\RedirectResponse
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function update(StoreAssetModelRequest $request, $modelId) : RedirectResponse
|
||||
public function update(StoreAssetModelRequest $request, AssetModel $model) : RedirectResponse
|
||||
{
|
||||
$this->authorize('update', AssetModel::class);
|
||||
|
||||
if (is_null($model = AssetModel::find($modelId))) {
|
||||
return redirect()->route('models.index')->with('error', trans('admin/models/message.does_not_exist'));
|
||||
}
|
||||
|
||||
$model = $request->handleImages($model);
|
||||
|
||||
$model->depreciation_id = $request->input('depreciation_id');
|
||||
$model->eol = $request->input('eol');
|
||||
$model->name = $request->input('name');
|
||||
|
@ -267,16 +257,10 @@ class AssetModelsController extends Controller
|
|||
* @since [v1.0]
|
||||
* @param int $modelId
|
||||
*/
|
||||
public function show($modelId = null) : View | RedirectResponse
|
||||
public function show(AssetModel $model) : View | RedirectResponse
|
||||
{
|
||||
$this->authorize('view', AssetModel::class);
|
||||
$model = AssetModel::withTrashed()->find($modelId);
|
||||
|
||||
if (isset($model->id)) {
|
||||
return view('models/view', compact('model'));
|
||||
}
|
||||
|
||||
return redirect()->route('models.index')->with('error', trans('admin/models/message.does_not_exist'));
|
||||
return view('models/view', compact('model'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -26,17 +26,14 @@ class AssetCheckoutController extends Controller
|
|||
* @since [v1.0]
|
||||
* @return \Illuminate\Contracts\View\View
|
||||
*/
|
||||
public function create($assetId) : View | RedirectResponse
|
||||
public function create(Asset $asset) : View | RedirectResponse
|
||||
{
|
||||
// Check if the asset exists
|
||||
if (is_null($asset = Asset::with('company')->find(e($assetId)))) {
|
||||
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
|
||||
$this->authorize('checkout', $asset);
|
||||
|
||||
if (!$asset->model) {
|
||||
return redirect()->route('hardware.show', $asset->id)->with('error', trans('admin/hardware/general.model_invalid_fix'));
|
||||
return redirect()->route('hardware.show', $asset)
|
||||
->with('error', trans('admin/hardware/general.model_invalid_fix'));
|
||||
}
|
||||
|
||||
if ($asset->availableForCheckout()) {
|
||||
|
@ -45,8 +42,8 @@ class AssetCheckoutController extends Controller
|
|||
->with('table_name', 'Assets');
|
||||
}
|
||||
|
||||
|
||||
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkout.not_available'));
|
||||
return redirect()->route('hardware.index')
|
||||
->with('error', trans('admin/hardware/message.checkout.not_available'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -68,7 +65,7 @@ class AssetCheckoutController extends Controller
|
|||
$this->authorize('checkout', $asset);
|
||||
|
||||
if (!$asset->model) {
|
||||
return redirect()->route('hardware.show', $asset->id)->with('error', trans('admin/hardware/general.model_invalid_fix'));
|
||||
return redirect()->route('hardware.show', $asset)->with('error', trans('admin/hardware/general.model_invalid_fix'));
|
||||
}
|
||||
|
||||
$admin = auth()->user();
|
||||
|
|
|
@ -202,7 +202,7 @@ class AssetsController extends Controller
|
|||
$asset->checkOut($target, auth()->user(), date('Y-m-d H:i:s'), $request->input('expected_checkin', null), 'Checked out on asset creation', $request->get('name'), $location);
|
||||
}
|
||||
|
||||
$successes[] = "<a href='" . route('hardware.show', ['hardware' => $asset->id]) . "' style='color: white;'>" . e($asset->asset_tag) . "</a>";
|
||||
$successes[] = "<a href='" . route('hardware.show', $asset) . "' style='color: white;'>" . e($asset->asset_tag) . "</a>";
|
||||
|
||||
} else {
|
||||
$failures[] = join(",", $asset->getErrors()->all());
|
||||
|
@ -223,7 +223,7 @@ class AssetsController extends Controller
|
|||
//the most common case, keeping it so we don't have to make every use of that translation string be trans_choice'ed
|
||||
//and re-translated
|
||||
return redirect()->to(Helper::getRedirectOption($request, $asset->id, 'Assets'))
|
||||
->with('success-unescaped', trans('admin/hardware/message.create.success_linked', ['link' => route('hardware.show', ['hardware' => $asset->id]), 'id', 'tag' => e($asset->asset_tag)]));
|
||||
->with('success-unescaped', trans('admin/hardware/message.create.success_linked', ['link' => route('hardware.show', $asset), 'id', 'tag' => e($asset->asset_tag)]));
|
||||
} else {
|
||||
//multi-success
|
||||
return redirect()->to(Helper::getRedirectOption($request, $asset->id, 'Assets'))
|
||||
|
@ -241,20 +241,14 @@ class AssetsController extends Controller
|
|||
* Returns a view that presents a form to edit an existing asset.
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @param int $assetId
|
||||
* @since [v1.0]
|
||||
* @return \Illuminate\Contracts\View\View
|
||||
*/
|
||||
public function edit($assetId = null) : View | RedirectResponse
|
||||
public function edit(Asset $asset) : View | RedirectResponse
|
||||
{
|
||||
if (! $item = Asset::find($assetId)) {
|
||||
// Redirect to the asset management page with error
|
||||
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
//Handles company checks and permissions.
|
||||
$this->authorize($item);
|
||||
|
||||
return view('hardware/edit', compact('item'))
|
||||
$this->authorize($asset);
|
||||
return view('hardware/edit')
|
||||
->with('item', $asset)
|
||||
->with('statuslabel_list', Helper::statusLabelList())
|
||||
->with('statuslabel_types', Helper::statusTypeList());
|
||||
}
|
||||
|
@ -268,15 +262,14 @@ class AssetsController extends Controller
|
|||
* @since [v1.0]
|
||||
* @return \Illuminate\Contracts\View\View
|
||||
*/
|
||||
public function show($assetId = null) : View | RedirectResponse
|
||||
public function show(Asset $asset) : View | RedirectResponse
|
||||
{
|
||||
$asset = Asset::withTrashed()->find($assetId);
|
||||
$this->authorize('view', $asset);
|
||||
$settings = Setting::getSettings();
|
||||
|
||||
if (isset($asset)) {
|
||||
$audit_log = Actionlog::where('action_type', '=', 'audit')
|
||||
->where('item_id', '=', $assetId)
|
||||
->where('item_id', '=', $asset->id)
|
||||
->where('item_type', '=', Asset::class)
|
||||
->orderBy('created_at', 'DESC')->first();
|
||||
|
||||
|
@ -292,7 +285,7 @@ class AssetsController extends Controller
|
|||
|
||||
$qr_code = (object) [
|
||||
'display' => $settings->qr_code == '1',
|
||||
'url' => route('qr_code/hardware', $asset->id),
|
||||
'url' => route('qr_code/hardware', $asset),
|
||||
];
|
||||
|
||||
return view('hardware/view', compact('asset', 'qr_code', 'settings'))
|
||||
|
@ -309,14 +302,9 @@ class AssetsController extends Controller
|
|||
* @since [v1.0]
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
*/
|
||||
public function update(ImageUploadRequest $request, $assetId = null) : RedirectResponse
|
||||
public function update(ImageUploadRequest $request, Asset $asset) : RedirectResponse
|
||||
{
|
||||
|
||||
// Check if the asset exists
|
||||
if (! $asset = Asset::find($assetId)) {
|
||||
// Redirect to the asset management page with error
|
||||
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
$this->authorize($asset);
|
||||
|
||||
$asset->status_id = $request->input('status_id', null);
|
||||
|
@ -431,7 +419,7 @@ class AssetsController extends Controller
|
|||
session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]);
|
||||
|
||||
if ($asset->save()) {
|
||||
return redirect()->to(Helper::getRedirectOption($request, $assetId, 'Assets'))
|
||||
return redirect()->to(Helper::getRedirectOption($request, $asset->id, 'Assets'))
|
||||
->with('success', trans('admin/hardware/message.update.success'));
|
||||
}
|
||||
|
||||
|
@ -532,12 +520,12 @@ class AssetsController extends Controller
|
|||
* @param int $assetId
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function getQrCode($assetId = null) : Response | BinaryFileResponse | string | bool
|
||||
public function getQrCode(Asset $asset) : Response | BinaryFileResponse | string | bool
|
||||
{
|
||||
$settings = Setting::getSettings();
|
||||
|
||||
if (($settings->qr_code == '1') && ($settings->label2_2d_type !== 'none')) {
|
||||
$asset = Asset::withTrashed()->find($assetId);
|
||||
|
||||
if ($asset) {
|
||||
$size = Helper::barcodeDimensions($settings->label2_2d_type);
|
||||
$qr_file = public_path().'/uploads/barcodes/qr-'.str_slug($asset->asset_tag).'-'.str_slug($asset->id).'.png';
|
||||
|
@ -878,12 +866,11 @@ class AssetsController extends Controller
|
|||
return view('hardware/quickscan-checkin')->with('statusLabel_list', Helper::statusLabelList());
|
||||
}
|
||||
|
||||
public function audit($id)
|
||||
public function audit(Asset $asset)
|
||||
{
|
||||
$settings = Setting::getSettings();
|
||||
$this->authorize('audit', Asset::class);
|
||||
$dt = Carbon::now()->addMonths($settings->audit_interval)->toDateString();
|
||||
$asset = Asset::findOrFail($id);
|
||||
return view('hardware/audit')->with('asset', $asset)->with('next_audit_date', $dt)->with('locations_list');
|
||||
}
|
||||
|
||||
|
@ -902,7 +889,7 @@ class AssetsController extends Controller
|
|||
}
|
||||
|
||||
|
||||
public function auditStore(UploadFileRequest $request, $id)
|
||||
public function auditStore(UploadFileRequest $request, Asset $asset)
|
||||
{
|
||||
$this->authorize('audit', Asset::class);
|
||||
|
||||
|
@ -917,8 +904,6 @@ class AssetsController extends Controller
|
|||
return response()->json(Helper::formatStandardApiResponse('error', null, $validator->errors()->all()));
|
||||
}
|
||||
|
||||
$asset = Asset::findOrFail($id);
|
||||
|
||||
/**
|
||||
* Even though we do a save() further down, we don't want to log this as a "normal" asset update,
|
||||
* which would trigger the Asset Observer and would log an asset *update* log entry (because the
|
||||
|
|
|
@ -88,14 +88,10 @@ class CategoriesController extends Controller
|
|||
* @param int $categoryId
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function edit($categoryId = null) : RedirectResponse | View
|
||||
public function edit(Category $category) : RedirectResponse | View
|
||||
{
|
||||
$this->authorize('update', Category::class);
|
||||
if (is_null($item = Category::find($categoryId))) {
|
||||
return redirect()->route('categories.index')->with('error', trans('admin/categories/message.does_not_exist'));
|
||||
}
|
||||
|
||||
return view('categories/edit', compact('item'))
|
||||
return view('categories/edit')->with('item', $category)
|
||||
->with('category_types', Helper::categoryTypeList());
|
||||
}
|
||||
|
||||
|
@ -108,19 +104,10 @@ class CategoriesController extends Controller
|
|||
* @param int $categoryId
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function update(ImageUploadRequest $request, $categoryId = null) : RedirectResponse
|
||||
public function update(ImageUploadRequest $request, Category $category) : RedirectResponse
|
||||
{
|
||||
$this->authorize('update', Category::class);
|
||||
if (is_null($category = Category::find($categoryId))) {
|
||||
// Redirect to the categories management page
|
||||
return redirect()->route('categories.index')->with('error', trans('admin/categories/message.does_not_exist'));
|
||||
}
|
||||
|
||||
// Update the category data
|
||||
$category->name = $request->input('name');
|
||||
// If the item count is > 0, we disable the category type in the edit. Disabled items
|
||||
// don't POST, so if the category_type is blank we just set it to the default.
|
||||
|
||||
|
||||
// Don't allow the user to change the category_type once it's been created
|
||||
if (($request->filled('category_type') && ($category->itemCount() > 0))) {
|
||||
|
@ -181,10 +168,10 @@ class CategoriesController extends Controller
|
|||
* @param $id
|
||||
* @since [v1.8]
|
||||
*/
|
||||
public function show($id) : View | RedirectResponse
|
||||
public function show(Category $category) : View | RedirectResponse
|
||||
{
|
||||
$this->authorize('view', Category::class);
|
||||
if ($category = Category::find($id)) {
|
||||
|
||||
if ($category->category_type == 'asset') {
|
||||
$category_type = 'hardware';
|
||||
$category_type_route = 'assets';
|
||||
|
@ -199,8 +186,5 @@ class CategoriesController extends Controller
|
|||
return view('categories/view', compact('category'))
|
||||
->with('category_type', $category_type)
|
||||
->with('category_type_route', $category_type_route);
|
||||
}
|
||||
|
||||
return redirect()->route('categories.index')->with('error', trans('admin/categories/message.does_not_exist'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -80,16 +80,10 @@ final class CompaniesController extends Controller
|
|||
* @since [v1.8]
|
||||
* @param int $companyId
|
||||
*/
|
||||
public function edit($companyId) : View | RedirectResponse
|
||||
public function edit(Company $company) : View | RedirectResponse
|
||||
{
|
||||
if (is_null($item = Company::find($companyId))) {
|
||||
return redirect()->route('companies.index')
|
||||
->with('error', trans('admin/companies/message.does_not_exist'));
|
||||
}
|
||||
|
||||
$this->authorize('update', $item);
|
||||
|
||||
return view('companies/edit')->with('item', $item);
|
||||
$this->authorize('update', $company);
|
||||
return view('companies/edit')->with('item', $company);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -100,14 +94,10 @@ final class CompaniesController extends Controller
|
|||
* @param ImageUploadRequest $request
|
||||
* @param int $companyId
|
||||
*/
|
||||
public function update(ImageUploadRequest $request, $companyId) : RedirectResponse
|
||||
public function update(ImageUploadRequest $request, Company $company) : RedirectResponse
|
||||
{
|
||||
if (is_null($company = Company::find($companyId))) {
|
||||
return redirect()->route('companies.index')->with('error', trans('admin/companies/message.does_not_exist'));
|
||||
}
|
||||
|
||||
$this->authorize('update', $company);
|
||||
|
||||
$company->name = $request->input('name');
|
||||
$company->phone = $request->input('phone');
|
||||
$company->fax = $request->input('fax');
|
||||
|
@ -158,15 +148,9 @@ final class CompaniesController extends Controller
|
|||
->with('success', trans('admin/companies/message.delete.success'));
|
||||
}
|
||||
|
||||
public function show($id) : View | RedirectResponse
|
||||
public function show(Company $company) : View | RedirectResponse
|
||||
{
|
||||
$this->authorize('view', Company::class);
|
||||
|
||||
if (is_null($company = Company::find($id))) {
|
||||
return redirect()->route('companies.index')
|
||||
->with('error', trans('admin/companies/message.not_found'));
|
||||
}
|
||||
|
||||
return view('companies/view')->with('company', $company);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -107,15 +107,13 @@ class ComponentsController extends Controller
|
|||
* @return \Illuminate\Contracts\View\View
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function edit($componentId = null)
|
||||
public function edit(Component $component)
|
||||
{
|
||||
if ($item = Component::find($componentId)) {
|
||||
$this->authorize('update', $item);
|
||||
|
||||
return view('components/edit', compact('item'))->with('category_type', 'component');
|
||||
}
|
||||
|
||||
return redirect()->route('components.index')->with('error', trans('admin/components/message.does_not_exist'));
|
||||
$this->authorize('update', $component);
|
||||
return view('components/edit')
|
||||
->with('item', $component)
|
||||
->with('category_type', 'component');
|
||||
}
|
||||
|
||||
|
||||
|
@ -130,11 +128,8 @@ class ComponentsController extends Controller
|
|||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
* @since [v3.0]
|
||||
*/
|
||||
public function update(ImageUploadRequest $request, $componentId = null)
|
||||
public function update(ImageUploadRequest $request, Component $component)
|
||||
{
|
||||
if (is_null($component = Component::find($componentId))) {
|
||||
return redirect()->route('components.index')->with('error', trans('admin/components/message.does_not_exist'));
|
||||
}
|
||||
$min = $component->numCheckedOut();
|
||||
$validator = Validator::make($request->all(), [
|
||||
'qty' => "required|numeric|min:$min",
|
||||
|
@ -216,17 +211,9 @@ class ComponentsController extends Controller
|
|||
* @return \Illuminate\Contracts\View\View
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function show($componentId = null)
|
||||
public function show(Component $component)
|
||||
{
|
||||
$component = Component::find($componentId);
|
||||
|
||||
if (isset($component->id)) {
|
||||
$this->authorize('view', $component);
|
||||
|
||||
return view('components/view', compact('component'));
|
||||
}
|
||||
// Redirect to the user management page
|
||||
return redirect()->route('components.index')
|
||||
->with('error', trans('admin/components/message.does_not_exist'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -104,15 +104,13 @@ class ConsumablesController extends Controller
|
|||
* @see ConsumablesController::postEdit() method that stores the form data.
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function edit($consumableId = null) : View | RedirectResponse
|
||||
public function edit(Consumable $consumable) : View | RedirectResponse
|
||||
{
|
||||
if ($item = Consumable::find($consumableId)) {
|
||||
$this->authorize($item);
|
||||
$this->authorize($consumable);
|
||||
return view('consumables/edit')
|
||||
->with('item', $consumable)
|
||||
->with('category_type', 'consumable');
|
||||
|
||||
return view('consumables/edit', compact('item'))->with('category_type', 'consumable');
|
||||
}
|
||||
|
||||
return redirect()->route('consumables.index')->with('error', trans('admin/consumables/message.does_not_exist'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -126,11 +124,8 @@ class ConsumablesController extends Controller
|
|||
* @see ConsumablesController::getEdit() method that stores the form data.
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function update(StoreConsumableRequest $request, $consumableId = null)
|
||||
public function update(StoreConsumableRequest $request, Consumable $consumable)
|
||||
{
|
||||
if (is_null($consumable = Consumable::find($consumableId))) {
|
||||
return redirect()->route('consumables.index')->with('error', trans('admin/consumables/message.does_not_exist'));
|
||||
}
|
||||
|
||||
$min = $consumable->numCheckedOut();
|
||||
$validator = Validator::make($request->all(), [
|
||||
|
@ -202,16 +197,11 @@ class ConsumablesController extends Controller
|
|||
* @return \Illuminate\Contracts\View\View
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function show($consumableId = null)
|
||||
public function show(Consumable $consumable)
|
||||
{
|
||||
$consumable = Consumable::withCount('users as users_consumables')->find($consumableId);
|
||||
$consumable = Consumable::withCount('users as users_consumables')->find($consumable->id);
|
||||
$this->authorize($consumable);
|
||||
if (isset($consumable->id)) {
|
||||
return view('consumables/view', compact('consumable'));
|
||||
}
|
||||
|
||||
return redirect()->route('consumables.index')
|
||||
->with('error', trans('admin/consumables/message.does_not_exist'));
|
||||
return view('consumables/view', compact('consumable'));
|
||||
}
|
||||
|
||||
public function clone(Consumable $consumable) : View
|
||||
|
|
|
@ -193,10 +193,8 @@ class CustomFieldsController extends Controller
|
|||
* @param int $id
|
||||
* @since [v4.0]
|
||||
*/
|
||||
public function edit(Request $request, $id) : View | RedirectResponse
|
||||
public function edit(Request $request, CustomField $field) : View | RedirectResponse
|
||||
{
|
||||
if ($field = CustomField::find($id)) {
|
||||
|
||||
$this->authorize('update', $field);
|
||||
$fieldsets = CustomFieldset::get();
|
||||
$customFormat = '';
|
||||
|
@ -210,11 +208,7 @@ class CustomFieldsController extends Controller
|
|||
'fieldsets' => $fieldsets,
|
||||
'predefinedFormats' => Helper::predefined_formats(),
|
||||
]);
|
||||
}
|
||||
|
||||
return redirect()->route("fields.index")
|
||||
->with("error", trans('admin/custom_fields/message.field.invalid'));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -229,13 +223,9 @@ class CustomFieldsController extends Controller
|
|||
* @return \Illuminate\Http\RedirectResponse
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function update(CustomFieldRequest $request, $id) : RedirectResponse
|
||||
public function update(CustomFieldRequest $request, CustomField $field) : RedirectResponse
|
||||
{
|
||||
$field = CustomField::find($id);
|
||||
|
||||
$this->authorize('update', $field);
|
||||
|
||||
|
||||
$show_in_email = $request->get("show_in_email", 0);
|
||||
$display_in_user_view = $request->get("display_in_user_view", 0);
|
||||
|
||||
|
|
|
@ -35,10 +35,12 @@ class CustomFieldsetsController extends Controller
|
|||
* @param int $id
|
||||
* @since [v1.8]
|
||||
*/
|
||||
public function show($id) : View | RedirectResponse
|
||||
public function show(CustomFieldset $fieldset) : View | RedirectResponse
|
||||
{
|
||||
$cfset = CustomFieldset::with('fields')
|
||||
->where('id', '=', $id)->orderBy('id', 'ASC')->first();
|
||||
->where('id', '=', $fieldset->id)
|
||||
->orderBy('id', 'ASC')
|
||||
->first();
|
||||
|
||||
$this->authorize('view', $cfset);
|
||||
|
||||
|
@ -122,16 +124,10 @@ class CustomFieldsetsController extends Controller
|
|||
* @param int $id
|
||||
* @since [v6.0.14]
|
||||
*/
|
||||
public function edit($id) : View | RedirectResponse
|
||||
public function edit(CustomFieldset $fieldset) : View | RedirectResponse
|
||||
{
|
||||
$this->authorize('create', CustomField::class);
|
||||
|
||||
if ($fieldset = CustomFieldset::find($id)) {
|
||||
return view('custom_fields.fieldsets.edit')->with('item', $fieldset);
|
||||
}
|
||||
|
||||
return redirect()->route('fields.index')->with('error', trans('admin/custom_fields/general.fieldset_does_not_exist', ['id' => $id]));
|
||||
|
||||
return view('custom_fields.fieldsets.edit')->with('item', $fieldset);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -141,23 +137,18 @@ class CustomFieldsetsController extends Controller
|
|||
* @param int $id
|
||||
* @since [v6.0.14]
|
||||
*/
|
||||
public function update(Request $request, $id) : RedirectResponse
|
||||
public function update(Request $request, CustomFieldset $fieldset) : RedirectResponse
|
||||
{
|
||||
$this->authorize('create', CustomField::class);
|
||||
|
||||
if ($fieldset = CustomFieldset::find($id)) {
|
||||
|
||||
$fieldset->name = $request->input('name');
|
||||
|
||||
if ($fieldset->save()) {
|
||||
return redirect()->route('fields.index')->with('success', trans('admin/custom_fields/general.fieldset_updated'));
|
||||
}
|
||||
|
||||
return redirect()->back()->withInput()->withErrors($fieldset->getErrors());
|
||||
$fieldset->name = $request->input('name');
|
||||
|
||||
if ($fieldset->save()) {
|
||||
return redirect()->route('fields.index')->with('success', trans('admin/custom_fields/general.fieldset_updated'));
|
||||
}
|
||||
|
||||
return redirect()->route('fields.index')->with('error', trans('admin/custom_fields/general.fieldset_does_not_exist', ['id' => $id]));
|
||||
return redirect()->back()->withInput()->withErrors($fieldset->getErrors());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -73,17 +73,10 @@ class DepartmentsController extends Controller
|
|||
* @param int $id
|
||||
* @since [v4.0]
|
||||
*/
|
||||
public function show($id) : View | RedirectResponse
|
||||
public function show(Department $department) : View | RedirectResponse
|
||||
{
|
||||
$department = Department::find($id);
|
||||
|
||||
$this->authorize('view', $department);
|
||||
|
||||
if (isset($department->id)) {
|
||||
return view('departments/view', compact('department'));
|
||||
}
|
||||
|
||||
return redirect()->route('departments.index')->with('error', trans('admin/departments/message.does_not_exist'));
|
||||
return view('departments/view', compact('department'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -139,15 +132,10 @@ class DepartmentsController extends Controller
|
|||
* @param int $departmentId
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function edit($departmentId = null) : View | RedirectResponse
|
||||
public function edit(Department $department) : View | RedirectResponse
|
||||
{
|
||||
if (is_null($item = Department::find($departmentId))) {
|
||||
return redirect()->back()->with('error', trans('admin/locations/message.does_not_exist'));
|
||||
}
|
||||
|
||||
$this->authorize('update', $item);
|
||||
|
||||
return view('departments/edit', compact('item'));
|
||||
$this->authorize('update', $department);
|
||||
return view('departments/edit')->with('item', $department);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -158,11 +146,8 @@ class DepartmentsController extends Controller
|
|||
* @param int $departmentId
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function update(ImageUploadRequest $request, $id) : RedirectResponse
|
||||
public function update(ImageUploadRequest $request, Department $department) : RedirectResponse
|
||||
{
|
||||
if (is_null($department = Department::find($id))) {
|
||||
return redirect()->route('departments.index')->with('error', trans('admin/departments/message.does_not_exist'));
|
||||
}
|
||||
|
||||
$this->authorize('update', $department);
|
||||
|
||||
|
|
|
@ -95,17 +95,11 @@ class DepreciationsController extends Controller
|
|||
* @param int $depreciationId
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function edit($depreciationId = null) : RedirectResponse | View
|
||||
public function edit(Depreciation $depreciation) : RedirectResponse | View
|
||||
{
|
||||
// Check if the depreciation exists
|
||||
if (is_null($item = Depreciation::find($depreciationId))) {
|
||||
// Redirect to the blogs management page
|
||||
return redirect()->route('depreciations.index')->with('error', trans('admin/depreciations/message.does_not_exist'));
|
||||
}
|
||||
|
||||
$this->authorize('update', $item);
|
||||
|
||||
return view('depreciations/edit', compact('item'));
|
||||
$this->authorize('update', $depreciation);
|
||||
return view('depreciations/edit')->with('item', $depreciation);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -117,17 +111,10 @@ class DepreciationsController extends Controller
|
|||
* @param int $depreciationId
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function update(Request $request, $depreciationId = null) : RedirectResponse
|
||||
public function update(Request $request, Depreciation $depreciation) : RedirectResponse
|
||||
{
|
||||
// Check if the depreciation exists
|
||||
if (is_null($depreciation = Depreciation::find($depreciationId))) {
|
||||
// Redirect to the blogs management page
|
||||
return redirect()->route('depreciations.index')->with('error', trans('admin/depreciations/message.does_not_exist'));
|
||||
}
|
||||
|
||||
$this->authorize('update', $depreciation);
|
||||
|
||||
// Depreciation data
|
||||
$depreciation->name = $request->input('name');
|
||||
$depreciation->months = $request->input('months');
|
||||
|
||||
|
@ -191,12 +178,12 @@ class DepreciationsController extends Controller
|
|||
* @param int $depreciationId
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function show($id) : View | RedirectResponse
|
||||
public function show(Depreciation $depreciation) : View | RedirectResponse
|
||||
{
|
||||
$depreciation = Depreciation::withCount('assets as assets_count')
|
||||
->withCount('models as models_count')
|
||||
->withCount('licenses as licenses_count')
|
||||
->find($id);
|
||||
->find($depreciation->id);
|
||||
|
||||
$this->authorize('view', $depreciation);
|
||||
|
||||
|
|
|
@ -79,19 +79,12 @@ class GroupsController extends Controller
|
|||
* @param int $id
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function edit($id) : View | RedirectResponse
|
||||
public function edit(Group $group) : View | RedirectResponse
|
||||
{
|
||||
$group = Group::find($id);
|
||||
|
||||
if ($group) {
|
||||
$permissions = config('permissions');
|
||||
$groupPermissions = $group->decodePermissions();
|
||||
$selected_array = Helper::selectedPermissionsArray($permissions, $groupPermissions);
|
||||
|
||||
return view('groups.edit', compact('group', 'permissions', 'selected_array', 'groupPermissions'));
|
||||
}
|
||||
|
||||
return redirect()->route('groups.index')->with('error', trans('admin/groups/message.group_not_found', ['id' => $id]));
|
||||
$permissions = config('permissions');
|
||||
$groupPermissions = $group->decodePermissions();
|
||||
$selected_array = Helper::selectedPermissionsArray($permissions, $groupPermissions);
|
||||
return view('groups.edit', compact('group', 'permissions', 'selected_array', 'groupPermissions'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -102,11 +95,8 @@ class GroupsController extends Controller
|
|||
* @param int $id
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function update(Request $request, $id = null) : RedirectResponse
|
||||
public function update(Request $request, Group $group) : RedirectResponse
|
||||
{
|
||||
if (! $group = Group::find($id)) {
|
||||
return redirect()->route('groups.index')->with('error', trans('admin/groups/message.group_not_found', ['id' => $id]));
|
||||
}
|
||||
$group->name = $request->input('name');
|
||||
$group->permissions = json_encode($request->input('permission'));
|
||||
$group->notes = $request->input('notes');
|
||||
|
@ -151,14 +141,8 @@ class GroupsController extends Controller
|
|||
* @param $id
|
||||
* @since [v4.0.11]
|
||||
*/
|
||||
public function show($id) : View | RedirectResponse
|
||||
public function show(Group $group) : View | RedirectResponse
|
||||
{
|
||||
$group = Group::find($id);
|
||||
|
||||
if ($group) {
|
||||
return view('groups/view', compact('group'));
|
||||
}
|
||||
|
||||
return redirect()->route('groups.index')->with('error', trans('admin/groups/message.group_not_found', ['id' => $id]));
|
||||
return view('groups/view', compact('group'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,10 +4,8 @@ namespace App\Http\Controllers\Kits;
|
|||
|
||||
use App\Http\Controllers\CheckInOutRequest;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\PredefinedKit;
|
||||
use App\Models\Asset;
|
||||
use App\Models\PredefinedLicence;
|
||||
use App\Models\PredefinedModel;
|
||||
use App\Models\PredefinedKit;
|
||||
use App\Models\User;
|
||||
use App\Services\PredefinedKitCheckoutService;
|
||||
use Illuminate\Http\Request;
|
||||
|
@ -35,12 +33,9 @@ class CheckoutKitController extends Controller
|
|||
* @author [D. Minaev.] [<dmitriy.minaev.v@gmail.com>]
|
||||
* @return \Illuminate\Contracts\View\View View to checkout
|
||||
*/
|
||||
public function showCheckout($kit_id)
|
||||
public function showCheckout(PredefinedKit $kit)
|
||||
{
|
||||
$this->authorize('checkout', Asset::class);
|
||||
|
||||
$kit = PredefinedKit::findOrFail($kit_id);
|
||||
|
||||
return view('kits/checkout')->with('kit', $kit);
|
||||
}
|
||||
|
||||
|
|
|
@ -76,17 +76,15 @@ class PredefinedKitsController extends Controller
|
|||
* @param int $kit_id
|
||||
* @return \Illuminate\Contracts\View\View
|
||||
*/
|
||||
public function edit($kit_id = null)
|
||||
public function edit(PredefinedKit $kit)
|
||||
{
|
||||
$this->authorize('update', PredefinedKit::class);
|
||||
if ($kit = PredefinedKit::find($kit_id)) {
|
||||
|
||||
return view('kits/edit')
|
||||
->with('item', $kit)
|
||||
->with('models', $kit->models)
|
||||
->with('licenses', $kit->licenses);
|
||||
}
|
||||
|
||||
return redirect()->route('kits.index')->with('error', trans('admin/kits/general.kit_none'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -98,15 +96,9 @@ class PredefinedKitsController extends Controller
|
|||
* @param int $kit_id
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function update(ImageUploadRequest $request, $kit_id = null)
|
||||
public function update(ImageUploadRequest $request, PredefinedKit $kit)
|
||||
{
|
||||
$this->authorize('update', PredefinedKit::class);
|
||||
// Check if the kit exists
|
||||
if (is_null($kit = PredefinedKit::find($kit_id))) {
|
||||
// Redirect to the kits management page
|
||||
return redirect()->route('kits.index')->with('error', trans('admin/kits/general.kit_none'));
|
||||
}
|
||||
|
||||
$kit->name = $request->input('name');
|
||||
|
||||
if ($kit->save()) {
|
||||
|
@ -153,9 +145,9 @@ class PredefinedKitsController extends Controller
|
|||
* @param int $modelId
|
||||
* @return \Illuminate\Contracts\View\View
|
||||
*/
|
||||
public function show($kit_id = null)
|
||||
public function show(PredefinedKit $kit)
|
||||
{
|
||||
return $this->edit($kit_id);
|
||||
return $this->edit($kit);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -28,16 +28,11 @@ class LicenseCheckinController extends Controller
|
|||
* @return \Illuminate\Contracts\View\View
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function create($seatId = null, $backTo = null)
|
||||
public function create(LicenseSeat $licenseSeat, $backTo = null)
|
||||
{
|
||||
// Check if the asset exists
|
||||
if (is_null($licenseSeat = LicenseSeat::find($seatId)) || is_null($license = License::find($licenseSeat->license_id))) {
|
||||
// Redirect to the asset management page with error
|
||||
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.not_found'));
|
||||
}
|
||||
|
||||
$license = License::find($licenseSeat->license_id);
|
||||
$this->authorize('checkout', $license);
|
||||
|
||||
return view('licenses/checkin', compact('licenseSeat'))->with('backto', $backTo);
|
||||
}
|
||||
|
||||
|
|
|
@ -28,33 +28,24 @@ class LicenseCheckoutController extends Controller
|
|||
* @return \Illuminate\Contracts\View\View
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function create($id)
|
||||
public function create(License $license)
|
||||
{
|
||||
$this->authorize('checkout', $license);
|
||||
|
||||
if ($license = License::find($id)) {
|
||||
if ($license->category) {
|
||||
|
||||
$this->authorize('checkout', $license);
|
||||
|
||||
if ($license->category) {
|
||||
|
||||
// Make sure there is at least one available to checkout
|
||||
if ($license->availCount()->count() < 1){
|
||||
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.checkout.not_enough_seats'));
|
||||
}
|
||||
|
||||
// Return the checkout view
|
||||
return view('licenses/checkout', compact('license'));
|
||||
// Make sure there is at least one available to checkout
|
||||
if ($license->availCount()->count() < 1) {
|
||||
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.checkout.not_enough_seats'));
|
||||
}
|
||||
|
||||
// Invalid category
|
||||
return redirect()->route('licenses.edit', ['license' => $license->id])
|
||||
->with('error', trans('general.invalid_item_category_single', ['type' => trans('general.license')]));
|
||||
|
||||
// Return the checkout view
|
||||
return view('licenses/checkout', compact('license'));
|
||||
}
|
||||
|
||||
// Not found
|
||||
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.not_found'));
|
||||
|
||||
// Invalid category
|
||||
return redirect()->route('licenses.edit', ['license' => $license->id])
|
||||
->with('error', trans('general.invalid_item_category_single', ['type' => trans('general.license')]));
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -121,13 +121,10 @@ class LicensesController extends Controller
|
|||
* @return \Illuminate\Contracts\View\View
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function edit($licenseId = null)
|
||||
public function edit(License $license)
|
||||
{
|
||||
if (is_null($item = License::find($licenseId))) {
|
||||
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.does_not_exist'));
|
||||
}
|
||||
|
||||
$this->authorize('update', $item);
|
||||
$this->authorize('update', $license);
|
||||
|
||||
$maintained_list = [
|
||||
'' => 'Maintained',
|
||||
|
@ -135,7 +132,8 @@ class LicensesController extends Controller
|
|||
'0' => 'No',
|
||||
];
|
||||
|
||||
return view('licenses/edit', compact('item'))
|
||||
return view('licenses/edit')
|
||||
->with('item', $license)
|
||||
->with('depreciation_list', Helper::depreciationList())
|
||||
->with('maintained_list', $maintained_list);
|
||||
}
|
||||
|
@ -153,11 +151,9 @@ class LicensesController extends Controller
|
|||
* @return \Illuminate\Http\RedirectResponse
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function update(Request $request, $licenseId = null)
|
||||
public function update(Request $request, License $license)
|
||||
{
|
||||
if (is_null($license = License::find($licenseId))) {
|
||||
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.does_not_exist'));
|
||||
}
|
||||
|
||||
|
||||
$this->authorize('update', $license);
|
||||
|
||||
|
@ -201,10 +197,10 @@ class LicensesController extends Controller
|
|||
* @return \Illuminate\Http\RedirectResponse
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function destroy($licenseId)
|
||||
public function destroy(License $license)
|
||||
{
|
||||
// Check if the license exists
|
||||
if (is_null($license = License::find($licenseId))) {
|
||||
if (is_null($license = License::find($license->id))) {
|
||||
// Redirect to the license management page
|
||||
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.not_found'));
|
||||
}
|
||||
|
@ -238,14 +234,9 @@ class LicensesController extends Controller
|
|||
* @return \Illuminate\Contracts\View\View
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function show($licenseId = null)
|
||||
public function show(License $license)
|
||||
{
|
||||
$license = License::with('assignedusers')->find($licenseId);
|
||||
|
||||
if (!$license) {
|
||||
return redirect()->route('licenses.index')
|
||||
->with('error', trans('admin/licenses/message.does_not_exist'));
|
||||
}
|
||||
$license = License::with('assignedusers')->find($license->id);
|
||||
|
||||
$users_count = User::where('autoassign_licenses', '1')->count();
|
||||
$total_seats_count = $license->totalSeatsByLicenseID();
|
||||
|
@ -267,10 +258,10 @@ class LicensesController extends Controller
|
|||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @param int $licenseId
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
* @return \Illuminate\Http\RedirectResponse | \Illuminate\Contracts\View\View
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function getClone($licenseId = null)
|
||||
public function getClone($licenseId = null) : \Illuminate\Contracts\View\View | \Illuminate\Http\RedirectResponse
|
||||
{
|
||||
if (is_null($license_to_clone = License::find($licenseId))) {
|
||||
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.does_not_exist'));
|
||||
|
|
|
@ -97,15 +97,10 @@ class LocationsController extends Controller
|
|||
* @param int $locationId
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function edit($locationId = null) : View | RedirectResponse
|
||||
public function edit(Location $location) : View | RedirectResponse
|
||||
{
|
||||
$this->authorize('update', Location::class);
|
||||
// Check if the location exists
|
||||
if (is_null($item = Location::find($locationId))) {
|
||||
return redirect()->route('locations.index')->with('error', trans('admin/locations/message.does_not_exist'));
|
||||
}
|
||||
|
||||
return view('locations/edit', compact('item'));
|
||||
return view('locations/edit');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -117,15 +112,10 @@ class LocationsController extends Controller
|
|||
* @param int $locationId
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function update(ImageUploadRequest $request, $locationId = null) : RedirectResponse
|
||||
public function update(ImageUploadRequest $request, Location $location) : RedirectResponse
|
||||
{
|
||||
$this->authorize('update', Location::class);
|
||||
// Check if the location exists
|
||||
if (is_null($location = Location::find($locationId))) {
|
||||
return redirect()->route('locations.index')->with('error', trans('admin/locations/message.does_not_exist'));
|
||||
}
|
||||
|
||||
// Update the location data
|
||||
$location->name = $request->input('name');
|
||||
$location->parent_id = $request->input('parent_id', null);
|
||||
$location->currency = $request->input('currency', '$');
|
||||
|
@ -194,7 +184,7 @@ class LocationsController extends Controller
|
|||
* @param int $id
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function show($id = null) : View | RedirectResponse
|
||||
public function show(Location $location) : View | RedirectResponse
|
||||
{
|
||||
$location = Location::withCount('assignedAssets as assigned_assets_count')
|
||||
->withCount('assets as assets_count')
|
||||
|
@ -202,7 +192,7 @@ class LocationsController extends Controller
|
|||
->withCount('children as children_count')
|
||||
->withCount('users as users_count')
|
||||
->withTrashed()
|
||||
->find($id);
|
||||
->find($location->id);
|
||||
|
||||
if (isset($location->id)) {
|
||||
return view('locations/view', compact('location'));
|
||||
|
|
|
@ -85,18 +85,10 @@ class ManufacturersController extends Controller
|
|||
* @param int $manufacturerId
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function edit($manufacturerId = null) : View | RedirectResponse
|
||||
public function edit(Manufacturer $manufacturer) : View | RedirectResponse
|
||||
{
|
||||
// Handles manufacturer checks and permissions.
|
||||
$this->authorize('update', Manufacturer::class);
|
||||
|
||||
// Check if the manufacturer exists
|
||||
if (! $item = Manufacturer::find($manufacturerId)) {
|
||||
return redirect()->route('manufacturers.index')->with('error', trans('admin/manufacturers/message.does_not_exist'));
|
||||
}
|
||||
|
||||
// Show the page
|
||||
return view('manufacturers/edit', compact('item'));
|
||||
return view('manufacturers/edit')->with('item', $manufacturer);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -108,16 +100,10 @@ class ManufacturersController extends Controller
|
|||
* @param int $manufacturerId
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function update(ImageUploadRequest $request, $manufacturerId = null) : RedirectResponse
|
||||
public function update(ImageUploadRequest $request, Manufacturer $manufacturer) : RedirectResponse
|
||||
{
|
||||
$this->authorize('update', Manufacturer::class);
|
||||
// Check if the manufacturer exists
|
||||
if (is_null($manufacturer = Manufacturer::find($manufacturerId))) {
|
||||
// Redirect to the manufacturer page
|
||||
return redirect()->route('manufacturers.index')->with('error', trans('admin/manufacturers/message.does_not_exist'));
|
||||
}
|
||||
|
||||
// Save the data
|
||||
$manufacturer->name = $request->input('name');
|
||||
$manufacturer->url = $request->input('url');
|
||||
$manufacturer->support_url = $request->input('support_url');
|
||||
|
@ -185,18 +171,10 @@ class ManufacturersController extends Controller
|
|||
* @param int $manufacturerId
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function show($manufacturerId = null) : View | RedirectResponse
|
||||
public function show(Manufacturer $manufacturer) : View | RedirectResponse
|
||||
{
|
||||
$this->authorize('view', Manufacturer::class);
|
||||
$manufacturer = Manufacturer::find($manufacturerId);
|
||||
|
||||
if (isset($manufacturer->id)) {
|
||||
return view('manufacturers/view', compact('manufacturer'));
|
||||
}
|
||||
|
||||
$error = trans('admin/manufacturers/message.does_not_exist');
|
||||
// Redirect to the user management page
|
||||
return redirect()->route('manufacturers.index')->with('error', $error);
|
||||
return view('manufacturers/view', compact('manufacturer'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -26,14 +26,10 @@ class StatuslabelsController extends Controller
|
|||
return view('statuslabels.index');
|
||||
}
|
||||
|
||||
public function show($id) : View | RedirectResponse
|
||||
public function show(Statuslabel $statuslabel) : View | RedirectResponse
|
||||
{
|
||||
$this->authorize('view', Statuslabel::class);
|
||||
if ($statuslabel = Statuslabel::find($id)) {
|
||||
return view('statuslabels.view')->with('statuslabel', $statuslabel);
|
||||
}
|
||||
|
||||
return redirect()->route('statuslabels.index')->with('error', trans('admin/statuslabels/message.does_not_exist'));
|
||||
return view('statuslabels.view')->with('statuslabel', $statuslabel);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -91,20 +87,15 @@ class StatuslabelsController extends Controller
|
|||
*
|
||||
* @param int $statuslabelId
|
||||
*/
|
||||
public function edit($statuslabelId = null) : View | RedirectResponse
|
||||
public function edit(Statuslabel $statuslabel) : View | RedirectResponse
|
||||
{
|
||||
$this->authorize('update', Statuslabel::class);
|
||||
// Check if the Statuslabel exists
|
||||
if (is_null($item = Statuslabel::find($statuslabelId))) {
|
||||
// Redirect to the blogs management page
|
||||
return redirect()->route('statuslabels.index')->with('error', trans('admin/statuslabels/message.does_not_exist'));
|
||||
}
|
||||
|
||||
$use_statuslabel_type = $item->getStatuslabelType();
|
||||
|
||||
$statuslabel_types = ['' => trans('admin/hardware/form.select_statustype')] + ['undeployable' => trans('admin/hardware/general.undeployable')] + ['pending' => trans('admin/hardware/general.pending')] + ['archived' => trans('admin/hardware/general.archived')] + ['deployable' => trans('admin/hardware/general.deployable')];
|
||||
|
||||
return view('statuslabels/edit', compact('item', 'statuslabel_types'))->with('use_statuslabel_type', $use_statuslabel_type);
|
||||
return view('statuslabels/edit', compact('statuslabel_types'))
|
||||
->with('item', $statuslabel)
|
||||
->with('use_statuslabel_type', $statuslabel);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -112,14 +103,9 @@ class StatuslabelsController extends Controller
|
|||
*
|
||||
* @param int $statuslabelId
|
||||
*/
|
||||
public function update(Request $request, $statuslabelId = null) : RedirectResponse
|
||||
public function update(Request $request, Statuslabel $statuslabel) : RedirectResponse
|
||||
{
|
||||
$this->authorize('update', Statuslabel::class);
|
||||
// Check if the Statuslabel exists
|
||||
if (is_null($statuslabel = Statuslabel::find($statuslabelId))) {
|
||||
// Redirect to the blogs management page
|
||||
return redirect()->route('statuslabels.index')->with('error', trans('admin/statuslabels/message.does_not_exist'));
|
||||
}
|
||||
|
||||
if (! $request->filled('statuslabel_types')) {
|
||||
return redirect()->back()->withInput()->withErrors(['statuslabel_types' => trans('validation.statuslabel_type')]);
|
||||
|
|
|
@ -77,17 +77,10 @@ class SuppliersController extends Controller
|
|||
*
|
||||
* @param int $supplierId
|
||||
*/
|
||||
public function edit($supplierId = null) : View | RedirectResponse
|
||||
public function edit(Supplier $supplier) : View | RedirectResponse
|
||||
{
|
||||
$this->authorize('update', Supplier::class);
|
||||
// Check if the supplier exists
|
||||
if (is_null($item = Supplier::find($supplierId))) {
|
||||
// Redirect to the supplier page
|
||||
return redirect()->route('suppliers.index')->with('error', trans('admin/suppliers/message.does_not_exist'));
|
||||
}
|
||||
|
||||
// Show the page
|
||||
return view('suppliers/edit', compact('item'));
|
||||
return view('suppliers/edit')->with('item', $supplier);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -95,14 +88,9 @@ class SuppliersController extends Controller
|
|||
*
|
||||
* @param int $supplierId
|
||||
*/
|
||||
public function update($supplierId, ImageUploadRequest $request) : RedirectResponse
|
||||
public function update(ImageUploadRequest $request, Supplier $supplier) : RedirectResponse
|
||||
{
|
||||
$this->authorize('update', Supplier::class);
|
||||
|
||||
if (is_null($supplier = Supplier::find($supplierId))) {
|
||||
return redirect()->route('suppliers.index')->with('error', trans('admin/suppliers/message.does_not_exist'));
|
||||
}
|
||||
|
||||
// Save the data
|
||||
$supplier->name = request('name');
|
||||
$supplier->address = request('address');
|
||||
|
@ -163,15 +151,10 @@ class SuppliersController extends Controller
|
|||
* @param null $supplierId
|
||||
* @internal param int $assetId
|
||||
*/
|
||||
public function show($supplierId = null) : View | RedirectResponse
|
||||
public function show(Supplier $supplier) : View | RedirectResponse
|
||||
{
|
||||
$this->authorize('view', Supplier::class);
|
||||
$supplier = Supplier::find($supplierId);
|
||||
return view('suppliers/view', compact('supplier'));
|
||||
|
||||
if (isset($supplier->id)) {
|
||||
return view('suppliers/view', compact('supplier'));
|
||||
}
|
||||
|
||||
return redirect()->route('suppliers.index')->with('error', trans('admin/suppliers/message.does_not_exist'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -182,11 +182,11 @@ class UsersController extends Controller
|
|||
* @internal param int $id
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function edit($id)
|
||||
public function edit(User $user)
|
||||
{
|
||||
|
||||
$this->authorize('update', User::class);
|
||||
$user = User::with(['assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc'])->withTrashed()->find($id);
|
||||
$user = User::with(['assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc'])->withTrashed()->find($user->id);
|
||||
|
||||
if ($user) {
|
||||
|
||||
|
@ -198,7 +198,7 @@ class UsersController extends Controller
|
|||
$userPermissions = Helper::selectedPermissionsArray($permissions, $user->permissions);
|
||||
$permissions = $this->filterDisplayable($permissions);
|
||||
|
||||
return view('users/edit', compact('user', 'groups', 'userGroups', 'permissions', 'userPermissions'))->with('item', $user);
|
||||
return view('users/edit', compact('user', 'groups', 'userGroups', 'permissions', 'userPermissions'));
|
||||
}
|
||||
|
||||
return redirect()->route('users.index')->with('error', trans('admin/users/message.user_not_found', compact('id')));
|
||||
|
@ -324,7 +324,7 @@ class UsersController extends Controller
|
|||
* @return \Illuminate\Http\RedirectResponse
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function destroy(DeleteUserRequest $request, $id = null)
|
||||
public function destroy(DeleteUserRequest $request, $id)
|
||||
{
|
||||
$this->authorize('delete', User::class);
|
||||
|
||||
|
@ -398,23 +398,18 @@ class UsersController extends Controller
|
|||
* @return \Illuminate\Contracts\View\View
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function show($userId = null)
|
||||
public function show(User $user)
|
||||
{
|
||||
// Make sure the user can view users at all
|
||||
$this->authorize('view', User::class);
|
||||
|
||||
$user = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc')->withTrashed()->find($userId);
|
||||
$user = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc')->withTrashed()->find($user->id);
|
||||
|
||||
// Make sure they can view this particular user
|
||||
$this->authorize('view', $user);
|
||||
|
||||
if ($user) {
|
||||
$userlog = $user->userlog->load('item');
|
||||
return view('users/view', compact('user', 'userlog'))->with('settings', Setting::getSettings());
|
||||
}
|
||||
|
||||
return redirect()->route('users.index')->with('error', trans('admin/users/message.user_not_found', ['id' => $userId]));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -428,7 +423,7 @@ class UsersController extends Controller
|
|||
* @return \Illuminate\Contracts\View\View
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function getClone(Request $request, $id = null)
|
||||
public function getClone(Request $request, User $user)
|
||||
{
|
||||
$this->authorize('create', User::class);
|
||||
|
||||
|
@ -438,7 +433,7 @@ class UsersController extends Controller
|
|||
app('request')->request->set('permissions', $permissions);
|
||||
|
||||
|
||||
$user_to_clone = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc')->withTrashed()->find($id);
|
||||
$user_to_clone = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc')->withTrashed()->find($user->id);
|
||||
// Make sure they can view this particular user
|
||||
$this->authorize('view', $user_to_clone);
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ class DeleteUserRequest extends FormRequest
|
|||
|
||||
public function prepareForValidation(): void
|
||||
{
|
||||
$user_to_delete = User::withTrashed()->find(request()->route('user'));
|
||||
$user_to_delete = User::withTrashed()->with('managesUsers')->find(request()->route('user'));
|
||||
|
||||
if ($user_to_delete) {
|
||||
$this->merge([
|
||||
|
@ -61,7 +61,8 @@ class DeleteUserRequest extends FormRequest
|
|||
public function messages(): array
|
||||
{
|
||||
|
||||
$user_to_delete = User::withTrashed()->find(request()->route('user'));
|
||||
$user_to_delete = User::withTrashed()->with('managesUsers')->find(request()->route('user'));
|
||||
|
||||
$messages = [];
|
||||
|
||||
if ($user_to_delete) {
|
||||
|
|
|
@ -22,6 +22,15 @@ class AssetMaintenancesPresenter extends Presenter
|
|||
'title' => trans('general.id'),
|
||||
'visible' => false,
|
||||
], [
|
||||
'field' => 'title',
|
||||
'searchable' => true,
|
||||
'sortable' => true,
|
||||
'switchable' => true,
|
||||
'title' => trans('general.name'),
|
||||
'visible' => true,
|
||||
'formatter' => 'maintenancesLinkFormatter',
|
||||
],
|
||||
[
|
||||
'field' => 'company',
|
||||
'searchable' => true,
|
||||
'sortable' => true,
|
||||
|
|
|
@ -35,7 +35,7 @@ class AssetPresenter extends Presenter
|
|||
'switchable' => true,
|
||||
'title' => trans('general.company'),
|
||||
'visible' => false,
|
||||
'formatter' => 'assetCompanyObjFilterFormatter',
|
||||
'formatter' => 'companiesLinkObjFormatter',
|
||||
], [
|
||||
'field' => 'name',
|
||||
'searchable' => true,
|
||||
|
|
|
@ -28,7 +28,7 @@ class StatusLabelPresenter extends Presenter
|
|||
'switchable' => false,
|
||||
'title' => trans('general.name'),
|
||||
'visible' => true,
|
||||
'formatter' => 'statuslabelsAssetLinkFormatter',
|
||||
'formatter' => 'statuslabelsLinkFormatter',
|
||||
],[
|
||||
'field' => 'type',
|
||||
'searchable' => false,
|
||||
|
|
539
app/Providers/BreadcrumbsServiceProvider.php
Normal file
539
app/Providers/BreadcrumbsServiceProvider.php
Normal file
|
@ -0,0 +1,539 @@
|
|||
<?php namespace App\Providers;
|
||||
|
||||
use App\Models\Accessory;
|
||||
use App\Models\Asset;
|
||||
use App\Models\AssetMaintenance;
|
||||
use App\Models\AssetModel;
|
||||
use App\Models\Category;
|
||||
use App\Models\Company;
|
||||
use App\Models\Component;
|
||||
use App\Models\Consumable;
|
||||
use App\Models\CustomField;
|
||||
use App\Models\CustomFieldset;
|
||||
use App\Models\Department;
|
||||
use App\Models\Depreciation;
|
||||
use App\Models\Group;
|
||||
use App\Models\License;
|
||||
use App\Models\LicenseSeat;
|
||||
use App\Models\Location;
|
||||
use App\Models\Manufacturer;
|
||||
use App\Models\PredefinedKit;
|
||||
use App\Models\Statuslabel;
|
||||
use App\Models\Supplier;
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Tabuna\Breadcrumbs\Breadcrumbs;
|
||||
use Tabuna\Breadcrumbs\Trail;
|
||||
|
||||
class BreadcrumbsServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Handles the resource routes for first-class objects
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
|
||||
// Default home
|
||||
Breadcrumbs::for('home', fn (Trail $trail) =>
|
||||
$trail->push('<x-icon type="home" /><span class="sr-only">'.trans('general.dashboard').'</span>', route('home'))
|
||||
);
|
||||
|
||||
/**
|
||||
* Asset Breadcrumbs
|
||||
*/
|
||||
|
||||
|
||||
if ((request()->is('hardware*')) && (request()->status!='')) {
|
||||
Breadcrumbs::for('hardware.index', fn (Trail $trail) =>
|
||||
$trail->parent('home', route('home'))
|
||||
->push(trans('general.assets'), route('hardware.index'))
|
||||
->push(request()->status.' Assets', route('hardware.index', ['status' => request()->status]))
|
||||
);
|
||||
|
||||
} else {
|
||||
Breadcrumbs::for('hardware.index', fn (Trail $trail) =>
|
||||
$trail->parent('home', route('home'))
|
||||
->push(trans('general.assets'), route('hardware.index'))
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Breadcrumbs::for('hardware.create', fn (Trail $trail) =>
|
||||
$trail->parent('hardware.index', route('hardware.index'))
|
||||
->push(trans('general.create'), route('hardware.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('hardware.show', fn (Trail $trail, Asset $asset) =>
|
||||
$trail->parent('hardware.index', route('hardware.index'))
|
||||
->push($asset->present()->fullName(), route('hardware.show', $asset))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('hardware.edit', fn (Trail $trail, Asset $asset) =>
|
||||
$trail->parent('hardware.index', route('hardware.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $asset->asset_tag]), route('hardware.edit', $asset))
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* Asset Model Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('models.index', fn (Trail $trail) =>
|
||||
$trail->parent('hardware.index', route('hardware.index'))
|
||||
->push(trans('general.asset_models'), route('models.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('models.create', fn (Trail $trail) =>
|
||||
$trail->parent('models.index', route('models.index'))
|
||||
->push(trans('general.create'), route('models.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('models.show', fn (Trail $trail, AssetModel $model) =>
|
||||
$trail->parent('models.index', route('models.index'))
|
||||
->push($model->name, route('models.show', $model))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('models.edit', fn (Trail $trail, AssetModel $model) =>
|
||||
$trail->parent('models.index', route('models.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $model->name]), route('models.edit', $model))
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* Accessories Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('accessories.index', fn (Trail $trail) =>
|
||||
$trail->parent('home', route('home'))
|
||||
->push(trans('general.accessories'), route('accessories.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('accessories.create', fn (Trail $trail) =>
|
||||
$trail->parent('accessories.index', route('accessories.index'))
|
||||
->push(trans('general.create'), route('accessories.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('accessories.show', fn (Trail $trail, Accessory $accessory) =>
|
||||
$trail->parent('accessories.index', route('accessories.index'))
|
||||
->push($accessory->name, route('accessories.show', $accessory))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('accessories.edit', fn (Trail $trail, Accessory $accessory) =>
|
||||
$trail->parent('accessories.index', route('accessories.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $accessory->name]), route('accessories.edit', $accessory))
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* Categories Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('categories.index', fn (Trail $trail) =>
|
||||
$trail->parent('home', route('home'))
|
||||
->push(trans('general.categories'), route('categories.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('categories.create', fn (Trail $trail) =>
|
||||
$trail->parent('categories.index', route('categories.index'))
|
||||
->push(trans('general.create'), route('categories.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('categories.show', fn (Trail $trail, Category $category) =>
|
||||
$trail->parent('categories.index', route('categories.index'))
|
||||
->push($category->name, route('categories.show', $category))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('categories.edit', fn (Trail $trail, Category $category) =>
|
||||
$trail->parent('categories.index', route('categories.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $category->name]), route('categories.edit', $category))
|
||||
);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Company Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('companies.index', fn (Trail $trail) =>
|
||||
$trail->parent('home', route('home'))
|
||||
->push(trans('general.companies'), route('companies.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('companies.create', fn (Trail $trail) =>
|
||||
$trail->parent('companies.index', route('companies.index'))
|
||||
->push(trans('general.create'), route('companies.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('companies.show', fn (Trail $trail, Company $company) =>
|
||||
$trail->parent('companies.index', route('companies.index'))
|
||||
->push($company->name, route('companies.show', $company))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('companies.edit', fn (Trail $trail, Company $company) =>
|
||||
$trail->parent('companies.index', route('companies.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $company->name]), route('companies.edit', $company))
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* Components Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('components.index', fn (Trail $trail) =>
|
||||
$trail->parent('home', route('home'))
|
||||
->push(trans('general.components'), route('components.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('components.create', fn (Trail $trail) =>
|
||||
$trail->parent('components.index', route('components.index'))
|
||||
->push(trans('general.create'), route('components.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('components.show', fn (Trail $trail, Component $component) =>
|
||||
$trail->parent('components.index', route('components.index'))
|
||||
->push($component->name, route('components.show', $component))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('components.edit', fn (Trail $trail, Component $component) =>
|
||||
$trail->parent('components.index', route('components.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $component->name]), route('components.edit', $component))
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* Consumables Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('consumables.index', fn (Trail $trail) =>
|
||||
$trail->parent('home', route('home'))
|
||||
->push(trans('general.consumables'), route('consumables.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('consumables.create', fn (Trail $trail) =>
|
||||
$trail->parent('consumables.index', route('consumables.index'))
|
||||
->push(trans('general.create'), route('consumables.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('consumables.show', fn (Trail $trail, Consumable $consumable) =>
|
||||
$trail->parent('consumables.index', route('consumables.index'))
|
||||
->push($consumable->name, route('consumables.show', $consumable))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('consumables.edit', fn (Trail $trail, Consumable $consumable) =>
|
||||
$trail->parent('consumables.index', route('consumables.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $consumable->name]), route('consumables.edit', $consumable))
|
||||
);
|
||||
|
||||
/**
|
||||
* Custom fields Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('fields.index', fn (Trail $trail) =>
|
||||
$trail->parent('models.index', route('models.index'))
|
||||
->push(trans('admin/custom_fields/general.custom_fields'), route('fields.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('fields.create', fn (Trail $trail) =>
|
||||
$trail->parent('fields.index', route('fields.index'))
|
||||
->push(trans('general.create'), route('fields.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('fields.edit', fn (Trail $trail, CustomField $field) =>
|
||||
$trail->parent('fields.index', route('fields.index'))
|
||||
->push($field->name, route('fields.edit', $field))
|
||||
);
|
||||
|
||||
/**
|
||||
* Custom fieldsets Breadcrumbs
|
||||
*/
|
||||
|
||||
Breadcrumbs::for('fieldsets.create', fn (Trail $trail) =>
|
||||
$trail->parent('fields.index', route('fields.index'))
|
||||
->push(trans('general.create'), route('fieldsets.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('fieldsets.show', fn (Trail $trail, CustomFieldset $fieldset) =>
|
||||
$trail->parent('fields.index', route('fields.index'))
|
||||
->push($fieldset->name, route('fields.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('fieldsets.edit', fn (Trail $trail, CustomFieldset $fieldset) =>
|
||||
$trail->parent('fields.index', route('fields.index'))
|
||||
->push($fieldset->name, route('fieldsets.edit', $fieldset))
|
||||
);
|
||||
|
||||
/**
|
||||
* Department Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('departments.index', fn (Trail $trail) =>
|
||||
$trail->parent('home', route('home'))
|
||||
->push(trans('general.departments'), route('departments.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('departments.create', fn (Trail $trail) =>
|
||||
$trail->parent('departments.index', route('departments.index'))
|
||||
->push(trans('general.create'), route('departments.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('departments.show', fn (Trail $trail, Department $department) =>
|
||||
$trail->parent('departments.index', route('departments.index'))
|
||||
->push($department->name, route('home'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('departments.edit', fn (Trail $trail, Department $department) =>
|
||||
$trail->parent('departments.index', route('departments.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $department->name]), route('departments.edit', $department))
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* Department Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('depreciations.index', fn (Trail $trail) =>
|
||||
$trail->parent('home', route('home'))
|
||||
->push(trans('general.depreciations'), route('depreciations.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('depreciations.create', fn (Trail $trail) =>
|
||||
$trail->parent('depreciations.index', route('depreciations.index'))
|
||||
->push(trans('general.create'), route('depreciations.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('depreciations.show', fn (Trail $trail, Depreciation $depreciation) =>
|
||||
$trail->parent('depreciations.index', route('depreciations.index'))
|
||||
->push($depreciation->name, route('depreciations.show', $depreciation))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('depreciations.edit', fn (Trail $trail, Depreciation $depreciation) =>
|
||||
$trail->parent('depreciations.index', route('depreciations.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $depreciation->name]), route('depreciations.edit', $depreciation))
|
||||
);
|
||||
|
||||
/**
|
||||
* Groups Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('groups.index', fn (Trail $trail) =>
|
||||
$trail->parent('settings.index', route('settings.index'))
|
||||
->push(trans('general.groups'), route('groups.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('groups.create', fn (Trail $trail) =>
|
||||
$trail->parent('groups.index', route('groups.index'))
|
||||
->push(trans('general.create'), route('groups.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('groups.show', fn (Trail $trail, Group $group) =>
|
||||
$trail->parent('groups.index', route('groups.index'))
|
||||
->push($group->name, route('groups.show', $group))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('groups.edit', fn (Trail $trail, Group $group) =>
|
||||
$trail->parent('groups.index', route('groups.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $group->name]), route('groups.edit', $group))
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* Licenses Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('licenses.index', fn (Trail $trail) =>
|
||||
$trail->parent('home', route('home'))
|
||||
->push(trans('general.licenses'), route('licenses.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('licenses.create', fn (Trail $trail) =>
|
||||
$trail->parent('licenses.index', route('licenses.index'))
|
||||
->push(trans('general.create'), route('licenses.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('licenses.show', fn (Trail $trail, License $license) =>
|
||||
$trail->parent('licenses.index', route('licenses.index'))
|
||||
->push($license->name, route('licenses.show', $license))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('licenses.edit', fn (Trail $trail, License $license) =>
|
||||
$trail->parent('licenses.index', route('licenses.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $license->name]), route('licenses.edit', $license))
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* Locations Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('locations.index', fn (Trail $trail) =>
|
||||
$trail->parent('home', route('home'))
|
||||
->push(trans('general.locations'), route('locations.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('locations.create', fn (Trail $trail) =>
|
||||
$trail->parent('locations.index', route('locations.index'))
|
||||
->push(trans('general.create'), route('locations.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('locations.show', fn (Trail $trail, Location $location) =>
|
||||
$trail->parent('locations.index', route('locations.index'))
|
||||
->push($location->name, route('locations.show', $location))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('locations.edit', fn (Trail $trail, Location $location) =>
|
||||
$trail->parent('locations.index', route('locations.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $location->name]), route('locations.edit', $location))
|
||||
);
|
||||
|
||||
/**
|
||||
* Maintenances Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('maintenances.index', fn (Trail $trail) =>
|
||||
$trail->parent('hardware.index', route('hardware.index'))
|
||||
->push(trans('general.maintenances'), route('maintenances.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('maintenances.create', fn (Trail $trail) =>
|
||||
$trail->parent('maintenances.index', route('maintenances.index'))
|
||||
->push(trans('general.create'), route('maintenances.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('maintenances.show', fn (Trail $trail, AssetMaintenance $maintenance) =>
|
||||
$trail->parent('maintenances.index', route('locations.index'))
|
||||
->push($maintenance->title, route('maintenances.show', $maintenance))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('manufacturers.edit', fn (Trail $trail, Manufacturer $manufacturer) =>
|
||||
$trail->parent('manufacturers.index', route('manufacturers.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $manufacturer->name]), route('manufacturers.edit', $manufacturer))
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* Manufacturers Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('manufacturers.index', fn (Trail $trail) =>
|
||||
$trail->parent('home', route('home'))
|
||||
->push(trans('general.manufacturers'), route('manufacturers.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('manufacturers.create', fn (Trail $trail) =>
|
||||
$trail->parent('manufacturers.index', route('manufacturers.index'))
|
||||
->push(trans('general.create'), route('manufacturers.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('manufacturers.show', fn (Trail $trail, Manufacturer $manufacturer) =>
|
||||
$trail->parent('manufacturers.index', route('manufacturers.index'))
|
||||
->push($manufacturer->name, route('home'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('manufacturers.edit', fn (Trail $trail, Manufacturer $manufacturer) =>
|
||||
$trail->parent('manufacturers.index', route('manufacturers.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $manufacturer->name]), route('manufacturers.edit', $manufacturer))
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* Predefined Kits Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('kits.index', fn (Trail $trail) =>
|
||||
$trail->parent('home', route('home'))
|
||||
->push(trans('general.kits'), route('kits.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('kits.create', fn (Trail $trail) =>
|
||||
$trail->parent('kits.index', route('kits.index'))
|
||||
->push(trans('general.create'), route('kits.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('kits.show', fn (Trail $trail, PredefinedKit $kit) =>
|
||||
$trail->parent('kits.index', route('kits.index'))
|
||||
->push($kit->name, route('kits.show', $kit))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('kits.edit', fn (Trail $trail, PredefinedKit $kit) =>
|
||||
$trail->parent('kits.index', route('kits.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $kit->name]), route('kits.edit', $kit))
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* Status Labels Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('statuslabels.index', fn (Trail $trail) =>
|
||||
$trail->parent('home', route('home'))
|
||||
->push(trans('general.status_labels'), route('statuslabels.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('statuslabels.create', fn (Trail $trail) =>
|
||||
$trail->parent('statuslabels.index', route('statuslabels.index'))
|
||||
->push(trans('general.create'), route('statuslabels.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('statuslabels.show', fn (Trail $trail, Statuslabel $statuslabel) =>
|
||||
$trail->parent('statuslabels.index', route('statuslabels.index'))
|
||||
->push($statuslabel->name, route('statuslabels.show', $statuslabel))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('statuslabels.edit', fn (Trail $trail, Statuslabel $statuslabel) =>
|
||||
$trail->parent('statuslabels.index', route('statuslabels.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $statuslabel->name]), route('statuslabels.edit', $statuslabel))
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* Settings Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('settings.index', fn (Trail $trail) =>
|
||||
$trail->parent('home', route('home'))
|
||||
->push(trans('general.admin'), route('settings.index'))
|
||||
);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Suppliers Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('suppliers.index', fn (Trail $trail) =>
|
||||
$trail->parent('home', route('home'))
|
||||
->push(trans('general.suppliers'), route('suppliers.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('suppliers.create', fn (Trail $trail) =>
|
||||
$trail->parent('suppliers.index', route('suppliers.index'))
|
||||
->push(trans('general.create'), route('suppliers.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('suppliers.show', fn (Trail $trail, Supplier $supplier) =>
|
||||
$trail->parent('suppliers.index', route('suppliers.index'))
|
||||
->push($supplier->name, route('home'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('suppliers.edit', fn (Trail $trail, Supplier $supplier) =>
|
||||
$trail->parent('suppliers.index', route('suppliers.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $supplier->name]), route('suppliers.edit', $supplier))
|
||||
);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Users Breadcrumbs
|
||||
*/
|
||||
Breadcrumbs::for('users.index', fn (Trail $trail) =>
|
||||
$trail->parent('home', route('home'))
|
||||
->push(trans('general.users'), route('users.index'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('users.create', fn (Trail $trail) =>
|
||||
$trail->parent('users.index', route('users.index'))
|
||||
->push(trans('general.create'), route('users.create'))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('users.show', fn (Trail $trail, User $user) =>
|
||||
$trail->parent('users.index', route('users.index'))
|
||||
->push($user->username, route('users.show', $user))
|
||||
);
|
||||
|
||||
Breadcrumbs::for('users.edit', fn (Trail $trail, User $user) =>
|
||||
$trail->parent('users.index', route('users.index'))
|
||||
->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $user->name]), route('users.edit', $user))
|
||||
);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -49,10 +49,6 @@ class SamlServiceProvider extends ServiceProvider
|
|||
'uses' => 'Auth\SamlController@login', ]
|
||||
);
|
||||
|
||||
Route::group(['prefix' => 'admin', 'middleware' => ['web', 'auth', 'authorize:superuser']], function () {
|
||||
Route::get('saml', ['as' => 'settings.saml.index', 'uses' => 'SettingsController@getSamlSettings']);
|
||||
Route::post('saml', ['as' => 'settings.saml.save', 'uses' => 'SettingsController@postSamlSettings']);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -66,6 +66,7 @@
|
|||
"rollbar/rollbar-laravel": "^8.0",
|
||||
"spatie/laravel-backup": "^8.8",
|
||||
"spatie/laravel-ignition": "^2.0",
|
||||
"tabuna/breadcrumbs": "^4.2",
|
||||
"tecnickcom/tc-lib-barcode": "^1.15",
|
||||
"tecnickcom/tcpdf": "^6.5",
|
||||
"unicodeveloper/laravel-password": "^1.0",
|
||||
|
|
68
composer.lock
generated
68
composer.lock
generated
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "2a6e7f5e039ee2f40605aefc5c5baf08",
|
||||
"content-hash": "8966b3d72c2db545cd54772d7f049804",
|
||||
"packages": [
|
||||
{
|
||||
"name": "alek13/slack",
|
||||
|
@ -10938,6 +10938,72 @@
|
|||
],
|
||||
"time": "2024-11-08T15:28:48+00:00"
|
||||
},
|
||||
{
|
||||
"name": "tabuna/breadcrumbs",
|
||||
"version": "4.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/tabuna/breadcrumbs.git",
|
||||
"reference": "1d9047306f67e7fcc86fc7e608f1432f247636da"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/tabuna/breadcrumbs/zipball/1d9047306f67e7fcc86fc7e608f1432f247636da",
|
||||
"reference": "1d9047306f67e7fcc86fc7e608f1432f247636da",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*",
|
||||
"laravel/framework": "^10.0|^11.0",
|
||||
"laravel/serializable-closure": "^1.0|^2.0",
|
||||
"php": "^8.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"orchestra/testbench": "^8.0|^9.0",
|
||||
"phpunit/php-code-coverage": "^10.|^11.0",
|
||||
"phpunit/phpunit": "^10.5|^11.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"aliases": {
|
||||
"Breadcrumbs": "Tabuna\\Breadcrumbs\\Breadcrumbs"
|
||||
},
|
||||
"providers": [
|
||||
"Tabuna\\Breadcrumbs\\BreadcrumbsServiceProvider"
|
||||
]
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Tabuna\\Breadcrumbs\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Alexandr Chernyaev",
|
||||
"email": "bliz48rus@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Dwight Watson",
|
||||
"email": "dwight@studentservices.com.au"
|
||||
},
|
||||
{
|
||||
"name": "Dave James Miller",
|
||||
"email": "dave@davejamesmiller.com"
|
||||
}
|
||||
],
|
||||
"description": "An easy way to add breadcrumbs to your Laravel app.",
|
||||
"support": {
|
||||
"issues": "https://github.com/tabuna/breadcrumbs/issues",
|
||||
"source": "https://github.com/tabuna/breadcrumbs/tree/4.2.1"
|
||||
},
|
||||
"time": "2024-11-26T12:21:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "tecnickcom/tc-lib-barcode",
|
||||
"version": "1.18.4",
|
||||
|
|
|
@ -316,6 +316,7 @@ return [
|
|||
App\Providers\LivewireServiceProvider::class,
|
||||
App\Providers\MacroServiceProvider::class,
|
||||
App\Providers\SamlServiceProvider::class,
|
||||
App\Providers\BreadcrumbsServiceProvider::class,
|
||||
|
||||
],
|
||||
|
||||
|
|
|
@ -5,8 +5,8 @@ return [
|
|||
'about_assets_text' => 'Assets are items tracked by serial number or asset tag. They tend to be higher value items where identifying a specific item matters.',
|
||||
'archived' => 'Archived',
|
||||
'asset' => 'Asset',
|
||||
'bulk_checkout' => 'Checkout Assets',
|
||||
'bulk_checkin' => 'Checkin Assets',
|
||||
'bulk_checkout' => 'Bulk Checkout',
|
||||
'bulk_checkin' => 'Bulk Checkin',
|
||||
'checkin' => 'Checkin Asset',
|
||||
'checkout' => 'Checkout Asset',
|
||||
'clone' => 'Clone Asset',
|
||||
|
|
|
@ -10,7 +10,7 @@ return [
|
|||
'action' => 'Action',
|
||||
'activity_report' => 'Activity Report',
|
||||
'address' => 'Address',
|
||||
'admin' => 'Admin',
|
||||
'admin' => 'Admin Settings',
|
||||
'admin_tooltip' => 'This user has admin privileges',
|
||||
'superuser' => 'Superuser',
|
||||
'superuser_tooltip' => 'This user has superuser privileges',
|
||||
|
@ -29,6 +29,7 @@ return [
|
|||
'assets_available' => 'Assets available',
|
||||
'accept_assets' => 'Accept Assets :name',
|
||||
'accept_assets_menu' => 'Accept Assets',
|
||||
'accept_item' => 'Accept Item',
|
||||
'audit' => 'Audit',
|
||||
'audit_report' => 'Audit Log',
|
||||
'assets' => 'Assets',
|
||||
|
@ -337,10 +338,10 @@ return [
|
|||
'token_expired' => 'Your form session has expired. Please try again.',
|
||||
'login_enabled' => 'Login Enabled',
|
||||
'audit_due' => 'Due for Audit',
|
||||
'audit_due_days' => 'Assets Due for Audit Within :days Day|Assets Due for Audit Within :days Days',
|
||||
'audit_due_days' => '{}Assets Due or Overdue for Audit|[1]Assets Due or Overdue for Audit Within a Day|[2,*]Assets Due or Overdue for Audit Within :days Days',
|
||||
'checkin_due' => 'Due for Checkin',
|
||||
'checkin_overdue' => 'Overdue for Checkin',
|
||||
'checkin_due_days' => 'Assets Due for Checkin Within :days Day|Assets Due for Checkin Within :days Days',
|
||||
'checkin_due_days' => '{}Due for Checkin|[1]Assets Due for Checkin Within :days Day|[2,*]Assets Due for Checkin Within :days Days',
|
||||
'audit_overdue' => 'Overdue for Audit',
|
||||
'accept' => 'Accept :asset',
|
||||
'i_accept' => 'I accept',
|
||||
|
@ -587,4 +588,12 @@ return [
|
|||
'notes' => 'Add a note',
|
||||
],
|
||||
|
||||
'breadcrumb_button_actions' => [
|
||||
'edit_item' => 'Edit :name',
|
||||
'checkout_item' => 'Checkout :name',
|
||||
'checkin_item' => 'Checkin :name',
|
||||
],
|
||||
|
||||
'generic_model_not_found' => 'That :model was not found or you do not have permission to access it',
|
||||
|
||||
];
|
||||
|
|
|
@ -115,7 +115,7 @@
|
|||
<div class="col-md-8">
|
||||
<input class="form-control" type="text" name="gravatar" id="gravatar" value="{{ old('gravatar', $user->gravatar) }}" />
|
||||
{!! $errors->first('gravatar', '<span class="alert-msg" aria-hidden="true"><i class="fas fa-times" aria-hidden="true"></i> :message</span>') !!}
|
||||
<p>
|
||||
<p style="padding-top: 3px;">
|
||||
<img src="//secure.gravatar.com/avatar/{{ md5(strtolower(trim($user->gravatar))) }}" width="30" height="30" alt="{{ $user->present()->fullName() }} avatar image">
|
||||
{!! trans('general.gravatar_url') !!}
|
||||
</p>
|
||||
|
|
|
@ -9,95 +9,127 @@ use Carbon\Carbon;
|
|||
@parent
|
||||
@stop
|
||||
|
||||
@section('header_right')
|
||||
<div class="pull-right">
|
||||
<a href="{{ route('maintenances.edit', $assetMaintenance) }}" class="btn btn-default pull-right">
|
||||
{{ trans('general.update') }}</a>
|
||||
|
||||
<a href="{{ route('maintenances.index') }}" class="btn btn-primary text-right" style="margin-right: 10px;">{{ trans('general.back') }}</a>
|
||||
</div>
|
||||
@stop
|
||||
|
||||
|
||||
{{-- Page content --}}
|
||||
@section('content')
|
||||
<div class="row header">
|
||||
<div class="col-md-12">
|
||||
<h2 class="title">
|
||||
{{ trans('admin/asset_maintenances/general.view') }}
|
||||
{{ " - " . $assetMaintenance->title }}
|
||||
</h2>
|
||||
<div class="row">
|
||||
<div class="col-md-9">
|
||||
|
||||
<div class="btn-group pull-right">
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-default dropdown-toggle" data-toggle="dropdown">{{ trans('button.actions') }}
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="dropdownMenu1">
|
||||
<li role="presentation"><a href="{{ route('maintenances.update', $assetMaintenance->id) }}">{{ trans('admin/asset_maintenances/general.edit') }}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box box-default">
|
||||
<div class="box-body">
|
||||
<div class="row-new-striped">
|
||||
<div class="row">
|
||||
|
||||
<div class="user-profile ">
|
||||
<div class="row profile">
|
||||
<div class="col-md-9 bio">
|
||||
<!-- 1st Row Begin -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 col-sm-12" style="padding-bottom: 10px; margin-left: 15px; word-wrap: break-word;">
|
||||
<strong>{{ trans('admin/asset_maintenances/form.asset_maintenance_type') }}: </strong>
|
||||
{{ $assetMaintenance->asset_maintenance_type }}
|
||||
</div>
|
||||
</div>
|
||||
<!-- 1st Row End -->
|
||||
<div class="col-md-3">
|
||||
{{ trans('admin/asset_maintenances/form.asset_maintenance_type') }}
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
{{ $assetMaintenance->asset_maintenance_type }}
|
||||
</div>
|
||||
|
||||
</div> <!-- /row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{{ trans('general.asset') }}
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<a href="{{ route('hardware.show', $assetMaintenance->asset_id) }}">
|
||||
{{ $assetMaintenance->asset->present()->fullName }}
|
||||
</a>
|
||||
</div>
|
||||
</div> <!-- /row -->
|
||||
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{{ trans('general.supplier') }}
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<a href="{{ route('suppliers.show', $assetMaintenance->supplier_id) }}">
|
||||
{{ $assetMaintenance->supplier->name }}
|
||||
</a>
|
||||
</div>
|
||||
</div> <!-- /row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{{ trans('admin/asset_maintenances/form.start_date') }}
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
{{ Helper::getFormattedDateObject($assetMaintenance->start_date, 'date', false) }}
|
||||
</div>
|
||||
</div> <!-- /row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{{ trans('admin/asset_maintenances/form.completion_date') }}
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
@if ($assetMaintenance->completion_date)
|
||||
{{ Helper::getFormattedDateObject($assetMaintenance->completion_date, 'date', false) }}
|
||||
@else
|
||||
{{ trans('admin/asset_maintenances/message.asset_maintenance_incomplete') }}
|
||||
@endif
|
||||
</div>
|
||||
</div> <!-- /row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{{ trans('admin/asset_maintenances/form.asset_maintenance_time') }}
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
{{ $assetMaintenance->asset_maintenance_time }}
|
||||
</div>
|
||||
</div> <!-- /row -->
|
||||
|
||||
@if ($assetMaintenance->cost > 0)
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{{ trans('admin/asset_maintenances/form.cost') }}
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
{{ trans( 'general.currency' ) . Helper::formatCurrencyOutput($assetMaintenance->cost) }}
|
||||
</div>
|
||||
</div> <!-- /row -->
|
||||
@endif
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{{ trans('admin/asset_maintenances/form.is_warranty') }}
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
{{ $assetMaintenance->is_warranty ? trans('admin/asset_maintenances/message.warranty') : trans('admin/asset_maintenances/message.not_warranty') }}
|
||||
</div>
|
||||
</div> <!-- /row -->
|
||||
|
||||
@if ($assetMaintenance->notes)
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{{ trans('admin/asset_maintenances/form.notes') }}
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
{!! nl2br(Helper::parseEscapedMarkedownInline($assetMaintenance->notes)) !!}
|
||||
</div>
|
||||
</div> <!-- /row -->
|
||||
@endif
|
||||
|
||||
|
||||
</div><!-- /row-new-striped -->
|
||||
</div><!-- /box-body -->
|
||||
</div><!-- /box -->
|
||||
|
||||
</div> <!-- col-md-9 end -->
|
||||
</div> <!-- row end -->
|
||||
|
||||
<!-- 2nd Row Begin -->
|
||||
<div class="row">
|
||||
<div class="col-md-3 col-sm-3" style="padding-bottom: 10px; margin-left: 15px; word-wrap: break-word;">
|
||||
<strong>{{ trans('admin/asset_maintenances/table.asset_name') }}: </strong>
|
||||
<a href="{{ route('hardware.show', $assetMaintenance->asset_id) }}">
|
||||
{{ $assetMaintenance->asset->name }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-3 col-sm-3" style="padding-bottom: 10px; margin-left: 15px; word-wrap: break-word;">
|
||||
<strong>{{ trans('general.supplier') }}: </strong>
|
||||
<a href="{{ route('suppliers.show', $assetMaintenance->supplier_id) }}">
|
||||
{{ $assetMaintenance->supplier->name }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 2nd Row End -->
|
||||
<!-- 3rd Row Begin -->
|
||||
<div class="row">
|
||||
<div class="col-md-3 col-sm-3" style="padding-bottom: 10px; margin-left: 15px; word-wrap: break-word;">
|
||||
<strong>{{ trans('admin/asset_maintenances/form.start_date') }}: </strong>
|
||||
<?php $startDate = Carbon::parse($assetMaintenance->start_date); ?>
|
||||
{{ $startDate->toDateString() }}
|
||||
</div>
|
||||
<div class="col-md-3 col-sm-3" style="padding-bottom: 10px; margin-left: 15px; word-wrap: break-word;">
|
||||
<strong>{{ trans('admin/asset_maintenances/form.completion_date') }}: </strong>
|
||||
{{ $completionDate = $assetMaintenance->completion_date }}
|
||||
{{ $completionDate ? $completionDate : trans('admin/asset_maintenances/message.asset_maintenance_incomplete') }}
|
||||
</div>
|
||||
<div class="col-md-3 col-sm-3" style="padding-bottom: 10px; margin-left: 15px; word-wrap: break-word;">
|
||||
<strong>{{ trans('admin/asset_maintenances/form.asset_maintenance_time') }}: </strong>
|
||||
{{ $assetMaintenance->asset_maintenance_time }}
|
||||
</div>
|
||||
</div>
|
||||
<!-- 3rd Row End -->
|
||||
<!-- 4th Row Begin -->
|
||||
<div class="row">
|
||||
<div class="col-md-3 col-sm-3" style="padding-bottom: 10px; margin-left: 15px; word-wrap: break-word;">
|
||||
<strong>{{ trans('admin/asset_maintenances/form.cost') }}: </strong>
|
||||
{{ trans( 'general.currency' ) . Helper::formatCurrencyOutput($assetMaintenance->cost) }}
|
||||
</div>
|
||||
<div class="col-md-3 col-sm-3" style="padding-bottom: 10px; margin-left: 15px; word-wrap: break-word;">
|
||||
<strong>{{ trans('admin/asset_maintenances/form.is_warranty') }}: </strong>
|
||||
{{ $assetMaintenance->is_warranty ? trans('admin/asset_maintenances/message.warranty') : trans('admin/asset_maintenances/message.not_warranty') }}
|
||||
</div>
|
||||
</div>
|
||||
<!-- 4th Row End -->
|
||||
<!-- 5th Row Begin -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 col-sm-12" style="padding-bottom: 10px; margin-left: 15px; word-wrap: break-word;">
|
||||
<strong>{{ trans('admin/asset_maintenances/form.notes') }}: </strong>
|
||||
{!! nl2br(Helper::parseEscapedMarkedownInline($assetMaintenance->notes)) !!}
|
||||
</div>
|
||||
</div>
|
||||
<!-- 5th Row End -->
|
||||
</div> <!-- col-md-9 bio end -->
|
||||
</div> <!-- row profile end -->
|
||||
</div> <!-- user-profile end -->
|
||||
@stop
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<div class="col-md-8 col-md-offset-2">
|
||||
<div class="box box-default">
|
||||
|
||||
<form method="POST" action="{{ route('asset.audit.store', $asset->id) }}" accept-charset="UTF-8" class="form-horizontal" enctype="multipart/form-data">
|
||||
<form method="POST" action="{{ route('asset.audit.store', $asset) }}" accept-charset="UTF-8" class="form-horizontal" enctype="multipart/form-data">
|
||||
|
||||
<div class="box-header with-border">
|
||||
<h2 class="box-title"> {{ trans('admin/hardware/form.tag') }} {{ $asset->asset_tag }}</h2>
|
||||
|
@ -54,6 +54,8 @@
|
|||
|
||||
|
||||
<!-- Asset Name -->
|
||||
|
||||
@if ($asset->name)
|
||||
<div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}">
|
||||
<label for="name" class="col-sm-3 control-label">
|
||||
{{ trans('general.name') }}
|
||||
|
@ -62,6 +64,7 @@
|
|||
<p class="form-control-static">{{ $asset->name }}</p>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<!-- Locations -->
|
||||
@include ('partials.forms.edit.location-select', ['translated_name' => trans('general.location'), 'fieldname' => 'location_id'])
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
'topSubmit' => true,
|
||||
'helpText' => trans('help.assets'),
|
||||
'helpPosition' => 'right',
|
||||
'formAction' => ($item->id) ? route('hardware.update', ['hardware' => $item->id]) : route('hardware.store'),
|
||||
'formAction' => ($item->id) ? route('hardware.update', $item) : route('hardware.store'),
|
||||
'index_route' => 'hardware.index',
|
||||
'options' => [
|
||||
'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'assets']),
|
||||
|
|
|
@ -181,7 +181,7 @@
|
|||
@if ($asset->deleted_at=='')
|
||||
@can('update', $asset)
|
||||
<div class="col-md-12 hidden-print" style="padding-top: 5px;">
|
||||
<a href="{{ route('hardware.edit', $asset->id) }}" class="btn btn-sm btn-warning btn-social btn-block hidden-print">
|
||||
<a href="{{ route('hardware.edit', $asset) }}" class="btn btn-sm btn-warning btn-social btn-block hidden-print">
|
||||
<x-icon type="edit" />
|
||||
{{ trans('admin/hardware/general.edit') }}
|
||||
</a>
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
@extends('layouts/edit-form', [
|
||||
'createText' => trans('admin/kits/general.append_model'),
|
||||
'updateText' => trans('admin/kits/general.update_appended_model'),
|
||||
'formAction' => (isset($item->id)) ? route('kits.models.update', ['kit_id' => $kit->id, 'model_id' => $item->model_id]) : route('kits.models.store', ['kit_id' => $kit->id]),
|
||||
'formAction' => (isset($item->id)) ? route('kits.models.update', ['kit' => $kit->id, 'model_id' => $item->model_id]) : route('kits.models.store', ['kit_id' => $kit->id]),
|
||||
])
|
||||
|
||||
{{-- Page content --}}
|
||||
@section('inputFields')
|
||||
@include ('partials.forms.edit.model-select', ['translated_name' => trans('admin/hardware/form.model'), 'fieldname' => 'model_id', 'required' => 'true'])
|
||||
|
||||
<div class="form-group {{ $errors->has('quantity') ? ' has-error' : '' }}">
|
||||
<label for="quantity" class="col-md-3 control-label">{{ trans('general.quantity') }}</label>
|
||||
<div class="col-md-7 required">
|
||||
|
|
|
@ -214,7 +214,7 @@ dir="{{ Helper::determineLanguageDirection() }}">
|
|||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
@can('create', \App\Models\Asset::class)
|
||||
<li {!! (Request::is('hardware/create') ? 'class="active>"' : '') !!}>
|
||||
<li{!! (Request::is('hardware/create') ? ' class="active">' : '') !!}>
|
||||
<a href="{{ route('hardware.create') }}" tabindex="-1">
|
||||
<x-icon type="assets" />
|
||||
{{ trans('general.asset') }}
|
||||
|
@ -222,7 +222,7 @@ dir="{{ Helper::determineLanguageDirection() }}">
|
|||
</li>
|
||||
@endcan
|
||||
@can('create', \App\Models\License::class)
|
||||
<li {!! (Request::is('licenses/create') ? 'class="active"' : '') !!}>
|
||||
<li{!! (Request::is('licenses/create') ? ' class="active"' : '') !!}>
|
||||
<a href="{{ route('licenses.create') }}" tabindex="-1">
|
||||
<x-icon type="licenses" />
|
||||
{{ trans('general.license') }}
|
||||
|
@ -813,7 +813,6 @@ dir="{{ Helper::determineLanguageDirection() }}">
|
|||
<!-- Content Wrapper. Contains page content -->
|
||||
|
||||
<div class="content-wrapper" role="main" id="setting-list">
|
||||
<barepay></barepay>
|
||||
|
||||
@if ($debug_in_production)
|
||||
<div class="row" style="margin-bottom: 0px; background-color: red; color: white; font-size: 15px;">
|
||||
|
@ -827,21 +826,68 @@ dir="{{ Helper::determineLanguageDirection() }}">
|
|||
@endif
|
||||
|
||||
<!-- Content Header (Page header) -->
|
||||
<section class="content-header" style="padding-bottom: 30px;">
|
||||
<h1 class="pull-left pagetitle">@yield('title') </h1>
|
||||
<section class="content-header">
|
||||
|
||||
@if (isset($helpText))
|
||||
@include ('partials.more-info',
|
||||
[
|
||||
'helpText' => $helpText,
|
||||
'helpPosition' => (isset($helpPosition)) ? $helpPosition : 'left'
|
||||
])
|
||||
@endif
|
||||
<div class="pull-right">
|
||||
@yield('header_right')
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
|
||||
<style>
|
||||
.breadcrumb-item {
|
||||
display: inline;
|
||||
list-style: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
<h1 class="pull-left pagetitle" style="font-size: 22px; margin-top: 10px;">
|
||||
|
||||
@if (Breadcrumbs::has() && (Breadcrumbs::current()->count() > 1))
|
||||
<ul style="padding-left: 0;">
|
||||
|
||||
@foreach (Breadcrumbs::current() as $crumbs)
|
||||
@if ($crumbs->url() && !$loop->last)
|
||||
<li class="breadcrumb-item">
|
||||
<a href="{{ $crumbs->url() }}">
|
||||
@if ($loop->first)
|
||||
{!! Blade::render($crumbs->title()) !!}
|
||||
@else
|
||||
{{ Blade::render($crumbs->title()) }}
|
||||
@endif
|
||||
</a>
|
||||
<x-icon type="angle-right" />
|
||||
</li>
|
||||
@elseif (is_null($crumbs->url()) && !$loop->last)
|
||||
<li class="breadcrumb-item active">
|
||||
{{ $crumbs->title() }}
|
||||
<x-icon type="angle-right" />
|
||||
</li>
|
||||
@else
|
||||
<li class="breadcrumb-item active">
|
||||
{{ $crumbs->title() }}
|
||||
</li>
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
</ul>
|
||||
@else
|
||||
@yield('title')
|
||||
@endif
|
||||
|
||||
</h1>
|
||||
|
||||
@if (isset($helpText))
|
||||
@include ('partials.more-info',
|
||||
[
|
||||
'helpText' => $helpText,
|
||||
'helpPosition' => (isset($helpPosition)) ? $helpPosition : 'left'
|
||||
])
|
||||
@endif
|
||||
<div class="pull-right">
|
||||
@yield('header_right')
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
|
|
|
@ -290,9 +290,6 @@
|
|||
var dest = 'admin/groups';
|
||||
}
|
||||
|
||||
if (dest =='maintenances') {
|
||||
var dest = 'hardware/maintenances';
|
||||
}
|
||||
|
||||
if(element_name != '') {
|
||||
dest = dest + '/' + row.owner_id + '/' + element_name;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<a style="padding-left: 10px; font-size: 18px;" class="text-dark-gray hidden-print" data-trigger="focus" tabindex="0" role="button" data-toggle="popover" title="{{ trans('general.more_info') }}" data-placement="right" data-html="true" data-content="{{ (isset($helpText)) ? $helpText : 'Help Info Missing' }}">
|
||||
<x-icon type="more-info" />
|
||||
<a style="padding-left: 5px; font-size: 15px;" class="text-dark-gray hidden-print" data-trigger="focus" tabindex="0" role="button" data-toggle="popover" title="{{ trans('general.more_info') }}" data-placement="right" data-html="true" data-content="{{ (isset($helpText)) ? $helpText : 'Help Info Missing' }}">
|
||||
<x-icon type="more-info" style="padding-top: 14px;" />
|
||||
<span class="sr-only">{{ trans('general.moreinfo') }}</span>
|
||||
</a>
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
@section('content')
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-8 col-md-offset-1">
|
||||
<div class="col-md-9">
|
||||
|
||||
<form
|
||||
method="POST"
|
||||
|
@ -48,13 +48,15 @@
|
|||
<div class="box box-default">
|
||||
<div class="box-header with-border">
|
||||
@if (request()->routeIs('reports/custom') || request()->routeIs('report-templates.show'))
|
||||
<h2 class="box-title">
|
||||
<h2 class="box-title" style="padding-top: 7px;">
|
||||
{{ trans('general.customize_report') }}
|
||||
</h2>
|
||||
|
||||
@endif
|
||||
|
||||
@if (request()->routeIs('report-templates.edit'))
|
||||
<div class="row">
|
||||
<div class="col-md-7 col-md-offset-5">
|
||||
<div class="col-md-7 col-md-offset-4">
|
||||
<div class="{{ $errors->has('name') ? ' has-error' : '' }}">
|
||||
<label
|
||||
for="name"
|
||||
|
@ -78,29 +80,7 @@
|
|||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@if (request()->routeIs('report-templates.show'))
|
||||
<div class="box-tools pull-right">
|
||||
<a
|
||||
href="{{ route('report-templates.edit', $template) }}"
|
||||
class="btn btn-sm btn-warning"
|
||||
data-tooltip="true"
|
||||
title="{{ trans('admin/reports/general.update_template') }}"
|
||||
>
|
||||
<i class="fas fa-pencil-alt" aria-hidden="true"></i>
|
||||
<span class="sr-only">{{ trans('general.update') }}</span>
|
||||
</a>
|
||||
<button
|
||||
class="btn btn-sm btn-danger delete-asset"
|
||||
data-toggle="modal"
|
||||
data-title="{{ trans('general.delete') }}"
|
||||
data-content="{{ trans('general.delete_confirm', ['item' => $template->name]) }}"
|
||||
data-target="#dataConfirmModal"
|
||||
type="button"
|
||||
>
|
||||
<i class="fas fa-trash" aria-hidden="true"></i><span class="sr-only">{{ trans('general.delete') }}</span>
|
||||
</button>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div><!-- /.box-header -->
|
||||
|
||||
<div class="box-body">
|
||||
|
@ -636,7 +616,7 @@
|
|||
</div>
|
||||
|
||||
<!-- Saved Reports right column -->
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
@if (! request()->routeIs('report-templates.edit'))
|
||||
<div class="form-group">
|
||||
<label for="saved_report_select">{{ trans('admin/reports/general.open_saved_template') }}</label>
|
||||
|
@ -653,6 +633,41 @@
|
|||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
@if (request()->routeIs('report-templates.show'))
|
||||
<a
|
||||
href="{{ route('report-templates.edit', $template) }}"
|
||||
class="btn btn-sm btn-warning btn-social btn-block"
|
||||
data-tooltip="true"
|
||||
title="{{ trans('admin/reports/general.update_template') }}"
|
||||
style="margin-bottom: 5px;"
|
||||
>
|
||||
<x-icon type="edit" />
|
||||
{{ trans('general.update') }}
|
||||
</a>
|
||||
|
||||
<span data-tooltip="true" title="{{ trans('general.delete') }}">
|
||||
<a href="#"
|
||||
class="btn btn-sm btn-danger btn-social btn-block"
|
||||
data-toggle="modal"
|
||||
data-title="{{ trans('general.delete') }}"
|
||||
data-content="{{ trans('general.delete_confirm', ['item' => $template->name]) }}"
|
||||
data-target="#dataConfirmModal"
|
||||
type="button"
|
||||
>
|
||||
|
||||
<x-icon type="delete" />
|
||||
{{ trans('general.delete') }}
|
||||
|
||||
</a>
|
||||
</span>
|
||||
|
||||
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@if (request()->routeIs('reports/custom'))
|
||||
<hr>
|
||||
|
|
|
@ -863,7 +863,7 @@
|
|||
</td>
|
||||
<td class="hidden-print col-md-2">
|
||||
@can('update', $license)
|
||||
<a href="{{ route('licenses.checkin', array('licenseSeatId'=> $license->pivot->id, 'backto'=>'user')) }}" class="btn btn-primary btn-sm hidden-print">{{ trans('general.checkin') }}</a>
|
||||
<a href="{{ route('licenses.checkin', $license->pivot->id, ['backto'=>'user']) }}" class="btn btn-primary btn-sm hidden-print">{{ trans('general.checkin') }}</a>
|
||||
@endcan
|
||||
</td>
|
||||
</tr>
|
||||
|
|
452
routes/web.php
452
routes/web.php
|
@ -2,6 +2,9 @@
|
|||
|
||||
use App\Http\Controllers\Account;
|
||||
use App\Http\Controllers\ActionlogController;
|
||||
use App\Http\Controllers\Auth\ForgotPasswordController;
|
||||
use App\Http\Controllers\Auth\LoginController;
|
||||
use App\Http\Controllers\Auth\ResetPasswordController;
|
||||
use App\Http\Controllers\CategoriesController;
|
||||
use App\Http\Controllers\CompaniesController;
|
||||
use App\Http\Controllers\DashboardController;
|
||||
|
@ -9,24 +12,21 @@ use App\Http\Controllers\DepartmentsController;
|
|||
use App\Http\Controllers\DepreciationsController;
|
||||
use App\Http\Controllers\GroupsController;
|
||||
use App\Http\Controllers\HealthController;
|
||||
use App\Http\Controllers\ImportsController;
|
||||
use App\Http\Controllers\LabelsController;
|
||||
use App\Http\Controllers\LocationsController;
|
||||
use App\Http\Controllers\ManufacturersController;
|
||||
use App\Http\Controllers\ModalController;
|
||||
use App\Http\Controllers\ProfileController;
|
||||
use App\Http\Controllers\ReportsController;
|
||||
use App\Http\Controllers\ReportTemplatesController;
|
||||
use App\Http\Controllers\ReportsController;
|
||||
use App\Http\Controllers\SettingsController;
|
||||
use App\Http\Controllers\StatuslabelsController;
|
||||
use App\Http\Controllers\SuppliersController;
|
||||
use App\Http\Controllers\ViewAssetsController;
|
||||
use App\Http\Controllers\Auth\LoginController;
|
||||
use App\Http\Controllers\Auth\ForgotPasswordController;
|
||||
use App\Http\Controllers\Auth\ResetPasswordController;
|
||||
use App\Livewire\Importer;
|
||||
use App\Models\ReportTemplate;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Tabuna\Breadcrumbs\Trail;
|
||||
|
||||
Route::group(['middleware' => 'auth'], function () {
|
||||
/*
|
||||
|
@ -101,37 +101,27 @@ Route::group(['middleware' => 'auth'], function () {
|
|||
Route::post('{manufacturers_id}/restore', [ManufacturersController::class, 'restore'] )->name('restore/manufacturer');
|
||||
});
|
||||
|
||||
Route::resource('manufacturers', ManufacturersController::class, [
|
||||
'parameters' => ['manufacturer' => 'manufacturers_id'],
|
||||
]);
|
||||
Route::resource('manufacturers', ManufacturersController::class);
|
||||
|
||||
/*
|
||||
* Suppliers
|
||||
*/
|
||||
Route::resource('suppliers', SuppliersController::class, [
|
||||
'parameters' => ['supplier' => 'supplier_id'],
|
||||
]);
|
||||
Route::resource('suppliers', SuppliersController::class);
|
||||
|
||||
/*
|
||||
* Depreciations
|
||||
*/
|
||||
Route::resource('depreciations', DepreciationsController::class, [
|
||||
'parameters' => ['depreciation' => 'depreciation_id'],
|
||||
]);
|
||||
Route::resource('depreciations', DepreciationsController::class);
|
||||
|
||||
/*
|
||||
* Status Labels
|
||||
*/
|
||||
Route::resource('statuslabels', StatuslabelsController::class, [
|
||||
'parameters' => ['statuslabel' => 'statuslabel_id'],
|
||||
]);
|
||||
Route::resource('statuslabels', StatuslabelsController::class);
|
||||
|
||||
/*
|
||||
* Departments
|
||||
*/
|
||||
Route::resource('departments', DepartmentsController::class, [
|
||||
'parameters' => ['department' => 'department_id'],
|
||||
]);
|
||||
Route::resource('departments', DepartmentsController::class);
|
||||
});
|
||||
|
||||
/*
|
||||
|
@ -178,46 +168,137 @@ Route::group(['middleware' => 'auth'], function () {
|
|||
*/
|
||||
|
||||
Route::group(['prefix' => 'admin', 'middleware' => ['auth', 'authorize:superuser']], function () {
|
||||
Route::get('settings', [SettingsController::class, 'getSettings'])->name('settings.general.index');
|
||||
Route::post('settings', [SettingsController::class, 'postSettings'])->name('settings.general.save');
|
||||
|
||||
Route::get('branding', [SettingsController::class, 'getBranding'])->name('settings.branding.index');
|
||||
Route::post('branding', [SettingsController::class, 'postBranding'])->name('settings.branding.save');
|
||||
Route::get('settings', [SettingsController::class, 'getSettings'])
|
||||
->name('settings.general.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('settings.index')
|
||||
->push(trans('admin/settings/general.general_title'), route('settings.general.index')));
|
||||
|
||||
Route::get('security', [SettingsController::class, 'getSecurity'])->name('settings.security.index');
|
||||
Route::post('security', [SettingsController::class, 'postSecurity'])->name('settings.security.save');
|
||||
Route::post('settings', [SettingsController::class, 'postSettings'])
|
||||
->name('settings.general.save');
|
||||
|
||||
Route::get('groups', [GroupsController::class, 'index'])->name('settings.groups.index');
|
||||
Route::get('branding', [SettingsController::class, 'getBranding'])
|
||||
->name('settings.branding.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('settings.index')
|
||||
->push(trans('admin/settings/general.branding_title'), route('settings.branding.index')));
|
||||
|
||||
Route::get('localization', [SettingsController::class, 'getLocalization'])->name('settings.localization.index');
|
||||
Route::post('localization', [SettingsController::class, 'postLocalization'])->name('settings.localization.save');
|
||||
Route::post('branding', [SettingsController::class, 'postBranding'])
|
||||
->name('settings.branding.save');
|
||||
|
||||
Route::get('notifications', [SettingsController::class, 'getAlerts'])->name('settings.alerts.index');
|
||||
Route::post('notifications', [SettingsController::class, 'postAlerts'])->name('settings.alerts.save');
|
||||
Route::get('security', [SettingsController::class, 'getSecurity'])
|
||||
->name('settings.security.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('settings.index')
|
||||
->push(trans('admin/settings/general.security_title'), route('settings.security.index')));
|
||||
|
||||
Route::get('slack', [SettingsController::class, 'getSlack'])->name('settings.slack.index');
|
||||
Route::post('slack', [SettingsController::class, 'postSlack'])->name('settings.slack.save');
|
||||
Route::post('security', [SettingsController::class, 'postSecurity'])
|
||||
->name('settings.security.save');
|
||||
|
||||
Route::get('asset_tags', [SettingsController::class, 'getAssetTags'])->name('settings.asset_tags.index');
|
||||
Route::post('asset_tags', [SettingsController::class, 'postAssetTags'])->name('settings.asset_tags.save');
|
||||
Route::get('localization', [SettingsController::class, 'getLocalization'])
|
||||
->name('settings.localization.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('settings.index')
|
||||
->push(trans('admin/settings/general.localization_title'), route('settings.localization.index')));
|
||||
|
||||
Route::get('labels', [SettingsController::class, 'getLabels'])->name('settings.labels.index');
|
||||
Route::post('labels', [SettingsController::class, 'postLabels'])->name('settings.labels.save');
|
||||
Route::post('localization', [SettingsController::class, 'postLocalization'])
|
||||
->name('settings.localization.save');
|
||||
|
||||
Route::get('ldap', [SettingsController::class, 'getLdapSettings'])->name('settings.ldap.index');
|
||||
Route::post('ldap', [SettingsController::class, 'postLdapSettings'])->name('settings.ldap.save');
|
||||
Route::get('notifications', [SettingsController::class, 'getAlerts'])
|
||||
->name('settings.alerts.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('settings.index')
|
||||
->push(trans('admin/settings/general.alert_title'), route('settings.alerts.index')));
|
||||
|
||||
Route::get('phpinfo', [SettingsController::class, 'getPhpInfo'])->name('settings.phpinfo.index');
|
||||
Route::post('notifications', [SettingsController::class, 'postAlerts'])
|
||||
->name('settings.alerts.save');
|
||||
|
||||
Route::get('oauth', [SettingsController::class, 'api'])->name('settings.oauth.index');
|
||||
Route::get('slack', [SettingsController::class, 'getSlack'])
|
||||
->name('settings.slack.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('settings.index')
|
||||
->push(trans('admin/settings/general.webhook_title'), route('settings.slack.index')));
|
||||
|
||||
Route::post('slack', [SettingsController::class, 'postSlack'])
|
||||
->name('settings.slack.save');
|
||||
|
||||
Route::get('asset_tags', [SettingsController::class, 'getAssetTags'])
|
||||
->name('settings.asset_tags.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('settings.index')
|
||||
->push(trans('admin/settings/general.asset_tag_title'), route('settings.asset_tags.index')));
|
||||
|
||||
Route::post('asset_tags', [SettingsController::class, 'postAssetTags'])
|
||||
->name('settings.asset_tags.save');
|
||||
|
||||
Route::get('labels', [SettingsController::class, 'getLabels'])
|
||||
->name('settings.labels.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('settings.index')
|
||||
->push(trans('admin/settings/general.labels_title'), route('settings.labels.index')));
|
||||
|
||||
Route::post('labels', [SettingsController::class, 'postLabels'])
|
||||
->name('settings.labels.save');
|
||||
|
||||
Route::get('ldap', [SettingsController::class, 'getLdapSettings'])
|
||||
->name('settings.ldap.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('settings.index')
|
||||
->push(trans('admin/settings/general.ldap_ad'), route('settings.ldap.index')));
|
||||
|
||||
Route::post('ldap', [SettingsController::class, 'postLdapSettings'])
|
||||
->name('settings.ldap.save');
|
||||
|
||||
Route::get('phpinfo', [SettingsController::class, 'getPhpInfo'])
|
||||
->name('settings.phpinfo.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('settings.index')
|
||||
->push(trans('admin/settings/general.php_info'), route('settings.phpinfo.index')));
|
||||
|
||||
Route::get('oauth', [SettingsController::class, 'api'])
|
||||
->name('settings.oauth.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('settings.index')
|
||||
->push(trans('admin/settings/general.oauth'), route('settings.oauth.index')));
|
||||
|
||||
Route::get('google', [SettingsController::class, 'getGoogleLoginSettings'])
|
||||
->name('settings.google.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('settings.index')
|
||||
->push(trans('admin/settings/general.google_login'), route('settings.google.index')));
|
||||
|
||||
Route::post('google', [SettingsController::class, 'postGoogleLoginSettings'])
|
||||
->name('settings.google.save');
|
||||
|
||||
Route::get('purge', [SettingsController::class, 'getPurge'])
|
||||
->name('settings.purge.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('settings.index')
|
||||
->push(trans('admin/settings/general.purge'), route('settings.purge.index')));
|
||||
|
||||
Route::post('purge', [SettingsController::class, 'postPurge'])
|
||||
->name('settings.purge.save');
|
||||
|
||||
Route::get('login-attempts', [SettingsController::class, 'getLoginAttempts'])
|
||||
->name('settings.logins.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('settings.index')
|
||||
->push(trans('admin/settings/general.login'), route('settings.logins.index')));
|
||||
|
||||
|
||||
// SAML
|
||||
Route::get('/saml', [SettingsController::class, 'getSamlSettings'])
|
||||
->name('settings.saml.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('settings.index')
|
||||
->push(trans('admin/settings/general.saml_title'), route('settings.saml.index')));
|
||||
|
||||
Route::post('/saml', [SettingsController::class, 'postSamlSettings'])
|
||||
->name('settings.saml.save');
|
||||
|
||||
Route::get('google', [SettingsController::class, 'getGoogleLoginSettings'])->name('settings.google.index');
|
||||
Route::post('google', [SettingsController::class, 'postGoogleLoginSettings'])->name('settings.google.save');
|
||||
|
||||
Route::get('purge', [SettingsController::class, 'getPurge'])->name('settings.purge.index');
|
||||
Route::post('purge', [SettingsController::class, 'postPurge'])->name('settings.purge.save');
|
||||
|
||||
Route::get('login-attempts', [SettingsController::class, 'getLoginAttempts'])->name('settings.logins.index');
|
||||
|
||||
// Backups
|
||||
Route::group(['prefix' => 'backups', 'middleware' => 'auth'], function () {
|
||||
|
@ -244,15 +325,25 @@ Route::group(['prefix' => 'admin', 'middleware' => ['auth', 'authorize:superuser
|
|||
return redirect(route('settings.backups.index'));
|
||||
});
|
||||
|
||||
Route::get('/', [SettingsController::class, 'getBackups'])->name('settings.backups.index');
|
||||
Route::get('/', [SettingsController::class, 'getBackups'])
|
||||
->name('settings.backups.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('settings.index')
|
||||
->push(trans('admin/settings/general.backups'), route('settings.backups.index')));
|
||||
});
|
||||
|
||||
Route::resource('groups', GroupsController::class, [
|
||||
'middleware' => ['auth'],
|
||||
'parameters' => ['group' => 'group_id'],
|
||||
]);
|
||||
Route::resource('groups', GroupsController::class);
|
||||
|
||||
Route::get('/', [SettingsController::class, 'index'])->name('settings.index');
|
||||
|
||||
/**
|
||||
* This breadcrumb is repeated for groups in the BreadcrumbServiceProvider, since groups uses resource routes
|
||||
* and that servcie provider cannot see the breadcrumbs defined below
|
||||
*/
|
||||
Route::get('/', [SettingsController::class, 'index'])
|
||||
->name('settings.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.admin'), route('settings.index')));
|
||||
});
|
||||
|
||||
/*
|
||||
|
@ -264,9 +355,12 @@ Route::group(['prefix' => 'admin', 'middleware' => ['auth', 'authorize:superuser
|
|||
|
|
||||
*/
|
||||
|
||||
Route::get('/import',
|
||||
Importer::class
|
||||
)->middleware('auth')->name('imports.index');
|
||||
Route::get('/import', Importer::class)
|
||||
->middleware('auth')
|
||||
->name('imports.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.import'), route('imports.index')));
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
@ -279,26 +373,54 @@ Route::get('/import',
|
|||
Route::group(['prefix' => 'account', 'middleware' => ['auth']], function () {
|
||||
|
||||
// Profile
|
||||
Route::get('profile', [ProfileController::class, 'getIndex'])->name('profile');
|
||||
Route::post('profile', [ProfileController::class, 'postIndex'])->name('profile.update');
|
||||
Route::get('profile', [ProfileController::class, 'getIndex'])
|
||||
->name('profile')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.editprofile'), route('profile')));
|
||||
|
||||
Route::get('menu', [ProfileController::class, 'getMenuState'])->name('account.menuprefs');
|
||||
Route::post('profile', [ProfileController::class, 'postIndex'])
|
||||
->name('profile.update');
|
||||
|
||||
Route::get('password', [ProfileController::class, 'password'])->name('account.password.index');
|
||||
Route::post('password', [ProfileController::class, 'passwordSave'])->name('account.password.update');
|
||||
Route::get('menu', [ProfileController::class, 'getMenuState'])
|
||||
->name('account.menuprefs');
|
||||
|
||||
Route::get('api', [ProfileController::class, 'api'])->name('user.api');
|
||||
Route::get('password', [ProfileController::class, 'password'])
|
||||
->name('account.password.index')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.changepassword'), route('account.password.index')));
|
||||
|
||||
Route::post('password', [ProfileController::class, 'passwordSave'])
|
||||
->name('account.password.update');
|
||||
|
||||
Route::get('api', [ProfileController::class, 'api'])
|
||||
->name('user.api')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.manage_api_keys'), route('user.api')));
|
||||
|
||||
// View Assets
|
||||
Route::get('view-assets', [ViewAssetsController::class, 'getIndex'])->name('view-assets');
|
||||
Route::get('view-assets', [ViewAssetsController::class, 'getIndex'])
|
||||
->name('view-assets')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.viewassets'), route('view-assets')));
|
||||
|
||||
Route::get('requested', [ViewAssetsController::class, 'getRequestedAssets'])->name('account.requested');
|
||||
Route::get('requested', [ViewAssetsController::class, 'getRequestedAssets'])
|
||||
->name('account.requested')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.requested_assets_menu'), route('account.requested')));
|
||||
|
||||
// Profile
|
||||
Route::get(
|
||||
'requestable-assets',
|
||||
[ViewAssetsController::class, 'getRequestableIndex']
|
||||
)->name('requestable-assets');
|
||||
'requestable-assets', [ViewAssetsController::class, 'getRequestableIndex'])
|
||||
->name('requestable-assets')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.requestable_items'), route('requestable-assets')));
|
||||
|
||||
Route::post(
|
||||
'request-asset/{assetId}',
|
||||
[ViewAssetsController::class, 'getRequestAsset']
|
||||
|
@ -310,13 +432,20 @@ Route::group(['prefix' => 'account', 'middleware' => ['auth']], function () {
|
|||
)->name('account/request-item');
|
||||
|
||||
// Account Dashboard
|
||||
Route::get('/', [ViewAssetsController::class, 'getIndex'])->name('account');
|
||||
Route::get('/', [ViewAssetsController::class, 'getIndex'])
|
||||
->name('account');
|
||||
|
||||
Route::get('accept', [Account\AcceptanceController::class, 'index'])
|
||||
->name('account.accept');
|
||||
->name('account.accept')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.accept_assets_menu'), route('account.accept')));
|
||||
|
||||
Route::get('accept/{id}', [Account\AcceptanceController::class, 'create'])
|
||||
->name('account.accept.item');
|
||||
->name('account.accept.item')
|
||||
->breadcrumbs(fn (Trail $trail, $id) =>
|
||||
$trail->parent('account.accept')
|
||||
->push(trans('general.accept_item'), route('account.accept.item', $id)));
|
||||
|
||||
Route::post('accept/{id}', [Account\AcceptanceController::class, 'store'])
|
||||
->name('account.store-acceptance');
|
||||
|
@ -339,77 +468,129 @@ Route::group(['prefix' => 'account', 'middleware' => ['auth']], function () {
|
|||
|
||||
});
|
||||
|
||||
Route::group(['middleware' => ['auth']], function () {
|
||||
Route::get('reports/audit',
|
||||
[ReportsController::class, 'audit']
|
||||
)->name('reports.audit');
|
||||
|
||||
Route::group(['prefix' => 'reports', 'middleware' => ['auth']], function () {
|
||||
|
||||
Route::get('audit', [ReportsController::class, 'audit'])
|
||||
->name('reports.audit')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.audit_report'), route('reports.audit')));
|
||||
|
||||
Route::get(
|
||||
'reports/depreciation',
|
||||
[ReportsController::class, 'getDeprecationReport']
|
||||
)->name('reports/depreciation');
|
||||
Route::get(
|
||||
'reports/export/depreciation',
|
||||
[ReportsController::class, 'exportDeprecationReport']
|
||||
)->name('reports/export/depreciation');
|
||||
Route::get(
|
||||
'reports/asset_maintenances',
|
||||
[ReportsController::class, 'getAssetMaintenancesReport']
|
||||
)->name('reports/asset_maintenances');
|
||||
Route::get(
|
||||
'reports/export/asset_maintenances',
|
||||
[ReportsController::class, 'exportAssetMaintenancesReport']
|
||||
)->name('reports/export/asset_maintenances');
|
||||
Route::get(
|
||||
'reports/licenses',
|
||||
[ReportsController::class, 'getLicenseReport']
|
||||
)->name('reports/licenses');
|
||||
Route::get(
|
||||
'reports/export/licenses',
|
||||
[ReportsController::class, 'exportLicenseReport']
|
||||
)->name('reports/export/licenses');
|
||||
'depreciation', [ReportsController::class, 'getDeprecationReport'])
|
||||
->name('reports/depreciation')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.depreciation_report'), route('reports/depreciation')));
|
||||
|
||||
Route::get('reports/accessories', [ReportsController::class, 'getAccessoryReport'])->name('reports/accessories');
|
||||
Route::get(
|
||||
'reports/export/accessories',
|
||||
[ReportsController::class, 'exportAccessoryReport']
|
||||
)->name('reports/export/accessories');
|
||||
Route::get('reports/custom', [ReportsController::class, 'getCustomReport'])->name('reports/custom');
|
||||
Route::post('reports/custom', [ReportsController::class, 'postCustom']);
|
||||
|
||||
Route::prefix('reports/templates')->name('report-templates')->group(function () {
|
||||
Route::post('/', [ReportTemplatesController::class, 'store'])->name('.store');
|
||||
Route::get('/{reportTemplate}', [ReportTemplatesController::class, 'show'])->name('.show');
|
||||
Route::get('/{reportTemplate}/edit', [ReportTemplatesController::class, 'edit'])->name('.edit');
|
||||
Route::post('/{reportTemplate}', [ReportTemplatesController::class, 'update'])->name('.update');
|
||||
Route::delete('/{reportTemplate}', [ReportTemplatesController::class, 'destroy'])->name('.destroy');
|
||||
// Is this still used??
|
||||
Route::get(
|
||||
'export/depreciation', [ReportsController::class, 'exportDeprecationReport'])
|
||||
->name('reports/export/depreciation')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.depreciation_report'), route('reports.audit')));
|
||||
|
||||
Route::get(
|
||||
'asset_maintenances', [ReportsController::class, 'getAssetMaintenancesReport'])
|
||||
->name('reports/asset_maintenances')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.asset_maintenance_report'), route('reports/asset_maintenances')));
|
||||
|
||||
// Is this still used?
|
||||
Route::get('export/asset_maintenances', [ReportsController::class, 'exportAssetMaintenancesReport'])
|
||||
->name('reports/export/asset_maintenances')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.asset_maintenance_report'), route('reports/export/asset_maintenances')));
|
||||
|
||||
Route::get('licenses', [ReportsController::class, 'getLicenseReport'])
|
||||
->name('reports/licenses')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.license_report'), route('reports/licenses')));
|
||||
|
||||
Route::get('export/licenses', [ReportsController::class, 'exportLicenseReport'])
|
||||
->name('reports/export/licenses');
|
||||
|
||||
Route::get('accessories', [ReportsController::class, 'getAccessoryReport'])
|
||||
->name('reports/accessories');
|
||||
|
||||
Route::get('export/accessories', [ReportsController::class, 'exportAccessoryReport'])
|
||||
->name('reports/export/accessories');
|
||||
|
||||
Route::get('custom', [ReportsController::class, 'getCustomReport'])
|
||||
->name('reports/custom')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.custom_report'), route('reports/custom')));
|
||||
|
||||
Route::post('custom', [ReportsController::class, 'postCustom']);
|
||||
|
||||
|
||||
Route::prefix('templates')
|
||||
->group(function () {
|
||||
|
||||
Route::post('/', [ReportTemplatesController::class, 'store'])
|
||||
->name('report-templates.store');
|
||||
|
||||
// The breadcrumb on this is a little odd for now since we don't have a template index
|
||||
Route::get('/{reportTemplate}', [ReportTemplatesController::class, 'show'])
|
||||
->name('report-templates.show')
|
||||
->breadcrumbs(fn (Trail $trail, ReportTemplate $reportTemplate) =>
|
||||
$trail->parent('reports/custom')
|
||||
->push($reportTemplate->name, null)
|
||||
->push(trans('general.customize_report'), ''));
|
||||
|
||||
Route::get('/{reportTemplate}/edit', [ReportTemplatesController::class, 'edit'])
|
||||
->name('report-templates.edit')
|
||||
->breadcrumbs(fn (Trail $trail, ReportTemplate $reportTemplate) =>
|
||||
$trail->parent('reports/custom')
|
||||
->push($reportTemplate->name, route('report-templates.show', $reportTemplate))
|
||||
->push(trans('general.customize_report'), ''));
|
||||
|
||||
|
||||
Route::post('/{reportTemplate}', [ReportTemplatesController::class, 'update'])
|
||||
->name('report-templates.update');
|
||||
|
||||
Route::delete('/{reportTemplate}', [ReportTemplatesController::class, 'destroy'])
|
||||
->name('report-templates.destroy');
|
||||
});
|
||||
|
||||
Route::get(
|
||||
'reports/activity',
|
||||
[ReportsController::class, 'getActivityReport']
|
||||
)->name('reports.activity');
|
||||
|
||||
Route::post('reports/activity', [ReportsController::class, 'postActivityReport'])->name('reports.activity.post');
|
||||
|
||||
Route::get(
|
||||
'reports/unaccepted_assets/{deleted?}',
|
||||
[ReportsController::class, 'getAssetAcceptanceReport']
|
||||
)->name('reports/unaccepted_assets');
|
||||
'activity', [ReportsController::class, 'getActivityReport'])
|
||||
->name('reports.activity')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.activity_report'), route('reports.activity')));
|
||||
|
||||
Route::post('activity', [ReportsController::class, 'postActivityReport'])
|
||||
->name('reports.activity.post');
|
||||
|
||||
Route::get('unaccepted_assets/{deleted?}', [ReportsController::class, 'getAssetAcceptanceReport'])
|
||||
->name('reports/unaccepted_assets')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('home')
|
||||
->push(trans('general.unaccepted_asset_report'), route('reports/unaccepted_assets')));
|
||||
|
||||
Route::post('unaccepted_assets/sent_reminder', [ReportsController::class, 'sentAssetAcceptanceReminder'])
|
||||
->name('reports/unaccepted_assets_sent_reminder');
|
||||
|
||||
Route::delete('unaccepted_assets/{acceptanceId}/delete', [ReportsController::class, 'deleteAssetAcceptance'])
|
||||
->name('reports/unaccepted_assets_delete');
|
||||
|
||||
Route::post(
|
||||
'reports/unaccepted_assets/sent_reminder',
|
||||
[ReportsController::class, 'sentAssetAcceptanceReminder']
|
||||
)->name('reports/unaccepted_assets_sent_reminder');
|
||||
Route::delete(
|
||||
'reports/unaccepted_assets/{acceptanceId}/delete',
|
||||
[ReportsController::class, 'deleteAssetAcceptance']
|
||||
)->name('reports/unaccepted_assets_delete');
|
||||
Route::post(
|
||||
'reports/unaccepted_assets/{deleted?}',
|
||||
[ReportsController::class, 'postAssetAcceptanceReport']
|
||||
)->name('reports/export/unaccepted_assets');
|
||||
'unaccepted_assets/{deleted?}', [ReportsController::class, 'postAssetAcceptanceReport'])
|
||||
->name('reports/export/unaccepted_assets');
|
||||
|
||||
});
|
||||
|
||||
|
||||
Route::get(
|
||||
'auth/signin',
|
||||
[LoginController::class, 'legacyAuthRedirect']
|
||||
|
@ -521,14 +702,6 @@ Route::group(['middleware' => 'web'], function () {
|
|||
Route::get('google/callback', 'App\Http\Controllers\GoogleAuthController@handleGoogleCallback')->name('google.callback');
|
||||
|
||||
|
||||
Route::get(
|
||||
'/',
|
||||
[
|
||||
'as' => 'home',
|
||||
'middleware' => ['auth'],
|
||||
'uses' => 'DashboardController@getIndex' ]
|
||||
);
|
||||
|
||||
// need to keep GET /logout for SAML SLO
|
||||
Route::get(
|
||||
'logout',
|
||||
|
@ -554,4 +727,7 @@ Route::withoutMiddleware(['web'])->get(
|
|||
Route::middleware(['auth'])->get(
|
||||
'/',
|
||||
[DashboardController::class, 'index']
|
||||
)->name('home');
|
||||
)->name('home')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->push('Home', route('home'))
|
||||
);
|
||||
|
|
|
@ -53,6 +53,5 @@ Route::group(['prefix' => 'accessories', 'middleware' => ['auth']], function ()
|
|||
});
|
||||
|
||||
Route::resource('accessories', Accessories\AccessoriesController::class, [
|
||||
'middleware' => ['auth'],
|
||||
'parameters' => ['accessory' => 'accessory_id'],
|
||||
'middleware' => ['auth']
|
||||
]);
|
||||
|
|
|
@ -33,14 +33,17 @@ Route::group([ 'prefix' => 'fields','middleware' => ['auth'] ], function () {
|
|||
)->name('fieldsets.associate');
|
||||
|
||||
Route::resource('fieldsets', CustomFieldsetsController::class, [
|
||||
'parameters' => ['fieldset' => 'field_id', 'field' => 'field_id']
|
||||
'parameters' => [
|
||||
'fieldset' => 'fieldset',
|
||||
'field' => 'field_id'
|
||||
]
|
||||
]);
|
||||
|
||||
|
||||
});
|
||||
|
||||
Route::resource('fields', CustomFieldsController::class, [
|
||||
'middleware' => ['auth'],
|
||||
'parameters' => ['field' => 'field_id', 'fieldset' => 'fieldset_id'],
|
||||
]);
|
||||
Route::resource('fields', CustomFieldsController::class,
|
||||
['middleware' => ['auth'],
|
||||
'except' => ['show']
|
||||
]);
|
||||
|
||||
|
|
|
@ -6,7 +6,10 @@ use App\Http\Controllers\Assets\BulkAssetsController;
|
|||
use App\Http\Controllers\Assets\AssetCheckoutController;
|
||||
use App\Http\Controllers\Assets\AssetCheckinController;
|
||||
use App\Http\Controllers\Assets\AssetFilesController;
|
||||
use App\Models\Setting;
|
||||
use Tabuna\Breadcrumbs\Trail;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use App\Models\Asset;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
@ -24,47 +27,59 @@ Route::group(
|
|||
|
||||
function () {
|
||||
|
||||
Route::get('bulkaudit',
|
||||
[AssetsController::class, 'quickScan']
|
||||
)->name('assets.bulkaudit');
|
||||
Route::get('bulkaudit', [AssetsController::class, 'quickScan'])
|
||||
->name('assets.bulkaudit')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('hardware.index')
|
||||
->push(trans('general.bulkaudit'), route('asset.import-history'))
|
||||
);
|
||||
|
||||
Route::get('quickscancheckin',
|
||||
[AssetsController::class, 'quickScanCheckin']
|
||||
)->name('hardware/quickscancheckin');
|
||||
Route::get('quickscancheckin', [AssetsController::class, 'quickScanCheckin'])
|
||||
->name('hardware/quickscancheckin')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('hardware.index')
|
||||
->push('Quickscan Checkin', route('hardware/quickscancheckin'))
|
||||
);
|
||||
|
||||
// Asset Maintenances
|
||||
Route::resource('maintenances',
|
||||
AssetMaintenancesController::class, [
|
||||
'parameters' => ['maintenance' => 'maintenance_id', 'asset' => 'asset_id'],
|
||||
]);
|
||||
Route::get('requested', [AssetsController::class, 'getRequestedIndex'])
|
||||
->name('assets.requested')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('hardware.index')
|
||||
->push(trans('admin/hardware/general.requested'), route('assets.requested'))
|
||||
);
|
||||
|
||||
Route::get('requested', [
|
||||
AssetsController::class, 'getRequestedIndex']
|
||||
)->name('assets.requested');
|
||||
|
||||
Route::get('scan',
|
||||
[AssetsController::class, 'scan']
|
||||
)->name('asset.scan');
|
||||
|
||||
Route::get('audit/due',
|
||||
[AssetsController::class, 'dueForAudit']
|
||||
)->name('assets.audit.due');
|
||||
Route::get('audit/due', [AssetsController::class, 'dueForAudit'])
|
||||
->name('assets.audit.due')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('hardware.index')
|
||||
->push(trans_choice('general.audit_due_days', Setting::getSettings()->audit_warning_days, ['days' => Setting::getSettings()->audit_warning_days]), route('assets.audit.due'))
|
||||
);
|
||||
|
||||
Route::get('checkins/due',
|
||||
[AssetsController::class, 'dueForCheckin']
|
||||
)->name('assets.checkins.due');
|
||||
)->name('assets.checkins.due')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('hardware.index')
|
||||
->push(trans_choice('general.checkin_due_days', Setting::getSettings()->due_checkin_days, ['days' => Setting::getSettings()->due_checkin_days]), route('assets.audit.due'))
|
||||
);
|
||||
|
||||
Route::get('audit/{id}',
|
||||
[AssetsController::class, 'audit']
|
||||
)->name('asset.audit.create');
|
||||
Route::get('audit/{asset}', [AssetsController::class, 'audit'])
|
||||
->name('asset.audit.create')
|
||||
->breadcrumbs(fn (Trail $trail, Asset $asset) =>
|
||||
$trail->parent('hardware.show', $asset)
|
||||
->push(trans('general.audit'))
|
||||
);
|
||||
|
||||
Route::post('audit/{id}',
|
||||
Route::post('audit/{asset}',
|
||||
[AssetsController::class, 'auditStore']
|
||||
)->name('asset.audit.store');
|
||||
|
||||
Route::get('history',
|
||||
[AssetsController::class, 'getImportHistory']
|
||||
)->name('asset.import-history');
|
||||
Route::get('history', [AssetsController::class, 'getImportHistory'])
|
||||
->name('asset.import-history')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('hardware.index')
|
||||
->push(trans('general.import-history'), route('asset.import-history'))
|
||||
);
|
||||
|
||||
Route::post('history',
|
||||
[AssetsController::class, 'postImportHistory']
|
||||
|
@ -85,11 +100,12 @@ Route::group(
|
|||
Route::get('{assetId}/label',
|
||||
[AssetsController::class, 'getLabel']
|
||||
)->name('label/hardware');
|
||||
|
||||
|
||||
Route::get('{assetId}/checkout',
|
||||
[AssetCheckoutController::class, 'create']
|
||||
)->name('hardware.checkout.create');
|
||||
Route::get('{asset}/checkout', [AssetCheckoutController::class, 'create'])->name('hardware.checkout.create')
|
||||
->breadcrumbs(fn (Trail $trail, Asset $asset) =>
|
||||
$trail->parent('hardware.show', $asset)
|
||||
->push(trans('admin/hardware/general.bulk_checkout'), route('hardware.index'))
|
||||
);
|
||||
|
||||
Route::post('{assetId}/checkout',
|
||||
[AssetCheckoutController::class, 'store']
|
||||
|
@ -108,7 +124,7 @@ Route::group(
|
|||
return redirect()->route('hardware.show', ['hardware' => $assetId]);
|
||||
});
|
||||
|
||||
Route::get('{assetId}/qr_code',
|
||||
Route::get('{asset}/qr_code',
|
||||
[AssetsController::class, 'getQrCode']
|
||||
)->name('qr_code/hardware');
|
||||
|
||||
|
@ -153,9 +169,12 @@ Route::group(
|
|||
)->name('hardware/bulksave');
|
||||
|
||||
// Bulk checkout / checkin
|
||||
Route::get('bulkcheckout',
|
||||
[BulkAssetsController::class, 'showCheckout']
|
||||
)->name('hardware.bulkcheckout.show');
|
||||
Route::get('bulkcheckout', [BulkAssetsController::class, 'showCheckout'])
|
||||
->name('hardware.bulkcheckout.show')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('hardware.index')
|
||||
->push(trans('admin/hardware/general.bulk_checkout'), route('hardware.index'))
|
||||
);
|
||||
|
||||
Route::post('bulkcheckout',
|
||||
[BulkAssetsController::class, 'storeCheckout']
|
||||
|
@ -163,16 +182,17 @@ Route::group(
|
|||
|
||||
});
|
||||
|
||||
Route::resource('hardware',
|
||||
AssetsController::class,
|
||||
[
|
||||
'middleware' => ['auth'],
|
||||
'parameters' => ['asset' => 'asset_id',
|
||||
'names' => [
|
||||
'show' => 'view',
|
||||
],
|
||||
],
|
||||
]);
|
||||
Route::resource('hardware',
|
||||
AssetsController::class,
|
||||
['middleware' => ['auth']
|
||||
])->parameters(['hardware' => 'asset']);
|
||||
|
||||
|
||||
// Asset Maintenances
|
||||
Route::resource('maintenances',
|
||||
AssetMaintenancesController::class, [
|
||||
'parameters' => ['maintenance' => 'maintenance', 'asset' => 'asset_id'],
|
||||
]);
|
||||
|
||||
Route::get('ht/{any?}',
|
||||
[AssetsController::class, 'getAssetByTag']
|
||||
|
|
|
@ -1,21 +1,17 @@
|
|||
<?php
|
||||
|
||||
use App\Http\Controllers\Kits;
|
||||
use App\Models\PredefinedKit;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Tabuna\Breadcrumbs\Trail;
|
||||
|
||||
// Predefined Kit Management
|
||||
Route::resource('kits', Kits\PredefinedKitsController::class, [
|
||||
'middleware' => ['auth'],
|
||||
'parameters' => ['kit' => 'kit_id'],
|
||||
]);
|
||||
|
||||
Route::group(['prefix' => 'kits/{kit_id}', 'middleware' => ['auth']], function () {
|
||||
Route::group(['prefix' => 'kits/{kit}', 'middleware' => ['auth']], function () {
|
||||
|
||||
// Route::get('licenses',
|
||||
// [Kits\PredefinedKitsController::class, 'indexLicenses']
|
||||
// )->name('kits.licenses.index');
|
||||
|
||||
Route::post('licenses',
|
||||
Route::put('licenses',
|
||||
[Kits\PredefinedKitsController::class, 'storeLicense']
|
||||
)->name('kits.licenses.store');
|
||||
|
||||
|
@ -23,9 +19,11 @@ Route::group(['prefix' => 'kits/{kit_id}', 'middleware' => ['auth']], function (
|
|||
[Kits\PredefinedKitsController::class, 'updateLicense']
|
||||
)->name('kits.licenses.update');
|
||||
|
||||
Route::get('licenses/{license_id}/edit',
|
||||
[Kits\PredefinedKitsController::class, 'editLicense']
|
||||
)->name('kits.licenses.edit');
|
||||
Route::get('licenses/{license_id}/edit', [Kits\PredefinedKitsController::class, 'editLicense'])
|
||||
->name('kits.licenses.edit')
|
||||
->breadcrumbs(fn (Trail $trail) =>
|
||||
$trail->parent('settings.index')
|
||||
->push(trans('admin/settings/general.backups'), route('kits.licenses.edit')));
|
||||
|
||||
Route::delete('licenses/{license_id}',
|
||||
[Kits\PredefinedKitsController::class, 'detachLicense']
|
||||
|
@ -35,7 +33,7 @@ Route::group(['prefix' => 'kits/{kit_id}', 'middleware' => ['auth']], function (
|
|||
|
||||
Route::put('models/{model_id}',
|
||||
[Kits\PredefinedKitsController::class, 'updateModel']
|
||||
)/* ->parameters([2 => 'kit_id', 1 => 'model_id'])*/->name('kits.models.update');
|
||||
)->name('kits.models.update');
|
||||
|
||||
Route::get('models/{model_id}/edit',
|
||||
[Kits\PredefinedKitsController::class, 'editModel']
|
||||
|
@ -63,18 +61,24 @@ Route::group(['prefix' => 'kits/{kit_id}', 'middleware' => ['auth']], function (
|
|||
[Kits\PredefinedKitsController::class, 'updateAccessory']
|
||||
)/*->parameters([2 => 'kit_id', 1 => 'accessory_id'])*/->name('kits.accessories.update');
|
||||
|
||||
Route::get('accessories/{accessory_id}/edit',
|
||||
[Kits\PredefinedKitsController::class, 'editAccessory']
|
||||
)->name('kits.accessories.edit');
|
||||
Route::get('accessories/{accessory_id}/edit', [Kits\PredefinedKitsController::class, 'editAccessory'])
|
||||
->name('kits.accessories.edit');
|
||||
|
||||
Route::delete('accessories/{accessory_id}',
|
||||
[Kits\PredefinedKitsController::class, 'detachAccessory']
|
||||
)->name('kits.accessories.detach');
|
||||
Route::get('checkout',
|
||||
[Kits\CheckoutKitController::class, 'showCheckout']
|
||||
)->name('kits.checkout.show');
|
||||
Route::delete('accessories/{accessory_id}', [Kits\PredefinedKitsController::class, 'detachAccessory'])
|
||||
->name('kits.accessories.detach');
|
||||
|
||||
Route::post('checkout',
|
||||
[Kits\CheckoutKitController::class, 'store']
|
||||
)->name('kits.checkout.store');
|
||||
Route::get('checkout', [Kits\CheckoutKitController::class, 'showCheckout'])
|
||||
->name('kits.checkout.show')
|
||||
->breadcrumbs(fn (Trail $trail, PredefinedKit $kit) =>
|
||||
$trail->parent('kits.show', $kit)
|
||||
->push(trans('general.checkout'), route('kits.checkout.show', $kit)));
|
||||
|
||||
Route::post('checkout', [Kits\CheckoutKitController::class, 'store'])
|
||||
->name('kits.checkout.store');
|
||||
}); // kits
|
||||
|
||||
// Predefined Kit Management
|
||||
Route::resource('kits', Kits\PredefinedKitsController::class, [
|
||||
'middleware' => ['auth'],
|
||||
]);
|
||||
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
|
||||
use App\Http\Controllers\Licenses;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use App\Models\License;
|
||||
use App\Models\LicenseSeat;
|
||||
use Tabuna\Breadcrumbs\Trail;
|
||||
|
||||
// Licenses
|
||||
Route::group(['prefix' => 'licenses', 'middleware' => ['auth']], function () {
|
||||
|
@ -10,16 +13,25 @@ Route::group(['prefix' => 'licenses', 'middleware' => ['auth']], function () {
|
|||
Route::get('{licenseId}/freecheckout',
|
||||
[Licenses\LicensesController::class, 'getFreeLicense']
|
||||
)->name('licenses.freecheckout');
|
||||
Route::get('{licenseId}/checkout/{seatId?}',
|
||||
[Licenses\LicenseCheckoutController::class, 'create']
|
||||
)->name('licenses.checkout');
|
||||
|
||||
Route::get('{license}/checkout/{seatId?}', [Licenses\LicenseCheckoutController::class, 'create'])
|
||||
->name('licenses.checkout')
|
||||
->breadcrumbs(fn (Trail $trail, License $license) =>
|
||||
$trail->parent('licenses.show', $license)
|
||||
->push(trans('general.checkout'), route('licenses.checkout', $license))
|
||||
);
|
||||
|
||||
Route::post(
|
||||
'{licenseId}/checkout/{seatId?}',
|
||||
[Licenses\LicenseCheckoutController::class, 'store']
|
||||
); //name() would duplicate here, so we skip it.
|
||||
Route::get('{licenseSeatId}/checkin/{backto?}',
|
||||
[Licenses\LicenseCheckinController::class, 'create']
|
||||
)->name('licenses.checkin');
|
||||
|
||||
Route::get('{licenseSeat}/checkin/{backto?}', [Licenses\LicenseCheckinController::class, 'create'])
|
||||
->name('licenses.checkin')
|
||||
->breadcrumbs(fn (Trail $trail, LicenseSeat $licenseSeat) =>
|
||||
$trail->parent('licenses.show', $licenseSeat->license)
|
||||
->push(trans('general.checkin'), route('licenses.checkin', $licenseSeat))
|
||||
);
|
||||
|
||||
Route::post('{licenseId}/checkin/{backto?}',
|
||||
[Licenses\LicenseCheckinController::class, 'store']
|
||||
|
@ -59,5 +71,4 @@ Route::group(['prefix' => 'licenses', 'middleware' => ['auth']], function () {
|
|||
|
||||
Route::resource('licenses', Licenses\LicensesController::class, [
|
||||
'middleware' => ['auth'],
|
||||
'parameters' => ['license' => 'license_id'],
|
||||
]);
|
||||
|
|
|
@ -151,6 +151,5 @@ Route::group(['prefix' => 'users', 'middleware' => ['auth']], function () {
|
|||
|
||||
Route::resource('users', Users\UsersController::class, [
|
||||
'middleware' => ['auth'],
|
||||
'parameters' => ['user' => 'user_id'],
|
||||
'except' => ['update']
|
||||
]);
|
||||
|
|
|
@ -12,7 +12,7 @@ class ShowAccessoryTest extends TestCase
|
|||
public function testRequiresPermissionToViewAccessory()
|
||||
{
|
||||
$this->actingAs(User::factory()->create())
|
||||
->get(route('accessories.show', Accessory::factory()->create()->id))
|
||||
->get(route('accessories.show', Accessory::factory()->create()))
|
||||
->assertForbidden();
|
||||
}
|
||||
|
||||
|
@ -25,8 +25,8 @@ class ShowAccessoryTest extends TestCase
|
|||
$userForCompanyB = User::factory()->for($companyB)->viewAccessories()->create();
|
||||
|
||||
$this->actingAs($userForCompanyB)
|
||||
->get(route('accessories.show', $accessoryForCompanyA->id))
|
||||
->assertForbidden();
|
||||
->get(route('accessories.show', $accessoryForCompanyA))
|
||||
->assertStatus(302);
|
||||
}
|
||||
|
||||
public function testCanViewAccessory()
|
||||
|
@ -34,7 +34,7 @@ class ShowAccessoryTest extends TestCase
|
|||
$accessory = Accessory::factory()->create();
|
||||
|
||||
$this->actingAs(User::factory()->viewAccessories()->create())
|
||||
->get(route('accessories.show', $accessory->id))
|
||||
->get(route('accessories.show', $accessory))
|
||||
->assertOk()
|
||||
->assertViewIs('accessories.view')
|
||||
->assertViewHas(['accessory' => $accessory]);
|
||||
|
@ -43,7 +43,7 @@ class ShowAccessoryTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('accessories.show', Accessory::factory()->create()->id))
|
||||
->get(route('accessories.show', Accessory::factory()->create()))
|
||||
->assertOk();
|
||||
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ class UpdateAccessoryTest extends TestCase
|
|||
public function testRequiresPermissionToSeeEditAccessoryPage()
|
||||
{
|
||||
$this->actingAs(User::factory()->create())
|
||||
->get(route('accessories.edit', Accessory::factory()->create()->id))
|
||||
->get(route('accessories.edit', Accessory::factory()->create()))
|
||||
->assertForbidden();
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ class ShowAssetModelsTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('models.show', AssetModel::factory()->create()->id))
|
||||
->get(route('models.show', AssetModel::factory()->create()))
|
||||
->assertOk();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ class UpdateAssetModelsTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('models.edit', AssetModel::factory()->create()->id))
|
||||
->get(route('models.edit', AssetModel::factory()->create()))
|
||||
->assertOk();
|
||||
}
|
||||
|
||||
|
@ -55,15 +55,15 @@ class UpdateAssetModelsTest extends TestCase
|
|||
$this->assertTrue(AssetModel::where('name', 'Test Model')->exists());
|
||||
|
||||
$response = $this->actingAs(User::factory()->superuser()->create())
|
||||
->from(route('models.edit', ['model' => $model->id]))
|
||||
->put(route('models.update', ['model' => $model]), [
|
||||
->from(route('models.edit', $model))
|
||||
->put(route('models.update', $model), [
|
||||
'name' => 'Test Model Edited',
|
||||
'category_id' => Category::factory()->forAccessories()->create()->id,
|
||||
])
|
||||
->assertSessionHasErrors(['category_type'])
|
||||
->assertInvalid(['category_type'])
|
||||
->assertStatus(302)
|
||||
->assertRedirect(route('models.edit', ['model' => $model->id]));
|
||||
->assertRedirect(route('models.edit', $model));
|
||||
|
||||
$this->followRedirects($response)->assertSee(trans('general.error'));
|
||||
$this->assertFalse(AssetModel::where('name', 'Test Model Edited')->exists());
|
||||
|
|
|
@ -27,7 +27,7 @@ class EditAssetTest extends TestCase
|
|||
{
|
||||
$asset = Asset::factory()->create();
|
||||
$user = User::factory()->editAssets()->create();
|
||||
$response = $this->actingAs($user)->get(route('hardware.edit', $asset->id));
|
||||
$response = $this->actingAs($user)->get(route('hardware.edit', $asset));
|
||||
$response->assertStatus(200);
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,7 @@ class EditAssetTest extends TestCase
|
|||
'model_id' => AssetModel::factory()->create()->id,
|
||||
])
|
||||
->assertStatus(302)
|
||||
->assertRedirect(route('hardware.show', ['hardware' => $asset->id]));
|
||||
->assertRedirect(route('hardware.show', $asset));
|
||||
|
||||
$this->assertDatabaseHas('assets', ['asset_tag' => 'New Asset Tag']);
|
||||
}
|
||||
|
@ -81,8 +81,8 @@ class EditAssetTest extends TestCase
|
|||
$currentTimestamp = now();
|
||||
|
||||
$this->actingAs(User::factory()->viewAssets()->editAssets()->create())
|
||||
->from(route('hardware.edit', $asset->id))
|
||||
->put(route('hardware.update', $asset->id), [
|
||||
->from(route('hardware.edit', $asset))
|
||||
->put(route('hardware.update', $asset), [
|
||||
'status_id' => $achived_status->id,
|
||||
'model_id' => $asset->model_id,
|
||||
'asset_tags' => $asset->asset_tag,
|
||||
|
|
|
@ -11,7 +11,7 @@ class ShowCategoryTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('categories.show', Category::factory()->create()->id))
|
||||
->get(route('categories.show', Category::factory()->create()))
|
||||
->assertOk();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ class UpdateCategoriesTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('categories.edit', Category::factory()->create()->id))
|
||||
->get(route('categories.edit', Category::factory()->create()))
|
||||
->assertOk();
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,7 @@ class UpdateCategoriesTest extends TestCase
|
|||
$this->assertTrue(Category::where('name', 'Test Category')->exists());
|
||||
|
||||
$response = $this->actingAs(User::factory()->superuser()->create())
|
||||
->put(route('categories.update', ['category' => $category]), [
|
||||
->put(route('categories.update', $category), [
|
||||
'name' => 'Test Category Edited',
|
||||
'notes' => 'Test Note Edited',
|
||||
])
|
||||
|
@ -66,8 +66,8 @@ class UpdateCategoriesTest extends TestCase
|
|||
$this->assertTrue(Category::where('name', 'Test Category')->exists());
|
||||
|
||||
$response = $this->actingAs(User::factory()->superuser()->create())
|
||||
->from(route('categories.edit', ['category' => $category->id]))
|
||||
->put(route('categories.update', ['category' => $category]), [
|
||||
->from(route('categories.edit', $category->id))
|
||||
->put(route('categories.update', $category), [
|
||||
'name' => 'Test Category Edited',
|
||||
'category_type' => 'accessory',
|
||||
'notes' => 'Test Note Edited',
|
||||
|
@ -87,8 +87,8 @@ class UpdateCategoriesTest extends TestCase
|
|||
$category = Category::where('name', 'Laptops')->first();
|
||||
|
||||
$response = $this->actingAs(User::factory()->superuser()->create())
|
||||
->from(route('categories.edit', ['category' => $category->id]))
|
||||
->put(route('categories.update', ['category' => $category]), [
|
||||
->from(route('categories.edit', $category))
|
||||
->put(route('categories.update', $category), [
|
||||
'name' => 'Test Category Edited',
|
||||
'category_type' => 'accessory',
|
||||
'notes' => 'Test Note Edited',
|
||||
|
@ -96,7 +96,7 @@ class UpdateCategoriesTest extends TestCase
|
|||
->assertSessionHasErrors(['category_type'])
|
||||
->assertInvalid(['category_type'])
|
||||
->assertStatus(302)
|
||||
->assertRedirect(route('categories.edit', ['category' => $category->id]));
|
||||
->assertRedirect(route('categories.edit', $category));
|
||||
|
||||
$this->followRedirects($response)->assertSee(trans('general.error'));
|
||||
$this->assertFalse(Category::where('name', 'Test Category Edited')->where('notes', 'Test Note Edited')->exists());
|
||||
|
|
|
@ -188,7 +188,7 @@ class AssetCheckinTest extends TestCase
|
|||
->get(route('hardware.checkin.create', ['assetId' => $asset->id]))
|
||||
->assertStatus(302)
|
||||
->assertSessionHas('error')
|
||||
->assertRedirect(route('hardware.show',['hardware' => $asset->id]));
|
||||
->assertRedirect(route('hardware.show', $asset->id));
|
||||
}
|
||||
|
||||
public function testAssetCheckinPagePostIsRedirectedIfModelIsInvalid()
|
||||
|
@ -201,7 +201,7 @@ class AssetCheckinTest extends TestCase
|
|||
->post(route('hardware.checkin.store', ['assetId' => $asset->id]))
|
||||
->assertStatus(302)
|
||||
->assertSessionHas('error')
|
||||
->assertRedirect(route('hardware.show', ['hardware' => $asset->id]));
|
||||
->assertRedirect(route('hardware.show', $asset));
|
||||
}
|
||||
|
||||
public function testAssetCheckinPagePostIsRedirectedIfRedirectSelectionIsIndex()
|
||||
|
@ -228,6 +228,6 @@ class AssetCheckinTest extends TestCase
|
|||
])
|
||||
->assertStatus(302)
|
||||
->assertSessionHasNoErrors()
|
||||
->assertRedirect(route('hardware.show', ['hardware' => $asset->id]));
|
||||
->assertRedirect(route('hardware.show', $asset));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,9 +16,7 @@ class ComponentCheckinTest extends TestCase
|
|||
$componentAsset = DB::table('components_assets')->where('component_id', $component->id)->first();
|
||||
|
||||
$this->actingAs(User::factory()->create())
|
||||
->post(route('components.checkin.store', [
|
||||
'componentID' => $componentAsset->id,
|
||||
]))
|
||||
->post(route('components.checkin.store', $componentAsset->id))
|
||||
->assertForbidden();
|
||||
}
|
||||
|
||||
|
@ -67,6 +65,6 @@ class ComponentCheckinTest extends TestCase
|
|||
])
|
||||
->assertStatus(302)
|
||||
->assertSessionHasNoErrors()
|
||||
->assertRedirect(route('components.show', ['component' => $component->id]));
|
||||
->assertRedirect(route('components.show', $component));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ class AccessoryCheckoutTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('accessories.checkout.show', Accessory::factory()->create()->id))
|
||||
->get(route('accessories.checkout.show', Accessory::factory()->create()))
|
||||
->assertOk();
|
||||
}
|
||||
|
||||
|
@ -241,7 +241,7 @@ class AccessoryCheckoutTest extends TestCase
|
|||
])
|
||||
->assertStatus(302)
|
||||
->assertSessionHasNoErrors()
|
||||
->assertRedirect(route('accessories.show', ['accessory' => $accessory->id]));
|
||||
->assertRedirect(route('accessories.show', $accessory));
|
||||
}
|
||||
|
||||
public function testAccessoryCheckoutPagePostIsRedirectedIfRedirectSelectionIsTarget()
|
||||
|
@ -258,6 +258,6 @@ class AccessoryCheckoutTest extends TestCase
|
|||
'assigned_qty' => 1,
|
||||
])
|
||||
->assertStatus(302)
|
||||
->assertRedirect(route('users.show', ['user' => $user]));
|
||||
->assertRedirect(route('users.show', $user));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -260,10 +260,10 @@ class AssetCheckoutTest extends TestCase
|
|||
$asset->forceSave();
|
||||
|
||||
$this->actingAs(User::factory()->admin()->create())
|
||||
->get(route('hardware.checkout.create', ['assetId' => $asset->id]))
|
||||
->get(route('hardware.checkout.create', $asset))
|
||||
->assertStatus(302)
|
||||
->assertSessionHas('error')
|
||||
->assertRedirect(route('hardware.show',['hardware' => $asset->id]));
|
||||
->assertRedirect(route('hardware.show', $asset));
|
||||
}
|
||||
|
||||
public function testAssetCheckoutPagePostIsRedirectedIfRedirectSelectionIsIndex()
|
||||
|
@ -294,7 +294,7 @@ class AssetCheckoutTest extends TestCase
|
|||
])
|
||||
->assertStatus(302)
|
||||
->assertSessionHasNoErrors()
|
||||
->assertRedirect(route('hardware.show', ['hardware' => $asset->id]));
|
||||
->assertRedirect(route('hardware.show', $asset));
|
||||
}
|
||||
|
||||
public function testAssetCheckoutPagePostIsRedirectedIfRedirectSelectionIsUserTarget()
|
||||
|
@ -328,7 +328,7 @@ class AssetCheckoutTest extends TestCase
|
|||
'assigned_qty' => 1,
|
||||
])
|
||||
->assertStatus(302)
|
||||
->assertRedirect(route('hardware.show', ['hardware' => $target]));
|
||||
->assertRedirect(route('hardware.show', $target));
|
||||
}
|
||||
|
||||
public function testAssetCheckoutPagePostIsRedirectedIfRedirectSelectionIsLocationTarget()
|
||||
|
|
|
@ -76,7 +76,7 @@ class ComponentsCheckoutTest extends TestCase
|
|||
'assigned_qty' => 1,
|
||||
])
|
||||
->assertStatus(302)
|
||||
->assertRedirect(route('components.show', ['component' => $component->id]));
|
||||
->assertRedirect(route('components.show', $component));
|
||||
}
|
||||
|
||||
public function testComponentCheckoutPagePostIsRedirectedIfRedirectSelectionIsTarget()
|
||||
|
@ -92,6 +92,6 @@ class ComponentsCheckoutTest extends TestCase
|
|||
'assigned_qty' => 1,
|
||||
])
|
||||
->assertStatus(302)
|
||||
->assertRedirect(route('hardware.show', ['hardware' => $asset]));
|
||||
->assertRedirect(route('hardware.show', $asset));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -130,7 +130,7 @@ class ConsumableCheckoutTest extends TestCase
|
|||
'assigned_qty' => 1,
|
||||
])
|
||||
->assertStatus(302)
|
||||
->assertRedirect(route('consumables.show', ['consumable' => $consumable->id]));
|
||||
->assertRedirect(route('consumables.show', $consumable));
|
||||
}
|
||||
|
||||
public function testConsumableCheckoutPagePostIsRedirectedIfRedirectSelectionIsTarget()
|
||||
|
@ -146,7 +146,7 @@ class ConsumableCheckoutTest extends TestCase
|
|||
'assigned_qty' => 1,
|
||||
])
|
||||
->assertStatus(302)
|
||||
->assertRedirect(route('users.show', ['user' => $user]));
|
||||
->assertRedirect(route('users.show', $user));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ class LicenseCheckoutTest extends TestCase
|
|||
$licenseSeat = LicenseSeat::factory()->create();
|
||||
|
||||
$this->actingAs($admin)
|
||||
->post("/licenses/{$licenseSeat->license->id}/checkout", [
|
||||
->post(route('licenses.checkout', $licenseSeat->license), [
|
||||
'checkout_to_type' => 'asset',
|
||||
'assigned_to' => null,
|
||||
'asset_id' => $asset->id,
|
||||
|
@ -47,7 +47,7 @@ class LicenseCheckoutTest extends TestCase
|
|||
$licenseSeat = LicenseSeat::factory()->create();
|
||||
|
||||
$this->actingAs($admin)
|
||||
->post("/licenses/{$licenseSeat->license->id}/checkout", [
|
||||
->post(route('licenses.checkout', $licenseSeat->license), [
|
||||
'checkout_to_type' => 'user',
|
||||
'assigned_to' => $admin->id,
|
||||
'asset_id' => null,
|
||||
|
@ -69,8 +69,8 @@ class LicenseCheckoutTest extends TestCase
|
|||
$license = License::factory()->create();
|
||||
|
||||
$this->actingAs(User::factory()->admin()->create())
|
||||
->from(route('licenses.checkout', ['licenseId' => $license->id]))
|
||||
->post(route('licenses.checkout', ['licenseId' => $license->id]), [
|
||||
->from(route('licenses.checkout', $license))
|
||||
->post(route('licenses.checkout', $license), [
|
||||
'assigned_to' => User::factory()->create()->id,
|
||||
'redirect_option' => 'index',
|
||||
'assigned_qty' => 1,
|
||||
|
@ -84,13 +84,13 @@ class LicenseCheckoutTest extends TestCase
|
|||
$license = License::factory()->create();
|
||||
|
||||
$this->actingAs(User::factory()->admin()->create())
|
||||
->from(route('licenses.checkout', ['licenseId' => $license->id]))
|
||||
->post(route('licenses.checkout' , ['licenseId' => $license->id]), [
|
||||
->from(route('licenses.checkout', $license))
|
||||
->post(route('licenses.checkout', $license), [
|
||||
'assigned_to' => User::factory()->create()->id,
|
||||
'redirect_option' => 'item',
|
||||
])
|
||||
->assertStatus(302)
|
||||
->assertRedirect(route('licenses.show', ['license' => $license->id]));
|
||||
->assertRedirect(route('licenses.show', $license));
|
||||
}
|
||||
|
||||
public function testLicenseCheckoutPagePostIsRedirectedIfRedirectSelectionIsUserTarget()
|
||||
|
@ -99,13 +99,13 @@ class LicenseCheckoutTest extends TestCase
|
|||
$license = License::factory()->create();
|
||||
|
||||
$this->actingAs(User::factory()->admin()->create())
|
||||
->from(route('licenses.checkout', ['licenseId' => $license->id]))
|
||||
->from(route('licenses.checkout', $license))
|
||||
->post(route('licenses.checkout' , $license), [
|
||||
'assigned_to' => $user->id,
|
||||
'redirect_option' => 'target',
|
||||
])
|
||||
->assertStatus(302)
|
||||
->assertRedirect(route('users.show', ['user' => $user->id]));
|
||||
->assertRedirect(route('users.show', $user));
|
||||
}
|
||||
public function testLicenseCheckoutPagePostIsRedirectedIfRedirectSelectionIsAssetTarget()
|
||||
{
|
||||
|
@ -113,12 +113,12 @@ class LicenseCheckoutTest extends TestCase
|
|||
$license = License::factory()->create();
|
||||
|
||||
$this->actingAs(User::factory()->admin()->create())
|
||||
->from(route('licenses.checkout', ['licenseId' => $license->id]))
|
||||
->from(route('licenses.checkout', $license))
|
||||
->post(route('licenses.checkout' , $license), [
|
||||
'asset_id' => $asset->id,
|
||||
'redirect_option' => 'target',
|
||||
])
|
||||
->assertStatus(302)
|
||||
->assertRedirect(route('hardware.show', ['hardware' => $asset->id]));
|
||||
->assertRedirect(route('hardware.show', $asset));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ class EditCompanyTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('companies.edit', Company::factory()->create()->id))
|
||||
->get(route('companies.edit', Company::factory()->create()))
|
||||
->assertOk();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ class ShowCompanyTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('companies.show', Company::factory()->create()->id))
|
||||
->get(route('companies.show', Company::factory()->create()))
|
||||
->assertOk();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ class EditComponentTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('components.edit', Component::factory()->create()->id))
|
||||
->get(route('components.edit', Component::factory()->create()))
|
||||
->assertOk();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ class ShowComponentTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('components.show', Component::factory()->create()->id))
|
||||
->get(route('components.show', Component::factory()->create()))
|
||||
->assertOk();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ class EditConsumableTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('consumables.show', Consumable::factory()->create()->id))
|
||||
->get(route('consumables.show', Consumable::factory()->create()))
|
||||
->assertOk();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ class UpdateConsumableTest extends TestCase
|
|||
$userForCompanyB = User::factory()->editConsumables()->for($companyB)->create();
|
||||
|
||||
$this->actingAs($userForCompanyB)
|
||||
->get(route('consumables.edit', $consumableForCompanyA->id))
|
||||
->get(route('consumables.edit', $consumableForCompanyA))
|
||||
->assertRedirect(route('consumables.index'));
|
||||
}
|
||||
|
||||
|
@ -51,10 +51,10 @@ class UpdateConsumableTest extends TestCase
|
|||
$userForCompanyB = User::factory()->editConsumables()->for($companyB)->create();
|
||||
|
||||
$this->actingAs($userForCompanyB)
|
||||
->put(route('consumables.update', $consumableForCompanyA->id), [
|
||||
->put(route('consumables.update', $consumableForCompanyA), [
|
||||
//
|
||||
])
|
||||
->assertForbidden();
|
||||
->assertStatus(302);
|
||||
}
|
||||
|
||||
public function testCannotSetQuantityToAmountLowerThanWhatIsCheckedOut()
|
||||
|
@ -99,7 +99,7 @@ class UpdateConsumableTest extends TestCase
|
|||
];
|
||||
|
||||
$this->actingAs(User::factory()->createConsumables()->editConsumables()->create())
|
||||
->put(route('consumables.update', $consumable->id), $data + [
|
||||
->put(route('consumables.update', $consumable), $data + [
|
||||
'redirect_option' => 'index',
|
||||
'category_type' => 'consumable',
|
||||
])
|
||||
|
|
|
@ -11,7 +11,7 @@ class ShowDepartmentTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('departments.show', Department::factory()->create()->id))
|
||||
->get(route('departments.show', Department::factory()->create()))
|
||||
->assertOk();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ class UpdateDepartmentsTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('departments.edit', Department::factory()->create()->id))
|
||||
->get(route('departments.edit', Department::factory()->create()))
|
||||
->assertOk();
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,7 @@ class UpdateDepartmentsTest extends TestCase
|
|||
$this->assertTrue(Department::where('name', 'Test Department')->exists());
|
||||
|
||||
$response = $this->actingAs(User::factory()->superuser()->create())
|
||||
->put(route('departments.update', ['department' => $department]), [
|
||||
->put(route('departments.update', $department), [
|
||||
'name' => 'Test Department Edited',
|
||||
'notes' => 'Test Note Edited',
|
||||
])
|
||||
|
|
|
@ -11,7 +11,7 @@ class ShowLocationTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('locations.show', Location::factory()->create()->id))
|
||||
->get(route('locations.show', Location::factory()->create()))
|
||||
->assertOk();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@ class UpdateLocationsTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('locations.update', Location::factory()->create()->id))
|
||||
->get(route('locations.update', Location::factory()->create()))
|
||||
->assertOk();
|
||||
}
|
||||
|
||||
|
@ -48,8 +48,8 @@ class UpdateLocationsTest extends TestCase
|
|||
$location = Location::factory()->create();
|
||||
|
||||
$response = $this->actingAs(User::factory()->superuser()->create())
|
||||
->from(route('locations.edit', ['location' => $location->id]))
|
||||
->put(route('locations.update', ['location' => $location]), [
|
||||
->from(route('locations.edit', $location))
|
||||
->put(route('locations.update', $location), [
|
||||
'name' => 'Test Location',
|
||||
'parent_id' => $location->id,
|
||||
])
|
||||
|
@ -63,7 +63,7 @@ class UpdateLocationsTest extends TestCase
|
|||
{
|
||||
$location = Location::factory()->create();
|
||||
$response = $this->actingAs(User::factory()->superuser()->create())
|
||||
->from(route('locations.edit', ['location' => $location->id]))
|
||||
->from(route('locations.edit', $location))
|
||||
->put(route('locations.update', ['location' => $location]), [
|
||||
'name' => 'Test Location',
|
||||
'parent_id' => '100000000'
|
||||
|
|
|
@ -11,7 +11,7 @@ class ShowManufacturerTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('manufacturers.show', Manufacturer::factory()->create()->id))
|
||||
->get(route('manufacturers.show', Manufacturer::factory()->create()))
|
||||
->assertOk();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ class UpdateManufacturerTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('manufacturers.edit', Manufacturer::factory()->create()->id))
|
||||
->get(route('manufacturers.edit', Manufacturer::factory()->create()))
|
||||
->assertOk();
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,7 @@ class UpdateManufacturerTest extends TestCase
|
|||
$this->assertTrue(Manufacturer::where('name', 'Test Manufacturer')->exists());
|
||||
|
||||
$response = $this->actingAs(User::factory()->superuser()->create())
|
||||
->put(route('manufacturers.update', ['manufacturer' => $manufacturer]), [
|
||||
->put(route('manufacturers.update', $manufacturer), [
|
||||
'name' => 'Test Manufacturer Edited',
|
||||
'notes' => 'Test Note Edited',
|
||||
])
|
||||
|
|
|
@ -17,7 +17,7 @@ class DeleteReportTemplateTest extends TestCase implements TestsPermissionsRequi
|
|||
|
||||
$this->actingAs(User::factory()->create())
|
||||
->post(route('report-templates.destroy', $reportTemplate->id))
|
||||
->assertNotFound();
|
||||
->assertStatus(302);
|
||||
|
||||
$this->assertModelExists($reportTemplate);
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ class DeleteReportTemplateTest extends TestCase implements TestsPermissionsRequi
|
|||
|
||||
$this->actingAs(User::factory()->canViewReports()->create())
|
||||
->delete(route('report-templates.destroy', $reportTemplate->id))
|
||||
->assertNotFound();
|
||||
->assertStatus(302);
|
||||
|
||||
$this->assertModelExists($reportTemplate);
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ class EditReportTemplateTest extends TestCase implements TestsPermissionsRequire
|
|||
{
|
||||
$this->actingAs(User::factory()->create())
|
||||
->get(route('report-templates.edit', ReportTemplate::factory()->create()))
|
||||
->assertNotFound();
|
||||
->assertStatus(302);
|
||||
}
|
||||
|
||||
public function testCannotLoadEditPageForAnotherUsersReportTemplate()
|
||||
|
@ -25,7 +25,7 @@ class EditReportTemplateTest extends TestCase implements TestsPermissionsRequire
|
|||
|
||||
$this->actingAs($user)
|
||||
->get(route('report-templates.edit', $reportTemplate))
|
||||
->assertNotFound();
|
||||
->assertStatus(302);
|
||||
}
|
||||
|
||||
public function testCanLoadEditReportTemplatePage()
|
||||
|
|
|
@ -15,7 +15,7 @@ class ShowReportTemplateTest extends TestCase implements TestsPermissionsRequire
|
|||
{
|
||||
$this->actingAs(User::factory()->create())
|
||||
->get(route('report-templates.show', ReportTemplate::factory()->create()))
|
||||
->assertNotFound();
|
||||
->assertStatus(302);
|
||||
}
|
||||
|
||||
public function testCanLoadASavedReportTemplate()
|
||||
|
@ -38,6 +38,6 @@ class ShowReportTemplateTest extends TestCase implements TestsPermissionsRequire
|
|||
|
||||
$this->actingAs(User::factory()->canViewReports()->create())
|
||||
->get(route('report-templates.show', $reportTemplate))
|
||||
->assertNotFound();
|
||||
->assertStatus(302);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,14 +15,14 @@ class UpdateReportTemplateTest extends TestCase implements TestsPermissionsRequi
|
|||
{
|
||||
$this->actingAs(User::factory()->create())
|
||||
->post(route('report-templates.update', ReportTemplate::factory()->create()))
|
||||
->assertNotFound();
|
||||
->assertStatus(302);
|
||||
}
|
||||
|
||||
public function testCannotUpdateAnotherUsersReportTemplate()
|
||||
{
|
||||
$this->actingAs(User::factory()->canViewReports()->create())
|
||||
->post(route('report-templates.update', ReportTemplate::factory()->create()))
|
||||
->assertNotFound();
|
||||
->assertStatus(302);
|
||||
}
|
||||
|
||||
public function testUpdatingReportTemplateRequiresValidFields()
|
||||
|
|
|
@ -11,7 +11,7 @@ class ShowStatusLabelTest extends TestCase
|
|||
public function testPageRenders()
|
||||
{
|
||||
$this->actingAs(User::factory()->superuser()->create())
|
||||
->get(route('statuslabels.show', Statuslabel::factory()->create()->id))
|
||||
->get(route('statuslabels.show', Statuslabel::factory()->create()))
|
||||
->assertOk();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ class DeleteUsersTest extends TestCase implements TestsFullMultipleCompaniesSupp
|
|||
{
|
||||
$user = User::factory()->deletedUser()->create();
|
||||
$this->actingAsForApi(User::factory()->deleteUsers()->create())
|
||||
->deleteJson(route('api.users.destroy', $user->id))
|
||||
->deleteJson(route('api.users.destroy', $user))
|
||||
->assertOk()
|
||||
->assertStatus(200)
|
||||
->assertStatusMessageIs('error')
|
||||
|
@ -51,7 +51,7 @@ class DeleteUsersTest extends TestCase implements TestsFullMultipleCompaniesSupp
|
|||
$this->assertFalse($manager->isDeletable());
|
||||
|
||||
$this->actingAsForApi(User::factory()->deleteUsers()->create())
|
||||
->deleteJson(route('api.users.destroy', $manager->id))
|
||||
->deleteJson(route('api.users.destroy', $manager))
|
||||
->assertOk()
|
||||
->assertStatus(200)
|
||||
->assertStatusMessageIs('error')
|
||||
|
@ -66,7 +66,7 @@ class DeleteUsersTest extends TestCase implements TestsFullMultipleCompaniesSupp
|
|||
$this->assertFalse($manager->isDeletable());
|
||||
|
||||
$this->actingAsForApi(User::factory()->deleteUsers()->create())
|
||||
->deleteJson(route('api.users.destroy', $manager->id))
|
||||
->deleteJson(route('api.users.destroy', $manager))
|
||||
->assertOk()
|
||||
->assertStatus(200)
|
||||
->assertStatusMessageIs('error')
|
||||
|
@ -81,7 +81,7 @@ class DeleteUsersTest extends TestCase implements TestsFullMultipleCompaniesSupp
|
|||
$this->assertFalse($manager->isDeletable());
|
||||
|
||||
$this->actingAsForApi(User::factory()->deleteUsers()->create())
|
||||
->deleteJson(route('api.users.destroy', $manager->id))
|
||||
->deleteJson(route('api.users.destroy', $manager))
|
||||
->assertOk()
|
||||
->assertStatus(200)
|
||||
->assertStatusMessageIs('error')
|
||||
|
@ -111,7 +111,7 @@ class DeleteUsersTest extends TestCase implements TestsFullMultipleCompaniesSupp
|
|||
$userFromB = User::factory()->deleteUsers()->for($companyB)->create();
|
||||
|
||||
$this->actingAsForApi($userFromA)
|
||||
->deleteJson(route('api.users.destroy', ['user' => $userFromB->id]))
|
||||
->deleteJson(route('api.users.destroy', $userFromB))
|
||||
->assertOk()
|
||||
->assertStatus(200)
|
||||
->assertStatusMessageIs('error')
|
||||
|
@ -121,7 +121,7 @@ class DeleteUsersTest extends TestCase implements TestsFullMultipleCompaniesSupp
|
|||
$this->assertNull($userFromB->deleted_at);
|
||||
|
||||
$this->actingAsForApi($userFromB)
|
||||
->deleteJson(route('api.users.destroy', ['user' => $userFromA->id]))
|
||||
->deleteJson(route('api.users.destroy', $userFromA))
|
||||
->assertOk()
|
||||
->assertStatus(200)
|
||||
->assertStatusMessageIs('error')
|
||||
|
@ -131,7 +131,7 @@ class DeleteUsersTest extends TestCase implements TestsFullMultipleCompaniesSupp
|
|||
$this->assertNull($userFromA->deleted_at);
|
||||
|
||||
$this->actingAsForApi($superuser)
|
||||
->deleteJson(route('api.users.destroy', ['user' => $userFromA->id]))
|
||||
->deleteJson(route('api.users.destroy', $userFromA))
|
||||
->assertOk()
|
||||
->assertStatus(200)
|
||||
->assertStatusMessageIs('success')
|
||||
|
|
|
@ -20,11 +20,11 @@ class ViewUserTest extends TestCase
|
|||
$user = User::factory()->for($companyB)->create();
|
||||
|
||||
$this->actingAs(User::factory()->editUsers()->for($companyA)->create())
|
||||
->get(route('users.show', ['user' => $user->id]))
|
||||
->assertStatus(403);
|
||||
->get(route('users.show', $user))
|
||||
->assertStatus(302);
|
||||
|
||||
$this->actingAs($superuser)
|
||||
->get(route('users.show', ['user' => $user->id]))
|
||||
->get(route('users.show', $user))
|
||||
->assertOk()
|
||||
->assertStatus(200);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue