public function getScoreAttribute() { $totalScore = \parser\models\JobRequirement::where('job_id', '=', $this->job_id)->where('is_available', '=', 1)->sum('weightage'); $score = \parser\models\JobRequirement::where('is_available', '=', 1)->where('job_id', '=', $this->job_id)->WhereIn('keyword_id', function ($query) { $query->select('id')->from('keywords')->whereIn('id', function ($query2) { $query2->select('keyword_id')->from('application_keywords')->where('application_id', '=', $this->id); }); })->sum('weightage'); $unfulfilled_requirements = \parser\models\JobRequirement::where('is_available', '=', 1)->where('job_id', '=', $this->job_id)->WhereNotIn('keyword_id', function ($query) { $query->select('id')->from('keywords')->whereIn('id', function ($query2) { $query2->select('keyword_id')->from('application_keywords')->where('application_id', '=', $this->id); }); })->get(); $skillset = []; foreach ($this->resumeKeywords as $keyword) { array_push($skillset, $keyword->keyword->id); } $edges = \parser\models\KeywordRelevance::get(); $graph = new \parser\library\Graph(); foreach ($edges as $edge) { $graph->addEdge($edge->from_keyword_id, $edge->to_keyword_id, $edge->relevance); } $sssp = new \parser\library\Dijkstra($graph->output()); foreach ($unfulfilled_requirements as $requirement) { $min = 1; foreach ($skillset as $skill) { $dist = -$sssp->shortestPath($skill, $requirement->keyword->id); if ($dist < $min) { $min = $dist; } } if ($min != 1) { $score += $requirement->weightage * abs($min); } } if ($totalScore <= 0) { return 0; } return $score / $totalScore * 100; }
public static function updateRequirements($job_id) { $app = \Slim\Slim::getInstance(); if (!\parser\controllers\ApplicationController::isLogin()) { $app->render(401, ['Status' => 'Unauthorised.']); return; } $allPostVars = $app->request->post(); $id = @$allPostVars['id'] ? @trim(htmlspecialchars($allPostVars['id'], ENT_QUOTES, 'UTF-8')) : NULL; $keyword = @$allPostVars['keyword'] ? @trim(htmlspecialchars($allPostVars['keyword'], ENT_QUOTES, 'UTF-8')) : NULL; $weightage = isset($allPostVars['weightage']) ? @floatval($allPostVars['weightage']) : NULL; $is_required = @$allPostVars['is_required'] === "on" ? true : false; $is_available = @$allPostVars['is_available'] === "on" ? true : false; if (!preg_match('/^\\d+$/', $id) || !preg_match('/^\\d+(.\\d{1,2})?$/', $weightage) || !InputValidator::isValidStringInput($keyword, 255, 0)) { $app->render(400, ['Status' => 'Invalid input.']); return; } try { $user = \parser\models\User::where('email', '=', $_SESSION['email'])->first(); $job = \parser\models\Job::where('id', '=', $job_id)->whereIn('id', function ($query) use($user) { $query->select('job_id')->from('job_recruiters')->where('user_id', '=', $user->id); })->first(); if ($user && $job) { $keyword = \parser\models\Keyword::firstOrCreate(array('keyword' => $keyword)); $requirement = \parser\models\JobRequirement::where('id', '=', $id)->where('job_id', '=', $job->id)->first(); if ($requirement) { $requirement->keyword_id = $keyword->id; $requirement->weightage = $weightage; $requirement->is_required = $is_required; $requirement->is_available = $is_available; $requirement->save(); echo json_encode($requirement, JSON_UNESCAPED_SLASHES); } else { $app->render(401, ['Status' => 'Unauthorised.']); return; } } else { $app->render(401, ['Status' => 'Unauthorised.']); return; } } catch (\Exception $e) { $app->render(500, ['Status' => 'An error occurred.']); return; } }