Browse Source

Add agency model policy and add partner projects relation

pull/1/head
Nafies Luthfi 8 years ago
parent
commit
44c14c8b17
  1. 5
      app/Entities/Partners/Partner.php
  2. 4
      app/Http/Controllers/Partners/PartnersController.php
  3. 17
      app/Policies/AgencyPolicy.php
  4. 1
      app/Providers/AuthServiceProvider.php
  5. 1
      resources/lang/id/partner.php
  6. 3
      resources/views/layouts/partials/sidebar.blade.php
  7. 14
      resources/views/partners/index.blade.php
  8. 12
      tests/Unit/Models/PartnerTest.php
  9. 18
      tests/Unit/Policies/AgencyPolicyTest.php

5
app/Entities/Partners/Partner.php

@ -15,4 +15,9 @@ class Partner extends Model
{ {
return $this->belongsTo('App\Entities\Agencies\Agency'); return $this->belongsTo('App\Entities\Agencies\Agency');
} }
public function projects()
{
return $this->hasMany('App\Entities\Projects\Project', 'customer_id');
}
} }

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

@ -18,7 +18,9 @@ class PartnersController extends Controller
$editablePartner = null; $editablePartner = null;
$partners = Partner::where(function ($query) { $partners = Partner::where(function ($query) {
$query->where('name', 'like', '%'.request('q').'%'); $query->where('name', 'like', '%'.request('q').'%');
})->paginate(25);
})
->withCount('projects')
->paginate(25);
if (in_array(request('action'), ['edit', 'delete']) && request('id') != null) { if (in_array(request('action'), ['edit', 'delete']) && request('id') != null) {
$editablePartner = Partner::find(request('id')); $editablePartner = Partner::find(request('id'));

17
app/Policies/AgencyPolicy.php

@ -0,0 +1,17 @@
<?php
namespace App\Policies;
use App\Entities\Agencies\Agency;
use App\Entities\Users\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class AgencyPolicy
{
use HandlesAuthorization;
public function manage(User $user, Agency $agency)
{
return $user->id == $agency->owner_id;
}
}

1
app/Providers/AuthServiceProvider.php

@ -16,6 +16,7 @@ class AuthServiceProvider extends ServiceProvider
protected $policies = [ protected $policies = [
'App\Entities\Partners\Partner' => 'App\Policies\Partners\PartnerPolicy', 'App\Entities\Partners\Partner' => 'App\Policies\Partners\PartnerPolicy',
'App\Entities\Projects\Project' => 'App\Policies\Projects\ProjectPolicy', 'App\Entities\Projects\Project' => 'App\Policies\Projects\ProjectPolicy',
'App\Entities\Agencies\Agency' => 'App\Policies\AgencyPolicy',
'App\Entities\Users\Event' => 'App\Policies\EventPolicy', 'App\Entities\Users\Event' => 'App\Policies\EventPolicy',
]; ];

1
resources/lang/id/partner.php

@ -26,4 +26,5 @@ return [
// Attributes // Attributes
'name' => 'Nama Partner', 'name' => 'Nama Partner',
'description' => 'Deskripsi Partner', 'description' => 'Deskripsi Partner',
'projects_count' => 'Jml Project',
]; ];

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

@ -62,6 +62,9 @@
@can('manage_payments') @can('manage_payments')
<li>{!! html_link_to_route('payments.index', trans('payment.payments'), [], ['icon' => 'money']) !!}</li> <li>{!! html_link_to_route('payments.index', trans('payment.payments'), [], ['icon' => 'money']) !!}</li>
@endcan @endcan
@can('manage', auth()->user()->agency)
<li>{!! html_link_to_route('partners.index', trans('partner.list'), [], ['icon' => 'users']) !!}</li>
@endcan
@can('manage_users') @can('manage_users')
<li> <li>
<a href="{{ route('users.index') }}"><i class="fa fa-users fa-fw"></i> {{ trans('user.users') }} <span class="fa arrow"></span></a> <a href="{{ route('users.index') }}"><i class="fa fa-users fa-fw"></i> {{ trans('user.users') }} <span class="fa arrow"></span></a>

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

@ -10,9 +10,10 @@
{{ trans('partner.list') }} {{ trans('partner.list') }}
<small>{{ trans('app.total') }} : {{ $partners->total() }} {{ trans('partner.partner') }}</small> <small>{{ trans('app.total') }} : {{ $partners->total() }} {{ trans('partner.partner') }}</small>
</h1> </h1>
<div class="row">
<div class="col-md-9">
<div class="panel panel-default table-responsive">
@includeWhen(Request::has('action'), 'partners.forms')
<div class="panel panel-default table-responsive">
<div class="panel-heading"> <div class="panel-heading">
{{ Form::open(['method' => 'get','class' => 'form-inline']) }} {{ Form::open(['method' => 'get','class' => 'form-inline']) }}
{!! FormField::text('q', ['value' => request('q'), 'label' => trans('partner.search'), 'class' => 'input-sm']) !!} {!! FormField::text('q', ['value' => request('q'), 'label' => trans('partner.search'), 'class' => 'input-sm']) !!}
@ -27,6 +28,7 @@
<th>{{ trans('partner.name') }}</th> <th>{{ trans('partner.name') }}</th>
<th>{{ trans('contact.email') }}</th> <th>{{ trans('contact.email') }}</th>
<th>{{ trans('contact.phone') }}</th> <th>{{ trans('contact.phone') }}</th>
<th class="text-center">{{ trans('partner.projects_count') }}</th>
<th class="text-center">{{ trans('app.status') }}</th> <th class="text-center">{{ trans('app.status') }}</th>
<th class="text-center">{{ trans('app.action') }}</th> <th class="text-center">{{ trans('app.action') }}</th>
</tr> </tr>
@ -38,6 +40,7 @@
<td>{{ $partner->name }}</td> <td>{{ $partner->name }}</td>
<td>{{ $partner->email }}</td> <td>{{ $partner->email }}</td>
<td>{{ $partner->phone }}</td> <td>{{ $partner->phone }}</td>
<td class="text-center">{{ $partner->projects_count }}</td>
<td class="text-center">{{ $partner->is_active }}</td> <td class="text-center">{{ $partner->is_active }}</td>
<td class="text-center"> <td class="text-center">
{!! link_to_route( {!! link_to_route(
@ -59,9 +62,6 @@
</table> </table>
<div class="panel-body">{{ $partners->appends(Request::except('page'))->render() }}</div> <div class="panel-body">{{ $partners->appends(Request::except('page'))->render() }}</div>
</div> </div>
</div>
<div class="col-md-3">
@includeWhen(Request::has('action'), 'partners.forms')
</div>
</div>
</div> </div>
@endsection @endsection

12
tests/Unit/Models/PartnerTest.php

@ -4,7 +4,9 @@ namespace Tests\Unit\Models;
use App\Entities\Agencies\Agency; use App\Entities\Agencies\Agency;
use App\Entities\Partners\Partner; use App\Entities\Partners\Partner;
use App\Entities\Projects\Project;
use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Support\Collection;
use Tests\TestCase as TestCase; use Tests\TestCase as TestCase;
class PartnerTest extends TestCase class PartnerTest extends TestCase
@ -20,4 +22,14 @@ class PartnerTest extends TestCase
$this->assertTrue($partner->owner instanceof Agency); $this->assertTrue($partner->owner instanceof Agency);
$this->assertEquals($partner->owner->id, $agency->id); $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);
}
} }

18
tests/Unit/Policies/AgencyPolicyTest.php

@ -0,0 +1,18 @@
<?php
namespace Tests\Unit\Policies;
use App\Entities\Agencies\Agency;
use Tests\TestCase as TestCase;
class AgencyPolicyTest extends TestCase
{
/** @test */
public function user_can_manage_owned_agency()
{
$user = $this->createUser();
factory(Agency::class)->create(['owner_id' => $user->id]);
$this->assertTrue($user->can('manage', $user->agency));
}
}
Loading…
Cancel
Save