diff --git a/app/Http/Controllers/Issues/PicController.php b/app/Http/Controllers/Issues/PicController.php
new file mode 100644
index 0000000..ff37216
--- /dev/null
+++ b/app/Http/Controllers/Issues/PicController.php
@@ -0,0 +1,23 @@
+validate([
+ 'pic_id' => 'nullable|exists:users,id',
+ ]);
+ $issue->pic_id = $picData['pic_id'];
+ $issue->save();
+
+ flash(__('issue.pic_assigned'), 'success');
+
+ return back();
+ }
+}
diff --git a/app/Http/Controllers/Projects/IssueController.php b/app/Http/Controllers/Projects/IssueController.php
index e13d772..5d7f8b3 100644
--- a/app/Http/Controllers/Projects/IssueController.php
+++ b/app/Http/Controllers/Projects/IssueController.php
@@ -2,6 +2,7 @@
namespace App\Http\Controllers\Projects;
+use App\Entities\Users\User;
use Illuminate\Http\Request;
use App\Entities\Projects\Issue;
use App\Entities\Projects\Project;
@@ -40,7 +41,9 @@ class IssueController extends Controller
public function show(Project $project, Issue $issue)
{
- return view('projects.issues.show', compact('project', 'issue'));
+ $users = User::all();
+
+ return view('projects.issues.show', compact('project', 'issue', 'users'));
}
public function edit(Project $project, Issue $issue)
diff --git a/database/migrations/2019_03_03_210017_create_issues_table.php b/database/migrations/2019_03_03_210017_create_issues_table.php
index f67ddbf..789511d 100644
--- a/database/migrations/2019_03_03_210017_create_issues_table.php
+++ b/database/migrations/2019_03_03_210017_create_issues_table.php
@@ -19,6 +19,7 @@ class CreateIssuesTable extends Migration
$table->string('title', 60);
$table->string('body');
$table->unsignedInteger('creator_id');
+ $table->unsignedInteger('pic_id')->nullable();
$table->timestamps();
});
}
diff --git a/resources/views/projects/issues/show.blade.php b/resources/views/projects/issues/show.blade.php
index 4a8f716..b6dd413 100755
--- a/resources/views/projects/issues/show.blade.php
+++ b/resources/views/projects/issues/show.blade.php
@@ -5,7 +5,7 @@
@section('content-project')
-
+
{{ __('issue.detail') }}
@@ -19,5 +19,11 @@
+
+ {{ Form::model($issue, ['route' => ['issues.pic.update', $issue], 'method' => 'patch']) }}
+ {!! FormField::select('pic_id', $users, ['label' => __('issue.assign_pic')]) !!}
+ {{ Form::submit(__('issue.assign_pic'), ['class' => 'btn btn-success']) }}
+ {{ Form::close() }}
+
@endsection
diff --git a/routes/web.php b/routes/web.php
index e7922bc..4fd2e73 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -1,4 +1,7 @@
runningUnitTests()) {
+ auth()->loginUsingId(1);
+}
require __DIR__.'/web/pages.php';
require __DIR__.'/web/users.php';
diff --git a/routes/web/projects.php b/routes/web/projects.php
index 167a291..a04aab7 100644
--- a/routes/web/projects.php
+++ b/routes/web/projects.php
@@ -100,3 +100,8 @@ Route::group(['middleware' => ['auth']], function () {
Route::patch('jobs/{job}/comments/{comment}', 'Jobs\CommentsController@update')->name('jobs.comments.update');
Route::delete('jobs/{job}/comments/{comment}', 'Jobs\CommentsController@destroy')->name('jobs.comments.destroy');
});
+
+/**
+ * Issue PIC Routes
+ */
+Route::patch('issues/{issue}/assign_pic', 'Issues\PicController@update')->name('issues.pic.update');
diff --git a/tests/Feature/Projects/ProjectIssuesTest.php b/tests/Feature/Projects/ProjectIssuesTest.php
index 43a6022..48dcbe0 100644
--- a/tests/Feature/Projects/ProjectIssuesTest.php
+++ b/tests/Feature/Projects/ProjectIssuesTest.php
@@ -126,4 +126,24 @@ class ProjectIssuesTest extends TestCase
'id' => $issue->id,
]);
}
+
+ /** @test */
+ public function user_can_assign_someone_to_an_issue_as_pic()
+ {
+ $this->adminUserSigningIn();
+ $worker = $this->createUser('worker');
+ $issue = factory(Issue::class)->create();
+
+ $this->visitRoute('projects.issues.show', [$issue->project, $issue]);
+ $this->submitForm(__('issue.assign_pic'), [
+ 'pic_id' => $worker->id,
+ ]);
+ $this->seeRouteIs('projects.issues.show', [$issue->project, $issue]);
+ $this->seeText(__('issue.pic_assigned'));
+
+ $this->seeInDatabase('issues', [
+ 'id' => $issue->id,
+ 'pic_id' => $worker->id,
+ ]);
+ }
}