diff --git a/app/Http/Controllers/PhaseController.php b/app/Http/Controllers/PhaseController.php index b110bd6abcb91698d435c9efb9a75f4df997a6f1..a76ca2b6fde9cb0d4688fe7bb578a40a02b75a40 100644 --- a/app/Http/Controllers/PhaseController.php +++ b/app/Http/Controllers/PhaseController.php @@ -62,6 +62,9 @@ class PhaseController extends Controller PhaseController::calculateCriteriaVotes($request->projectId); } else if ($currentPhaseNumber == 4) { PhaseController::calculateCriteriaWeightVotes($request->projectId); + } else if ($currentPhaseNumber == 5) { + PhaseController::calculateScores($request->projectId); + PhaseController::determineScorestatus($request->projectId); } DB::table('projects')->where('id', $request->projectId)->increment('phase'); @@ -401,13 +404,13 @@ class PhaseController extends Controller $users[] = $userWithStatus; } - return view('phase.phase05', ['project' => $project, 'phaseNumber' => $phaseNumber, 'phaseName' => 'Submit Weight of Criteria', 'role' => $userRole, 'users' => $users]); + return view('phase.phase05', ['project' => $project, 'phaseNumber' => $phaseNumber, 'phaseName' => 'Submit Score', '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]); + return view('phase.phase05', ['project' => $project, 'phaseNumber' => $phaseNumber, 'phaseName' => 'Submit Score', 'role' => $userRole, 'requirements' => $requirements, 'criterias' => $criterias]); } } @@ -530,4 +533,71 @@ class PhaseController extends Controller $affected = DB::table('criterias')->where('id', $weight->idCriteria)->update(['weight' => $weight->weight]); } } + + /** + * Calculate scores from fifth phase. + */ + public function calculateScores($projectId) + { + $requirements = DB::table('requirements')->where('idProject', $projectId)->get(); + + $criterias = DB::table('criterias')->where('idProject', $projectId)->where('used', 1)->get(); + + foreach($requirements as $requirement) { + foreach($criterias as $criteria) { + $scores = DB::table('userscores')->where('idRequirement', $requirement->id)->where('idCriteria', $criteria->id)->get(); + + $sumScore = 0; + foreach($scores as $score) { + $sumScore += $score->score; + } + + $avgScore = $sumScore / count($scores); + + DB::table('scores')->updateOrInsert([ + 'idRequirement' => $requirement->id, + 'idCriteria' => $criteria->id, + 'score' => $avgScore, + 'status' => 0 + ]); + } + } + } + + /** + * Determine score status from fifth phase. + */ + public function determineScoreStatus($projectId) + { + $requirements = DB::table('requirements')->where('idProject', $projectId)->get(); + + $criterias = DB::table('criterias')->where('idProject', $projectId)->where('used', 1)->get(); + + $countMembers = DB::table('userprojects')->where('idProject', $projectId)->where('role', 2)->count(); + + $agreementLimit = $countMembers * 2 / 3; + $threshold = 1; + + foreach($requirements as $requirement) { + foreach($criterias as $criteria) { + $score = DB::table('scores')->where('idRequirement', $requirement->id)->where('idCriteria', $criteria->id)->first(); + + $userScores = DB::table('userscores')->where('idRequirement', $requirement->id)->where('idCriteria', $criteria->id)->get(); + + $agreementCount = 0; + $minVal = $score->score - $threshold; + $maxVal = $score->score + $threshold; + + foreach($userScores as $userScore) { + if (($minVal <= $userScore->score) && ($userScore->score <= $maxVal)) { + $agreementCount += 1; + } + } + + if ($agreementCount >= $agreementLimit) { + $affected = DB::table('scores')->where('id', $score->id)->update(['status' => 1]); + } + } + } + } } diff --git a/database/migrations/2021_05_19_035530_create_scores_table.php b/database/migrations/2021_05_19_035530_create_scores_table.php index baecb65189d17fab993eb94d0a97a19607fc8ac6..e9b7316397a0378eaf4dbd5d187fd00f08fd3c4f 100644 --- a/database/migrations/2021_05_19_035530_create_scores_table.php +++ b/database/migrations/2021_05_19_035530_create_scores_table.php @@ -17,7 +17,7 @@ class CreateScoresTable extends Migration $table->id(); $table->integer('idRequirement'); $table->integer('idCriteria'); - $table->integer('score'); + $table->double('score', 8, 2)->nullable(); $table->integer('status'); $table->timestamps(); });