public JsonResult GetJobProfileByCategoriesChartData() { var curJob = this.jobsRepo.FindOne(new ByIdSpecify<Job>(this.CurrentJobId)); var skillCatNames = curJob.JobSkills.Select(x => x.SkillCategory).Distinct().Select(x => x.Name); var skillCatGroupedData = curJob.JobSkills.GroupBy(g => g.SkillCategoryId); var skillsData = new List<ChartSeriesModel>(); foreach (var skillCat in skillCatGroupedData) { if (skillCat.Any()) { var skillData = new ChartSeriesModel { Name = skillCat.First().SkillCategory.Name, CategoryAvgEstimate = Math.Round((double)skillCat.Sum(x => x.Estimate) / skillCat.Count(), 2) }; foreach (var jobSkill in skillCat) { skillData.Categories.Add(jobSkill.Skill.Name); skillData.Data.Add(jobSkill.Estimate); } skillsData.Add(skillData); } } return this.Json( new { SkillCatNames = skillCatNames, SkillsData = skillsData }, JsonRequestBehavior.AllowGet); }
public JsonResult GetJobProfileSkillsChartData(long? jobId, long? candidateId) { var skillsData = new List<ChartSeriesModel>(); var skillNames = new List<string>(); Job curJob = null; if (jobId.HasValue) { curJob = this.jobsRepo.FindOne(new ByIdSpecify<Job>(jobId.Value)); skillNames.AddRange(curJob.JobSkills.Where(x=>x.Estimate > 0).Select(x => x.Skill).Select(x => x.Name)); skillsData.Add(new ChartSeriesModel { Name = "Job Profile", Data = curJob.JobSkills.Where(x=>x.Estimate > 0).Select(x => double.Parse(x.Estimate.ToString())).ToList(), YAxis = 0 }); } if (candidateId.HasValue) { var candidate = this.usersRepo.FindOne(new ByIdSpecify<User>(candidateId.Value)); var seriesName = string.Format("{0} {1} Profile", candidate.LastName, candidate.FirstName); var userSkills = new List<UserSkill>(); if (curJob != null) { userSkills = candidate.UsersSkills.Where(x => curJob.JobSkills.Any(a => a.SkillId == x.SkillId && a.Estimate > 0)).ToList(); } else { skillNames.AddRange(candidate.UsersSkills.Select(x => x.Skill).Select(x => x.Name)); userSkills = candidate.UsersSkills.ToList(); } skillsData.Add(new ChartSeriesModel { Name = seriesName, Data = userSkills.Select(x => double.Parse(x.Estimate.ToString())).ToList(), YAxis = 0 }); // Select TestResults for candidate skills var testResults = candidate.TestResults.Where(x => userSkills.Any(s => s.SkillId == x.Test.SkillId)).ToList(); var skillTestRes = new ChartSeriesModel { Name = "Test Results", YAxis = 1 }; foreach (var skill in userSkills) { var testRes = testResults.FirstOrDefault(x => x.Test.SkillId == skill.SkillId); if (testRes != null) { // Percent correct answers var totalQuestions = testRes.Test.Questions.Count; var correctAnswers = testRes.ResultQuestions.Count(x => x.ResultAnswers.Any(a => a.IsCorrect && a.IsChoisen)); skillTestRes.Data.Add(Math.Round((double)correctAnswers/totalQuestions*100, 2)); } else { skillTestRes.Data.Add(0); } } skillsData.Add(skillTestRes); } return this.Json(new { SkillNames = skillNames, SkillsData = skillsData }, JsonRequestBehavior.AllowGet); }