Browse Source

Change Partner entity back to Customer entity

pull/1/head
Nafies Luthfi 8 years ago
parent
commit
990dc3930f
  1. 8
      app/Entities/BaseRepository.php
  2. 6
      app/Entities/Partners/Customer.php
  3. 3
      app/Entities/Payments/Payment.php
  4. 4
      app/Entities/Projects/Project.php
  5. 4
      app/Entities/Projects/ProjectsRepository.php
  6. 2
      app/Entities/Subscriptions/Subscription.php
  7. 140
      app/Http/Controllers/Partners/CustomersController.php
  8. 145
      app/Http/Controllers/Partners/PartnersController.php
  9. 4
      app/Http/Controllers/PaymentsController.php
  10. 64
      app/Policies/Partners/CustomerPolicy.php
  11. 64
      app/Policies/Partners/PartnerPolicy.php
  12. 8
      app/Providers/AuthServiceProvider.php
  13. 6
      database/factories/CustomerFactory.php
  14. 4
      database/factories/ModelFactory.php
  15. 4
      database/factories/PaymentFactory.php
  16. 4
      database/factories/ProjectFactory.php
  17. 6
      database/migrations/2017_10_26_134455_create_customers_table.php
  18. 34
      resources/lang/id/customer.php
  19. 40
      resources/lang/id/partner.php
  20. 16
      resources/views/customers/create.blade.php
  21. 22
      resources/views/customers/edit.blade.php
  22. 26
      resources/views/customers/forms.blade.php
  23. 50
      resources/views/customers/index.blade.php
  24. 30
      resources/views/customers/show.blade.php
  25. 2
      resources/views/layouts/partials/sidebar.blade.php
  26. 50
      resources/views/partners/index.blade.php
  27. 4
      routes/web.php
  28. 4
      tests/Feature/InvoiceEntryTest.php
  29. 10
      tests/Feature/ManageFeaturesTest.php
  30. 109
      tests/Feature/ManagePartnersTest.php
  31. 56
      tests/Feature/ManageProjectsTest.php
  32. 14
      tests/Feature/ManageSubscriptionsTest.php
  33. 109
      tests/Feature/Partners/ManageCustomersTest.php
  34. 12
      tests/Feature/Payments/ManagePaymentsTest.php
  35. 8
      tests/Feature/Payments/PaymentSearchTest.php
  36. 46
      tests/Unit/Models/CustomerTest.php
  37. 46
      tests/Unit/Models/PartnerTest.php
  38. 4
      tests/Unit/Models/PaymentTest.php
  39. 6
      tests/Unit/Models/ProjectTest.php
  40. 4
      tests/Unit/Models/SubscriptionTest.php
  41. 40
      tests/Unit/Policies/CustomerPolicyTest.php
  42. 40
      tests/Unit/Policies/PartnerPolicyTest.php

8
app/Entities/BaseRepository.php

@ -2,7 +2,7 @@
namespace App\Entities;
use App\Entities\Partners\Partner;
use App\Entities\Partners\Customer;
use App\Entities\Projects\Feature;
use App\Entities\Projects\Project;
use App\Entities\Users\User;
@ -15,12 +15,12 @@ abstract class BaseRepository extends EloquentRepository
public function getCustomersList()
{
return Partner::orderBy('name')->pluck('name', 'id');
return Customer::orderBy('name')->pluck('name', 'id');
}
public function getCustomersAndVendorsList()
{
return Partner::orderBy('name')->pluck('name', 'id');
return Customer::orderBy('name')->pluck('name', 'id');
}
public function getWorkersList()
@ -30,7 +30,7 @@ abstract class BaseRepository extends EloquentRepository
public function getVendorsList()
{
return Partner::orderBy('name')->pluck('name', 'id');
return Customer::orderBy('name')->pluck('name', 'id');
}
public function getProjectsList()

6
app/Entities/Partners/Partner.php → app/Entities/Partners/Customer.php

@ -5,7 +5,7 @@ namespace App\Entities\Partners;
use App\Traits\OwnedByAgency;
use Illuminate\Database\Eloquent\Model;
class Partner extends Model
class Customer extends Model
{
use OwnedByAgency;
@ -23,10 +23,10 @@ class Partner extends Model
public function nameLink()
{
return link_to_route('partners.show', $this->name, [$this->id], [
return link_to_route('customers.show', $this->name, [$this->id], [
'title' => trans(
'app.show_detail_title',
['name' => $this->name, 'type' => trans('partner.partner')]
['name' => $this->name, 'type' => trans('customer.customer')]
),
]);
}

3
app/Entities/Payments/Payment.php

@ -2,7 +2,6 @@
namespace App\Entities\Payments;
use App\Entities\Partners\Partner;
use App\Entities\Payments\PaymentPresenter;
use App\Entities\Projects\Project;
use Illuminate\Database\Eloquent\Builder;
@ -35,7 +34,7 @@ class Payment extends Model
public function partner()
{
return $this->belongsTo(Partner::class, 'partner_id');
return $this->belongsTo('App\Entities\Partners\Customer', 'partner_id');
}
public function type()

4
app/Entities/Projects/Project.php

@ -4,7 +4,7 @@ namespace App\Entities\Projects;
use App\Entities\Agencies\Agency;
use App\Entities\Invoices\Invoice;
use App\Entities\Partners\Partner;
use App\Entities\Partners\Customer;
use App\Entities\Payments\Payment;
use App\Entities\Projects\ProjectPresenter;
use App\Entities\Projects\Task;
@ -63,7 +63,7 @@ class Project extends Model
public function customer()
{
return $this->belongsTo(Partner::class);
return $this->belongsTo(Customer::class);
}
public function owner()

4
app/Entities/Projects/ProjectsRepository.php

@ -3,7 +3,7 @@
namespace App\Entities\Projects;
use App\Entities\BaseRepository;
use App\Entities\Partners\Partner;
use App\Entities\Partners\Customer;
use DB;
/**
@ -60,7 +60,7 @@ class ProjectsRepository extends BaseRepository
public function createNewCustomer($customerName, $customerEmail)
{
$newCustomer = new Partner;
$newCustomer = new Customer;
$newCustomer->name = $customerName;
$newCustomer->email = $customerEmail;
$newCustomer->owner_id = auth()->user()->agency->id;

2
app/Entities/Subscriptions/Subscription.php

@ -19,7 +19,7 @@ class Subscription extends Model
public function vendor()
{
return $this->belongsTo('App\Entities\Partners\Partner');
return $this->belongsTo('App\Entities\Partners\Customer');
}
public function status()

140
app/Http/Controllers/Partners/CustomersController.php

@ -0,0 +1,140 @@
<?php
namespace App\Http\Controllers\Partners;
use App\Entities\Partners\Customer;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class CustomersController extends Controller
{
/**
* Display a listing of the customer.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$editableCustomer = null;
$customers = Customer::where(function ($query) {
$query->where('name', 'like', '%'.request('q').'%');
})
->withCount('projects')
->paginate(25);
if (in_array(request('action'), ['edit', 'delete']) && request('id') != null) {
$editableCustomer = Customer::find(request('id'));
}
return view('customers.index', compact('customers', 'editableCustomer'));
}
/**
* Show the create customer form.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('customers.create');
}
/**
* Store a newly created customer in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$newCustomerData = $this->validate($request, [
'name' => 'required|max:60',
'email' => 'nullable|email|unique:customers,email',
'phone' => 'nullable|max:255',
'pic' => 'nullable|max:255',
'address' => 'nullable|max:255',
'notes' => 'nullable|max:255',
]);
$newCustomerData['owner_id'] = auth()->user()->agency->id;
Customer::create($newCustomerData);
flash(trans('customer.created'), 'success');
return redirect()->route('customers.index');
}
/**
* Show the specified customer.
*
* @param \App\Entities\Partners\Customer $customer
* @return \Illuminate\Http\Response
*/
public function show(Customer $customer)
{
return view('customers.show', compact('customer'));
}
/**
* Show the edit customer form.
*
* @param \App\Entities\Partners\Customer $customer
* @return \Illuminate\Http\Response
*/
public function edit(Customer $customer)
{
return view('customers.edit', compact('customer'));
}
/**
* Update the specified customer in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Entities\Partners\Customer $customer
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Customer $customer)
{
$customerData = $this->validate($request, [
'name' => 'required|max:60',
'email' => 'nullable|email|unique:customers,email,'.$customer->id,
'phone' => 'nullable|max:255',
'pic' => 'nullable|max:255',
'address' => 'nullable|max:255',
'notes' => 'nullable|max:255',
'is_active' => 'required|boolean',
]);
$customer->update($customerData);
flash(trans('customer.updated'), 'success');
return redirect()->route('customers.show', $customer->id);
}
/**
* Remove the specified customer from storage.
*
* @param \App\Entities\Partners\Customer $customer
* @return \Illuminate\Http\Response
*/
public function destroy(Customer $customer)
{
// TODO: user cannot delete customer that has been used in other table
$this->validate(request(), [
'customer_id' => 'required',
]);
$routeParam = request()->only('page', 'q');
if (request('customer_id') == $customer->id && $customer->delete()) {
flash(trans('customer.deleted'), 'warning');
return redirect()->route('customers.index', $routeParam);
}
flash(trans('customer.undeleted'), 'danger');
return back();
}
}

145
app/Http/Controllers/Partners/PartnersController.php

@ -1,145 +0,0 @@
<?php
namespace App\Http\Controllers\Partners;
use App\Entities\Partners\Partner;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PartnersController extends Controller
{
/**
* Display a listing of the partner.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$editablePartner = null;
$partnerTypes = [
1 => trans('partner.types.customer'),
2 => trans('partner.types.vendor'),
];
$partners = Partner::where(function ($query) {
$query->where('name', 'like', '%'.request('q').'%');
})
->withCount('projects')
->paginate(25);
if (in_array(request('action'), ['edit', 'delete']) && request('id') != null) {
$editablePartner = Partner::find(request('id'));
}
return view('partners.index', compact('partners', 'partnerTypes', 'editablePartner'));
}
/**
* Show the create partner form.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('partners.create');
}
/**
* Store a newly created partner in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$newPartnerData = $this->validate($request, [
'name' => 'required|max:60',
'email' => 'nullable|email|unique:partners,email',
'phone' => 'nullable|max:255',
'pic' => 'nullable|max:255',
'address' => 'nullable|max:255',
'notes' => 'nullable|max:255',
]);
$newPartnerData['owner_id'] = auth()->user()->agency->id;
Partner::create($newPartnerData);
flash(trans('partner.created'), 'success');
return redirect()->route('partners.index');
}
/**
* Show the specified partner.
*
* @param \App\Entities\Partners\Partner $partner
* @return \Illuminate\Http\Response
*/
public function show(Partner $partner)
{
return view('partners.show', compact('partner'));
}
/**
* Show the edit partner form.
*
* @param \App\Entities\Partners\Partner $partner
* @return \Illuminate\Http\Response
*/
public function edit(Partner $partner)
{
return view('partners.edit', compact('partner'));
}
/**
* Update the specified partner in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Entities\Partners\Partner $partner
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Partner $partner)
{
$partnerData = $this->validate($request, [
'name' => 'required|max:60',
'email' => 'nullable|email|unique:partners,email,'.$partner->id,
'phone' => 'nullable|max:255',
'pic' => 'nullable|max:255',
'address' => 'nullable|max:255',
'notes' => 'nullable|max:255',
'is_active' => 'required|boolean',
]);
$partner->update($partnerData);
flash(trans('partner.updated'), 'success');
return redirect()->route('partners.show', $partner->id);
}
/**
* Remove the specified partner from storage.
*
* @param \App\Entities\Partners\Partner $partner
* @return \Illuminate\Http\Response
*/
public function destroy(Partner $partner)
{
// TODO: user cannot delete partner that has been used in other table
$this->validate(request(), [
'partner_id' => 'required',
]);
$routeParam = request()->only('page', 'q');
if (request('partner_id') == $partner->id && $partner->delete()) {
flash(trans('partner.deleted'), 'warning');
return redirect()->route('partners.index', $routeParam);
}
flash(trans('partner.undeleted'), 'danger');
return back();
}
}

4
app/Http/Controllers/PaymentsController.php

@ -2,7 +2,7 @@
namespace App\Http\Controllers;
use App\Entities\Partners\Partner;
use App\Entities\Partners\Customer;
use App\Entities\Payments\Payment;
use App\Entities\Payments\PaymentsRepository;
use App\Http\Requests\Payments\CreateRequest;
@ -22,7 +22,7 @@ class PaymentsController extends Controller
public function index(Request $request)
{
$payments = $this->repo->getPayments($request->only('q', 'partner_id'));
$partnersList = Partner::pluck('name', 'id')->all();
$partnersList = Customer::pluck('name', 'id')->all();
return view('payments.index', compact('payments', 'partnersList'));
}

64
app/Policies/Partners/CustomerPolicy.php

@ -0,0 +1,64 @@
<?php
namespace App\Policies\Partners;
use App\Entities\Partners\Customer;
use App\Entities\Users\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class CustomerPolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view the customer.
*
* @param \App\Entities\Users\User $user
* @param \App\Entities\Partners\Customer $customer
* @return mixed
*/
public function view(User $user, Customer $customer)
{
// Update $user authorization to view $customer here.
return true;
}
/**
* Determine whether the user can create customers.
*
* @param \App\Entities\Users\User $user
* @param \App\Entities\Partners\Customer $customer
* @return mixed
*/
public function create(User $user, Customer $customer)
{
// Update $user authorization to create $customer here.
return true;
}
/**
* Determine whether the user can update the customer.
*
* @param \App\Entities\Users\User $user
* @param \App\Entities\Partners\Customer $customer
* @return mixed
*/
public function update(User $user, Customer $customer)
{
// Update $user authorization to update $customer here.
return true;
}
/**
* Determine whether the user can delete the customer.
*
* @param \App\Entities\Users\User $user
* @param \App\Entities\Partners\Customer $customer
* @return mixed
*/
public function delete(User $user, Customer $customer)
{
// Update $user authorization to delete $customer here.
return true;
}
}

64
app/Policies/Partners/PartnerPolicy.php

@ -1,64 +0,0 @@
<?php
namespace App\Policies\Partners;
use App\Entities\Partners\Partner;
use App\Entities\Users\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class PartnerPolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view the partner.
*
* @param \App\Entities\Users\User $user
* @param \App\Entities\Partners\Partner $partner
* @return mixed
*/
public function view(User $user, Partner $partner)
{
// Update $user authorization to view $partner here.
return true;
}
/**
* Determine whether the user can create partners.
*
* @param \App\Entities\Users\User $user
* @param \App\Entities\Partners\Partner $partner
* @return mixed
*/
public function create(User $user, Partner $partner)
{
// Update $user authorization to create $partner here.
return true;
}
/**
* Determine whether the user can update the partner.
*
* @param \App\Entities\Users\User $user
* @param \App\Entities\Partners\Partner $partner
* @return mixed
*/
public function update(User $user, Partner $partner)
{
// Update $user authorization to update $partner here.
return true;
}
/**
* Determine whether the user can delete the partner.
*
* @param \App\Entities\Users\User $user
* @param \App\Entities\Partners\Partner $partner
* @return mixed
*/
public function delete(User $user, Partner $partner)
{
// Update $user authorization to delete $partner here.
return true;
}
}

8
app/Providers/AuthServiceProvider.php

@ -14,10 +14,10 @@ class AuthServiceProvider extends ServiceProvider
* @var array
*/
protected $policies = [
'App\Entities\Partners\Partner' => 'App\Policies\Partners\PartnerPolicy',
'App\Entities\Projects\Project' => 'App\Policies\Projects\ProjectPolicy',
'App\Entities\Agencies\Agency' => 'App\Policies\AgencyPolicy',
'App\Entities\Users\Event' => 'App\Policies\EventPolicy',
'App\Entities\Partners\Customer' => 'App\Policies\Partners\CustomerPolicy',
'App\Entities\Projects\Project' => 'App\Policies\Projects\ProjectPolicy',
'App\Entities\Agencies\Agency' => 'App\Policies\AgencyPolicy',
'App\Entities\Users\Event' => 'App\Policies\EventPolicy',
];
/**

6
database/factories/PartnerFactory.php → database/factories/CustomerFactory.php

@ -1,10 +1,10 @@
<?php
use App\Entities\Agencies\Agency;
use App\Entities\Partners\Partner;
use App\Entities\Partners\Customer;
use Faker\Generator as Faker;
$factory->define(Partner::class, function (Faker $faker) {
$factory->define(Customer::class, function (Faker $faker) {
return [
'name' => $faker->company,
@ -12,4 +12,4 @@ $factory->define(Partner::class, function (Faker $faker) {
return factory(Agency::class)->create()->id;
},
];
});
});

4
database/factories/ModelFactory.php

@ -1,7 +1,7 @@
<?php
use App\Entities\Invoices\Invoice;
use App\Entities\Partners\Partner;
use App\Entities\Partners\Customer;
use App\Entities\Projects\Feature;
use App\Entities\Projects\Project;
use App\Entities\Projects\Task;
@ -37,7 +37,7 @@ $factory->define(Subscription::class, function (Faker\Generator $faker) {
'due_date' => $startDate->addYears(1)->format('Y-m-d'),
'remark' => $faker->paragraph,
'vendor_id' => function () {
return factory(Partner::class)->create()->id;
return factory(Customer::class)->create()->id;
},
];
});

4
database/factories/PaymentFactory.php

@ -1,6 +1,6 @@
<?php
use App\Entities\Partners\Partner;
use App\Entities\Partners\Customer;
use App\Entities\Payments\Payment;
use App\Entities\Projects\Project;
use Faker\Generator as Faker;
@ -17,7 +17,7 @@ $factory->define(Payment::class, function (Faker $faker) {
'date' => $faker->dateTimeBetween('-1 year', '-1 month')->format('Y-m-d'),
'description' => $faker->paragraph,
'partner_id' => function () {
return factory(Partner::class)->create()->id;
return factory(Customer::class)->create()->id;
},
];
});

4
database/factories/ProjectFactory.php

@ -1,7 +1,7 @@
<?php
use App\Entities\Agencies\Agency;
use App\Entities\Partners\Partner;
use App\Entities\Partners\Customer;
use App\Entities\Projects\Project;
use Faker\Generator as Faker;
@ -24,7 +24,7 @@ $factory->define(Project::class, function (Faker $faker) {
return factory(Agency::class)->create()->id;
},
'customer_id' => function () {
return factory(Partner::class)->create()->id;
return factory(Customer::class)->create()->id;
},
];
});

6
database/migrations/2017_10_26_134455_create_partners_table.php → database/migrations/2017_10_26_134455_create_customers_table.php

@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePartnersTable extends Migration
class CreateCustomersTable extends Migration
{
/**
* Run the migrations.
@ -13,7 +13,7 @@ class CreatePartnersTable extends Migration
*/
public function up()
{
Schema::create('partners', function (Blueprint $table) {
Schema::create('customers', function (Blueprint $table) {
$table->increments('id');
$table->string('name', 60);
$table->string('email')->nullable()->unique();
@ -34,6 +34,6 @@ class CreatePartnersTable extends Migration
*/
public function down()
{
Schema::dropIfExists('partners');
Schema::dropIfExists('customers');
}
}

34
resources/lang/id/customer.php

@ -0,0 +1,34 @@
<?php
return [
// Labels
'customer' => 'Customer',
'list' => 'Daftar Customer',
'search' => 'Cari Customer',
'not_found' => 'Customer tidak ditemukan',
'empty' => 'Belum ada Customer',
'back_to_show' => 'Kembali ke detail Customer',
'back_to_index' => 'Kembali ke daftar Customer',
'type' => 'Jenis Customer',
'detail' => 'Detail Customer',
'contact' => 'Kontak Customer',
// Actions
'create' => 'Input Customer Baru',
'created' => 'Input Customer baru telah berhasil.',
'show' => 'Detail Customer',
'edit' => 'Edit Customer',
'update' => 'Update Customer',
'updated' => 'Update data Customer telah berhasil.',
'delete' => 'Hapus Customer',
'delete_confirm' => 'Anda yakin akan menghapus Customer ini?',
'deleted' => 'Hapus data Customer telah berhasil.',
'undeleted' => 'Data Customer gagal dihapus.',
'undeleteable' => 'Data Customer tidak dapat dihapus.',
// Attributes
'name' => 'Nama Customer',
'description' => 'Deskripsi Customer',
'pic' => 'PIC',
'projects_count' => 'Jml Project',
];

40
resources/lang/id/partner.php

@ -1,40 +0,0 @@
<?php
return [
// Labels
'partner' => 'Partner',
'list' => 'Daftar Partner',
'search' => 'Cari Partner',
'not_found' => 'Partner tidak ditemukan',
'empty' => 'Belum ada Partner',
'back_to_show' => 'Kembali ke detail Partner',
'back_to_index' => 'Kembali ke daftar Partner',
'type' => 'Jenis Partner',
'detail' => 'Detail Partner',
'contact' => 'Kontak Partner',
// Actions
'create' => 'Input Partner Baru',
'created' => 'Input Partner baru telah berhasil.',
'show' => 'Detail Partner',
'edit' => 'Edit Partner',
'update' => 'Update Partner',
'updated' => 'Update data Partner telah berhasil.',
'delete' => 'Hapus Partner',
'delete_confirm' => 'Anda yakin akan menghapus Partner ini?',
'deleted' => 'Hapus data Partner telah berhasil.',
'undeleted' => 'Data Partner gagal dihapus.',
'undeleteable' => 'Data Partner tidak dapat dihapus.',
// Attributes
'name' => 'Nama Partner',
'description' => 'Deskripsi Partner',
'pic' => 'PIC',
'projects_count' => 'Jml Project',
// Types
'types' => [
'customer' => 'Customer',
'vendor' => 'Vendor',
],
];

16
resources/views/partners/create.blade.php → resources/views/customers/create.blade.php

@ -1,28 +1,28 @@
@extends('layouts.app')
@section('title', trans('partner.create'))
@section('title', trans('customer.create'))
@section('content')
<h1 class="page-header">
<div class="pull-right">
{{ link_to_route('partners.index', trans('app.cancel'), [], ['class' => 'btn btn-default']) }}
{{ link_to_route('customers.index', trans('app.cancel'), [], ['class' => 'btn btn-default']) }}
</div>
{{ trans('partner.create') }}
{{ trans('customer.create') }}
</h1>
{!! Form::open(['route' => 'partners.store']) !!}
{!! Form::open(['route' => 'customers.store']) !!}
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-body">
<div class="row">
<div class="col-md-6">
<legend>@lang('partner.detail')</legend>
<legend>@lang('customer.detail')</legend>
{!! FormField::text('name', ['required' => true]) !!}
{!! FormField::textarea('notes') !!}
</div>
<div class="col-md-6">
<legend>@lang('partner.contact')</legend>
<legend>@lang('customer.contact')</legend>
{!! FormField::text('pic') !!}
<div class="row">
<div class="col-xs-7">{!! FormField::email('email') !!}</div>
@ -33,8 +33,8 @@
</div>
</div>
<div class="panel-footer">
{!! Form::submit(trans('partner.create'), ['class' => 'btn btn-success']) !!}
{{ link_to_route('partners.index', trans('app.cancel'), [], ['class' => 'btn btn-default']) }}
{!! Form::submit(trans('customer.create'), ['class' => 'btn btn-success']) !!}
{{ link_to_route('customers.index', trans('app.cancel'), [], ['class' => 'btn btn-default']) }}
</div>
</div>
</div>

22
resources/views/partners/edit.blade.php → resources/views/customers/edit.blade.php

@ -1,25 +1,25 @@
@extends('layouts.app')
@section('title', trans('partner.edit').' '.$partner->name)
@section('title', trans('customer.edit').' '.$customer->name)
@section('content')
<h1 class="page-header">
<div class="pull-right">
{{ link_to_route('partners.show', trans('partner.back_to_show'), [$partner->id], ['class' => 'btn btn-default']) }}
{{ link_to_route('customers.show', trans('customer.back_to_show'), [$customer->id], ['class' => 'btn btn-default']) }}
</div>
{{ $partner->name }} <small>{{ trans('partner.edit') }}</small>
{{ $customer->name }} <small>{{ trans('customer.edit') }}</small>
</h1>
@includeWhen(Request::has('action'), 'partners.forms')
@includeWhen(Request::has('action'), 'customers.forms')
{!! Form::model($partner, ['route' => ['partners.update', $partner->id],'method' => 'patch']) !!}
{!! Form::model($customer, ['route' => ['customers.update', $customer->id],'method' => 'patch']) !!}
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-body">
<div class="row">
<div class="col-md-6">
<legend>@lang('partner.detail')</legend>
<legend>@lang('customer.detail')</legend>
{!! FormField::text('name', ['required' => true]) !!}
<div class="row">
<div class="col-xs-6">{!! FormField::radios('is_active', ['Non Aktif', 'Aktif']) !!}</div>
@ -27,7 +27,7 @@
{!! FormField::textarea('notes') !!}
</div>
<div class="col-md-6">
<legend>@lang('partner.contact')</legend>
<legend>@lang('customer.contact')</legend>
{!! FormField::text('pic') !!}
<div class="row">
<div class="col-xs-7">{!! FormField::email('email') !!}</div>
@ -38,10 +38,10 @@
</div>
</div>
<div class="panel-footer">
{!! Form::submit(trans('partner.update'), ['class' => 'btn btn-success']) !!}
{{ link_to_route('partners.index', trans('app.cancel'), [], ['class' => 'btn btn-default']) }}
{!! link_to_route('partners.edit', trans('app.delete'), [$partner->id, 'action' => 'delete'], [
'id' => 'del-partner-'.$partner->id,
{!! Form::submit(trans('customer.update'), ['class' => 'btn btn-success']) !!}
{{ link_to_route('customers.index', trans('app.cancel'), [], ['class' => 'btn btn-default']) }}
{!! link_to_route('customers.edit', trans('app.delete'), [$customer->id, 'action' => 'delete'], [
'id' => 'del-customer-'.$customer->id,
'class' => 'btn btn-link pull-right'
] ) !!}
</div>

26
resources/views/partners/forms.blade.php → resources/views/customers/forms.blade.php

@ -1,37 +1,37 @@
@if (Request::get('action') == 'delete' && $partner)
@if (Request::get('action') == 'delete' && $customer)
<div class="row">
<div class="col-md-4 col-md-offset-4">
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">{{ trans('partner.delete') }}</h3></div>
<div class="panel-heading"><h3 class="panel-title">{{ trans('customer.delete') }}</h3></div>
<div class="panel-body">
<label class="control-label">{{ trans('partner.name') }}</label>
<p>{{ $partner->name }}</p>
<label class="control-label">{{ trans('customer.name') }}</label>
<p>{{ $customer->name }}</p>
<label class="control-label">{{ trans('contact.email') }}</label>
<p>{{ $partner->email }}</p>
<p>{{ $customer->email }}</p>
<label class="control-label">{{ trans('contact.phone') }}</label>
<p>{{ $partner->phone }}</p>
<p>{{ $customer->phone }}</p>
<label class="control-label">{{ trans('address.address') }}</label>
<p>{{ $partner->address }}</p>
<p>{{ $customer->address }}</p>
<label class="control-label">{{ trans('app.status') }}</label>
<p>{{ $partner->is_active }}</p>
<p>{{ $customer->is_active }}</p>
<label class="control-label">{{ trans('app.notes') }}</label>
<p>{{ $partner->notes }}</p>
{!! $errors->first('partner_id', '<span class="form-error small">:message</span>') !!}
<p>{{ $customer->notes }}</p>
{!! $errors->first('customer_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'=>['partners.destroy',$partner->id]],
['route'=>['customers.destroy',$customer->id]],
trans('app.delete_confirm_button'),
['class'=>'btn btn-danger'],
[
'partner_id' => $partner->id,
'customer_id' => $customer->id,
'page' => request('page'),
'q' => request('q'),
]
) !!}
{{ link_to_route('partners.edit', trans('app.cancel'), [$partner->id], ['class' => 'btn btn-default']) }}
{{ link_to_route('customers.edit', trans('app.cancel'), [$customer->id], ['class' => 'btn btn-default']) }}
</div>
</div>
</div>

50
resources/views/customers/index.blade.php

@ -0,0 +1,50 @@
@extends('layouts.app')
@section('title', trans('customer.list'))
@section('content')
<h1 class="page-header">
<div class="pull-right">
{{ link_to_route('customers.create', trans('customer.create'), [], ['class' => 'btn btn-success']) }}
</div>
{{ trans('customer.list') }}
<small>{{ trans('app.total') }} : {{ $customers->total() }} {{ trans('customer.customer') }}</small>
</h1>
<div class="panel panel-default table-responsive">
<div class="panel-heading">
{{ Form::open(['method' => 'get','class' => 'form-inline']) }}
{!! FormField::text('q', ['value' => request('q'), 'label' => trans('customer.search'), 'class' => 'input-sm']) !!}
{{ Form::submit(trans('customer.search'), ['class' => 'btn btn-sm']) }}
{{ link_to_route('customers.index', trans('app.reset')) }}
{{ Form::close() }}
</div>
<table class="table table-condensed">
<thead>
<tr>
<th class="text-center">{{ trans('app.table_no') }}</th>
<th>{{ trans('customer.name') }}</th>
<th>{{ trans('contact.email') }}</th>
<th>{{ trans('contact.phone') }}</th>
<th class="text-center">{{ trans('customer.projects_count') }}</th>
<th class="text-center">{{ trans('app.status') }}</th>
</tr>
</thead>
<tbody>
@foreach($customers as $key => $customer)
<tr>
<td class="text-center">{{ $customers->firstItem() + $key }}</td>
<td>{{ $customer->nameLink() }}</td>
<td>{{ $customer->email }}</td>
<td>{{ $customer->phone }}</td>
<td class="text-center">{{ $customer->projects_count }}</td>
<td class="text-center">{{ $customer->is_active }}</td>
</tr>
@endforeach
</tbody>
</table>
<div class="panel-body">{{ $customers->appends(Request::except('page'))->render() }}</div>
</div>
</div>
</div>
@endsection

30
resources/views/partners/show.blade.php → resources/views/customers/show.blade.php

@ -1,29 +1,29 @@
@extends('layouts.app')
@section('title', trans('partner.show'))
@section('title', trans('customer.show'))
@section('content')
<h1 class="page-header">
<div class="pull-right">
{!! link_to_route('partners.edit', trans('partner.edit'), [$partner->id], ['id' => 'edit-partner-' . $partner->id, 'class' => 'btn btn-warning']) !!}
{!! link_to_route('partners.index', trans('partner.back_to_index'), [], ['class' => 'btn btn-default']) !!}
{!! link_to_route('customers.edit', trans('customer.edit'), [$customer->id], ['id' => 'edit-customer-' . $customer->id, 'class' => 'btn btn-warning']) !!}
{!! link_to_route('customers.index', trans('customer.back_to_index'), [], ['class' => 'btn btn-default']) !!}
</div>
{{ $partner->name }} <small>{{ trans('partner.show') }}</small>
{{ $customer->name }} <small>{{ trans('customer.show') }}</small>
</h1>
<div class="row">
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">{{ trans('partner.show') }}</h3></div>
<div class="panel-heading"><h3 class="panel-title">{{ trans('customer.show') }}</h3></div>
<table class="table table-condensed">
<tbody>
<tr><td class="col-xs-3">{{ trans('partner.name') }}</td><td>{{ $partner->name }}</td></tr>
<tr><td>{{ trans('contact.email') }}</td><td>{{ $partner->email }}</td></tr>
<tr><td>{{ trans('contact.phone') }}</td><td>{{ $partner->phone }}</td></tr>
<tr><td>{{ trans('partner.pic') }}</td><td>{{ $partner->pic }}</td></tr>
<tr><td>{{ trans('address.address') }}</td><td>{{ $partner->address }}</td></tr>
<tr><td>{{ trans('app.status') }}</td><td>{{ $partner->is_active }}</td></tr>
<tr><td>{{ trans('app.notes') }}</td><td>{!! nl2br($partner->notes) !!}</td></tr>
<tr><td class="col-xs-3">{{ trans('customer.name') }}</td><td>{{ $customer->name }}</td></tr>
<tr><td>{{ trans('contact.email') }}</td><td>{{ $customer->email }}</td></tr>
<tr><td>{{ trans('contact.phone') }}</td><td>{{ $customer->phone }}</td></tr>
<tr><td>{{ trans('customer.pic') }}</td><td>{{ $customer->pic }}</td></tr>
<tr><td>{{ trans('address.address') }}</td><td>{{ $customer->address }}</td></tr>
<tr><td>{{ trans('app.status') }}</td><td>{{ $customer->is_active }}</td></tr>
<tr><td>{{ trans('app.notes') }}</td><td>{!! nl2br($customer->notes) !!}</td></tr>
</tbody>
</table>
</div>
@ -31,14 +31,14 @@
<div class="col-md-6">
<div class="row">
<div class="col-lg-6 col-md-12">
<a href="#" title="@lang('partner.projects_count')">
<a href="#" title="@lang('customer.projects_count')">
<div class="panel panel-info">
<div class="panel-heading">
<div class="row">
<div class="col-xs-3"><i class="fa fa-table fa-4x"></i></div>
<div class="col-xs-9 text-right">
<div class="huge">{{ $partner->projects()->count() }}</div>
<div class="lead">@lang('partner.projects_count')</div>
<div class="huge">{{ $customer->projects()->count() }}</div>
<div class="lead">@lang('customer.projects_count')</div>
</div>
</div>
</div>

2
resources/views/layouts/partials/sidebar.blade.php

@ -67,7 +67,7 @@
<li>{!! html_link_to_route('payments.index', trans('payment.payments'), [], ['icon' => 'money']) !!}</li>
@endcan
@can('manage', auth()->user()->agency)
<li>{!! html_link_to_route('partners.index', trans('partner.list'), [], ['icon' => 'users']) !!}</li>
<li>{!! html_link_to_route('customers.index', trans('customer.list'), [], ['icon' => 'users']) !!}</li>
@endcan
@can('manage_users')
<li>{!! html_link_to_route('users.index', trans('user.users'), [], ['icon' => 'users']) !!}</li>

50
resources/views/partners/index.blade.php

@ -1,50 +0,0 @@
@extends('layouts.app')
@section('title', trans('partner.list'))
@section('content')
<h1 class="page-header">
<div class="pull-right">
{{ link_to_route('partners.create', trans('partner.create'), [], ['class' => 'btn btn-success']) }}
</div>
{{ trans('partner.list') }}
<small>{{ trans('app.total') }} : {{ $partners->total() }} {{ trans('partner.partner') }}</small>
</h1>
<div class="panel panel-default table-responsive">
<div class="panel-heading">
{{ Form::open(['method' => 'get','class' => 'form-inline']) }}
{!! FormField::text('q', ['value' => request('q'), 'label' => trans('partner.search'), 'class' => 'input-sm']) !!}
{{ Form::submit(trans('partner.search'), ['class' => 'btn btn-sm']) }}
{{ link_to_route('partners.index', trans('app.reset')) }}
{{ Form::close() }}
</div>
<table class="table table-condensed">
<thead>
<tr>
<th class="text-center">{{ trans('app.table_no') }}</th>
<th>{{ trans('partner.name') }}</th>
<th>{{ trans('contact.email') }}</th>
<th>{{ trans('contact.phone') }}</th>
<th class="text-center">{{ trans('partner.projects_count') }}</th>
<th class="text-center">{{ trans('app.status') }}</th>
</tr>
</thead>
<tbody>
@foreach($partners as $key => $partner)
<tr>
<td class="text-center">{{ $partners->firstItem() + $key }}</td>
<td>{{ $partner->nameLink() }}</td>
<td>{{ $partner->email }}</td>
<td>{{ $partner->phone }}</td>
<td class="text-center">{{ $partner->projects_count }}</td>
<td class="text-center">{{ $partner->is_active }}</td>
</tr>
@endforeach
</tbody>
</table>
<div class="panel-body">{{ $partners->appends(Request::except('page'))->render() }}</div>
</div>
</div>
</div>
@endsection

4
routes/web.php

@ -22,7 +22,7 @@ Route::group(['middleware' => ['web', 'auth']], function () {
Route::resource('backups', 'BackupsController', ['except' => ['create', 'show', 'edit']]);
/*
* Partners Routes
* Customers Routes
*/
Route::resource('partners', 'Partners\PartnersController');
Route::resource('customers', 'Partners\CustomersController');
});

4
tests/Feature/InvoiceEntryTest.php

@ -2,7 +2,7 @@
namespace Tests\Feature;
use App\Entities\Partners\Partner;
use App\Entities\Partners\Customer;
use App\Entities\Projects\Project;
use App\Services\InvoiceDrafts\InvoiceDraft;
use App\Services\InvoiceDrafts\InvoiceDraftCollection;
@ -139,7 +139,7 @@ class InvoiceEntryTest extends TestCase
$item2 = new Item(['description' => 'Deskripsi item invoice', 'amount' => 2000]);
$user = $this->adminUserSigningIn();
$customer = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id, 'customer_id' => $customer->id]);
// Add items to draft

10
tests/Feature/ManageFeaturesTest.php

@ -3,7 +3,7 @@
namespace Tests\Feature;
use App\Entities\Agencies\Agency;
use App\Entities\Partners\Partner;
use App\Entities\Partners\Customer;
use App\Entities\Projects\Feature;
use App\Entities\Projects\Project;
use App\Entities\Projects\Task;
@ -17,7 +17,7 @@ class ManageFeaturesTest extends TestCase
{
$user = $this->adminUserSigningIn();
$customer = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id, 'customer_id' => $customer->id]);
$worker = $this->createUser();
@ -52,7 +52,7 @@ class ManageFeaturesTest extends TestCase
$agency = factory(Agency::class)->create(['owner_id' => $user[0]->id]);
$this->actingAs($user[0]);
$customer = factory(Partner::class)->create(['owner_id' => $agency->id]);
$customer = factory(Customer::class)->create(['owner_id' => $agency->id]);
$project = factory(Project::class)->create(['owner_id' => $agency->id, 'customer_id' => $customer->id]);
$feature = factory(Feature::class)->create(['worker_id' => $user[1]->id, 'project_id' => $project->id]);
@ -83,7 +83,7 @@ class ManageFeaturesTest extends TestCase
public function admin_can_delete_a_feature()
{
$user = $this->adminUserSigningIn();
$customer = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id, 'customer_id' => $customer->id]);
$feature = factory(Feature::class)->create(['project_id' => $project->id]);
$tasks = factory(Task::class, 2)->create(['feature_id' => $feature->id]);
@ -136,7 +136,7 @@ class ManageFeaturesTest extends TestCase
public function admin_may_clone_many_features_from_other_projects()
{
$user = $this->adminUserSigningIn();
$customer = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$projects = factory(Project::class, 2)->create(['owner_id' => $user->agency->id, 'customer_id' => $customer->id]);
$features = factory(Feature::class, 3)->create(['project_id' => $projects[0]->id]);
$tasks1 = factory(Task::class, 3)->create(['feature_id' => $features[0]->id]);

109
tests/Feature/ManagePartnersTest.php

@ -1,109 +0,0 @@
<?php
namespace Tests\Feature;
use App\Entities\Partners\Partner;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Tests\TestCase as TestCase;
class ManagePartnersTest extends TestCase
{
use DatabaseMigrations;
/** @test */
public function user_can_see_partner_list_in_partner_index_page()
{
$user = $this->adminUserSigningIn();
$partner1 = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$partner2 = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$this->visit(route('partners.index'));
$this->see($partner1->name);
$this->see($partner2->name);
}
/** @test */
public function user_can_create_a_partner()
{
$user = $this->adminUserSigningIn();
$this->visit(route('partners.index'));
$this->click(trans('partner.create'));
$this->seePageIs(route('partners.create'));
$this->submitForm(trans('partner.create'), [
'name' => 'Partner 1 name',
'email' => 'partner1@mail.com',
'phone' => '081234567890',
'pic' => 'Nama PIC Partner',
'address' => 'Alamat partner 1',
'notes' => '',
]);
$this->see(trans('partner.created'));
$this->seeInDatabase('partners', [
'name' => 'Partner 1 name',
'email' => 'partner1@mail.com',
'phone' => '081234567890',
'pic' => 'Nama PIC Partner',
'address' => 'Alamat partner 1',
'notes' => null,
'owner_id' => $user->agency->id,
]);
}
/** @test */
public function user_can_edit_a_partner()
{
$user = $this->adminUserSigningIn();
$partner = factory(Partner::class)->create(['owner_id' => $user->agency->id, 'name' => 'Testing 123']);
$this->visit(route('partners.show', [$partner->id]));
$this->click('edit-partner-'.$partner->id);
$this->seePageIs(route('partners.edit', [$partner->id]));
$this->submitForm(trans('partner.update'), [
'name' => 'Partner 1 name',
'email' => 'partner1@mail.com',
'phone' => '081234567890',
'pic' => 'Nama PIC Partner',
'address' => 'Alamat partner 1',
'notes' => '',
'is_active' => 0,
]);
$this->seePageIs(route('partners.show', $partner->id));
$this->seeInDatabase('partners', [
'name' => 'Partner 1 name',
'email' => 'partner1@mail.com',
'phone' => '081234567890',
'pic' => 'Nama PIC Partner',
'address' => 'Alamat partner 1',
'notes' => null,
'is_active' => 0,
]);
}
/** @test */
public function user_can_delete_a_partner()
{
$user = $this->adminUserSigningIn();
$partner = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$this->visit(route('partners.edit', [$partner->id]));
$this->click('del-partner-'.$partner->id);
$this->seePageIs(route('partners.edit', [$partner->id, 'action' => 'delete']));
$this->seeInDatabase('partners', [
'id' => $partner->id,
]);
$this->press(trans('app.delete_confirm_button'));
$this->dontSeeInDatabase('partners', [
'id' => $partner->id,
]);
}
}

56
tests/Feature/ManageProjectsTest.php

@ -2,7 +2,7 @@
namespace Tests\Feature;
use App\Entities\Partners\Partner;
use App\Entities\Partners\Customer;
use App\Entities\Payments\Payment;
use App\Entities\Projects\Feature;
use App\Entities\Projects\Project;
@ -12,17 +12,17 @@ use Tests\TestCase;
class ManageProjectsTest extends TestCase
{
/** @test */
public function admin_can_input_new_project_with_existing_partner()
public function admin_can_input_new_project_with_existing_customer()
{
$user = $this->adminUserSigningIn();
$partner = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$user = $this->adminUserSigningIn();
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$this->visit(route('projects.index'));
$this->seePageIs(route('projects.index'));
$this->click(trans('project.create'));
$this->seePageIs(route('projects.create'));
$this->type('Project Baru', 'name');
$this->select($partner->id, 'customer_id');
$this->select($customer->id, 'customer_id');
$this->type('2016-04-15', 'proposal_date');
$this->type('2000000', 'proposal_value');
$this->type('Deskripsi project baru', 'description');
@ -34,7 +34,7 @@ class ManageProjectsTest extends TestCase
}
/** @test */
public function admin_can_input_new_project_with_new_partner()
public function admin_can_input_new_project_with_new_customer()
{
$user = $this->adminUserSigningIn();
@ -53,21 +53,21 @@ class ManageProjectsTest extends TestCase
$this->seePageIs(route('projects.create'));
$this->notSeeInDatabase('projects', ['name' => 'Project Baru', 'proposal_value' => '2000000']);
$this->type('Partner Baru', 'customer_name');
$this->type('email@partner.baru', 'customer_email');
$this->type('Customer Baru', 'customer_name');
$this->type('email@customer.baru', 'customer_email');
$this->press(trans('project.create'));
$this->see(trans('project.created'));
$this->see('Project Baru');
$this->seeInDatabase('partners', [
'name' => 'Partner Baru',
'email' => 'email@partner.baru',
$this->seeInDatabase('customers', [
'name' => 'Customer Baru',
'email' => 'email@customer.baru',
]);
$newPartner = Partner::whereName('Partner Baru')->whereEmail('email@partner.baru')->first();
$newCustomer = Customer::whereName('Customer Baru')->whereEmail('email@customer.baru')->first();
$this->seeInDatabase('projects', [
'name' => 'Project Baru',
'proposal_value' => '2000000',
'customer_id' => $newPartner->id,
'customer_id' => $newCustomer->id,
'owner_id' => $user->agency->id,
]);
}
@ -75,10 +75,10 @@ class ManageProjectsTest extends TestCase
/** @test */
public function admin_can_delete_a_project()
{
$user = $this->adminUserSigningIn();
$partner = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$user = $this->adminUserSigningIn();
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id, 'customer_id' => $partner->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id, 'customer_id' => $customer->id]);
$feature = factory(Feature::class)->create(['project_id' => $project->id]);
$task = factory(Task::class)->create(['feature_id' => $feature->id]);
$payment = factory(Payment::class)->create(['project_id' => $project->id]);
@ -112,9 +112,9 @@ class ManageProjectsTest extends TestCase
/** @test */
public function admin_can_edit_a_project()
{
$user = $this->adminUserSigningIn();
$partner = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id, 'customer_id' => $partner->id]);
$user = $this->adminUserSigningIn();
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id, 'customer_id' => $customer->id]);
$this->visit('projects/'.$project->id.'/edit');
$this->seePageIs('projects/'.$project->id.'/edit');
@ -126,7 +126,7 @@ class ManageProjectsTest extends TestCase
$this->type(2000000, 'proposal_value');
$this->type(2000000, 'project_value');
$this->select(4, 'status_id');
$this->select($partner->id, 'customer_id');
$this->select($customer->id, 'customer_id');
$this->type('Edit deskripsi project', 'description');
$this->press(trans('project.update'));
@ -136,7 +136,7 @@ class ManageProjectsTest extends TestCase
'proposal_date' => '2016-04-15',
'start_date' => '2016-04-25',
'end_date' => '2016-05-05',
'customer_id' => $partner->id,
'customer_id' => $customer->id,
'description' => 'Edit deskripsi project',
]);
}
@ -144,15 +144,15 @@ class ManageProjectsTest extends TestCase
/** @test */
public function form_is_validated_on_invalid_project_entry()
{
$user = $this->adminUserSigningIn();
$partner = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$user = $this->adminUserSigningIn();
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$this->visit(route('projects.index'));
$this->seePageIs(route('projects.index'));
$this->click(trans('project.create'));
$this->seePageIs(route('projects.create'));
$this->type('', 'name');
$this->select($partner->id, 'customer_id');
$this->select($customer->id, 'customer_id');
$this->type('2016-04-15aa', 'proposal_date');
$this->type('', 'proposal_value');
$this->type('Deskripsi project baru', 'description');
@ -165,11 +165,11 @@ class ManageProjectsTest extends TestCase
/** @test */
public function admin_can_update_project_status_on_project_detail_page()
{
$user = $this->adminUserSigningIn();
$partner = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create([
$user = $this->adminUserSigningIn();
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create([
'owner_id' => $user->agency->id,
'customer_id' => $partner->id,
'customer_id' => $customer->id,
'status_id' => 1,
]);

14
tests/Feature/ManageSubscriptionsTest.php

@ -2,7 +2,7 @@
namespace Tests\Feature;
use App\Entities\Partners\Partner;
use App\Entities\Partners\Customer;
use App\Entities\Projects\Project;
use App\Entities\Subscriptions\Subscription;
use Tests\TestCase;
@ -13,8 +13,8 @@ class ManageSubscriptionsTest extends TestCase
public function admin_can_entry_subscription()
{
$user = $this->adminUserSigningIn();
$vendor = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$customer = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$vendor = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id, 'customer_id' => $customer->id]);
$this->visit(route('subscriptions.index'));
@ -52,8 +52,8 @@ class ManageSubscriptionsTest extends TestCase
{
$eppCode = str_random(10);
$user = $this->adminUserSigningIn();
$vendor = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$customer = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$vendor = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id, 'customer_id' => $customer->id]);
$subscription = factory(Subscription::class)->create(['project_id' => $project->id]);
@ -89,7 +89,7 @@ class ManageSubscriptionsTest extends TestCase
public function admin_can_delete_a_subscription()
{
$user = $this->adminUserSigningIn();
$customer = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id, 'customer_id' => $customer->id]);
$subscription = factory(Subscription::class)->create(['project_id' => $project->id]);
@ -107,7 +107,7 @@ class ManageSubscriptionsTest extends TestCase
public function admin_can_see_a_subscription()
{
$user = $this->adminUserSigningIn();
$customer = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id, 'customer_id' => $customer->id]);
$subscription = factory(Subscription::class)->create(['project_id' => $project->id]);

109
tests/Feature/Partners/ManageCustomersTest.php

@ -0,0 +1,109 @@
<?php
namespace Tests\Feature;
use App\Entities\Partners\Customer;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Tests\TestCase as TestCase;
class ManageCustomersTest extends TestCase
{
use DatabaseMigrations;
/** @test */
public function user_can_see_customer_list_in_customer_index_page()
{
$user = $this->adminUserSigningIn();
$customer1 = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$customer2 = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$this->visit(route('customers.index'));
$this->see($customer1->name);
$this->see($customer2->name);
}
/** @test */
public function user_can_create_a_customer()
{
$user = $this->adminUserSigningIn();
$this->visit(route('customers.index'));
$this->click(trans('customer.create'));
$this->seePageIs(route('customers.create'));
$this->submitForm(trans('customer.create'), [
'name' => 'Customer 1 name',
'email' => 'customer1@mail.com',
'phone' => '081234567890',
'pic' => 'Nama PIC Customer',
'address' => 'Alamat customer 1',
'notes' => '',
]);
$this->see(trans('customer.created'));
$this->seeInDatabase('customers', [
'name' => 'Customer 1 name',
'email' => 'customer1@mail.com',
'phone' => '081234567890',
'pic' => 'Nama PIC Customer',
'address' => 'Alamat customer 1',
'notes' => null,
'owner_id' => $user->agency->id,
]);
}
/** @test */
public function user_can_edit_a_customer()
{
$user = $this->adminUserSigningIn();
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id, 'name' => 'Testing 123']);
$this->visit(route('customers.show', [$customer->id]));
$this->click('edit-customer-'.$customer->id);
$this->seePageIs(route('customers.edit', [$customer->id]));
$this->submitForm(trans('customer.update'), [
'name' => 'Customer 1 name',
'email' => 'customer1@mail.com',
'phone' => '081234567890',
'pic' => 'Nama PIC Customer',
'address' => 'Alamat customer 1',
'notes' => '',
'is_active' => 0,
]);
$this->seePageIs(route('customers.show', $customer->id));
$this->seeInDatabase('customers', [
'name' => 'Customer 1 name',
'email' => 'customer1@mail.com',
'phone' => '081234567890',
'pic' => 'Nama PIC Customer',
'address' => 'Alamat customer 1',
'notes' => null,
'is_active' => 0,
]);
}
/** @test */
public function user_can_delete_a_customer()
{
$user = $this->adminUserSigningIn();
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$this->visit(route('customers.edit', [$customer->id]));
$this->click('del-customer-'.$customer->id);
$this->seePageIs(route('customers.edit', [$customer->id, 'action' => 'delete']));
$this->seeInDatabase('customers', [
'id' => $customer->id,
]);
$this->press(trans('app.delete_confirm_button'));
$this->dontSeeInDatabase('customers', [
'id' => $customer->id,
]);
}
}

12
tests/Feature/Payments/ManagePaymentsTest.php

@ -2,7 +2,7 @@
namespace Tests\Feature\Payments;
use App\Entities\Partners\Partner;
use App\Entities\Partners\Customer;
use App\Entities\Payments\Payment;
use App\Entities\Projects\Project;
use Tests\TestCase;
@ -13,7 +13,7 @@ class ManagePaymentsTest extends TestCase
public function admin_can_entry_project_an_income_payment()
{
$user = $this->adminUserSigningIn();
$customer = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id]);
$this->visit(route('payments.index'));
@ -44,7 +44,7 @@ class ManagePaymentsTest extends TestCase
public function admin_can_entry_project_an_expanse_payment()
{
$user = $this->adminUserSigningIn();
$vendor = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$vendor = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id]);
$this->visit(route('payments.index'));
@ -76,7 +76,7 @@ class ManagePaymentsTest extends TestCase
public function admin_can_edit_payment_data()
{
$user = $this->adminUserSigningIn();
$customer = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id]);
$payment = factory(Payment::class)->create([
@ -107,7 +107,7 @@ class ManagePaymentsTest extends TestCase
public function admin_can_delete_a_payment()
{
$user = $this->adminUserSigningIn();
$customer = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id, 'customer_id' => $customer->id]);
$payment = factory(Payment::class)->create(['project_id' => $project->id, 'partner_id' => $customer->id]);
@ -123,7 +123,7 @@ class ManagePaymentsTest extends TestCase
public function admin_can_see_a_payment()
{
$user = $this->adminUserSigningIn();
$customer = factory(Partner::class)->create(['owner_id' => $user->agency->id]);
$customer = factory(Customer::class)->create(['owner_id' => $user->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id, 'customer_id' => $customer->id]);
$payment = factory(Payment::class)->create(['project_id' => $project->id, 'partner_id' => $customer->id]);

8
tests/Feature/Payments/PaymentSearchTest.php

@ -2,7 +2,7 @@
namespace Tests\Feature\Payments;
use App\Entities\Partners\Partner;
use App\Entities\Partners\Customer;
use App\Entities\Payments\Payment;
use App\Entities\Projects\Project;
use Tests\TestCase;
@ -13,7 +13,7 @@ class PaymentSearchTest extends TestCase
public function user_can_find_payment_by_project_name()
{
$admin = $this->adminUserSigningIn();
$customer = factory(Partner::class)->create(['owner_id' => $admin->agency->id]);
$customer = factory(Customer::class)->create(['owner_id' => $admin->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $admin->agency->id, 'customer_id' => $customer->id, 'name' => 'Project']);
$payment = factory(Payment::class)->create(['project_id' => $project->id, 'partner_id' => $customer->id]);
$project2 = factory(Project::class)->create(['owner_id' => $admin->agency->id, 'customer_id' => $customer->id]);
@ -40,10 +40,10 @@ class PaymentSearchTest extends TestCase
$unShownPayment = factory(Payment::class)->create(['project_id' => $project2->id]);
$admin = $this->adminUserSigningIn();
$customer = factory(Partner::class)->create(['owner_id' => $admin->agency->id]);
$customer = factory(Customer::class)->create(['owner_id' => $admin->agency->id]);
$project = factory(Project::class)->create(['owner_id' => $admin->agency->id, 'customer_id' => $customer->id, 'name' => 'Project']);
$payment = factory(Payment::class)->create(['project_id' => $project->id, 'partner_id' => $customer->id]);
$customer2 = factory(Partner::class)->create(['owner_id' => $admin->agency->id]);
$customer2 = factory(Customer::class)->create(['owner_id' => $admin->agency->id]);
$project2 = factory(Project::class)->create(['owner_id' => $admin->agency->id, 'customer_id' => $customer2->id]);
$unShownPayment = factory(Payment::class)->create(['project_id' => $project2->id, 'partner_id' => $customer2->id]);

46
tests/Unit/Models/CustomerTest.php

@ -0,0 +1,46 @@
<?php
namespace Tests\Unit\Models;
use App\Entities\Agencies\Agency;
use App\Entities\Partners\Customer;
use App\Entities\Projects\Project;
use Illuminate\Support\Collection;
use Tests\TestCase as TestCase;
class CustomerTest extends TestCase
{
/** @test */
public function a_customer_has_an_owner()
{
$agency = factory(Agency::class)->create();
$customer = factory(Customer::class)->create(['owner_id' => $agency->id]);
$this->assertTrue($customer->owner instanceof Agency);
$this->assertEquals($customer->owner->id, $agency->id);
}
/** @test */
public function a_customer_has_many_projects()
{
$customer = factory(Customer::class)->create();
$project = factory(Project::class)->create(['customer_id' => $customer->id]);
$this->assertTrue($customer->projects instanceof Collection);
$this->assertTrue($customer->projects->first() instanceof Project);
}
/** @test */
public function a_customer_has_name_link_method()
{
$customer = factory(Customer::class)->make();
$this->assertEquals(
link_to_route('customers.show', $customer->name, [$customer->id], [
'title' => trans(
'app.show_detail_title',
['name' => $customer->name, 'type' => trans('customer.customer')]
),
]), $customer->nameLink()
);
}
}

46
tests/Unit/Models/PartnerTest.php

@ -1,46 +0,0 @@
<?php
namespace Tests\Unit\Models;
use App\Entities\Agencies\Agency;
use App\Entities\Partners\Partner;
use App\Entities\Projects\Project;
use Illuminate\Support\Collection;
use Tests\TestCase as TestCase;
class PartnerTest extends TestCase
{
/** @test */
public function a_partner_has_an_owner()
{
$agency = factory(Agency::class)->create();
$partner = factory(Partner::class)->create(['owner_id' => $agency->id]);
$this->assertTrue($partner->owner instanceof Agency);
$this->assertEquals($partner->owner->id, $agency->id);
}
/** @test */
public function a_partner_has_many_projects()
{
$partner = factory(Partner::class)->create();
$project = factory(Project::class)->create(['customer_id' => $partner->id]);
$this->assertTrue($partner->projects instanceof Collection);
$this->assertTrue($partner->projects->first() instanceof Project);
}
/** @test */
public function a_partner_has_name_link_method()
{
$partner = factory(Partner::class)->make();
$this->assertEquals(
link_to_route('partners.show', $partner->name, [$partner->id], [
'title' => trans(
'app.show_detail_title',
['name' => $partner->name, 'type' => trans('partner.partner')]
),
]), $partner->nameLink()
);
}
}

4
tests/Unit/Models/PaymentTest.php

@ -2,7 +2,7 @@
namespace Tests\Unit\Models;
use App\Entities\Partners\Partner;
use App\Entities\Partners\Customer;
use App\Entities\Payments\Payment;
use Tests\TestCase;
@ -12,6 +12,6 @@ class PaymentTest extends TestCase
public function it_has_partner_relation()
{
$payment = factory(Payment::class)->create();
$this->assertTrue($payment->partner instanceof Partner);
$this->assertTrue($payment->partner instanceof Customer);
}
}

6
tests/Unit/Models/ProjectTest.php

@ -3,7 +3,7 @@
namespace Tests\Unit\Models;
use App\Entities\Agencies\Agency;
use App\Entities\Partners\Partner;
use App\Entities\Partners\Customer;
use App\Entities\Payments\Payment;
use App\Entities\Projects\Feature;
use App\Entities\Projects\Project;
@ -72,10 +72,10 @@ class ProjectTest extends TestCase
/** @test */
public function a_project_belongs_to_a_customer()
{
$customer = factory(Partner::class)->create();
$customer = factory(Customer::class)->create();
$project = factory(Project::class)->create(['customer_id' => $customer->id]);
$this->assertTrue($project->customer instanceof Partner);
$this->assertTrue($project->customer instanceof Customer);
$this->assertEquals($project->customer_id, $customer->id);
}

4
tests/Unit/Models/SubscriptionTest.php

@ -2,7 +2,7 @@
namespace Tests\Unit\Models;
use App\Entities\Partners\Partner;
use App\Entities\Partners\Customer;
use App\Entities\Projects\Project;
use App\Entities\Subscriptions\Subscription;
use Tests\TestCase as TestCase;
@ -27,6 +27,6 @@ class SubscriptionTest extends TestCase
public function it_has_vendor_relation()
{
$subscription = factory(Subscription::class)->create();
$this->assertTrue($subscription->vendor instanceof Partner);
$this->assertTrue($subscription->vendor instanceof Customer);
}
}

40
tests/Unit/Policies/CustomerPolicyTest.php

@ -0,0 +1,40 @@
<?php
namespace Tests\Unit\Policies;
use App\Entities\Partners\Customer;
use Tests\TestCase as TestCase;
class CustomerPolicyTest extends TestCase
{
/** @test */
public function user_can_create_customer()
{
$user = $this->adminUserSigningIn();
$this->assertTrue($user->can('create', new Customer));
}
/** @test */
public function user_can_view_customer()
{
$user = $this->adminUserSigningIn();
$customer = factory(Customer::class)->create(['name' => 'Customer 1 name']);
$this->assertTrue($user->can('view', $customer));
}
/** @test */
public function user_can_update_customer()
{
$user = $this->adminUserSigningIn();
$customer = factory(Customer::class)->create(['name' => 'Customer 1 name']);
$this->assertTrue($user->can('update', $customer));
}
/** @test */
public function user_can_delete_customer()
{
$user = $this->adminUserSigningIn();
$customer = factory(Customer::class)->create(['name' => 'Customer 1 name']);
$this->assertTrue($user->can('delete', $customer));
}
}

40
tests/Unit/Policies/PartnerPolicyTest.php

@ -1,40 +0,0 @@
<?php
namespace Tests\Unit\Policies;
use App\Entities\Partners\Partner;
use Tests\TestCase as TestCase;
class PartnerPolicyTest extends TestCase
{
/** @test */
public function user_can_create_partner()
{
$user = $this->adminUserSigningIn();
$this->assertTrue($user->can('create', new Partner));
}
/** @test */
public function user_can_view_partner()
{
$user = $this->adminUserSigningIn();
$partner = factory(Partner::class)->create(['name' => 'Partner 1 name']);
$this->assertTrue($user->can('view', $partner));
}
/** @test */
public function user_can_update_partner()
{
$user = $this->adminUserSigningIn();
$partner = factory(Partner::class)->create(['name' => 'Partner 1 name']);
$this->assertTrue($user->can('update', $partner));
}
/** @test */
public function user_can_delete_partner()
{
$user = $this->adminUserSigningIn();
$partner = factory(Partner::class)->create(['name' => 'Partner 1 name']);
$this->assertTrue($user->can('delete', $partner));
}
}
Loading…
Cancel
Save