From e8720c6a8af27700495f2371ef107467dbe4b18d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20=C3=87ak=C4=B1rel?= Date: Sun, 15 Aug 2021 17:20:39 +0100 Subject: [PATCH] Adding discount as an amount #kbcqjv --- app/Jobs/Document/CreateDocumentItem.php | 22 ++++++++++--------- .../Document/CreateDocumentItemsAndTotals.php | 18 ++++++++++----- resources/assets/js/views/common/documents.js | 12 +++++----- .../documents/form/line-item.blade.php | 8 +++---- .../documents/form/totals.blade.php | 8 +++---- .../documents/template/line-item.blade.php | 6 ++++- 6 files changed, 44 insertions(+), 30 deletions(-) diff --git a/app/Jobs/Document/CreateDocumentItem.php b/app/Jobs/Document/CreateDocumentItem.php index 07f1565fa..1f5dffb50 100644 --- a/app/Jobs/Document/CreateDocumentItem.php +++ b/app/Jobs/Document/CreateDocumentItem.php @@ -43,16 +43,13 @@ class CreateDocumentItem extends Job // Apply line discount to amount if (!empty($this->request['discount'])) { - $discount += $this->request['discount']; + $discount = $this->request['discount']; - $item_discounted_amount = $item_amount -= ($item_amount * ($this->request['discount'] / 100)); - } - - // Apply global discount to amount - if (!empty($this->request['global_discount'])) { - $discount += $this->request['global_discount']; - - $item_discounted_amount = $item_amount - ($item_amount * ($this->request['global_discount'] / 100)); + if ($this->request['discount_type'] === 'normal') { + $item_discounted_amount = $item_amount -= ($item_amount * ($this->request['discount'] / 100)); + } else { + $item_discounted_amount = $item_amount -= $this->request['discount']; + } } $tax_amount = 0; @@ -153,7 +150,11 @@ class CreateDocumentItem extends Job $item_tax_total += $tax_amount; } - $item_amount = ($item_amount - $item_tax_total) / (1 - $discount / 100); + if (!empty($this->request['discount_type']) && $this->request['discount_type'] === 'normal') { + $item_amount = ($item_amount - $item_tax_total) / (1 - $discount / 100); + } else { + $item_amount = ($item_amount - $item_tax_total) - $discount; + } } if ($compounds) { @@ -185,6 +186,7 @@ class CreateDocumentItem extends Job $this->request['quantity'] = (double) $this->request['quantity']; $this->request['price'] = round($this->request['price'], $precision); $this->request['tax'] = round($item_tax_total, $precision); + $this->request['discount_type'] = !empty($this->request['discount_type']) ? $this->request['discount_type'] : 'normal'; $this->request['discount_rate'] = !empty($this->request['discount']) ? $this->request['discount'] : 0; $this->request['total'] = round($item_amount, $precision); diff --git a/app/Jobs/Document/CreateDocumentItemsAndTotals.php b/app/Jobs/Document/CreateDocumentItemsAndTotals.php index a325ec2f2..7d94b53e2 100644 --- a/app/Jobs/Document/CreateDocumentItemsAndTotals.php +++ b/app/Jobs/Document/CreateDocumentItemsAndTotals.php @@ -67,15 +67,17 @@ class CreateDocumentItemsAndTotals extends Job 'sort_order' => $sort_order, ]); - $this->request['amount'] -= $discount_amount_total; - $sort_order++; } if (!empty($this->request['discount'])) { - $discount_total = ($sub_total - $discount_amount_total) * ($this->request['discount'] / 100); + if ($this->request['discount_type'] === 'normal') { + $discount_total = $sub_total * ($this->request['discount'] / 100); + } else { + $discount_total = $this->request['discount']; + } - DocumentTotal::create([ + DocumentTotal::create([ 'company_id' => $this->document->company_id, 'type' => $this->document->type, 'document_id' => $this->document->id, @@ -193,11 +195,15 @@ class CreateDocumentItemsAndTotals extends Job $discount_amount = 0; if (!empty($item['discount'])) { - $discount_amount = ($item_amount * ($item['discount'] / 100)); + if ($item['discount_type'] === 'normal') { + $discount_amount = ($item_amount * ($item['discount'] / 100)); + } else { + $discount_amount = $item['discount']; + } } // Calculate totals - $sub_total += $document_item->total + $discount_amount; + $sub_total += $document_item->total; $discount_amount_total += $discount_amount; diff --git a/resources/assets/js/views/common/documents.js b/resources/assets/js/views/common/documents.js index 573fd13f2..cfc4ce7f1 100644 --- a/resources/assets/js/views/common/documents.js +++ b/resources/assets/js/views/common/documents.js @@ -70,7 +70,7 @@ const app = new Vue({ }, mounted() { - this.form.discount_type = 'percentage'; + this.form.discount_type = 'normal'; if ((document.getElementById('items') != null) && (document.getElementById('items').rows)) { this.colspan = document.getElementById("items").rows[0].cells.length - 1; @@ -118,7 +118,7 @@ const app = new Vue({ let line_discount_amount = 0; if (item.discount) { - if (item.discount_type === 'percentage') { + if (item.discount_type === 'normal') { if (item.discount > 100) { item.discount = 100; } @@ -249,7 +249,7 @@ const app = new Vue({ // Apply discount to total if (global_discount) { - if (this.form.discount_type === 'percentage') { + if (this.form.discount_type === 'normal') { discount_total = parseFloat(sub_total + inclusive_tax_total) * (global_discount / 100); } else { discount_total = global_discount; @@ -398,7 +398,7 @@ const app = new Vue({ }, onAddLineDiscount(item_index) { - this.items[item_index].discount_type = 'percentage'; + this.items[item_index].discount_type = 'normal'; this.items[item_index].add_discount = true; }, @@ -415,7 +415,7 @@ const app = new Vue({ onAddTotalDiscount() { let discount = document.getElementById('pre-discount').value; - if (this.form.discount_type === 'percentage') { + if (this.form.discount_type === 'normal') { if (discount < 0) { discount = 0; } else if (discount > 100) { @@ -649,6 +649,7 @@ const app = new Vue({ price: (item.price).toFixed(2), tax_ids: item.tax_ids, discount: item.discount_rate, + discount_type: item.discount_type, total: (item.total).toFixed(2) }); @@ -686,6 +687,7 @@ const app = new Vue({ tax_ids: item_taxes, add_discount: (item.discount_rate) ? true : false, discount: item.discount_rate, + discount_type: item.discount_type, total: (item.total).toFixed(2), // @todo // invoice_item_checkbox_sample: [], diff --git a/resources/views/components/documents/form/line-item.blade.php b/resources/views/components/documents/form/line-item.blade.php index 9599d6ca0..a1128842c 100644 --- a/resources/views/components/documents/form/line-item.blade.php +++ b/resources/views/components/documents/form/line-item.blade.php @@ -163,12 +163,12 @@
- -
- -
{!! Form::number('pre_discount', null, ['id' => 'pre-discount', 'class' => 'form-control', 'v-model' => 'form.discount']) !!} diff --git a/resources/views/components/documents/template/line-item.blade.php b/resources/views/components/documents/template/line-item.blade.php index e2777ab25..0472b8053 100644 --- a/resources/views/components/documents/template/line-item.blade.php +++ b/resources/views/components/documents/template/line-item.blade.php @@ -33,7 +33,11 @@ @if (!$hideDiscount) @if (in_array(setting('localisation.discount_location', 'total'), ['item', 'both'])) @stack('discount_td_start') - {{ $item->discount }} + @if ($item->discount_type === 'normal') + {{ $item->discount }} + @else + @money($item->discount, $document->currency_code, true) + @endif @stack('discount_td_end') @endif @endif