From f1418fa4464dd835fe70910d9ab2de6cf35e372d Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Mon, 20 Aug 2018 17:15:49 +0800 Subject: [PATCH] Convert a task to become a job --- app/Http/Controllers/Projects/TasksController.php | 22 +++++++++++++++++ resources/lang/id/task.php | 4 ++++ .../jobs/partials/job-tasks-operation.blade.php | 10 ++++++++ routes/web/projects.php | 1 + tests/Feature/ManageJobsTest.php | 28 ++++++++++++++++++++++ 5 files changed, 65 insertions(+) diff --git a/app/Http/Controllers/Projects/TasksController.php b/app/Http/Controllers/Projects/TasksController.php index 2511800..7539580 100755 --- a/app/Http/Controllers/Projects/TasksController.php +++ b/app/Http/Controllers/Projects/TasksController.php @@ -68,4 +68,26 @@ class TasksController extends Controller return redirect()->route('jobs.show', $task->job_id); } + + /** + * Set a task to become a job. + * + * @param \App\Entities\Projects\Task $task + * @return \Illuminate\Routing\Redirector + */ + public function setAsJob(Task $task) + { + $oldJob = $task->job; + + $job = new Job; + $job->name = $task->name; + $job->description = $task->description; + $job->project_id = $oldJob->project_id; + $job->worker_id = $oldJob->worker_id; + $job->save(); + + flash(__('task.upgraded_to_job'), 'success'); + + return redirect()->route('jobs.show', $job); + } } diff --git a/resources/lang/id/task.php b/resources/lang/id/task.php index 28e79eb..69a9d12 100644 --- a/resources/lang/id/task.php +++ b/resources/lang/id/task.php @@ -22,6 +22,10 @@ return [ 'deleted' => 'Hapus data Task telah berhasil.', 'undeleted' => 'Data Task gagal dihapus.', + 'set_as_job' => 'Set Menjadi Job', + 'set_as_job_confirm' => 'Anda yakin mengubah task ini menjadi sebuah Job?', + 'upgraded_as_job' => 'Task telah menjadi Job.', + // Attributes 'name' => 'Nama Task', 'progress' => 'Progress', diff --git a/resources/views/jobs/partials/job-tasks-operation.blade.php b/resources/views/jobs/partials/job-tasks-operation.blade.php index 4887762..443c7be 100644 --- a/resources/views/jobs/partials/job-tasks-operation.blade.php +++ b/resources/views/jobs/partials/job-tasks-operation.blade.php @@ -31,6 +31,16 @@ {{ Form::close() }} + @endcan @endif diff --git a/routes/web/projects.php b/routes/web/projects.php index 949d7fc..c51d41e 100644 --- a/routes/web/projects.php +++ b/routes/web/projects.php @@ -52,6 +52,7 @@ Route::group(['middleware' => ['auth'], 'namespace' => 'Projects'], function () Route::post('jobs/{job}/tasks', ['as' => 'tasks.store', 'uses' => 'TasksController@store']); Route::patch('tasks/{task}', ['as' => 'tasks.update', 'uses' => 'TasksController@update']); Route::delete('tasks/{task}', ['as' => 'tasks.destroy', 'uses' => 'TasksController@destroy']); + Route::post('tasks/{task}/set-as-job', ['as' => 'tasks.set-as-job', 'uses' => 'TasksController@setAsJob']); /* * Files Routes diff --git a/tests/Feature/ManageJobsTest.php b/tests/Feature/ManageJobsTest.php index 728aaf7..9c06048 100644 --- a/tests/Feature/ManageJobsTest.php +++ b/tests/Feature/ManageJobsTest.php @@ -203,4 +203,32 @@ class ManageJobsTest extends TestCase $this->visit(route('jobs.index')); $this->seePageIs(route('jobs.index')); } + + /** @test */ + public function admin_can_upgrade_a_task_to_become_job() + { + $user = $this->adminUserSigningIn(); + + $project = factory(Project::class)->create(); + $job = factory(Job::class)->create([ + 'project_id' => $project->id, + 'type_id' => 1, + 'worker_id' => $user->id, + ]); + $task = factory(Task::class)->create([ + 'name' => 'This is a Task', + 'job_id' => $job->id, + 'description' => 'Task description.', + ]); + + $this->visitRoute('jobs.show', [$job, 'action' => 'task_edit', 'task_id' => $task->id]); + $this->seeRouteIs('jobs.show', [$job, 'action' => 'task_edit', 'task_id' => $task->id]); + $this->seeElement('button', ['id' => 'set-as-job-'.$task->id]); + $this->press('set-as-job-'.$task->id); + + $this->seeInDatabase('jobs', [ + 'name' => 'This is a Task', + 'description' => 'Task description.', + ]); + } }