From 1f6704eeacf4caa5e8c49dd043743ae7e47315ac Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Thu, 23 Nov 2017 10:22:08 +0800 Subject: [PATCH] Move project jobs query from job repository to project model method --- app/Entities/Projects/JobsRepository.php | 14 ++------------ app/Entities/Projects/Project.php | 15 +++++++++++++++ app/Http/Controllers/JobsController.php | 6 +++++- app/Http/Controllers/Projects/JobsController.php | 15 ++++++++------- routes/web/projects.php | 2 +- 5 files changed, 31 insertions(+), 21 deletions(-) diff --git a/app/Entities/Projects/JobsRepository.php b/app/Entities/Projects/JobsRepository.php index 0cf10a9..824c77e 100755 --- a/app/Entities/Projects/JobsRepository.php +++ b/app/Entities/Projects/JobsRepository.php @@ -7,7 +7,7 @@ use App\Entities\Projects\Project; use DB; /** - * Jobs Repository Class + * Jobs Repository. * * @author Nafies Luthfi */ @@ -32,17 +32,6 @@ class JobsRepository extends BaseRepository ->get(); } - public function getProjectJobs($projectId, $type = null) - { - return Job::where(function ($query) use ($projectId, $type) { - $query->whereProjectId($projectId); - if ($type) { - $query->whereTypeId($type); - } - - })->orderBy('position')->with('worker', 'tasks')->get(); - } - public function requireProjectById($projectId) { return Project::findOrFail($projectId); @@ -100,6 +89,7 @@ class JobsRepository extends BaseRepository $jobData['price'] = str_replace('.', '', $jobData['price']); $job = $this->requireById($jobId); $job->update($jobData); + return $job; } diff --git a/app/Entities/Projects/Project.php b/app/Entities/Projects/Project.php index 835565d..1bd6d04 100755 --- a/app/Entities/Projects/Project.php +++ b/app/Entities/Projects/Project.php @@ -11,6 +11,11 @@ use App\Entities\Subscriptions\Subscription; use Illuminate\Database\Eloquent\Model; use Laracasts\Presenter\PresentableTrait; +/** + * Project Model. + * + * @author Nafies Luthfi + */ class Project extends Model { use PresentableTrait; @@ -117,4 +122,14 @@ class Project extends Model return $collectibeEarnings; } + public function getJobList($jobType) + { + $jobType = (int) $jobType; + + return $this->jobs()->where('type_id', $jobType) + ->orderBy('position') + ->with('worker', 'tasks') + ->get(); + } + } diff --git a/app/Http/Controllers/JobsController.php b/app/Http/Controllers/JobsController.php index 74cce0b..c7cc205 100755 --- a/app/Http/Controllers/JobsController.php +++ b/app/Http/Controllers/JobsController.php @@ -9,7 +9,7 @@ use App\Http\Requests\Jobs\UpdateRequest; use Illuminate\Http\Request; /** - * Jobs Controller + * Jobs Controller. * * @author Nafies Luthfi */ @@ -25,6 +25,7 @@ class JobsController extends Controller public function index() { $jobs = $this->repo->getUnfinishedJobs(); + return view('jobs.unfinished', compact('jobs')); } @@ -47,6 +48,7 @@ class JobsController extends Controller { $job = $this->repo->requireById($jobId); $workers = $this->repo->getWorkersList(); + return view('jobs.edit', compact('job', 'workers')); } @@ -54,12 +56,14 @@ class JobsController extends Controller { $job = $this->repo->update($req->except(['_method', '_token']), $jobId); flash()->success(trans('job.updated')); + return redirect()->route('jobs.show', $job->id); } public function delete($jobId) { $job = $this->repo->requireById($jobId); + return view('jobs.delete', compact('job')); } diff --git a/app/Http/Controllers/Projects/JobsController.php b/app/Http/Controllers/Projects/JobsController.php index b18543d..14f8e6b 100755 --- a/app/Http/Controllers/Projects/JobsController.php +++ b/app/Http/Controllers/Projects/JobsController.php @@ -9,13 +9,12 @@ use App\Http\Requests\Jobs\CreateRequest; use Illuminate\Http\Request; /** - * Project Jobs Controller + * Project Jobs Controller. * * @author Nafies Luthfi */ class JobsController extends Controller { - private $repo; public function __construct(JobsRepository $repo) @@ -25,7 +24,8 @@ class JobsController extends Controller public function index(Project $project) { - $jobs = $this->repo->getProjectJobs($project->id); + $jobs = $project->jobs; + return view('projects.jobs.index', compact('project', 'jobs')); } @@ -33,6 +33,7 @@ class JobsController extends Controller { $project = $this->repo->requireProjectById($projectId); $workers = $this->repo->getWorkersList(); + return view('jobs.create', compact('project', 'workers')); } @@ -53,6 +54,7 @@ class JobsController extends Controller { $job = $this->repo->createJob($req->except('_token'), $projectId); flash()->success(trans('job.created')); + return redirect()->route('jobs.show', $job->id); } @@ -60,14 +62,13 @@ class JobsController extends Controller { $this->repo->createJobs($req->except('_token'), $projectId); flash()->success(trans('job.created_from_other_project')); + return redirect()->route('projects.jobs.index', $projectId); } - public function jobsExport(Request $request, $projectId, $exportType = 'html') + public function jobsExport(Project $project, $exportType = 'html') { - $jobType = $request->get('job_type', 1); - $project = $this->repo->requireById($projectId); - $jobs = $this->repo->getProjectJobs($projectId, $jobType); + $jobs = $project->getJobList(request('job_type', 1)); return view('projects.jobs-export-html', compact('project', 'jobs')); } diff --git a/routes/web/projects.php b/routes/web/projects.php index ffc7f5d..b8791ff 100644 --- a/routes/web/projects.php +++ b/routes/web/projects.php @@ -28,7 +28,7 @@ Route::group(['middleware' => ['web', 'role:admin'], 'namespace' => 'Projects'], /** * Project Jobs Routes */ - Route::get('projects/{id}/jobs-export/{type?}', ['as' => 'projects.jobs-export', 'uses' => 'JobsController@jobsExport']); + Route::get('projects/{project}/jobs-export/{type?}', ['as' => 'projects.jobs-export', 'uses' => 'JobsController@jobsExport']); Route::get('projects/{id}/jobs/create', ['as' => 'projects.jobs.create', 'uses' => 'JobsController@create']); Route::post('projects/{id}/jobs', ['as' => 'projects.jobs.store', 'uses' => 'JobsController@store']); Route::get('projects/{id}/jobs/add-from-other-project', ['as' => 'projects.jobs.add-from-other-project', 'uses' => 'JobsController@addFromOtherProject']);