From 92980aedc8d8c9529adb46ecf2ba7ad7fbf61f48 Mon Sep 17 00:00:00 2001 From: ayishanishana21 Date: Wed, 24 Dec 2025 14:42:01 +0530 Subject: [PATCH] made few changes in dashboard --- employer_recommendation_system/emp/helper.py | 109 +++++++++++++------ 1 file changed, 78 insertions(+), 31 deletions(-) diff --git a/employer_recommendation_system/emp/helper.py b/employer_recommendation_system/emp/helper.py index 102cff7..c221721 100644 --- a/employer_recommendation_system/emp/helper.py +++ b/employer_recommendation_system/emp/helper.py @@ -315,57 +315,104 @@ def get_role(user): elif list(set(['STUDENT','STUDENT_ILW']).intersection([x.name for x in user.groups.all()])): return 'STUDENT' + def fetch_moodle_score(student): """ Fetch Moodle quiz scores for a logged-in student using EMAIL as the bridge between ERS and Moodle. + Output format matches emp/student_form.html """ scores = [] - # 1. Spoken user email (login email) + email = student.user.email if not email: return scores - # 2. Find Moodle user using same email - mdl_user = (MdlUser.objects.using('moodle').filter(email__iexact=email.strip()).first()) + mdl_user = (MdlUser.objects.using('moodle').filter(email__iexact=email.strip()).values('id').first()) if not mdl_user: return scores - # 3. Fetch quiz grades for this Moodle user - quiz_grades = (MdlQuizGrades.objects.using('moodle').filter(userid=mdl_user).order_by('-timemodified')) - - # 4. Fetch quizzes once (performance-safe) - quiz_ids = [q.quiz for q in quiz_grades] - quizzes = { - q.id: q - for q in MdlQuiz.objects.using('moodle').filter(id__in=quiz_ids) - } + mdl_user_id = mdl_user['id'] - # 5. Map quiz name → FOSS - foss_list = FossCategory.objects.all() + quiz_grades = (MdlQuizGrades.objects.using('moodle').filter(userid=mdl_user_id).values('quiz', 'grade', 'timemodified').order_by('-timemodified')) + if not quiz_grades: + return scores + quiz_ids = [q['quiz'] for q in quiz_grades] - for qg in quiz_grades: - quiz = quizzes.get(qg.quiz) - if not quiz: - continue + quiz_foss_map = (FossMdlCourses.objects.filter(mdlquiz_id__in=quiz_ids).select_related('foss').values('mdlquiz_id', 'foss__foss')) - # Match quiz name with FOSS name - foss_obj = None - quiz_name = quiz.name.lower() + quiz_to_foss = { + q['mdlquiz_id']: q['foss__foss'] + for q in quiz_foss_map + } - for foss in foss_list: - if foss.foss.lower() in quiz_name: - foss_obj = foss - break - - if not foss_obj: + seen_foss = set() + for q in quiz_grades: + foss_name = quiz_to_foss.get(q['quiz']) + if not foss_name: continue - scores.append({ - 'name': foss_obj.foss, - 'grade': float(qg.grade), - 'updated': datetime.datetime.fromtimestamp(qg.timemodified), + if foss_name in seen_foss: + continue + + seen_foss.add(foss_name) + + scores.append({'name': foss_name,'grade': float(q['grade']),'updated': datetime.datetime.fromtimestamp(q['timemodified']), }) return scores + +# def fetch_moodle_score(student): +# """ +# Fetch Moodle quiz scores for a logged-in student +# using EMAIL as the bridge between ERS and Moodle. +# """ +# scores = [] +# # 1. Spoken user email (login email) +# email = student.user.email +# if not email: +# return scores +# # 2. Find Moodle user using same email +# mdl_user = (MdlUser.objects.using('moodle').filter(email__iexact=email.strip()).first()) + +# if not mdl_user: +# return scores +# # 3. Fetch quiz grades for this Moodle user +# quiz_grades = (MdlQuizGrades.objects.using('moodle').filter(userid=mdl_user).order_by('-timemodified')) + +# # 4. Fetch quizzes once (performance-safe) +# quiz_ids = [q.quiz for q in quiz_grades] +# quizzes = { +# q.id: q +# for q in MdlQuiz.objects.using('moodle').filter(id__in=quiz_ids) +# } + +# # 5. Map quiz name → FOSS +# foss_list = FossCategory.objects.all() + +# for qg in quiz_grades: +# quiz = quizzes.get(qg.quiz) +# if not quiz: +# continue + +# # Match quiz name with FOSS name +# foss_obj = None +# quiz_name = quiz.name.lower() + +# for foss in foss_list: +# if foss.foss.lower() in quiz_name: +# foss_obj = foss +# break + +# if not foss_obj: +# continue + +# scores.append({ +# 'name': foss_obj.foss, +# 'grade': float(qg.grade), +# 'updated': datetime.datetime.fromtimestamp(qg.timemodified), +# }) + +# return scores + \ No newline at end of file