diff --git a/app/Entities/Partners/Partner.php b/app/Entities/Partners/Partner.php
index e12b01c..a69cf11 100644
--- a/app/Entities/Partners/Partner.php
+++ b/app/Entities/Partners/Partner.php
@@ -15,4 +15,9 @@ class Partner extends Model
{
return $this->belongsTo('App\Entities\Agencies\Agency');
}
+
+ public function projects()
+ {
+ return $this->hasMany('App\Entities\Projects\Project', 'customer_id');
+ }
}
diff --git a/app/Http/Controllers/Partners/PartnersController.php b/app/Http/Controllers/Partners/PartnersController.php
index 8cbd995..655af10 100644
--- a/app/Http/Controllers/Partners/PartnersController.php
+++ b/app/Http/Controllers/Partners/PartnersController.php
@@ -18,7 +18,9 @@ class PartnersController extends Controller
$editablePartner = null;
$partners = Partner::where(function ($query) {
$query->where('name', 'like', '%'.request('q').'%');
- })->paginate(25);
+ })
+ ->withCount('projects')
+ ->paginate(25);
if (in_array(request('action'), ['edit', 'delete']) && request('id') != null) {
$editablePartner = Partner::find(request('id'));
diff --git a/app/Policies/AgencyPolicy.php b/app/Policies/AgencyPolicy.php
new file mode 100644
index 0000000..b0eccf6
--- /dev/null
+++ b/app/Policies/AgencyPolicy.php
@@ -0,0 +1,17 @@
+id == $agency->owner_id;
+ }
+}
diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php
index a5b65c0..fdc7b9c 100644
--- a/app/Providers/AuthServiceProvider.php
+++ b/app/Providers/AuthServiceProvider.php
@@ -16,6 +16,7 @@ class AuthServiceProvider extends ServiceProvider
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',
];
diff --git a/resources/lang/id/partner.php b/resources/lang/id/partner.php
index 0c1eddc..17f68a0 100644
--- a/resources/lang/id/partner.php
+++ b/resources/lang/id/partner.php
@@ -26,4 +26,5 @@ return [
// Attributes
'name' => 'Nama Partner',
'description' => 'Deskripsi Partner',
+ 'projects_count' => 'Jml Project',
];
diff --git a/resources/views/layouts/partials/sidebar.blade.php b/resources/views/layouts/partials/sidebar.blade.php
index 064dda5..9cd772c 100755
--- a/resources/views/layouts/partials/sidebar.blade.php
+++ b/resources/views/layouts/partials/sidebar.blade.php
@@ -18,10 +18,10 @@
{!! html_link_to_route('features.index', 'On Progress Features', [], ['icon' => 'tasks']) !!}
groupBy('status_id')
- ->where('owner_id', auth()->id())
- ->pluck('count', 'status_id')
- ->all();?>
+ ->groupBy('status_id')
+ ->where('owner_id', auth()->id())
+ ->pluck('count', 'status_id')
+ ->all();?>
{!! html_link_to_route('projects.index', trans('project.projects') . ' ', [], ['icon' => 'table']) !!}
@foreach(getProjectStatusesList() as $key => $status)
@@ -62,6 +62,9 @@
@can('manage_payments')
- {!! html_link_to_route('payments.index', trans('payment.payments'), [], ['icon' => 'money']) !!}
@endcan
+ @can('manage', auth()->user()->agency)
+ - {!! html_link_to_route('partners.index', trans('partner.list'), [], ['icon' => 'users']) !!}
+ @endcan
@can('manage_users')
-
{{ trans('user.users') }}
diff --git a/resources/views/partners/index.blade.php b/resources/views/partners/index.blade.php
index 06c05df..267173f 100644
--- a/resources/views/partners/index.blade.php
+++ b/resources/views/partners/index.blade.php
@@ -10,58 +10,58 @@
{{ trans('partner.list') }}
{{ trans('app.total') }} : {{ $partners->total() }} {{ trans('partner.partner') }}
-
-
-
-
- {{ 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() }}
-
-
-
-
- | {{ trans('app.table_no') }} |
- {{ trans('partner.name') }} |
- {{ trans('contact.email') }} |
- {{ trans('contact.phone') }} |
- {{ trans('app.status') }} |
- {{ trans('app.action') }} |
-
-
-
- @foreach($partners as $key => $partner)
-
- | {{ $partners->firstItem() + $key }} |
- {{ $partner->name }} |
- {{ $partner->email }} |
- {{ $partner->phone }} |
- {{ $partner->is_active }} |
-
- {!! link_to_route(
- 'partners.index',
- trans('app.edit'),
- ['action' => 'edit', 'id' => $partner->id] + Request::only('page', 'q'),
- ['id' => 'edit-partner-' . $partner->id]
- ) !!} |
- {!! link_to_route(
- 'partners.index',
- trans('app.delete'),
- ['action' => 'delete', 'id' => $partner->id] + Request::only('page', 'q'),
- ['id' => 'del-partner-' . $partner->id]
- ) !!}
- |
-
- @endforeach
-
-
-
{{ $partners->appends(Request::except('page'))->render() }}
-
+
+@includeWhen(Request::has('action'), 'partners.forms')
+
+
+
+ {{ 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() }}
-
- @includeWhen(Request::has('action'), 'partners.forms')
+
+
+
+ | {{ trans('app.table_no') }} |
+ {{ trans('partner.name') }} |
+ {{ trans('contact.email') }} |
+ {{ trans('contact.phone') }} |
+ {{ trans('partner.projects_count') }} |
+ {{ trans('app.status') }} |
+ {{ trans('app.action') }} |
+
+
+
+ @foreach($partners as $key => $partner)
+
+ | {{ $partners->firstItem() + $key }} |
+ {{ $partner->name }} |
+ {{ $partner->email }} |
+ {{ $partner->phone }} |
+ {{ $partner->projects_count }} |
+ {{ $partner->is_active }} |
+
+ {!! link_to_route(
+ 'partners.index',
+ trans('app.edit'),
+ ['action' => 'edit', 'id' => $partner->id] + Request::only('page', 'q'),
+ ['id' => 'edit-partner-' . $partner->id]
+ ) !!} |
+ {!! link_to_route(
+ 'partners.index',
+ trans('app.delete'),
+ ['action' => 'delete', 'id' => $partner->id] + Request::only('page', 'q'),
+ ['id' => 'del-partner-' . $partner->id]
+ ) !!}
+ |
+
+ @endforeach
+
+
+
{{ $partners->appends(Request::except('page'))->render() }}
+
@endsection
diff --git a/tests/Unit/Models/PartnerTest.php b/tests/Unit/Models/PartnerTest.php
index 6a7b9f0..27af8dd 100644
--- a/tests/Unit/Models/PartnerTest.php
+++ b/tests/Unit/Models/PartnerTest.php
@@ -4,7 +4,9 @@ namespace Tests\Unit\Models;
use App\Entities\Agencies\Agency;
use App\Entities\Partners\Partner;
+use App\Entities\Projects\Project;
use Illuminate\Foundation\Testing\DatabaseMigrations;
+use Illuminate\Support\Collection;
use Tests\TestCase as TestCase;
class PartnerTest extends TestCase
@@ -20,4 +22,14 @@ class PartnerTest extends TestCase
$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);
+ }
}
diff --git a/tests/Unit/Policies/AgencyPolicyTest.php b/tests/Unit/Policies/AgencyPolicyTest.php
new file mode 100644
index 0000000..22c839b
--- /dev/null
+++ b/tests/Unit/Policies/AgencyPolicyTest.php
@@ -0,0 +1,18 @@
+createUser();
+ factory(Agency::class)->create(['owner_id' => $user->id]);
+
+ $this->assertTrue($user->can('manage', $user->agency));
+ }
+}