From e638b7860c5696e5af544c6890d5fc44604b5950 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=BCneyt=20=C5=9Eent=C3=BCrk?= Date: Sat, 7 Nov 2020 16:18:44 +0300 Subject: [PATCH 1/7] Added Sales & Purchases default category --- app/Http/Controllers/Settings/Defaults.php | 6 +++ app/Listeners/Update/V21/Version210.php | 39 +++++++++++++++++++ database/seeds/Categories.php | 20 +++++++++- resources/lang/en-GB/settings.php | 2 + .../views/purchases/bills/create.blade.php | 2 +- .../views/purchases/payments/create.blade.php | 2 +- .../views/sales/invoices/create.blade.php | 2 +- .../views/sales/revenues/create.blade.php | 2 +- .../views/settings/default/edit.blade.php | 4 ++ 9 files changed, 74 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/Settings/Defaults.php b/app/Http/Controllers/Settings/Defaults.php index 6be3afb9e..818cfaf8c 100644 --- a/app/Http/Controllers/Settings/Defaults.php +++ b/app/Http/Controllers/Settings/Defaults.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Settings; use App\Abstracts\Http\Controller; use App\Models\Banking\Account; +use App\Models\Setting\Category; use App\Models\Setting\Currency; use App\Models\Setting\Tax; use App\Utilities\Modules; @@ -16,6 +17,9 @@ class Defaults extends Controller $currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code'); + $sales_categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); + $purchases_categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); + $taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id'); $payment_methods = Modules::getPaymentMethods(); @@ -23,6 +27,8 @@ class Defaults extends Controller return view('settings.default.edit', compact( 'accounts', 'currencies', + 'sales_categories', + 'purchases_categories', 'taxes', 'payment_methods' )); diff --git a/app/Listeners/Update/V21/Version210.php b/app/Listeners/Update/V21/Version210.php index eb5bd4107..cacf6257e 100644 --- a/app/Listeners/Update/V21/Version210.php +++ b/app/Listeners/Update/V21/Version210.php @@ -4,6 +4,9 @@ namespace App\Listeners\Update\V21; use App\Abstracts\Listeners\Update as Listener; use App\Events\Install\UpdateFinished as Event; +use App\Models\Setting\Category; +use App\Models\Common\Company; +use App\Utilities\Overrider; use Illuminate\Support\Facades\Artisan; class Version210 extends Listener @@ -24,6 +27,42 @@ class Version210 extends Listener return; } + $this->updateCompanies(); + Artisan::call('migrate', ['--force' => true]); } + protected function updateCompanies() + { + $company_id = session('company_id'); + + $companies = Company::cursor(); + + foreach ($companies as $company) { + session(['company_id' => $company->id]); + + $this->updateSettings($company); + } + + setting()->forgetAll(); + + session(['company_id' => $company_id]); + + Overrider::load('settings'); + } + + public function updateSettings($company) + { + $sales_category = Category::income()->enabled()->first(); + $purchases_category = Category::expense()->enabled()->first(); + + // Set the active company settings + setting()->setExtraColumns(['company_id' => $company->id]); + setting()->forgetAll(); + setting()->load(true); + + setting()->set(['default.sales_category' => setting('default.sales_category', $sales_category->id)]); + setting()->set(['default.purchases_category' => setting('default.purchases_category', $purchases_category->id)]); + + setting()->save(); + } } diff --git a/database/seeds/Categories.php b/database/seeds/Categories.php index c74833575..463f84f85 100644 --- a/database/seeds/Categories.php +++ b/database/seeds/Categories.php @@ -64,8 +64,26 @@ class Categories extends Seeder ], ]; + $sales_category = $purchases_category = false; + foreach ($rows as $row) { - Category::create($row); + $category = Category::create($row); + + switch ($category->type) { + case 'income': + if (empty($sales_category)) { + $sales_category = $category; + } + break; + case 'expense': + if (empty($purchases_category)) { + $purchases_category = $category; + } + break; + } } + + setting()->set('default.sales_category', $sales_category->id); + setting()->set('default.purchases_category', $purchases_category->id); } } diff --git a/resources/lang/en-GB/settings.php b/resources/lang/en-GB/settings.php index 394c2910d..3a6f8335a 100644 --- a/resources/lang/en-GB/settings.php +++ b/resources/lang/en-GB/settings.php @@ -68,6 +68,8 @@ return [ 'description' => 'Default account, currency, language of your company', 'list_limit' => 'Records Per Page', 'use_gravatar' => 'Use Gravatar', + 'sales_category' => 'Sales Category', + 'purchases_category'=> 'Purchases Category', ], 'email' => [ diff --git a/resources/views/purchases/bills/create.blade.php b/resources/views/purchases/bills/create.blade.php index b0fe97801..19ebd4c6d 100644 --- a/resources/views/purchases/bills/create.blade.php +++ b/resources/views/purchases/bills/create.blade.php @@ -194,7 +194,7 @@ {{ Form::textareaGroup('notes', trans_choice('general.notes', 2)) }} - {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('default.category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=expense']) }} + {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('default.purchases_category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=expense']) }} {{ Form::recurring('create') }} diff --git a/resources/views/purchases/payments/create.blade.php b/resources/views/purchases/payments/create.blade.php index 57fc19ec6..46844b047 100644 --- a/resources/views/purchases/payments/create.blade.php +++ b/resources/views/purchases/payments/create.blade.php @@ -30,7 +30,7 @@ {{ Form::textareaGroup('description', trans('general.description')) }} - {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('default.category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=expense']) }} + {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('default.purchases_category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=expense']) }} {{ Form::recurring('create') }} diff --git a/resources/views/sales/invoices/create.blade.php b/resources/views/sales/invoices/create.blade.php index defccec38..68de6d3ec 100644 --- a/resources/views/sales/invoices/create.blade.php +++ b/resources/views/sales/invoices/create.blade.php @@ -196,7 +196,7 @@ {{ Form::textareaGroup('footer', trans('general.footer'), '', setting('invoice.footer'), ['rows' => '3'], 'col-md-6') }} - {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('defaults.category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=income']) }} + {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('default.sales_category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=income']) }} {{ Form::recurring('create') }} diff --git a/resources/views/sales/revenues/create.blade.php b/resources/views/sales/revenues/create.blade.php index c1c23ab06..dbbb3495d 100644 --- a/resources/views/sales/revenues/create.blade.php +++ b/resources/views/sales/revenues/create.blade.php @@ -30,7 +30,7 @@ {{ Form::textareaGroup('description', trans('general.description')) }} - {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('default.category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=income']) }} + {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('default.sales_category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=income']) }} {{ Form::recurring('create') }} diff --git a/resources/views/settings/default/edit.blade.php b/resources/views/settings/default/edit.blade.php index e18c01914..b5c8bbc46 100644 --- a/resources/views/settings/default/edit.blade.php +++ b/resources/views/settings/default/edit.blade.php @@ -22,6 +22,10 @@ {{ Form::selectGroup('currency', trans_choice('general.currencies', 1), 'exchange-alt', $currencies, setting('default.currency'), []) }} + {{ Form::selectGroup('sales_category', trans('settings.default.sales_category'), 'folder', $sales_categories, setting('default.sales_category'), []) }} + + {{ Form::selectGroup('purchases_category', trans('settings.default.purchases_category'), 'folder', $purchases_categories, setting('default.purchases_category'), []) }} + {{ Form::selectGroup('tax', trans_choice('general.taxes', 1), 'percent', $taxes, setting('default.tax'), []) }} {{ Form::selectGroup('payment_method', trans_choice('general.payment_methods', 1), 'credit-card', $payment_methods, setting('default.payment_method'), []) }} From 4694e3bfaff1a7008b7427dc7baf978b1fd950cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=BCneyt=20=C5=9Eent=C3=BCrk?= Date: Sat, 7 Nov 2020 22:48:25 +0300 Subject: [PATCH 2/7] Change default category prefix sales to income, purchases to expense --- app/Listeners/Update/V21/Version210.php | 8 ++++---- database/seeds/Categories.php | 14 +++++++------- resources/lang/en-GB/settings.php | 4 ++-- resources/views/purchases/bills/create.blade.php | 2 +- .../views/purchases/payments/create.blade.php | 2 +- resources/views/sales/invoices/create.blade.php | 2 +- resources/views/sales/revenues/create.blade.php | 2 +- resources/views/settings/default/edit.blade.php | 4 ++-- 8 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/Listeners/Update/V21/Version210.php b/app/Listeners/Update/V21/Version210.php index cacf6257e..81fd01bf7 100644 --- a/app/Listeners/Update/V21/Version210.php +++ b/app/Listeners/Update/V21/Version210.php @@ -52,16 +52,16 @@ class Version210 extends Listener public function updateSettings($company) { - $sales_category = Category::income()->enabled()->first(); - $purchases_category = Category::expense()->enabled()->first(); + $income_category = Category::income()->enabled()->first(); + $expense_category = Category::expense()->enabled()->first(); // Set the active company settings setting()->setExtraColumns(['company_id' => $company->id]); setting()->forgetAll(); setting()->load(true); - setting()->set(['default.sales_category' => setting('default.sales_category', $sales_category->id)]); - setting()->set(['default.purchases_category' => setting('default.purchases_category', $purchases_category->id)]); + setting()->set(['default.income_category' => setting('default.income_category', $income_category->id)]); + setting()->set(['default.expense_category' => setting('default.expense_category', $expense_category->id)]); setting()->save(); } diff --git a/database/seeds/Categories.php b/database/seeds/Categories.php index 463f84f85..a46874f73 100644 --- a/database/seeds/Categories.php +++ b/database/seeds/Categories.php @@ -64,26 +64,26 @@ class Categories extends Seeder ], ]; - $sales_category = $purchases_category = false; + $income_category = $expense_category = false; foreach ($rows as $row) { $category = Category::create($row); switch ($category->type) { case 'income': - if (empty($sales_category)) { - $sales_category = $category; + if (empty($income_category)) { + $income_category = $category; } break; case 'expense': - if (empty($purchases_category)) { - $purchases_category = $category; + if (empty($expense_category)) { + $expense_category = $category; } break; } } - setting()->set('default.sales_category', $sales_category->id); - setting()->set('default.purchases_category', $purchases_category->id); + setting()->set('default.income_category', $income_category->id); + setting()->set('default.expense_category', $expense_category->id); } } diff --git a/resources/lang/en-GB/settings.php b/resources/lang/en-GB/settings.php index 3a6f8335a..3e47ce44d 100644 --- a/resources/lang/en-GB/settings.php +++ b/resources/lang/en-GB/settings.php @@ -68,8 +68,8 @@ return [ 'description' => 'Default account, currency, language of your company', 'list_limit' => 'Records Per Page', 'use_gravatar' => 'Use Gravatar', - 'sales_category' => 'Sales Category', - 'purchases_category'=> 'Purchases Category', + 'income_category' => 'Income Category', + 'expense_category' => 'Expense Category', ], 'email' => [ diff --git a/resources/views/purchases/bills/create.blade.php b/resources/views/purchases/bills/create.blade.php index 19ebd4c6d..f730ba22c 100644 --- a/resources/views/purchases/bills/create.blade.php +++ b/resources/views/purchases/bills/create.blade.php @@ -194,7 +194,7 @@ {{ Form::textareaGroup('notes', trans_choice('general.notes', 2)) }} - {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('default.purchases_category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=expense']) }} + {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('default.expense_category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=expense']) }} {{ Form::recurring('create') }} diff --git a/resources/views/purchases/payments/create.blade.php b/resources/views/purchases/payments/create.blade.php index 46844b047..493b857a2 100644 --- a/resources/views/purchases/payments/create.blade.php +++ b/resources/views/purchases/payments/create.blade.php @@ -30,7 +30,7 @@ {{ Form::textareaGroup('description', trans('general.description')) }} - {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('default.purchases_category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=expense']) }} + {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('default.expense_category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=expense']) }} {{ Form::recurring('create') }} diff --git a/resources/views/sales/invoices/create.blade.php b/resources/views/sales/invoices/create.blade.php index 68de6d3ec..25931a413 100644 --- a/resources/views/sales/invoices/create.blade.php +++ b/resources/views/sales/invoices/create.blade.php @@ -196,7 +196,7 @@ {{ Form::textareaGroup('footer', trans('general.footer'), '', setting('invoice.footer'), ['rows' => '3'], 'col-md-6') }} - {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('default.sales_category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=income']) }} + {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('default.income_category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=income']) }} {{ Form::recurring('create') }} diff --git a/resources/views/sales/revenues/create.blade.php b/resources/views/sales/revenues/create.blade.php index dbbb3495d..36308d1b8 100644 --- a/resources/views/sales/revenues/create.blade.php +++ b/resources/views/sales/revenues/create.blade.php @@ -30,7 +30,7 @@ {{ Form::textareaGroup('description', trans('general.description')) }} - {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('default.sales_category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=income']) }} + {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('default.income_category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=income']) }} {{ Form::recurring('create') }} diff --git a/resources/views/settings/default/edit.blade.php b/resources/views/settings/default/edit.blade.php index b5c8bbc46..9f22b9e29 100644 --- a/resources/views/settings/default/edit.blade.php +++ b/resources/views/settings/default/edit.blade.php @@ -22,9 +22,9 @@ {{ Form::selectGroup('currency', trans_choice('general.currencies', 1), 'exchange-alt', $currencies, setting('default.currency'), []) }} - {{ Form::selectGroup('sales_category', trans('settings.default.sales_category'), 'folder', $sales_categories, setting('default.sales_category'), []) }} + {{ Form::selectGroup('income_category', trans('settings.default.income_category'), 'folder', $sales_categories, setting('default.income_category'), []) }} - {{ Form::selectGroup('purchases_category', trans('settings.default.purchases_category'), 'folder', $purchases_categories, setting('default.purchases_category'), []) }} + {{ Form::selectGroup('expense_category', trans('settings.default.expense_category'), 'folder', $purchases_categories, setting('default.expense_category'), []) }} {{ Form::selectGroup('tax', trans_choice('general.taxes', 1), 'percent', $taxes, setting('default.tax'), []) }} From 683b2a372dc009497c5f8a3a82c94e301ea869a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=BCneyt=20=C5=9Eent=C3=BCrk?= Date: Tue, 10 Nov 2020 12:31:17 +0300 Subject: [PATCH 3/7] Fixed: Drop-downs not sorted alphabetically --- .../assets/js/components/AkauntingSelect.vue | 1031 +++-------------- 1 file changed, 161 insertions(+), 870 deletions(-) diff --git a/resources/assets/js/components/AkauntingSelect.vue b/resources/assets/js/components/AkauntingSelect.vue index 2fc2bdd26..ea0142b77 100644 --- a/resources/assets/js/components/AkauntingSelect.vue +++ b/resources/assets/js/components/AkauntingSelect.vue @@ -1,7 +1,5 @@ @@ -808,31 +139,42 @@ export default { default: '', description: "Selectbox label text" }, + placeholder: { type: String, default: '', description: "Selectbox input placeholder text" }, + formClasses: { type: Array, default: null, description: "Selectbox input class name" }, + formError: { type: String, default: null, description: "Selectbox input error message" }, + + icon: { + type: String, + description: "Prepend icon (left)" + }, + name: { type: String, default: null, description: "Selectbox attribute name" }, + value: { type: [String, Number, Array, Object], default: '', description: "Selectbox selected value" }, + options: null, option_sortable: { @@ -847,11 +189,6 @@ export default { description: "Selectbox selected model" }, - icon: { - type: String, - description: "Prepend icon (left)" - }, - addNew: { type: Object, default: function () { @@ -873,21 +210,25 @@ export default { default: false, description: "Selectbox option group status" }, + multiple: { type: Boolean, default: false, description: "Multible feature status" }, + readonly: { type: Boolean, default: false, description: "Selectbox disabled status" }, + disabled: { type: Boolean, default: false, description: "Selectbox disabled status" }, + collapse: { type: Boolean, default: false, @@ -899,6 +240,7 @@ export default { default: 'No Data', description: "Selectbox empty options message" }, + noMatchingDataText: { type: String, default: 'No Matchign Data', @@ -914,72 +256,75 @@ export default { path: this.addNew.path, type: this.addNew.type, // modal, inline field: this.addNew.field, - buttons: this.addNew.buttons + buttons: this.addNew.buttons, }, - add_new_text: this.addNew.text, - new_text: this.addNew.new_text, - selectOptions: this.options, - real_model: this.model, add_new_html: '', - form: {}, - new_options: false, - couunt: 1, + + selected: this.model, + + sort_options: [], + new_options: {}, } }, created() { - /* - if (this.group != true && Object.keys(this.options).length) { - let sortable = []; - let option_sortable = this.option_sortable; - - for (var option_key in this.options) { - sortable.push({ - 'key' : option_key, - 'value': this.options[option_key] + // Option set sort_option data + if (Object.keys(this.options).length) { + for (const [key, value] of Object.entries(this.options)) { + this.sort_options.push({ + key: key, + value: value }); } - - if (option_sortable == 'value') { - sortable.sort(function(a, b) { - var sortableA = a[option_sortable].toUpperCase(); - var sortableB = b[option_sortable].toUpperCase(); - - let comparison = 0; - - if (sortableA > sortableB) { - comparison = 1; - } else if (sortableA < sortableB) { - comparison = -1; - } - - return comparison; + } else { + this.options.forEach(function (option, index) { + this.sort_options.push({ + key: option, + value: index }); - } - - this.options = sortable; + }, this); } - */ + }, - this.new_options = {}; + computed: { + sortOptions() { + this.sort_options.sort(function (a, b) { + var nameA = a.value.toUpperCase(); // ignore upper and lowercase + var nameB = b.value.toUpperCase(); // ignore upper and lowercase + + if (nameA < nameB) { + return -1; + } + + if (nameA > nameB) { + return 1; + } + + // names must be equal + return 0; + }); + + return this.sort_options; + }, }, mounted() { - this.real_model = this.value; + // Check Here.. + this.selected = this.value; if (this.model.length) { if (eval(this.model) !== undefined) { - this.real_model = eval(this.model); + this.selected = eval(this.model); } else { - this.real_model = this.model; + this.selected = this.model; } } - if (this.multiple && !this.real_model.length) { - this.real_model = []; + if (this.multiple && !this.selected.length) { + this.selected = []; } - this.$emit('interface', this.real_model); + this.$emit('interface', this.selected); setTimeout(function() { this.change(); @@ -988,30 +333,29 @@ export default { methods: { change() { - if (typeof(this.real_model) === 'object' && typeof(this.real_model.type) !== 'undefined') { - return false; - } + this.$emit('interface', this.selected); - this.$emit('interface', this.real_model); - this.$emit('change', this.real_model); + this.$emit('change', this.selected); + }, - //this.$children[0].$children[0].$emit('keydown.native.tab'); - //this.$children[0].$children[0].handleMenuEnter(); + visibleChange(event) { + this.$emit('visible-change', event); + }, - this.$children[0].$children[0].visible = false; + removeTag(event) { + this.$emit('remove-tag', event); + }, - /* - this.$children[0].$children[0].setSoftFocus(); - if (this.$children[0].$children[0].visible) return; + clear(event) { + this.$emit('clear', event); + }, - let option = {}; + blur(event) { + this.$emit('blur', event); + }, - option.value = this.real_model; - - this.$children[0].$children[0].$nextTick(() => { - this.$children[0].$children[0].scrollToOption(option); - }); - */ + focus(event) { + this.$emit('focus', event); }, async onAddItem() { @@ -1129,17 +473,17 @@ export default { this.form.loading = false; if (response.data.success) { - if (!Object.keys(this.options).length) { - this.selectOptions = {}; - } + this.sort_options.push({ + key: response.data.data[this.add_new.field.key].toString(), + value: response.data.data[this.add_new.field.value], + }); - this.selectOptions[response.data.data[this.add_new.field.key]] = response.data.data[this.add_new.field.value]; this.new_options[response.data.data[this.add_new.field.key]] = response.data.data[this.add_new.field.value]; if (this.multiple) { - this.real_model.push(response.data.data[this.add_new.field.key].toString()); + this.selected.push(response.data.data[this.add_new.field.key].toString()); } else { - this.real_model = response.data.data[this.add_new.field.key].toString(); + this.selected = response.data.data[this.add_new.field.key].toString(); } this.add_new.show = false; @@ -1179,63 +523,6 @@ export default { }, }, - - watch: { - options: function (options) { - // update options - this.selectOptions = options; - - if (Object.keys(this.new_options).length) { - if (!Object.keys(this.options).length) { - this.selectOptions = {}; - } - - for (let [key, value] of Object.entries(this.new_options)) { - if (!this.selectOptions[key]) { - this.selectOptions[key] = value; - } - } - } - }, - - real_model: function (value) { - if (this.multiple) { - return; - } - - 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) { - if (this.multiple) { - this.real_model = value; - } else { - this.real_model = value.toString(); - } - - this.change(); - }, - - model: function (value) { - if (this.multiple) { - this.real_model = value; - } else { - this.real_model = value.toString(); - } - - this.change(); - } - }, } @@ -1283,4 +570,8 @@ export default { margin-right: 35px; position: relative; } + + .badge.badge-pill.badge-success { + border-radius: 0.375rem; + } From 57759aa718294e2966384fd131df473168e63ac1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=BCneyt=20=C5=9Eent=C3=BCrk?= Date: Tue, 10 Nov 2020 16:55:21 +0300 Subject: [PATCH 4/7] refs select and select remote re-factoring --- .../assets/js/components/AkauntingSelect.vue | 19 +- .../js/components/AkauntingSelectRemote.vue | 797 ++++++------------ 2 files changed, 254 insertions(+), 562 deletions(-) diff --git a/resources/assets/js/components/AkauntingSelect.vue b/resources/assets/js/components/AkauntingSelect.vue index ea0142b77..3ce97ac95 100644 --- a/resources/assets/js/components/AkauntingSelect.vue +++ b/resources/assets/js/components/AkauntingSelect.vue @@ -269,7 +269,7 @@ export default { created() { // Option set sort_option data - if (Object.keys(this.options).length) { + if (!Array.isArray(this.options)) { for (const [key, value] of Object.entries(this.options)) { this.sort_options.push({ key: key, @@ -279,8 +279,9 @@ export default { } else { this.options.forEach(function (option, index) { this.sort_options.push({ - key: option, - value: index + index: index, + key: option.id, + value: (option.title) ? option.title : (option.display_name) ? option.display_name : option.name }); }, this); } @@ -366,11 +367,11 @@ export default { var value = this.$children[0].$children[0].$refs.input.value; } - if (this.add_new.type == 'inline') { - if (value === '') { - return false; - } + if (value === '') { + return false; + } + if (this.add_new.type == 'inline') { await this.addInline(value); } else { await this.onModal(value); @@ -535,6 +536,10 @@ export default { padding: 10px 0 0 !important; } + .el-select-dropdown__empty.loading { + padding: 10px 0 !important; + } + .el-select__footer { text-align: center; border-top: 1px solid #dee2e6; diff --git a/resources/assets/js/components/AkauntingSelectRemote.vue b/resources/assets/js/components/AkauntingSelectRemote.vue index e600a6b6c..cf365b2c4 100644 --- a/resources/assets/js/components/AkauntingSelectRemote.vue +++ b/resources/assets/js/components/AkauntingSelectRemote.vue @@ -1,8 +1,5 @@ - - {{ label }} - {{ new_text }} + + {{ option.value }} + {{ addNew.new_text }} {{ label }} - {{ new_text }} + {{ addNew.new_text }} - +
- {{ add_new_text }} + {{ addNew.text }}
+ - -
-

- {{ noMatchingDataText }} -

-
    - -
-
+ -
-

- {{ noDataText }} -

-
    - -
-
+ {{ addNew.new_text }} - - - - {{ label }} - {{ new_text }} - - - - - {{ label }} - {{ new_text }} - - - - -
- - - {{ add_new_text }} - -
-
-
- - -
-

- {{ noMatchingDataText }} -

-
    - -
-
- -
-

- {{ noDataText }} -

-
    - -
-
- - - - - {{ label }} - {{ new_text }} - - - - - {{ label }} - {{ new_text }} - - - - -
- - - {{ add_new_text }} - -
-
-
- - -
-

- {{ noMatchingDataText }} -

-
    - -
-
- -
-

- {{ noDataText }} -

-
    - -
-
- - - - - {{ label }} - {{ new_text }} - - - - - {{ label }} - {{ new_text }} - - - - -
- - - {{ add_new_text }} - -
-
-
- - -
-

- {{ noMatchingDataText }} -

-
    - -
-
- -
-

- {{ noDataText }} -

-
    - -
-
- - - - - {{ label }} - {{ new_text }} - - - - - {{ label }} - {{ new_text }} - - - - -
- - - {{ add_new_text }} - -
-
-
- - - - + - {{ new_text }} - -
-

- {{ loadingText }} -

-
+ :loading="loading" + > -
-

- {{ noMatchingDataText }} -

-
    - -
-
+
+

+ {{ noMatchingDataText }} +

-
-

- {{ noDataText }} -

-
    - -
-
+
    + +
+
- + +
- - {{ option.name }} - {{ new_text }} - - - - - {{ label }} - {{ new_text }} - - - - -
- - - {{ add_new_text }} - -
-
- {{ new_text }} + + + {{ addNew.new_text }} + + @@ -535,42 +234,54 @@ export default { default: null, description: "Selectbox label text" }, + placeholder: { type: String, default: '', description: "Selectbox input placeholder text" }, + formClasses: { type: Array, default: null, description: "Selectbox input class name" }, + formError: { type: String, default: null, description: "Selectbox input error message" }, + + icon: { + type: String, + description: "Prepend icon (left)" + }, + name: { type: String, default: null, description: "Selectbox attribute name" }, + value: { - type: [String, Number, Array], + type: [String, Number, Array, Object], default: '', description: "Selectbox selected value" }, + options: null, - model: { - type: [String, Number], - default: null, - description: "Selectbox selected model" + option_sortable: { + type: String, + default: 'value', + description: "Option Sortable type (key|value)" }, - icon: { - type: String, - description: "Prepend icon (left)" + model: { + type: [String, Number, Array, Object], + default: null, + description: "Selectbox selected model" }, addNew: { @@ -589,26 +300,30 @@ export default { description: "Selectbox Add New Item Feature" }, - group: { + group: { type: Boolean, default: false, description: "Selectbox option group status" }, + multiple: { type: Boolean, default: false, description: "Multible feature status" }, + readonly: { type: Boolean, default: false, description: "Selectbox disabled status" }, + disabled: { type: Boolean, default: false, description: "Selectbox disabled status" }, + collapse: { type: Boolean, default: false, @@ -620,11 +335,13 @@ export default { default: 'Loading...', description: "Selectbox loading message" }, + noDataText: { type: String, default: 'No Data', description: "Selectbox empty options message" }, + noMatchingDataText: { type: String, default: 'No Matchign Data', @@ -650,56 +367,116 @@ export default { data() { return { - list: [], add_new: { text: this.addNew.text, show: false, path: this.addNew.path, type: this.addNew.type, // modal, inline field: this.addNew.field, - buttons: this.addNew.buttons + buttons: this.addNew.buttons, }, - add_new_text: this.addNew.text, - new_text: this.addNew.new_text, - selectOptions: this.options, - real_model: this.model, add_new_html: '', - form: {}, + + selected: this.model, + + sort_options: [], + new_options: {}, loading: false, - new_options: false, } }, created() { - this.new_options = {}; + // Option set sort_option data + if (!Array.isArray(this.options)) { + for (const [key, value] of Object.entries(this.options)) { + this.sort_options.push({ + key: key, + value: value + }); + } + } else { + this.options.forEach(function (option, index) { + this.sort_options.push({ + index: index, + key: option.id, + value: (option.title) ? option.title : (option.display_name) ? option.display_name : option.name + }); + }, this); + } + }, + + computed: { + sortOptions() { + this.sort_options.sort(function (a, b) { + var nameA = a.value.toUpperCase(); // ignore upper and lowercase + var nameB = b.value.toUpperCase(); // ignore upper and lowercase + + if (nameA < nameB) { + return -1; + } + + if (nameA > nameB) { + return 1; + } + + // names must be equal + return 0; + }); + + return this.sort_options; + }, }, mounted() { - if (this.multiple) { - if (!this.value.length) { - this.real_model = []; + // Check Here.. + this.selected = this.value; + + if (this.model.length) { + if (eval(this.model) !== undefined) { + this.selected = eval(this.model); } else { - let pre_value = []; - - this.value.forEach(item => { - pre_value.push(item.toString()); - }); - - this.real_model = pre_value; + this.selected = this.model; } - - } else { - this.real_model = this.value; } - this.$emit('interface', this.real_model); + if (this.multiple && !this.selected.length) { + this.selected = []; + } + + this.$emit('interface', this.selected); setTimeout(function() { - //this.change(); for invoice item + this.change(); }.bind(this), 800); }, methods: { + change() { + this.$emit('interface', this.selected); + + this.$emit('change', this.selected); + }, + + visibleChange(event) { + this.$emit('visible-change', event); + }, + + removeTag(event) { + this.$emit('remove-tag', event); + }, + + clear(event) { + this.$emit('clear', event); + }, + + blur(event) { + this.$emit('blur', event); + }, + + focus(event) { + this.$emit('focus', event); + }, + remoteMethod(query) { if (document.getElementById('form-select-' + this.name)) { document.getElementById('form-select-' + this.name).getElementsByTagName("input")[0].readOnly = false; @@ -745,38 +522,6 @@ export default { } }, - change() { - if (typeof(this.real_model) === 'object' && !Array.isArray(this.real_model)) { - return false; - } - - if (Array.isArray(this.real_model) && !this.real_model.length) { - return false; - } - - this.$emit('interface', this.real_model); - this.$emit('change', this.real_model); - - if (Array.isArray(this.selectOptions)) { - this.selectOptions.forEach(item => { - if (item.id == this.real_model) { - this.$emit('label', item.name); - this.$emit('option', item); - - return true; - } - }); - } - }, - - onPressEnter() { - alert('Press Enter'); - }, - - OnPressTab() { - alert('Press Tab'); - }, - async onAddItem() { // Get Select Input value if (this.title) { @@ -785,11 +530,11 @@ export default { var value = this.$children[0].$children[0].$refs.input.value; } - if (value === '') { - return false; - } - if (this.add_new.type == 'inline') { + if (value === '') { + return false; + } + await this.addInline(value); } else { await this.onModal(value); @@ -926,14 +671,18 @@ export default { this.form.loading = false; if (response.data.success) { - if (!Object.keys(this.options).length) { - this.selectOptions = []; - } + this.sort_options.push({ + key: response.data.data[this.add_new.field.key].toString(), + value: response.data.data[this.add_new.field.value], + }); - this.selectOptions.push(response.data.data); - //this.selectOptions[response.data.data[this.add_new.field.key]] = response.data.data[this.add_new.field.value]; this.new_options[response.data.data[this.add_new.field.key]] = response.data.data[this.add_new.field.value]; - this.real_model = response.data.data[this.add_new.field.key];//.toString(); + + if (this.multiple) { + this.selected.push(response.data.data[this.add_new.field.key].toString()); + } else { + this.selected = response.data.data[this.add_new.field.key].toString(); + } this.add_new.show = false; @@ -962,7 +711,7 @@ export default { this.add_new.show = false; this.add_new.html = null; this.add_new_html = null; - + let documentClasses = document.body.classList; documentClasses.remove("modal-open"); @@ -972,68 +721,6 @@ export default { }, }, - - watch: { - options: function (options) { - // update options - this.selectOptions = options; - - if (Object.keys(this.new_options).length) { - if (!Object.keys(this.options).length) { - this.selectOptions = []; - } - - Object.values(this.new_options).forEach(item => { - this.selectOptions.push(item); - }); - } - }, - - real_model: function (value) { - if (this.multiple) { - return; - } - - 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) { - if (this.multiple) { - if (Array.isArray(this.real_model) && !this.real_model.length) { - this.real_model = value; - } else { - let pre_value = []; - - value.forEach(item => { - pre_value.push(item.toString()); - }); - - this.real_model = pre_value; - } - } else { - //this.real_model = value.toString(); - this.real_model = value; - } - }, - - model: function (value) { - if (this.multiple) { - this.real_model = value; - } else { - this.real_model = value; - } - } - }, } @@ -1046,10 +733,6 @@ export default { padding: 10px 0 0 !important; } - .el-select-dropdown__empty.loading { - padding: 10px 0 !important; - } - .el-select__footer { text-align: center; border-top: 1px solid #dee2e6; @@ -1085,4 +768,8 @@ export default { margin-right: 35px; position: relative; } + + .badge.badge-pill.badge-success { + border-radius: 0.375rem; + } From c31c097e191894d3737307d8bef2da0d233a6e91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=BCneyt=20=C5=9Eent=C3=BCrk?= Date: Tue, 10 Nov 2020 19:15:54 +0300 Subject: [PATCH 5/7] Change selectAddNewGroup to selectRemoteAddNewGroup --- app/Http/Controllers/Auth/Users.php | 4 +- app/Http/Controllers/Banking/Transactions.php | 2 +- app/Http/Controllers/Common/Items.php | 4 +- app/Http/Controllers/Modals/Items.php | 2 +- app/Http/Controllers/Purchases/Bills.php | 16 +-- app/Http/Controllers/Purchases/Payments.php | 16 +-- app/Http/Controllers/Sales/Invoices.php | 16 +-- app/Http/Controllers/Sales/Revenues.php | 16 +-- app/Http/Controllers/Settings/Defaults.php | 4 +- app/Providers/Form.php | 8 ++ config/setting.php | 1 + resources/views/common/items/create.blade.php | 2 +- resources/views/common/items/edit.blade.php | 2 +- resources/views/modals/items/create.blade.php | 2 +- ...ulti_select_remote_add_new_group.blade.php | 98 +++++++++++++++++++ .../select_remote_add_new_group.blade.php | 90 +++++++++++++++++ .../views/purchases/bills/create.blade.php | 4 +- .../views/purchases/bills/edit.blade.php | 4 +- .../views/purchases/bills/index.blade.php | 2 +- .../views/purchases/payments/create.blade.php | 4 +- .../views/purchases/payments/edit.blade.php | 4 +- .../views/sales/invoices/create.blade.php | 4 +- resources/views/sales/invoices/edit.blade.php | 4 +- .../views/sales/revenues/create.blade.php | 4 +- resources/views/sales/revenues/edit.blade.php | 4 +- .../views/settings/default/edit.blade.php | 4 +- 26 files changed, 247 insertions(+), 74 deletions(-) create mode 100644 resources/views/partials/form/multi_select_remote_add_new_group.blade.php create mode 100644 resources/views/partials/form/select_remote_add_new_group.blade.php diff --git a/app/Http/Controllers/Auth/Users.php b/app/Http/Controllers/Auth/Users.php index dfff5b28a..6221d20b1 100644 --- a/app/Http/Controllers/Auth/Users.php +++ b/app/Http/Controllers/Auth/Users.php @@ -58,7 +58,7 @@ class Users extends Controller return $r->hasPermission('read-client-portal'); }); - $companies = user()->companies()->take(10)->get()->sortBy('name')->pluck('name', 'id'); + $companies = user()->companies()->take(setting('default.select_limit'))->get()->sortBy('name')->pluck('name', 'id'); return view('auth.users.create', compact('roles', 'companies', 'landing_pages')); } @@ -123,7 +123,7 @@ class Users extends Controller }); } - $companies = user()->companies()->take(10)->get()->sortBy('name')->pluck('name', 'id'); + $companies = user()->companies()->take(setting('default.select_limit'))->get()->sortBy('name')->pluck('name', 'id'); return view('auth.users.edit', compact('user', 'companies', 'roles', 'landing_pages')); } diff --git a/app/Http/Controllers/Banking/Transactions.php b/app/Http/Controllers/Banking/Transactions.php index 9ec181b73..0daceef6a 100644 --- a/app/Http/Controllers/Banking/Transactions.php +++ b/app/Http/Controllers/Banking/Transactions.php @@ -22,7 +22,7 @@ class Transactions extends Controller { $accounts = Account::enabled()->orderBy('name')->pluck('name', 'id'); - $types = collect(['expense' => 'Expense', 'income' => 'Income']) + $types = collect(['expense' => trans_choice('general.expenses', 1), 'income' => trans_choice('general.incomes', 1)]) ->prepend(trans('general.all_type', ['type' => trans_choice('general.types', 2)]), ''); $request_type = !request()->has('type') ? ['income', 'expense'] : request('type'); diff --git a/app/Http/Controllers/Common/Items.php b/app/Http/Controllers/Common/Items.php index 180a95499..1f99856f9 100644 --- a/app/Http/Controllers/Common/Items.php +++ b/app/Http/Controllers/Common/Items.php @@ -50,9 +50,9 @@ class Items extends Controller */ public function create() { - $categories = Category::item()->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::item()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); - $taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id'); + $taxes = Tax::enabled()->orderBy('name')->get()->take(setting('default.select_limit'))->pluck('title', 'id'); return view('common.items.create', compact('categories', 'taxes')); } diff --git a/app/Http/Controllers/Modals/Items.php b/app/Http/Controllers/Modals/Items.php index 0c5f50f46..23cac8104 100644 --- a/app/Http/Controllers/Modals/Items.php +++ b/app/Http/Controllers/Modals/Items.php @@ -30,7 +30,7 @@ class Items extends Controller */ public function create(IRequest $request) { - $categories = Category::item()->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::item()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); $taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id'); diff --git a/app/Http/Controllers/Purchases/Bills.php b/app/Http/Controllers/Purchases/Bills.php index a26f33f28..4fef9896c 100644 --- a/app/Http/Controllers/Purchases/Bills.php +++ b/app/Http/Controllers/Purchases/Bills.php @@ -39,13 +39,7 @@ class Bills extends Controller { $bills = Bill::with('contact', 'transactions')->collect(['billed_at'=> 'desc']); - $vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id'); - - $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); - - $statuses = $this->getBillStatuses(); - - return $this->response('purchases.bills.index', compact('bills', 'vendors', 'categories', 'statuses')); + return $this->response('purchases.bills.index', compact('bills')); } /** @@ -96,7 +90,7 @@ class Bills extends Controller */ public function create() { - $vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id'); + $vendors = Contact::vendor()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); $currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray(); @@ -106,7 +100,7 @@ class Bills extends Controller $taxes = Tax::enabled()->orderBy('name')->get(); - $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); $number = $this->getNextBillNumber(); @@ -192,7 +186,7 @@ class Bills extends Controller */ public function edit(Bill $bill) { - $vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id'); + $vendors = Contact::vendor()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); $currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray(); @@ -202,7 +196,7 @@ class Bills extends Controller $taxes = Tax::enabled()->orderBy('name')->get(); - $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); return view('purchases.bills.edit', compact('bill', 'vendors', 'currencies', 'currency', 'items', 'taxes', 'categories')); } diff --git a/app/Http/Controllers/Purchases/Payments.php b/app/Http/Controllers/Purchases/Payments.php index 21b4cea43..83b10c9e8 100644 --- a/app/Http/Controllers/Purchases/Payments.php +++ b/app/Http/Controllers/Purchases/Payments.php @@ -32,13 +32,7 @@ class Payments extends Controller { $payments = Transaction::with('account', 'bill', 'category', 'contact')->expense()->isNotTransfer()->collect(['paid_at'=> 'desc']); - $vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id'); - - $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); - - $accounts = Account::enabled()->orderBy('name')->pluck('name', 'id'); - - return $this->response('purchases.payments.index', compact('payments', 'vendors', 'categories', 'accounts')); + return $this->response('purchases.payments.index', compact('payments')); } /** @@ -66,9 +60,9 @@ class Payments extends Controller $currency = Currency::where('code', $account_currency_code)->first(); - $vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id'); + $vendors = Contact::vendor()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); - $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); $payment_methods = Modules::getPaymentMethods(); @@ -154,9 +148,9 @@ class Payments extends Controller $currency = Currency::where('code', $payment->currency_code)->first(); - $vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id'); + $vendors = Contact::vendor()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); - $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); $payment_methods = Modules::getPaymentMethods(); diff --git a/app/Http/Controllers/Sales/Invoices.php b/app/Http/Controllers/Sales/Invoices.php index d15ff5847..252759165 100644 --- a/app/Http/Controllers/Sales/Invoices.php +++ b/app/Http/Controllers/Sales/Invoices.php @@ -40,13 +40,7 @@ class Invoices extends Controller { $invoices = Invoice::with('contact', 'transactions')->collect(['invoice_number'=> 'desc']); - $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id'); - - $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); - - $statuses = $this->getInvoiceStatuses(); - - return $this->response('sales.invoices.index', compact('invoices', 'customers', 'categories', 'statuses')); + return $this->response('sales.invoices.index', compact('invoices')); } /** @@ -99,7 +93,7 @@ class Invoices extends Controller */ public function create() { - $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id'); + $customers = Contact::customer()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); $currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray(); @@ -109,7 +103,7 @@ class Invoices extends Controller $taxes = Tax::enabled()->orderBy('name')->get(); - $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); $number = $this->getNextInvoiceNumber(); @@ -195,7 +189,7 @@ class Invoices extends Controller */ public function edit(Invoice $invoice) { - $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id'); + $customers = Contact::customer()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); $currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray(); @@ -205,7 +199,7 @@ class Invoices extends Controller $taxes = Tax::enabled()->orderBy('name')->get(); - $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); return view('sales.invoices.edit', compact('invoice', 'customers', 'currencies', 'currency', 'items', 'taxes', 'categories')); } diff --git a/app/Http/Controllers/Sales/Revenues.php b/app/Http/Controllers/Sales/Revenues.php index ead04da46..d13d54a9d 100644 --- a/app/Http/Controllers/Sales/Revenues.php +++ b/app/Http/Controllers/Sales/Revenues.php @@ -32,13 +32,7 @@ class Revenues extends Controller { $revenues = Transaction::with('account', 'category', 'contact', 'invoice')->income()->isNotTransfer()->collect(['paid_at'=> 'desc']); - $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id'); - - $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); - - $accounts = Account::enabled()->orderBy('name')->pluck('name', 'id'); - - return $this->response('sales.revenues.index', compact('revenues', 'customers', 'categories', 'accounts')); + return $this->response('sales.revenues.index', compact('revenues')); } /** @@ -66,9 +60,9 @@ class Revenues extends Controller $currency = Currency::where('code', $account_currency_code)->first(); - $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id'); + $customers = Contact::customer()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); - $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); $payment_methods = Modules::getPaymentMethods(); @@ -154,9 +148,9 @@ class Revenues extends Controller $currency = Currency::where('code', $revenue->currency_code)->first(); - $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id'); + $customers = Contact::customer()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); - $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); $payment_methods = Modules::getPaymentMethods(); diff --git a/app/Http/Controllers/Settings/Defaults.php b/app/Http/Controllers/Settings/Defaults.php index 818cfaf8c..ea1fd0f65 100644 --- a/app/Http/Controllers/Settings/Defaults.php +++ b/app/Http/Controllers/Settings/Defaults.php @@ -17,8 +17,8 @@ class Defaults extends Controller $currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code'); - $sales_categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); - $purchases_categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); + $sales_categories = Category::income()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); + $purchases_categories = Category::expense()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id'); $taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id'); diff --git a/app/Providers/Form.php b/app/Providers/Form.php index 69395ae74..24d19c34b 100644 --- a/app/Providers/Form.php +++ b/app/Providers/Form.php @@ -59,6 +59,10 @@ class Form extends Provider 'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required'], 'col' => 'col-md-6', 'group_class' => null ]); + Facade::component('multiSelectRemoteAddNewGroup', 'partials.form.multi_select_remote_add_new_group', [ + 'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required', 'path' => ''], '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 ]); @@ -79,6 +83,10 @@ class Form extends Provider 'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required'], 'col' => 'col-md-6', 'group_class' => null ]); + Facade::component('selectRemoteAddNewGroup', 'partials.form.select_remote_add_new_group', [ + 'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required', 'path' => ''], 'col' => 'col-md-6', 'group_class' => null + ]); + Facade::component('textareaGroup', 'partials.form.textarea_group', [ 'name', 'text', 'icon', 'value' => null, 'attributes' => ['rows' => '3'], 'col' => 'col-md-12', 'group_class' => null ]); diff --git a/config/setting.php b/config/setting.php index 8f0ce3c14..eb59a6b44 100644 --- a/config/setting.php +++ b/config/setting.php @@ -120,6 +120,7 @@ return [ 'locale' => env('SETTING_FALLBACK_DEFAULT_LOCALE', 'en-GB'), 'list_limit' => env('SETTING_FALLBACK_DEFAULT_LIST_LIMIT', '25'), 'payment_method' => env('SETTING_FALLBACK_DEFAULT_PAYMENT_METHOD', 'offline-payments.cash.1'), + 'select_limit' => env('SETTING_FALLBACK_DEFAULT_SELECT_LIMIT', '10'), ], 'email' => [ 'protocol' => env('SETTING_FALLBACK_EMAIL_PROTOCOL', 'mail'), diff --git a/resources/views/common/items/create.blade.php b/resources/views/common/items/create.blade.php index 62023f1a7..f3f90ca52 100644 --- a/resources/views/common/items/create.blade.php +++ b/resources/views/common/items/create.blade.php @@ -27,7 +27,7 @@ {{ Form::textGroup('purchase_price', trans('items.purchase_price'), 'money-bill-wave-alt') }} - {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, null, ['path' => route('modals.categories.create') . '?type=item']) }} + {{ Form::selectRemoteAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, null, ['path' => route('modals.categories.create') . '?type=item', 'remote_action' => route('categories.index'). '?type=item', 'remote_type' => 'category']) }} {{ Form::fileGroup('picture', trans_choice('general.pictures', 1), 'plus') }} diff --git a/resources/views/common/items/edit.blade.php b/resources/views/common/items/edit.blade.php index e41c742ae..8e429d902 100644 --- a/resources/views/common/items/edit.blade.php +++ b/resources/views/common/items/edit.blade.php @@ -28,7 +28,7 @@ {{ Form::textGroup('purchase_price', trans('items.purchase_price'), 'money-bill-wave-alt') }} - {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, $item->category_id, ['path' => route('modals.categories.create') . '?type=item']) }} + {{ Form::selectRemoteAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, $item->category_id, ['path' => route('modals.categories.create') . '?type=item', 'remote_action' => route('categories.index'). '?type=item', 'remote_type' => 'category']) }} {{ Form::fileGroup('picture', trans_choice('general.pictures', 1)) }} diff --git a/resources/views/modals/items/create.blade.php b/resources/views/modals/items/create.blade.php index 64f64fa16..ba7250919 100644 --- a/resources/views/modals/items/create.blade.php +++ b/resources/views/modals/items/create.blade.php @@ -18,7 +18,7 @@ {{ Form::textGroup('purchase_price', trans('items.purchase_price'), 'money-bill-wave-alt') }} - {{ Form::selectGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, null) }} + {{ Form::selectRemoteGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, null, ['remote_action' => route('categories.index'). '?type=item', 'remote_type' => 'category']) }} {!! Form::hidden('enabled', '1', []) !!} diff --git a/resources/views/partials/form/multi_select_remote_add_new_group.blade.php b/resources/views/partials/form/multi_select_remote_add_new_group.blade.php new file mode 100644 index 000000000..b00f49516 --- /dev/null +++ b/resources/views/partials/form/multi_select_remote_add_new_group.blade.php @@ -0,0 +1,98 @@ +@stack($name . '_input_start') + + + +@stack($name . '_input_end') diff --git a/resources/views/partials/form/select_remote_add_new_group.blade.php b/resources/views/partials/form/select_remote_add_new_group.blade.php new file mode 100644 index 000000000..542acef27 --- /dev/null +++ b/resources/views/partials/form/select_remote_add_new_group.blade.php @@ -0,0 +1,90 @@ +@stack($name . '_input_start') + + + +@stack($name . '_input_end') diff --git a/resources/views/purchases/bills/create.blade.php b/resources/views/purchases/bills/create.blade.php index f730ba22c..889c5d671 100644 --- a/resources/views/purchases/bills/create.blade.php +++ b/resources/views/purchases/bills/create.blade.php @@ -17,7 +17,7 @@
- {{ Form::selectAddNewGroup('contact_id', trans_choice('general.vendors', 1), 'user', $vendors, config('general.vendors'), ['required' => 'required', 'path' => route('modals.vendors.create'), 'change' => 'onChangeContact']) }} + {{ Form::selectRemoteAddNewGroup('contact_id', trans_choice('general.vendors', 1), 'user', $vendors, setting('default.contact'), ['required' => 'required', 'change' => 'onChangeContact', 'path' => route('modals.vendors.create'), 'remote_action' => route('vendors.index'), 'remote_type' => 'vendor']) }} {{ Form::selectAddNewGroup('currency_code', trans_choice('general.currencies', 1), 'exchange-alt', $currencies, setting('default.currency'), ['required' => 'required', 'model' => 'form.currency_code', 'path' => route('modals.currencies.create'), 'field' => ['key' => 'code', 'value' => 'name'], 'change' => 'onChangeCurrency']) }} @@ -194,7 +194,7 @@ {{ Form::textareaGroup('notes', trans_choice('general.notes', 2)) }} - {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('default.expense_category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=expense']) }} + {{ Form::selectRemoteAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, setting('default.expense_category'), ['required' => 'required', 'path' => route('modals.categories.create') . '?type=expense', 'remote_action' => route('categories.index'). '?type=expense', 'remote_type' => 'category']) }} {{ Form::recurring('create') }} diff --git a/resources/views/purchases/bills/edit.blade.php b/resources/views/purchases/bills/edit.blade.php index 4f0218830..e665d1bd3 100644 --- a/resources/views/purchases/bills/edit.blade.php +++ b/resources/views/purchases/bills/edit.blade.php @@ -18,7 +18,7 @@
- {{ Form::selectAddNewGroup('contact_id', trans_choice('general.vendors', 1), 'user', $vendors, $bill->contact_id, ['required' => 'required', 'path' => route('modals.vendors.create'), 'change' => 'onChangeContact']) }} + {{ Form::selectRemoteAddNewGroup('contact_id', trans_choice('general.vendors', 1), 'user', $vendors, $bill->contact_id, ['required' => 'required', 'change' => 'onChangeContact', 'path' => route('modals.vendors.create'), 'remote_action' => route('vendors.index'), 'remote_type' => 'vendor']) }} {{ Form::selectAddNewGroup('currency_code', trans_choice('general.currencies', 1), 'exchange-alt', $currencies, $bill->currency_code, ['required' => 'required', 'model' => 'form.currency_code', 'path' => route('modals.currencies.create'), 'field' => ['key' => 'code', 'value' => 'name'], 'change' => 'onChangeCurrency']) }} @@ -195,7 +195,7 @@ {{ Form::textareaGroup('notes', trans_choice('general.notes', 2)) }} - {{ Form::selectAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, $bill->category_id, ['required' => 'required', 'path' => route('modals.categories.create') . '?type=expense']) }} + {{ Form::selectRemoteAddNewGroup('category_id', trans_choice('general.categories', 1), 'folder', $categories, $bill->category_id, ['required' => 'required', 'path' => route('modals.categories.create') . '?type=expense', 'remote_action' => route('categories.index'). '?type=expense', 'remote_type' => 'category']) }} {{ Form::recurring('edit', $bill) }} diff --git a/resources/views/purchases/bills/index.blade.php b/resources/views/purchases/bills/index.blade.php index 97f715f75..70af59814 100644 --- a/resources/views/purchases/bills/index.blade.php +++ b/resources/views/purchases/bills/index.blade.php @@ -67,7 +67,7 @@