From 49ff065684ff65438ee737dd493fe2474d81abd9 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Tue, 28 Nov 2017 18:44:06 +0530 Subject: [PATCH 1/2] fix for the new report module --- .../report/assessment_plan_status/__init__.py | 0 .../assessment_plan_status.js | 28 +++ .../assessment_plan_status.json | 23 +++ .../assessment_plan_status.py | 179 ++++++++++++++++++ 4 files changed, 230 insertions(+) create mode 100644 erpnext/education/report/assessment_plan_status/__init__.py create mode 100644 erpnext/education/report/assessment_plan_status/assessment_plan_status.js create mode 100644 erpnext/education/report/assessment_plan_status/assessment_plan_status.json create mode 100644 erpnext/education/report/assessment_plan_status/assessment_plan_status.py diff --git a/erpnext/education/report/assessment_plan_status/__init__.py b/erpnext/education/report/assessment_plan_status/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/education/report/assessment_plan_status/assessment_plan_status.js b/erpnext/education/report/assessment_plan_status/assessment_plan_status.js new file mode 100644 index 0000000000..2d1eb09640 --- /dev/null +++ b/erpnext/education/report/assessment_plan_status/assessment_plan_status.js @@ -0,0 +1,28 @@ +// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt +/* eslint-disable */ + +frappe.query_reports["Assessment Plan Status"] = { + "filters": [ + { + "fieldname":"assessment_group", + "label": __("Assessment Group"), + "fieldtype": "Link", + "options": "Assessment Group", + "get_query": function() { + return{ + filters: { + 'is_group': 0 + } + }; + } + }, + { + "fieldname":"schedule_date", + "label": __("Scheduled Upto"), + "fieldtype": "Date", + "options": "" + } + + ] +} diff --git a/erpnext/education/report/assessment_plan_status/assessment_plan_status.json b/erpnext/education/report/assessment_plan_status/assessment_plan_status.json new file mode 100644 index 0000000000..3000bec1f8 --- /dev/null +++ b/erpnext/education/report/assessment_plan_status/assessment_plan_status.json @@ -0,0 +1,23 @@ +{ + "add_total_row": 0, + "apply_user_permissions": 1, + "creation": "2017-11-09 15:07:30.404428", + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "idx": 0, + "is_standard": "Yes", + "modified": "2017-11-28 18:35:44.903665", + "modified_by": "Administrator", + "module": "Education", + "name": "Assessment Plan Status", + "owner": "Administrator", + "ref_doctype": "Assessment Plan", + "report_name": "Assessment Plan Status", + "report_type": "Script Report", + "roles": [ + { + "role": "Academics User" + } + ] +} \ No newline at end of file diff --git a/erpnext/education/report/assessment_plan_status/assessment_plan_status.py b/erpnext/education/report/assessment_plan_status/assessment_plan_status.py new file mode 100644 index 0000000000..21184a637c --- /dev/null +++ b/erpnext/education/report/assessment_plan_status/assessment_plan_status.py @@ -0,0 +1,179 @@ +# 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 itertools import groupby +from frappe.utils import cint + +DOCSTATUS = { + 0: "saved", + 1: "submitted", +} + +def execute(filters=None): + columns, data = [], [] + + args = frappe._dict() + args["assessment_group"] = filters.get("assessment_group") + args["schedule_date"] = filters.get("schedule_date") + + columns = get_column() + + data, chart = get_assessment_data(args) + + return columns, data, None, chart + + +def get_assessment_data(args=None): + + # [total, saved, submitted, remaining] + chart_data = [0, 0, 0, 0] + + condition = '' + if args["assessment_group"]: + condition += "and assessment_group = %(assessment_group)s" + if args["schedule_date"]: + condition += "and schedule_date <= %(schedule_date)s" + + assessment_plan = frappe.db.sql(''' + SELECT + ap.name as assessment_plan, + ap.assessment_name, + ap.student_group, + ap.schedule_date, + (select count(*) from `tabStudent Group Student` sgs where sgs.parent=ap.student_group) + as student_group_strength + FROM + `tabAssessment Plan` ap + WHERE + ap.docstatus = 1 {condition} + ORDER BY + ap.modified desc + '''.format(condition=condition), (args), as_dict=1) + + assessment_plan_list = [d.assessment_plan for d in assessment_plan] if assessment_plan else [''] + assessment_result = get_assessment_result(assessment_plan_list) + + for d in assessment_plan: + + assessment_plan_details = assessment_result.get(d.assessment_plan) + assessment_plan_details = frappe._dict() if not assessment_plan_details else \ + frappe._dict(assessment_plan_details) + if "saved" not in assessment_plan_details: + assessment_plan_details.update({"saved": 0}) + if "submitted" not in assessment_plan_details: + assessment_plan_details.update({"submitted": 0}) + + # remaining students whose marks not entered + remaining_students = cint(d.student_group_strength) - cint(assessment_plan_details.saved) -\ + cint(assessment_plan_details.submitted) + assessment_plan_details.update({"remaining": remaining_students}) + d.update(assessment_plan_details) + + chart_data[0] += cint(d.student_group_strength) + chart_data[1] += assessment_plan_details.saved + chart_data[2] += assessment_plan_details.submitted + chart_data[3] += assessment_plan_details.remaining + + chart = get_chart(chart_data[1:]) + + return assessment_plan, chart + + +def get_assessment_result(assessment_plan_list): + assessment_result_dict = frappe._dict() + + assessment_result = frappe.db.sql(''' + SELECT + assessment_plan, docstatus, count(*) as count + FROM + `tabAssessment Result` + WHERE + assessment_plan in (%s) + GROUP BY + assessment_plan, docstatus + ORDER BY + assessment_plan + ''' %', '.join(['%s']*len(assessment_plan_list)), tuple(assessment_plan_list), as_dict=1) + + for key, group in groupby(assessment_result, lambda ap: ap["assessment_plan"]): + tmp = {} + for d in group: + if d.docstatus in [0,1]: + tmp.update({DOCSTATUS[d.docstatus]:d.count}) + assessment_result_dict[key] = tmp + + return assessment_result_dict + + +def get_chart(chart_data): + return { + "data": { + "labels": ["Saved", "Submitted", "Remaining"], + "datasets": [{ + "values": chart_data + }] + }, + "type": 'percentage', + } + + +def get_column(): + return [{ + "fieldname": "assessment_plan", + "label": _("Assessment Plan"), + "fieldtype": "Link", + "options": "Assessment Plan", + "width": 120 + }, + { + "fieldname": "assessment_name", + "label": _("Assessment Plan Name"), + "fieldtype": "Data", + "options": "", + "width": 200 + }, + { + "fieldname": "schedule_date", + "label": _("Schedule Date"), + "fieldtype": "Date", + "options": "", + "width": 100 + }, + { + "fieldname": "student_group", + "label": _("Student Group"), + "fieldtype": "Link", + "options": "Student Group", + "width": 200 + }, + { + "fieldname": "student_group_strength", + "label": _("Total Student"), + "fieldtype": "Data", + "options": "", + "width": 100 + }, + { + "fieldname": "submitted", + "label": _("Submitted"), + "fieldtype": "Data", + "options": "", + "width": 100 + }, + { + "fieldname": "saved", + "label": _("Saved"), + "fieldtype": "Data", + "options": "", + "width": 100 + }, + { + "fieldname": "remaining", + "label": _("Remaining"), + "fieldtype": "Data", + "options": "", + "width": 100 + }] From 34a8be83ead570b2506fce66d13d882370b173b7 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Tue, 28 Nov 2017 18:47:56 +0530 Subject: [PATCH 2/2] delete the old files --- .../report/assessment_plan_status/__init__.py | 0 .../assessment_plan_status.js | 28 --- .../assessment_plan_status.json | 23 --- .../assessment_plan_status.py | 179 ------------------ 4 files changed, 230 deletions(-) delete mode 100644 erpnext/schools/report/assessment_plan_status/__init__.py delete mode 100644 erpnext/schools/report/assessment_plan_status/assessment_plan_status.js delete mode 100644 erpnext/schools/report/assessment_plan_status/assessment_plan_status.json delete mode 100644 erpnext/schools/report/assessment_plan_status/assessment_plan_status.py diff --git a/erpnext/schools/report/assessment_plan_status/__init__.py b/erpnext/schools/report/assessment_plan_status/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/schools/report/assessment_plan_status/assessment_plan_status.js b/erpnext/schools/report/assessment_plan_status/assessment_plan_status.js deleted file mode 100644 index 2d1eb09640..0000000000 --- a/erpnext/schools/report/assessment_plan_status/assessment_plan_status.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.query_reports["Assessment Plan Status"] = { - "filters": [ - { - "fieldname":"assessment_group", - "label": __("Assessment Group"), - "fieldtype": "Link", - "options": "Assessment Group", - "get_query": function() { - return{ - filters: { - 'is_group': 0 - } - }; - } - }, - { - "fieldname":"schedule_date", - "label": __("Scheduled Upto"), - "fieldtype": "Date", - "options": "" - } - - ] -} diff --git a/erpnext/schools/report/assessment_plan_status/assessment_plan_status.json b/erpnext/schools/report/assessment_plan_status/assessment_plan_status.json deleted file mode 100644 index 141747f501..0000000000 --- a/erpnext/schools/report/assessment_plan_status/assessment_plan_status.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "add_total_row": 0, - "apply_user_permissions": 1, - "creation": "2017-11-09 15:07:30.404428", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2017-11-13 11:25:50.651364", - "modified_by": "Administrator", - "module": "Schools", - "name": "Assessment Plan Status", - "owner": "Administrator", - "ref_doctype": "Assessment Plan", - "report_name": "Assessment Plan Status", - "report_type": "Script Report", - "roles": [ - { - "role": "Academics User" - } - ] -} \ No newline at end of file diff --git a/erpnext/schools/report/assessment_plan_status/assessment_plan_status.py b/erpnext/schools/report/assessment_plan_status/assessment_plan_status.py deleted file mode 100644 index 21184a637c..0000000000 --- a/erpnext/schools/report/assessment_plan_status/assessment_plan_status.py +++ /dev/null @@ -1,179 +0,0 @@ -# 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 itertools import groupby -from frappe.utils import cint - -DOCSTATUS = { - 0: "saved", - 1: "submitted", -} - -def execute(filters=None): - columns, data = [], [] - - args = frappe._dict() - args["assessment_group"] = filters.get("assessment_group") - args["schedule_date"] = filters.get("schedule_date") - - columns = get_column() - - data, chart = get_assessment_data(args) - - return columns, data, None, chart - - -def get_assessment_data(args=None): - - # [total, saved, submitted, remaining] - chart_data = [0, 0, 0, 0] - - condition = '' - if args["assessment_group"]: - condition += "and assessment_group = %(assessment_group)s" - if args["schedule_date"]: - condition += "and schedule_date <= %(schedule_date)s" - - assessment_plan = frappe.db.sql(''' - SELECT - ap.name as assessment_plan, - ap.assessment_name, - ap.student_group, - ap.schedule_date, - (select count(*) from `tabStudent Group Student` sgs where sgs.parent=ap.student_group) - as student_group_strength - FROM - `tabAssessment Plan` ap - WHERE - ap.docstatus = 1 {condition} - ORDER BY - ap.modified desc - '''.format(condition=condition), (args), as_dict=1) - - assessment_plan_list = [d.assessment_plan for d in assessment_plan] if assessment_plan else [''] - assessment_result = get_assessment_result(assessment_plan_list) - - for d in assessment_plan: - - assessment_plan_details = assessment_result.get(d.assessment_plan) - assessment_plan_details = frappe._dict() if not assessment_plan_details else \ - frappe._dict(assessment_plan_details) - if "saved" not in assessment_plan_details: - assessment_plan_details.update({"saved": 0}) - if "submitted" not in assessment_plan_details: - assessment_plan_details.update({"submitted": 0}) - - # remaining students whose marks not entered - remaining_students = cint(d.student_group_strength) - cint(assessment_plan_details.saved) -\ - cint(assessment_plan_details.submitted) - assessment_plan_details.update({"remaining": remaining_students}) - d.update(assessment_plan_details) - - chart_data[0] += cint(d.student_group_strength) - chart_data[1] += assessment_plan_details.saved - chart_data[2] += assessment_plan_details.submitted - chart_data[3] += assessment_plan_details.remaining - - chart = get_chart(chart_data[1:]) - - return assessment_plan, chart - - -def get_assessment_result(assessment_plan_list): - assessment_result_dict = frappe._dict() - - assessment_result = frappe.db.sql(''' - SELECT - assessment_plan, docstatus, count(*) as count - FROM - `tabAssessment Result` - WHERE - assessment_plan in (%s) - GROUP BY - assessment_plan, docstatus - ORDER BY - assessment_plan - ''' %', '.join(['%s']*len(assessment_plan_list)), tuple(assessment_plan_list), as_dict=1) - - for key, group in groupby(assessment_result, lambda ap: ap["assessment_plan"]): - tmp = {} - for d in group: - if d.docstatus in [0,1]: - tmp.update({DOCSTATUS[d.docstatus]:d.count}) - assessment_result_dict[key] = tmp - - return assessment_result_dict - - -def get_chart(chart_data): - return { - "data": { - "labels": ["Saved", "Submitted", "Remaining"], - "datasets": [{ - "values": chart_data - }] - }, - "type": 'percentage', - } - - -def get_column(): - return [{ - "fieldname": "assessment_plan", - "label": _("Assessment Plan"), - "fieldtype": "Link", - "options": "Assessment Plan", - "width": 120 - }, - { - "fieldname": "assessment_name", - "label": _("Assessment Plan Name"), - "fieldtype": "Data", - "options": "", - "width": 200 - }, - { - "fieldname": "schedule_date", - "label": _("Schedule Date"), - "fieldtype": "Date", - "options": "", - "width": 100 - }, - { - "fieldname": "student_group", - "label": _("Student Group"), - "fieldtype": "Link", - "options": "Student Group", - "width": 200 - }, - { - "fieldname": "student_group_strength", - "label": _("Total Student"), - "fieldtype": "Data", - "options": "", - "width": 100 - }, - { - "fieldname": "submitted", - "label": _("Submitted"), - "fieldtype": "Data", - "options": "", - "width": 100 - }, - { - "fieldname": "saved", - "label": _("Saved"), - "fieldtype": "Data", - "options": "", - "width": 100 - }, - { - "fieldname": "remaining", - "label": _("Remaining"), - "fieldtype": "Data", - "options": "", - "width": 100 - }]