From c4125b32ee10fcda54be12a7cba6746c5684e673 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Fri, 5 May 2017 12:54:25 +0530 Subject: [PATCH] Course wise assessment reports --- .../course_wise_assessment_report/__init__.py | 0 .../course_wise_assessment_report.js | 21 ++++++++ .../course_wise_assessment_report.json | 23 ++++++++ .../course_wise_assessment_report.py | 54 +++++++++++++++++++ 4 files changed, 98 insertions(+) create mode 100644 erpnext/schools/report/course_wise_assessment_report/__init__.py create mode 100644 erpnext/schools/report/course_wise_assessment_report/course_wise_assessment_report.js create mode 100644 erpnext/schools/report/course_wise_assessment_report/course_wise_assessment_report.json create mode 100644 erpnext/schools/report/course_wise_assessment_report/course_wise_assessment_report.py diff --git a/erpnext/schools/report/course_wise_assessment_report/__init__.py b/erpnext/schools/report/course_wise_assessment_report/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/schools/report/course_wise_assessment_report/course_wise_assessment_report.js b/erpnext/schools/report/course_wise_assessment_report/course_wise_assessment_report.js new file mode 100644 index 00000000000..d61d59a5fcc --- /dev/null +++ b/erpnext/schools/report/course_wise_assessment_report/course_wise_assessment_report.js @@ -0,0 +1,21 @@ +// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.query_reports["Course wise Assessment Report"] = { + "filters": [ + { + "fieldname":"assessment_group", + "label": __("Assessment Group"), + "fieldtype": "Link", + "options": "Assessment Group", + "reqd": 1 + }, + { + "fieldname":"student_group", + "label": __("Student Group"), + "fieldtype": "Link", + "options": "Student Group", + "reqd": 1 + }, + ] +} diff --git a/erpnext/schools/report/course_wise_assessment_report/course_wise_assessment_report.json b/erpnext/schools/report/course_wise_assessment_report/course_wise_assessment_report.json new file mode 100644 index 00000000000..6b089d276ff --- /dev/null +++ b/erpnext/schools/report/course_wise_assessment_report/course_wise_assessment_report.json @@ -0,0 +1,23 @@ +{ + "add_total_row": 0, + "apply_user_permissions": 1, + "creation": "2017-05-05 14:46:13.776133", + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "idx": 0, + "is_standard": "Yes", + "modified": "2017-05-05 14:47:18.080385", + "modified_by": "Administrator", + "module": "Schools", + "name": "Course wise Assessment Report", + "owner": "Administrator", + "ref_doctype": "Assessment Result", + "report_name": "Course wise Assessment Report", + "report_type": "Script Report", + "roles": [ + { + "role": "Academics User" + } + ] +} \ No newline at end of file diff --git a/erpnext/schools/report/course_wise_assessment_report/course_wise_assessment_report.py b/erpnext/schools/report/course_wise_assessment_report/course_wise_assessment_report.py new file mode 100644 index 00000000000..e1a5a134e2f --- /dev/null +++ b/erpnext/schools/report/course_wise_assessment_report/course_wise_assessment_report.py @@ -0,0 +1,54 @@ +# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe import _ +from collections import defaultdict + +def execute(filters=None): + + assessment_group = filters.get("assessment_group") + student_group = filters.get("student_group") + course = frappe.db.get_value("Student Group", student_group, "course") + if not course: + frappe.throw(_("Student Group {0} is not linked with any course").format(student_group)) + + assessment_plan = frappe.db.sql('''select ap.name, apc.assessment_criteria, apc.maximum_score as max_score + from `tabAssessment Plan` ap, `tabAssessment Plan Criteria` apc + where ap.assessment_group=%s and ap.student_group=%s and ap.name=apc.parent and ap.docstatus=1 + order by apc.assessment_criteria''', (assessment_group, student_group), as_dict=1) + assessment_plan_list = set([d["name"] for d in assessment_plan]) + + assessment_result = frappe.db.sql('''select ar.student, ard.assessment_criteria, ard.grade, ard.score + from `tabAssessment Result` ar, `tabAssessment Result Detail` ard + where ar.assessment_plan in (%s) and ar.name=ard.parent and ar.docstatus=1 + order by ard.assessment_criteria''' %', '.join(['%s']*len(assessment_plan_list)), tuple(assessment_plan_list), as_dict=1) + + result_dict = defaultdict(list) + for result in assessment_result: + result_dict[result.student].append(result.grade) + result_dict[result.student].append(result.score) + + student_list = frappe.db.sql('''select sgs.group_roll_number, sgs.student, sgs.student_name + from `tabStudent Group` sg, `tabStudent Group Student` sgs + where sg.name = sgs.parent and sg.name = %s + order by sgs.group_roll_number asc''', (student_group), as_list=1) + + data = [] + for student in student_list: + tmp_list = student + result_dict[student[1]] + data.append(tmp_list) + + return get_column(assessment_plan), data + +def get_column(assessment_plan): + columns = [ + _("Group Roll No") + "::80", + _("Student ID") + ":Link/Student:90", + _("Student Name") + "::160", + ] + for d in assessment_plan: + columns.append(d.get("assessment_criteria") + "::110") + columns.append("Max Score(" + str(int(d.get("max_score"))) + ")::110") + return columns