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') }}
| {{ trans('job.name') }} | {{ $job->name }} |
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('app.table_no') }} |
+ {{ trans('project.name') }} |
+ {{ trans('job.name') }} |
+ {{ trans('job.tasks_count') }} |
+ {{ trans('job.progress') }} |
+ {{ trans('job.price') }} |
+ {{ trans('app.action') }} |
+
+
+ @forelse($jobs as $key => $job)
+
+ | {{ $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')
+ ]) !!}
+ |
+
+ @empty
+ | {{ trans('job.empty') }} |
+ @endforelse
+
+
+
+{{ $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());
+ }
}