From d6623b91bd4d4aa2d73aadba20956e7d9137be58 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Mon, 3 Sep 2018 22:52:58 +0800 Subject: [PATCH 1/3] Add status attribute on Vendor model Add Vendor model docblock --- app/Entities/Partners/Vendor.php | 20 ++++++++++++++++++++ tests/Unit/Models/VendorTest.php | 10 ++++++++++ 2 files changed, 30 insertions(+) diff --git a/app/Entities/Partners/Vendor.php b/app/Entities/Partners/Vendor.php index e82cd19..cf3838e 100644 --- a/app/Entities/Partners/Vendor.php +++ b/app/Entities/Partners/Vendor.php @@ -6,10 +6,30 @@ use Illuminate\Database\Eloquent\Model; class Vendor extends Model { + /** + * The attributes that are mass assignable. + * + * @var array + */ protected $fillable = ['name', 'notes', 'website', 'is_active']; + /** + * Vendor has many payments relation. + * + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ public function payments() { return $this->hasMany('App\Entities\Payments\Payment', 'partner_id'); } + + /** + * Get status attribute. + * + * @return string + */ + public function getStatusAttribute() + { + return $this->is_active == 1 ? __('app.active') : __('app.in_active'); + } } diff --git a/tests/Unit/Models/VendorTest.php b/tests/Unit/Models/VendorTest.php index 19c32bb..210ad29 100644 --- a/tests/Unit/Models/VendorTest.php +++ b/tests/Unit/Models/VendorTest.php @@ -28,4 +28,14 @@ class VendorTest extends TestCase $this->assertInstanceOf(Collection::class, $vendor->payments); $this->assertInstanceOf(Payment::class, $vendor->payments->first()); } + + /** @test */ + public function a_vendor_has_status_attribute() + { + $vendor = factory(Vendor::class)->make(['is_active' => 1]); + $this->assertEquals(__('app.active'), $vendor->status); + + $vendor->is_active = 0; + $this->assertEquals(__('app.in_active'), $vendor->status); + } } From 479c7475e8018c2ee3a0c0cc147e3c1e985cc77a Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Mon, 3 Sep 2018 22:56:35 +0800 Subject: [PATCH 2/3] Add vendor detail page Add venvor detail link to vendor list page --- .../Controllers/Partners/VendorsController.php | 5 ++++ resources/lang/de/vendor.php | 2 ++ resources/lang/en/vendor.php | 2 ++ resources/lang/id/vendor.php | 20 ++++++++------- resources/views/vendors/index.blade.php | 29 +++++++++++----------- resources/views/vendors/show.blade.php | 26 +++++++++++++++++++ 6 files changed, 61 insertions(+), 23 deletions(-) create mode 100755 resources/views/vendors/show.blade.php diff --git a/app/Http/Controllers/Partners/VendorsController.php b/app/Http/Controllers/Partners/VendorsController.php index 265ae00..f31ae87 100644 --- a/app/Http/Controllers/Partners/VendorsController.php +++ b/app/Http/Controllers/Partners/VendorsController.php @@ -75,6 +75,11 @@ class VendorsController extends Controller return redirect()->route('vendors.index', $routeParam); } + public function show(Vendor $vendor) + { + return view('vendors.show', compact('vendor')); + } + /** * Remove the specified vendor from storage. * diff --git a/resources/lang/de/vendor.php b/resources/lang/de/vendor.php index 35bc828..9ad37ee 100644 --- a/resources/lang/de/vendor.php +++ b/resources/lang/de/vendor.php @@ -4,6 +4,7 @@ return [ // Labels 'vendor' => 'Hersteller', 'list' => 'Hersteller Liste', + 'detail' => 'Vendor Detail', 'search' => 'Hersteller suchen', 'not_found' => 'Hersteller nicht gefunden.', 'empty' => 'Hersteller Liste ist leer.', @@ -25,5 +26,6 @@ return [ // Attributes 'name' => 'Hersteller Name', + 'website' => 'Vendor Website', 'description' => 'Hersteller Beschreibung', ]; diff --git a/resources/lang/en/vendor.php b/resources/lang/en/vendor.php index 4126647..1fe3766 100644 --- a/resources/lang/en/vendor.php +++ b/resources/lang/en/vendor.php @@ -4,6 +4,7 @@ return [ // Labels 'vendor' => 'Vendor', 'list' => 'Vendor List', + 'detail' => 'Vendor Detail', 'search' => 'Search Vendor', 'not_found' => 'Vendor not found.', 'empty' => 'Vendor list is empty.', @@ -25,5 +26,6 @@ return [ // Attributes 'name' => 'Vendor Name', + 'website' => 'Vendor Website', 'description' => 'Vendor Description', ]; diff --git a/resources/lang/id/vendor.php b/resources/lang/id/vendor.php index 5a04da7..e283275 100644 --- a/resources/lang/id/vendor.php +++ b/resources/lang/id/vendor.php @@ -2,13 +2,14 @@ return [ // Labels - 'vendor' => 'Vendor', - 'list' => 'Daftar Vendor', - 'search' => 'Cari Vendor', - 'not_found' => 'Vendor tidak ditemukan', - 'empty' => 'Belum ada Vendor', - 'back_to_show' => 'Kembali ke detail Vendor', - 'back_to_index' => 'Kembali ke daftar Vendor', + 'vendor' => 'Vendor', + 'list' => 'Daftar Vendor', + 'detail' => 'Detail Vendor', + 'search' => 'Cari Vendor', + 'not_found' => 'Vendor tidak ditemukan', + 'empty' => 'Belum ada Vendor', + 'back_to_show' => 'Kembali ke detail Vendor', + 'back_to_index' => 'Kembali ke daftar Vendor', // Actions 'create' => 'Input Vendor Baru', @@ -24,6 +25,7 @@ return [ 'undeleteable' => 'Data Vendor tidak dapat dihapus.', // Attributes - 'name' => 'Nama Vendor', - 'description' => 'Deskripsi Vendor', + 'name' => 'Nama Vendor', + 'website' => 'Website Vendor', + 'description' => 'Deskripsi Vendor', ]; diff --git a/resources/views/vendors/index.blade.php b/resources/views/vendors/index.blade.php index c0df43f..1810ace 100644 --- a/resources/views/vendors/index.blade.php +++ b/resources/views/vendors/index.blade.php @@ -1,32 +1,32 @@ @extends('layouts.app') -@section('title', trans('vendor.list')) +@section('title', __('vendor.list')) @section('content')

- {{ link_to_route('vendors.index', trans('vendor.create'), ['action' => 'create'], ['class' => 'btn btn-success']) }} + {{ link_to_route('vendors.index', __('vendor.create'), ['action' => 'create'], ['class' => 'btn btn-success']) }}
- {{ trans('vendor.list') }} - {{ trans('app.total') }} : {{ $vendors->total() }} {{ trans('vendor.vendor') }} + {{ __('vendor.list') }} + {{ __('app.total') }} : {{ $vendors->total() }} {{ __('vendor.vendor') }}

{{ Form::open(['method' => 'get','class' => 'form-inline']) }} - {!! FormField::text('q', ['value' => request('q'), 'label' => trans('vendor.search'), 'class' => 'input-sm']) !!} - {{ Form::submit(trans('vendor.search'), ['class' => 'btn btn-sm']) }} - {{ link_to_route('vendors.index', trans('app.reset')) }} + {!! FormField::text('q', ['value' => request('q'), 'label' => __('vendor.search'), 'class' => 'input-sm']) !!} + {{ Form::submit(__('vendor.search'), ['class' => 'btn btn-sm']) }} + {{ link_to_route('vendors.index', __('app.reset')) }} {{ Form::close() }}
- - - - + + + + @@ -36,12 +36,13 @@ @endforeach diff --git a/resources/views/vendors/show.blade.php b/resources/views/vendors/show.blade.php new file mode 100755 index 0000000..17e2051 --- /dev/null +++ b/resources/views/vendors/show.blade.php @@ -0,0 +1,26 @@ +@extends('layouts.app') + +@section('title', $vendor->name.' - '.__('vendor.detail')) + +@section('content') +

+
+ {!! link_to_route('vendors.index', __('vendor.back_to_index'), [], ['class' => 'btn btn-default']) !!} +
+ {{ $vendor->name }} {{ __('vendor.detail') }} +

+
+
+
+
{{ trans('app.table_no') }}{{ trans('vendor.name') }}{{ trans('app.notes') }}{{ trans('app.action') }}{{ __('app.table_no') }}{{ __('vendor.name') }}{{ __('app.notes') }}{{ __('app.action') }}
{{ $vendor->name }} {{ $vendor->notes }} - {!! link_to_route( + {{ link_to_route('vendors.show', __('app.show'), $vendor) }} | + {{ link_to_route( 'vendors.index', - trans('app.edit'), + __('app.edit'), ['action' => 'edit', 'id' => $vendor->id] + Request::only('page', 'q'), ['id' => 'edit-vendor-' . $vendor->id] - ) !!} + ) }}
+ + + + + + +
{{ __('vendor.name') }}{{ $vendor->name }}
{{ __('vendor.website') }}{{ $vendor->website }}
{{ __('app.status') }}{{ $vendor->status }}
{{ __('app.notes') }}{!! nl2br($vendor->notes) !!}
+
+
+
+@endsection From c863ef14d330813e5cf78c249d59d770fd7343c5 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Mon, 3 Sep 2018 23:15:56 +0800 Subject: [PATCH 3/3] Add payment list on vendor detail page Update vendor payment relation to morphMany --- app/Entities/Partners/Vendor.php | 4 +-- .../Controllers/Partners/VendorsController.php | 6 ++++ resources/views/vendors/show.blade.php | 36 ++++++++++++++++++++++ tests/Unit/Models/VendorTest.php | 7 +++-- 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/app/Entities/Partners/Vendor.php b/app/Entities/Partners/Vendor.php index cf3838e..b0ad461 100644 --- a/app/Entities/Partners/Vendor.php +++ b/app/Entities/Partners/Vendor.php @@ -16,11 +16,11 @@ class Vendor extends Model /** * Vendor has many payments relation. * - * @return \Illuminate\Database\Eloquent\Relations\HasMany + * @return \Illuminate\Database\Eloquent\Relations\MorphMany */ public function payments() { - return $this->hasMany('App\Entities\Payments\Payment', 'partner_id'); + return $this->morphMany('App\Entities\Payments\Payment', 'partner'); } /** diff --git a/app/Http/Controllers/Partners/VendorsController.php b/app/Http/Controllers/Partners/VendorsController.php index f31ae87..c295066 100644 --- a/app/Http/Controllers/Partners/VendorsController.php +++ b/app/Http/Controllers/Partners/VendorsController.php @@ -75,6 +75,12 @@ class VendorsController extends Controller return redirect()->route('vendors.index', $routeParam); } + /** + * Show vendor detail page. + * + * @param \App\Entities\Partners\Vendor $vendor + * @return \Illuminate\View\View + */ public function show(Vendor $vendor) { return view('vendors.show', compact('vendor')); diff --git a/resources/views/vendors/show.blade.php b/resources/views/vendors/show.blade.php index 17e2051..953dc32 100755 --- a/resources/views/vendors/show.blade.php +++ b/resources/views/vendors/show.blade.php @@ -9,6 +9,7 @@ {{ $vendor->name }} {{ __('vendor.detail') }} +
@@ -23,4 +24,39 @@
+ +
+

{{ __('payment.payments') }}

+
+ + + + + + + + + + + + @foreach ($vendor->payments as $key => $payment) + + + + + + + + @endforeach + + + + + + + + +
{{ __('app.table_no') }}{{ __('payment.project') }}{{ __('app.date') }}{{ __('payment.amount') }}{{ __('payment.description') }}
{{ 1 + $key }}{{ $payment->project->name }}{{ $payment->date }}{{ formatRp($payment->amount) }}{{ $payment->description }}
{{ __('app.total') }}{{ formatRp($vendor->payments->sum('amount')) }} 
+
+
@endsection diff --git a/tests/Unit/Models/VendorTest.php b/tests/Unit/Models/VendorTest.php index 210ad29..9e9437d 100644 --- a/tests/Unit/Models/VendorTest.php +++ b/tests/Unit/Models/VendorTest.php @@ -20,10 +20,13 @@ class VendorTest extends TestCase } /** @test */ - public function a_vendor_has_many_payments_relation() + public function a_vendor_has_morph_many_payments_relation() { $vendor = factory(Vendor::class)->create(); - $payment = factory(Payment::class)->create(['partner_id' => $vendor->id]); + $payment = factory(Payment::class)->create([ + 'partner_id' => $vendor->id, + 'partner_type' => 'App\Entities\Partners\Vendor', + ]); $this->assertInstanceOf(Collection::class, $vendor->payments); $this->assertInstanceOf(Payment::class, $vendor->payments->first());