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;
/**
* Jobs Repository Class
* Jobs Repository.
*
* @author Nafies Luthfi <nafiesl@gmail.com>
*/
@ -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;
}

15
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 <nafiesl@gmail.com>
*/
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();
}
}

6
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 <nafiesl@gmail.com>
*/
@ -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'));
}

15
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 <nafiesl@gmail.com>
*/
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'));
}

2
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']);

Loading…
Cancel
Save