fixes as per the review
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js
index 9bc649f..61ede97 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.js
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js
@@ -490,7 +490,6 @@
 				}
 			},
 			callback: function(r, rt) {
-				console.log(r, rt);
 				if(r.message) {
 					var total_positive_outstanding = 0;
 					var total_negative_outstanding = 0;
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py
index bf2213e..6eab2c4 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py
@@ -100,12 +100,9 @@
 			if not self.party:
 				frappe.throw(_("Party is mandatory"))
 
-			self.party_name = frappe.db.get_value(self.party_type, self.party,
-				self.party_type.lower() + "_name")
-
 			_party_name = "title" if self.party_type == "Student" else self.party_type.lower() + "_name"
 			self.party_name = frappe.db.get_value(self.party_type, self.party, _party_name)
-		
+
 		if self.party:
 			if not self.party_balance:
 				self.party_balance = get_balance_on(party_type=self.party_type,
@@ -509,11 +506,11 @@
 
 	negative_outstanding_invoices = []
 	if (args.get("party_type") != "Student"):
-		negative_outstanding_invoices = get_negative_outstanding_invoices(args.get("party_type"), 
+		negative_outstanding_invoices = get_negative_outstanding_invoices(args.get("party_type"),
 			args.get("party"), args.get("party_account"), total_field)
 
 	# Get positive outstanding sales /purchase invoices/ Fees
-	outstanding_invoices = get_outstanding_invoices(args.get("party_type"), args.get("party"), 
+	outstanding_invoices = get_outstanding_invoices(args.get("party_type"), args.get("party"),
 		args.get("party_account"))
 
 	for d in outstanding_invoices:
@@ -694,9 +691,11 @@
 		party_type = "Supplier"
 	elif dt in ("Expense Claim"):
 		party_type = "Employee"
+	elif dt in ("Fees"):
+		party_type = "Student"
 
 	# party account
-	if dt == "Sales Invoice":
+	if dt in ("Sales Invoice", "Fees"):
 		party_account = doc.debit_to
 	elif dt == "Purchase Invoice":
 		party_account = doc.credit_to
@@ -706,7 +705,7 @@
 	party_account_currency = doc.get("party_account_currency") or get_account_currency(party_account)
 
 	# payment type
-	if (dt == "Sales Order" or (dt=="Sales Invoice" and doc.outstanding_amount > 0)) \
+	if (dt == "Sales Order" or (dt in ("Sales Invoice", "Fees") and doc.outstanding_amount > 0)) \
 		or (dt=="Purchase Invoice" and doc.outstanding_amount < 0):
 			payment_type = "Receive"
 	else:
@@ -722,6 +721,9 @@
 	elif dt in ("Expense Claim"):
 		grand_total = doc.total_sanctioned_amount
 		outstanding_amount = doc.total_sanctioned_amount - doc.total_amount_reimbursed
+	elif dt == "Fees":
+		grand_total = doc.grand_total
+		outstanding_amount = doc.outstanding_amount
 	else:
 		total_field = "base_grand_total" if party_account_currency == doc.company_currency else "grand_total"
 		grand_total = flt(doc.get(total_field))
diff --git a/erpnext/config/schools.py b/erpnext/config/schools.py
index 6d2a9c0..b984578 100644
--- a/erpnext/config/schools.py
+++ b/erpnext/config/schools.py
@@ -153,9 +153,6 @@
 				{
 					"type": "doctype",
 					"name": "Fees"
-				},{
-					"type": "doctype",
-					"name": "Fee Schedule"
 				},
 				{
 					"type": "doctype",
diff --git a/erpnext/schools/api.py b/erpnext/schools/api.py
index 13aa74b..e387512 100644
--- a/erpnext/schools/api.py
+++ b/erpnext/schools/api.py
@@ -358,6 +358,22 @@
 @frappe.whitelist()
 def get_current_enrollment(student, academic_year=None):
 	current_academic_year = academic_year or frappe.defaults.get_defaults().academic_year
-	return frappe.get_all("Program Enrollment", fields=["name", "student", "student_name", "student_category",
+	program_enrollment_list = frappe.db.sql('''
+		select
+			name as program_enrollment, student_name, program, student_batch_name as student_batch,
+			student_category, academic_term, academic_year
+		from 
+			`tabProgram Enrollment`
+		where 
+			student = %s and academic_year = %s
+		order by creation''', (student, current_academic_year), as_dict=1)
+
+	'''
+	program_enrollment_list = frappe.get_all("Program Enrollment", fields=["name", "student", "student_name", "student_category",
 			"program", "student_batch_name", "academic_year", "academic_term"], filters={"student":student,
-			"academic_year": current_academic_year})[0]
+			"academic_year": current_academic_year})
+	'''
+	if program_enrollment_list:
+		return program_enrollment_list[0]
+	else:
+		return None
diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.json b/erpnext/schools/doctype/fee_schedule/fee_schedule.json
index dd793b2..44151d6 100644
--- a/erpnext/schools/doctype/fee_schedule/fee_schedule.json
+++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.json
@@ -515,7 +515,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Total Amount/Student", 
+   "label": "Total Amount per Student", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
@@ -601,7 +601,7 @@
  "issingle": 1, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2017-07-28 11:14:28.695618", 
+ "modified": "2017-08-02 19:12:15.908822", 
  "modified_by": "Administrator", 
  "module": "Schools", 
  "name": "Fee Schedule", 
diff --git a/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py
index f6cc6f1..11d5697 100644
--- a/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py
+++ b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py
@@ -3,7 +3,6 @@
 # For license information, please see license.txt
 
 from __future__ import unicode_literals
-import frappe
 from frappe.model.document import Document
 
 class FeeScheduleProgram(Document):
diff --git a/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py
index e1e729c..776534d 100644
--- a/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py
+++ b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py
@@ -3,7 +3,6 @@
 # For license information, please see license.txt
 
 from __future__ import unicode_literals
-import frappe
 from frappe.model.document import Document
 
 class FeeScheduleStudentGroup(Document):
diff --git a/erpnext/schools/doctype/fee_structure/fee_structure.json b/erpnext/schools/doctype/fee_structure/fee_structure.json
index c0daa33..da8d7c9 100644
--- a/erpnext/schools/doctype/fee_structure/fee_structure.json
+++ b/erpnext/schools/doctype/fee_structure/fee_structure.json
@@ -427,7 +427,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Debit To", 
+   "label": "Academic Receivable Account", 
    "length": 0, 
    "no_copy": 0, 
    "options": "Account", 
@@ -458,7 +458,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Credit To", 
+   "label": "Income Account", 
    "length": 0, 
    "no_copy": 0, 
    "options": "Account", 
@@ -578,8 +578,8 @@
  "istable": 0, 
  "max_attachments": 0, 
  "menu_index": 0, 
- "modified": "2017-07-27 12:52:12.439685", 
- "modified_by": "manas@erpnext.com", 
+ "modified": "2017-08-02 16:31:35.861158", 
+ "modified_by": "Administrator", 
  "module": "Schools", 
  "name": "Fee Structure", 
  "name_case": "", 
diff --git a/erpnext/schools/doctype/fees/fees.js b/erpnext/schools/doctype/fees/fees.js
index 20cb5bc..b254d72 100644
--- a/erpnext/schools/doctype/fees/fees.js
+++ b/erpnext/schools/doctype/fees/fees.js
@@ -1,13 +1,17 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-cur_frm.add_fetch("student", "title", "student_name");
-cur_frm.add_fetch("student", "student_email_id", "student_email");
-cur_frm.add_fetch("company", "default_receivable_account", "debit_to");
-cur_frm.add_fetch("company", "default_income_account", "against_income_account");
-cur_frm.add_fetch("company", "cost_center", "cost_center");
 
 frappe.ui.form.on("Fees", {
+	setup: function(frm) {
+		frm.add_fetch("student", "title", "student_name");
+		frm.add_fetch("student", "student_email_id", "student_email");
+		frm.add_fetch("company", "default_receivable_account", "debit_to");
+		frm.add_fetch("company", "default_income_account", "against_income_account");
+		frm.add_fetch("company", "cost_center", "cost_center");
+
+	},
+
 	onload: function(frm){
 		frm.set_query("academic_term",function(){
 			return{
@@ -20,7 +24,7 @@
 		frm.set_query("fee_structure",function(){
 			return{
 				"filters":{
-					"academic_term": (frm.doc.academic_term)
+					"academic_year": (frm.doc.academic_year)
 				}
 			};
 		});
@@ -85,14 +89,9 @@
 				},
 				callback: function(r) {
 					if(r){
-						console.log(r);
-						frm.set_value("student_name", r.message.student_name);
-						frm.set_value("program_enrollment", r.message.name);
-						frm.set_value("program", r.message.program);
-						frm.set_value("student_batch", r.message.student_batch_name);
-						frm.set_value("student_category", r.message.student_category);
-						frm.set_value("academic_term", r.message.academic_term);
-						frm.set_value("academic_year", r.message.academic_year);
+						$.each(r.message, function(i, d) {
+							frm.set_value(i,d)
+						});
 					}
 				}
 			});
@@ -100,25 +99,29 @@
 	},
 
 	make_payment_request: function(frm) {
-		frappe.call({
-			method:"erpnext.accounts.doctype.payment_request.payment_request.make_payment_request",
-			args: {
-				"dt": frm.doc.doctype,
-				"dn": frm.doc.name,
-				"recipient_id": frm.doc.contact_email
-			},
-			callback: function(r) {
-				if(!r.exc){
-					var doc = frappe.model.sync(r.message);
-					frappe.set_route("Form", doc[0].doctype, doc[0].name);
+		if (!frm.doc.contact_email) {
+			frappe.msgprint(__("Please set the Email ID for the Student to send the Payment Request"))
+		} else {		
+			frappe.call({
+				method:"erpnext.accounts.doctype.payment_request.payment_request.make_payment_request",
+				args: {
+					"dt": frm.doc.doctype,
+					"dn": frm.doc.name,
+					"recipient_id": frm.doc.contact_email
+				},
+				callback: function(r) {
+					if(!r.exc){
+						var doc = frappe.model.sync(r.message);
+						frappe.set_route("Form", doc[0].doctype, doc[0].name);
+					}
 				}
-			}
-		});
+			});
+		}
 	},
 
 	make_payment_entry: function(frm) {
 		return frappe.call({
-			method: "erpnext.schools.doctype.fees.fees.get_payment_entry",
+			method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry",
 			args: {
 				"dt": frm.doc.doctype,
 				"dn": frm.doc.name
diff --git a/erpnext/schools/doctype/fees/fees.json b/erpnext/schools/doctype/fees/fees.json
index 28cc25e..435697a 100644
--- a/erpnext/schools/doctype/fees/fees.json
+++ b/erpnext/schools/doctype/fees/fees.json
@@ -142,9 +142,10 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "default": "0", 
    "fieldname": "include_payment", 
    "fieldtype": "Check", 
-   "hidden": 0, 
+   "hidden": 1, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
@@ -479,7 +480,7 @@
    "columns": 0, 
    "fieldname": "student_email", 
    "fieldtype": "Data", 
-   "hidden": 0, 
+   "hidden": 1, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
@@ -661,7 +662,7 @@
    "columns": 0, 
    "fieldname": "currency", 
    "fieldtype": "Link", 
-   "hidden": 0, 
+   "hidden": 1, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
@@ -1123,7 +1124,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Debit To", 
+   "label": "Academic Receivable Account", 
    "length": 0, 
    "no_copy": 0, 
    "options": "Account", 
@@ -1154,7 +1155,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Credit To", 
+   "label": "Income Account", 
    "length": 0, 
    "no_copy": 0, 
    "options": "Account", 
@@ -1242,8 +1243,8 @@
  "istable": 0, 
  "max_attachments": 0, 
  "menu_index": 0, 
- "modified": "2017-07-27 12:58:44.197451", 
- "modified_by": "manas@erpnext.com", 
+ "modified": "2017-08-03 16:02:06.001422", 
+ "modified_by": "Administrator", 
  "module": "Schools", 
  "name": "Fees", 
  "name_case": "", 
diff --git a/erpnext/schools/doctype/fees/fees.py b/erpnext/schools/doctype/fees/fees.py
index 8013194..c27f818 100644
--- a/erpnext/schools/doctype/fees/fees.py
+++ b/erpnext/schools/doctype/fees/fees.py
@@ -25,9 +25,7 @@
 
 	def validate(self):
 		self.calculate_total()
-		'''
-		set missing field here and validate the accounts
-		'''
+		# set missing field here and validate the accounts
 
 	def calculate_total(self):
 		"""Calculates total amount."""
@@ -41,7 +39,7 @@
 
 		self.make_gl_entries()
 
-		if self.send_payment_request:
+		if self.send_payment_request and self.student_email:
 			pr = make_payment_request(dt="Fees", dn=self.name, recipient_id=self.contact_email,
 					submit_doc=True, use_dummy_message=True)
 			frappe.msgprint(_("Payment request {0} created").format(getlink("Payment Request", pr.name)))
@@ -51,22 +49,22 @@
 		if not self.grand_total:
 			return
 		student_gl_entries =  self.get_gl_dict({
-							"account": self.debit_to,
-							"party_type": "Student",
-							"party": self.student,
-							"against": self.against_income_account,
-							"debit": self.grand_total,
-							"debit_in_account_currency": self.grand_total,
-							"against_voucher": self.name,
-							"against_voucher_type": self.doctype
-						})
+			"account": self.debit_to,
+			"party_type": "Student",
+			"party": self.student,
+			"against": self.against_income_account,
+			"debit": self.grand_total,
+			"debit_in_account_currency": self.grand_total,
+			"against_voucher": self.name,
+			"against_voucher_type": self.doctype
+		})
 		fee_gl_entry = self.get_gl_dict({
-							"account": self.against_income_account,
-							"against": self.student,
-							"credit": self.grand_total,
-							"credit_in_account_currency": self.grand_total,
-							"cost_center": self.cost_center
-						})
+			"account": self.against_income_account,
+			"against": self.student,
+			"credit": self.grand_total,
+			"credit_in_account_currency": self.grand_total,
+			"cost_center": self.cost_center
+		})
 		from erpnext.accounts.general_ledger import make_gl_entries
 		make_gl_entries([student_gl_entries, fee_gl_entry], cancel=(self.docstatus == 2),
 			update_outstanding="Yes", merge_entries=False)
@@ -80,66 +78,6 @@
 			order by due_date asc limit {0} , {1}'''
 			.format(limit_start, limit_page_length), student, as_dict = True)
 
-
-@frappe.whitelist()
-def get_payment_entry(dt, dn, bank_account=None):
-	doc = frappe.get_doc(dt, dn)
-
-	party_type = "Student"
-	party_account = doc.debit_to
-	party_account_currency = doc.get("currency") or get_account_currency(party_account)
-
-	# payment type
-	if (doc.outstanding_amount > 0):
-			payment_type = "Receive"
-
-	# amounts
-	grand_total = outstanding_amount = 0
-	grand_total = doc.grand_total
-	outstanding_amount = doc.outstanding_amount
-
-	# bank or cash
-	bank = get_default_bank_cash_account(doc.company, "Bank")
-
-	paid_amount = received_amount = 0
-	if party_account_currency == bank.account_currency:
-		paid_amount = received_amount = abs(outstanding_amount)
-	elif payment_type == "Receive":
-		paid_amount = abs(outstanding_amount)
-	else:
-		received_amount = abs(outstanding_amount)
-
-	pe = frappe.new_doc("Payment Entry")
-	pe.payment_type = payment_type
-	pe.company = doc.company
-	pe.posting_date = nowdate()
-	pe.mode_of_payment = doc.get("mode_of_payment")
-	pe.party_type = party_type
-	pe.party = doc.student
-	pe.party_name = doc.student_name
-	pe.paid_from = party_account if payment_type=="Receive" else bank.account
-	pe.paid_to = party_account if payment_type=="Pay" else bank.account
-	pe.paid_from_account_currency = party_account_currency if payment_type=="Receive" else bank.account_currency
-	pe.paid_to_account_currency = party_account_currency if payment_type=="Pay" else bank.account_currency
-	pe.paid_amount = paid_amount
-	pe.received_amount = received_amount
-	pe.allocate_payment_amount = 1
-	pe.letter_head = doc.get("letter_head")
-
-	pe.append("references", {
-		"reference_doctype": dt,
-		"reference_name": dn,
-		"due_date": doc.get("due_date"),
-		"total_amount": grand_total,
-		"outstanding_amount": outstanding_amount,
-		"allocated_amount": outstanding_amount
-	})
-
-	pe.setup_party_account_field()
-	pe.set_missing_values()
-	return pe
-
-
 def get_list_context(context=None):
 	return {
 		"show_sidebar": True,
@@ -148,4 +86,4 @@
 		"title": _("Fees"),
 		"get_list": get_fee_list,
 		"row_template": "templates/includes/fee/fee_row.html"
-	}
+	}
\ No newline at end of file
diff --git a/erpnext/schools/doctype/fees/fees_list.js b/erpnext/schools/doctype/fees/fees_list.js
index c7117f2..52e1c4b 100644
--- a/erpnext/schools/doctype/fees/fees_list.js
+++ b/erpnext/schools/doctype/fees/fees_list.js
@@ -2,11 +2,11 @@
 	add_fields: ["grand_total", "outstanding_amount", "due_date"],
 	get_indicator: function(doc) {
 		if(flt(doc.outstanding_amount)==0) {
-			return [__("Paid"), "green", "outstanding_amount,=,0"]
+			return [__("Paid"), "green", "outstanding_amount,=,0"];
 		} else if (flt(doc.outstanding_amount) > 0 && doc.due_date >= frappe.datetime.get_today()) {
-			return [__("Unpaid"), "orange", "outstanding_amount,>,0|due_date,>,Today"]
+			return [__("Unpaid"), "orange", "outstanding_amount,>,0|due_date,>,Today"];
 		} else if (flt(doc.outstanding_amount) > 0 && doc.due_date < frappe.datetime.get_today()) {
-			return [__("Overdue"), "red", "outstanding_amount,>,0|due_date,<=,Today"]
+			return [__("Overdue"), "red", "outstanding_amount,>,0|due_date,<=,Today"];
 		}
 	}
 };
\ No newline at end of file
diff --git a/erpnext/schools/doctype/fees/test_fees.js b/erpnext/schools/doctype/fees/test_fees.js
new file mode 100644
index 0000000..8ec7eec
--- /dev/null
+++ b/erpnext/schools/doctype/fees/test_fees.js
@@ -0,0 +1,23 @@
+/* eslint-disable */
+// rename this file from _test_[name] to test_[name] to activate
+// and remove above this line
+
+QUnit.test("test: Fees", function (assert) {
+	let done = assert.async();
+
+	// number of asserts
+	assert.expect(1);
+
+	frappe.run_serially('Fees', [
+		// insert a new Fees
+		() => frappe.tests.make([
+			// values to be set
+			{key: 'value'}
+		]),
+		() => {
+			assert.equal(cur_frm.doc.key, 'value');
+		},
+		() => done()
+	]);
+
+});