From cef1ee1b4273aba3ad6867b2e298374e06503f1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=BCneyt=20=C5=9Eent=C3=BCrk?= Date: Sun, 1 Aug 2021 21:47:02 +0300 Subject: [PATCH] close #2213 Fixed: Document add new tax not calculate totals --- resources/assets/js/views/common/documents.js | 132 +++++++++--------- .../documents/form/line-item.blade.php | 6 +- 2 files changed, 73 insertions(+), 65 deletions(-) diff --git a/resources/assets/js/views/common/documents.js b/resources/assets/js/views/common/documents.js index 3f252dc83..6137007ce 100644 --- a/resources/assets/js/views/common/documents.js +++ b/resources/assets/js/views/common/documents.js @@ -26,70 +26,72 @@ const app = new Vue({ ], data: function () { - return { - form: new Form('document'), - bulk_action: new BulkAction('documents'), - totals: { - sub: 0, - item_discount: '', - discount: '', - discount_text: false, - taxes: [], - total: 0 - }, - transaction: [], - edit: { - status: false, - currency: false, - items: 0, - }, - colspan: 6, - discount: false, - tax: false, - discounts: [], - tax_id: [], - - items: [], - taxes: [], - page_loaded: false, - currencies: [], - min_due_date: false, - currency_symbol: { - "name":"US Dollar", - "code":"USD", - "rate":1, - "precision":2, - "symbol":"$", - "symbol_first":1, - "decimal_mark":".", - "thousands_separator":"," - }, - dropdown_visible: true - } + return { + form: new Form('document'), + bulk_action: new BulkAction('documents'), + totals: { + sub: 0, + item_discount: '', + discount: '', + discount_text: false, + taxes: [], + total: 0 + }, + transaction: [], + edit: { + status: false, + currency: false, + items: 0, + }, + colspan: 6, + discount: false, + tax: false, + discounts: [], + tax_id: [], + + items: [], + taxes: [], + page_loaded: false, + currencies: [], + min_due_date: false, + currency_symbol: { + "name":"US Dollar", + "code":"USD", + "rate":1, + "precision":2, + "symbol":"$", + "symbol_first":1, + "decimal_mark":".", + "thousands_separator":"," + }, + dropdown_visible: true, + dynamic_taxes: [], + } }, mounted() { - if ((document.getElementById('items') != null) && (document.getElementById('items').rows)) { - this.colspan = document.getElementById("items").rows[0].cells.length - 1; - } - - if (!this.edit.status) { - this.dropdown_visible = false; - } - - this.currency_symbol.rate = this.form.currency_rate; + if ((document.getElementById('items') != null) && (document.getElementById('items').rows)) { + this.colspan = document.getElementById("items").rows[0].cells.length - 1; + } - if (company_currency_code) { - let default_currency_symbol = null; + if (!this.edit.status) { + this.dropdown_visible = false; + } + + this.currency_symbol.rate = this.form.currency_rate; + + if (company_currency_code) { + let default_currency_symbol = null; + + for (let symbol of this.currencies) { + if(symbol.code == company_currency_code) { + default_currency_symbol = symbol.symbol; + } + } + + this.currency_symbol.symbol = default_currency_symbol; + } - for (let symbol of this.currencies) { - if(symbol.code == company_currency_code) { - default_currency_symbol = symbol.symbol; - } - } - this.currency_symbol.symbol = default_currency_symbol; - } - }, methods: { @@ -97,7 +99,7 @@ const app = new Vue({ let global_discount = parseFloat(this.form.discount); let discount_total = 0; let line_item_discount_total = 0; - let taxes = document_taxes; + let taxes = this.dynamic_taxes; let sub_total = 0; let totals_taxes = []; let grand_total = 0; @@ -253,7 +255,7 @@ const app = new Vue({ this.form.items.forEach(function(form_item, form_index) { let item = this.items[form_index]; - + for (const [key, value] of Object.entries(item)) { if (key == 'add_tax' || key == 'tax_ids' || key == 'add_discount') { continue @@ -349,7 +351,7 @@ const app = new Vue({ let selected_tax; - document_taxes.forEach(function(tax) { + this.dynamic_taxes.forEach(function(tax) { if (tax.id == this.tax_id) { selected_tax = tax; } @@ -682,7 +684,7 @@ const app = new Vue({ this.page_loaded = true; - if (document_currencies) { + if (typeof document_currencies !== 'undefined' && document_currencies) { this.currencies = document_currencies; this.currencies.forEach(function (currency, index) { @@ -693,5 +695,9 @@ const app = new Vue({ } }, this); } + + if (typeof document_taxes !== 'undefined' && document_taxes) { + this.dynamic_taxes = document_taxes; + } } }); diff --git a/resources/views/components/documents/form/line-item.blade.php b/resources/views/components/documents/form/line-item.blade.php index 1a5ae8ec4..7bc75000f 100644 --- a/resources/views/components/documents/form/line-item.blade.php +++ b/resources/views/components/documents/form/line-item.blade.php @@ -215,11 +215,12 @@ :placeholder="'{{ trans('general.form.select.field', ['field' => trans_choice('general.taxes', 1)]) }}'" :name="'items.' + index + '.taxes.' + row_tax_index" :options="{{ json_encode($taxes->pluck('title', 'id')) }}" + :dynamic-options="dynamic_taxes" :disabled-options="form.items[index].tax_ids" :value="row_tax.id" @interface="row_tax.id = $event" @change="onCalculateTotal()" - @new="taxes.push($event)" + @new="dynamic_taxes.push($event)" :form-error="form.errors.get('items.' + index + '.taxes')" :no-data-text="'{{ trans('general.no_data') }}'" :no-matching-data-text="'{{ trans('general.no_matching_data') }}'" @@ -254,6 +255,7 @@ :placeholder="'{{ trans('general.form.select.field', ['field' => trans_choice('general.taxes', 1)]) }}'" :name="'items.' + index + '.taxes.999'" :options="{{ json_encode($taxes->pluck('title', 'id')) }}" + :dynamic-options="dynamic_taxes" :disabled-options="form.items[index].tax_ids" :value="tax_id" :add-new="{{ json_encode([ @@ -279,7 +281,7 @@ ])}}" @interface="tax_id = $event" @visible-change="onSelectedTax(index)" - @new="taxes.push($event)" + @new="dynamic_taxes.push($event)" :form-error="form.errors.get('items.' + index + '.taxes')" :no-data-text="'{{ trans('general.no_data') }}'" :no-matching-data-text="'{{ trans('general.no_matching_data') }}'"