Browse Source

Add option page to set money_sign

Set money string format based on money_sign site option
pull/6/head
Nafies Luthfi 8 years ago
parent
commit
de57cc348d
  1. 35
      app/Http/Controllers/References/SiteOptionsController.php
  2. 9
      app/helpers.php
  3. 17
      resources/lang/en/option.php
  4. 15
      resources/lang/id/option.php
  5. 35
      resources/views/options/page-1.blade.php
  6. 3
      resources/views/pages/partials/dashboard-nav-tabs.blade.php
  7. 6
      routes/web/references.php
  8. 40
      tests/Feature/References/SiteOptionsTest.php
  9. 34
      tests/Unit/Helpers/MoneyFormatTest.php

35
app/Http/Controllers/References/SiteOptionsController.php

@ -0,0 +1,35 @@
<?php
namespace App\Http\Controllers\References;
use App\Entities\Options\Option;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
/**
* Site Options Controller.
*
* @author Nafies Luthfi <nafiesL@gmail.com>
*/
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');
}
}

9
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)

17
resources/lang/en/option.php

@ -0,0 +1,17 @@
<?php
return [
// Labels
'list' => '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',
];

15
resources/lang/id/option.php

@ -1,14 +1,17 @@
<?php
return [
'options' => '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',
];

35
resources/views/options/page-1.blade.php

@ -0,0 +1,35 @@
@extends('layouts.dashboard')
@section('title', trans('option.list'))
@section('content-dashboard')
<div class="row">
<div class="col-md-4">
{{ Form::open(['route' => 'site-options.save-1', 'method' => 'patch']) }}
<table class="table-condensed">
<tbody>
<tr>
<td class="col-xs-5" style="vertical-align: top">{{ trans('option.money_sign') }}</td>
<td class="col-xs-7">
{{ Form::text(
'money_sign',
Option::get('money_sign', 'Rp.'),
['class' => 'form-control', 'maxlength' => 3]
) }}
<span class="text-info small">
Money sign like : <strong>{{ formatRp('9900') }}</strong><br>(Max 3 characters)
</span>
</td>
</tr>
<tr>
<td>
{{ Form::submit(trans('app.update'), ['class' => 'btn btn-warning']) }}
</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
{{ Form::close() }}
</div>
</div>
@endsection

3
resources/views/pages/partials/dashboard-nav-tabs.blade.php

@ -16,6 +16,9 @@
<li class="{{ Request::segment(1) == 'bank-accounts' ? 'active' : '' }}">
{!! link_to_route('bank-accounts.index', trans('bank_account.list')) !!}
</li>
<li class="{{ Request::segment(1) == 'site-options' ? 'active' : '' }}">
{!! link_to_route('site-options.page-1', trans('option.list')) !!}
</li>
@endcan
</ul>
<br>

6
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');

40
tests/Feature/References/SiteOptionsTest.php

@ -0,0 +1,40 @@
<?php
namespace Tests\Feature\Users;
use Tests\TestCase;
/**
* Site Options Feature Test.
*
* @author Nafies Luthfi <nafiesL@gmail.com>
*/
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' => '$',
]);
}
}

34
tests/Unit/Helpers/MoneyFormatTest.php

@ -0,0 +1,34 @@
<?php
namespace Tests\Unit\Helpers;
use Tests\TestCase;
/**
* Money Format Helper Unit Test.
*
* @author Nafies Luthfi <nafiesL@gmail.com>
*/
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));
}
}
Loading…
Cancel
Save