Student Report Card (#13346)

* finalise the assessment report

* minor fixes for button

* fix the travis and codacy
diff --git a/erpnext/config/education.py b/erpnext/config/education.py
index e4e77f3..5a05a25 100644
--- a/erpnext/config/education.py
+++ b/erpnext/config/education.py
@@ -135,6 +135,10 @@
 					"name": "Assessment Plan Status",
 					"doctype": "Assessment Plan"
 				},
+				{
+					"type": "doctype",
+					"name": "Student Report Generation Tool"
+				}
 			]
 		},
 		{
diff --git a/erpnext/education/doctype/student/student.py b/erpnext/education/doctype/student/student.py
index a830e5b..841c2e8 100644
--- a/erpnext/education/doctype/student/student.py
+++ b/erpnext/education/doctype/student/student.py
@@ -22,14 +22,16 @@
 	def update_student_name_in_linked_doctype(self):
 		linked_doctypes = get_linked_doctypes("Student")
 		for d in linked_doctypes:
-			if "student_name" in [f.fieldname for f in frappe.get_meta(d).fields]:
-				frappe.db.sql("""UPDATE `tab{0}` set student_name = %s where {1} = %s"""
-					.format(d, linked_doctypes[d]["fieldname"]),(self.title, self.name))
+			meta = frappe.get_meta(d)
+			if not meta.issingle:
+				if "student_name" in [f.fieldname for f in meta.fields]:
+					frappe.db.sql("""UPDATE `tab{0}` set student_name = %s where {1} = %s"""
+						.format(d, linked_doctypes[d]["fieldname"]),(self.title, self.name))
 
-			if "child_doctype" in linked_doctypes[d].keys() and "student_name" in \
-				[f.fieldname for f in frappe.get_meta(linked_doctypes[d]["child_doctype"]).fields]:
-				frappe.db.sql("""UPDATE `tab{0}` set student_name = %s where {1} = %s"""
-					.format(linked_doctypes[d]["child_doctype"], linked_doctypes[d]["fieldname"]),(self.title, self.name))
+				if "child_doctype" in linked_doctypes[d].keys() and "student_name" in \
+					[f.fieldname for f in frappe.get_meta(linked_doctypes[d]["child_doctype"]).fields]:
+					frappe.db.sql("""UPDATE `tab{0}` set student_name = %s where {1} = %s"""
+						.format(linked_doctypes[d]["child_doctype"], linked_doctypes[d]["fieldname"]),(self.title, self.name))
 
 	def check_unique(self):
 		"""Validates if the Student Applicant is Unique"""
diff --git a/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.html b/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.html
index e5a7682..72772b7 100644
--- a/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.html
+++ b/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.html
@@ -1,82 +1,371 @@
 <style>
-	.whole-report {
-		font-size: 9pt;
-		font-family: 'Helvetica Neue', Helvetica, Arial, 'Open Sans', 'sans-serif';
-		-webkit-print-color-adjust: exact;
+		@media screen {
+		.print-format-gutter {
+			background-color: #ddd;
+			padding: 15px 0px;
+		}
+		.print-format {
+			background-color: white;
+			box-shadow: 0px 0px 9px rgba(0,0,0,0.5);
+			max-width: 8.3in;
+			min-height: 11.69in;
+			padding: 0.75in;
+			margin: auto;
+		}
+	
+		.print-format.landscape {
+			max-width: 11.69in;
+			padding: 0.2in;
+		}
+	
+		.page-break {
+			padding: 30px 0px;
+			border-bottom: 1px dashed #888;
+		}
+	
+		.page-break:first-child {
+			padding-top: 0px;
+		}
+	
+		.page-break:last-child {
+			border-bottom: 0px;
+		}
+	
+		/* mozilla hack for images in table */
+		body:last-child .print-format td img {
+			width: 100% !important;
+		}
+	
+		@media(max-width: 767px) {
+			.print-format {
+				padding: 0.2in;
+			}
+		}
 	}
-
-	h2 {
-		text-align: center;
+	
+	@media print {
+		.print-format p {
+			margin-left: 1px;
+			margin-right: 1px;
+		}
 	}
-
-	span {
-		padding-bottom: 5px;
+	
+	.data-field {
+		margin-top: 5px;
+		margin-bottom: 5px;
 	}
-
-	thead {
-		background-color: #eee !important;
+	
+	.data-field .value {
+		word-wrap: break-word;
+	}
+	
+	.important .value {
+		font-size: 120%;
 		font-weight: bold;
 	}
-
-	td {
+	
+	.important label {
+		line-height: 1.8;
+		margin: 0px;
+	}
+	
+	.table {
+		margin: 20px 0px;
+	}
+	
+	.square-image {
+		width: 100%;
+		height: 0;
+		padding: 50% 0;
+		background-size: contain;
+		/*background-size: cover;*/
+		background-repeat: no-repeat !important;
+		background-position: center center;
+		border-radius: 4px;
+	}
+	
+	.print-item-image {
+		object-fit: contain;
+	}
+	
+	.pdf-variables,
+	.pdf-variable,
+	.visible-pdf {
+		display: none !important;
+	}
+	
+	.print-format {
+		font-size: 9pt;
+		font-family: "Helvetica Neue", Helvetica, Arial, "Open Sans", sans-serif;
+		-webkit-print-color-adjust:exact;
+	}
+	
+	.page-break {
+		page-break-after: always;
+	}
+	
+	.print-heading {
+		border-bottom: 1px solid #aaa;
+		margin-bottom: 10px;
+	}
+	
+	.print-heading h2 {
+		margin: 0px;
+	}
+	.print-heading h4 {
+		margin-top: 5px;
+	}
+	
+	table.no-border, table.no-border td {
+		border: 0px;
+	}
+	
+	.print-format label {
+		/* wkhtmltopdf breaks label into multiple lines when it is inline-block */
+		display: block;
+	}
+	
+	.print-format img {
+		max-width: 100%;
+	}
+	
+	.print-format table td > .primary:first-child {
+		font-weight: bold;
+	}
+	
+	.print-format td, .print-format th {
 		vertical-align: top !important;
 		padding: 6px !important;
-		text-align: left;
 	}
+	
+	.print-format p {
+		margin: 3px 0px 3px;
+	}
+	
+	table td div {
+		
+		/* needed to avoid partial cutting of text between page break in wkhtmltopdf */
+		page-break-inside: avoid !important;
+		
+	}
+	
+	/* hack for webkit specific browser */
+	@media (-webkit-min-device-pixel-ratio:0) {
+		thead, tfoot { display: table-row-group; }
+	}
+	
+	[document-status] {
+		margin-bottom: 5mm;
+	}
+	
+	.signature-img {
+		background: #fff;
+		border-radius: 3px;
+		margin-top: 5px;
+		max-height: 150px;
+	}
+	
+	.print-heading {
+		text-align: right;
+		text-transform: uppercase;
+		color: #666;
+		padding-bottom: 20px;
+		margin-bottom: 20px;
+		border-bottom: 1px solid #d1d8dd;
+	}
+	
+	.print-heading h2 {
+		font-size: 24px;
+	}
+	
+	.print-format th {
+		background-color: #eee !important;
+		border-bottom: 0px !important;
+	}
+	
+	/* modern format: for-test */
 
-	.doc-field {
-		margin-bottom: 5px;
+	.pbi_avoid {
+		page-break-inside: avoid !important;
+	}
+	.pb_before {
+		page-break-before: always !important;
 	}
 </style>
 
-<div class="whole-report">
-<h2>{{ _("Student Report Card") }}</h2>
-<hr>
-<span class="doc-field"> {{ _("Student: ") }} <b> {{ frappe.db.get_value("Student", doc.students[0], "title") }} </b> </span> <br>
-<span class="doc-field"> {{ _("Program: ") }} <b> {{ doc.program }} </b> </span> <br>
-<span class="doc-field"> {{ _("Assessment Group: ") }} <b> {{ doc.assessment_group }} </b> </span>
-<hr>
+
+
+<div class="page-break">
+
+	<div id="header-html" class="hidden-pdf">
+
+		{% if letterhead and add_letterhead %}
+			<div class="">{{ letterhead }}</div>
+		{% endif %}
+		<div class="print-heading">
+			<h2>{{ _("Student Report Card") }}<br>
+				<small>{{ doc.student_name }}</small>
+			</h2>
+		</div>
+	</div>
+
+	<div class="row section-break">
+		<div class="col-xs-6 column-break">
+			<div class="row data-field">
+				<div class="col-xs-5">
+					<label>{{ _("Student ID: ") }}</label>
+				</div>
+				<div class="col-xs-7">
+					{{ doc.students[0] }}
+				</div>
+			</div>
+
+			<div class="row data-field">
+				<div class="col-xs-5">
+					<label>{{ _("Student Name: ") }}</label>
+				</div>
+				<div class="col-xs-7">
+					{{ doc.student_name }}
+				</div>
+			</div>
+
+			<div class="row data-field">
+				<div class="col-xs-5">
+					<label>{{ _("Program: ") }}</label>
+				</div>
+				<div class="col-xs-7">
+					{{ doc.program }}
+				</div>
+			</div>
+
+			<div class="row data-field">
+				<div class="col-xs-5">
+					<label>{{ _("Batch: ") }}</label>
+				</div>
+				<div class="col-xs-7">
+					{{ doc.student_batch }}
+				</div>
+			</div>
+		</div>
+
+		<div class="col-xs-6 column-break">
+			<div class="row data-field">
+				<div class="col-xs-5">
+					<label>{{ _("Academic Year: ") }}</label>
+				</div>
+				<div class="col-xs-7">
+					{{ doc.academic_year }}
+				</div>
+			</div>
+
+			{% if doc.academic_term %}
+			<div class="row data-field">
+				<div class="col-xs-5">
+					<label>{{ _("Academic Term: ") }}</label>
+				</div>
+				<div class="col-xs-7">
+					{{ doc.academic_term }}
+				</div>
+			</div>
+			{% endif %}
+
+			<div class="row data-field">
+				<div class="col-xs-5">
+					<label>{{ _("Assessment Group: ") }}</label>
+				</div>
+				<div class="col-xs-7">
+					{{ doc.assessment_group }}
+				</div>
+			</div>
+		</div>
+	</div>
+
+
+{% if doc.show_marks | int %}
+	{% set result_data = 'score' %}
+{% else %}
+	{% set result_data = 'grade' %}
+{% endif %}
+
 
 {% for course in courses %}
-	<br>
-	<div class="doc-field">
-		Course: <b>{{ course }} ({{ frappe.db.get_value("Course", course, "course_name") }}) </b>
+
+<div class="row section-break pbi_avoid">
+	<div class="col-xs-12 column-break">
+
+		<div>
+		<table class="table table-bordered table-condensed">
+			<caption>
+				<div class="row">
+					<div class="col-xs-1">
+						<label>{{ _("Course: ") }}</label>
+					</div>
+					<div class="col-xs-11">
+						{{ course }} ({{ frappe.db.get_value("Course", course, "course_name") }})
+					</div>
+				</div>
+			</caption>
+			<thead>
+				<tr>
+					<th style="width: {{ 650//(assessment_groups|length + 1) }}px">{{ _("Assessment Criteria") }}</th>
+					{% for assessment_group in assessment_groups %}
+					<th> {{ assessment_group }}</th>
+					{% endfor %}
+				</tr>
+			</thead>
+
+			<tbody>
+				{% for criteria in course_criteria[course] %}
+				<tr>
+					<td>{{ criteria }}</td>
+					{% for assessment_group in assessment_groups %}
+						{% if (assessment_result.get(course) and assessment_result.get(course).get(assessment_group) and assessment_result.get(course).get(assessment_group).get(criteria)) %}
+							<td>
+								{{ assessment_result.get(course).get(assessment_group).get(criteria).get(result_data) }}
+								{% if result_data == 'score' %}
+								({{ assessment_result.get(course).get(assessment_group).get(criteria).get('maximum_score') }})
+								{% endif %}
+							</td>
+						{% else %}
+							<td></td>
+						{% endif %}
+					{% endfor %}
+				</tr>
+				{% endfor %}
+			</tbody>
+
+		</table>
+		</div>
 	</div>
-	<table class="table table-bordered table-condensed">
-		<thead>
-			<tr>
-				<td>Assessment Criteria</td>
-				{% for assessment_group in assessment_groups %}
-				<td> {{ assessment_group }}</td>
-				{% endfor %}
-			</tr>
-		</thead>
-		<tbody>
-			{% for criteria in course_criteria[course] %}
-			<tr>
-				<td>{{ criteria }}</td>
-				{% for assessment_group in assessment_groups %}
-					{% if (assessment_result.get(course) and assessment_result.get(course).get(assessment_group) and assessment_result.get(course).get(assessment_group).get(criteria)) %}
-						<td> {{ assessment_result.get(course).get(assessment_group).get(criteria).get("grade") }} </td>
-					{% else %}
-						<td></td>
-					{% endif %}
-				{% endfor %}
-			</tr>
-			{% endfor %}
-		</tbody>
-	</table>
+</div>
+
 {% endfor %}
 
-<hr>
-<h4>{{ _("Attendance")}}</h4> <br>
-<div>
-	Present {{ doc.present_days }} out of {{ doc.max_days }}
+<br>
+
+<div class="row section-break pbi_avoid">
+	<div class="col-xs-6 column-break">	
+		<h4>{{ _("Student Attendance")}}</h4> <br>
+		<div>
+			Present {{ doc.attendance.get("Present") if doc.attendance.get("Present") != None else '0' }} days
+			out of {{ doc.attendance.get("Present") + doc.attendance.get("Absent") }}
+		</div>
+	</div>
+
+	<div class="col-xs-6 column-break">	
+		<h4>{{ _("Parents Teacher Meeting Attendance")}}</h4> <br>
+		<div>
+			Present {{ doc.parents_attendance if doc.parents_attendance != None else '0' }}
+			out of {{ doc.parents_meeting if doc.parents_meeting != None else '0' }}
+		</div>
+	</div>
 </div>
 
-<hr>
-<h4>{{ _("Parents Meeting Attendance")}}</h4> <br>
-<div>
-	Present {{ doc.parents_attendance }} out of {{ doc.parents_meeting }}
+{% if doc.assessment_terms %}
+<div class="row section-break pb_before">
+	<div class="col-xs-12">
+		<p> {{ doc.assessment_terms }} </p>
+	</div>
 </div>
-</div>
\ No newline at end of file
+{% endif %}
+</div>
diff --git a/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.js b/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.js
index 11aae17..d5103ca 100644
--- a/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.js
+++ b/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.js
@@ -22,11 +22,45 @@
 	refresh: function(frm) {
 		frm.disable_save();
 		frm.page.clear_indicator();
-		frm.fields_dict.preview_report_card.$input.addClass("btn-primary");
+		frm.page.set_primary_action(__('Print Report Card'), () => {
+			let url = "/api/method/erpnext.education.doctype.student_report_generation_tool.student_report_generation_tool.preview_report_card";
+			open_url_post(url, frm.doc, true);
+		});
 	},
 
-	preview_report_card: function(frm) {
-		let url = "/api/method/erpnext.education.doctype.student_report_generation_tool.student_report_generation_tool.preview_report_card";
-		open_url_post(url, frm.doc);
+	student: function(frm) {
+		if (frm.doc.student) {
+			frappe.call({
+				method:"erpnext.education.api.get_current_enrollment",
+				args: {
+					"student": frm.doc.student,
+					"academic_year": frm.doc.academic_year
+				},
+				callback: function(r) {
+					if(r){
+						$.each(r.message, function(i, d) {
+							if (frm.fields_dict.hasOwnProperty(i)) {
+								frm.set_value(i, d);
+							}
+						});
+					}
+				}
+			});
+		}
+	},
+
+	terms: function(frm) {
+		if(frm.doc.terms) {
+			return frappe.call({
+				method: 'erpnext.setup.doctype.terms_and_conditions.terms_and_conditions.get_terms_and_conditions',
+				args: {
+					template_name: frm.doc.terms,
+					doc: frm.doc
+				},
+				callback: function(r) {
+					frm.set_value("assessment_terms", r.message);
+				}
+			});
+		}
 	}
 });
diff --git a/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.json b/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.json
index 63f1a89..88c59c2 100644
--- a/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.json
+++ b/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.json
@@ -18,19 +18,19 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "academic_year", 
+   "fieldname": "student", 
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_global_search": 0, 
-   "in_list_view": 1, 
+   "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Academic Year", 
+   "label": "Student", 
    "length": 0, 
    "no_copy": 0, 
-   "options": "Academic Year", 
+   "options": "Student", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -49,8 +49,8 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "academic_term", 
-   "fieldtype": "Link", 
+   "fieldname": "student_name", 
+   "fieldtype": "Read Only", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
@@ -58,10 +58,9 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Academic Term", 
+   "label": "Student Name", 
    "length": 0, 
    "no_copy": 0, 
-   "options": "Academic Term", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -80,7 +79,38 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "student", 
+   "fieldname": "program", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 1, 
+   "in_standard_filter": 0, 
+   "label": "Program", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Program", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 1, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "fieldname": "student_batch", 
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -89,10 +119,101 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Student", 
+   "label": "Batch", 
    "length": 0, 
    "no_copy": 0, 
-   "options": "Student", 
+   "options": "Student Batch Name", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "fieldname": "include_all_assessment", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Include All Assessment Group", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "fieldname": "show_marks", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Show Marks", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "default": "1", 
+   "fieldname": "add_letterhead", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Add letterhead", 
+   "length": 0, 
+   "no_copy": 0, 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -171,7 +292,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "program", 
+   "fieldname": "academic_year", 
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -180,10 +301,73 @@
    "in_global_search": 0, 
    "in_list_view": 1, 
    "in_standard_filter": 0, 
-   "label": "Program", 
+   "label": "Academic Year", 
    "length": 0, 
    "no_copy": 0, 
-   "options": "Program", 
+   "options": "Academic Year", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 1, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "fieldname": "academic_term", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Academic Term", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Academic Term", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "depends_on": "add_letterhead", 
+   "fieldname": "letter_head", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Letter Head", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Letter Head", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -211,96 +395,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Attendance Print Section", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "max_days", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Institution Open (Days)", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "present_days", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Student Present (Days)", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_10", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
+   "label": "Print Section", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
@@ -330,7 +425,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Total Parent's Meeting", 
+   "label": "Total Parents Teacher Meeting", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
@@ -360,7 +455,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Parent Present", 
+   "label": "Attended by Parents", 
    "length": 0, 
    "no_copy": 0, 
    "options": "", 
@@ -382,8 +477,8 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "section_break_9", 
-   "fieldtype": "Section Break", 
+   "fieldname": "terms", 
+   "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
@@ -391,8 +486,10 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
+   "label": "Terms", 
    "length": 0, 
    "no_copy": 0, 
+   "options": "Terms and Conditions", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -411,8 +508,8 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "preview_report_card", 
-   "fieldtype": "Button", 
+   "fieldname": "assessment_terms", 
+   "fieldtype": "Text Editor", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
@@ -420,7 +517,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Print Report Card", 
+   "label": "Assessment Terms", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
@@ -446,7 +543,7 @@
  "issingle": 1, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2018-03-16 01:56:31.095554", 
+ "modified": "2018-03-20 17:57:53.936119", 
  "modified_by": "Administrator", 
  "module": "Education", 
  "name": "Student Report Generation Tool", 
diff --git a/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.py b/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.py
index 60f0c8f..7b2e007 100644
--- a/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.py
+++ b/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.py
@@ -16,60 +16,76 @@
 
 
 @frappe.whitelist()
-def preview_report_card(program, assessment_group, academic_year, academic_term=None, student=None, student_group=None,
-		max_days=None, present_days=None, parents_meeting=None, parents_attendance=None):
-	doc = frappe._dict()
+def preview_report_card(**kwargs):
+	doc = frappe._dict(**kwargs)
+	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
 
-	# doc.program = program
-	doc.assessment_group = assessment_group
-	doc.academic_year = academic_year
-	doc.max_days = max_days
-	doc.present_days = present_days
-	doc.parents_meeting = parents_meeting
-	doc.parents_attendance = parents_attendance
-	if academic_term:
-		doc.academic_term = academic_term
-	if student_group:
-		doc.student_group = student_group
-	if student:
-		doc.students = [student]
-
-	if not doc.students and not doc.student_group:
-		frappe.throw("Please select the Student or Student Group")
-
-	values = get_formatted_result(doc, get_course=True, get_all_assessment_groups=True)
-	student_details = values.get("student_details")
-	assessment_result = values.get("assessment_result").get(doc.students[0])
+	# 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)
-	assessment_groups = get_child_assessment_groups(doc.assessment_group)
 
-	if program:
-		doc.program = program
+	# get the assessment group as per the user selection
+	if int(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
+			"course_criteria": course_criteria,
+			"letterhead": letterhead.content,
+			"add_letterhead": int(doc.add_letterhead) if int(doc.add_letterhead) else 0
 		})
+	final_template = frappe.render_template(base_template_path, {"body": html, "title": "Report Card"})
 
-	final_template = frappe.render_template(base_template_path, {
-		"body": html,
-		"title": "Report Card"
-	})
-
-	frappe.response.filename = "Report Card.pdf"
+	frappe.response.filename = "Report Card " + doc.students[0] + ".pdf"
 	frappe.response.filecontent = get_pdf(final_template)
 	frappe.response.type = "download"
 
+
 def get_courses_criteria(courses):
 	course_criteria = frappe._dict()
 	for course in courses:
 		course_criteria[course] = [d.assessment_criteria for d in frappe.get_all("Course Assessment Criteria",
 			fields=["assessment_criteria"], filters={"parent": course})]
 	return course_criteria
+
+
+def get_attendance_count(student, academic_year, academic_term=None):
+	if academic_year:
+		from_date, to_date = frappe.db.get_value("Academic Year", academic_year, ["year_start_date", "year_end_date"])
+	elif academic_term:
+		from_date, to_date = frappe.db.get_value("Academic Term", academic_term, ["term_start_date", "term_end_date"])
+	if from_date and to_date:
+		attendance = dict(frappe.db.sql('''select status, count(student) as no_of_days
+			from `tabStudent Attendance` where student = %s 
+			and date between %s and %s group by status''',
+			(student, from_date, to_date)))
+		if "Absent" not in attendance.keys():
+			attendance["Absent"] = 0
+		if "Present" not in attendance.keys():
+			attendance["Present"] = 0
+		return attendance
+	else:
+		frappe.throw("Provide the academic year and set the starting and ending date.") 
\ No newline at end of file