diff --git a/app/Http/Controllers/Projects/TasksController.php b/app/Http/Controllers/Projects/TasksController.php index 3157c77..3d89883 100755 --- a/app/Http/Controllers/Projects/TasksController.php +++ b/app/Http/Controllers/Projects/TasksController.php @@ -95,4 +95,14 @@ class TasksController extends Controller return redirect()->route('jobs.edit', $job); } + + public function setDone(Task $task) + { + $task->progress = 100; + $task->save(); + + flash(__('task.updated'), 'success'); + + return redirect()->route('jobs.show', $task->job); + } } diff --git a/resources/views/jobs/partials/job-tasks.blade.php b/resources/views/jobs/partials/job-tasks.blade.php index 20fe1d1..3d0e986 100644 --- a/resources/views/jobs/partials/job-tasks.blade.php +++ b/resources/views/jobs/partials/job-tasks.blade.php @@ -44,6 +44,14 @@ 'id' => $task->id . '-tasks-edit', 'icon' => 'edit' ]) !!} + {!! FormField::formButton(['route' => ['tasks.set_done', $task], 'method' => 'patch'], + __('task.set_as_done'), + ['class' => 'btn btn-success', 'id' => $task->id.'-set_task_done'], + [ + 'task_id' => $task->id, + 'job_id' => $task->job_id, + ] + ) !!} @endcan @can('delete', $task) {!! html_link_to_route('jobs.show', '', [ diff --git a/routes/web/projects.php b/routes/web/projects.php index e31823c..45aefba 100644 --- a/routes/web/projects.php +++ b/routes/web/projects.php @@ -62,6 +62,7 @@ Route::group(['middleware' => ['auth'], 'namespace' => 'Projects'], function () Route::get('jobs/{job}/tasks/create', ['as' => 'tasks.create', 'uses' => 'TasksController@create']); Route::post('jobs/{job}/tasks', ['as' => 'tasks.store', 'uses' => 'TasksController@store']); Route::patch('tasks/{task}', ['as' => 'tasks.update', 'uses' => 'TasksController@update']); + Route::patch('tasks/{task}/set_done', ['as' => 'tasks.set_done', 'uses' => 'TasksController@setDone']); 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']); diff --git a/tests/Feature/ManageTasksTest.php b/tests/Feature/ManageTasksTest.php index ac6cd52..d580d4a 100644 --- a/tests/Feature/ManageTasksTest.php +++ b/tests/Feature/ManageTasksTest.php @@ -82,4 +82,22 @@ class ManageTasksTest extends TestCase $this->seePageIs(route('jobs.show', $job->id)); $this->see(trans('task.deleted')); } + + /** @test */ + public function admin_can_set_a_task_as_done() + { + $user = $this->adminUserSigningIn(); + $job = factory(Job::class)->create(['worker_id' => $user->id]); + $task = factory(Task::class)->create(['job_id' => $job->id, 'progress' => 0]); + + $this->visit(route('jobs.show', $job->id)); + $this->press($task->id.'-set_task_done'); + + $this->seePageIs(route('jobs.show', $job->id)); + $this->see(trans('task.updated')); + $this->seeInDatabase('tasks', [ + 'id' => $task->id, + 'progress' => 100, + ]); + } }