From 08f349c42ccd6a27ef2552605b0cbe2a70d4a190 Mon Sep 17 00:00:00 2001 From: denisdulici Date: Mon, 9 Mar 2020 18:07:16 +0300 Subject: [PATCH] fixed currency conversion --- app/Abstracts/DocumentModel.php | 4 +- app/Http/Controllers/Portal/Invoices.php | 4 +- app/Http/Controllers/Purchases/Bills.php | 2 +- app/Http/Controllers/Sales/Invoices.php | 2 +- .../Banking/CreateDocumentTransaction.php | 8 ++-- app/Jobs/Banking/CreateTransfer.php | 4 +- app/Jobs/Banking/UpdateTransfer.php | 4 +- app/Models/Banking/Transaction.php | 5 --- app/Traits/Currencies.php | 38 +++++-------------- composer.json | 2 +- 10 files changed, 24 insertions(+), 49 deletions(-) diff --git a/app/Abstracts/DocumentModel.php b/app/Abstracts/DocumentModel.php index c0c7896c0..efd540783 100644 --- a/app/Abstracts/DocumentModel.php +++ b/app/Abstracts/DocumentModel.php @@ -98,7 +98,7 @@ abstract class DocumentModel extends Model $default_model->currency_code = $item->currency_code; $default_model->currency_rate = $currencies[$item->currency_code]; - $default_amount = (double) $default_model->getDivideConvertedAmount(); + $default_amount = (double) $default_model->getAmountConvertedToDefault(); $convert_model = new Transaction(); $convert_model->default_currency_code = $item->currency_code; @@ -106,7 +106,7 @@ abstract class DocumentModel extends Model $convert_model->currency_code = $this->currency_code; $convert_model->currency_rate = $currencies[$this->currency_code]; - $amount = (double) $convert_model->getAmountConvertedFromCustomDefault(); + $amount = (double) $convert_model->getAmountConvertedFromDefault(); } $paid += $amount; diff --git a/app/Http/Controllers/Portal/Invoices.php b/app/Http/Controllers/Portal/Invoices.php index 4abaf5803..24cb48447 100644 --- a/app/Http/Controllers/Portal/Invoices.php +++ b/app/Http/Controllers/Portal/Invoices.php @@ -100,7 +100,7 @@ class Invoices extends Controller if ($invoice->currency_code != $item->currency_code) { $item->default_currency_code = $invoice->currency_code; - $amount = $item->getAmountConvertedFromCustomDefault(); + $amount = $item->getAmountConvertedFromDefault(); } $paid += $amount; @@ -129,7 +129,7 @@ class Invoices extends Controller if ($invoice->currency_code != $item->currency_code) { $item->default_currency_code = $invoice->currency_code; - $amount = $item->getAmountConvertedFromCustomDefault(); + $amount = $item->getAmountConvertedFromDefault(); } $paid += $amount; diff --git a/app/Http/Controllers/Purchases/Bills.php b/app/Http/Controllers/Purchases/Bills.php index e56108269..661445943 100644 --- a/app/Http/Controllers/Purchases/Bills.php +++ b/app/Http/Controllers/Purchases/Bills.php @@ -371,7 +371,7 @@ class Bills extends Controller if ($bill->currency_code != $item->currency_code) { $item->default_currency_code = $bill->currency_code; - $amount = $item->getAmountConvertedFromCustomDefault(); + $amount = $item->getAmountConvertedFromDefault(); } $paid += $amount; diff --git a/app/Http/Controllers/Sales/Invoices.php b/app/Http/Controllers/Sales/Invoices.php index 66eda1591..38a2d66e2 100644 --- a/app/Http/Controllers/Sales/Invoices.php +++ b/app/Http/Controllers/Sales/Invoices.php @@ -447,7 +447,7 @@ class Invoices extends Controller if ($invoice->currency_code != $item->currency_code) { $item->default_currency_code = $invoice->currency_code; - $amount = $item->getAmountConvertedFromCustomDefault(); + $amount = $item->getAmountConvertedFromDefault(); } $paid += $amount; diff --git a/app/Jobs/Banking/CreateDocumentTransaction.php b/app/Jobs/Banking/CreateDocumentTransaction.php index 201c7a526..400f59d47 100644 --- a/app/Jobs/Banking/CreateDocumentTransaction.php +++ b/app/Jobs/Banking/CreateDocumentTransaction.php @@ -92,7 +92,7 @@ class CreateDocumentTransaction extends Job $default_amount_model->currency_code = $this->request['currency_code']; $default_amount_model->currency_rate = $currencies[$this->request['currency_code']]; - $default_amount = (double) $default_amount_model->getDivideConvertedAmount(); + $default_amount = (double) $default_amount_model->getAmountConvertedToDefault(); $convert_amount_model = new Transaction(); $convert_amount_model->default_currency_code = $this->request['currency_code']; @@ -100,7 +100,7 @@ class CreateDocumentTransaction extends Job $convert_amount_model->currency_code = $this->model->currency_code; $convert_amount_model->currency_rate = $currencies[$this->model->currency_code]; - $amount = (double) $convert_amount_model->getAmountConvertedFromCustomDefault(); + $amount = (double) $convert_amount_model->getAmountConvertedFromDefault(); } $total_amount -= $this->model->paid; @@ -126,7 +126,7 @@ class CreateDocumentTransaction extends Job $error_amount_model->currency_code = $this->model->currency_code; $error_amount_model->currency_rate = $currencies[$this->model->currency_code]; - $error_amount = (double) $error_amount_model->getDivideConvertedAmount(); + $error_amount = (double) $error_amount_model->getAmountConvertedToDefault(); $convert_amount_model = new Transaction(); $convert_amount_model->default_currency_code = $this->model->currency_code; @@ -134,7 +134,7 @@ class CreateDocumentTransaction extends Job $convert_amount_model->currency_code = $this->request['currency_code']; $convert_amount_model->currency_rate = $currencies[$this->request['currency_code']]; - $error_amount = (double) $convert_amount_model->getAmountConvertedFromCustomDefault(); + $error_amount = (double) $convert_amount_model->getAmountConvertedFromDefault(); } $message = trans('messages.error.over_payment', ['amount' => money($error_amount, $this->request['currency_code'], true)]); diff --git a/app/Jobs/Banking/CreateTransfer.php b/app/Jobs/Banking/CreateTransfer.php index 9c93e53d8..1daaac4a6 100644 --- a/app/Jobs/Banking/CreateTransfer.php +++ b/app/Jobs/Banking/CreateTransfer.php @@ -64,7 +64,7 @@ class CreateTransfer extends Job $default_amount_model->currency_code = $expense_currency_code; $default_amount_model->currency_rate = $currencies[$expense_currency_code]; - $default_amount = $default_amount_model->getAmountDivided(); + $default_amount = $default_amount_model->getAmountConvertedToDefault(); } $transfer_amount = new Transfer(); @@ -74,7 +74,7 @@ class CreateTransfer extends Job $transfer_amount->currency_code = $income_currency_code; $transfer_amount->currency_rate = $currencies[$income_currency_code]; - $amount = $transfer_amount->getAmountConvertedFromCustomDefault(); + $amount = $transfer_amount->getAmountConvertedFromDefault(); } else { $amount = $this->request->get('amount'); } diff --git a/app/Jobs/Banking/UpdateTransfer.php b/app/Jobs/Banking/UpdateTransfer.php index 99a887042..4437936e2 100644 --- a/app/Jobs/Banking/UpdateTransfer.php +++ b/app/Jobs/Banking/UpdateTransfer.php @@ -71,7 +71,7 @@ class UpdateTransfer extends Job $default_amount_model->currency_code = $expense_currency_code; $default_amount_model->currency_rate = $currencies[$expense_currency_code]; - $default_amount = $default_amount_model->getDivideConvertedAmount(); + $default_amount = $default_amount_model->getAmountConvertedToDefault(); } $transfer_amount = new Transfer(); @@ -81,7 +81,7 @@ class UpdateTransfer extends Job $transfer_amount->currency_code = $income_currency_code; $transfer_amount->currency_rate = $currencies[$income_currency_code]; - $amount = $transfer_amount->getAmountConvertedFromCustomDefault(); + $amount = $transfer_amount->getAmountConvertedFromDefault(); } else { $amount = $this->request->get('amount'); } diff --git a/app/Models/Banking/Transaction.php b/app/Models/Banking/Transaction.php index ffd3395a0..c33afb47c 100644 --- a/app/Models/Banking/Transaction.php +++ b/app/Models/Banking/Transaction.php @@ -211,9 +211,4 @@ class Transaction extends Model return $this->getMedia('attachment')->last(); } - - public function getDivideConvertedAmount($format = false) - { - return $this->divide($this->amount, $this->currency_code, $this->currency_rate, $format); - } } diff --git a/app/Traits/Currencies.php b/app/Traits/Currencies.php index 48693ddaa..09a6579cb 100644 --- a/app/Traits/Currencies.php +++ b/app/Traits/Currencies.php @@ -3,46 +3,31 @@ namespace App\Traits; use Akaunting\Money\Money; -use Akaunting\Money\Currency; trait Currencies { - public function convert($amount, $from, $to, $rate, $format = false) + public function convert($method, $amount, $from, $to, $rate, $format = false) { - $money = Money::$from($amount, $format); + $money = Money::$to($amount, $format); // No need to convert same currency if ($from == $to) { return $format ? $money->format() : $money->getAmount(); } - $money = $money->convert(new Currency($to), (double) $rate); + $money = $money->$method((double) $rate); return $format ? $money->format() : $money->getAmount(); } - public function divide($amount, $code, $rate, $format = false) - { - $money = Money::$code($amount, $format); - - $money = $money->divide((double) $rate); - - return $format ? $money->format() : $money->getAmount(); - } - - public function getAmount($with_tax = true) - { - return $with_tax ? $this->amount : (isset($this->amount_without_tax) ? $this->amount_without_tax : $this->amount); - } - public function convertToDefault($amount, $from, $rate, $format = false) { - return $this->convert($amount, $from, $this->getDefaultCurrency(), $rate, $format); + return $this->convert('divide', $amount, $from, $this->getDefaultCurrency(), $rate, $format); } public function convertFromDefault($amount, $to, $rate, $format = false) { - return $this->convert($amount, $this->getDefaultCurrency(), $to, $rate, $format); + return $this->convert('multiply', $amount, $this->getDefaultCurrency(), $to, $rate, $format); } public function getAmountConvertedToDefault($format = false, $with_tax = true) @@ -55,18 +40,13 @@ trait Currencies return $this->convertFromDefault($this->getAmount($with_tax), $this->currency_code, $this->currency_rate, $format); } - public function getAmountConvertedFromCustomDefault($format = false, $with_tax = true) + public function getAmount($with_tax = true) { - return $this->convert($this->getAmount($with_tax), $this->default_currency_code, $this->currency_code, $this->currency_rate, $format); + return $with_tax ? $this->amount : (isset($this->amount_without_tax) ? $this->amount_without_tax : $this->amount); } - public function getAmountDivided($format = false, $with_tax = true) + public function getDefaultCurrency() { - return $this->divide($this->getAmount($with_tax), $this->currency_code, $this->currency_rate, $format); - } - - protected function getDefaultCurrency() - { - return setting('default.currency', 'USD'); + return !empty($this->default_currency_code) ? $this->default_currency_code : setting('default.currency', 'USD'); } } diff --git a/composer.json b/composer.json index f5deaa9c3..d9baa9b04 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ "akaunting/language": "1.0.*", "akaunting/menu": "1.0.*", "akaunting/module": "1.0.*", - "akaunting/money": "1.0.*", + "akaunting/money": "1.1.*", "akaunting/setting": "1.1.*", "akaunting/version": "1.0.*", "barryvdh/laravel-debugbar": "3.2.*",