From b5b88e892a47cf9fd2d4f772b28807ceee903322 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 29 Oct 2017 21:06:53 +0800 Subject: [PATCH] Add type_id column to partners table (1:Customer, 2:Vendor) --- app/Entities/Partners/Partner.php | 7 ++++++- app/Entities/Projects/ProjectsRepository.php | 1 + .../Controllers/Partners/PartnersController.php | 12 +++++++++-- database/factories/PartnerFactory.php | 23 ++++++++++++++++++++++ .../2017_10_26_134455_create_partners_table.php | 1 + resources/lang/id/partner.php | 6 ++++++ resources/views/partners/forms.blade.php | 2 ++ tests/Feature/ManagePartnersTest.php | 4 ++++ tests/Unit/Models/PartnerTest.php | 12 +++++++++++ 9 files changed, 65 insertions(+), 3 deletions(-) diff --git a/app/Entities/Partners/Partner.php b/app/Entities/Partners/Partner.php index 32d82fb..3e83e8a 100644 --- a/app/Entities/Partners/Partner.php +++ b/app/Entities/Partners/Partner.php @@ -9,7 +9,12 @@ class Partner extends Model { use OwnedByAgency; - protected $fillable = ['name', 'email', 'phone', 'pic', 'address', 'notes', 'is_active', 'owner_id']; + protected $fillable = ['name', 'type_id', 'email', 'phone', 'pic', 'address', 'notes', 'is_active', 'owner_id']; + + public function getTypeAttribute() + { + return $this->type_id == 1 ? trans('partner.types.customer') : trans('partner.types.vendor'); + } public function owner() { diff --git a/app/Entities/Projects/ProjectsRepository.php b/app/Entities/Projects/ProjectsRepository.php index 3150e60..43ca468 100755 --- a/app/Entities/Projects/ProjectsRepository.php +++ b/app/Entities/Projects/ProjectsRepository.php @@ -62,6 +62,7 @@ class ProjectsRepository extends BaseRepository { $newCustomer = new Partner; $newCustomer->name = $customerName; + $newCustomer->type_id = 1; $newCustomer->email = $customerEmail; $newCustomer->owner_id = auth()->user()->agency->id; $newCustomer->save(); diff --git a/app/Http/Controllers/Partners/PartnersController.php b/app/Http/Controllers/Partners/PartnersController.php index c7317e4..8bc7e9d 100644 --- a/app/Http/Controllers/Partners/PartnersController.php +++ b/app/Http/Controllers/Partners/PartnersController.php @@ -16,7 +16,13 @@ class PartnersController extends Controller public function index() { $editablePartner = null; - $partners = Partner::where(function ($query) { + + $partnerTypes = [ + 1 => trans('partner.types.customer'), + 2 => trans('partner.types.vendor'), + ]; + + $partners = Partner::where(function ($query) { $query->where('name', 'like', '%'.request('q').'%'); }) ->withCount('projects') @@ -26,7 +32,7 @@ class PartnersController extends Controller $editablePartner = Partner::find(request('id')); } - return view('partners.index', compact('partners', 'editablePartner')); + return view('partners.index', compact('partners', 'partnerTypes', 'editablePartner')); } /** @@ -39,6 +45,7 @@ class PartnersController extends Controller { $newPartnerData = $this->validate($request, [ 'name' => 'required|max:60', + 'type_id' => 'required|numeric', 'email' => 'nullable|email|unique:partners,email', 'phone' => 'nullable|max:255', 'pic' => 'nullable|max:255', @@ -77,6 +84,7 @@ class PartnersController extends Controller { $partnerData = $this->validate($request, [ 'name' => 'required|max:60', + 'type_id' => 'required|numeric', 'email' => 'nullable|email|unique:partners,email,'.$partner->id, 'phone' => 'nullable|max:255', 'pic' => 'nullable|max:255', diff --git a/database/factories/PartnerFactory.php b/database/factories/PartnerFactory.php index 4dd757b..5d94866 100644 --- a/database/factories/PartnerFactory.php +++ b/database/factories/PartnerFactory.php @@ -8,6 +8,29 @@ $factory->define(Partner::class, function (Faker $faker) { return [ 'name' => $faker->company, + 'type_id' => 1, // 1:Customer, 2:Vendor + 'owner_id' => function () { + return factory(Agency::class)->create()->id; + }, + ]; +}); + +$factory->defineAs(Partner::class, 'customer', function (Faker $faker) { + + return [ + 'name' => $faker->company, + 'type_id' => 1, // 1:Customer, 2:Vendor + 'owner_id' => function () { + return factory(Agency::class)->create()->id; + }, + ]; +}); + +$factory->defineAs(Partner::class, 'vendor', function (Faker $faker) { + + return [ + 'name' => $faker->company, + 'type_id' => 2, // 1:Customer, 2:Vendor 'owner_id' => function () { return factory(Agency::class)->create()->id; }, diff --git a/database/migrations/2017_10_26_134455_create_partners_table.php b/database/migrations/2017_10_26_134455_create_partners_table.php index 9c55395..aa42299 100644 --- a/database/migrations/2017_10_26_134455_create_partners_table.php +++ b/database/migrations/2017_10_26_134455_create_partners_table.php @@ -16,6 +16,7 @@ class CreatePartnersTable extends Migration Schema::create('partners', function (Blueprint $table) { $table->increments('id'); $table->string('name', 60); + $table->unsignedTinyInteger('type_id'); $table->string('email')->nullable()->unique(); $table->string('phone')->nullable(); $table->string('pic')->nullable(); diff --git a/resources/lang/id/partner.php b/resources/lang/id/partner.php index 6d94435..bb2e4b6 100644 --- a/resources/lang/id/partner.php +++ b/resources/lang/id/partner.php @@ -28,4 +28,10 @@ return [ 'description' => 'Deskripsi Partner', 'pic' => 'PIC', 'projects_count' => 'Jml Project', + + // Types + 'types' => [ + 'customer' => 'Customer', + 'vendor' => 'Vendor', + ], ]; diff --git a/resources/views/partners/forms.blade.php b/resources/views/partners/forms.blade.php index f9b0f53..b7c1659 100644 --- a/resources/views/partners/forms.blade.php +++ b/resources/views/partners/forms.blade.php @@ -1,6 +1,7 @@ @if (Request::get('action') == 'create') {!! Form::open(['route' => 'partners.store']) !!} {!! FormField::text('name', ['required' => true]) !!} + {!! FormField::radios('type_id', $partnerTypes, ['required' => true]) !!} {!! FormField::email('email') !!} {!! FormField::text('phone') !!} {!! FormField::text('pic') !!} @@ -13,6 +14,7 @@ @if (Request::get('action') == 'edit' && $editablePartner) {!! Form::model($editablePartner, ['route' => ['partners.update', $editablePartner->id],'method' => 'patch']) !!} {!! FormField::text('name', ['required' => true]) !!} + {!! FormField::radios('type_id', $partnerTypes, ['required' => true]) !!} {!! FormField::email('email') !!} {!! FormField::text('phone') !!} {!! FormField::text('pic') !!} diff --git a/tests/Feature/ManagePartnersTest.php b/tests/Feature/ManagePartnersTest.php index 6a2bada..2b93e8a 100644 --- a/tests/Feature/ManagePartnersTest.php +++ b/tests/Feature/ManagePartnersTest.php @@ -33,6 +33,7 @@ class ManagePartnersTest extends TestCase $this->submitForm(trans('partner.create'), [ 'name' => 'Partner 1 name', + 'type_id' => 1, 'email' => 'partner1@mail.com', 'phone' => '081234567890', 'pic' => 'Nama PIC Partner', @@ -44,6 +45,7 @@ class ManagePartnersTest extends TestCase $this->seeInDatabase('partners', [ 'name' => 'Partner 1 name', + 'type_id' => 1, 'email' => 'partner1@mail.com', 'phone' => '081234567890', 'pic' => 'Nama PIC Partner', @@ -65,6 +67,7 @@ class ManagePartnersTest extends TestCase $this->submitForm(trans('partner.update'), [ 'name' => 'Partner 1 name', + 'type_id' => 2, 'email' => 'partner1@mail.com', 'phone' => '081234567890', 'pic' => 'Nama PIC Partner', @@ -77,6 +80,7 @@ class ManagePartnersTest extends TestCase $this->seeInDatabase('partners', [ 'name' => 'Partner 1 name', + 'type_id' => 2, 'email' => 'partner1@mail.com', 'phone' => '081234567890', 'pic' => 'Nama PIC Partner', diff --git a/tests/Unit/Models/PartnerTest.php b/tests/Unit/Models/PartnerTest.php index 467ae07..f21cd66 100644 --- a/tests/Unit/Models/PartnerTest.php +++ b/tests/Unit/Models/PartnerTest.php @@ -43,4 +43,16 @@ class PartnerTest extends TestCase ]), $partner->nameLink() ); } + + /** @test */ + public function a_partner_has_type() + { + $partner = factory(Partner::class, 'customer')->make(); + $this->assertEquals(1, $partner->type_id); + $this->assertEquals(trans('partner.types.customer'), $partner->type); + + $partner = factory(Partner::class, 'vendor')->make(); + $this->assertEquals(2, $partner->type_id); + $this->assertEquals(trans('partner.types.vendor'), $partner->type); + } }