From 08ae6d037455569e0a36d867288c0951b5a64f6a Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Mon, 18 Mar 2019 23:34:23 +0800 Subject: [PATCH 1/6] Every issue has priority level --- app/Entities/Projects/Issue.php | 5 +++ app/Entities/Projects/Priority.php | 36 ++++++++++++++++++++++ database/factories/IssueFactory.php | 11 ++++--- .../2019_03_03_210017_create_issues_table.php | 1 + resources/lang/de/issue.php | 5 +++ resources/lang/en/issue.php | 5 +++ resources/lang/id/issue.php | 5 +++ tests/Unit/Models/IssueTest.php | 8 +++++ 8 files changed, 71 insertions(+), 5 deletions(-) create mode 100644 app/Entities/Projects/Priority.php diff --git a/app/Entities/Projects/Issue.php b/app/Entities/Projects/Issue.php index b8cf43d..535276f 100644 --- a/app/Entities/Projects/Issue.php +++ b/app/Entities/Projects/Issue.php @@ -25,6 +25,11 @@ class Issue extends Model return $this->belongsTo(User::class); } + public function getPriorityAttribute() + { + return Priority::getNameById($this->priority_id); + } + public function getStatusAttribute() { return IssueStatus::getNameById($this->status_id); diff --git a/app/Entities/Projects/Priority.php b/app/Entities/Projects/Priority.php new file mode 100644 index 0000000..2e61f52 --- /dev/null +++ b/app/Entities/Projects/Priority.php @@ -0,0 +1,36 @@ + 'minor', + 2 => 'major', + 3 => 'critical', + ]; + + protected static $colors = [ + 0 => 'yellow', + 1 => 'info', + 2 => 'warning', + 3 => 'danger', + ]; + + public static function getNameById($singleId) + { + return trans('issue.'.static::getById($singleId)); + } + + public static function toArray() + { + $lists = []; + foreach (static::$lists as $key => $value) { + $lists[$key] = trans('issue.'.$value); + } + + return $lists; + } +} diff --git a/database/factories/IssueFactory.php b/database/factories/IssueFactory.php index 5c43722..2941f50 100644 --- a/database/factories/IssueFactory.php +++ b/database/factories/IssueFactory.php @@ -7,14 +7,15 @@ use App\Entities\Projects\Project; $factory->define(Issue::class, function (Faker $faker) { return [ - 'project_id' => function () { + 'project_id' => function () { return factory(Project::class)->create()->id; }, - 'title' => $faker->words(3, true), - 'body' => $faker->sentences(3, true), - 'creator_id' => function () { + 'title' => $faker->words(3, true), + 'body' => $faker->sentences(3, true), + 'creator_id' => function () { return factory(User::class)->create()->id; }, - 'status_id' => 0, + 'status_id' => 0, + 'priority_id' => 1, ]; }); 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 520a386..ea55458 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->unsignedTinyInteger('priority_id'); $table->unsignedInteger('pic_id')->nullable(); $table->unsignedTinyInteger('status_id')->default(0); $table->timestamps(); diff --git a/resources/lang/de/issue.php b/resources/lang/de/issue.php index 9def5f9..2d81052 100644 --- a/resources/lang/de/issue.php +++ b/resources/lang/de/issue.php @@ -41,6 +41,11 @@ return [ 'pic' => 'Issue PIC', 'creator' => 'Issue Creator', + // Priority + 'minor' => 'Minor', + 'major' => 'Major', + 'critical' => 'Critical', + // Statuses 'open' => 'Open', 'resolved' => 'Resolved', diff --git a/resources/lang/en/issue.php b/resources/lang/en/issue.php index 9def5f9..2d81052 100644 --- a/resources/lang/en/issue.php +++ b/resources/lang/en/issue.php @@ -41,6 +41,11 @@ return [ 'pic' => 'Issue PIC', 'creator' => 'Issue Creator', + // Priority + 'minor' => 'Minor', + 'major' => 'Major', + 'critical' => 'Critical', + // Statuses 'open' => 'Open', 'resolved' => 'Resolved', diff --git a/resources/lang/id/issue.php b/resources/lang/id/issue.php index 8948b23..3946ac5 100644 --- a/resources/lang/id/issue.php +++ b/resources/lang/id/issue.php @@ -41,6 +41,11 @@ return [ 'pic' => 'PIC Issue', 'creator' => 'Pembuat Issue', + // Priority + 'minor' => 'Minor', + 'major' => 'Major', + 'critical' => 'Critical', + // Statuses 'open' => 'Open', 'resolved' => 'Selesai', diff --git a/tests/Unit/Models/IssueTest.php b/tests/Unit/Models/IssueTest.php index f0a6b4e..1c61152 100644 --- a/tests/Unit/Models/IssueTest.php +++ b/tests/Unit/Models/IssueTest.php @@ -63,4 +63,12 @@ class IssueTest extends TestCase $this->assertEquals(''.$issue->status.'', $issue->status_label); } + + /** @test */ + public function an_issue_has_priority_attribute() + { + $issue = factory(Issue::class)->make(); + + $this->assertEquals(__('issue.minor'), $issue->priority); + } } From 7b30caff8eaec92770c7e856660c2ff4089fa010 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Tue, 19 Mar 2019 22:23:11 +0800 Subject: [PATCH 2/6] User can create issue with selected priority --- app/Entities/Projects/Issue.php | 4 +++- app/Entities/Projects/Priority.php | 1 - app/Http/Controllers/Projects/IssueController.php | 22 +++++++++++++--------- resources/lang/en/issue.php | 1 + resources/views/projects/issues/create.blade.php | 1 + tests/Feature/Projects/ProjectIssuesTest.php | 18 ++++++++++-------- 6 files changed, 28 insertions(+), 19 deletions(-) diff --git a/app/Entities/Projects/Issue.php b/app/Entities/Projects/Issue.php index 535276f..1e69c8b 100644 --- a/app/Entities/Projects/Issue.php +++ b/app/Entities/Projects/Issue.php @@ -8,7 +8,9 @@ use Illuminate\Database\Eloquent\Model; class Issue extends Model { - protected $fillable = ['project_id', 'title', 'body', 'pic_id', 'creator_id']; + protected $fillable = [ + 'project_id', 'title', 'body', 'priority_id', 'pic_id', 'creator_id', + ]; public function project() { diff --git a/app/Entities/Projects/Priority.php b/app/Entities/Projects/Priority.php index 2e61f52..da953f1 100644 --- a/app/Entities/Projects/Priority.php +++ b/app/Entities/Projects/Priority.php @@ -13,7 +13,6 @@ class Priority extends ReferenceAbstract ]; protected static $colors = [ - 0 => 'yellow', 1 => 'info', 2 => 'warning', 3 => 'danger', diff --git a/app/Http/Controllers/Projects/IssueController.php b/app/Http/Controllers/Projects/IssueController.php index 86fb337..09ea564 100644 --- a/app/Http/Controllers/Projects/IssueController.php +++ b/app/Http/Controllers/Projects/IssueController.php @@ -6,6 +6,7 @@ use App\Entities\Users\User; use Illuminate\Http\Request; use App\Entities\Projects\Issue; use App\Entities\Projects\Project; +use App\Entities\Projects\Priority; use App\Http\Controllers\Controller; use App\Entities\Projects\IssueStatus; @@ -21,23 +22,26 @@ class IssueController extends Controller public function create(Project $project) { $users = User::pluck('name', 'id'); + $priorities = Priority::toArray(); - return view('projects.issues.create', compact('project', 'users')); + return view('projects.issues.create', compact('project', 'users', 'priorities')); } public function store(Request $request, Project $project) { $issueData = $request->validate([ - 'title' => 'required|max:60', - 'body' => 'required|max:255', - 'pic_id' => 'nullable|exists:users,id', + 'title' => 'required|max:60', + 'body' => 'required|max:255', + 'priority_id' => 'required|in:1,2,3', + 'pic_id' => 'nullable|exists:users,id', ]); Issue::create([ - 'project_id' => $project->id, - 'creator_id' => auth()->id(), - 'title' => $issueData['title'], - 'body' => $issueData['body'], - 'pic_id' => $issueData['pic_id'], + 'project_id' => $project->id, + 'creator_id' => auth()->id(), + 'title' => $issueData['title'], + 'body' => $issueData['body'], + 'priority_id' => $issueData['priority_id'], + 'pic_id' => $issueData['pic_id'], ]); flash(__('issue.created'), 'success'); diff --git a/resources/lang/en/issue.php b/resources/lang/en/issue.php index 2d81052..1be2737 100644 --- a/resources/lang/en/issue.php +++ b/resources/lang/en/issue.php @@ -42,6 +42,7 @@ return [ 'creator' => 'Issue Creator', // Priority + 'priority' => 'Priority', 'minor' => 'Minor', 'major' => 'Major', 'critical' => 'Critical', diff --git a/resources/views/projects/issues/create.blade.php b/resources/views/projects/issues/create.blade.php index c7a7da7..1422715 100755 --- a/resources/views/projects/issues/create.blade.php +++ b/resources/views/projects/issues/create.blade.php @@ -18,6 +18,7 @@
{!! FormField::text('title', ['label' => __('issue.title')]) !!} {!! FormField::textarea('body', ['label' => __('issue.body')]) !!} + {!! FormField::radios('priority_id', $priorities, ['label' => __('issue.priority'), 'placeholder' => false]) !!} {!! FormField::select('pic_id', $users, ['label' => __('issue.pic')]) !!}
From 3697dae4a5919ba0da7edaff5cdb88df421bfa34 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Tue, 19 Mar 2019 22:38:36 +0800 Subject: [PATCH 6/6] Move issue listing view to projects/issues directory --- app/Http/Controllers/Projects/IssueController.php | 2 +- resources/views/projects/{issues.blade.php => issues/index.blade.php} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename resources/views/projects/{issues.blade.php => issues/index.blade.php} (100%) diff --git a/app/Http/Controllers/Projects/IssueController.php b/app/Http/Controllers/Projects/IssueController.php index 247143e..1a0c603 100644 --- a/app/Http/Controllers/Projects/IssueController.php +++ b/app/Http/Controllers/Projects/IssueController.php @@ -16,7 +16,7 @@ class IssueController extends Controller { $issues = $project->issues()->with(['pic', 'creator'])->get(); - return view('projects.issues', compact('project', 'issues')); + return view('projects.issues.index', compact('project', 'issues')); } public function create(Project $project) diff --git a/resources/views/projects/issues.blade.php b/resources/views/projects/issues/index.blade.php similarity index 100% rename from resources/views/projects/issues.blade.php rename to resources/views/projects/issues/index.blade.php