From 4c8bf9ae194c10457fdb4de9f85907067ffea355 Mon Sep 17 00:00:00 2001 From: Brady Wetherington Date: Thu, 25 Jul 2024 21:20:06 +0100 Subject: [PATCH 01/21] Dynamically iterate through the skin listing to build skins --- webpack.mix.js | 71 +++++++------------------------------------------- 1 file changed, 10 insertions(+), 61 deletions(-) diff --git a/webpack.mix.js b/webpack.mix.js index cb5ac6eae..acbb312d4 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -1,4 +1,5 @@ const mix = require("laravel-mix"); +const fs = require("node:fs"); // This generates a file called app.css, which we use // later on to build all.css @@ -68,67 +69,15 @@ mix "./public/js/build/app.js" //because of compiling - this does not work very well :( ) +var skins = fs.readdirSync("resources/assets/less/skins"); + // Convert the skins to CSS -mix.less( - "./resources/assets/less/skins/skin-blue.less", - "css/dist/skins", -); -mix.less( - "./resources/assets/less/skins/skin-red.less", - "css/dist/skins", -); -mix.less( - "./resources/assets/less/skins/skin-contrast.less", - "css/dist/skins", -); -mix.less( - "./resources/assets/less/skins/skin-green.less", - "css/dist/skins", -); -mix.less( - "./resources/assets/less/skins/skin-green-dark.less", - "css/dist/skins", -); -mix.less( - "./resources/assets/less/skins/skin-black.less", - "css/dist/skins", -); -mix.less( - "./resources/assets/less/skins/skin-black-dark.less", - "css/dist/skins", -); -mix.less( - "./resources/assets/less/skins/skin-red-dark.less", - "css/dist/skins", -); -mix.less( - "./resources/assets/less/skins/skin-purple.less", - "css/dist/skins", -); -mix.less( - "./resources/assets/less/skins/skin-purple-dark.less", - "css/dist/skins", -); -mix.less( - "./resources/assets/less/skins/skin-yellow.less", - "css/dist/skins", -); -mix.less( - "./resources/assets/less/skins/skin-yellow-dark.less", - "css/dist/skins", -); -mix.less( - "./resources/assets/less/skins/skin-blue-dark.less", - "css/dist/skins", -); -mix.less( - "./resources/assets/less/skins/skin-orange-dark.less", - "css/dist/skins", -); -mix.less( - "./resources/assets/less/skins/skin-orange.less", - "css/dist/skins", -); +for (var i in skins) { + mix.less( + "resources/assets/less/skins/" + skins[i], + "css/dist/skins" + ) +} /** * Combine bootstrap table css @@ -163,7 +112,7 @@ mix.combine( "./node_modules/ekko-lightbox/dist/ekko-lightbox.js", "./resources/assets/js/extensions/pGenerator.jquery.js", "./node_modules/chart.js/dist/Chart.js", - "./resources/assets/js/signature_pad.js", + "./resources/assets/js/signature_pad.js", //dupe? "./node_modules/jquery-validation/dist/jquery.validate.js", "./node_modules/list.js/dist/list.js", "./node_modules/clipboard/dist/clipboard.js", From 73a80a5fbcabef931fbb4e73da360289b870c916 Mon Sep 17 00:00:00 2001 From: snipe Date: Thu, 25 Jul 2024 21:35:13 +0100 Subject: [PATCH 02/21] Use blade component for redirect option Signed-off-by: snipe --- app/Helpers/Helper.php | 14 +- .../Controllers/Assets/AssetsController.php | 9 +- .../blade/redirect_submit_options.blade.php | 38 ++++ resources/views/hardware/checkin.blade.php | 214 +++++++++--------- resources/views/hardware/checkout.blade.php | 60 +++-- resources/views/hardware/edit.blade.php | 6 +- resources/views/layouts/edit-form.blade.php | 6 +- .../forms/redirect_submit_options.blade.php | 36 --- 8 files changed, 213 insertions(+), 170 deletions(-) create mode 100644 resources/views/blade/redirect_submit_options.blade.php delete mode 100644 resources/views/partials/forms/redirect_submit_options.blade.php diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index d77f41b01..d97869d70 100644 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -1490,22 +1490,24 @@ class Helper $redirect_option = Session::get('redirect_option'); $checkout_to_type = Session::get('checkout_to_type'); - //return to index - if ($redirect_option == '0') { + // return to index + if ($redirect_option == 'index') { switch ($table) { case "Assets": return redirect()->route('hardware.index')->with('success', trans('admin/hardware/message.checkout.success')); } } - //return to thing being assigned - if ($redirect_option == '1') { + + // return to thing being assigned + if ($redirect_option == 'item') { switch ($table) { case "Assets": return redirect()->route('hardware.show', $id ? $id : $asset_id)->with('success', trans('admin/hardware/message.checkout.success')); } } - //return to thing being assigned to - if ($redirect_option == '2') { + + // return to assignment target + if ($redirect_option == 'target') { switch ($checkout_to_type) { case 'user': return redirect()->route('users.show', $request->assigned_user)->with('success', trans('admin/hardware/message.checkout.success')); diff --git a/app/Http/Controllers/Assets/AssetsController.php b/app/Http/Controllers/Assets/AssetsController.php index 8fecff7e1..c418866b3 100755 --- a/app/Http/Controllers/Assets/AssetsController.php +++ b/app/Http/Controllers/Assets/AssetsController.php @@ -23,6 +23,7 @@ use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Gate; use Illuminate\Http\Request; use Illuminate\Support\Facades\Crypt; +use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Validator; use League\Csv\Reader; @@ -204,6 +205,8 @@ class AssetsController extends Controller } } + session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]); + if ($success) { return redirect()->route('hardware.index') ->with('success-unescaped', trans('admin/hardware/message.create.success_linked', ['link' => route('hardware.show', ['hardware' => $asset->id]), 'id', 'tag' => e($asset->asset_tag)])); @@ -289,6 +292,8 @@ class AssetsController extends Controller */ public function update(ImageUploadRequest $request, $assetId = null) : RedirectResponse { + + // Check if the asset exists if (! $asset = Asset::find($assetId)) { // Redirect to the asset management page with error @@ -387,10 +392,10 @@ 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()->route('hardware.show', $assetId) - ->with('success', trans('admin/hardware/message.update.success')); + return Helper::getRedirectOption($request, $assetId, 'Assets'); } return redirect()->back()->withInput()->withErrors($asset->getErrors()); diff --git a/resources/views/blade/redirect_submit_options.blade.php b/resources/views/blade/redirect_submit_options.blade.php new file mode 100644 index 000000000..7771d25c4 --- /dev/null +++ b/resources/views/blade/redirect_submit_options.blade.php @@ -0,0 +1,38 @@ + +@props([ + 'route' => 'hardware.index', + 'button_label', + 'disabled_select' => false, + 'options' => [], +]) + + + \ No newline at end of file diff --git a/resources/views/hardware/checkin.blade.php b/resources/views/hardware/checkin.blade.php index 7b52cf861..691c04852 100755 --- a/resources/views/hardware/checkin.blade.php +++ b/resources/views/hardware/checkin.blade.php @@ -2,132 +2,144 @@ {{-- Page title --}} @section('title') - {{ trans('admin/hardware/general.checkin') }} - @parent + {{ trans('admin/hardware/general.checkin') }} + @parent @stop {{-- Page content --}} @section('content') - + .input-group { + padding-left: 0px !important; + } + -
- -
-
-
-

- {{ trans('admin/hardware/form.tag') }} - {{ $asset->asset_tag }} -

-
+
+ +
+
+
+

+ {{ trans('admin/hardware/form.tag') }} + {{ $asset->asset_tag }} +

+
-
-
+
+
- @if ($backto == 'user') -
- @else - - @endif - {{csrf_field()}} + @if ($backto == 'user') + + @else + + @endif + {{csrf_field()}} - -
- -
+ +
+ +
-

- @if (($asset->model) && ($asset->model->name)) - {{ $asset->model->name }} - @else - +

+ @if (($asset->model) && ($asset->model->name)) + {{ $asset->model->name }} + @else + {{ trans('admin/hardware/general.model_invalid')}} - {{ trans('admin/hardware/general.model_invalid_fix')}} - - {{ trans('admin/hardware/general.edit') }} - - @endif -

+ {{ trans('admin/hardware/general.model_invalid_fix')}} + + {{ trans('admin/hardware/general.edit') }} + + @endif +

-
-
+
+
- -
- -
- - {!! $errors->first('name', '') !!} -
-
+ +
+ +
+ + {!! $errors->first('name', '') !!} +
+
- -
- -
- {{ Form::select('status_id', $statusLabel_list, '', array('class'=>'select2', 'style'=>'width:100%','id' =>'modal-statuslabel_types', 'aria-label'=>'status_id')) }} - {!! $errors->first('status_id', '') !!} -
-
+ +
+ +
+ {{ Form::select('status_id', $statusLabel_list, '', array('class'=>'select2', 'style'=>'width:100%','id' =>'modal-statuslabel_types', 'aria-label'=>'status_id')) }} + {!! $errors->first('status_id', '') !!} +
+
- @include ('partials.forms.edit.location-select', ['translated_name' => trans('general.location'), 'fieldname' => 'location_id', 'help_text' => ($asset->defaultLoc) ? trans('general.checkin_to_diff_location', ['default_location' => $asset->defaultLoc->name]) : null, 'hide_location_radio' => true]) + @include ('partials.forms.edit.location-select', ['translated_name' => trans('general.location'), 'fieldname' => 'location_id', 'help_text' => ($asset->defaultLoc) ? trans('general.checkin_to_diff_location', ['default_location' => $asset->defaultLoc->name]) : null, 'hide_location_radio' => true]) - -
- + +
+ -
-
-
- - -
- {!! $errors->first('checkin_at', '') !!} -
-
-
+
+
+
+ + +
+ {!! $errors->first('checkin_at', '') !!} +
+
+
- -
- -
- - {!! $errors->first('note', '') !!} -
-
+ +
+ +
+ + {!! $errors->first('note', '') !!} +
+
- @include ('partials.forms.redirect_submit_options', - [ - 'route' => 'hardware.index', - 'table_name' => $table_name, - 'type'=> ($asset->model ? $asset->model->name : trans('general.asset_model')), - 'checkin' => true - ]) - + + -
+
+
-
- @stop \ No newline at end of file diff --git a/resources/views/hardware/checkout.blade.php b/resources/views/hardware/checkout.blade.php index 4a1cdf574..03bc8496b 100755 --- a/resources/views/hardware/checkout.blade.php +++ b/resources/views/hardware/checkout.blade.php @@ -25,7 +25,7 @@

{{ trans('admin/hardware/form.tag') }} {{ $asset->asset_tag }}

- {{csrf_field()}} + {{csrf_field()}} @if ($asset->company && $asset->company->name)
- + {!! $errors->first('name', '') !!}
@@ -86,26 +87,30 @@
- @include ('partials.forms.checkout-selector', ['user_select' => 'true','asset_select' => 'true', 'location_select' => 'true']) + @include ('partials.forms.checkout-selector', ['user_select' => 'true','asset_select' => 'true', 'location_select' => 'true']) - @include ('partials.forms.edit.user-select', ['translated_name' => trans('general.user'), 'fieldname' => 'assigned_user', 'required'=>'true']) + @include ('partials.forms.edit.user-select', ['translated_name' => trans('general.user'), 'fieldname' => 'assigned_user', 'required'=>'true']) - - @include ('partials.forms.edit.asset-select', ['translated_name' => trans('general.asset'), 'fieldname' => 'assigned_asset', 'unselect' => 'true', 'style' => 'display:none;', 'required'=>'true']) + + @include ('partials.forms.edit.asset-select', ['translated_name' => trans('general.asset'), 'fieldname' => 'assigned_asset', 'unselect' => 'true', 'style' => 'display:none;', 'required'=>'true']) - @include ('partials.forms.edit.location-select', ['translated_name' => trans('general.location'), 'fieldname' => 'assigned_location', 'style' => 'display:none;', 'required'=>'true']) + @include ('partials.forms.edit.location-select', ['translated_name' => trans('general.location'), 'fieldname' => 'assigned_location', 'style' => 'display:none;', 'required'=>'true']) - +
-
- - +
+ +
{!! $errors->first('checkout_at', '') !!}
@@ -118,9 +123,13 @@
-
- - +
+ +
{!! $errors->first('expected_checkin', '') !!}
@@ -132,7 +141,8 @@ {{ trans('general.notes') }}
- + {!! $errors->first('note', '') !!}
@@ -164,13 +174,19 @@ @endif
- @include ('partials.forms.redirect_submit_options', - [ - 'route' => 'hardware.index', - 'table_name' => $table_name, - 'type'=> ($asset->model ? $asset->model->name : trans('general.asset_model')), - 'checkin' => false - ]) + + +
diff --git a/resources/views/hardware/edit.blade.php b/resources/views/hardware/edit.blade.php index 2a125a1c3..22673aa5e 100755 --- a/resources/views/hardware/edit.blade.php +++ b/resources/views/hardware/edit.blade.php @@ -6,6 +6,10 @@ 'helpText' => trans('help.assets'), 'helpPosition' => 'right', 'formAction' => ($item->id) ? route('hardware.update', ['hardware' => $item->id]) : route('hardware.store'), + 'options' => [ + 'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'assets']), + 'item' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.asset')]), + ] ]) @@ -130,8 +134,6 @@ - -
diff --git a/resources/views/layouts/edit-form.blade.php b/resources/views/layouts/edit-form.blade.php index 791590141..2a24db27f 100644 --- a/resources/views/layouts/edit-form.blade.php +++ b/resources/views/layouts/edit-form.blade.php @@ -66,7 +66,11 @@ {{ csrf_field() }} @yield('inputFields') - @include('partials.forms.edit.submit') +
diff --git a/resources/views/partials/forms/redirect_submit_options.blade.php b/resources/views/partials/forms/redirect_submit_options.blade.php deleted file mode 100644 index c960dbb86..000000000 --- a/resources/views/partials/forms/redirect_submit_options.blade.php +++ /dev/null @@ -1,36 +0,0 @@ - - - - \ No newline at end of file From 018b5684fc68ae5e7b549bcfb2bac9b5a39f9036 Mon Sep 17 00:00:00 2001 From: snipe Date: Thu, 25 Jul 2024 22:02:03 +0100 Subject: [PATCH 03/21] Refactor helper method for redirection Signed-off-by: snipe --- app/Helpers/Helper.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index d97869d70..ef1de871f 100644 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -1494,7 +1494,7 @@ class Helper if ($redirect_option == 'index') { switch ($table) { case "Assets": - return redirect()->route('hardware.index')->with('success', trans('admin/hardware/message.checkout.success')); + return route('hardware.index'); } } @@ -1502,7 +1502,7 @@ class Helper if ($redirect_option == 'item') { switch ($table) { case "Assets": - return redirect()->route('hardware.show', $id ? $id : $asset_id)->with('success', trans('admin/hardware/message.checkout.success')); + return route('hardware.show', $id ?? $asset_id); } } @@ -1510,11 +1510,12 @@ class Helper if ($redirect_option == 'target') { switch ($checkout_to_type) { case 'user': - return redirect()->route('users.show', $request->assigned_user)->with('success', trans('admin/hardware/message.checkout.success')); + \Log::error('We think the checkout type is user?'); + return route('users.show', $request->assigned_user); case 'location': - return redirect()->route('locations.show', $request->assigned_location)->with('success', trans('admin/hardware/message.checkout.success')); + return route('locations.show', $request->assigned_location); case 'asset': - return redirect()->route('hardware.show', $request->assigned_asset)->with('success', trans('admin/hardware/message.checkout.success')); + return route('hardware.show', $request->assigned_asset); } } return redirect()->back()->with('error', trans('admin/hardware/message.checkout.error')); From 08f4fe5f35376183b412c85d807ac8f6c52aa3f5 Mon Sep 17 00:00:00 2001 From: snipe Date: Thu, 25 Jul 2024 22:02:34 +0100 Subject: [PATCH 04/21] Add status messages to redirect Signed-off-by: snipe --- app/Http/Controllers/Assets/AssetCheckinController.php | 8 +++----- app/Http/Controllers/Assets/AssetCheckoutController.php | 5 +++-- app/Http/Controllers/Assets/AssetsController.php | 8 +++++--- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/app/Http/Controllers/Assets/AssetCheckinController.php b/app/Http/Controllers/Assets/AssetCheckinController.php index 4794fa041..f84a468a6 100644 --- a/app/Http/Controllers/Assets/AssetCheckinController.php +++ b/app/Http/Controllers/Assets/AssetCheckinController.php @@ -11,7 +11,6 @@ use App\Models\Asset; use App\Models\CheckoutAcceptance; use App\Models\LicenseSeat; use Illuminate\Database\Eloquent\Builder; -use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\Log; use \Illuminate\Contracts\View\View; use \Illuminate\Http\RedirectResponse; @@ -83,7 +82,6 @@ class AssetCheckinController extends Controller } $asset->expected_checkin = null; - //$asset->last_checkout = null; $asset->last_checkin = now(); $asset->assignedTo()->disassociate($asset); $asset->accepted = null; @@ -128,12 +126,12 @@ class AssetCheckinController extends Controller $acceptance->delete(); }); - Session::put('redirect_option', $request->get('redirect_option')); - // Was the asset updated? + session()->put('redirect_option', $request->get('redirect_option')); + if ($asset->save()) { event(new CheckoutableCheckedIn($asset, $target, auth()->user(), $request->input('note'), $checkin_at, $originalValues)); - return Helper::getRedirectOption($asset, $assetId, 'Assets'); + return redirect()->to(Helper::getRedirectOption($request, $asset->id, 'Assets'))->with('success', trans('admin/hardware/message.checkin.success')); } // Redirect to the asset management page with error return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkin.error').$asset->getErrors()); diff --git a/app/Http/Controllers/Assets/AssetCheckoutController.php b/app/Http/Controllers/Assets/AssetCheckoutController.php index 355f9387b..05b766916 100644 --- a/app/Http/Controllers/Assets/AssetCheckoutController.php +++ b/app/Http/Controllers/Assets/AssetCheckoutController.php @@ -109,10 +109,11 @@ class AssetCheckoutController extends Controller } } - Session::put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]); + session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]); if ($asset->checkOut($target, $admin, $checkout_at, $expected_checkin, $request->get('note'), $request->get('name'))) { - return Helper::getRedirectOption($request, $assetId, 'Assets'); + return redirect()->to(Helper::getRedirectOption($request, $asset->id, 'Assets')) + ->with('success', trans('admin/hardware/message.checkout.success')); } // Redirect to the asset management page with error return redirect()->to("hardware/$assetId/checkout")->with('error', trans('admin/hardware/message.checkout.error').$asset->getErrors()); diff --git a/app/Http/Controllers/Assets/AssetsController.php b/app/Http/Controllers/Assets/AssetsController.php index c418866b3..a55afdc14 100755 --- a/app/Http/Controllers/Assets/AssetsController.php +++ b/app/Http/Controllers/Assets/AssetsController.php @@ -207,8 +207,10 @@ class AssetsController extends Controller session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]); + if ($success) { - return redirect()->route('hardware.index') + + 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)])); @@ -293,7 +295,6 @@ class AssetsController extends Controller public function update(ImageUploadRequest $request, $assetId = null) : RedirectResponse { - // Check if the asset exists if (! $asset = Asset::find($assetId)) { // Redirect to the asset management page with error @@ -395,7 +396,8 @@ class AssetsController extends Controller session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]); if ($asset->save()) { - return Helper::getRedirectOption($request, $assetId, 'Assets'); + return redirect()->to(Helper::getRedirectOption($request, $assetId, 'Assets')) + ->with('success', trans('admin/hardware/message.update.success')); } return redirect()->back()->withInput()->withErrors($asset->getErrors()); From 068535a80c8fd9e9771422839d8bbbee11ea0211 Mon Sep 17 00:00:00 2001 From: snipe Date: Thu, 25 Jul 2024 22:08:46 +0100 Subject: [PATCH 05/21] Removed logging Signed-off-by: snipe --- app/Helpers/Helper.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index ef1de871f..2d0fd4fb0 100644 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -1510,7 +1510,6 @@ class Helper if ($redirect_option == 'target') { switch ($checkout_to_type) { case 'user': - \Log::error('We think the checkout type is user?'); return route('users.show', $request->assigned_user); case 'location': return route('locations.show', $request->assigned_location); From 64082ada1e41a1b1908b484c76f36908d13d6da7 Mon Sep 17 00:00:00 2001 From: snipe Date: Thu, 25 Jul 2024 22:08:51 +0100 Subject: [PATCH 06/21] Updated test Signed-off-by: snipe --- tests/Unit/Helpers/HelperTest.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/Unit/Helpers/HelperTest.php b/tests/Unit/Helpers/HelperTest.php index 3ef114b79..993fe138d 100644 --- a/tests/Unit/Helpers/HelperTest.php +++ b/tests/Unit/Helpers/HelperTest.php @@ -35,7 +35,7 @@ class HelperTest extends TestCase 'request' =>(object) ['assigned_user' => 22], 'id' => 1, 'checkout_to_type' => 'user', - 'redirect_option' => 2, + 'redirect_option' => 'target', 'table' => 'Assets', 'route' => route('users.show', 22), ], @@ -43,7 +43,7 @@ class HelperTest extends TestCase 'request' =>(object) ['assigned_location' => 10], 'id' => 2, 'checkout_to_type' => 'location', - 'redirect_option' => 2, + 'redirect_option' => 'target', 'table' => 'Locations', 'route' => route('locations.show', 10), ], @@ -51,7 +51,7 @@ class HelperTest extends TestCase 'request' =>(object) ['assigned_asset' => 101], 'id' => 3, 'checkout_to_type' => 'asset', - 'redirect_option' => 2, + 'redirect_option' => 'target', 'table' => 'Assets', 'route' => route('hardware.show', 101), ], @@ -59,7 +59,7 @@ class HelperTest extends TestCase 'request' =>(object) ['assigned_asset' => null], 'id' => 999, 'checkout_to_type' => null, - 'redirect_option' => 1, + 'redirect_option' => 'item', 'table' => 'Assets', 'route' => route('hardware.show', 999), ], @@ -67,7 +67,7 @@ class HelperTest extends TestCase 'request' =>(object) ['assigned_asset' => null], 'id' => null, 'checkout_to_type' => null, - 'redirect_option' => 0, + 'redirect_option' => 'index', 'table' => 'Assets', 'route' => route('hardware.index'), ], @@ -78,7 +78,7 @@ class HelperTest extends TestCase Session::put('redirect_option', $data['redirect_option']); Session::put('checkout_to_type', $data['checkout_to_type']); - $redirect = Helper::getRedirectOption($data['request'],$data['id'], $data['table']); + $redirect = redirect()->to(Helper::getRedirectOption($data['request'],$data['id'], $data['table'])); $this->assertInstanceOf(RedirectResponse::class, $redirect); $this->assertEquals($data['route'], $redirect->getTargetUrl(), $scenario.'failed.'); From 243ab51def07b149002d98c9f0861ce70b418b24 Mon Sep 17 00:00:00 2001 From: snipe Date: Fri, 26 Jul 2024 10:40:48 +0100 Subject: [PATCH 07/21] Fixed back button Signed-off-by: snipe --- resources/views/blade/redirect_submit_options.blade.php | 4 ++-- resources/views/hardware/checkin.blade.php | 2 +- resources/views/hardware/checkout.blade.php | 2 +- resources/views/hardware/edit.blade.php | 1 + resources/views/layouts/edit-form.blade.php | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/resources/views/blade/redirect_submit_options.blade.php b/resources/views/blade/redirect_submit_options.blade.php index 7771d25c4..f22d55d89 100644 --- a/resources/views/blade/redirect_submit_options.blade.php +++ b/resources/views/blade/redirect_submit_options.blade.php @@ -1,6 +1,6 @@ @props([ - 'route' => 'hardware.index', + 'index_route', 'button_label', 'disabled_select' => false, 'options' => [], @@ -10,7 +10,7 @@
diff --git a/resources/views/hardware/checkin.blade.php b/resources/views/hardware/checkin.blade.php index 691c04852..1efd39427 100755 --- a/resources/views/hardware/checkin.blade.php +++ b/resources/views/hardware/checkin.blade.php @@ -128,7 +128,7 @@
From b6d9f736e30049235b9be1d7f5e9cc1204ee1175 Mon Sep 17 00:00:00 2001 From: snipe Date: Fri, 26 Jul 2024 10:41:28 +0100 Subject: [PATCH 08/21] Pulled use session Signed-off-by: snipe --- app/Http/Controllers/Assets/AssetsController.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/Http/Controllers/Assets/AssetsController.php b/app/Http/Controllers/Assets/AssetsController.php index a55afdc14..8c02baf5d 100755 --- a/app/Http/Controllers/Assets/AssetsController.php +++ b/app/Http/Controllers/Assets/AssetsController.php @@ -23,7 +23,6 @@ use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Gate; use Illuminate\Http\Request; use Illuminate\Support\Facades\Crypt; -use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Validator; use League\Csv\Reader; From 759ab78f80b88b35db3027c6f2c1e7a01265e2df Mon Sep 17 00:00:00 2001 From: snipe Date: Fri, 26 Jul 2024 11:27:36 +0100 Subject: [PATCH 09/21] Added more redirects Signed-off-by: snipe --- app/Helpers/Helper.php | 24 ++++- .../Accessories/AccessoriesController.php | 8 +- .../Components/ComponentsController.php | 8 +- .../Consumables/ConsumablesController.php | 8 +- .../Licenses/LicensesController.php | 8 +- .../Controllers/Users/UsersController.php | 7 +- resources/views/accessories/edit.blade.php | 5 + resources/views/components/edit.blade.php | 5 + resources/views/consumables/edit.blade.php | 5 + resources/views/hardware/edit.blade.php | 2 +- resources/views/licenses/edit.blade.php | 5 + resources/views/users/edit.blade.php | 11 ++- tests/Unit/Helpers/HelperTest.php | 99 ++++++++++++++++++- 13 files changed, 173 insertions(+), 22 deletions(-) diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index 2d0fd4fb0..6166d6668 100644 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -1484,7 +1484,7 @@ class Helper } - static public function getRedirectOption($request, $id, $table, $asset_id = null) + static public function getRedirectOption($request, $id, $table, $item_id = null) { $redirect_option = Session::get('redirect_option'); @@ -1495,6 +1495,16 @@ class Helper switch ($table) { case "Assets": return route('hardware.index'); + case "Users": + return route('users.index'); + case "Licenses": + return route('licenses.index'); + case "Accessories": + return route('accessories.index'); + case "Components": + return route('components.index'); + case "Consumables": + return route('consumables.index'); } } @@ -1502,7 +1512,17 @@ class Helper if ($redirect_option == 'item') { switch ($table) { case "Assets": - return route('hardware.show', $id ?? $asset_id); + return route('hardware.show', $id ?? $item_id); + case "Users": + return route('users.show', $id ?? $item_id); + case "Licenses": + return route('licenses.show', $id ?? $item_id); + case "Accessories": + return route('accessories.show', $id ?? $item_id); + case "Components": + return route('components.show', $id ?? $item_id); + case "Consumables": + return route('consumables.show', $id ?? $item_id); } } diff --git a/app/Http/Controllers/Accessories/AccessoriesController.php b/app/Http/Controllers/Accessories/AccessoriesController.php index bb2e74899..722638ad8 100755 --- a/app/Http/Controllers/Accessories/AccessoriesController.php +++ b/app/Http/Controllers/Accessories/AccessoriesController.php @@ -79,10 +79,11 @@ class AccessoriesController extends Controller $accessory = $request->handleImages($accessory); + session()->put(['redirect_option' => $request->get('redirect_option')]); // Was the accessory created? if ($accessory->save()) { // Redirect to the new accessory page - return redirect()->route('accessories.index')->with('success', trans('admin/accessories/message.create.success')); + return redirect()->to(Helper::getRedirectOption($request, $accessory->id, 'Accessories'))->with('success', trans('admin/accessories/message.create.success')); } return redirect()->back()->withInput()->withErrors($accessory->getErrors()); @@ -176,9 +177,10 @@ class AccessoriesController extends Controller $accessory = $request->handleImages($accessory); - // Was the accessory updated? + session()->put(['redirect_option' => $request->get('redirect_option')]); + if ($accessory->save()) { - return redirect()->route('accessories.index')->with('success', trans('admin/accessories/message.update.success')); + return redirect()->to(Helper::getRedirectOption($request, $accessory->id, 'Accessories'))->with('success', trans('admin/accessories/message.update.success')); } } else { return redirect()->route('accessories.index')->with('error', trans('admin/accessories/message.does_not_exist')); diff --git a/app/Http/Controllers/Components/ComponentsController.php b/app/Http/Controllers/Components/ComponentsController.php index 33ebde645..57cd0a2b4 100644 --- a/app/Http/Controllers/Components/ComponentsController.php +++ b/app/Http/Controllers/Components/ComponentsController.php @@ -86,8 +86,10 @@ class ComponentsController extends Controller $component = $request->handleImages($component); + session()->put(['redirect_option' => $request->get('redirect_option')]); + if ($component->save()) { - return redirect()->route('components.index')->with('success', trans('admin/components/message.create.success')); + return redirect()->to(Helper::getRedirectOption($request, $component->id, 'Components'))->with('success', trans('admin/components/message.create.success')); } return redirect()->back()->withInput()->withErrors($component->getErrors()); @@ -160,8 +162,10 @@ class ComponentsController extends Controller $component = $request->handleImages($component); + session()->put(['redirect_option' => $request->get('redirect_option')]); + if ($component->save()) { - return redirect()->route('components.index')->with('success', trans('admin/components/message.update.success')); + return redirect()->to(Helper::getRedirectOption($request, $component->id, 'Components'))->with('success', trans('admin/components/message.update.success')); } return redirect()->back()->withInput()->withErrors($component->getErrors()); diff --git a/app/Http/Controllers/Consumables/ConsumablesController.php b/app/Http/Controllers/Consumables/ConsumablesController.php index 883d5849e..42c0766fe 100644 --- a/app/Http/Controllers/Consumables/ConsumablesController.php +++ b/app/Http/Controllers/Consumables/ConsumablesController.php @@ -87,8 +87,10 @@ class ConsumablesController extends Controller $consumable = $request->handleImages($consumable); + session()->put(['redirect_option' => $request->get('redirect_option')]); + if ($consumable->save()) { - return redirect()->route('consumables.index')->with('success', trans('admin/consumables/message.create.success')); + return redirect()->to(Helper::getRedirectOption($request, $consumable->id, 'Consumables'))->with('success', trans('admin/consumables/message.create.success')); } return redirect()->back()->withInput()->withErrors($consumable->getErrors()); @@ -160,8 +162,10 @@ class ConsumablesController extends Controller $consumable = $request->handleImages($consumable); + session()->put(['redirect_option' => $request->get('redirect_option')]); + if ($consumable->save()) { - return redirect()->route('consumables.index')->with('success', trans('admin/consumables/message.update.success')); + return redirect()->to(Helper::getRedirectOption($request, $consumable->id, 'Consumables'))->with('success', trans('admin/consumables/message.update.success')); } return redirect()->back()->withInput()->withErrors($consumable->getErrors()); diff --git a/app/Http/Controllers/Licenses/LicensesController.php b/app/Http/Controllers/Licenses/LicensesController.php index 01de4b4d4..7a51344dd 100755 --- a/app/Http/Controllers/Licenses/LicensesController.php +++ b/app/Http/Controllers/Licenses/LicensesController.php @@ -102,8 +102,10 @@ class LicensesController extends Controller $license->user_id = Auth::id(); $license->min_amt = $request->input('min_amt'); + session()->put(['redirect_option' => $request->get('redirect_option')]); + if ($license->save()) { - return redirect()->route('licenses.index')->with('success', trans('admin/licenses/message.create.success')); + return redirect()->to(Helper::getRedirectOption($request, $license->id, 'Licenses'))->with('success', trans('admin/licenses/message.create.success')); } return redirect()->back()->withInput()->withErrors($license->getErrors()); @@ -180,8 +182,10 @@ class LicensesController extends Controller $license->category_id = $request->input('category_id'); $license->min_amt = $request->input('min_amt'); + session()->put(['redirect_option' => $request->get('redirect_option')]); + if ($license->save()) { - return redirect()->route('licenses.show', ['license' => $licenseId])->with('success', trans('admin/licenses/message.update.success')); + return redirect()->to(Helper::getRedirectOption($request, $license->id, 'Licenses'))->with('success', trans('admin/licenses/message.update.success')); } // If we can't adjust the number of seats, the error is flashed to the session by the event handler in License.php return redirect()->back()->withInput()->withErrors($license->getErrors()); diff --git a/app/Http/Controllers/Users/UsersController.php b/app/Http/Controllers/Users/UsersController.php index 7cff29fe5..1e203e71d 100755 --- a/app/Http/Controllers/Users/UsersController.php +++ b/app/Http/Controllers/Users/UsersController.php @@ -133,6 +133,8 @@ class UsersController extends Controller // we have to invoke the app(ImageUploadRequest::class)->handleImages($user, 600, 'avatar', 'avatars', 'avatar'); + session()->put(['redirect_option' => $request->get('redirect_option')]); + if ($user->save()) { if ($request->filled('groups')) { $user->groups()->sync($request->input('groups')); @@ -152,7 +154,7 @@ class UsersController extends Controller $user->notify(new WelcomeNotification($data)); } - return redirect()->route('users.index')->with('success', trans('admin/users/message.success.create')); + return redirect()->to(Helper::getRedirectOption($request, $user->id, 'Users'))->with('success', trans('admin/users/message.success.create')); } return redirect()->back()->withInput()->withErrors($user->getErrors()); @@ -309,10 +311,11 @@ class UsersController extends Controller // Handle uploaded avatar app(ImageUploadRequest::class)->handleImages($user, 600, 'avatar', 'avatars', 'avatar'); + session()->put(['redirect_option' => $request->get('redirect_option')]); if ($user->save()) { // Redirect to the user page - return redirect()->route('users.index') + return redirect()->to(Helper::getRedirectOption($request, $user->id, 'Users')) ->with('success', trans('admin/users/message.success.update')); } diff --git a/resources/views/accessories/edit.blade.php b/resources/views/accessories/edit.blade.php index 068fddc26..8e0503400 100644 --- a/resources/views/accessories/edit.blade.php +++ b/resources/views/accessories/edit.blade.php @@ -4,6 +4,11 @@ 'helpPosition' => 'right', 'helpText' => trans('help.accessories'), 'formAction' => (isset($item->id)) ? route('accessories.update', ['accessory' => $item->id]) : route('accessories.store'), + 'index_route' => 'accessories.index', + 'options' => [ + 'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'accessories']), + 'item' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.accessory')]), + ] ]) {{-- Page content --}} diff --git a/resources/views/components/edit.blade.php b/resources/views/components/edit.blade.php index 5279f0399..ce77b5130 100644 --- a/resources/views/components/edit.blade.php +++ b/resources/views/components/edit.blade.php @@ -4,6 +4,11 @@ 'helpPosition' => 'right', 'helpText' => trans('help.components'), 'formAction' => (isset($item->id)) ? route('components.update', ['component' => $item->id]) : route('components.store'), + 'index_route' => 'components.index', + 'options' => [ + 'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'components']), + 'item' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.component')]), + ] ]) diff --git a/resources/views/consumables/edit.blade.php b/resources/views/consumables/edit.blade.php index f32e74b19..300a7114d 100644 --- a/resources/views/consumables/edit.blade.php +++ b/resources/views/consumables/edit.blade.php @@ -4,6 +4,11 @@ 'helpPosition' => 'right', 'helpText' => trans('help.consumables'), 'formAction' => (isset($item->id)) ? route('consumables.update', ['consumable' => $item->id]) : route('consumables.store'), + 'index_route' => 'consumables.index', + 'options' => [ + 'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'consumables']), + 'item' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.consumable')]), + ] ]) {{-- Page content --}} @section('inputFields') diff --git a/resources/views/hardware/edit.blade.php b/resources/views/hardware/edit.blade.php index 7a543e921..f31326cc4 100755 --- a/resources/views/hardware/edit.blade.php +++ b/resources/views/hardware/edit.blade.php @@ -3,10 +3,10 @@ 'createText' => trans('admin/hardware/form.create'), 'updateText' => trans('admin/hardware/form.update'), 'topSubmit' => true, - 'index_route' => 'hardware.index', 'helpText' => trans('help.assets'), 'helpPosition' => 'right', 'formAction' => ($item->id) ? route('hardware.update', ['hardware' => $item->id]) : route('hardware.store'), + 'index_route' => 'hardware.index', 'options' => [ 'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'assets']), 'item' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.asset')]), diff --git a/resources/views/licenses/edit.blade.php b/resources/views/licenses/edit.blade.php index 450e4357a..b8429a212 100755 --- a/resources/views/licenses/edit.blade.php +++ b/resources/views/licenses/edit.blade.php @@ -3,6 +3,11 @@ 'updateText' => trans('admin/licenses/form.update'), 'topSubmit' => true, 'formAction' => ($item->id) ? route('licenses.update', ['license' => $item->id]) : route('licenses.store'), + 'index_route' => 'licenses.index', + 'options' => [ + 'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'licenses']), + 'item' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.license')]), + ] ]) {{-- Page content --}} diff --git a/resources/views/users/edit.blade.php b/resources/views/users/edit.blade.php index 814c2f28e..200acb552 100755 --- a/resources/views/users/edit.blade.php +++ b/resources/views/users/edit.blade.php @@ -596,9 +596,14 @@
- + diff --git a/tests/Unit/Helpers/HelperTest.php b/tests/Unit/Helpers/HelperTest.php index 993fe138d..2fb1c58e2 100644 --- a/tests/Unit/Helpers/HelperTest.php +++ b/tests/Unit/Helpers/HelperTest.php @@ -31,7 +31,7 @@ class HelperTest extends TestCase public function testGetRedirectOptionMethod() { $test_data = [ - 'Option 2: redirect for user assigned to ' => [ + 'Option target: redirect for user assigned to ' => [ 'request' =>(object) ['assigned_user' => 22], 'id' => 1, 'checkout_to_type' => 'user', @@ -39,7 +39,7 @@ class HelperTest extends TestCase 'table' => 'Assets', 'route' => route('users.show', 22), ], - 'Option 2: redirect location assigned to ' => [ + 'Option target: redirect location assigned to ' => [ 'request' =>(object) ['assigned_location' => 10], 'id' => 2, 'checkout_to_type' => 'location', @@ -47,7 +47,7 @@ class HelperTest extends TestCase 'table' => 'Locations', 'route' => route('locations.show', 10), ], - 'Option 2: redirect back to asset assigned to ' => [ + 'Option target: redirect back to asset assigned to ' => [ 'request' =>(object) ['assigned_asset' => 101], 'id' => 3, 'checkout_to_type' => 'asset', @@ -55,7 +55,7 @@ class HelperTest extends TestCase 'table' => 'Assets', 'route' => route('hardware.show', 101), ], - 'Option 1: redirect back to asset ' => [ + 'Option item: redirect back to asset ' => [ 'request' =>(object) ['assigned_asset' => null], 'id' => 999, 'checkout_to_type' => null, @@ -63,7 +63,7 @@ class HelperTest extends TestCase 'table' => 'Assets', 'route' => route('hardware.show', 999), ], - 'Option 0: redirect back to index ' => [ + 'Option index: redirect back to asset index ' => [ 'request' =>(object) ['assigned_asset' => null], 'id' => null, 'checkout_to_type' => null, @@ -71,6 +71,95 @@ class HelperTest extends TestCase 'table' => 'Assets', 'route' => route('hardware.index'), ], + + 'Option item: redirect back to user ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => 999, + 'checkout_to_type' => null, + 'redirect_option' => 'item', + 'table' => 'Users', + 'route' => route('users.show', 999), + ], + + 'Option index: redirect back to user index ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => null, + 'checkout_to_type' => null, + 'redirect_option' => 'index', + 'table' => 'Users', + 'route' => route('users.index'), + ], + + 'Option item: redirect back to license ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => 999, + 'checkout_to_type' => null, + 'redirect_option' => 'item', + 'table' => 'Licenses', + 'route' => route('licenses.show', 999), + ], + + 'Option index: redirect back to license index ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => null, + 'checkout_to_type' => null, + 'redirect_option' => 'index', + 'table' => 'Licenses', + 'route' => route('licenses.index'), + ], + + 'Option item: redirect back to accessory list ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => 999, + 'checkout_to_type' => null, + 'redirect_option' => 'item', + 'table' => 'Accessories', + 'route' => route('accessories.show', 999), + ], + + 'Option index: redirect back to accessory index ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => null, + 'checkout_to_type' => null, + 'redirect_option' => 'index', + 'table' => 'Accessories', + 'route' => route('accessories.index'), + ], + 'Option item: redirect back to consumable ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => 999, + 'checkout_to_type' => null, + 'redirect_option' => 'item', + 'table' => 'Consumables', + 'route' => route('consumables.show', 999), + ], + + 'Option index: redirect back to consumables index ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => null, + 'checkout_to_type' => null, + 'redirect_option' => 'index', + 'table' => 'Consumables', + 'route' => route('consumables.index'), + ], + + 'Option item: redirect back to component ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => 999, + 'checkout_to_type' => null, + 'redirect_option' => 'item', + 'table' => 'Components', + 'route' => route('components.show', 999), + ], + + 'Option index: redirect back to component index ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => null, + 'checkout_to_type' => null, + 'redirect_option' => 'index', + 'table' => 'Components', + 'route' => route('components.index'), + ], ]; foreach ($test_data as $scenario => $data ) { From daf5a800810edda32d3ac56884de7611efbda262 Mon Sep 17 00:00:00 2001 From: Brady Wetherington Date: Fri, 26 Jul 2024 12:03:03 +0100 Subject: [PATCH 10/21] Use a similar loop for the minification step for CSS --- webpack.mix.js | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/webpack.mix.js b/webpack.mix.js index acbb312d4..fee66acfb 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -79,6 +79,21 @@ for (var i in skins) { ) } +var css_skins = fs.readdirSync("public/css/dist/skins"); +for (var i in css_skins) { + if (css_skins[i].endsWith(".min.css")) { + //don't minify already minified skinns + continue; + } + if (css_skins[i].endsWith(".css")) { + // only minify files ending with '.css' + mix.minify("public/css/dist/skins/" + css_skins[i]).version(); + } + //TODO - if we only ever use the minified versions, this could be simplified down to one line (above) + // but it stays like this so we have the minified and non-minified versions of the skins + // right now the code seems to use the un-minified skins +} + /** * Combine bootstrap table css */ @@ -149,27 +164,4 @@ mix ["./public/js/build/vendor.js", "./public/js/build/app.js"], "./public/js/dist/all.js" ) - .version(); - -/** - * Copy, minify and version skins - */ -mix - .minify([ - "./public/css/dist/skins/skin-green.css", - "./public/css/dist/skins/skin-green-dark.css", - "./public/css/dist/skins/skin-black.css", - "./public/css/dist/skins/skin-black-dark.css", - "./public/css/dist/skins/skin-blue.css", - "./public/css/dist/skins/skin-blue-dark.css", - "./public/css/dist/skins/skin-yellow.css", - "./public/css/dist/skins/skin-yellow-dark.css", - "./public/css/dist/skins/skin-red.css", - "./public/css/dist/skins/skin-red-dark.css", - "./public/css/dist/skins/skin-purple.css", - "./public/css/dist/skins/skin-purple-dark.css", - "./public/css/dist/skins/skin-orange.css", - "./public/css/dist/skins/skin-orange-dark.css", - "./public/css/dist/skins/skin-contrast.css", - ]) - .version(); + .version(); \ No newline at end of file From c6e709cd36cd1f5427ba24578401112ed9ffaa32 Mon Sep 17 00:00:00 2001 From: snipe Date: Fri, 26 Jul 2024 12:45:06 +0100 Subject: [PATCH 11/21] Added parameters Signed-off-by: snipe --- app/Helpers/Helper.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index 6166d6668..fcb439f81 100644 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -1530,11 +1530,11 @@ class Helper if ($redirect_option == 'target') { switch ($checkout_to_type) { case 'user': - return route('users.show', $request->assigned_user); + return route('users.show', ['user' => $request->assigned_user]); case 'location': - return route('locations.show', $request->assigned_location); + return route('locations.show', ['location' => $request->assigned_location]); case 'asset': - return route('hardware.show', $request->assigned_asset); + return route('hardware.show', ['hardware' => $request->assigned_asset]); } } return redirect()->back()->with('error', trans('admin/hardware/message.checkout.error')); From 5dea3f44956b1375cfb8d027de8e64746d1cf4a3 Mon Sep 17 00:00:00 2001 From: snipe Date: Fri, 26 Jul 2024 12:47:33 +0100 Subject: [PATCH 12/21] Added blade component to checkin/checkout pages Signed-off-by: snipe --- resources/views/accessories/checkin.blade.php | 14 +++++++++----- resources/views/accessories/checkout.blade.php | 14 ++++++++++---- resources/views/components/checkin.blade.php | 12 ++++++++---- resources/views/components/checkout.blade.php | 14 ++++++++++---- resources/views/consumables/checkout.blade.php | 12 ++++++++---- resources/views/licenses/checkin.blade.php | 12 ++++++++---- resources/views/licenses/checkout.blade.php | 13 +++++++++---- 7 files changed, 62 insertions(+), 29 deletions(-) diff --git a/resources/views/accessories/checkin.blade.php b/resources/views/accessories/checkin.blade.php index 7d1ef1326..cceb8b895 100755 --- a/resources/views/accessories/checkin.blade.php +++ b/resources/views/accessories/checkin.blade.php @@ -71,11 +71,15 @@ - + diff --git a/resources/views/accessories/checkout.blade.php b/resources/views/accessories/checkout.blade.php index 71035a87c..6c96e1bfa 100755 --- a/resources/views/accessories/checkout.blade.php +++ b/resources/views/accessories/checkout.blade.php @@ -114,10 +114,16 @@ - + diff --git a/resources/views/components/checkin.blade.php b/resources/views/components/checkin.blade.php index e195685d2..d838744ff 100644 --- a/resources/views/components/checkin.blade.php +++ b/resources/views/components/checkin.blade.php @@ -56,10 +56,14 @@ {!! $errors->first('note', '') !!} - + diff --git a/resources/views/components/checkout.blade.php b/resources/views/components/checkout.blade.php index f6befa273..39890a193 100644 --- a/resources/views/components/checkout.blade.php +++ b/resources/views/components/checkout.blade.php @@ -54,10 +54,16 @@ - + diff --git a/resources/views/consumables/checkout.blade.php b/resources/views/consumables/checkout.blade.php index 29b68b6ce..bb3023290 100644 --- a/resources/views/consumables/checkout.blade.php +++ b/resources/views/consumables/checkout.blade.php @@ -106,10 +106,14 @@ - + diff --git a/resources/views/licenses/checkin.blade.php b/resources/views/licenses/checkin.blade.php index 8eeea6f9c..5ef915954 100755 --- a/resources/views/licenses/checkin.blade.php +++ b/resources/views/licenses/checkin.blade.php @@ -56,10 +56,14 @@ {!! $errors->first('notes', '') !!} - + diff --git a/resources/views/licenses/checkout.blade.php b/resources/views/licenses/checkout.blade.php index e85c67742..bfd477309 100755 --- a/resources/views/licenses/checkout.blade.php +++ b/resources/views/licenses/checkout.blade.php @@ -105,10 +105,15 @@ @endif - + From 5d7f1f77a39ec7d5bbb502a3acaf23e96cceceb2 Mon Sep 17 00:00:00 2001 From: snipe Date: Fri, 26 Jul 2024 12:48:07 +0100 Subject: [PATCH 13/21] Added redirect to checkin/checkout controllers Signed-off-by: snipe --- .../AccessoryCheckinController.php | 5 +++- .../AccessoryCheckoutController.php | 10 +++++++- .../Components/ComponentCheckinController.php | 9 ++++--- .../ComponentCheckoutController.php | 10 ++++++-- .../ConsumableCheckoutController.php | 13 +++++++--- .../Licenses/LicenseCheckinController.php | 9 +++---- .../Licenses/LicenseCheckoutController.php | 24 ++++++++++++++----- 7 files changed, 58 insertions(+), 22 deletions(-) diff --git a/app/Http/Controllers/Accessories/AccessoryCheckinController.php b/app/Http/Controllers/Accessories/AccessoryCheckinController.php index eff635d24..7a228e50a 100644 --- a/app/Http/Controllers/Accessories/AccessoryCheckinController.php +++ b/app/Http/Controllers/Accessories/AccessoryCheckinController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Accessories; use App\Events\CheckoutableCheckedIn; +use App\Helpers\Helper; use App\Http\Controllers\Controller; use App\Models\Accessory; use App\Models\User; @@ -63,7 +64,9 @@ class AccessoryCheckinController extends Controller event(new CheckoutableCheckedIn($accessory, User::find($return_to), auth()->user(), $request->input('note'), $checkin_at)); - return redirect()->route('accessories.show', $accessory->id)->with('success', trans('admin/accessories/message.checkin.success')); + session()->put(['redirect_option' => $request->get('redirect_option')]); + + return redirect()->to(Helper::getRedirectOption($request, $accessory->id, 'Accessories'))->with('success', trans('admin/accessories/message.checkin.success')); } // Redirect to the accessory management page with error return redirect()->route('accessories.index')->with('error', trans('admin/accessories/message.checkin.error')); diff --git a/app/Http/Controllers/Accessories/AccessoryCheckoutController.php b/app/Http/Controllers/Accessories/AccessoryCheckoutController.php index 19c8c6c7c..5b10e99bc 100644 --- a/app/Http/Controllers/Accessories/AccessoryCheckoutController.php +++ b/app/Http/Controllers/Accessories/AccessoryCheckoutController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Accessories; use App\Events\CheckoutableCheckedOut; +use App\Helpers\Helper; use App\Http\Controllers\Controller; use App\Http\Requests\AccessoryCheckoutRequest; use App\Models\Accessory; @@ -78,8 +79,15 @@ class AccessoryCheckoutController extends Controller } event(new CheckoutableCheckedOut($accessory, $user, auth()->user(), $request->input('note'))); + // Set this as user since we only allow checkout to user for this item type + $request->request->add(['checkout_to_type' => 'user']); + $request->request->add(['assigned_user' => $user->id]); + + session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]); + + // Redirect to the new accessory page - return redirect()->route('accessories.index') + return redirect()->to(Helper::getRedirectOption($request, $accessory->id, 'Accessories')) ->with('success', trans('admin/accessories/message.checkout.success')); } } diff --git a/app/Http/Controllers/Components/ComponentCheckinController.php b/app/Http/Controllers/Components/ComponentCheckinController.php index b59237a5d..379882c3c 100644 --- a/app/Http/Controllers/Components/ComponentCheckinController.php +++ b/app/Http/Controllers/Components/ComponentCheckinController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Components; use App\Events\CheckoutableCheckedIn; use App\Events\ComponentCheckedIn; +use App\Helpers\Helper; use App\Http\Controllers\Controller; use App\Models\Asset; use App\Models\Component; @@ -96,12 +97,10 @@ class ComponentCheckinController extends Controller $asset = Asset::find($component_assets->asset_id); event(new CheckoutableCheckedIn($component, $asset, auth()->user(), $request->input('note'), Carbon::now())); - if ($backto == 'asset'){ - return redirect()->route('hardware.show', $asset->id)->with('success', - trans('admin/components/message.checkin.success')); - } - return redirect()->route('components.index')->with('success', + session()->put(['redirect_option' => $request->get('redirect_option')]); + + return redirect()->to(Helper::getRedirectOption($request, $component->id, 'Components'))->with('success', trans('admin/components/message.checkin.success')); } diff --git a/app/Http/Controllers/Components/ComponentCheckoutController.php b/app/Http/Controllers/Components/ComponentCheckoutController.php index fc319b47d..85d850357 100644 --- a/app/Http/Controllers/Components/ComponentCheckoutController.php +++ b/app/Http/Controllers/Components/ComponentCheckoutController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Components; use App\Events\CheckoutableCheckedOut; use App\Events\ComponentCheckedOut; +use App\Helpers\Helper; use App\Http\Controllers\Controller; use App\Models\Asset; use App\Models\Component; @@ -93,7 +94,7 @@ class ComponentCheckoutController extends Controller ->withInput(); } - // Check if the user exists + // Check if the asset exists $asset = Asset::find($request->input('asset_id')); // Update the component data @@ -109,6 +110,11 @@ class ComponentCheckoutController extends Controller event(new CheckoutableCheckedOut($component, $asset, auth()->user(), $request->input('note'))); - return redirect()->route('components.index')->with('success', trans('admin/components/message.checkout.success')); + $request->request->add(['checkout_to_type' => 'asset']); + $request->request->add(['assigned_asset' => $asset->id]); + + session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]); + + return redirect()->to(Helper::getRedirectOption($request, $component->id, 'Components'))->with('success', trans('admin/components/message.checkout.success')); } } diff --git a/app/Http/Controllers/Consumables/ConsumableCheckoutController.php b/app/Http/Controllers/Consumables/ConsumableCheckoutController.php index fd690fede..1bdb16af9 100644 --- a/app/Http/Controllers/Consumables/ConsumableCheckoutController.php +++ b/app/Http/Controllers/Consumables/ConsumableCheckoutController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Consumables; use App\Events\CheckoutableCheckedOut; +use App\Helpers\Helper; use App\Http\Controllers\Controller; use App\Models\Consumable; use App\Models\User; @@ -33,7 +34,7 @@ class ConsumableCheckoutController extends Controller // Make sure there is at least one available to checkout if ($consumable->numRemaining() <= 0){ return redirect()->route('consumables.index') - ->with('error', trans('admin/consumables/message.checkout.unavailable')); + ->with('error', trans('admin/consumables/message.checkout.unavailable', ['requested' => 1, 'remaining' => $consumable->numRemaining()])); } // Return the checkout view @@ -76,7 +77,7 @@ class ConsumableCheckoutController extends Controller // Make sure there is at least one available to checkout if ($consumable->numRemaining() <= 0 || $quantity > $consumable->numRemaining()) { - return redirect()->route('consumables.index')->with('error', trans('admin/consumables/message.checkout.unavailable')); + return redirect()->route('consumables.index')->with('error', trans('admin/consumables/message.checkout.unavailable', ['requested' => $quantity, 'remaining' => $consumable->numRemaining() ])); } $admin_user = auth()->user(); @@ -101,7 +102,13 @@ class ConsumableCheckoutController extends Controller } event(new CheckoutableCheckedOut($consumable, $user, auth()->user(), $request->input('note'))); + $request->request->add(['checkout_to_type' => 'user']); + $request->request->add(['assigned_user' => $user->id]); + + session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]); + + // Redirect to the new consumable page - return redirect()->route('consumables.index')->with('success', trans('admin/consumables/message.checkout.success')); + return redirect()->to(Helper::getRedirectOption($request, $consumable->id, 'Consumables'))->with('success', trans('admin/consumables/message.checkout.success')); } } diff --git a/app/Http/Controllers/Licenses/LicenseCheckinController.php b/app/Http/Controllers/Licenses/LicenseCheckinController.php index e863aa860..dd83d0154 100644 --- a/app/Http/Controllers/Licenses/LicenseCheckinController.php +++ b/app/Http/Controllers/Licenses/LicenseCheckinController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Licenses; use App\Events\CheckoutableCheckedIn; +use App\Helpers\Helper; use App\Http\Controllers\Controller; use App\Models\License; use App\Models\LicenseSeat; @@ -100,15 +101,15 @@ class LicenseCheckinController extends Controller $licenseSeat->asset_id = null; $licenseSeat->notes = $request->input('notes'); + session()->put(['redirect_option' => $request->get('redirect_option')]); + + // Was the asset updated? if ($licenseSeat->save()) { event(new CheckoutableCheckedIn($licenseSeat, $return_to, auth()->user(), $request->input('notes'))); - if ($backTo == 'user') { - return redirect()->route('users.show', $return_to->id)->with('success', trans('admin/licenses/message.checkin.success')); - } - return redirect()->route('licenses.show', $licenseSeat->license_id)->with('success', trans('admin/licenses/message.checkin.success')); + return redirect()->to(Helper::getRedirectOption($request, $license->id, 'Licenses'))->with('success', trans('admin/licenses/message.checkin.success')); } // Redirect to the license page with error diff --git a/app/Http/Controllers/Licenses/LicenseCheckoutController.php b/app/Http/Controllers/Licenses/LicenseCheckoutController.php index 2fb0434f6..f08d33f9d 100644 --- a/app/Http/Controllers/Licenses/LicenseCheckoutController.php +++ b/app/Http/Controllers/Licenses/LicenseCheckoutController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Licenses; use App\Events\CheckoutableCheckedOut; +use App\Helpers\Helper; use App\Http\Controllers\Controller; use App\Http\Requests\LicenseCheckoutRequest; use App\Models\Accessory; @@ -81,10 +82,23 @@ class LicenseCheckoutController extends Controller $checkoutMethod = 'checkoutTo'.ucwords(request('checkout_to_type')); - if ($this->$checkoutMethod($licenseSeat)) { - return redirect()->route('licenses.index')->with('success', trans('admin/licenses/message.checkout.success')); + + if (request('checkout_to_type')=='asset') { + $checkoutTarget = $this->checkoutToAsset($licenseSeat); + $request->request->add(['assigned_asset' => $checkoutTarget->id]); + } else { + $checkoutTarget = $this->checkoutToUser($licenseSeat); + $request->request->add(['assigned_user' => $checkoutTarget->id]); } + session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]); + + if ($checkoutTarget) { + return redirect()->to(Helper::getRedirectOption($request, $checkoutTarget->id, 'Licenses'))->with('success', trans('admin/licenses/message.checkout.success')); + } + + + return redirect()->route('licenses.index')->with('error', trans('Something went wrong handling this checkout.')); } @@ -120,8 +134,7 @@ class LicenseCheckoutController extends Controller } if ($licenseSeat->save()) { event(new CheckoutableCheckedOut($licenseSeat, $target, auth()->user(), request('notes'))); - - return true; + return $target; } return false; @@ -137,8 +150,7 @@ class LicenseCheckoutController extends Controller if ($licenseSeat->save()) { event(new CheckoutableCheckedOut($licenseSeat, $target, auth()->user(), request('notes'))); - - return true; + return $target; } return false; From fc8bb82a0295341ea273753f8812b080fd89b379 Mon Sep 17 00:00:00 2001 From: snipe Date: Fri, 26 Jul 2024 12:48:18 +0100 Subject: [PATCH 14/21] Made dropdown wider Signed-off-by: snipe --- resources/views/blade/redirect_submit_options.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/blade/redirect_submit_options.blade.php b/resources/views/blade/redirect_submit_options.blade.php index f22d55d89..a6b0c7fc8 100644 --- a/resources/views/blade/redirect_submit_options.blade.php +++ b/resources/views/blade/redirect_submit_options.blade.php @@ -17,7 +17,7 @@
@if (($options) && (count($options) > 0)) - @foreach ($options as $key => $value)