diff --git a/app/Http/Controllers/PhaseController.php b/app/Http/Controllers/PhaseController.php index 1230f2a2a648d784582f229227d425e33a0ed79f..b110bd6abcb91698d435c9efb9a75f4df997a6f1 100644 --- a/app/Http/Controllers/PhaseController.php +++ b/app/Http/Controllers/PhaseController.php @@ -42,6 +42,8 @@ class PhaseController extends Controller $view = PhaseController::phase03View($project, $phaseNumber, $userRole); } else if ($phaseNumber == 4) { $view = PhaseController::phase04View($project, $phaseNumber, $userRole); + } else if ($phaseNumber == 5) { + $view = PhaseController::phase05View($project, $phaseNumber, $userRole); } else { abort(404); } @@ -374,6 +376,64 @@ class PhaseController extends Controller return redirect()->route('project', ['id' => $request->projectId])->with('msg', 'Phase 4 submitted successfully'); } + /** + * Open view fifth phase. + */ + public function phase05View($project, $phaseNumber, $userRole) + { + if ($userRole == 1) { + $members = DB::table('userprojects')->where('idProject', $project->id)->where('role', 2)->get(); + + $users = []; + foreach($members as $member) { + $user = DB::table('users')->where('id', $member->idUser)->first(); + + $status = "Done"; + if ($member->phase == 5) { + $status = "WIP"; + } + + $userWithStatus = array( + "name" => $user->name, + "status" => $status + ); + + $users[] = $userWithStatus; + } + + return view('phase.phase05', ['project' => $project, 'phaseNumber' => $phaseNumber, 'phaseName' => 'Submit Weight of Criteria', 'role' => $userRole, 'users' => $users]); + } else { + $requirements = DB::table('requirements')->where('idProject', $project->id)->get(); + + $criterias = DB::table('criterias')->where('idProject', $project->id)->where('used', 1)->get(); + + return view('phase.phase05', ['project' => $project, 'phaseNumber' => $phaseNumber, 'phaseName' => 'Submit Weight of Criteria', 'role' => $userRole, 'requirements' => $requirements, 'criterias' => $criterias]); + } + } + + /** + * Submit fifth phase. + */ + public function phase05Submit(Request $request) + { + $requirements = DB::table('requirements')->where('idProject', $request->projectId)->get(); + + for ($i = 1; $i <= count($requirements); $i++) { + for ($j = 1; $j <= 5; $j++) { + DB::table('userscores')->updateOrInsert([ + 'idUser' => Auth::id(), + 'idRequirement' => $request->input('requirement-' . $i . '-' . $j), + 'idCriteria' => $request->input('criteria-' . $i . '-' . $j), + 'score' => $request->input('score-' . $i . '-' . $j) + ]); + } + } + + DB::table('userprojects')->where('idUser', Auth::id())->increment('phase'); + + return redirect()->route('project', ['id' => $request->projectId])->with('msg', 'Phase 5 submitted successfully'); + } + /** * Calculate criteria votes from second phase. */ diff --git a/database/migrations/2021_05_19_035127_create_userscores_table.php b/database/migrations/2021_05_19_035127_create_userscores_table.php new file mode 100644 index 0000000000000000000000000000000000000000..d486edcff9e0a533a0df4f3926152ef32663d491 --- /dev/null +++ b/database/migrations/2021_05_19_035127_create_userscores_table.php @@ -0,0 +1,35 @@ +<?php + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; + +class CreateUserscoresTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('userscores', function (Blueprint $table) { + $table->id(); + $table->integer('idUser'); + $table->integer('idRequirement'); + $table->integer('idCriteria'); + $table->integer('score'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('userscores'); + } +} diff --git a/database/migrations/2021_05_19_035530_create_scores_table.php b/database/migrations/2021_05_19_035530_create_scores_table.php new file mode 100644 index 0000000000000000000000000000000000000000..baecb65189d17fab993eb94d0a97a19607fc8ac6 --- /dev/null +++ b/database/migrations/2021_05_19_035530_create_scores_table.php @@ -0,0 +1,35 @@ +<?php + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; + +class CreateScoresTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('scores', function (Blueprint $table) { + $table->id(); + $table->integer('idRequirement'); + $table->integer('idCriteria'); + $table->integer('score'); + $table->integer('status'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('scores'); + } +} diff --git a/database/migrations/2021_05_19_040332_create_scorevotes_table.php b/database/migrations/2021_05_19_040332_create_scorevotes_table.php new file mode 100644 index 0000000000000000000000000000000000000000..d831a625e5960d82d07ad08899bcbd7a8258ff1e --- /dev/null +++ b/database/migrations/2021_05_19_040332_create_scorevotes_table.php @@ -0,0 +1,34 @@ +<?php + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; + +class CreateScorevotesTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('scorevotes', function (Blueprint $table) { + $table->id(); + $table->integer('idUser'); + $table->integer('idScore'); + $table->integer('vote'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('scorevotes'); + } +} diff --git a/resources/views/phase/phase05.blade.php b/resources/views/phase/phase05.blade.php new file mode 100644 index 0000000000000000000000000000000000000000..33df0d7117a95311b54ab04df5c3938af05c663b --- /dev/null +++ b/resources/views/phase/phase05.blade.php @@ -0,0 +1,93 @@ +@extends('phase') + +@section('childphase') + @if($role == 1) + <!-- ADMIN VIEW --> + <div class="col-md-12"> + <div class="card mt-4"> + <div class="card-header font-weight-bold bg-primary text-white">Phase {{ $phaseNumber }}: {{ $phaseName }}</div> + + <div class="card-body"> + <table class="table"> + <thead> + <tr> + <th scope="col">#</th> + <th scope="col">Name</th> + <th scope="col">Status</th> + </tr> + </thead> + <tbody> + @foreach($users as $index => $user) + <tr> + <th scope="row" class="align-middle">{{ $index + 1 }}</th> + <td class="align-middle">{{ $user['name'] }}</td> + <td class="align-middle">{{ $user['status'] }}</td> + </tr> + @endforeach + </tbody> + </table> + </div> + <div class="card-footer bg-white"> + <a class="btn btn-secondary" href="/project/{{ $project->id }}" role="button">Back to project page</a> + </div> + </div> + </div> + @else + <!-- MEMBER VIEW --> + <div class="col-md-12"> + <div class="card mt-4"> + <form action="/project/phase/05" method="post"> + {{ csrf_field() }} + <div class="card-header font-weight-bold bg-primary text-white">Phase {{ $phaseNumber }}: {{ $phaseName }}</div> + + <div class="card-body"> + <b>Instruction:</b> <br> + Submit the score for each requirement on each criteria<br> + Rules: + <ul> + <li>0: requirement <b>does not affect</b> the criteria </li> + <li>1: requirement <b>have little effect</b> on the criteria </li> + <li>2: requirement <b>have moderate effect</b> on the criteria </li> + <li>3: requirement <b>have major effect</b> on the criteria </li> + <ul> + </div> + + <div class="card-body"> + <table class="table"> + <thead> + <tr> + <th scope="col">#</th> + <th scope="col">Requirement</th> + @foreach($criterias as $criteria) + <th scope="col">{{$criteria->name}}</th> + @endforeach + </tr> + </thead> + <tbody> + @foreach($requirements as $indexR => $requirement) + <tr> + <th scope="row" class="align-middle">R{{ $requirement->number + 1 }}</th> + <td class="align-middle">{{ $requirement->name }}</td> + @foreach($criterias as $indexC => $criteria) + <td class="align-middle"> + <input type="hidden" name="requirement-{{ $indexR + 1 }}-{{ $indexC + 1 }}" value="{{ $requirement->id }}"> + <input type="hidden" name="criteria-{{ $indexR + 1 }}-{{ $indexC + 1 }}" value="{{ $criteria->id }}"> + <input type="number" class="form-control" required="required" id="score-{{ $indexR + 1 }}-{{ $indexC + 1 }}" name="score-{{ $indexR + 1 }}-{{ $indexC + 1 }}" min="0" max="3"> + </td> + @endforeach + </tr> + @endforeach + </tbody> + </table> + <input type="hidden" id="projectId" name="projectId" value="{{ $project->id }}"> + </div> + + <div class="card-footer bg-white"> + <a class="btn btn-secondary" href="/project/{{ $project->id }}" role="button">Back to project page</a> + <button type="submit" class="btn btn-success float-right">Submit</button> + </div> + </form> + </div> + </div> + @endif +@endsection diff --git a/routes/web.php b/routes/web.php index 04854e45d10a154ce2b9f83e617941c4afcab7d0..650ab33a1468a179054ec3f1500c3992f50a5887 100644 --- a/routes/web.php +++ b/routes/web.php @@ -33,6 +33,7 @@ Route::post('/project/phase/01', [PhaseController::class, 'phase01Submit']); Route::post('/project/phase/02', [PhaseController::class, 'phase02Submit']); Route::post('/project/phase/03', [PhaseController::class, 'phase03Submit']); Route::post('/project/phase/04', [PhaseController::class, 'phase04Submit']); +Route::post('/project/phase/05', [PhaseController::class, 'phase05Submit']); Route::post('/requirement/add', [RequirementController::class, 'add']); // Redirect