From f1418fa4464dd835fe70910d9ab2de6cf35e372d Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Mon, 20 Aug 2018 17:15:49 +0800 Subject: [PATCH 1/4] 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.', + ]); + } } From bde55f83858905c62a790530e0ba061723384675 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Mon, 20 Aug 2018 17:22:02 +0800 Subject: [PATCH 2/4] Move set_as_job button --- .../jobs/partials/job-tasks-operation.blade.php | 28 ++++++++++++---------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/resources/views/jobs/partials/job-tasks-operation.blade.php b/resources/views/jobs/partials/job-tasks-operation.blade.php index 443c7be..9d3b366 100644 --- a/resources/views/jobs/partials/job-tasks-operation.blade.php +++ b/resources/views/jobs/partials/job-tasks-operation.blade.php @@ -1,8 +1,20 @@ @if (Request::get('action') == 'task_edit' && $editableTask) @can('update', $editableTask) -{{ Form::model($editableTask, ['route' => ['tasks.update', $editableTask], 'method' => 'patch']) }}
-

{{ __('task.edit') }}

+
+
+ {!! FormField::formButton( + [ + 'route' => ['tasks.set-as-job', $editableTask], + 'onsubmit' => __('task.set_as_job_confirm'), + ], + __('task.set_as_job'), + ['class' => 'btn btn-success btn-xs', 'id' => 'set-as-job-'.$editableTask->id] + ) !!} +
+

{{ __('task.edit') }}

+
+ {{ Form::model($editableTask, ['route' => ['tasks.update', $editableTask], 'method' => 'patch']) }}
{!! FormField::text('name') !!}
@@ -29,18 +41,8 @@ {{ link_to_route('jobs.show', __('app.cancel'), [$job], ['class' => 'btn btn-default']) }}
- {{ Form::close() }} -
- + {{ Form::close() }} @endcan @endif From 402941aac9b02b8f8f0cb275729a2fcd0b15c6e5 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Mon, 20 Aug 2018 22:07:37 +0800 Subject: [PATCH 3/4] Make sure old task deleted from the job --- app/Http/Controllers/Projects/TasksController.php | 5 +++++ tests/Feature/ManageJobsTest.php | 14 +++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/Projects/TasksController.php b/app/Http/Controllers/Projects/TasksController.php index 7539580..2dda44d 100755 --- a/app/Http/Controllers/Projects/TasksController.php +++ b/app/Http/Controllers/Projects/TasksController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Projects; +use DB; use App\Entities\Projects\Job; use App\Entities\Projects\Task; use App\Http\Controllers\Controller; @@ -84,7 +85,11 @@ class TasksController extends Controller $job->description = $task->description; $job->project_id = $oldJob->project_id; $job->worker_id = $oldJob->worker_id; + + DB::beginTransaction(); $job->save(); + $task->delete(); + DB::commit(); flash(__('task.upgraded_to_job'), 'success'); diff --git a/tests/Feature/ManageJobsTest.php b/tests/Feature/ManageJobsTest.php index 9c06048..6ff9325 100644 --- a/tests/Feature/ManageJobsTest.php +++ b/tests/Feature/ManageJobsTest.php @@ -212,12 +212,12 @@ class ManageJobsTest extends TestCase $project = factory(Project::class)->create(); $job = factory(Job::class)->create([ 'project_id' => $project->id, - 'type_id' => 1, - 'worker_id' => $user->id, + 'type_id' => 1, + 'worker_id' => $user->id, ]); $task = factory(Task::class)->create([ - 'name' => 'This is a Task', - 'job_id' => $job->id, + 'name' => 'This is a Task', + 'job_id' => $job->id, 'description' => 'Task description.', ]); @@ -227,8 +227,12 @@ class ManageJobsTest extends TestCase $this->press('set-as-job-'.$task->id); $this->seeInDatabase('jobs', [ - 'name' => 'This is a Task', + 'name' => 'This is a Task', 'description' => 'Task description.', ]); + + $this->dontSeeInDatabase('tasks', [ + 'id' => $task->id, + ]); } } From 61881197c42d95a1127416b4906a61940aa9d0b6 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Mon, 20 Aug 2018 22:17:24 +0800 Subject: [PATCH 4/4] Redirect to job edit page after upgrade task to job --- app/Http/Controllers/Projects/TasksController.php | 4 ++-- tests/Feature/ManageJobsTest.php | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Projects/TasksController.php b/app/Http/Controllers/Projects/TasksController.php index 2dda44d..5cc86e9 100755 --- a/app/Http/Controllers/Projects/TasksController.php +++ b/app/Http/Controllers/Projects/TasksController.php @@ -91,8 +91,8 @@ class TasksController extends Controller $task->delete(); DB::commit(); - flash(__('task.upgraded_to_job'), 'success'); + flash(__('task.upgraded_as_job'), 'success'); - return redirect()->route('jobs.show', $job); + return redirect()->route('jobs.edit', $job); } } diff --git a/tests/Feature/ManageJobsTest.php b/tests/Feature/ManageJobsTest.php index 6ff9325..e3beefb 100644 --- a/tests/Feature/ManageJobsTest.php +++ b/tests/Feature/ManageJobsTest.php @@ -224,13 +224,17 @@ class ManageJobsTest extends TestCase $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); + $newJob = Job::where('name', 'This is a Task')->first(); + $this->seeRouteIs('jobs.edit', $newJob); + $this->seeInDatabase('jobs', [ + 'id' => $newJob->id, 'name' => 'This is a Task', 'description' => 'Task description.', ]); - $this->dontSeeInDatabase('tasks', [ 'id' => $task->id, ]);