From 51503e688ced82aa4ea85a55d0583d404fc529bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Batuhan=20Ba=C5=9F?= Date: Wed, 29 Aug 2018 19:45:50 +0300 Subject: [PATCH] invoice and bill currency issue some fix --- app/Http/Controllers/Common/Items.php | 4 +- app/Http/Controllers/Expenses/Bills.php | 2 +- app/Http/Controllers/Incomes/Invoices.php | 24 ++++--- .../Controllers/Modals/InvoicePayments.php | 70 ++++++++++--------- app/Http/Middleware/Money.php | 6 +- .../views/expenses/bills/create.blade.php | 27 ++++++- resources/views/expenses/bills/edit.blade.php | 29 +++++++- resources/views/expenses/bills/item.blade.php | 1 + .../views/incomes/invoices/create.blade.php | 21 +++--- .../views/incomes/invoices/edit.blade.php | 17 ++++- .../views/incomes/invoices/item.blade.php | 1 + 11 files changed, 140 insertions(+), 62 deletions(-) diff --git a/app/Http/Controllers/Common/Items.php b/app/Http/Controllers/Common/Items.php index 9e24c7df9..414eaa275 100644 --- a/app/Http/Controllers/Common/Items.php +++ b/app/Http/Controllers/Common/Items.php @@ -280,8 +280,8 @@ class Items extends Controller $item_tax_price = ($item->sale_price / 100) * $tax->rate; } - $item->sale_price = $this->convertPrice($item->sale_price, $currency_code, $currency->rate); - $item->purchase_price = $this->convertPrice($item->purchase_price, $currency_code, $currency->rate); + //$item->sale_price = $this->convertPrice($item->sale_price, $currency_code, $currency->rate); + //$item->purchase_price = $this->convertPrice($item->purchase_price, $currency_code, $currency->rate); switch ($type) { case 'bill': diff --git a/app/Http/Controllers/Expenses/Bills.php b/app/Http/Controllers/Expenses/Bills.php index c55c70998..9eda13e4e 100644 --- a/app/Http/Controllers/Expenses/Bills.php +++ b/app/Http/Controllers/Expenses/Bills.php @@ -755,7 +755,7 @@ class Bills extends Controller // it should be integer for amount mask $currency->precision = (int) $currency->precision; - $html = view('expenses.bills.item', compact('item_row', 'taxes'))->render(); + $html = view('expenses.bills.item', compact('item_row', 'taxes', 'currency'))->render(); return response()->json([ 'success' => true, diff --git a/app/Http/Controllers/Incomes/Invoices.php b/app/Http/Controllers/Incomes/Invoices.php index d8d1d57c3..7575c79b6 100644 --- a/app/Http/Controllers/Incomes/Invoices.php +++ b/app/Http/Controllers/Incomes/Invoices.php @@ -76,7 +76,9 @@ class Invoices extends Controller foreach ($invoice->payments as $item) { $default_amount = $item->amount; - if ($invoice->currency_code != $item->currency_code) { + if ($invoice->currency_code == $item->currency_code) { + $amount = (double)$default_amount; + } else { $default_amount_model = new InvoicePayment(); $default_amount_model->default_currency_code = $invoice->currency_code; @@ -85,17 +87,17 @@ class Invoices extends Controller $default_amount_model->currency_rate = $_currencies[$item->currency_code]; $default_amount = (double) $default_amount_model->getDivideConvertedAmount(); + + $convert_amount = new InvoicePayment(); + + $convert_amount->default_currency_code = $item->currency_code; + $convert_amount->amount = $default_amount; + $convert_amount->currency_code = $invoice->currency_code; + $convert_amount->currency_rate = $_currencies[$invoice->currency_code]; + + $amount = (double) $convert_amount->getDynamicConvertedAmount(); } - $convert_amount = new InvoicePayment(); - - $convert_amount->default_currency_code = $item->currency_code; - $convert_amount->amount = $default_amount; - $convert_amount->currency_code = $invoice->currency_code; - $convert_amount->currency_rate = $_currencies[$invoice->currency_code]; - - $amount = (double) $convert_amount->getDynamicConvertedAmount(); - $paid += $amount; } } @@ -892,7 +894,7 @@ class Invoices extends Controller // it should be integer for amount mask $currency->precision = (int) $currency->precision; - $html = view('incomes.invoices.item', compact('item_row', 'taxes'))->render(); + $html = view('incomes.invoices.item', compact('item_row', 'taxes', 'currency'))->render(); return response()->json([ 'success' => true, diff --git a/app/Http/Controllers/Modals/InvoicePayments.php b/app/Http/Controllers/Modals/InvoicePayments.php index b5f6eac45..737dd13a6 100644 --- a/app/Http/Controllers/Modals/InvoicePayments.php +++ b/app/Http/Controllers/Modals/InvoicePayments.php @@ -39,13 +39,13 @@ class InvoicePayments extends Controller $currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray(); - $currency = Currency::where('code', setting('general.default_currency'))->first(); - $account_currency_code = Account::where('id', setting('general.default_account'))->pluck('currency_code')->first(); + $currency = Currency::where('code', $account_currency_code)->first(); + $payment_methods = Modules::getPaymentMethods(); - $invoice->paid = $this->getPaid($invoice); + $paid = $this->getPaid($invoice); // Get Invoice Totals foreach ($invoice->totals as $invoice_total) { @@ -88,7 +88,9 @@ class InvoicePayments extends Controller $default_amount = (double) $request['amount']; - if ($invoice->currency_code != $request['currency_code']) { + if ($invoice->currency_code == $request['currency_code']) { + $amount = $default_amount; + } else { $default_amount_model = new InvoicePayment(); $default_amount_model->default_currency_code = $invoice->currency_code; @@ -97,17 +99,17 @@ class InvoicePayments extends Controller $default_amount_model->currency_rate = $currencies[$request['currency_code']]; $default_amount = (double) $default_amount_model->getDivideConvertedAmount(); + + $convert_amount = new InvoicePayment(); + + $convert_amount->default_currency_code = $request['currency_code']; + $convert_amount->amount = $default_amount; + $convert_amount->currency_code = $invoice->currency_code; + $convert_amount->currency_rate = $currencies[$invoice->currency_code]; + + $amount = (double) $convert_amount->getDynamicConvertedAmount(); } - $convert_amount = new InvoicePayment(); - - $convert_amount->default_currency_code = $request['currency_code']; - $convert_amount->amount = $default_amount; - $convert_amount->currency_code = $invoice->currency_code; - $convert_amount->currency_rate = $currencies[$invoice->currency_code]; - - $amount = (double) $convert_amount->getDynamicConvertedAmount(); - if ($invoice->payments()->count()) { $total_amount -= $this->getPaid($invoice); } @@ -134,18 +136,18 @@ class InvoicePayments extends Controller $error_amount_model->currency_rate = $currencies[$invoice->currency_code]; $error_amount = (double) $error_amount_model->getDivideConvertedAmount(); + + $convert_amount = new InvoicePayment(); + + $convert_amount->default_currency_code = $invoice->currency_code; + $convert_amount->amount = $error_amount; + $convert_amount->currency_code = $request['currency_code']; + $convert_amount->currency_rate = $currencies[$request['currency_code']]; + + $error_amount = (double) $convert_amount->getDynamicConvertedAmount(); } - $convert_amount = new InvoicePayment(); - - $convert_amount->default_currency_code = $invoice->currency_code; - $convert_amount->amount = $error_amount; - $convert_amount->currency_code = $request['currency_code']; - $convert_amount->currency_rate = $currencies[$request['currency_code']]; - - $error_amount = (double) $convert_amount->getDynamicConvertedAmount(); - - $message = trans('messages.error.over_payment', ['amount' => money($error_amount, $request['currency_code'], true)]); + $message = trans('messages.error.over_payment', ['amount' => money($error_amount, $request['currency_code'],true)]); return response()->json([ 'success' => false, @@ -217,7 +219,9 @@ class InvoicePayments extends Controller foreach ($invoice->payments as $item) { $default_amount = $item->amount; - if ($invoice->currency_code != $item->currency_code) { + if ($invoice->currency_code == $item->currency_code) { + $amount = (double) $default_amount; + } else { $default_amount_model = new InvoicePayment(); $default_amount_model->default_currency_code = $invoice->currency_code; @@ -226,17 +230,17 @@ class InvoicePayments extends Controller $default_amount_model->currency_rate = $_currencies[$item->currency_code]; $default_amount = (double) $default_amount_model->getDivideConvertedAmount(); + + $convert_amount = new InvoicePayment(); + + $convert_amount->default_currency_code = $item->currency_code; + $convert_amount->amount = $default_amount; + $convert_amount->currency_code = $invoice->currency_code; + $convert_amount->currency_rate = $_currencies[$invoice->currency_code]; + + $amount = (double) $convert_amount->getDynamicConvertedAmount(); } - $convert_amount = new InvoicePayment(); - - $convert_amount->default_currency_code = $item->currency_code; - $convert_amount->amount = $default_amount; - $convert_amount->currency_code = $invoice->currency_code; - $convert_amount->currency_rate = $_currencies[$invoice->currency_code]; - - $amount = (double) $convert_amount->getDynamicConvertedAmount(); - $paid += $amount; } } diff --git a/app/Http/Middleware/Money.php b/app/Http/Middleware/Money.php index 4694b71e2..5766c6934 100644 --- a/app/Http/Middleware/Money.php +++ b/app/Http/Middleware/Money.php @@ -38,7 +38,11 @@ class Money if (isset($bill_number) || isset($invoice_number) || !empty($items)) { if (!empty($items)) { foreach ($items as $key => $item) { - $items[$key]['price'] = money($item['price'], $currency_code)->getAmount(); + if (isset($item['currency']) && $item['currency'] != $currency_code) { + $items[$key]['price'] = money($item['price'], $item['currency'])->getAmount(); + } else { + $items[$key]['price'] = money($item['price'], $currency_code)->getAmount(); + } } $request->request->set('item', $items); diff --git a/resources/views/expenses/bills/create.blade.php b/resources/views/expenses/bills/create.blade.php index f60fe4506..adefdfe1c 100644 --- a/resources/views/expenses/bills/create.blade.php +++ b/resources/views/expenses/bills/create.blade.php @@ -161,11 +161,13 @@ var item_row = '{{ $item_row }}'; $(document).on('click', '#button-add-item', function (e) { + var currency_code = $('#currency_code').val(); + $.ajax({ url: '{{ url("expenses/bills/addItem") }}', type: 'GET', dataType: 'JSON', - data: {item_row: item_row, currency_code : $('#currency_code').val()}, + data: {item_row: item_row, currency_code : currency_code}, success: function(json) { if (json['success']) { $('#items tbody #addItem').before(json['html']); @@ -285,6 +287,7 @@ $('#item-tax-' + item_id).val(data.tax_id); // This event Select2 Stylesheet + $('#item-price-' + item_id).trigger('focusout'); $('#item-tax-' + item_id).trigger('change'); $('#item-total-' + item_id).html(data.total); @@ -412,6 +415,28 @@ $('#discount-total').html(data.discount_total); $('#tax-total').html(data.tax_total); $('#grand-total').html(data.grand_total); + + $('.input-price').each(function(){ + input_price_id = $(this).attr('id'); + input_currency_id = input_price_id.replace('price', 'currency'); + + $('#' + input_currency_id).val(data.currency_code); + + amount = $(this).maskMoney('unmasked')[0]; + + $(this).maskMoney({ + thousands : data.thousands_separator, + decimal : data.decimal_mark, + precision : data.precision, + allowZero : true, + prefix : (data.symbol_first) ? data.symbol : '', + suffix : (data.symbol_first) ? '' : data.symbol + }); + + $(this).val(amount); + + $(this).trigger('focusout'); + }); } } }); diff --git a/resources/views/expenses/bills/edit.blade.php b/resources/views/expenses/bills/edit.blade.php index 142f39eef..29d7f32a9 100644 --- a/resources/views/expenses/bills/edit.blade.php +++ b/resources/views/expenses/bills/edit.blade.php @@ -142,11 +142,13 @@ var item_row = '{{ $item_row }}'; $(document).on('click', '#button-add-item', function (e) { + var currency_code = $('#currency_code').val(); + $.ajax({ url: '{{ url("expenses/bills/addItem") }}', type: 'GET', dataType: 'JSON', - data: {item_row: item_row}, + data: {item_row: item_row, currency_code : currency_code}, success: function(json) { if (json['success']) { $('#items tbody #addItem').before(json['html']); @@ -293,6 +295,7 @@ $('#item-tax-' + item_id).val(data.tax_id); // This event Select2 Stylesheet + $('#item-price-' + item_id).trigger('focusout'); $('#item-tax-' + item_id).trigger('change'); $('#item-total-' + item_id).html(data.total); @@ -406,7 +409,7 @@ url: '{{ url("common/items/totalItem") }}', type: 'POST', dataType: 'JSON', - data: $('#currency_code, #discount input[type=\'number\'], #items input[type=\'text\'],#items input[type=\'number\'],#items input[type=\'hidden\'], #items textarea, #items select'), + data: $('#currency_code, #discount input[type=\'number\'], #items input[type=\'text\'], #items input[type=\'number\'], #items input[type=\'hidden\'], #items textarea, #items select'), headers: { 'X-CSRF-TOKEN': '{{ csrf_token() }}' }, success: function(data) { if (data) { @@ -420,6 +423,28 @@ $('#discount-total').html(data.discount_total); $('#tax-total').html(data.tax_total); $('#grand-total').html(data.grand_total); + + $('.input-price').each(function(){ + input_price_id = $(this).attr('id'); + input_currency_id = input_price_id.replace('price', 'currency'); + + $('#' + input_currency_id).val(data.currency_code); + + amount = $(this).maskMoney('unmasked')[0]; + + $(this).maskMoney({ + thousands : data.thousands_separator, + decimal : data.decimal_mark, + precision : data.precision, + allowZero : true, + prefix : (data.symbol_first) ? data.symbol : '', + suffix : (data.symbol_first) ? '' : data.symbol + }); + + $(this).val(amount); + + $(this).trigger('focusout'); + }); } } }); diff --git a/resources/views/expenses/bills/item.blade.php b/resources/views/expenses/bills/item.blade.php index 1ee34c082..403585fcf 100644 --- a/resources/views/expenses/bills/item.blade.php +++ b/resources/views/expenses/bills/item.blade.php @@ -25,6 +25,7 @@ @stack('price_input_start') + @stack('price_input_end') @stack('price_td_end') diff --git a/resources/views/incomes/invoices/create.blade.php b/resources/views/incomes/invoices/create.blade.php index e0b9d9e28..b6cee24f4 100644 --- a/resources/views/incomes/invoices/create.blade.php +++ b/resources/views/incomes/invoices/create.blade.php @@ -161,11 +161,13 @@ var item_row = '{{ $item_row }}'; $(document).on('click', '#button-add-item', function (e) { + var currency_code = $('#currency_code').val(); + $.ajax({ url: '{{ url("incomes/invoices/addItem") }}', type: 'GET', dataType: 'JSON', - data: {item_row: item_row, currency_code : $('#currency_code').val()}, + data: {item_row: item_row, currency_code : currency_code}, success: function(json) { if (json['success']) { $('#items tbody #addItem').before(json['html']); @@ -371,6 +373,11 @@ $('#currency_rate').val(data.currency_rate); $('.input-price').each(function(){ + input_price_id = $(this).attr('id'); + input_currency_id = input_price_id.replace('price', 'currency'); + + $('#' + input_currency_id).val(data.currency_code); + amount = $(this).maskMoney('unmasked')[0]; $(this).maskMoney({ @@ -401,13 +408,6 @@ dataType: 'JSON', data: $('#currency_code, #discount input[type=\'number\'], #items input[type=\'text\'],#items input[type=\'number\'],#items input[type=\'hidden\'], #items textarea, #items select'), headers: { 'X-CSRF-TOKEN': '{{ csrf_token() }}' }, - before: function () { - $('.input-price').each(function(){ - amount = $(this).maskMoney('unmasked')[0]; - - $(this).val(amount); - }); - }, success: function(data) { if (data) { $.each( data.items, function( key, value ) { @@ -422,6 +422,11 @@ $('#grand-total').html(data.grand_total); $('.input-price').each(function(){ + input_price_id = $(this).attr('id'); + input_currency_id = input_price_id.replace('price', 'currency'); + + $('#' + input_currency_id).val(data.currency_code); + amount = $(this).maskMoney('unmasked')[0]; $(this).maskMoney({ diff --git a/resources/views/incomes/invoices/edit.blade.php b/resources/views/incomes/invoices/edit.blade.php index 738e9eeb4..5cf2e18a3 100644 --- a/resources/views/incomes/invoices/edit.blade.php +++ b/resources/views/incomes/invoices/edit.blade.php @@ -142,11 +142,13 @@ var item_row = '{{ $item_row }}'; $(document).on('click', '#button-add-item', function (e) { + var currency_code = $('#currency_code').val(); + $.ajax({ url: '{{ url("incomes/invoices/addItem") }}', type: 'GET', dataType: 'JSON', - data: {item_row: item_row}, + data: {item_row: item_row, currency_code : currency_code}, success: function(json) { if (json['success']) { $('#items tbody #addItem').before(json['html']); @@ -379,6 +381,11 @@ $('#currency_rate').val(data.currency_rate); $('.input-price').each(function(){ + input_price_id = $(this).attr('id'); + input_currency_id = input_price_id.replace('price', 'currency'); + + $('#' + input_currency_id).val(data.currency_code); + amount = $(this).maskMoney('unmasked')[0]; $(this).maskMoney({ @@ -403,12 +410,11 @@ }); function totalItem() { - $.ajax({ url: '{{ url("common/items/totalItem") }}', type: 'POST', dataType: 'JSON', - data: $('#currency_code, #discount input[type=\'number\'], #items input[type=\'text\'],#items input[type=\'number\'],#items input[type=\'hidden\'], #items textarea, #items select'), + data: $('#currency_code, #discount input[type=\'number\'], #items input[type=\'text\'], #items input[type=\'number\'], #items input[type=\'hidden\'], #items textarea, #items select'), headers: { 'X-CSRF-TOKEN': '{{ csrf_token() }}' }, success: function(data) { if (data) { @@ -424,6 +430,11 @@ $('#grand-total').html(data.grand_total); $('.input-price').each(function(){ + input_price_id = $(this).attr('id'); + input_currency_id = input_price_id.replace('price', 'currency'); + + $('#' + input_currency_id).val(data.currency_code); + amount = $(this).maskMoney('unmasked')[0]; $(this).maskMoney({ diff --git a/resources/views/incomes/invoices/item.blade.php b/resources/views/incomes/invoices/item.blade.php index 9efe56e6a..c178be22e 100644 --- a/resources/views/incomes/invoices/item.blade.php +++ b/resources/views/incomes/invoices/item.blade.php @@ -25,6 +25,7 @@ @stack('price_input_start') + @stack('price_input_end') @stack('price_td_end')