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/composer.json b/composer.json index 281fc80..c2ca83f 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,7 @@ "fideloper/proxy": "^4.0", "laracasts/presenter": "^0.2.1", "laravel/framework": "^6.0", - "luthfi/formfield": "^1.0", + "luthfi/formfield": "1.*", "riskihajar/terbilang": "^1.2", "spatie/laravel-fractal": "^5.0" }, diff --git a/composer.lock b/composer.lock index 4d75d30..6dbe629 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "df83c9097f4fde630adf7fadef8312ef", + "content-hash": "331f543b74d05d83017acb6e7493bd53", "packages": [ { "name": "backup-manager/backup-manager", @@ -888,21 +888,21 @@ }, { "name": "luthfi/formfield", - "version": "1.x-dev", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/nafiesl/FormField.git", - "reference": "f869f8804da32d41c511e9b77e5f145fc94be171" + "reference": "b1dc8d222901f11759a70f34a01a89d94fa67b68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nafiesl/FormField/zipball/f869f8804da32d41c511e9b77e5f145fc94be171", - "reference": "f869f8804da32d41c511e9b77e5f145fc94be171", + "url": "https://api.github.com/repos/nafiesl/FormField/zipball/b1dc8d222901f11759a70f34a01a89d94fa67b68", + "reference": "b1dc8d222901f11759a70f34a01a89d94fa67b68", "shasum": "" }, "require": { - "laravelcollective/html": "5.3.* || 5.4.* || 5.5.* || 5.6.* || 5.7.* || 5.8.* || 6.0.*", - "php": ">=5.6.4" + "laravelcollective/html": ">=5.3", + "php": ">=7.2" }, "require-dev": { "orchestra/testbench": ">=3.0 <3.8" @@ -936,7 +936,7 @@ } ], "description": "Laravel Form Field the extension of Laravelcollective Form for Laravel 5.3 and newer with Twitter Bootstrap 3", - "time": "2019-09-04T11:37:35+00:00" + "time": "2020-05-22T15:27:39+00:00" }, { "name": "monolog/monolog", @@ -4250,6 +4250,7 @@ "keywords": [ "tokenizer" ], + "abandoned": true, "time": "2019-09-17T06:23:10+00:00" }, { @@ -5062,5 +5063,6 @@ "platform": { "php": "^7.2" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "1.1.0" } diff --git a/resources/lang/de/task.php b/resources/lang/de/task.php index d63ab69..390bff1 100644 --- a/resources/lang/de/task.php +++ b/resources/lang/de/task.php @@ -21,6 +21,7 @@ return [ 'delete' => 'Vorgang löschen', 'deleted' => 'Vorgan wurde gelöscht.', 'undeleted' => 'Vorgang nicht gelöscht.', + 'set_done' => 'Set done', // Attributes 'name' => 'Vorgang Name', diff --git a/resources/lang/en/task.php b/resources/lang/en/task.php index b1f1697..3178a51 100644 --- a/resources/lang/en/task.php +++ b/resources/lang/en/task.php @@ -21,6 +21,7 @@ return [ 'delete' => 'Delete Task', 'deleted' => 'Task has been deleted.', 'undeleted' => 'Task not deleted.', + 'set_done' => 'Set done', // Attributes 'name' => 'Task Name', diff --git a/resources/lang/id/task.php b/resources/lang/id/task.php index 69a9d12..142f7a0 100644 --- a/resources/lang/id/task.php +++ b/resources/lang/id/task.php @@ -21,6 +21,7 @@ return [ 'delete' => 'Hapus Task', 'deleted' => 'Hapus data Task telah berhasil.', 'undeleted' => 'Data Task gagal dihapus.', + 'set_done' => 'Set Selesai', 'set_as_job' => 'Set Menjadi Job', 'set_as_job_confirm' => 'Anda yakin mengubah task ini menjadi sebuah Job?', diff --git a/resources/views/jobs/partials/job-tasks.blade.php b/resources/views/jobs/partials/job-tasks.blade.php index 20fe1d1..108d511 100644 --- a/resources/views/jobs/partials/job-tasks.blade.php +++ b/resources/views/jobs/partials/job-tasks.blade.php @@ -31,7 +31,22 @@
{{ $task->name }}
{!! nl2br($task->description) !!}
- {{ $task->progress }} % + + {{ $task->progress }} % + + @can('update', $task) + @if ($task->progress < 100) + {!! FormField::formButton(['route' => ['tasks.set_done', $task], 'method' => 'patch'], + __('task.set_done'), + ['class' => 'btn btn-success btn-xs', 'id' => $task->id.'-set_task_done'], + [ + 'task_id' => $task->id, + 'job_id' => $task->job_id, + ] + ) !!} + @endif + @endcan + @can('update', $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..8e53157 100644 --- a/tests/Feature/ManageTasksTest.php +++ b/tests/Feature/ManageTasksTest.php @@ -82,4 +82,23 @@ 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->dontSeeElement('button', ['id' => $task->id.'-set_task_done']); + $this->seeInDatabase('tasks', [ + 'id' => $task->id, + 'progress' => 100, + ]); + } }