From 552f90ae2c32270c60d6b38628f2d20b63386acd Mon Sep 17 00:00:00 2001 From: akemidx Date: Thu, 1 Aug 2024 16:06:47 -0400 Subject: [PATCH 1/9] required, but not optional --- resources/views/hardware/checkin.blade.php | 2 +- resources/views/hardware/checkout.blade.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/hardware/checkin.blade.php b/resources/views/hardware/checkin.blade.php index 1efd39427..e3f65bd7f 100755 --- a/resources/views/hardware/checkin.blade.php +++ b/resources/views/hardware/checkin.blade.php @@ -119,7 +119,7 @@ {{ trans('general.notes') }}
- {!! $errors->first('note', '') !!}
diff --git a/resources/views/hardware/checkout.blade.php b/resources/views/hardware/checkout.blade.php index f91e06036..89d6f06e6 100755 --- a/resources/views/hardware/checkout.blade.php +++ b/resources/views/hardware/checkout.blade.php @@ -141,7 +141,7 @@ {{ trans('general.notes') }}
- {!! $errors->first('note', '') !!}
From 3ff1745f560ff71cc43fd01fd67410acd57d4b97 Mon Sep 17 00:00:00 2001 From: akemidx Date: Thu, 1 Aug 2024 16:44:02 -0400 Subject: [PATCH 2/9] setting created --- app/Http/Controllers/SettingsController.php | 2 ++ ...8_01_201721_add_required_notes_setting.php | 30 +++++++++++++++++++ .../lang/en-US/admin/settings/general.php | 2 ++ resources/views/settings/general.blade.php | 17 +++++++++++ 4 files changed, 51 insertions(+) create mode 100644 database/migrations/2024_08_01_201721_add_required_notes_setting.php diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 9c7392560..f0903f412 100755 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -342,6 +342,8 @@ class SettingsController extends Controller $setting->depreciation_method = $request->input('depreciation_method'); $setting->dash_chart_type = $request->input('dash_chart_type'); $setting->profile_edit = $request->input('profile_edit', 0); + $setting->require_checkinout_notes = $request->input('require_checkinout_notes', 0); + if ($request->input('per_page') != '') { $setting->per_page = $request->input('per_page'); diff --git a/database/migrations/2024_08_01_201721_add_required_notes_setting.php b/database/migrations/2024_08_01_201721_add_required_notes_setting.php new file mode 100644 index 000000000..d4934ed7f --- /dev/null +++ b/database/migrations/2024_08_01_201721_add_required_notes_setting.php @@ -0,0 +1,30 @@ +boolean('require_checkinout_notes')->nullable()->default(1); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('settings', function (Blueprint $table) { + if (Schema::hasColumn('settings', 'require_checkinout_notes')) { + $table->dropColumn('require_checkinout_notes'); + } + }); + } +}; diff --git a/resources/lang/en-US/admin/settings/general.php b/resources/lang/en-US/admin/settings/general.php index 9ba69ef22..abbf26320 100644 --- a/resources/lang/en-US/admin/settings/general.php +++ b/resources/lang/en-US/admin/settings/general.php @@ -276,6 +276,8 @@ return [ 'two_factor_enrollment_text' => "Two factor authentication is required, however your device has not been enrolled yet. Open your Google Authenticator app and scan the QR code below to enroll your device. Once you've enrolled your device, enter the code below", 'require_accept_signature' => 'Require Signature', 'require_accept_signature_help_text' => 'Enabling this feature will require users to physically sign off on accepting an asset.', + 'require_checkinout_notes' => 'Require Notes on Checkin/Checkout', + 'require_checkinout_notes_help_text' => 'Enabling this feature will require the note fields to be populated when checking in or checking out an asset.', 'left' => 'left', 'right' => 'right', 'top' => 'top', diff --git a/resources/views/settings/general.blade.php b/resources/views/settings/general.blade.php index 91d3b1c56..477d8e68a 100644 --- a/resources/views/settings/general.blade.php +++ b/resources/views/settings/general.blade.php @@ -200,6 +200,23 @@ + +
+
+ +
+
+ +

{{ trans('admin/settings/general.require_checkinout_notes_help_text') }}

+
+
+ +
From 0f0baa207dabd252a49eca496a2f8a9af14658d6 Mon Sep 17 00:00:00 2001 From: akemidx Date: Thu, 1 Aug 2024 17:02:35 -0400 Subject: [PATCH 3/9] note field optional --- resources/views/hardware/checkin.blade.php | 30 +++++++++++++-------- resources/views/hardware/checkout.blade.php | 8 ++++++ 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/resources/views/hardware/checkin.blade.php b/resources/views/hardware/checkin.blade.php index e3f65bd7f..a313b65a3 100755 --- a/resources/views/hardware/checkin.blade.php +++ b/resources/views/hardware/checkin.blade.php @@ -113,17 +113,25 @@
- -
- -
- - {!! $errors->first('note', '') !!} -
-
+ +
+ + @if($snipeSettings->require_checkinout_notes=="1") +
+ + {!! $errors->first('note', '') !!} +
+ @else +
+ + {!! $errors->first('note', '') !!} +
+ @endif +
diff --git a/resources/views/hardware/checkout.blade.php b/resources/views/hardware/checkout.blade.php index 89d6f06e6..79e9e409e 100755 --- a/resources/views/hardware/checkout.blade.php +++ b/resources/views/hardware/checkout.blade.php @@ -140,11 +140,19 @@ + @if($snipeSettings->require_checkinout_notes=="1")
{!! $errors->first('note', '') !!}
+ @else +
+ + {!! $errors->first('note', '') !!} +
+ @endif @if ($asset->requireAcceptance() || $asset->getEula() || ($snipeSettings->webhook_endpoint!='')) From 27c120a55ee4f4824d9d5aa985d13ab0d6deafa6 Mon Sep 17 00:00:00 2001 From: akemidx Date: Tue, 20 Aug 2024 19:07:47 -0400 Subject: [PATCH 4/9] front end changes/updates from gh --- .../migrations/2024_08_01_201721_add_required_notes_setting.php | 2 +- resources/views/hardware/checkin.blade.php | 2 +- resources/views/hardware/checkout.blade.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/database/migrations/2024_08_01_201721_add_required_notes_setting.php b/database/migrations/2024_08_01_201721_add_required_notes_setting.php index d4934ed7f..38fdd38c1 100644 --- a/database/migrations/2024_08_01_201721_add_required_notes_setting.php +++ b/database/migrations/2024_08_01_201721_add_required_notes_setting.php @@ -12,7 +12,7 @@ return new class extends Migration public function up(): void { Schema::table('settings', function (Blueprint $table) { - $table->boolean('require_checkinout_notes')->nullable()->default(1); + $table->boolean('require_checkinout_notes')->nullable()->default(0); }); } diff --git a/resources/views/hardware/checkin.blade.php b/resources/views/hardware/checkin.blade.php index 6b4a00d28..496e899ad 100755 --- a/resources/views/hardware/checkin.blade.php +++ b/resources/views/hardware/checkin.blade.php @@ -119,7 +119,7 @@ {{ trans('general.notes') }} @if($snipeSettings->require_checkinout_notes=="1") -
+
{!! $errors->first('note', '') !!} diff --git a/resources/views/hardware/checkout.blade.php b/resources/views/hardware/checkout.blade.php index 108101907..ab8b7b31f 100755 --- a/resources/views/hardware/checkout.blade.php +++ b/resources/views/hardware/checkout.blade.php @@ -141,7 +141,7 @@ {{ trans('general.notes') }} @if($snipeSettings->require_checkinout_notes=="1") -
+
{!! $errors->first('note', '') !!} From 2901ecbf4376009f371449bac03da5292a773f03 Mon Sep 17 00:00:00 2001 From: akemidx Date: Tue, 3 Sep 2024 15:02:27 -0400 Subject: [PATCH 5/9] more test work --- app/Http/Requests/AssetCheckinRequest.php | 4 ++-- app/Http/Requests/AssetCheckoutRequest.php | 1 + resources/views/hardware/checkin.blade.php | 7 ------- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/app/Http/Requests/AssetCheckinRequest.php b/app/Http/Requests/AssetCheckinRequest.php index 116b8b39f..dec4b0912 100644 --- a/app/Http/Requests/AssetCheckinRequest.php +++ b/app/Http/Requests/AssetCheckinRequest.php @@ -21,9 +21,9 @@ class AssetCheckinRequest extends Request */ public function rules() { - return [ + 'note' => 'required|in:asset,', - ]; + return $rules; } public function response(array $errors) diff --git a/app/Http/Requests/AssetCheckoutRequest.php b/app/Http/Requests/AssetCheckoutRequest.php index f48a7d5e5..0f42076c9 100644 --- a/app/Http/Requests/AssetCheckoutRequest.php +++ b/app/Http/Requests/AssetCheckoutRequest.php @@ -27,6 +27,7 @@ class AssetCheckoutRequest extends Request 'assigned_location' => 'required_without_all:assigned_user,assigned_asset', 'status_id' => 'exists:status_labels,id,deployable,1', 'checkout_to_type' => 'required|in:asset,location,user', + 'note' => 'required|in:asset,', 'checkout_at' => [ 'nullable', 'date', diff --git a/resources/views/hardware/checkin.blade.php b/resources/views/hardware/checkin.blade.php index 496e899ad..12c678e64 100755 --- a/resources/views/hardware/checkin.blade.php +++ b/resources/views/hardware/checkin.blade.php @@ -124,13 +124,6 @@ name="note">{{ old('note', $asset->note) }} {!! $errors->first('note', '') !!}
- @else -
- - {!! $errors->first('note', '') !!} -
- @endif
From 77c5035cac4887f5491eb7e469c8ffa83dad61f7 Mon Sep 17 00:00:00 2001 From: akemidx Date: Wed, 4 Sep 2024 17:50:52 -0400 Subject: [PATCH 6/9] fixing some formatting --- app/Http/Requests/AssetCheckinRequest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Requests/AssetCheckinRequest.php b/app/Http/Requests/AssetCheckinRequest.php index dec4b0912..436a2a9d5 100644 --- a/app/Http/Requests/AssetCheckinRequest.php +++ b/app/Http/Requests/AssetCheckinRequest.php @@ -21,7 +21,7 @@ class AssetCheckinRequest extends Request */ public function rules() { - 'note' => 'required|in:asset,', + 'note' => 'required|in:asset,', return $rules; } From bebb72a04f36805cf8f7e2090f505e384a396281 Mon Sep 17 00:00:00 2001 From: akemidx Date: Wed, 4 Sep 2024 17:53:19 -0400 Subject: [PATCH 7/9] back to having tests pass. needed to comment out the notes rules() i added --- app/Http/Requests/AssetCheckinRequest.php | 12 ++++++------ app/Http/Requests/AssetCheckoutRequest.php | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/Http/Requests/AssetCheckinRequest.php b/app/Http/Requests/AssetCheckinRequest.php index 436a2a9d5..3bee83a81 100644 --- a/app/Http/Requests/AssetCheckinRequest.php +++ b/app/Http/Requests/AssetCheckinRequest.php @@ -19,12 +19,12 @@ class AssetCheckinRequest extends Request * * @return array */ - public function rules() - { - 'note' => 'required|in:asset,', - - return $rules; - } +// public function rules() +// { +// 'note' => 'required|in:asset,', +// +// return $rules; +// } public function response(array $errors) { diff --git a/app/Http/Requests/AssetCheckoutRequest.php b/app/Http/Requests/AssetCheckoutRequest.php index 0f42076c9..9064e6dcd 100644 --- a/app/Http/Requests/AssetCheckoutRequest.php +++ b/app/Http/Requests/AssetCheckoutRequest.php @@ -27,7 +27,7 @@ class AssetCheckoutRequest extends Request 'assigned_location' => 'required_without_all:assigned_user,assigned_asset', 'status_id' => 'exists:status_labels,id,deployable,1', 'checkout_to_type' => 'required|in:asset,location,user', - 'note' => 'required|in:asset,', +// 'note' => 'required|in:asset,', 'checkout_at' => [ 'nullable', 'date', From d262638a63af82d5f1f5cde4d4c342edf85be58b Mon Sep 17 00:00:00 2001 From: akemidx Date: Wed, 4 Sep 2024 18:23:36 -0400 Subject: [PATCH 8/9] backend form validation. +cleanup --- .../Controllers/Assets/AssetCheckinController.php | 6 ++++++ .../Controllers/Assets/AssetCheckoutController.php | 4 ++++ app/Http/Requests/AssetCheckinRequest.php | 12 ------------ app/Http/Requests/AssetCheckoutRequest.php | 1 - resources/lang/en-US/admin/hardware/message.php | 2 ++ resources/views/hardware/checkin.blade.php | 1 + 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/Http/Controllers/Assets/AssetCheckinController.php b/app/Http/Controllers/Assets/AssetCheckinController.php index f84a468a6..2c49f78bf 100644 --- a/app/Http/Controllers/Assets/AssetCheckinController.php +++ b/app/Http/Controllers/Assets/AssetCheckinController.php @@ -116,6 +116,12 @@ class AssetCheckinController extends Controller $seat->update(['assigned_to' => null]); }); + $settings = \App\Models\Setting::getSettings(); + + if($settings->require_checkinout_notes=="1" && (is_null($request->note))) { + return redirect()->to("hardware/$assetId/checkin")->with('error', trans('admin/hardware/message.update.no_note')); + } + // Get all pending Acceptances for this asset and delete them $acceptances = CheckoutAcceptance::pending()->whereHasMorph('checkoutable', [Asset::class], diff --git a/app/Http/Controllers/Assets/AssetCheckoutController.php b/app/Http/Controllers/Assets/AssetCheckoutController.php index 05b766916..506f47680 100644 --- a/app/Http/Controllers/Assets/AssetCheckoutController.php +++ b/app/Http/Controllers/Assets/AssetCheckoutController.php @@ -102,6 +102,10 @@ class AssetCheckoutController extends Controller $settings = \App\Models\Setting::getSettings(); + if($settings->require_checkinout_notes=="1" && (is_null($request->note))) { + return redirect()->to("hardware/$assetId/checkout")->with('error', trans('admin/hardware/message.update.no_note'); //needs translation + } + // We have to check whether $target->company_id is null here since locations don't have a company yet if (($settings->full_multiple_companies_support) && ((!is_null($target->company_id)) && (!is_null($asset->company_id)))) { if ($target->company_id != $asset->company_id){ diff --git a/app/Http/Requests/AssetCheckinRequest.php b/app/Http/Requests/AssetCheckinRequest.php index 3bee83a81..ea2847189 100644 --- a/app/Http/Requests/AssetCheckinRequest.php +++ b/app/Http/Requests/AssetCheckinRequest.php @@ -14,18 +14,6 @@ class AssetCheckinRequest extends Request return true; } - /** - * Get the validation rules that apply to the request. - * - * @return array - */ -// public function rules() -// { -// 'note' => 'required|in:asset,', -// -// return $rules; -// } - public function response(array $errors) { return $this->redirector->back()->withInput()->withErrors($errors, $this->errorBag); diff --git a/app/Http/Requests/AssetCheckoutRequest.php b/app/Http/Requests/AssetCheckoutRequest.php index 9064e6dcd..f48a7d5e5 100644 --- a/app/Http/Requests/AssetCheckoutRequest.php +++ b/app/Http/Requests/AssetCheckoutRequest.php @@ -27,7 +27,6 @@ class AssetCheckoutRequest extends Request 'assigned_location' => 'required_without_all:assigned_user,assigned_asset', 'status_id' => 'exists:status_labels,id,deployable,1', 'checkout_to_type' => 'required|in:asset,location,user', -// 'note' => 'required|in:asset,', 'checkout_at' => [ 'nullable', 'date', diff --git a/resources/lang/en-US/admin/hardware/message.php b/resources/lang/en-US/admin/hardware/message.php index d06bf4a0e..c9ea79023 100644 --- a/resources/lang/en-US/admin/hardware/message.php +++ b/resources/lang/en-US/admin/hardware/message.php @@ -23,6 +23,7 @@ return [ 'nothing_updated' => 'No fields were selected, so nothing was updated.', 'no_assets_selected' => 'No assets were selected, so nothing was updated.', 'assets_do_not_exist_or_are_invalid' => 'Selected assets cannot be updated.', + 'no_note' => 'Note field is empty', ], 'restore' => [ @@ -76,6 +77,7 @@ return [ 'user_does_not_exist' => 'That user is invalid. Please try again.', 'not_available' => 'That asset is not available for checkout!', 'no_assets_selected' => 'You must select at least one asset from the list', + ], 'checkin' => [ diff --git a/resources/views/hardware/checkin.blade.php b/resources/views/hardware/checkin.blade.php index 12c678e64..c015b2563 100755 --- a/resources/views/hardware/checkin.blade.php +++ b/resources/views/hardware/checkin.blade.php @@ -124,6 +124,7 @@ name="note">{{ old('note', $asset->note) }} {!! $errors->first('note', '') !!} + @endif From 73a059c9ac528a0c604077cc1968e88b645160ad Mon Sep 17 00:00:00 2001 From: akemidx Date: Tue, 1 Oct 2024 16:37:30 -0400 Subject: [PATCH 9/9] missing closing ) --- app/Http/Controllers/Assets/AssetCheckoutController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Assets/AssetCheckoutController.php b/app/Http/Controllers/Assets/AssetCheckoutController.php index 506f47680..9e7a17a94 100644 --- a/app/Http/Controllers/Assets/AssetCheckoutController.php +++ b/app/Http/Controllers/Assets/AssetCheckoutController.php @@ -103,7 +103,7 @@ class AssetCheckoutController extends Controller $settings = \App\Models\Setting::getSettings(); if($settings->require_checkinout_notes=="1" && (is_null($request->note))) { - return redirect()->to("hardware/$assetId/checkout")->with('error', trans('admin/hardware/message.update.no_note'); //needs translation + return redirect()->to("hardware/$assetId/checkout")->with('error', trans('admin/hardware/message.update.no_note')); } // We have to check whether $target->company_id is null here since locations don't have a company yet