diff --git a/app/Http/Controllers/Expenses/Bills.php b/app/Http/Controllers/Expenses/Bills.php index 5c7a99c66..4b25f6513 100644 --- a/app/Http/Controllers/Expenses/Bills.php +++ b/app/Http/Controllers/Expenses/Bills.php @@ -142,6 +142,7 @@ class Bills extends Controller $bill_item = []; $bill_item['company_id'] = $request['company_id']; $bill_item['bill_id'] = $bill->id; + $bill_item['currency_code'] = $request['currency_code']; if ($request['item']) { foreach ($request['item'] as $item) { @@ -214,7 +215,9 @@ class Bills extends Controller $s_total = $s_total - $s_discount; } - $request['amount'] = $s_total + $tax_total; + $amount = $s_total + $tax_total; + + $request['amount'] = money($amount, $request['currency_code'])->getAmount(); $bill->update($request->input()); @@ -354,6 +357,7 @@ class Bills extends Controller $bill_item = []; $bill_item['company_id'] = $request['company_id']; $bill_item['bill_id'] = $bill->id; + $bill_item['currency_code'] = $request['currency_code']; if ($request['item']) { BillItem::where('bill_id', $bill->id)->delete(); @@ -420,7 +424,9 @@ class Bills extends Controller $s_total = $s_total - $s_discount; } - $request['amount'] = $s_total + $tax_total; + $amount = $s_total + $tax_total; + + $request['amount'] = money($amount, $request['currency_code'])->getAmount(); $bill->update($request->input()); @@ -488,10 +494,10 @@ class Bills extends Controller */ public function export() { - \Excel::create('bills', function($excel) { + \Excel::create('bills', function ($excel) { $bills = Bill::with(['items', 'histories', 'payments', 'totals'])->filter(request()->input())->get(); - $excel->sheet('invoices', function($sheet) use ($bills) { + $excel->sheet('invoices', function ($sheet) use ($bills) { $sheet->fromModel($bills->makeHidden([ 'company_id', 'parent_id', 'created_at', 'updated_at', 'deleted_at', 'attachment', 'discount', 'items', 'histories', 'payments', 'totals', 'media' ])); @@ -499,10 +505,11 @@ class Bills extends Controller $tables = ['items', 'histories', 'payments', 'totals']; foreach ($tables as $table) { - $excel->sheet('bill_' . $table, function($sheet) use ($bills, $table) { + $excel->sheet('bill_' . $table, function ($sheet) use ($bills, $table) { $hidden_fields = ['id', 'company_id', 'created_at', 'updated_at', 'deleted_at', 'title']; $i = 1; + foreach ($bills as $bill) { $model = $bill->$table->makeHidden($hidden_fields); @@ -750,6 +757,7 @@ class Bills extends Controller 'code' => 'sub_total', 'name' => 'bills.sub_total', 'amount' => $sub_total, + 'currency_code' => $bill->currency_code, 'sort_order' => $sort_order, ]); @@ -763,6 +771,7 @@ class Bills extends Controller 'code' => 'discount', 'name' => 'bills.discount', 'amount' => $discount_total, + 'currency_code' => $bill->currency_code, 'sort_order' => $sort_order, ]); @@ -781,6 +790,7 @@ class Bills extends Controller 'code' => 'tax', 'name' => $tax['name'], 'amount' => $tax['amount'], + 'currency_code' => $bill->currency_code, 'sort_order' => $sort_order, ]); @@ -795,6 +805,7 @@ class Bills extends Controller 'code' => 'total', 'name' => 'bills.total', 'amount' => $sub_total + $tax_total, + 'currency_code' => $bill->currency_code, 'sort_order' => $sort_order, ]); } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 7cd66486d..591a4db20 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -95,5 +95,9 @@ class Kernel extends HttpKernel 'dateformat.due_at' => \App\Http\Middleware\DateFormatDueAt::class, 'dateformat.billed_at' => \App\Http\Middleware\DateFormatBilledAt::class, 'dateformat.invoiced_at' => \App\Http\Middleware\DateFormatInvoicedAt::class, + 'money.amount' => \App\Http\Middleware\MoneyAmount::class, + 'money.price' => \App\Http\Middleware\MoneyPrice::class, + 'money.total' => \App\Http\Middleware\MoneyTax::class, + 'money.tax' => \App\Http\Middleware\MoneyTotal::class, ]; } diff --git a/app/Http/Middleware/MoneyAmount.php b/app/Http/Middleware/MoneyAmount.php new file mode 100644 index 000000000..9f9136d82 --- /dev/null +++ b/app/Http/Middleware/MoneyAmount.php @@ -0,0 +1,32 @@ +method() == 'POST' || $request->method() == 'PATCH') { + $currency_code = $request->get('currency_code'); + + if (empty($currency_code)) { + $currency_code = setting('general.default_currency'); + } + + $amount = money($request->get('amount'), $currency_code)->getAmount(); + + $request->request->set('amount', $amount); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/MoneyPrice.php b/app/Http/Middleware/MoneyPrice.php new file mode 100644 index 000000000..70aba95d9 --- /dev/null +++ b/app/Http/Middleware/MoneyPrice.php @@ -0,0 +1,32 @@ +method() == 'POST' || $request->method() == 'PATCH') { + $currency_code = $request->get('currency_code'); + + if (empty($currency_code)) { + $currency_code = setting('general.default_currency'); + } + + $price = money($request->get('price'), $currency_code)->getAmount(); + + $request->request->set('price', $price); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/MoneyTax.php b/app/Http/Middleware/MoneyTax.php new file mode 100644 index 000000000..3cf2e67cd --- /dev/null +++ b/app/Http/Middleware/MoneyTax.php @@ -0,0 +1,32 @@ +method() == 'POST' || $request->method() == 'PATCH') { + $currency_code = $request->get('currency_code'); + + if (empty($currency_code)) { + $currency_code = setting('general.default_currency'); + } + + $tax = money($request->get('tax'), $currency_code)->getAmount(); + + $request->request->set('tax', $tax); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/MoneyTotal.php b/app/Http/Middleware/MoneyTotal.php new file mode 100644 index 000000000..9d3306f30 --- /dev/null +++ b/app/Http/Middleware/MoneyTotal.php @@ -0,0 +1,32 @@ +method() == 'POST' || $request->method() == 'PATCH') { + $currency_code = $request->get('currency_code'); + + if (empty($currency_code)) { + $currency_code = setting('general.default_currency'); + } + + $total = money($request->get('total'), $currency_code)->getAmount(); + + $request->request->set('total', $total); + } + + return $next($request); + } +} diff --git a/app/Models/Expense/Bill.php b/app/Models/Expense/Bill.php index ec883c64a..3ae017282 100644 --- a/app/Models/Expense/Bill.php +++ b/app/Models/Expense/Bill.php @@ -145,7 +145,7 @@ class Bill extends Model */ public function setAmountAttribute($value) { - $this->attributes['amount'] = (double) money($value, $this->attributes['currency_code'])->getAmount(); + $this->attributes['amount'] = (double) $value; } /** diff --git a/app/Models/Expense/BillPayment.php b/app/Models/Expense/BillPayment.php index 243208039..339c48b69 100644 --- a/app/Models/Expense/BillPayment.php +++ b/app/Models/Expense/BillPayment.php @@ -61,7 +61,7 @@ class BillPayment extends Model */ public function setAmountAttribute($value) { - $this->attributes['amount'] = (double) money($value, $this->account->currency_code)->getAmount(); + $this->attributes['amount'] = (double) $value; } /** diff --git a/app/Models/Expense/Payment.php b/app/Models/Expense/Payment.php index 29b639f2e..c4d349e4e 100644 --- a/app/Models/Expense/Payment.php +++ b/app/Models/Expense/Payment.php @@ -113,7 +113,7 @@ class Payment extends Model */ public function setAmountAttribute($value) { - $this->attributes['amount'] = (double) money($value, $this->attributes['currency_code'])->getAmount(); + $this->attributes['amount'] = (double) $value; } /** diff --git a/app/Models/Income/InvoicePayment.php b/app/Models/Income/InvoicePayment.php index 2d5943361..fe726b632 100644 --- a/app/Models/Income/InvoicePayment.php +++ b/app/Models/Income/InvoicePayment.php @@ -61,7 +61,7 @@ class InvoicePayment extends Model */ public function setAmountAttribute($value) { - $this->attributes['amount'] = (double) money($value, $this->account->currency_code)->getAmount(); + $this->attributes['amount'] = (double) $value; } /** diff --git a/app/Models/Income/Revenue.php b/app/Models/Income/Revenue.php index 1d23b9ff9..09cb52f3f 100644 --- a/app/Models/Income/Revenue.php +++ b/app/Models/Income/Revenue.php @@ -119,7 +119,7 @@ class Revenue extends Model */ public function setAmountAttribute($value) { - $this->attributes['amount'] = (double) money($value, $this->attributes['currency_code'])->getAmount(); + $this->attributes['amount'] = (double) $value; } /** diff --git a/routes/web.php b/routes/web.php index 588a86f32..d3643d7ef 100644 --- a/routes/web.php +++ b/routes/web.php @@ -53,7 +53,7 @@ Route::group(['middleware' => 'language'], function () { Route::get('invoices/{invoice}/print', 'Incomes\Invoices@printInvoice'); Route::get('invoices/{invoice}/pdf', 'Incomes\Invoices@pdfInvoice'); Route::get('invoices/{invoice}/duplicate', 'Incomes\Invoices@duplicate'); - Route::post('invoices/payment', 'Incomes\Invoices@payment')->middleware(['dateformat.paid_at'])->name('invoice.payment'); + Route::post('invoices/payment', 'Incomes\Invoices@payment')->middleware(['dateformat.paid_at', 'money.amount'])->name('invoice.payment'); Route::delete('invoices/payment/{payment}', 'Incomes\Invoices@paymentDestroy'); Route::post('invoices/import', 'Incomes\Invoices@import')->name('invoices.import'); Route::get('invoices/export', 'Incomes\Invoices@export')->name('invoices.export'); @@ -61,7 +61,7 @@ Route::group(['middleware' => 'language'], function () { Route::get('revenues/{revenue}/duplicate', 'Incomes\Revenues@duplicate'); Route::post('revenues/import', 'Incomes\Revenues@import')->name('revenues.import'); Route::get('revenues/export', 'Incomes\Revenues@export')->name('revenues.export'); - Route::resource('revenues', 'Incomes\Revenues', ['middleware' => ['dateformat.paid_at']]); + Route::resource('revenues', 'Incomes\Revenues', ['middleware' => ['dateformat.paid_at', 'money.amount']]); Route::get('customers/currency', 'Incomes\Customers@currency'); Route::get('customers/{customer}/duplicate', 'Incomes\Customers@duplicate'); Route::post('customers/customer', 'Incomes\Customers@customer'); @@ -78,15 +78,15 @@ Route::group(['middleware' => 'language'], function () { Route::get('bills/{bill}/print', 'Expenses\Bills@printBill'); Route::get('bills/{bill}/pdf', 'Expenses\Bills@pdfBill'); Route::get('bills/{bill}/duplicate', 'Expenses\Bills@duplicate'); - Route::post('bills/payment', 'Expenses\Bills@payment')->middleware(['dateformat.paid_at'])->name('bill.payment'); + Route::post('bills/payment', 'Expenses\Bills@payment')->middleware(['dateformat.paid_at', 'money.amount'])->name('bill.payment'); Route::delete('bills/payment/{payment}', 'Expenses\Bills@paymentDestroy'); Route::post('bills/import', 'Expenses\Bills@import')->name('bills.import'); Route::get('bills/export', 'Expenses\Bills@export')->name('bills.export'); - Route::resource('bills', 'Expenses\Bills', ['middleware' => ['dateformat.billed_at', 'dateformat.due_at']]); + Route::resource('bills', 'Expenses\Bills', ['middleware' => ['dateformat.billed_at', 'dateformat.due_at', 'money.price', 'money.tax', 'money.total']]); Route::get('payments/{payment}/duplicate', 'Expenses\Payments@duplicate'); Route::post('payments/import', 'Expenses\Payments@import')->name('payments.import'); Route::get('payments/export', 'Expenses\Payments@export')->name('payments.export'); - Route::resource('payments', 'Expenses\Payments', ['middleware' => ['dateformat.paid_at']]); + Route::resource('payments', 'Expenses\Payments', ['middleware' => ['dateformat.paid_at', 'money.amount']]); Route::get('vendors/currency', 'Expenses\Vendors@currency'); Route::get('vendors/{vendor}/duplicate', 'Expenses\Vendors@duplicate'); Route::post('vendors/vendor', 'Expenses\Vendors@vendor');