From de57cc348d0371784584261f34a0d3b7f98b837c Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Mon, 29 Jan 2018 23:20:54 +0800 Subject: [PATCH] Add option page to set money_sign Set money string format based on money_sign site option --- .../References/SiteOptionsController.php | 35 +++++++++++++++++++ app/helpers.php | 9 +++-- resources/lang/en/option.php | 17 +++++++++ resources/lang/id/option.php | 15 ++++---- resources/views/options/page-1.blade.php | 35 +++++++++++++++++++ .../pages/partials/dashboard-nav-tabs.blade.php | 3 ++ routes/web/references.php | 6 ++++ tests/Feature/References/SiteOptionsTest.php | 40 ++++++++++++++++++++++ tests/Unit/Helpers/MoneyFormatTest.php | 34 ++++++++++++++++++ 9 files changed, 185 insertions(+), 9 deletions(-) create mode 100755 app/Http/Controllers/References/SiteOptionsController.php create mode 100644 resources/lang/en/option.php create mode 100755 resources/views/options/page-1.blade.php create mode 100644 tests/Feature/References/SiteOptionsTest.php create mode 100644 tests/Unit/Helpers/MoneyFormatTest.php diff --git a/app/Http/Controllers/References/SiteOptionsController.php b/app/Http/Controllers/References/SiteOptionsController.php new file mode 100755 index 0000000..24f1faa --- /dev/null +++ b/app/Http/Controllers/References/SiteOptionsController.php @@ -0,0 +1,35 @@ + + */ +class SiteOptionsController extends Controller +{ + public function page1() + { + return view('options.page-1', compact('options')); + } + + public function save1(Request $request) + { + $request->validate([ + 'money_sign' => 'required|max:3', + ]); + + $option = Option::firstorNew(['key' => 'money_sign']); + $option->value = $request->get('money_sign'); + $option->save(); + + flash()->success(trans('option.updated')); + + return redirect()->route('site-options.page-1'); + } +} diff --git a/app/helpers.php b/app/helpers.php index c9145d6..001bee4 100755 --- a/app/helpers.php +++ b/app/helpers.php @@ -14,14 +14,17 @@ function formatNo($number) function formatRp($number) { + $moneySign = Option::get('money_sign', 'Rp.'); + if ($number == 0) { - return 'Rp. 0'; + return $moneySign.' 0'; } + if ($number < 0) { - return '- Rp. '.formatNo(abs($number)); + return '- '.$moneySign.' '.formatNo(abs($number)); } - return 'Rp. '.formatNo($number); + return $moneySign.' '.formatNo($number); } function formatDecimal($number) diff --git a/resources/lang/en/option.php b/resources/lang/en/option.php new file mode 100644 index 0000000..a24d83d --- /dev/null +++ b/resources/lang/en/option.php @@ -0,0 +1,17 @@ + 'Settings', + 'create' => 'Add New Option', + 'created' => 'New Option created.', + 'updated' => 'Option updated.', + 'delete' => 'Delete Option', + 'deleted' => 'Option deleted.', + 'undeleted' => 'Option cannot be deleted.', + 'key' => 'Key', + 'value' => 'Value', + + // Keys + 'money_sign' => 'Money Sign', +]; diff --git a/resources/lang/id/option.php b/resources/lang/id/option.php index b509661..c673dc6 100644 --- a/resources/lang/id/option.php +++ b/resources/lang/id/option.php @@ -1,14 +1,17 @@ 'Daftar Option', + // Labels + 'list' => 'Pengaturan', 'create' => 'Buat Option Baru', - 'created' => 'Option baru berhasil dibuat', - 'updated' => 'Option berhasil disimpan', + 'created' => 'Option baru berhasil dibuat.', + 'updated' => 'Option berhasil disimpan.', 'delete' => 'Hapus Option', - 'deleted' => 'Option berhasil dihapus', - 'undeleted' => 'Option tidak berhasil dihapus', + 'deleted' => 'Option berhasil dihapus.', + 'undeleted' => 'Option tidak berhasil dihapus.', 'key' => 'Key', 'value' => 'Value', - 'updated' => 'Value', + + // Keys + 'money_sign' => 'Tanda Mata Uang', ]; diff --git a/resources/views/options/page-1.blade.php b/resources/views/options/page-1.blade.php new file mode 100755 index 0000000..84b7d26 --- /dev/null +++ b/resources/views/options/page-1.blade.php @@ -0,0 +1,35 @@ +@extends('layouts.dashboard') + +@section('title', trans('option.list')) + +@section('content-dashboard') +
+
+ {{ Form::open(['route' => 'site-options.save-1', 'method' => 'patch']) }} + + + + + + + + + + + +
{{ trans('option.money_sign') }} + {{ Form::text( + 'money_sign', + Option::get('money_sign', 'Rp.'), + ['class' => 'form-control', 'maxlength' => 3] + ) }} + + Money sign like : {{ formatRp('9900') }}
(Max 3 characters) +
+
+ {{ Form::submit(trans('app.update'), ['class' => 'btn btn-warning']) }} +  
+ {{ Form::close() }} +
+
+@endsection diff --git a/resources/views/pages/partials/dashboard-nav-tabs.blade.php b/resources/views/pages/partials/dashboard-nav-tabs.blade.php index b88fbec..73fdef5 100644 --- a/resources/views/pages/partials/dashboard-nav-tabs.blade.php +++ b/resources/views/pages/partials/dashboard-nav-tabs.blade.php @@ -16,6 +16,9 @@
  • {!! link_to_route('bank-accounts.index', trans('bank_account.list')) !!}
  • +
  • + {!! link_to_route('site-options.page-1', trans('option.list')) !!} +
  • @endcan
    diff --git a/routes/web/references.php b/routes/web/references.php index 2d7de9e..6b6ef55 100644 --- a/routes/web/references.php +++ b/routes/web/references.php @@ -10,6 +10,12 @@ Route::group(['namespace' => 'References', 'middleware' => ['web', 'role:admin'] Route::delete('options/{optionId}/destroy', ['as' => 'options.destroy', 'uses' => 'OptionsController@destroy']); /* + * Site Options Routes + */ + Route::get('site-options', ['as' => 'site-options.page-1', 'uses' => 'SiteOptionsController@page1']); + Route::patch('site-options/save-1', ['as' => 'site-options.save-1', 'uses' => 'SiteOptionsController@save1']); + + /* * Bank Accounts Routes */ Route::apiResource('bank-accounts', 'BankAccountsController'); diff --git a/tests/Feature/References/SiteOptionsTest.php b/tests/Feature/References/SiteOptionsTest.php new file mode 100644 index 0000000..89f2ae8 --- /dev/null +++ b/tests/Feature/References/SiteOptionsTest.php @@ -0,0 +1,40 @@ + + */ +class SiteOptionsTest extends TestCase +{ + /** @test */ + public function admin_user_can_visit_site_options_page() + { + $user = $this->adminUserSigningIn(); + $this->visit(route('site-options.page-1')); + $this->seePageIs(route('site-options.page-1')); + } + + /** @test */ + public function admin_user_can_update_money_sign_data() + { + $user = $this->adminUserSigningIn(); + $this->visit(route('site-options.page-1')); + + $this->submitForm(trans('app.update'), [ + 'money_sign' => '$', + ]); + + $this->see(trans('option.updated')); + $this->visit(route('site-options.page-1')); + + $this->seeInDatabase('site_options', [ + 'key' => 'money_sign', + 'value' => '$', + ]); + } +} diff --git a/tests/Unit/Helpers/MoneyFormatTest.php b/tests/Unit/Helpers/MoneyFormatTest.php new file mode 100644 index 0000000..a536b9c --- /dev/null +++ b/tests/Unit/Helpers/MoneyFormatTest.php @@ -0,0 +1,34 @@ + + */ +class MoneyFormatTest extends TestCase +{ + /** @test */ + public function format_money_returns_string_with_default_money_sign() + { + $this->assertEquals('Rp. 1.000', formatRp(1000)); + $this->assertEquals('Rp. 0', formatRp(0)); + $this->assertEquals('- Rp. 1.000', formatRp(-1000)); + } + + /** @test */ + public function format_money_returns_string_based_on_site_option_money_sign() + { + \DB::table('site_options')->insert([ + 'key' => 'money_sign', + 'value' => 'USD', + ]); + + $this->assertEquals('USD 1.000', formatRp(1000)); + $this->assertEquals('USD 0', formatRp(0)); + $this->assertEquals('- USD 1.000', formatRp(-1000)); + } +}