diff --git a/app/Entities/Users/User.php b/app/Entities/Users/User.php index d6bcd60..2e9c1f6 100644 --- a/app/Entities/Users/User.php +++ b/app/Entities/Users/User.php @@ -2,6 +2,7 @@ namespace App\Entities\Users; +use App\Entities\Projects\Job; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; @@ -124,4 +125,9 @@ class User extends Authenticatable return $roleList; } + + public function jobs() + { + return $this->hasMany(Job::class, 'worker_id'); + } } diff --git a/app/Http/Controllers/Users/JobsController.php b/app/Http/Controllers/Users/JobsController.php new file mode 100644 index 0000000..8a9f493 --- /dev/null +++ b/app/Http/Controllers/Users/JobsController.php @@ -0,0 +1,19 @@ +jobs() + ->latest() + ->with(['tasks', 'project']) + ->paginate(); + + return view('users.jobs', compact('user', 'jobs')); + } +} diff --git a/resources/lang/en/job.php b/resources/lang/en/job.php index 3871d37..09416bd 100644 --- a/resources/lang/en/job.php +++ b/resources/lang/en/job.php @@ -6,6 +6,7 @@ return [ 'list' => 'Job List', 'additional' => 'Additional Job List', 'on_progress' => 'Job on Progress', + 'detail' => 'Job Detail', 'search' => 'Ssearch Job', 'found' => 'Job found.', 'not_found' => 'Job not found.', @@ -18,7 +19,7 @@ return [ // Actions 'create' => 'Create new Job', 'created' => 'New Job has been created.', - 'show' => 'Job Detail', + 'show' => 'View Job Detail', 'edit' => 'Edit Job', 'update' => 'Update Job', 'updated' => 'Job data has been updated.', diff --git a/resources/lang/en/user.php b/resources/lang/en/user.php index 056e82e..b504531 100644 --- a/resources/lang/en/user.php +++ b/resources/lang/en/user.php @@ -33,10 +33,12 @@ return [ 'registered_at' => 'Registered at', // Roles - 'role' => 'Role', 'roles' => [ 'admin' => 'Administrator', 'worker' => 'Worker', ], + + // Relations + 'jobs' => 'Job List', ]; diff --git a/resources/lang/id/user.php b/resources/lang/id/user.php index a72dbc4..6565244 100644 --- a/resources/lang/id/user.php +++ b/resources/lang/id/user.php @@ -32,10 +32,12 @@ return [ 'registered_at' => 'Terdaftar sejak', // Roles - 'role' => 'Role', 'roles' => [ 'admin' => 'Administrator', 'worker' => 'Worker', ], + + // Relations + 'jobs' => 'Daftar Job', ]; diff --git a/resources/views/jobs/partials/job-show.blade.php b/resources/views/jobs/partials/job-show.blade.php index 8ede6d0..1ef38cb 100644 --- a/resources/views/jobs/partials/job-show.blade.php +++ b/resources/views/jobs/partials/job-show.blade.php @@ -1,5 +1,5 @@
-

{{ trans('job.show') }}

+

{{ trans('job.detail') }}

diff --git a/resources/views/jobs/show.blade.php b/resources/views/jobs/show.blade.php index 3438127..c2e5149 100755 --- a/resources/views/jobs/show.blade.php +++ b/resources/views/jobs/show.blade.php @@ -1,6 +1,6 @@ @extends('layouts.app') -@section('title', trans('job.show') . ' | ' . $job->name . ' | ' . $job->project->name) +@section('title', trans('job.detail') . ' | ' . $job->name . ' | ' . $job->project->name) @section('content') @include('jobs.partials.breadcrumb') @@ -11,7 +11,7 @@ {!! link_to_route('jobs.edit', trans('job.edit'), [$job->id], ['class' => 'btn btn-warning']) !!} {!! link_to_route('projects.jobs.index', trans('job.back_to_index'), [$job->project_id, '#' . $job->id], ['class' => 'btn btn-default']) !!} - {{ $job->name }} {{ trans('job.show') }} + {{ $job->name }} {{ trans('job.detail') }}
diff --git a/resources/views/users/jobs.blade.php b/resources/views/users/jobs.blade.php new file mode 100755 index 0000000..2f75e13 --- /dev/null +++ b/resources/views/users/jobs.blade.php @@ -0,0 +1,53 @@ +@extends('layouts.user') + +@section('subtitle', trans('user.jobs')) + +@section('content-user') +
+
{{ trans('job.name') }}{{ $job->name }}
+ + + + + + + + + + + @forelse($jobs as $key => $job) + + + + + + + + + + @empty + + @endforelse + +
{{ trans('app.table_no') }}{{ trans('project.name') }}{{ trans('job.name') }}{{ trans('job.tasks_count') }}{{ trans('job.progress') }}{{ trans('job.price') }}{{ trans('app.action') }}
{{ $jobs->firstItem() + $key }}{{ $job->project->nameLink() }} + {{ link_to_route('jobs.show', $job->name, [$job], ['title' => trans('job.show')]) }} + @if ($job->tasks->isEmpty() == false) +
    + @foreach($job->tasks as $task) +
  • + + {{ $task->name }} +
  • + @endforeach +
+ @endif +
{{ $job->tasks_count = $job->tasks->count() }}{{ formatDecimal($job->progress = $job->progress) }} %{{ formatRp($job->price) }} + {!! html_link_to_route('jobs.show', '', [$job], [ + 'icon' => 'search', + 'class' => 'btn btn-info btn-xs', + 'title' => trans('job.show') + ]) !!} +
{{ trans('job.empty') }}
+
+{{ $jobs->appends(Request::except('page'))->render() }} +@endsection diff --git a/resources/views/users/partials/nav-tabs.blade.php b/resources/views/users/partials/nav-tabs.blade.php index b91e7ff..9ac236b 100644 --- a/resources/views/users/partials/nav-tabs.blade.php +++ b/resources/views/users/partials/nav-tabs.blade.php @@ -3,5 +3,8 @@
  • {!! link_to_route('users.show', trans('user.profile'), [$user]) !!}
  • +
  • + {!! link_to_route('users.jobs', trans('user.jobs').' ('.$user->jobs()->count().')', [$user]) !!} +

  • diff --git a/routes/web/users.php b/routes/web/users.php index 0fda32b..831d370 100644 --- a/routes/web/users.php +++ b/routes/web/users.php @@ -4,6 +4,7 @@ Route::group(['middleware' => ['web', 'role:admin'], 'namespace' => 'Users'], fu /* * Users Routes */ + Route::get('users/{user}/jobs', ['as' => 'users.jobs', 'uses' => 'JobsController@index']); Route::get('users/{user}/delete', ['as' => 'users.delete', 'uses' => 'UsersController@delete']); Route::resource('users', 'UsersController'); }); diff --git a/tests/Unit/Models/UserTest.php b/tests/Unit/Models/UserTest.php index f44a52f..cec503a 100644 --- a/tests/Unit/Models/UserTest.php +++ b/tests/Unit/Models/UserTest.php @@ -2,7 +2,9 @@ namespace Tests\Unit\Models; +use App\Entities\Projects\Job; use App\Entities\Users\User; +use Illuminate\Support\Collection; use Tests\TestCase; /** @@ -90,4 +92,14 @@ class UserTest extends TestCase $this->assertEquals($roleList, $user->roleList()); } + + /** @test */ + public function a_user_has_many_jobs_relation() + { + $user = factory(User::class)->create(); + $job = factory(Job::class)->create(['worker_id' => $user->id]); + + $this->assertInstanceOf(Collection::class, $user->jobs); + $this->assertInstanceOf(Job::class, $user->jobs->first()); + } }