diff --git a/app/Entities/Invoices/BankAccount.php b/app/Entities/Invoices/BankAccount.php new file mode 100644 index 0000000..5bdc7ae --- /dev/null +++ b/app/Entities/Invoices/BankAccount.php @@ -0,0 +1,27 @@ +is_active == 1 ? __('app.active') : __('app.in_active'); + } +} diff --git a/app/Http/Controllers/Invoices/InvoicesController.php b/app/Http/Controllers/Invoices/InvoicesController.php index a438083..28b71aa 100644 --- a/app/Http/Controllers/Invoices/InvoicesController.php +++ b/app/Http/Controllers/Invoices/InvoicesController.php @@ -2,10 +2,10 @@ namespace App\Http\Controllers\Invoices; -use Option; use App\Entities\Invoices\Invoice; use App\Entities\Projects\Project; use App\Http\Controllers\Controller; +use App\Entities\Invoices\BankAccount; /** * Invoices Controller. @@ -72,7 +72,7 @@ class InvoicesController extends Controller public function pdf(Invoice $invoice) { - $bankAccounts = json_decode(Option::get('bank_accounts'), true) ?: []; + $bankAccounts = BankAccount::where('is_active', 1)->get(); return view('invoices.pdf', compact('invoice', 'bankAccounts')); } diff --git a/app/Http/Controllers/References/BankAccountsController.php b/app/Http/Controllers/References/BankAccountsController.php index 87c82b7..699809d 100644 --- a/app/Http/Controllers/References/BankAccountsController.php +++ b/app/Http/Controllers/References/BankAccountsController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\References; use Illuminate\Http\Request; use App\Entities\Options\Option; use App\Http\Controllers\Controller; +use App\Entities\Invoices\BankAccount; /** * Bank Account Controller. @@ -14,28 +15,17 @@ use App\Http\Controllers\Controller; class BankAccountsController extends Controller { /** - * Display a listing of the bankAccount. + * Display a listing of the bank account. * - * @return \Illuminate\Http\Response + * @return \Illuminate\View\View */ public function index() { $editableBankAccount = null; - $bankAccounts = Option::where('key', 'bank_accounts')->first(); - - if (!is_null($bankAccounts)) { - $bankAccounts = $bankAccounts->value; - $bankAccounts = json_decode($bankAccounts, true); - $bankAccounts = collect($bankAccounts) - ->map(function ($bankAccount) { - return (object) $bankAccount; - }); + $bankAccounts = BankAccount::all(); - if (in_array(request('action'), ['edit', 'delete']) && request('id') != null) { - $editableBankAccount = $bankAccounts[request('id')]; - } - } else { - $bankAccounts = collect([]); + if (in_array(request('action'), ['edit', 'delete']) && request('id') != null) { + $editableBankAccount = BankAccount::find(request('id')); } return view('bank-accounts.index', compact('bankAccounts', 'editableBankAccount')); @@ -44,9 +34,8 @@ class BankAccountsController extends Controller /** * Store a newly created bank account in storage. * - * @param \Illuminate\Http\Request $request - * - * @return \Illuminate\Http\Response + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse */ public function store(Request $request) { @@ -57,24 +46,7 @@ class BankAccountsController extends Controller '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(); + BankAccount::create($newBankAccount); flash(trans('bank_account.created'), 'success'); @@ -84,32 +56,21 @@ class BankAccountsController extends Controller /** * Update the specified bank account in storage. * - * @param \Illuminate\Http\Request $request - * @param \App\Entities\Invoices\BankAccount $bankAccount - * - * @return \Illuminate\Http\Response + * @param \Illuminate\Http\Request $request + * @param \App\Entities\Invoices\BankAccount $bankAccount + * @return \Illuminate\Http\RedirectResponse */ - public function update(Request $request, $bankAccountId) + public function update(Request $request, BankAccount $bankAccount) { $bankAccountData = $request->validate([ 'name' => 'required|max:60', 'number' => 'required|max:60', 'account_name' => 'required|max:60', 'description' => 'nullable|max:255', + 'is_active' => 'required|in:0,1', ]); - $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(); + $bankAccount->update($bankAccountData); flash(trans('bank_account.updated'), 'success'); @@ -119,30 +80,16 @@ class BankAccountsController extends Controller /** * Remove the specified bank account from storage. * - * @param \App\Entities\Invoices\BankAccount $bankAccount - * - * @return \Illuminate\Http\Response + * @param \App\Entities\Invoices\BankAccount $bankAccount + * @return \Illuminate\Http\RedirectResponse */ - public function destroy($bankAccountId) + public function destroy(BankAccount $bankAccount) { 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(); - + if (request('bank_account_id') == $bankAccount->id && $bankAccount->delete()) { flash(trans('bank_account.deleted'), 'success'); return redirect()->route('bank-accounts.index'); @@ -150,4 +97,25 @@ class BankAccountsController extends Controller return back(); } + + /** + * Import bank account from site_options table. + * + * @return \Illuminate\Http\RedirectResponse + */ + public function import() + { + $bankAccounts = Option::where('key', 'bank_accounts')->first(); + if ($bankAccounts && $bankAccounts->value) { + $bankAccountList = json_decode($bankAccounts->value, true); + foreach ($bankAccountList as $bankAccountData) { + $bankAccount = new BankAccount($bankAccountData); + $bankAccount->save(); + } + $bankAccounts->delete(); + flash(__('bank_account.imported', ['count' => count($bankAccountList)]), 'success'); + } + + return back(); + } } diff --git a/composer.lock b/composer.lock index ee5c8e2..be9d10b 100644 --- a/composer.lock +++ b/composer.lock @@ -1,7 +1,7 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], "content-hash": "fd28a38cbcaf3bccc1d6fb34444372ee", @@ -3008,16 +3008,16 @@ }, { "name": "luthfi/simple-crud-generator", - "version": "1.2.3", + "version": "1.2.7", "source": { "type": "git", "url": "https://github.com/nafiesl/SimpleCrudGenerator.git", - "reference": "6a64e62c3b91eb92739b7c7b89d2e3439d180c94" + "reference": "0dc629fab1c1708eedf545aa81c428905e7e4864" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nafiesl/SimpleCrudGenerator/zipball/6a64e62c3b91eb92739b7c7b89d2e3439d180c94", - "reference": "6a64e62c3b91eb92739b7c7b89d2e3439d180c94", + "url": "https://api.github.com/repos/nafiesl/SimpleCrudGenerator/zipball/0dc629fab1c1708eedf545aa81c428905e7e4864", + "reference": "0dc629fab1c1708eedf545aa81c428905e7e4864", "shasum": "" }, "require": { @@ -3060,7 +3060,7 @@ "tdd-workflow", "testing" ], - "time": "2018-09-10T09:02:29+00:00" + "time": "2018-10-23T09:49:27+00:00" }, { "name": "maximebf/debugbar", diff --git a/database/factories/BankAccountFactory.php b/database/factories/BankAccountFactory.php new file mode 100644 index 0000000..917dac3 --- /dev/null +++ b/database/factories/BankAccountFactory.php @@ -0,0 +1,12 @@ +define(BankAccount::class, function (Faker $faker) { + return [ + 'name' => 'Bank '.strtoupper(str_random(4)), + 'number' => str_random(10), + 'account_name' => $faker->name, + ]; +}); diff --git a/database/migrations/2018_10_30_215937_create_bank_accounts_table.php b/database/migrations/2018_10_30_215937_create_bank_accounts_table.php new file mode 100644 index 0000000..c4740c3 --- /dev/null +++ b/database/migrations/2018_10_30_215937_create_bank_accounts_table.php @@ -0,0 +1,36 @@ +increments('id'); + $table->string('name', 60); + $table->string('number', 30); + $table->string('account_name', 60); + $table->string('description')->nullable(); + $table->boolean('is_active')->default(1); // 1:active, 0:in_active + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('bank_accounts'); + } +} diff --git a/resources/lang/de/bank_account.php b/resources/lang/de/bank_account.php index db3b9f7..1611f5e 100644 --- a/resources/lang/de/bank_account.php +++ b/resources/lang/de/bank_account.php @@ -8,6 +8,8 @@ return [ 'back_to_index' => 'Zurück zur Bankverbindunsliste', // Actions + 'import' => 'Import Bank Account', + 'imported' => ':count bank account(s) has imported.', 'create' => 'Neue Bankverbindung erstellen', 'created' => 'Neue Bankverbindung wurde erstellt.', 'show' => 'Zeige Bankverbindung Details', diff --git a/resources/lang/en/bank_account.php b/resources/lang/en/bank_account.php index 524cee8..b153168 100644 --- a/resources/lang/en/bank_account.php +++ b/resources/lang/en/bank_account.php @@ -8,6 +8,8 @@ return [ 'back_to_index' => 'Back to Bank Account list', // Actions + 'import' => 'Import Bank Account', + 'imported' => ':count bank account(s) has imported.', 'create' => 'Create new Bank Account', 'created' => 'New Bank Account has been created.', 'show' => 'Show Bank Account detail', diff --git a/resources/lang/id/bank_account.php b/resources/lang/id/bank_account.php index fc21def..b178ec2 100644 --- a/resources/lang/id/bank_account.php +++ b/resources/lang/id/bank_account.php @@ -8,6 +8,8 @@ return [ 'back_to_index' => 'Kembali ke daftar Rekening Bank', // Actions + 'import' => 'Import Rekening Bank', + 'imported' => ':count rekening bank telah diimport.', 'create' => 'Input Rekening Bank Baru', 'created' => 'Input Rekening Bank baru telah berhasil.', 'show' => 'Lihat Detail Rekening Bank', diff --git a/resources/views/bank-accounts/forms.blade.php b/resources/views/bank-accounts/forms.blade.php index 740038d..d7a962a 100644 --- a/resources/views/bank-accounts/forms.blade.php +++ b/resources/views/bank-accounts/forms.blade.php @@ -24,6 +24,7 @@ {!! 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')]) !!} + {!! FormField::radios('is_active', [__('app.in_active'), __('app.active')], ['label' => __('app.status')]) !!}