Browse Source

Add bank accounts for invoice print out

pull/6/head
Nafies Luthfi 8 years ago
parent
commit
8b5b36d07d
  1. 142
      app/Http/Controllers/References/BankAccountsController.php
  2. 28
      resources/lang/id/bank_account.php
  3. 65
      resources/views/bank-accounts/forms.blade.php
  4. 66
      resources/views/bank-accounts/index.blade.php
  5. 5
      routes/web/references.php
  6. 121
      tests/Feature/References/ManageBankAccountsTest.php

142
app/Http/Controllers/References/BankAccountsController.php

@ -0,0 +1,142 @@
<?php
namespace App\Http\Controllers\References;
use App\Entities\Options\Option;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class BankAccountsController extends Controller
{
/**
* Display a listing of the bankAccount.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$editableBankAccount = null;
$bankAccounts = Option::where('key', 'bank_accounts')->first();
if (!is_null($bankAccounts)) {
$bankAccounts = $bankAccounts->value;
$bankAccounts = json_decode($bankAccounts, true);
if (in_array(request('action'), ['edit', 'delete']) && request('id') != null) {
$editableBankAccount = (object) $bankAccounts[request('id')];
}
} else {
$bankAccounts = [];
}
return view('bank-accounts.index', compact('bankAccounts', 'editableBankAccount'));
}
/**
* Store a newly created bank account in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$newBankAccount = $request->validate([
'name' => 'required|max:60',
'number' => 'required|max:60',
'account_name' => 'required|max:60',
'description' => 'nullable|max:255',
]);
$option = Option::firstOrNew(['key' => 'bank_accounts']);
if ($option->exists) {
$bankAccounts = $option->value;
$bankAccounts = json_decode($bankAccounts, true);
if ($bankAccounts == []) {
$bankAccounts[1] = $newBankAccount;
} else {
$bankAccounts[] = $newBankAccount;
}
} else {
$bankAccounts = [];
$bankAccounts[1] = $newBankAccount;
}
$bankAccounts = json_encode($bankAccounts);
$option->value = $bankAccounts;
$option->save();
flash(trans('bank_account.created'), 'success');
return redirect()->route('bank-accounts.index');
}
/**
* Update the specified bank account in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Entities\Invoices\BankAccount $bankAccount
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $bankAccountId)
{
$bankAccountData = $request->validate([
'name' => 'required|max:60',
'number' => 'required|max:60',
'account_name' => 'required|max:60',
'description' => 'nullable|max:255',
]);
$bankAccounts = Option::where('key', 'bank_accounts')->first();
$bankAccounts = $bankAccounts->value;
$bankAccounts = json_decode($bankAccounts, true);
$bankAccounts[$bankAccountId] = $bankAccountData;
$bankAccounts = json_encode($bankAccounts);
$option = Option::where('key', 'bank_accounts')->first();
$option->value = $bankAccounts;
$option->save();
flash(trans('bank_account.updated'), 'success');
return redirect()->route('bank-accounts.index');
}
/**
* Remove the specified bank account from storage.
*
* @param \App\Entities\Invoices\BankAccount $bankAccount
* @return \Illuminate\Http\Response
*/
public function destroy($bankAccountId)
{
request()->validate([
'bank_account_id' => 'required',
]);
if (request('bank_account_id') == $bankAccountId) {
$bankAccounts = Option::where('key', 'bank_accounts')->first();
$bankAccounts = $bankAccounts->value;
$bankAccounts = json_decode($bankAccounts, true);
unset($bankAccounts[$bankAccountId]);
$bankAccounts = json_encode($bankAccounts);
$option = Option::where('key', 'bank_accounts')->first();
$option->value = $bankAccounts;
$option->save();
flash(trans('bank_account.deleted'), 'success');
return redirect()->route('bank-accounts.index');
}
return back();
}
}

28
resources/lang/id/bank_account.php

@ -0,0 +1,28 @@
<?php
return [
// Labels
'bank_account' => 'Rekening Bank',
'list' => 'Daftar Rekening Bank',
'empty' => 'Belum ada Rekening Bank',
'back_to_index' => 'Kembali ke daftar Rekening Bank',
// Actions
'create' => 'Input Rekening Bank Baru',
'created' => 'Input Rekening Bank baru telah berhasil.',
'show' => 'Lihat Detail Rekening Bank',
'edit' => 'Edit Rekening Bank',
'update' => 'Update Rekening Bank',
'updated' => 'Update data Rekening Bank telah berhasil.',
'delete' => 'Hapus Rekening Bank',
'delete_confirm' => 'Anda yakin akan menghapus Rekening Bank ini?',
'deleted' => 'Hapus data Rekening Bank telah berhasil.',
'undeleted' => 'Data Rekening Bank gagal dihapus.',
'undeleteable' => 'Data Rekening Bank tidak dapat dihapus.',
// Attributes
'name' => 'Nama Bank',
'number' => 'No. Rekening',
'account_name' => 'Atas Nama',
'description' => 'Deskripsi',
];

65
resources/views/bank-accounts/forms.blade.php

@ -0,0 +1,65 @@
@if (Request::get('action') == 'create')
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">{{ trans('bank_account.create') }}</h3></div>
{!! Form::open(['route' => 'bank-accounts.store']) !!}
<div class="panel-body">
{!! FormField::text('name', ['required' => true, 'label' => trans('bank_account.name')]) !!}
{!! FormField::text('number', ['required' => true, 'label' => trans('bank_account.number')]) !!}
{!! FormField::text('account_name', ['required' => true, 'label' => trans('bank_account.account_name')]) !!}
{!! FormField::textarea('description', ['label' => trans('bank_account.description')]) !!}
</div>
<div class="panel-footer">
{!! Form::submit(trans('bank_account.create'), ['class' => 'btn btn-success']) !!}
{{ link_to_route('bank-accounts.index', trans('app.cancel'), [], ['class' => 'btn btn-default']) }}
</div>
{!! Form::close() !!}
</div>
@endif
@if (Request::get('action') == 'edit' && $editableBankAccount)
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">{{ trans('bank_account.edit') }}</h3></div>
{!! Form::model($editableBankAccount, ['route' => ['bank-accounts.update', request('id')],'method' => 'patch']) !!}
<div class="panel-body">
{!! FormField::text('name', ['required' => true, 'label' => trans('bank_account.name')]) !!}
{!! FormField::text('number', ['required' => true, 'label' => trans('bank_account.number')]) !!}
{!! FormField::text('account_name', ['required' => true, 'label' => trans('bank_account.account_name')]) !!}
{!! FormField::textarea('description', ['label' => trans('bank_account.description')]) !!}
</div>
<div class="panel-footer">
{!! Form::submit(trans('bank_account.update'), ['class' => 'btn btn-success']) !!}
{{ link_to_route('bank-accounts.index', trans('app.cancel'), [], ['class' => 'btn btn-default']) }}
</div>
{!! Form::close() !!}
</div>
@endif
@if (Request::get('action') == 'delete' && $editableBankAccount)
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">{{ trans('bank_account.delete') }}</h3></div>
<div class="panel-body">
<label class="control-label">{{ trans('bank_account.name') }}</label>
<p>{{ $editableBankAccount->name }}</p>
<label class="control-label">{{ trans('bank_account.number') }}</label>
<p>{{ $editableBankAccount->number }}</p>
<label class="control-label">{{ trans('bank_account.account_name') }}</label>
<p>{{ $editableBankAccount->account_name }}</p>
<label class="control-label">{{ trans('bank_account.description') }}</label>
<p>{{ $editableBankAccount->description }}</p>
{!! $errors->first('bank_account_id', '<span class="form-error small">:message</span>') !!}
</div>
<hr style="margin:0">
<div class="panel-body">{{ trans('app.delete_confirm') }}</div>
<div class="panel-footer">
{!! FormField::delete(
['route'=>['bank-accounts.destroy',request('id')]],
trans('app.delete_confirm_button'),
['class'=>'btn btn-danger'],
[
'bank_account_id' => request('id'),
'page' => request('page'),
'q' => request('q'),
]
) !!}
{{ link_to_route('bank-accounts.index', trans('app.cancel'), [], ['class' => 'btn btn-default']) }}
</div>
</div>
@endif

66
resources/views/bank-accounts/index.blade.php

@ -0,0 +1,66 @@
@extends('layouts.app')
@section('title', trans('bank_account.list'))
@section('content')
<h1 class="page-header">
<div class="pull-right">
{{ link_to_route('bank-accounts.index', trans('bank_account.create'), ['action' => 'create'], ['class' => 'btn btn-success']) }}
</div>
{{ trans('bank_account.list') }}
<small>{{ trans('app.total') }} : {{ count($bankAccounts) }} {{ trans('bank_account.bank_account') }}</small>
</h1>
<div class="row">
<div class="col-md-8">
<div class="panel panel-default table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<th class="text-center">{{ trans('app.table_no') }}</th>
<th>{{ trans('bank_account.name') }}</th>
<th>{{ trans('bank_account.number') }}</th>
<th>{{ trans('bank_account.account_name') }}</th>
<th>{{ trans('bank_account.description') }}</th>
<th class="text-center">{{ trans('app.action') }}</th>
</tr>
</thead>
<tbody>
@forelse($bankAccounts as $key => $bankAccount)
@php
$bankAccount = (object) $bankAccount;
@endphp
<tr>
<td class="text-center">{{ $key }}</td>
<td>{{ $bankAccount->name }}</td>
<td>{{ $bankAccount->number }}</td>
<td>{{ $bankAccount->account_name }}</td>
<td>{{ $bankAccount->description }}</td>
<td class="text-center">
{!! link_to_route(
'bank-accounts.index',
trans('app.edit'),
['action' => 'edit', 'id' => $key],
['id' => 'edit-bank_account-' . $key]
) !!} |
{!! link_to_route(
'bank-accounts.index',
trans('app.delete'),
['action' => 'delete', 'id' => $key],
['id' => 'del-bank_account-' . $key]
) !!}
</td>
</tr>
@empty
<tr>
<td colspan="6">{{ trans('bank_account.empty') }}</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
<div class="col-md-4">
@includeWhen(Request::has('action'), 'bank-accounts.forms')
</div>
</div>
@endsection

5
routes/web/references.php

@ -8,4 +8,9 @@ Route::group(['namespace' => 'References', 'middleware' => ['web', 'role:admin']
Route::post('options/store', ['as' => 'options.store', 'uses' => 'OptionsController@store']);
Route::patch('options/save', ['as' => 'options.save', 'uses' => 'OptionsController@save']);
Route::delete('options/{optionId}/destroy', ['as' => 'options.destroy', 'uses' => 'OptionsController@destroy']);
/**
* Bank Accounts Routes
*/
Route::apiResource('bank-accounts', 'BankAccountsController');
});

121
tests/Feature/References/ManageBankAccountsTest.php

@ -0,0 +1,121 @@
<?php
namespace Tests\Feature\References;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Option;
use Tests\TestCase as TestCase;
class ManageBankAccountsTest extends TestCase
{
use DatabaseMigrations;
/** @test */
public function user_can_see_bank_account_list_in_bank_account_index_page()
{
$this->adminUserSigningIn();
$this->visit(route('bank-accounts.index'));
}
/** @test */
public function user_can_create_a_bank_account()
{
$this->adminUserSigningIn();
$this->visit(route('bank-accounts.index'));
$this->click(trans('bank_account.create'));
$this->seePageIs(route('bank-accounts.index', ['action' => 'create']));
$this->submitForm(trans('bank_account.create'), [
'name' => 'BankAccount 1 name',
'number' => '1234567890',
'account_name' => 'John Doe',
'description' => 'BankAccount 1 description',
]);
$this->seePageIs(route('bank-accounts.index'));
$bankAccounts = [];
$bankAccounts[1] = [
'name' => 'BankAccount 1 name',
'number' => '1234567890',
'account_name' => 'John Doe',
'description' => 'BankAccount 1 description',
];
$this->seeInDatabase('site_options', [
'value' => json_encode($bankAccounts),
]);
}
/** @test */
public function user_can_edit_a_bank_account_within_search_query()
{
$this->adminUserSigningIn();
$bankAccounts = [];
$bankAccounts[1] = [
'name' => 'BankAccount 1 name',
'number' => '1234567890',
'account_name' => 'John Doe',
'description' => 'BankAccount 1 description',
];
Option::set('bank_accounts', json_encode($bankAccounts));
$this->visit(route('bank-accounts.index'));
$this->click('edit-bank_account-1');
$this->seePageIs(route('bank-accounts.index', ['action' => 'edit', 'id' => '1']));
$this->submitForm(trans('bank_account.update'), [
'name' => 'BankAccount 2 name',
'number' => '1234567890',
'account_name' => 'John Doe',
'description' => 'BankAccount 2 description',
]);
$this->seePageIs(route('bank-accounts.index'));
$bankAccounts[1] = [
'name' => 'BankAccount 2 name',
'number' => '1234567890',
'account_name' => 'John Doe',
'description' => 'BankAccount 2 description',
];
$this->seeInDatabase('site_options', [
'value' => json_encode($bankAccounts),
]);
}
/** @test */
public function user_can_delete_a_bank_account()
{
$this->adminUserSigningIn();
$bankAccounts = [];
$bankAccounts[2] = [
'name' => 'BankAccount 1 name',
'number' => '1234567890',
'account_name' => 'John Doe',
'description' => 'BankAccount 1 description',
];
Option::set('bank_accounts', json_encode($bankAccounts));
$this->seeInDatabase('site_options', [
'value' => json_encode($bankAccounts),
]);
$this->visit(route('bank-accounts.index'));
$this->click('del-bank_account-2');
$this->seePageIs(route('bank-accounts.index', ['action' => 'delete', 'id' => '2']));
$this->press(trans('app.delete_confirm_button'));
$this->dontSeeInDatabase('site_options', [
'value' => json_encode($bankAccounts),
]);
}
}
Loading…
Cancel
Save