make payment entry for the fees
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js
index d1318d0..9bc649f 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.js
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js
@@ -12,7 +12,8 @@
 
 	setup: function(frm) {
 		frm.set_query("paid_from", function() {
-			var party_account_type = frm.doc.party_type=="Customer" ? "Receivable" : "Payable";
+			var party_account_type = in_list(["Customer", "Student"], frm.doc.party_type) ?
+				"Receivable" : "Payable";
 			var account_types = in_list(["Pay", "Internal Transfer"], frm.doc.payment_type) ?
 				["Bank", "Cash"] : party_account_type;
 
@@ -28,13 +29,14 @@
 		frm.set_query("party_type", function() {
 			return{
 				"filters": {
-					"name": ["in",["Customer","Supplier", "Employee"]],
+					"name": ["in",["Customer","Supplier", "Employee", "Student"]],
 				}
 			}
 		});
 
 		frm.set_query("paid_to", function() {
-			var party_account_type = frm.doc.party_type=="Customer" ? "Receivable" : "Payable";
+			var party_account_type = in_list(["Customer", "Student"], frm.doc.party_type) ?
+				"Receivable" : "Payable";
 			var account_types = in_list(["Receive", "Internal Transfer"], frm.doc.payment_type) ?
 				["Bank", "Cash"] : party_account_type;
 
@@ -72,6 +74,8 @@
 				var doctypes = ["Purchase Order", "Purchase Invoice", "Journal Entry"];
 			} else if (frm.doc.party_type=="Employee") {
 				var doctypes = ["Expense Claim", "Journal Entry"];
+			} else if (frm.doc.party_type=="Student") {
+				var doctypes = ["Fees"];
 			} else {
 				var doctypes = ["Journal Entry"];
 			}
@@ -85,7 +89,7 @@
 			child = locals[cdt][cdn];
 			filters = {"docstatus": 1, "company": doc.company};
 			party_type_doctypes = ['Sales Invoice', 'Sales Order', 'Purchase Invoice', 
-				'Purchase Order', 'Expense Claim'];
+				'Purchase Order', 'Expense Claim', 'Fees'];
 
 			if (in_list(party_type_doctypes, child.reference_doctype)) {
 				filters[doc.party_type.toLowerCase()] = doc.party;
@@ -207,19 +211,13 @@
 				frm.set_value(field, null);
 			});
 		} else {
-			if(!frm.doc.party)
-			{
-				if (frm.doc.payment_type=="Receive"){
-					frm.set_value("party_type", "Customer");
-				}
-			}
-			else
-			{
-				frm.events.party(frm);
+			if(frm.doc.party) {
+				frm.events.party(frm);	
 			}
 
-			if(frm.doc.mode_of_payment)
+			if(frm.doc.mode_of_payment) {
 				frm.events.mode_of_payment(frm);
+			}
 		}
 	},
 
@@ -254,6 +252,7 @@
 					date: frm.doc.posting_date
 				},
 				callback: function(r, rt) {
+					console.log(r, rt);
 					if(r.message) {
 						if(frm.doc.payment_type == "Receive") {
 							frm.set_value("paid_from", r.message.party_account);
@@ -491,6 +490,7 @@
 				}
 			},
 			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 29ad831..bf2213e 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py
@@ -103,6 +103,9 @@
 			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,
@@ -149,7 +152,7 @@
 				frappe.throw(_("Invalid {0}: {1}").format(self.party_type, self.party))
 
 			if self.party_account:
-				party_account_type = "Receivable" if self.party_type=="Customer" else "Payable"
+				party_account_type = "Receivable" if self.party_type in ("Customer", "Student") else "Payable"
 				self.validate_account_type(self.party_account, [party_account_type])
 
 	def validate_bank_accounts(self):
@@ -182,7 +185,9 @@
 				frappe.throw(_("{0} is mandatory").format(self.meta.get_label(field)))
 
 	def validate_reference_documents(self):
-		if self.party_type == "Customer":
+		if self.party_type == "Student":
+			valid_reference_doctypes = ("Fees")
+		elif self.party_type == "Customer":
 			valid_reference_doctypes = ("Sales Order", "Sales Invoice", "Journal Entry")
 		elif self.party_type == "Supplier":
 			valid_reference_doctypes = ("Purchase Order", "Purchase Invoice", "Journal Entry")
@@ -209,13 +214,17 @@
 					else:
 						self.validate_journal_entry()
 
-					if d.reference_doctype in ("Sales Invoice", "Purchase Invoice", "Expense Claim"):
-						if self.party_type=="Customer":
+					if d.reference_doctype in ("Sales Invoice", "Purchase Invoice", "Expense Claim", "Fees"):
+						if self.party_type in ("Customer", "Student"):
 							ref_party_account = ref_doc.debit_to
 						elif self.party_type=="Supplier":
 							ref_party_account = ref_doc.credit_to
 						elif self.party_type=="Employee":
 							ref_party_account = ref_doc.payable_account
+								
+					if d.reference_doctype in ("Sales Invoice", "Purchase Invoice", "Fees"):
+						ref_party_account = ref_doc.debit_to \
+							if self.party_type in ("Customer", "Student") else ref_doc.credit_to
 
 						if ref_party_account != self.party_account:
 							frappe.throw(_("{0} {1} is associated with {2}, but Party Account is {3}")
@@ -397,9 +406,9 @@
 				"against": against_account,
 				"account_currency": self.party_account_currency
 			})
-
-			dr_or_cr = "credit" if self.party_type == "Customer" else "debit"
-
+			
+			dr_or_cr = "credit" if self.party_type in ["Customer", "Student"] else "debit"
+			
 			for d in self.get("references"):
 				gle = party_gl_dict.copy()
 				gle.update({
@@ -498,11 +507,13 @@
 	# Get negative outstanding sales /purchase invoices
 	total_field = "base_grand_total" if party_account_currency == company_currency else "grand_total"
 
-	negative_outstanding_invoices = get_negative_outstanding_invoices(args.get("party_type"),
-		args.get("party"), args.get("party_account"), total_field)
+	negative_outstanding_invoices = []
+	if (args.get("party_type") != "Student"):
+		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
-	outstanding_invoices = get_outstanding_invoices(args.get("party_type"), args.get("party"),
+	# Get positive outstanding sales /purchase invoices/ Fees
+	outstanding_invoices = get_outstanding_invoices(args.get("party_type"), args.get("party"), 
 		args.get("party_account"))
 
 	for d in outstanding_invoices:
@@ -518,9 +529,11 @@
 			d["bill_no"] = frappe.db.get_value(d.voucher_type, d.voucher_no, "bill_no")
 
 	# Get all SO / PO which are not fully billed or aginst which full advance not paid
-	orders_to_be_billed =  get_orders_to_be_billed(args.get("posting_date"),args.get("party_type"), args.get("party"),
-		party_account_currency, company_currency)
-
+	orders_to_be_billed = []
+	if (args.get("party_type") != "Student"):
+		orders_to_be_billed =  get_orders_to_be_billed(args.get("posting_date"),args.get("party_type"),
+			args.get("party"), party_account_currency, company_currency)
+	
 	return negative_outstanding_invoices + outstanding_invoices + orders_to_be_billed
 
 def get_orders_to_be_billed(posting_date, party_type, party, party_account_currency, company_currency):
@@ -634,7 +647,11 @@
 	total_amount = outstanding_amount = exchange_rate = None
 	ref_doc = frappe.get_doc(reference_doctype, reference_name)
 
-	if reference_doctype != "Journal Entry":
+	if reference_doctype == "Fees":
+		total_amount = ref_doc.get("grand_total")
+		exchange_rate = 1
+		outstanding_amount = ref_doc.get("outstanding_amount")
+	elif reference_doctype != "Journal Entry":
 		if party_account_currency == ref_doc.company_currency:
 			if ref_doc.doctype == "Expense Claim":
 				total_amount = ref_doc.total_sanctioned_amount
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py
index 3796877..807ad28 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.py
+++ b/erpnext/accounts/doctype/payment_request/payment_request.py
@@ -61,7 +61,6 @@
 	def set_payment_request_url(self):
 		if self.payment_account:
 			self.payment_url = self.get_payment_url()
-			print (self.payment_url)
 
 		if self.payment_url:
 			self.db_set('payment_url', self.payment_url)
@@ -102,7 +101,6 @@
 
 	def create_payment_entry(self, submit=True):
 		"""create entry"""
-		print ("creating the payment entry")
 		frappe.flags.ignore_account_permission = True
 
 		ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name)
@@ -257,7 +255,6 @@
 		if args.order_type == "Shopping Cart" or args.mute_email:
 			pr.flags.mute_email = True
 
-		print ("comign in creatinf the new dottype")
 		if args.submit_doc:
 			pr.insert(ignore_permissions=True)
 			pr.submit()
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 800ec14..7a787c4 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -583,11 +583,8 @@
 			return
 
 		if not gl_entries:
-			print ("if not gl_entries")
 			gl_entries = self.get_gl_entries()
 
-		print (gl_entries)
-
 		if gl_entries:
 			from erpnext.accounts.general_ledger import make_gl_entries
 
@@ -596,7 +593,6 @@
 
 			make_gl_entries(gl_entries, cancel=(self.docstatus == 2),
 				update_outstanding=update_outstanding, merge_entries=False)
-			# frappe.throw("go ahead bro")
 
 			if update_outstanding == "No":
 				from erpnext.accounts.doctype.gl_entry.gl_entry import update_outstanding_amt
@@ -613,22 +609,18 @@
 				delete_gl_entries(voucher_type=self.doctype, voucher_no=self.name)
 
 	def get_gl_entries(self, warehouse_account=None):
-		print ("inside the get_gl_entries")
 		from erpnext.accounts.general_ledger import merge_similar_entries
 
 		gl_entries = []
 
 		self.make_customer_gl_entry(gl_entries)
-		print ("make cuustomer gl entry", gl_entries)
 
 		self.make_tax_gl_entries(gl_entries)
 
 		self.make_item_gl_entries(gl_entries)
-		print ("make item gl entry", gl_entries)
 
 		# merge gl entries before adding pos entries
 		gl_entries = merge_similar_entries(gl_entries)
-		print ("after merged gl entry", gl_entries)
 
 		self.make_pos_gl_entries(gl_entries)
 		self.make_gle_for_change_amount(gl_entries)
diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py
index 23715fa..c575d59 100644
--- a/erpnext/accounts/general_ledger.py
+++ b/erpnext/accounts/general_ledger.py
@@ -116,7 +116,6 @@
 		currency=frappe.db.get_value("Company", gl_map[0].company, "default_currency", cache=True))
 
 	debit_credit_diff = 0.0
-	print ("gl map", gl_map)
 	for entry in gl_map:
 		entry.debit = flt(entry.debit, precision)
 		entry.credit = flt(entry.credit, precision)
diff --git a/erpnext/schools/api.py b/erpnext/schools/api.py
index 41d4a0d..13aa74b 100644
--- a/erpnext/schools/api.py
+++ b/erpnext/schools/api.py
@@ -354,3 +354,10 @@
 			if email:
 				email_list.append(email)	
 	add_subscribers(name, email_list)
+
+@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", "student_batch_name", "academic_year", "academic_term"], filters={"student":student,
+			"academic_year": current_academic_year})[0]
diff --git a/erpnext/schools/doctype/fee_request/fee_request.js b/erpnext/schools/doctype/fee_request/fee_request.js
index 30f8e5b..830940e 100644
--- a/erpnext/schools/doctype/fee_request/fee_request.js
+++ b/erpnext/schools/doctype/fee_request/fee_request.js
@@ -3,7 +3,7 @@
 
 frappe.ui.form.on('Fee Request', {
 	refresh: function(frm) {
-		frm.disable_save();	
+		frm.disable_save();
 	},
 	fee_structure: function(frm) {
 		if (frm.doc.fee_structure) {
diff --git a/erpnext/schools/doctype/fee_request/fee_request.py b/erpnext/schools/doctype/fee_request/fee_request.py
index a3552b9..f8cb554 100644
--- a/erpnext/schools/doctype/fee_request/fee_request.py
+++ b/erpnext/schools/doctype/fee_request/fee_request.py
@@ -7,9 +7,6 @@
 from frappe import _
 from frappe.model.document import Document
 from frappe.model.mapper import get_mapped_doc
-from erpnext.schools.api import get_student_group_students
-from erpnext.schools.doctype.student_group.student_group import get_program_enrollment
-from frappe.model.mapper import get_mapped_doc
 from frappe.utils import money_in_words
 
 
diff --git a/erpnext/schools/doctype/fee_request/test_fee_request.py b/erpnext/schools/doctype/fee_request/test_fee_request.py
index a76ea30..f419e94 100644
--- a/erpnext/schools/doctype/fee_request/test_fee_request.py
+++ b/erpnext/schools/doctype/fee_request/test_fee_request.py
@@ -3,7 +3,6 @@
 # See license.txt
 from __future__ import unicode_literals
 
-import frappe
 import unittest
 
 class TestFeeRequest(unittest.TestCase):
diff --git a/erpnext/schools/doctype/fee_request_program/fee_request_program.py b/erpnext/schools/doctype/fee_request_program/fee_request_program.py
index a4473b9..61ce1d5 100644
--- a/erpnext/schools/doctype/fee_request_program/fee_request_program.py
+++ b/erpnext/schools/doctype/fee_request_program/fee_request_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 FeeRequestProgram(Document):
diff --git a/erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.py b/erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.py
index ecbc3ab..777d225 100644
--- a/erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.py
+++ b/erpnext/schools/doctype/fee_request_student_group/fee_request_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 FeeRequestStudentGroup(Document):
diff --git a/erpnext/schools/doctype/fee_structure/fee_structure.js b/erpnext/schools/doctype/fee_structure/fee_structure.js
index fa46278..7619cf5 100644
--- a/erpnext/schools/doctype/fee_structure/fee_structure.js
+++ b/erpnext/schools/doctype/fee_structure/fee_structure.js
@@ -1,3 +1,24 @@
+// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
+
+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('Fee Structure', {
+	onload: function(frm) {
+		frm.set_query("debit_to", function(doc) {
+			return {
+				filters: {
+					'account_type': 'Receivable',
+					'is_group': 0,
+					'company': doc.company
+				}
+			};
+		});
+	}
+});
+
 frappe.ui.form.on("Fee Component", {
 	amount: function(frm) {
 		var total_amount = 0;
diff --git a/erpnext/schools/doctype/fee_structure/fee_structure.json b/erpnext/schools/doctype/fee_structure/fee_structure.json
index f5b48dc..c0daa33 100644
--- a/erpnext/schools/doctype/fee_structure/fee_structure.json
+++ b/erpnext/schools/doctype/fee_structure/fee_structure.json
@@ -50,6 +50,37 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fieldname": "student_category", 
+   "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": "Student Category", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Student Category", 
+   "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": "program", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -83,37 +114,6 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "student_category", 
-   "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": "Student Category", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Student Category", 
-   "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_2", 
    "fieldtype": "Column Break", 
    "hidden": 0, 
@@ -380,6 +380,190 @@
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "fieldname": "accounts", 
+   "fieldtype": "Section 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": "Accounts", 
+   "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": "", 
+   "fieldname": "debit_to", 
+   "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": "Debit To", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Account", 
+   "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": "against_income_account", 
+   "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": "Credit To", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Account", 
+   "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_16", 
+   "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, 
+   "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": "cost_center", 
+   "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": "Cost Center", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Cost Center", 
+   "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": "company", 
+   "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": "Company", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Company", 
+   "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
   }
  ], 
  "has_web_view": 0, 
@@ -394,8 +578,8 @@
  "istable": 0, 
  "max_attachments": 0, 
  "menu_index": 0, 
- "modified": "2017-07-18 15:02:29.909472", 
- "modified_by": "Administrator", 
+ "modified": "2017-07-27 12:52:12.439685", 
+ "modified_by": "manas@erpnext.com", 
  "module": "Schools", 
  "name": "Fee Structure", 
  "name_case": "", 
diff --git a/erpnext/schools/doctype/fees/fees.js b/erpnext/schools/doctype/fees/fees.js
index d5e71fe..20cb5bc 100644
--- a/erpnext/schools/doctype/fees/fees.js
+++ b/erpnext/schools/doctype/fees/fees.js
@@ -1,5 +1,11 @@
+// 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", {
 	onload: function(frm){
@@ -19,7 +25,7 @@
 			};
 		});
 
-		// debit account for booking the fee 
+		// debit account for booking the fee
 		frm.set_query("debit_to", function(doc) {
 			return {
 				filters: {
@@ -27,11 +33,11 @@
 					'is_group': 0,
 					'company': doc.company
 				}
-			}
+			};
 		});
 
 		if (!frm.doc.posting_date) {
-			frm.doc.posting_date = frappe.datetime.get_today()		
+			frm.doc.posting_date = frappe.datetime.get_today();
 		}
 	},
 
@@ -57,56 +63,75 @@
 		}
 		if(frm.doc.docstatus===1 && frm.doc.outstanding_amount>0) {
 			frm.add_custom_button(__("Payment Request"), function() {
-				frm.events.make_payment_request(frm)
+				frm.events.make_payment_request(frm);
 			}, __("Make"));
 			frm.page.set_inner_btn_group_as_primary(__("Make"));
 		}
 		if(frm.doc.docstatus===1 && frm.doc.outstanding_amount!=0) {
 			frm.add_custom_button(__("Payment"), function() {
-				frm.events.make_payment_entry(frm)
+				frm.events.make_payment_entry(frm);
 			}, __("Make"));
 			frm.page.set_inner_btn_group_as_primary(__("Make"));
 		}
 	},
-		// if (frm.doc.docstatus === 1 && (frm.doc.total_amount > frm.doc.paid_amount)) {
-		// 	frm.add_custom_button(__("Collect Fees"), function() {
-		// 		frappe.prompt({fieldtype:"Float", label: __("Amount Paid"), fieldname:"amt"},
-		// 			function(data) {
-		// 				frappe.call({
-		// 					method:"erpnext.schools.api.collect_fees",
-		// 					args: {
-		// 						"fees": frm.doc.name,
-		// 						"amt": data.amt
-		// 					},
-		// 					callback: function(r) {
-		// 						frm.doc.paid_amount = r.message
-		// 						frm.doc.outstanding_amount = frm.doc.total_amount - r.message
-		// 						frm.refresh()
-		// 					}
-		// 				});
-		// 			}, __("Enter Paid Amount"), __("Collect"));
-		// 	});
-		// }
+
+	student: function(frm) {
+		if (frm.doc.student) {
+			frappe.call({
+				method:"erpnext.schools.api.get_current_enrollment",
+				args: {
+					"student": frm.doc.student,
+					"academic_year": frm.doc.academic_year
+				},
+				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);
+					}
+				}
+			});
+		}
+	},
 
 	make_payment_request: function(frm) {
 		frappe.call({
 			method:"erpnext.accounts.doctype.payment_request.payment_request.make_payment_request",
 			args: {
-				"dt": cur_frm.doc.doctype,
-				"dn": cur_frm.doc.name,
-				"recipient_id": cur_frm.doc.contact_email
+				"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", r.message.doctype, r.message.name);
+					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",
+			args: {
+				"dt": frm.doc.doctype,
+				"dn": frm.doc.name
+			},
+			callback: function(r) {
+				var doc = frappe.model.sync(r.message);
+				frappe.set_route("Form", doc[0].doctype, doc[0].name);
+			}
+		});
 	},
 
 	set_posting_time: function(frm) {
-		frm.refresh()
+		frm.refresh();
 	},
 
 	program: function(frm) {
diff --git a/erpnext/schools/doctype/fees/fees.json b/erpnext/schools/doctype/fees/fees.json
index 1a9dcc0..28cc25e 100644
--- a/erpnext/schools/doctype/fees/fees.json
+++ b/erpnext/schools/doctype/fees/fees.json
@@ -477,9 +477,9 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "contact_email", 
+   "fieldname": "student_email", 
    "fieldtype": "Data", 
-   "hidden": 1, 
+   "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
@@ -904,7 +904,7 @@
    "default": "0", 
    "fieldname": "paid_amount", 
    "fieldtype": "Currency", 
-   "hidden": 0, 
+   "hidden": 1, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
@@ -1093,7 +1093,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Account", 
+   "label": "Accounting", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
@@ -1242,8 +1242,8 @@
  "istable": 0, 
  "max_attachments": 0, 
  "menu_index": 0, 
- "modified": "2017-07-24 20:01:58.683352", 
- "modified_by": "Administrator", 
+ "modified": "2017-07-27 12:58:44.197451", 
+ "modified_by": "manas@erpnext.com", 
  "module": "Schools", 
  "name": "Fees", 
  "name_case": "", 
diff --git a/erpnext/schools/doctype/fees/fees.py b/erpnext/schools/doctype/fees/fees.py
index 824a664..8013194 100644
--- a/erpnext/schools/doctype/fees/fees.py
+++ b/erpnext/schools/doctype/fees/fees.py
@@ -6,25 +6,28 @@
 from frappe.model.document import Document
 import frappe
 from frappe import _
-from frappe.utils import money_in_words
+from frappe.utils import money_in_words, nowdate
 from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request
 from frappe.utils.csvutils import getlink
+from erpnext.accounts.utils import get_account_currency
 from erpnext.controllers.accounts_controller import AccountsController
-
+from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account
 
 class Fees(AccountsController):
+	def set_indicator(self):
+		"""Set indicator for portal"""
+		if self.outstanding_amount > 0:
+			self.indicator_color = "orange"
+			self.indicator_title = _("Unpaid")
+		else:
+			self.indicator_color = "green"
+			self.indicator_title = _("Paid")
+
 	def validate(self):
-		self.set_missing_values()
 		self.calculate_total()
-		# self.validate_debit_to_account()
-		
-	def set_missing_values(self):
-		if not self.contact_email:
-			self.contact_email = "manas@erpnext.com"
-		if not self.against_income_account:
-			self.against_income_account = "Academic Fees - S"
-		if not self.cost_center:
-			self.cost_center = "Main - S"
+		'''
+		set missing field here and validate the accounts
+		'''
 
 	def calculate_total(self):
 		"""Calculates total amount."""
@@ -77,6 +80,66 @@
 			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,
diff --git a/erpnext/schools/doctype/fees/fees_list.js b/erpnext/schools/doctype/fees/fees_list.js
index 9831481..c7117f2 100644
--- a/erpnext/schools/doctype/fees/fees_list.js
+++ b/erpnext/schools/doctype/fees/fees_list.js
@@ -1,15 +1,12 @@
 frappe.listview_settings['Fees'] = {
-	add_fields: [ "grand_total", "paid_amount", "due_date"],
+	add_fields: ["grand_total", "outstanding_amount", "due_date"],
 	get_indicator: function(doc) {
-		var { get_today } = frappe.datetime;
-		if ((doc.grand_total > doc.paid_amount) && doc.due_date < get_today()) {
-			return [__("Overdue"), "red", ["due_date,<," + get_today()], ["due_date,<," + get_today()]];
-		}
-		else if (doc.grand_total > doc.paid_amount) {
-			return [__("Pending"), "orange"];
-		}
-		else {
-			return [__("Paid"), "green"];
+		if(flt(doc.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"]
+		} else if (flt(doc.outstanding_amount) > 0 && doc.due_date < frappe.datetime.get_today()) {
+			return [__("Overdue"), "red", "outstanding_amount,>,0|due_date,<=,Today"]
 		}
 	}
 };
\ No newline at end of file
diff --git a/erpnext/schools/doctype/student/student.json b/erpnext/schools/doctype/student/student.json
index 75cb758..4961c2d 100644
--- a/erpnext/schools/doctype/student/student.json
+++ b/erpnext/schools/doctype/student/student.json
@@ -1114,7 +1114,7 @@
  "istable": 0, 
  "max_attachments": 0, 
  "menu_index": 0, 
- "modified": "2017-07-07 16:30:08.930882", 
+ "modified": "2017-07-26 19:46:26.893441", 
  "modified_by": "Administrator", 
  "module": "Schools", 
  "name": "Student",