From abb422153903939d2e3b1bc103d27eb30a52fe9e Mon Sep 17 00:00:00 2001 From: snipe Date: Thu, 29 Aug 2024 14:55:18 +0100 Subject: [PATCH 1/6] Validation rules to prevent switchng user companies if assets are assigned Signed-off-by: snipe --- app/Http/Requests/SaveUserRequest.php | 12 ++++------ ...erCannotSwitchCompaniesIfItemsAssigned.php | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+), 8 deletions(-) create mode 100644 app/Rules/UserCannotSwitchCompaniesIfItemsAssigned.php diff --git a/app/Http/Requests/SaveUserRequest.php b/app/Http/Requests/SaveUserRequest.php index f778d016df..5a47362cfc 100644 --- a/app/Http/Requests/SaveUserRequest.php +++ b/app/Http/Requests/SaveUserRequest.php @@ -6,6 +6,7 @@ use App\Models\Setting; use Illuminate\Contracts\Validation\Validator; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Http\Exceptions\HttpResponseException; +use App\Rules\UserCannotSwitchCompaniesIfItemsAssigned; class SaveUserRequest extends FormRequest { @@ -34,14 +35,7 @@ class SaveUserRequest extends FormRequest $rules = [ 'department_id' => 'nullable|exists:departments,id', 'manager_id' => 'nullable|exists:users,id', - 'company_id' => [ - // determines if the user is being moved between companies and checks to see if they have any items assigned - function ($attribute, $value, $fail) { - if (($this->has('company_id')) && ($this->user?->allAssignedCount() > 0) && (Setting::getSettings()->full_multiple_companies_support)) { - $fail(trans('admin/users/message.error.multi_company_items_assigned')); - } - } - ] + 'company_id' => ['nullable','exists:companies,id'] ]; switch ($this->method()) { @@ -60,11 +54,13 @@ class SaveUserRequest extends FormRequest $rules['first_name'] = 'required|string|min:1'; $rules['username'] = 'required_unless:ldap_import,1|string|min:1'; $rules['password'] = Setting::passwordComplexityRulesSaving('update').'|confirmed'; + $rules['company_id'] = [new UserCannotSwitchCompaniesIfItemsAssigned()]; break; // Save only what's passed case 'PATCH': $rules['password'] = Setting::passwordComplexityRulesSaving('update'); + $rules['company_id'] = [new UserCannotSwitchCompaniesIfItemsAssigned()]; break; default: diff --git a/app/Rules/UserCannotSwitchCompaniesIfItemsAssigned.php b/app/Rules/UserCannotSwitchCompaniesIfItemsAssigned.php new file mode 100644 index 0000000000..c3dd58f424 --- /dev/null +++ b/app/Rules/UserCannotSwitchCompaniesIfItemsAssigned.php @@ -0,0 +1,23 @@ +route('user')->id); + if (($value) && ($user->allAssignedCount() > 0) && (Setting::getSettings()->full_multiple_companies_support)) { + $fail(trans('admin/users/message.error.multi_company_items_assigned')); + } + } +} From 69e981364aee151aa1b448082971099859b38f5a Mon Sep 17 00:00:00 2001 From: snipe Date: Thu, 29 Aug 2024 17:51:20 +0100 Subject: [PATCH 2/6] Made multiple select Signed-off-by: snipe --- resources/views/reports/custom.blade.php | 63 ++++++++++++++++++++---- 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/resources/views/reports/custom.blade.php b/resources/views/reports/custom.blade.php index 7a33b2c0a2..de673377f8 100644 --- a/resources/views/reports/custom.blade.php +++ b/resources/views/reports/custom.blade.php @@ -278,15 +278,60 @@
- @include ('partials.forms.edit.company-select', ['translated_name' => trans('general.company'),'multiple' => 'true', 'fieldname' => 'by_company_id[]', 'hide_new' => 'true']) - @include ('partials.forms.edit.location-select', ['translated_name' => trans('general.location'), 'multiple' => 'true', 'fieldname' => 'by_location_id[]', 'hide_new' => 'true']) - @include ('partials.forms.edit.location-select', ['translated_name' => trans('admin/hardware/form.default_location'), 'multiple' => 'true', 'fieldname' => 'by_rtd_location_id[]', 'hide_new' => 'true']) - @include ('partials.forms.edit.department-select', ['translated_name' => trans('general.department'), 'fieldname' => 'by_dept_id', 'hide_new' => 'true']) - @include ('partials.forms.edit.supplier-select', ['translated_name' => trans('general.supplier'), 'fieldname' => 'by_supplier_id[]', 'multiple' => 'true', 'hide_new' => 'true']) - @include ('partials.forms.edit.model-select', ['translated_name' => trans('general.asset_model'), 'fieldname' => 'by_model_id[]', 'multiple' => 'true', 'hide_new' => 'true']) - @include ('partials.forms.edit.manufacturer-select', ['translated_name' => trans('general.manufacturer'), 'fieldname' => 'by_manufacturer_id', 'hide_new' => 'true']) - @include ('partials.forms.edit.category-select', ['translated_name' => trans('general.category'), 'fieldname' => 'by_category_id', 'hide_new' => 'true', 'category_type' => 'asset']) - @include ('partials.forms.edit.status-select', ['translated_name' => trans('admin/hardware/form.status'), 'fieldname' => 'by_status_id[]', 'multiple' => 'true', 'hide_new' => 'true']) + @include ('partials.forms.edit.company-select', [ + 'translated_name' => trans('general.company'), + 'fieldname' => + 'by_company_id[]', + 'multiple' => 'true', + 'hide_new' => 'true' + ]) + @include ('partials.forms.edit.location-select', [ + 'translated_name' => trans('general.location'), + 'fieldname' => 'by_location_id[]', + 'multiple' => 'true', + 'hide_new' => 'true' + ]) + @include ('partials.forms.edit.location-select', [ + 'translated_name' => trans('admin/hardware/form.default_location'), + 'fieldname' => 'by_rtd_location_id[]', + 'multiple' => 'true', + 'hide_new' => 'true' + ]) + @include ('partials.forms.edit.department-select',[ + 'translated_name' => trans('general.department'), + 'fieldname' => 'by_dept_id[]', + 'multiple' => 'true', + 'hide_new' => 'true' + ]) + @include ('partials.forms.edit.supplier-select', [ + 'translated_name' => trans('general.supplier'), + 'fieldname' => 'by_supplier_id[]', + 'multiple' => 'true', + 'hide_new' => 'true' + ]) + @include ('partials.forms.edit.model-select', [ + 'translated_name' => trans('general.asset_model'), + 'fieldname' => 'by_model_id[]', + 'multiple' => 'true', + 'hide_new' => 'true' + ]) + @include ('partials.forms.edit.manufacturer-select', [ + 'translated_name' => trans('general.manufacturer'), + 'fieldname' => 'by_manufacturer_id[]', + 'multiple' => 'true', + 'hide_new' => 'true' + ]) + @include ('partials.forms.edit.category-select', [ + 'translated_name' => trans('general.category'), + 'fieldname' => 'by_category_id[]', + 'multiple' => 'true', + 'hide_new' => 'true', 'category_type' => 'asset' + ]) + @include ('partials.forms.edit.status-select', [ + 'translated_name' => trans('admin/hardware/form.status'), + 'fieldname' => 'by_status_id[]', + 'multiple' => 'true', + 'hide_new' => 'true'])
From e62a8029266ed6ca5625d9ee8d1c1616bea5e3c2 Mon Sep 17 00:00:00 2001 From: snipe Date: Thu, 29 Aug 2024 17:51:44 +0100 Subject: [PATCH 3/6] Use whereIn instead of where = Signed-off-by: snipe --- app/Models/Asset.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Models/Asset.php b/app/Models/Asset.php index 98d7275b15..f1150f9a2d 100644 --- a/app/Models/Asset.php +++ b/app/Models/Asset.php @@ -1561,7 +1561,7 @@ class Asset extends Depreciable $leftJoin->on('assets_dept_users.id', '=', 'assets.assigned_to') ->where('assets.assigned_type', '=', User::class); })->where(function ($query) use ($search) { - $query->where('assets_dept_users.department_id', '=', $search); + $query->whereIn('assets_dept_users.department_id', $search); })->withTrashed()->whereNull('assets.deleted_at'); //workaround for laravel bug } @@ -1811,7 +1811,7 @@ class Asset extends Depreciable public function scopeInCategory($query, $category_id) { return $query->join('models as category_models', 'assets.model_id', '=', 'category_models.id') - ->join('categories', 'category_models.category_id', '=', 'categories.id')->where('category_models.category_id', '=', $category_id); + ->join('categories', 'category_models.category_id', '=', 'categories.id')->whereIn('category_models.category_id', $category_id); } /** @@ -1825,7 +1825,7 @@ class Asset extends Depreciable public function scopeByManufacturer($query, $manufacturer_id) { return $query->join('models', 'assets.model_id', '=', 'models.id') - ->join('manufacturers', 'models.manufacturer_id', '=', 'manufacturers.id')->where('models.manufacturer_id', '=', $manufacturer_id); + ->join('manufacturers', 'models.manufacturer_id', '=', 'manufacturers.id')->whereIn('models.manufacturer_id', $manufacturer_id); } From 37d04b717683d15a91d6ee2801df89cb7cecd038 Mon Sep 17 00:00:00 2001 From: snipe Date: Thu, 29 Aug 2024 17:52:01 +0100 Subject: [PATCH 4/6] Some CSS tweaks for select2 Signed-off-by: snipe --- public/css/build/app.css | Bin 27637 -> 28020 bytes public/css/build/overrides.css | Bin 20787 -> 21170 bytes public/css/dist/all.css | Bin 514208 -> 514974 bytes public/mix-manifest.json | 6 +++--- resources/assets/less/overrides.less | 20 +++++++++++++++++--- 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/public/css/build/app.css b/public/css/build/app.css index 66a22ebf9bc31ec27c7dee3767d9d64ed86240b9..d9f77a0b5a4851431674e077ac80e0a479d09932 100644 GIT binary patch delta 393 zcmZ{e!Ait16h#@Abt5_-@Z2{=6gL^H2!cN$l$gG@VbY|$q|P{l41Pntz&{ZD7{Q%O z_qw+!s0icRUGBZ--OrcF$Lr)N%lGUpQl;&J-Ek1Tw}I!E;r(oPBS<#jP^0w6%wd#_ zDWjD^SSJ7ts=DzUPENZe9ICdn}DrIT98Ii&H2wAvDf!TM7rbiMYjC~Ox2unvzG2iL5%E7m)tVQoZnFxFt)Gu~E* zE%0Wp{Px<2@VQPd?^GcEPOg2iF|7NuKj)aGuY0&xp^Yr{J F{Q|JFiU9xs delta 40 wcmexzi}CAq#tnLQJQ=B(=@}(f3dSY{6_X#>NlXs2)7iX6qJ?pDqvL070AKD9k^lez diff --git a/public/css/build/overrides.css b/public/css/build/overrides.css index 75265025237a20fa74ea52e58c1a3002d5af51bd..c927401a43d2f6bc131350febd35b5908d982b66 100644 GIT binary patch delta 411 zcmZ{fK}y6x5Jj17Rvw`wqMPYK6gNFv!Mzsa)2VK{J5E$2hX{B8!M!*euj5VZ z1QZ9x+I`-y`oDIsi;uU(yUCC2J^ISnt$2{2x@gBfzaCZr4VLjj1XR9kU|$MBY={w_ zGJpoDZlZ+CE7!v@wa)seIIa^)XH_Bwt68?n*TfRe*V%LSCt*q=%SGXlHG0%AFrp5n zp>i{4l-5`;A)&ohkD)U$6oqxuf!XSm*2J}hRA=fSTKg!vfIhu41xaAbIFWe{5^=W0 zyA8#|d%thEe*Dabn`O2lc3l)&Mf8emgjvgqe2AiK$moAPM*UdEm;7{hd-ApX1~S-= AYybcN delta 43 zcmdnAlyUPS#tk{jJQ=B(=@}(f3dSY{6_e#uBqmQ$)|vcLrFwFcwe;qTstF7M2#)7Pc+y*F>jpa$*skK6Mql;B|)b<+}OEg^HNh&ij#9Pld}~-`jhi>@{6n#ic(XoxoWwl3udy* zPQQDZm6OqQ`kTwFq0=?J*}0huDy*jmeqgI()S13JfK3@lc?PnnPtQNi$Uga>H^+4G X)$Bss_pfGusIz^pGrLXt(DnlWIQfb{ delta 115 zcmbQYU4Fqv`Gyw87N!>F7M2#)7Pc+y*F>kk31sJ({^u||=X8-Z?1IzhH?s3i?_R^M gIQ{Bc_Ui5DKd^B!PTR!Jwq0M6U2`%is^4k@0RK5F_5c6? diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 3bffe3f7c4..c1c7e00a64 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -2,8 +2,8 @@ "/js/build/app.js": "/js/build/app.js?id=5e9ac5c1a7e089f056fb1dba566193a6", "/css/dist/skins/skin-black-dark.css": "/css/dist/skins/skin-black-dark.css?id=f0b08873a06bb54daeee176a9459f4a9", "/css/dist/skins/_all-skins.css": "/css/dist/skins/_all-skins.css?id=f4397c717b99fce41a633ca6edd5d1f4", - "/css/build/overrides.css": "/css/build/overrides.css?id=9265dbc8adc38d13abec7f8ff0374dce", - "/css/build/app.css": "/css/build/app.css?id=76584ef562c22532ffa84748f18e3a65", + "/css/build/overrides.css": "/css/build/overrides.css?id=ebd921b0b5dca37487551bcc7dc934c5", + "/css/build/app.css": "/css/build/app.css?id=2b1b6164d02342fcd4cd303fef52e895", "/css/build/AdminLTE.css": "/css/build/AdminLTE.css?id=4ea0068716c1bb2434d87a16d51b98c9", "/css/dist/skins/skin-yellow.css": "/css/dist/skins/skin-yellow.css?id=7b315b9612b8fde8f9c5b0ddb6bba690", "/css/dist/skins/skin-yellow-dark.css": "/css/dist/skins/skin-yellow-dark.css?id=393aaa7b368b0670fc42434c8cca7dc7", @@ -19,7 +19,7 @@ "/css/dist/skins/skin-blue.css": "/css/dist/skins/skin-blue.css?id=f677207c6cf9678eb539abecb408c374", "/css/dist/skins/skin-blue-dark.css": "/css/dist/skins/skin-blue-dark.css?id=0640e45bad692dcf62873c6e85904899", "/css/dist/skins/skin-black.css": "/css/dist/skins/skin-black.css?id=76482123f6c70e866d6b971ba91de7bb", - "/css/dist/all.css": "/css/dist/all.css?id=0978d9f0ba8d47527c248074b757b03d", + "/css/dist/all.css": "/css/dist/all.css?id=c1cd73524bd82ddb8a4d7e8d1a504506", "/css/dist/signature-pad.css": "/css/dist/signature-pad.css?id=6a89d3cd901305e66ced1cf5f13147f7", "/css/dist/signature-pad.min.css": "/css/dist/signature-pad.min.css?id=6a89d3cd901305e66ced1cf5f13147f7", "/js/select2/i18n/af.js": "/js/select2/i18n/af.js?id=4f6fcd73488ce79fae1b7a90aceaecde", diff --git a/resources/assets/less/overrides.less b/resources/assets/less/overrides.less index 096d67f75c..f3261a19b7 100644 --- a/resources/assets/less/overrides.less +++ b/resources/assets/less/overrides.less @@ -500,13 +500,27 @@ body { .select2-selection--multiple { border-color: #d2d6de !important; - height: 34px; + overflow-y: auto; } .select2-selection__choice { border-radius: 0px !important; } +.select2-search select2-search--inline { + height: 35px !important; + float: left; + margin: 0; +} + + + +.select2-results__option { + padding: 5px; + user-select: none; + -webkit-user-select: none; + margin: 0px; +} img.navbar-brand-img, .navbar-brand>img { float: left; @@ -514,8 +528,8 @@ img.navbar-brand-img, .navbar-brand>img { max-height: 50px; } -.input-daterange { - border-radius: 0px; +.input-daterange, .input-daterange input:first-child, .input-daterange input:last-child { + border-radius: 0px !important; } .btn.bg-maroon, .btn.bg-purple{ From 231bc1e2de18568b760da1fcd6391e57ebfaabd1 Mon Sep 17 00:00:00 2001 From: snipe Date: Thu, 29 Aug 2024 18:31:34 +0100 Subject: [PATCH 5/6] Updated blade selectors Signed-off-by: snipe --- resources/lang/en-US/localizations.php | 4 ++-- resources/macros/macros.php | 2 +- .../views/partials/forms/edit/category-select.blade.php | 2 -- .../views/partials/forms/edit/company-select.blade.php | 6 +++--- .../views/partials/forms/edit/department-select.blade.php | 2 -- .../views/partials/forms/edit/location-select.blade.php | 2 -- .../views/partials/forms/edit/manufacturer-select.blade.php | 2 +- resources/views/partials/forms/edit/model-select.blade.php | 2 -- resources/views/partials/forms/edit/status-select.blade.php | 2 -- .../views/partials/forms/edit/supplier-select.blade.php | 2 -- resources/views/users/edit.blade.php | 2 +- 11 files changed, 8 insertions(+), 20 deletions(-) diff --git a/resources/lang/en-US/localizations.php b/resources/lang/en-US/localizations.php index e87af0718e..fdca1532bd 100644 --- a/resources/lang/en-US/localizations.php +++ b/resources/lang/en-US/localizations.php @@ -2,7 +2,7 @@ return [ - 'select_language' => 'Select a language', + 'select_language' => 'Select a Language', 'languages' => [ 'en-US'=> 'English, US', 'en-GB'=> 'English, UK', @@ -68,7 +68,7 @@ return [ 'zu-ZA'=> 'Zulu', ], - 'select_country' => 'Select a country', + 'select_country' => 'Select a Country', 'countries' => [ 'AC'=>'Ascension Island', diff --git a/resources/macros/macros.php b/resources/macros/macros.php index 5d0813115e..1b2c127a4f 100644 --- a/resources/macros/macros.php +++ b/resources/macros/macros.php @@ -11,7 +11,7 @@ Form::macro('locales', function ($name = 'locale', $selected = null, $class = nu $idclause = (!is_null($id)) ? $id : ''; - $select = ''; $select .= ''; // Pull the autoglossonym array from the localizations translation file diff --git a/resources/views/partials/forms/edit/category-select.blade.php b/resources/views/partials/forms/edit/category-select.blade.php index 66800deedf..bfa8e3b793 100644 --- a/resources/views/partials/forms/edit/category-select.blade.php +++ b/resources/views/partials/forms/edit/category-select.blade.php @@ -9,8 +9,6 @@ - @else - @endif diff --git a/resources/views/partials/forms/edit/company-select.blade.php b/resources/views/partials/forms/edit/company-select.blade.php index 9aaa5cafdf..012e032866 100644 --- a/resources/views/partials/forms/edit/company-select.blade.php +++ b/resources/views/partials/forms/edit/company-select.blade.php @@ -10,7 +10,7 @@ {{ (\App\Models\Company::find($company_id)) ? \App\Models\Company::find($company_id)->name : '' }} @else - + {!! (!isset($multiple) || ($multiple=='false')) ? '' : '' !!} @endif
@@ -20,14 +20,14 @@
{{ Form::label($fieldname, $translated_name, array('class' => 'col-md-3 control-label')) }} -
+
diff --git a/resources/views/partials/forms/edit/department-select.blade.php b/resources/views/partials/forms/edit/department-select.blade.php index c695d04ef4..7d67416f5f 100644 --- a/resources/views/partials/forms/edit/department-select.blade.php +++ b/resources/views/partials/forms/edit/department-select.blade.php @@ -8,8 +8,6 @@ - @else - @endif
diff --git a/resources/views/partials/forms/edit/location-select.blade.php b/resources/views/partials/forms/edit/location-select.blade.php index 6752657cb5..aad8af15e6 100644 --- a/resources/views/partials/forms/edit/location-select.blade.php +++ b/resources/views/partials/forms/edit/location-select.blade.php @@ -8,8 +8,6 @@ - @else - @endif
diff --git a/resources/views/partials/forms/edit/manufacturer-select.blade.php b/resources/views/partials/forms/edit/manufacturer-select.blade.php index ba7d4e59d6..28a8382c18 100644 --- a/resources/views/partials/forms/edit/manufacturer-select.blade.php +++ b/resources/views/partials/forms/edit/manufacturer-select.blade.php @@ -10,7 +10,7 @@ {{ (\App\Models\Manufacturer::find($manufacturer_id)) ? \App\Models\Manufacturer::find($manufacturer_id)->name : '' }} @else - + {!! (!isset($multiple) || ($multiple=='false')) ? '' : '' !!} @endif diff --git a/resources/views/partials/forms/edit/model-select.blade.php b/resources/views/partials/forms/edit/model-select.blade.php index 78073c9a66..c18d85af3b 100644 --- a/resources/views/partials/forms/edit/model-select.blade.php +++ b/resources/views/partials/forms/edit/model-select.blade.php @@ -9,8 +9,6 @@ - @else - @endif diff --git a/resources/views/partials/forms/edit/status-select.blade.php b/resources/views/partials/forms/edit/status-select.blade.php index bd3c8dec2c..836b8145a0 100644 --- a/resources/views/partials/forms/edit/status-select.blade.php +++ b/resources/views/partials/forms/edit/status-select.blade.php @@ -9,8 +9,6 @@ - @else - @endif diff --git a/resources/views/partials/forms/edit/supplier-select.blade.php b/resources/views/partials/forms/edit/supplier-select.blade.php index 35c5165e59..55add41aa5 100644 --- a/resources/views/partials/forms/edit/supplier-select.blade.php +++ b/resources/views/partials/forms/edit/supplier-select.blade.php @@ -8,8 +8,6 @@ - @else - @endif diff --git a/resources/views/users/edit.blade.php b/resources/views/users/edit.blade.php index 9b4080a339..fc342897a7 100755 --- a/resources/views/users/edit.blade.php +++ b/resources/views/users/edit.blade.php @@ -307,7 +307,7 @@
-
+
{!! Form::locales('locale', old('locale', $user->locale), 'select2') !!} {!! $errors->first('locale', '') !!}
From 76301bc30d5b6e55cc894200dff5ab074993013e Mon Sep 17 00:00:00 2001 From: snipe Date: Thu, 29 Aug 2024 20:05:03 +0100 Subject: [PATCH 6/6] Fixed typo Signed-off-by: snipe --- resources/lang/en-US/mail.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/lang/en-US/mail.php b/resources/lang/en-US/mail.php index cb08ddc3d5..72fb70db80 100644 --- a/resources/lang/en-US/mail.php +++ b/resources/lang/en-US/mail.php @@ -31,7 +31,7 @@ return [ 'accessory_name' => 'Accessory Name', 'additional_notes' => 'Additional Notes', 'admin_has_created' => 'An administrator has created an account for you on the :web website.', - 'asset' => 'Asse:', + 'asset' => 'Asset', 'asset_name' => 'Asset Name', 'asset_requested' => 'Asset requested', 'asset_tag' => 'Asset Tag',