diff --git a/app/Entities/Projects/Job.php b/app/Entities/Projects/Job.php index 65d41c9..276009a 100755 --- a/app/Entities/Projects/Job.php +++ b/app/Entities/Projects/Job.php @@ -18,6 +18,16 @@ class Job extends Model protected $presenter = JobPresenter::class; protected $guarded = ['id', 'created_at', 'updated_at']; + public function nameLink() + { + return link_to_route('jobs.show', $this->name, [$this->id], [ + 'title' => trans( + 'app.show_detail_title', + ['name' => $this->name, 'type' => trans('job.job')] + ), + ]); + } + public function project() { return $this->belongsTo(Project::class, 'project_id'); diff --git a/app/Entities/Projects/JobsRepository.php b/app/Entities/Projects/JobsRepository.php index aded52e..396f68b 100755 --- a/app/Entities/Projects/JobsRepository.php +++ b/app/Entities/Projects/JobsRepository.php @@ -4,6 +4,7 @@ namespace App\Entities\Projects; use App\Entities\BaseRepository; use App\Entities\Users\User; +use App\Queries\AdminDashboardQuery; use DB; /** @@ -22,17 +23,8 @@ class JobsRepository extends BaseRepository public function getUnfinishedJobs(User $user) { - $jobsQuery = $this->model->whereHas('tasks', function ($query) { - return $query->where('progress', '<', 100); - })->whereHas('project', function ($query) { - return $query->whereIn('status_id', [2, 3]); - })->with(['tasks', 'project']); - - if ($user->hasRole('admin') == false) { - $jobsQuery->where('worker_id', $user->id); - } - - return $jobsQuery->get(); + return (new AdminDashboardQuery) + ->onProgressJobs($user, ['project', 'worker']); } public function requireProjectById($projectId) diff --git a/app/Http/Controllers/Projects/JobsController.php b/app/Http/Controllers/Projects/JobsController.php index 7df14fa..f07f925 100755 --- a/app/Http/Controllers/Projects/JobsController.php +++ b/app/Http/Controllers/Projects/JobsController.php @@ -24,7 +24,7 @@ class JobsController extends Controller public function index(Project $project) { - $jobs = $project->jobs; + $jobs = $project->jobs()->with(['tasks'])->get(); return view('projects.jobs.index', compact('project', 'jobs')); } diff --git a/app/Http/Controllers/Users/JobsController.php b/app/Http/Controllers/Users/JobsController.php index 8d9fec1..f3180f7 100644 --- a/app/Http/Controllers/Users/JobsController.php +++ b/app/Http/Controllers/Users/JobsController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Users; use App\Entities\Users\User; use App\Http\Controllers\Controller; +use App\Queries\AdminDashboardQuery; /** * User Jobs Controller. @@ -14,13 +15,7 @@ class JobsController extends Controller { public function index(User $user) { - $jobs = $user->jobs()->whereHas('tasks', function ($query) { - return $query->where('progress', '<', 100); - })->whereHas('project', function ($query) { - return $query->whereIn('status_id', [2, 3]); - })->where('worker_id', $user->id) - ->with(['tasks', 'project']) - ->paginate(); + $jobs = (new AdminDashboardQuery)->onProgressJobs($user); return view('users.jobs', compact('user', 'jobs')); } diff --git a/app/Queries/AdminDashboardQuery.php b/app/Queries/AdminDashboardQuery.php index 1111442..da90950 100644 --- a/app/Queries/AdminDashboardQuery.php +++ b/app/Queries/AdminDashboardQuery.php @@ -96,22 +96,35 @@ class AdminDashboardQuery } /** - * Get on progress project jobs count. + * Get on progress project jobs list. * * @return int */ - public function onProgressJobCount(User $user) + public function onProgressJobs(User $user, array $eagerLoads = []) { - $jobQuery = Job::whereHas('tasks', function ($query) { - return $query->where('progress', '<', 100); - })->whereHas('project', function ($query) { + $eagerLoads = array_merge(['tasks'], $eagerLoads); + $jobQuery = Job::whereHas('project', function ($query) { return $query->whereIn('status_id', [2, 3]); - }); + })->with($eagerLoads); if ($user->hasRole('admin') == false) { $jobQuery->where('worker_id', $user->id); } - return $jobQuery->count(); + $jobs = $jobQuery->get() + ->where('progress', '<', 100) + ->values(); + + return $jobs; + } + + /** + * Get on progress project jobs count. + * + * @return int + */ + public function onProgressJobCount(User $user) + { + return $this->onProgressJobs($user)->count(); } } diff --git a/resources/views/jobs/unfinished.blade.php b/resources/views/jobs/unfinished.blade.php index e12d84b..2b334db 100755 --- a/resources/views/jobs/unfinished.blade.php +++ b/resources/views/jobs/unfinished.blade.php @@ -1,6 +1,6 @@ @extends('layouts.app') -@section('title', trans('project.jobs')) +@section('title', trans('job.on_progress')) @section('content')