Browse Source

Move project jobs query from job repository to project model method

pull/3/head
Nafies Luthfi 8 years ago
parent
commit
1f6704eeac
  1. 14
      app/Entities/Projects/JobsRepository.php
  2. 15
      app/Entities/Projects/Project.php
  3. 6
      app/Http/Controllers/JobsController.php
  4. 15
      app/Http/Controllers/Projects/JobsController.php
  5. 2
      routes/web/projects.php

14
app/Entities/Projects/JobsRepository.php

@ -7,7 +7,7 @@ use App\Entities\Projects\Project;
use DB; use DB;
/** /**
* Jobs Repository Class
* Jobs Repository.
* *
* @author Nafies Luthfi <nafiesl@gmail.com> * @author Nafies Luthfi <nafiesl@gmail.com>
*/ */
@ -32,17 +32,6 @@ class JobsRepository extends BaseRepository
->get(); ->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) public function requireProjectById($projectId)
{ {
return Project::findOrFail($projectId); return Project::findOrFail($projectId);
@ -100,6 +89,7 @@ class JobsRepository extends BaseRepository
$jobData['price'] = str_replace('.', '', $jobData['price']); $jobData['price'] = str_replace('.', '', $jobData['price']);
$job = $this->requireById($jobId); $job = $this->requireById($jobId);
$job->update($jobData); $job->update($jobData);
return $job; return $job;
} }

15
app/Entities/Projects/Project.php

@ -11,6 +11,11 @@ use App\Entities\Subscriptions\Subscription;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Laracasts\Presenter\PresentableTrait; use Laracasts\Presenter\PresentableTrait;
/**
* Project Model.
*
* @author Nafies Luthfi <nafiesl@gmail.com>
*/
class Project extends Model class Project extends Model
{ {
use PresentableTrait; use PresentableTrait;
@ -117,4 +122,14 @@ class Project extends Model
return $collectibeEarnings; return $collectibeEarnings;
} }
public function getJobList($jobType)
{
$jobType = (int) $jobType;
return $this->jobs()->where('type_id', $jobType)
->orderBy('position')
->with('worker', 'tasks')
->get();
}
} }

6
app/Http/Controllers/JobsController.php

@ -9,7 +9,7 @@ use App\Http\Requests\Jobs\UpdateRequest;
use Illuminate\Http\Request; use Illuminate\Http\Request;
/** /**
* Jobs Controller
* Jobs Controller.
* *
* @author Nafies Luthfi <nafiesl@gmail.com> * @author Nafies Luthfi <nafiesl@gmail.com>
*/ */
@ -25,6 +25,7 @@ class JobsController extends Controller
public function index() public function index()
{ {
$jobs = $this->repo->getUnfinishedJobs(); $jobs = $this->repo->getUnfinishedJobs();
return view('jobs.unfinished', compact('jobs')); return view('jobs.unfinished', compact('jobs'));
} }
@ -47,6 +48,7 @@ class JobsController extends Controller
{ {
$job = $this->repo->requireById($jobId); $job = $this->repo->requireById($jobId);
$workers = $this->repo->getWorkersList(); $workers = $this->repo->getWorkersList();
return view('jobs.edit', compact('job', 'workers')); return view('jobs.edit', compact('job', 'workers'));
} }
@ -54,12 +56,14 @@ class JobsController extends Controller
{ {
$job = $this->repo->update($req->except(['_method', '_token']), $jobId); $job = $this->repo->update($req->except(['_method', '_token']), $jobId);
flash()->success(trans('job.updated')); flash()->success(trans('job.updated'));
return redirect()->route('jobs.show', $job->id); return redirect()->route('jobs.show', $job->id);
} }
public function delete($jobId) public function delete($jobId)
{ {
$job = $this->repo->requireById($jobId); $job = $this->repo->requireById($jobId);
return view('jobs.delete', compact('job')); return view('jobs.delete', compact('job'));
} }

15
app/Http/Controllers/Projects/JobsController.php

@ -9,13 +9,12 @@ use App\Http\Requests\Jobs\CreateRequest;
use Illuminate\Http\Request; use Illuminate\Http\Request;
/** /**
* Project Jobs Controller
* Project Jobs Controller.
* *
* @author Nafies Luthfi <nafiesl@gmail.com> * @author Nafies Luthfi <nafiesl@gmail.com>
*/ */
class JobsController extends Controller class JobsController extends Controller
{ {
private $repo; private $repo;
public function __construct(JobsRepository $repo) public function __construct(JobsRepository $repo)
@ -25,7 +24,8 @@ class JobsController extends Controller
public function index(Project $project) public function index(Project $project)
{ {
$jobs = $this->repo->getProjectJobs($project->id);
$jobs = $project->jobs;
return view('projects.jobs.index', compact('project', 'jobs')); return view('projects.jobs.index', compact('project', 'jobs'));
} }
@ -33,6 +33,7 @@ class JobsController extends Controller
{ {
$project = $this->repo->requireProjectById($projectId); $project = $this->repo->requireProjectById($projectId);
$workers = $this->repo->getWorkersList(); $workers = $this->repo->getWorkersList();
return view('jobs.create', compact('project', 'workers')); return view('jobs.create', compact('project', 'workers'));
} }
@ -53,6 +54,7 @@ class JobsController extends Controller
{ {
$job = $this->repo->createJob($req->except('_token'), $projectId); $job = $this->repo->createJob($req->except('_token'), $projectId);
flash()->success(trans('job.created')); flash()->success(trans('job.created'));
return redirect()->route('jobs.show', $job->id); return redirect()->route('jobs.show', $job->id);
} }
@ -60,14 +62,13 @@ class JobsController extends Controller
{ {
$this->repo->createJobs($req->except('_token'), $projectId); $this->repo->createJobs($req->except('_token'), $projectId);
flash()->success(trans('job.created_from_other_project')); flash()->success(trans('job.created_from_other_project'));
return redirect()->route('projects.jobs.index', $projectId); 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')); return view('projects.jobs-export-html', compact('project', 'jobs'));
} }

2
routes/web/projects.php

@ -28,7 +28,7 @@ Route::group(['middleware' => ['web', 'role:admin'], 'namespace' => 'Projects'],
/** /**
* Project Jobs Routes * 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::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::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']); Route::get('projects/{id}/jobs/add-from-other-project', ['as' => 'projects.jobs.add-from-other-project', 'uses' => 'JobsController@addFromOtherProject']);

Loading…
Cancel
Save