Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/accounts/doctype/mis_control/mis_control.py b/accounts/doctype/mis_control/mis_control.py
index b1c228b..e25c585 100644
--- a/accounts/doctype/mis_control/mis_control.py
+++ b/accounts/doctype/mis_control/mis_control.py
@@ -241,7 +241,6 @@
 							self.return_data.append([5, 'Profit/Loss (Provisional)'] + level0_diff)
 							for i in range(len(totals)): # make totals
 								level0_diff[i] = flt(totals[i]) + level0_diff[i]
-							self.return_data.append([4, 'Total '+c[0]] + level0_diff)
 						else:
 							self.return_data.append([4, 'Total '+c[0]] + totals)
 
@@ -252,7 +251,6 @@
 							self.return_data.append([5, 'Profit/Loss (Provisional)'] + level0_diff)
 							for i in range(len(totals)): # make totals
 								level0_diff[i] = flt(totals[i]) + level0_diff[i]
-							self.return_data.append([4, 'Total Income'] + level0_diff)
 						else:
 							self.return_data.append([4, 'Total '+c[0]] + totals)
 	
diff --git a/accounts/page/financial_analytics/financial_analytics.js b/accounts/page/financial_analytics/financial_analytics.js
index 06c8a29..e8dbc0f 100644
--- a/accounts/page/financial_analytics/financial_analytics.js
+++ b/accounts/page/financial_analytics/financial_analytics.js
@@ -141,6 +141,43 @@
 		}
 		this.update_groups();
 		this.accounts_initialized = true;
+		
+		// show Net Profit / Loss
+		var net_profit = {
+			company: me.company,
+			id: "Net Profit / Loss",
+			name: "Net Profit / Loss",
+			indent: 0,
+			opening: 0,
+			checked: false,
+			is_pl_account: me.pl_or_bs=="Balance Sheet" ? "No" : "Yes",
+		};
+		
+		$.each(me.data, function(i, ac) {
+			if(!ac.parent_account && me.apply_filter(ac, "company")) {
+				if(me.pl_or_bs == "Balance Sheet") {
+					var valid_account = ac.is_pl_account!="Yes";
+					var do_addition_for = "Debit";
+				} else {
+					var valid_account = ac.is_pl_account=="Yes";
+					var do_addition_for = "Credit";
+				}
+				if(valid_account) {
+					$.each(me.columns, function(i, col) {
+						if(col.formatter==me.currency_formatter) {
+							if(!net_profit[col.field]) net_profit[col.field] = 0;
+							if(ac.debit_or_credit==do_addition_for) {
+								net_profit[col.field] += ac[col.field];
+							} else {
+								net_profit[col.field] -= ac[col.field];
+							}
+						}
+					});
+				}
+			}
+		});
+		
+		this.data.push(net_profit);
 	},
 	add_balance: function(field, account, gl) {
 		account[field] = flt(account[field]) + 
diff --git a/buying/doctype/supplier/supplier.js b/buying/doctype/supplier/supplier.js
index e3f591c..4fd94f5 100644
--- a/buying/doctype/supplier/supplier.js
+++ b/buying/doctype/supplier/supplier.js
@@ -75,6 +75,13 @@
 			parent: cur_frm.fields_dict['contact_html'].wrapper,
 			page_length: 2,
 			new_doctype: "Contact",
+			custom_new_doc: function(doctype) {
+				var contact = LocalDB.create('Contact');
+				contact = locals['Contact'][contact];
+				contact.supplier = cur_frm.doc.name;
+				contact.supplier_name = cur_frm.doc.supplier_name;
+				wn.set_route("Form", "Contact", contact.name);
+			},
 			get_query: function() {
 				return "select name, first_name, last_name, email_id, phone, mobile_no, department, designation, is_primary_contact from tabContact where supplier='"+cur_frm.docname+"' and docstatus != 2 order by is_primary_contact desc"
 			},
diff --git a/public/js/account_tree_grid.js b/public/js/account_tree_grid.js
index 10e1dac..4c669a9 100644
--- a/public/js/account_tree_grid.js
+++ b/public/js/account_tree_grid.js
@@ -84,12 +84,7 @@
 	},
 	prepare_data: function() {
 		var me = this;
-		if(this.data) {
-			// refresh -- only initialize
-			$.each(this.data, function(i, d) {
-				me.init_account(d);
-			})
-		} else {
+		if(!this.primary_data) {
 			// make accounts list
 			me.data = [];
 			me.parent_map = {};
@@ -103,10 +98,16 @@
 				if(d.parent_account) {
 					me.parent_map[d.name] = d.parent_account;
 				}
-				
-				me.init_account(d);
 			});
+			
+			me.primary_data = [].concat(me.data);
 		}
+		
+		me.data = [].concat(me.primary_data);
+		$.each(me.data, function(i, d) {
+			me.init_account(d);
+		});
+		
 		this.set_indent();
 		this.prepare_balances();
 		
diff --git a/selling/doctype/customer/customer.js b/selling/doctype/customer/customer.js
index 028ad6e..2031fe8 100644
--- a/selling/doctype/customer/customer.js
+++ b/selling/doctype/customer/customer.js
@@ -93,6 +93,16 @@
 		cur_frm.contact_list = new wn.ui.Listing({
 			parent: cur_frm.fields_dict['contact_html'].wrapper,
 			page_length: 2,
+			custom_new_doc: function(doctype) {
+				var contact = LocalDB.create('Contact');
+				contact = locals['Contact'][contact];
+				contact.customer = cur_frm.doc.name;
+				contact.customer_name = cur_frm.doc.customer_name;
+				if(cur_frm.doc.customer_type == 'Individual') {
+					contact.first_name = cur_frm.doc.customer_name;
+				}
+				wn.set_route("Form", "Contact", contact.name);
+			},
 			new_doctype: "Contact",
 			get_query: function() {
 				return "select name, first_name, last_name, email_id, phone, mobile_no, department, designation, is_primary_contact from tabContact where customer='"+cur_frm.docname+"' and docstatus != 2 order by is_primary_contact desc"
diff --git a/setup/doctype/sales_partner/sales_partner.js b/setup/doctype/sales_partner/sales_partner.js
index caf16dc..f5c084d 100644
--- a/setup/doctype/sales_partner/sales_partner.js
+++ b/setup/doctype/sales_partner/sales_partner.js
@@ -76,6 +76,12 @@
 			parent: cur_frm.fields_dict['contact_html'].wrapper,
 			page_length: 2,
 			new_doctype: "Contact",
+			custom_new_doc: function(doctype) {
+				var contact = LocalDB.create('Contact');
+				contact = locals['Contact'][contact];
+				contact.sales_partner = cur_frm.doc.name;
+				wn.set_route("Form", "Contact", contact.name);
+			},
 			get_query: function() {
 				return "select name, first_name, last_name, email_id, phone, mobile_no, department, designation, is_primary_contact from tabContact where sales_partner='"+cur_frm.docname+"' and docstatus != 2 order by is_primary_contact desc"
 			},
@@ -92,7 +98,6 @@
 		});
 	}
 	cur_frm.contact_list.run();
-
 }
 
 cur_frm.fields_dict['partner_target_details'].grid.get_field("item_group").get_query = function(doc, dt, dn) {
diff --git a/utilities/doctype/contact/contact.js b/utilities/doctype/contact/contact.js
index 0a33e08..d51c0f5 100644
--- a/utilities/doctype/contact/contact.js
+++ b/utilities/doctype/contact/contact.js
@@ -23,23 +23,6 @@
 	
 	cur_frm.fields_dict.customer.get_query = erpnext.utils.customer_query;
 	cur_frm.fields_dict.supplier.get_query = erpnext.utils.supplier_query;
-
-	var route = wn.get_route();
-	if(route[1]=='Supplier') {
-		var supplier = wn.container.page.frm.doc;
-		doc.supplier = supplier.name;
-		doc.supplier_name = supplier.supplier_name;
-	} else if(route[1]=='Customer') {
-		var customer = wn.container.page.frm.doc;
-		doc.customer = customer.name;
-		doc.customer_name = customer.customer_name;
-		if(customer.customer_type == 'Individual') {
-			doc.first_name = customer.customer_name;
-		}		
-	} else if(route[1]=='Sales Partner') {
-		var sp = wn.container.page.frm.doc;
-		doc.sales_partner = sp.name;
-	}
 }
 
 cur_frm.cscript.refresh = function() {