Added assessment result tool
diff --git a/erpnext/schools/api.py b/erpnext/schools/api.py
index e48748e..e31a944 100644
--- a/erpnext/schools/api.py
+++ b/erpnext/schools/api.py
@@ -7,7 +7,7 @@
import json
from frappe import _
from frappe.model.mapper import get_mapped_doc
-from frappe.utils import flt
+from frappe.utils import flt, cstr
@frappe.whitelist()
def enroll_student(source_name):
@@ -84,7 +84,7 @@
@frappe.whitelist()
def get_student_batch_students(student_batch):
- """Returns List of student, student_name in Student Batch.
+ """Returns List of student, student_name, idx in Student Batch.
:param student_batch: Student Batch.
"""
@@ -172,7 +172,26 @@
"""
return frappe.get_list("Course Evaluation Criteria", \
fields=["evaluation_criteria", "weightage"], filters={"parent": course}, order_by= "idx")
-
+
+@frappe.whitelist()
+def get_assessment_students(assessment_plan, student_group=None, student_batch=None):
+ student_list = []
+ if student_group:
+ student_list = get_student_group_students(student_group)
+ elif student_batch:
+ student_list = get_student_batch_students(student_batch)
+ for i, student in enumerate(student_list):
+ result = get_result(student.student, assessment_plan)
+ if result:
+ student_result = {}
+ for d in result.details:
+ student_result.update({d.evaluation_criteria: cstr(d.score) + " ("+ d.grade + ")"})
+ student_result.update({"total_score": cstr(result.total_score) + " (" + result.grade + ")"})
+ student.update({'assessment_details': student_result})
+ else:
+ student.update({'assessment_details': None})
+ return student_list
+
@frappe.whitelist()
def get_assessment_details(assessment_plan):
"""Returns Evaluation Criteria and Maximum Score from Assessment Plan Master.
@@ -182,6 +201,18 @@
return frappe.get_list("Assessment Evaluation Criteria", \
fields=["evaluation_criteria", "maximum_score"], filters={"parent": assessment_plan}, order_by= "idx")
+@frappe.whitelist()
+def get_result(student, assessment_plan):
+ """Returns Submitted Result of given student for specified Assessment Plan
+
+ :param Student: Student
+ :param Assessment Plan: Assessment Plan
+ """
+ results = frappe.get_all("Assessment Result", filters={"student": student, "assessment_plan": assessment_plan, "docstatus": 1})
+ if results:
+ return frappe.get_doc("Assessment Result", results[0])
+ else:
+ return None
@frappe.whitelist()
def get_grade(grading_scale, percentage):
@@ -199,5 +230,25 @@
grade = grading_scale_intervals.get(interval)
break
else:
- grade = "Unsuccessful"
- return grade
\ No newline at end of file
+ grade = ""
+ return grade
+
+@frappe.whitelist()
+def mark_assessment_result(student, assessment_plan, scores):
+ student_score = json.loads(scores)
+ details = []
+ for s in student_score.keys():
+ details.append({
+ "evaluation_criteria": s,
+ "score": flt(student_score[s])
+ })
+ assessment_result = frappe.new_doc("Assessment Result")
+ assessment_result.update({
+ "student": student,
+ "student_name": frappe.db.get_value("Student", student, "title"),
+ "assessment_plan": assessment_plan,
+ "details": details
+ })
+ assessment_result.save()
+ assessment_result.submit()
+ return assessment_result
\ No newline at end of file