Party filter and total row for opening and closing in trial balance for party report
diff --git a/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.js b/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.js
index 4d2efad..7ccec30 100644
--- a/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.js
+++ b/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.js
@@ -51,6 +51,19 @@
 			"default": "Customer"
 		},
 		{
+			"fieldname":"party",
+			"label": __("Party"),
+			"fieldtype": "Dynamic Link",
+			"get_options": function() {
+				var party_type = frappe.query_report_filters_by_name.party_type.get_value();
+				var party = frappe.query_report_filters_by_name.party.get_value();
+				if(party && !party_type) {
+					frappe.throw(__("Please select Party Type first"));
+				}
+				return party_type;
+			}
+		},
+		{
 			"fieldname": "show_zero_values",
 			"label": __("Show zero values"),
 			"fieldtype": "Check"
diff --git a/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py b/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py
index 58222ac..6480623 100644
--- a/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py
+++ b/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py
@@ -20,13 +20,23 @@
 	
 def get_data(filters, show_party_name):
 	party_name_field = "customer_name" if filters.get("party_type")=="Customer" else "supplier_name"
-	parties = frappe.get_all(filters.get("party_type"), fields = ["name", party_name_field], order_by="name")
+	party_filters = {"name": filters.get("party")} if filters.get("party") else {}
+	parties = frappe.get_all(filters.get("party_type"), fields = ["name", party_name_field], 
+		filters = party_filters, order_by="name")
 	company_currency = frappe.db.get_value("Company", filters.company, "default_currency")
 	opening_balances = get_opening_balances(filters)
 	balances_within_period = get_balances_within_period(filters)
 	
 	data = []
-	total_debit, total_credit = 0, 0
+	# total_debit, total_credit = 0, 0
+	total_row = frappe._dict({
+		"opening_debit": 0,
+		"opening_credit": 0,
+		"debit": 0,
+		"credit": 0,
+		"closing_debit": 0,
+		"closing_credit": 0
+	})
 	for party in parties:
 		row = { "party": party.name }
 		if show_party_name:
@@ -45,11 +55,7 @@
 			"debit": debit,
 			"credit": credit
 		})
-		
-		# totals
-		total_debit += debit
-		total_credit += credit
-		
+				
 		# closing
 		closing_debit, closing_credit = toggle_debit_credit(opening_debit + debit, opening_credit + credit)
 		row.update({
@@ -57,6 +63,10 @@
 			"closing_credit": closing_credit
 		})
 		
+		# totals
+		for col in total_row:
+			total_row[col] += row.get(col)
+		
 		row.update({
 			"currency": company_currency
 		})
@@ -69,13 +79,12 @@
 			data.append(row)
 		
 	# Add total row
-	if total_debit or total_credit:
-		data.append({
-			"party": "'" + _("Totals") + "'",
-			"debit": total_debit,
-			"credit": total_credit,
-			"currency": company_currency
-		})
+	
+	total_row.update({
+		"party": "'" + _("Totals") + "'",
+		"currency": company_currency
+	})
+	data.append(total_row)
 	
 	return data