diff --git a/app/Http/Controllers/PhaseController.php b/app/Http/Controllers/PhaseController.php index 076b4a36df3dc9f91aa69a8058943a8cf42d228a..09356bd1d8f42973d7804b9b909616d8cf2d1cfd 100644 --- a/app/Http/Controllers/PhaseController.php +++ b/app/Http/Controllers/PhaseController.php @@ -46,6 +46,8 @@ class PhaseController extends Controller $view = PhaseController::phase05View($project, $phaseNumber, $userRole); } else if ($phaseNumber == 6) { $view = PhaseController::phase06View($project, $phaseNumber, $userRole); + } else if ($phaseNumber == 7) { + $view = PhaseController::phase07View($project, $phaseNumber, $userRole); } else { abort(404); } @@ -69,6 +71,8 @@ class PhaseController extends Controller PhaseController::determineScorestatus($request->projectId); } else if ($currentPhaseNumber == 6) { PhaseController::calculateScoreStatusVotes($request->projectId); + } else if ($currentPhaseNumber == 7) { + PhaseController::calculateRequirementScore($request->projectId); } DB::table('projects')->where('id', $request->projectId)->increment('phase'); @@ -523,6 +527,48 @@ class PhaseController extends Controller return redirect()->route('project', ['id' => $request->projectId])->with('msg', 'Phase 6 submitted successfully'); } + /** + * Open view seventh phase. + */ + public function phase07View($project, $phaseNumber, $userRole) + { + $requirements = DB::table('requirements')->where('idProject', $project->id)->get(); + + $criterias = DB::table('criterias')->where('idProject', $project->id)->where('used', 1)->get(); + + $scores = []; + $isAllApproved = true; + + foreach($requirements as $requirement) { + foreach($criterias as $criteria) { + $score = DB::table('scores')->where('idRequirement', $requirement->id)->where('idCriteria', $criteria->id)->first(); + + if ($score->status == 0) { + $isAllApproved = false; + } + + $scores[] = $score; + } + } + + return view('phase.phase07', ['project' => $project, 'phaseNumber' => $phaseNumber, 'phaseName' => 'Discuss Unapproved Score', 'role' => $userRole, 'requirements' => $requirements, 'criterias' => $criterias, 'scores' => $scores, 'isAllApproved' => $isAllApproved]); + } + + /** + * Submit seventh phase. + */ + public function phase07Submit(Request $request) + { + foreach($request->scoreId as $index => $id) { + $affected = DB::table('scores')->where('id', $id)->update(['status' => 1]); + $affected = DB::table('scores')->where('id', $id)->update(['score' => $request->scoreVal[$index]]); + } + + DB::table('userprojects')->where('idUser', Auth::id())->increment('phase'); + + return redirect()->route('project', ['id' => $request->projectId])->with('msg', 'Phase 7 submitted successfully'); + } + /** * Calculate criteria votes from second phase. */ @@ -727,4 +773,27 @@ class PhaseController extends Controller } } } + + /** + * Calculate requirement score from seventh phase. + */ + public function calculateRequirementScore($projectId) + { + $requirements = DB::table('requirements')->where('idProject', $projectId)->get(); + + $criterias = DB::table('criterias')->where('idProject', $projectId)->where('used', 1)->get(); + + foreach($requirements as $requirement) { + + $requirementScore = 0; + + foreach($criterias as $criteria) { + $criteriaScore = DB::table('scores')->where('idRequirement', $requirement->id)->where('idCriteria', $criteria->id)->first(); + + $requirementScore += $criteriaScore->score * $criteria->weight; + } + + $affected = DB::table('requirements')->where('id', $requirement->id)->update(['score' => $requirementScore]); + } + } } diff --git a/resources/views/phase/phase07.blade.php b/resources/views/phase/phase07.blade.php new file mode 100644 index 0000000000000000000000000000000000000000..826ffa55945ecfbfea285053591a7a644b20afef --- /dev/null +++ b/resources/views/phase/phase07.blade.php @@ -0,0 +1,89 @@ +@extends('phase') + +@section('childphase') + <div class="col-md-12"> + <div class="card mt-4"> + <form action="/project/phase/07" 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> + Moderator fill new score from discussion result + </div> + + <div class="card-body"> + <b>Score results:</b> + <table class="table"> + <thead> + <tr> + <th scope="col">#</th> + <th scope="col">Requirement</th> + @foreach($criterias as $criteria) + <th scope="col">{{$criteria->name}} ({{$criteria->weight}})</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) + @foreach($scores as $score) + @if (($score->idRequirement == $requirement->id) && ($score->idCriteria == $criteria->id)) + <td class="align-middle {{ $score->status == 1 ? 'table-success' : '' }}">{{ $score->score }}</td> + @endif + @endforeach + @endforeach + </tr> + @endforeach + </tbody> + </table> + + @if (($role == 1) && (!$isAllApproved)) + <b>Fill unapproved score:</b> + <table class="table"> + <thead> + <tr> + <th scope="col">#</th> + <th scope="col">Requirement</th> + <th scope="col">Criteria</th> + <th scope="col">New Score</th> + </tr> + </thead> + <tbody> + @foreach($requirements as $indexR => $requirement) + @foreach($criterias as $indexC => $criteria) + @foreach($scores as $score) + @if (($score->idRequirement == $requirement->id) && ($score->idCriteria == $criteria->id) && ($score->status == 0)) + <tr> + <th scope="row" class="align-middle">R{{ $requirement->number + 1 }}</th> + <td class="align-middle">{{ $requirement->name }}</td> + <td class="align-middle">{{ $criteria->name }} ({{ $criteria->weight }})</td> + <td class="align-middle"> + <input type="hidden" name="scoreId[]" value="{{ $score->id }}"> + <input type="number" class="form-control" required="required" name="scoreVal[]" min="0" max="3" step="0.01"> + </td> + </tr> + @endif + @endforeach + @endforeach + @endforeach + </tbody> + </table> + @endif + + <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> + @if (($role == 1) && (!$isAllApproved)) + <button type="submit" class="btn btn-success float-right">Submit</button> + @endif + </div> + </form> + </div> + </div> +@endsection diff --git a/routes/web.php b/routes/web.php index 00f408a4df2b291fd48dbb07dc136a1283358b47..d4b6260b7c6e94480de9de445a7d3b77770abe53 100644 --- a/routes/web.php +++ b/routes/web.php @@ -35,6 +35,7 @@ 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('/project/phase/06', [PhaseController::class, 'phase06Submit']); +Route::post('/project/phase/07', [PhaseController::class, 'phase07Submit']); Route::post('/requirement/add', [RequirementController::class, 'add']); // Redirect