Example #1
0
 public function getMatchRateAttribute()
 {
     $user_skills = UserSkill::with('skill')->where('user_id', '=', $this->user_id)->get()->toArray();
     if (count($user_skills) > 0) {
         $skill_percentage = 0;
         $job_traits = 0;
         $user_traits = 0;
         foreach ($this->job_details->job_skills->load('skill')->toArray() as $job_skill) {
             $avg_user_job_rate = 0;
             foreach ($user_skills as $user_skill) {
                 if ($job_skill['skill_id'] == $user_skill['skill_id']) {
                     if ($user_skill['skill']['type'] == 'soft') {
                         $user_traits++;
                     }
                     if ($user_skill['skill']['type'] == 'hard') {
                         if ($user_skill['rate'] >= $job_skill['rate']) {
                             $avg_user_job_rate = 1;
                         } else {
                             $avg_user_job_rate = $user_skill['rate'] / $job_skill['rate'];
                         }
                         $over_all_skill_match = $avg_user_job_rate * 100 * ($job_skill['importance'] / 100);
                         $skill_percentage += $over_all_skill_match;
                     }
                 }
             }
             if ($job_skill['skill']['type'] == 'soft') {
                 $job_traits++;
             }
         }
         $trait_percentage = $user_traits / $job_traits * 100 * ($this->job_details->traits_importance / 100);
         $skill_percentage = $skill_percentage * ((100 - $this->job_details->traits_importance) / 100);
         return round($trait_percentage + $skill_percentage);
     }
     return 0;
 }
Example #2
0
 public function getMatchCountAttribute()
 {
     $skill_ids = [];
     foreach ($this->job_skills as $job_skill) {
         $skill_ids[] = $job_skill['skill_id'];
     }
     if (count($skill_ids) > 0) {
         $user_ids = UserSkill::select(DB::raw('DISTINCT(user_id)'))->whereIn('skill_id', $skill_ids)->get()->toArray();
         $lat = $this->job_locations->lat;
         $lng = $this->job_locations->lng;
         $users = User::within((int) $this->search_radius, 'kilometers', $lat, $lng)->where('lat', '!=', '')->where('lng', '!=', '')->whereIn('id', $user_ids)->get();
         return count($users);
     }
     return 0;
 }