diff --git a/app/Http/Controllers/Common/Companies.php b/app/Http/Controllers/Common/Companies.php index 02e13fcdd..2cd575a18 100644 --- a/app/Http/Controllers/Common/Companies.php +++ b/app/Http/Controllers/Common/Companies.php @@ -227,4 +227,23 @@ class Companies extends Controller return redirect()->route('dashboard'); } + + public function autocomplete() + { + $query = request('query'); + + $autocomplete = Company::autocomplete([ + 'name' => $query + ]); + + $companies = $autocomplete->get()->sortBy('name')->pluck('name', 'id'); + + return response()->json([ + 'success' => true, + 'message' => 'Get all companies.', + 'errors' => [], + 'count' => $companies->count(), + 'data' => ($companies->count()) ? $companies : null, + ]); + } } diff --git a/app/Models/Common/Company.php b/app/Models/Common/Company.php index 62b3a28ed..2da164874 100644 --- a/app/Models/Common/Company.php +++ b/app/Models/Common/Company.php @@ -318,6 +318,32 @@ class Company extends Eloquent ->select('companies.*'); } + /** + * Scope autocomplete. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param array $filter + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeAutocomplete($query, $filter) + { + return $query->join('settings', 'companies.id', '=', 'settings.company_id') + ->where(function ($query) use ($filter) { + foreach ($filter as $key => $value) { + $column = $key; + + if (!in_array($key, $this->fillable)) { + $column = 'company.' . $key; + $query->orWhere('key', $column); + $query->Where('value', 'LIKE', "%" . $value . "%"); + } else { + $query->orWhere($column, 'LIKE', "%" . $value . "%"); + } + } + }) + ->select('companies.*'); + } + /** * Get the current balance. * diff --git a/app/Providers/Form.php b/app/Providers/Form.php index 245d23c0f..df530311c 100644 --- a/app/Providers/Form.php +++ b/app/Providers/Form.php @@ -55,6 +55,10 @@ class Form extends Provider 'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required'], 'col' => 'col-md-6', 'group_class' => null ]); + Facade::component('multiSelectRemoteGroup', 'partials.form.multi_select_remote_group', [ + 'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required'], 'col' => 'col-md-6', 'group_class' => null + ]); + Facade::component('selectGroup', 'partials.form.select_group', [ 'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required'], 'col' => 'col-md-6', 'group_class' => null ]); diff --git a/resources/assets/js/components/AkauntingSelect.vue b/resources/assets/js/components/AkauntingSelect.vue index 34f43f88f..9610b497d 100644 --- a/resources/assets/js/components/AkauntingSelect.vue +++ b/resources/assets/js/components/AkauntingSelect.vue @@ -763,7 +763,7 @@ {{ new_text }} - @@ -923,6 +923,7 @@ export default { add_new_html: '', form: {}, new_options: false, + couunt: 1, } }, @@ -989,6 +990,24 @@ export default { this.$emit('interface', this.real_model); this.$emit('change', this.real_model); + + //this.$children[0].$children[0].$emit('keydown.native.tab'); + //this.$children[0].$children[0].handleMenuEnter(); + + this.$children[0].$children[0].visible = false; + + /* + this.$children[0].$children[0].setSoftFocus(); + if (this.$children[0].$children[0].visible) return; + + let option = {}; + + option.value = this.real_model; + + this.$children[0].$children[0].$nextTick(() => { + this.$children[0].$children[0].scrollToOption(option); + }); + */ }, async onAddItem() { @@ -1180,7 +1199,17 @@ export default { return; } - this.change(); + if (this.real_model != value) { + this.change(); + } + + let e = $.Event('keyup'); + e.keyCode= 9; // tab + $('#' + this.name).trigger(e); + + let event = new window.KeyboardEvent('keydown', { keyCode: 9 }); // Tab key + + window.dispatchEvent(event); }, value: function (value) { diff --git a/resources/assets/js/components/AkauntingSelectRemote.vue b/resources/assets/js/components/AkauntingSelectRemote.vue index 714299cb0..da8f3bff2 100644 --- a/resources/assets/js/components/AkauntingSelectRemote.vue +++ b/resources/assets/js/components/AkauntingSelectRemote.vue @@ -12,7 +12,11 @@ ]" :error="formError"> + remote + reserve-keyword + :placeholder="placeholder" + :remote-method="remoteMethod" + :loading="loading">

{{ noMatchingDataText }} @@ -85,7 +89,11 @@ + remote + reserve-keyword + :placeholder="placeholder" + :remote-method="remoteMethod" + :loading="loading">

{{ noMatchingDataText }} @@ -158,7 +166,11 @@ + remote + reserve-keyword + :placeholder="placeholder" + :remote-method="remoteMethod" + :loading="loading">

{{ noMatchingDataText }} @@ -231,7 +243,11 @@ + remote + reserve-keyword + :placeholder="placeholder" + :remote-method="remoteMethod" + :loading="loading">

{{ noMatchingDataText }} diff --git a/resources/views/auth/users/create.blade.php b/resources/views/auth/users/create.blade.php index 85949333b..06ba5e40e 100644 --- a/resources/views/auth/users/create.blade.php +++ b/resources/views/auth/users/create.blade.php @@ -48,7 +48,7 @@ @endif @permission('read-common-companies') - {{ Form::multiSelectGroup('companies', trans_choice('general.companies', 2), 'user', $companies) }} + {{ Form::multiSelectRemoteGroup('companies', trans_choice('general.companies', 2), 'user', $companies, [], ['required' => 'required', 'remote_action' => route('companies.autocomplete'), 'remote_type' => 'company']) }} @endpermission @permission('read-auth-roles') diff --git a/resources/views/auth/users/edit.blade.php b/resources/views/auth/users/edit.blade.php index a46d7f0c1..2d631d8a0 100644 --- a/resources/views/auth/users/edit.blade.php +++ b/resources/views/auth/users/edit.blade.php @@ -49,7 +49,7 @@ @endif @permission('read-common-companies') - {{ Form::multiSelectGroup('companies', trans_choice('general.companies', 2), 'user', $companies, $user->company_ids, ['required' => 'required'], 'col-md-6') }} + {{ Form::multiSelectRemoteGroup('companies', trans_choice('general.companies', 2), 'user', $companies, $user->company_ids, ['required' => 'required', 'remote_action' => route('companies.autocomplete'), 'remote_type' => 'company']) }} @endpermission @permission('read-auth-roles') diff --git a/resources/views/partials/form/multi_select_remote_group.blade.php b/resources/views/partials/form/multi_select_remote_group.blade.php new file mode 100644 index 000000000..44eff83d1 --- /dev/null +++ b/resources/views/partials/form/multi_select_remote_group.blade.php @@ -0,0 +1,76 @@ +@stack($name . '_input_start') + + + +@stack($name . '_input_end') diff --git a/routes/admin.php b/routes/admin.php index 3c01cae9b..37b221147 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -14,6 +14,7 @@ Route::group(['as' => 'uploads.', 'prefix' => 'uploads'], function () { }); Route::group(['prefix' => 'common'], function () { + Route::get('companies/autocomplete', 'Common\Companies@autocomplete')->name('companies.autocomplete'); Route::get('companies/{company}/switch', 'Common\Companies@switch')->name('companies.switch'); Route::get('companies/{company}/enable', 'Common\Companies@enable')->name('companies.enable'); Route::get('companies/{company}/disable', 'Common\Companies@disable')->name('companies.disable');