コード例 #1
0
def preview_report_card(doc):
    doc = frappe._dict(json.loads(doc))
    doc.students = [doc.student]
    if not (doc.student_name and doc.student_batch):
        program_enrollment = frappe.get_all(
            "Program Enrollment",
            fields=["student_batch_name", "student_name"],
            filters={
                "student": doc.student,
                "docstatus": ('!=', 2),
                "academic_year": doc.academic_year
            })
        if program_enrollment:
            doc.batch = program_enrollment[0].student_batch_name
            doc.student_name = program_enrollment[0].student_name

    # get the assessment result of the selected student
    values = get_formatted_result(
        doc,
        get_course=True,
        get_all_assessment_groups=doc.include_all_assessment)
    assessment_result = values.get("assessment_result").get(doc.student)
    courses = values.get("course_dict")
    course_criteria = get_courses_criteria(courses)

    # get the assessment group as per the user selection
    if doc.include_all_assessment:
        assessment_groups = get_child_assessment_groups(doc.assessment_group)
    else:
        assessment_groups = [doc.assessment_group]

    # get the attendance of the student for that peroid of time.
    doc.attendance = get_attendance_count(doc.students[0], doc.academic_year,
                                          doc.academic_term)

    template = "erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.html"
    base_template_path = "frappe/www/printview.html"

    from frappe.www.printview import get_letter_head
    letterhead = get_letter_head(frappe._dict({"letter_head": doc.letterhead}),
                                 not doc.add_letterhead)

    html = frappe.render_template(
        template, {
            "doc": doc,
            "assessment_result": assessment_result,
            "courses": courses,
            "assessment_groups": assessment_groups,
            "course_criteria": course_criteria,
            "letterhead": letterhead and letterhead.get('content', None),
            "add_letterhead": doc.add_letterhead if doc.add_letterhead else 0
        })
    final_template = frappe.render_template(base_template_path, {
        "body": html,
        "title": "Report Card"
    })

    frappe.response.filename = "Report Card " + doc.students[0] + ".pdf"
    frappe.response.filecontent = get_pdf(final_template)
    frappe.response.type = "download"
コード例 #2
0
def execute(filters=None):
    columns, data, grades = [], [], []
    args = frappe._dict()
    course_wise_analysis = defaultdict(dict)

    args["academic_year"] = filters.get("academic_year")
    assessment_group = args["assessment_group"] = filters.get(
        "assessment_group")

    student_group = filters.get("student_group")
    args.students = frappe.db.sql_list(
        "select student from `tabStudent Group Student` where parent=%s",
        (student_group))

    values = get_formatted_result(args, get_course=True)
    student_details = values.get("student_details")
    assessment_result = values.get("assessment_result")
    course_dict = values.get("course_dict")

    for student in args.students:
        if student_details.get(student):
            student_row = {}
            student_row["student"] = student
            student_row["student_name"] = student_details[student]
            for course in course_dict:
                scrub_course = frappe.scrub(course)
                if assessment_group in assessment_result[student][course]:
                    student_row[
                        "grade_" + scrub_course] = assessment_result[student][
                            course][assessment_group]["Total Score"]["grade"]
                    student_row[
                        "score_" + scrub_course] = assessment_result[student][
                            course][assessment_group]["Total Score"]["score"]

                    # create the list of possible grades
                    if student_row["grade_" + scrub_course] not in grades:
                        grades.append(student_row["grade_" + scrub_course])

                    # create the dict of for gradewise analysis
                    if student_row[
                            "grade_" +
                            scrub_course] not in course_wise_analysis[course]:
                        course_wise_analysis[course][student_row[
                            "grade_" + scrub_course]] = 1
                    else:
                        course_wise_analysis[course][student_row[
                            "grade_" + scrub_course]] += 1

            data.append(student_row)

    course_list = [d for d in course_dict]
    columns = get_column(course_dict)
    chart = get_chart_data(grades, course_list, course_wise_analysis)
    return columns, data, None, chart
コード例 #3
0
def preview_report_card(doc):
	doc = frappe._dict(json.loads(doc))
	doc.students = [doc.student]
	if not (doc.student_name and doc.student_batch):
		program_enrollment = frappe.get_all("Program Enrollment", fields=["student_batch_name", "student_name"],
			filters={"student": doc.student, "docstatus": ('!=', 2), "academic_year": doc.academic_year})
		if program_enrollment:
			doc.batch = program_enrollment[0].student_batch_name
			doc.student_name = program_enrollment[0].student_name

	# get the assessment result of the selected student
	values = get_formatted_result(doc, get_course=True, get_all_assessment_groups=doc.include_all_assessment)
	assessment_result = values.get("assessment_result").get(doc.student)
	courses = values.get("course_dict")
	course_criteria = get_courses_criteria(courses)

	# get the assessment group as per the user selection
	if doc.include_all_assessment:
		assessment_groups = get_child_assessment_groups(doc.assessment_group)
	else:
		assessment_groups = [doc.assessment_group]

	# get the attendance of the student for that peroid of time.
	doc.attendance = get_attendance_count(doc.students[0], doc.academic_year, doc.academic_term)

	template = "erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.html"
	base_template_path = "frappe/www/printview.html"

	from frappe.www.printview import get_letter_head
	letterhead = get_letter_head(frappe._dict({"letter_head": doc.letterhead}), not doc.add_letterhead)

	html = frappe.render_template(template,
		{
			"doc": doc,
			"assessment_result": assessment_result,
			"courses": courses,
			"assessment_groups": assessment_groups,
			"course_criteria": course_criteria,
			"letterhead": letterhead.content,
			"add_letterhead": doc.add_letterhead if doc.add_letterhead else 0
		})
	final_template = frappe.render_template(base_template_path, {"body": html, "title": "Report Card"})

	frappe.response.filename = "Report Card " + doc.students[0] + ".pdf"
	frappe.response.filecontent = get_pdf(final_template)
	frappe.response.type = "download"
コード例 #4
0
def execute(filters=None):
	columns, data, grades = [], [], []
	args = frappe._dict()
	course_wise_analysis = defaultdict(dict)

	args["academic_year"] = filters.get("academic_year")
	assessment_group = args["assessment_group"] = filters.get("assessment_group")

	student_group = filters.get("student_group")
	args.students = frappe.db.sql_list("select student from `tabStudent Group Student` where parent=%s", (student_group))

	values = get_formatted_result(args, get_course=True)
	student_details = values.get("student_details")
	assessment_result = values.get("assessment_result")
	course_dict = values.get("course_dict")

	for student in args.students:
		if student_details.get(student):
			student_row = {}
			student_row["student"] = student
			student_row["student_name"] = student_details[student]
			for course in course_dict:
				scrub_course = frappe.scrub(course)
				if assessment_group in assessment_result[student][course]:
					student_row["grade_" + scrub_course] = assessment_result[student][course][assessment_group]["Total Score"]["grade"]
					student_row["score_" + scrub_course] = assessment_result[student][course][assessment_group]["Total Score"]["score"]

					# create the list of possible grades
					if student_row["grade_" + scrub_course] not in grades:
						grades.append(student_row["grade_" + scrub_course])

					# create the dict of for gradewise analysis
					if student_row["grade_" + scrub_course] not in course_wise_analysis[course]:
						course_wise_analysis[course][student_row["grade_" + scrub_course]] = 1
					else:
						course_wise_analysis[course][student_row["grade_" + scrub_course]] += 1

			data.append(student_row)

	course_list = [d for d in course_dict]
	columns = get_column(course_dict)
	chart = get_chart_data(grades, course_list, course_wise_analysis)
	return columns, data, None, chart