From 805dbb8a7123b0ae6f2dada6600af14928906a71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cihan=20=C5=9Eent=C3=BCrk?= <53110792+CihanSenturk@users.noreply.github.com> Date: Thu, 27 Feb 2025 13:00:24 +0300 Subject: [PATCH] fixed document line discount calculation issue --- app/Jobs/Document/CreateDocumentItem.php | 12 ++++++++++-- app/Jobs/Document/CreateDocumentItemsAndTotals.php | 12 +++++++----- app/Models/Document/DocumentItem.php | 3 ++- .../components/documents/form/line-item.blade.php | 12 ++++++++++-- .../components/documents/template/classic.blade.php | 4 ++++ .../components/documents/template/default.blade.php | 4 ++++ .../components/documents/template/modern.blade.php | 4 ++++ 7 files changed, 41 insertions(+), 10 deletions(-) diff --git a/app/Jobs/Document/CreateDocumentItem.php b/app/Jobs/Document/CreateDocumentItem.php index fc108bdbf..dc232c889 100644 --- a/app/Jobs/Document/CreateDocumentItem.php +++ b/app/Jobs/Document/CreateDocumentItem.php @@ -47,10 +47,12 @@ class CreateDocumentItem extends Job implements HasOwner, HasSource, ShouldCreat // Apply total discount to amount if (! empty($this->request['global_discount'])) { if ($this->request['global_discount_type'] === 'percentage') { - $item_discounted_amount -= $item_discounted_amount * ($this->request['global_discount'] / 100); + $global_discount = $item_discounted_amount * ($this->request['global_discount'] / 100); } else { - $item_discounted_amount -= $this->request['global_discount']; + $global_discount = $this->request['global_discount']; } + + $item_discounted_amount -= $global_discount; } $tax_amount = 0; @@ -153,6 +155,12 @@ class CreateDocumentItem extends Job implements HasOwner, HasSource, ShouldCreat } } + if (! empty($global_discount)) { + $actual_price_item += $global_discount; + $item_amount += $global_discount; + $item_discounted_amount += $global_discount; + } + $this->request['company_id'] = $this->document->company_id; $this->request['type'] = $this->document->type; $this->request['document_id'] = $this->document->id; diff --git a/app/Jobs/Document/CreateDocumentItemsAndTotals.php b/app/Jobs/Document/CreateDocumentItemsAndTotals.php index 4b5771e9b..e46d494c2 100644 --- a/app/Jobs/Document/CreateDocumentItemsAndTotals.php +++ b/app/Jobs/Document/CreateDocumentItemsAndTotals.php @@ -70,7 +70,8 @@ class CreateDocumentItemsAndTotals extends Job implements HasOwner, HasSource, S if (! empty($this->request['discount'])) { if ($this->request['discount_type'] === 'percentage') { - $discount_total = ($sub_total - $discount_amount_total) * ($this->request['discount'] / 100); + //$discount_total = ($sub_total - $discount_amount_total) * ($this->request['discount'] / 100); + $discount_total = $sub_total * ($this->request['discount'] / 100); } else { $discount_total = $this->request['discount']; } @@ -173,17 +174,16 @@ class CreateDocumentItemsAndTotals extends Job implements HasOwner, HasSource, S foreach ((array) $this->request['items'] as $key => $item) { $item['global_discount'] = 0; - /* // Disable this lines for global discount issue fixed ( https://github.com/akaunting/akaunting/issues/2797 ) + // Disable this lines for global discount issue fixed ( https://github.com/akaunting/akaunting/issues/2797 ) if (! empty($this->request['discount'])) { if (isset($for_fixed_discount)) { $item['global_discount'] = ($for_fixed_discount[$key] / ($for_fixed_discount['total'] / 100)) * ($this->request['discount'] / 100); - $item['global_discount_type'] = ''; + $item['global_discount_type'] = $this->request['discount_type']; } else { $item['global_discount'] = $this->request['discount']; $item['global_discount_type'] = $this->request['discount_type']; } } - */ $item['created_from'] = $this->request['created_from']; $item['created_by'] = $this->request['created_by']; @@ -211,7 +211,9 @@ class CreateDocumentItemsAndTotals extends Job implements HasOwner, HasSource, S $document_item = $this->dispatch(new CreateDocumentItem($this->document, $item)); - $item_amount = (double) $item['price'] * (double) $item['quantity']; + # This line changed for discount calcualter issue + //$item_amount = (double) $item['price'] * (double) $item['quantity']; + $item_amount = $document_item->total; $discount_amount = 0; diff --git a/app/Models/Document/DocumentItem.php b/app/Models/Document/DocumentItem.php index 547247664..ce75ea931 100644 --- a/app/Models/Document/DocumentItem.php +++ b/app/Models/Document/DocumentItem.php @@ -50,6 +50,7 @@ class DocumentItem extends Model 'price' => 'double', 'total' => 'double', 'tax' => 'double', + 'discount_rate' => 'double', 'deleted_at' => 'datetime', ]; @@ -132,7 +133,7 @@ class DocumentItem extends Model return $text; } - public function getDiscountRateAttribute(int $value = 0) + public function getDiscountRateAttribute($value = 0) { $discount_rate = 0; diff --git a/resources/views/components/documents/form/line-item.blade.php b/resources/views/components/documents/form/line-item.blade.php index 7c46c1ae2..6d0e09b63 100644 --- a/resources/views/components/documents/form/line-item.blade.php +++ b/resources/views/components/documents/form/line-item.blade.php @@ -321,6 +321,10 @@ ] ] ])}}" + :option_field="{{ json_encode([ + 'key' => 'id', + 'value' => 'title' + ]) }}" @interface="row_tax.id = $event" @change="onCalculateTotal()" @new="dynamic_taxes.push($event)" @@ -331,7 +335,7 @@