added get_supplier_details and commonified invoice functions
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index 17fd48d..33a01fe 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -156,10 +156,10 @@
 	},
 	
 	customer: function() {
-		if(this.frm.updating_customer_details)
+		if(this.frm.updating_party_details)
 			return;
-		erpnext.selling.get_customer_details(this.frm, 
-			"erpnext.accounts.doctype.sales_invoice.sales_invoice.get_customer_details",
+		erpnext.selling.get_party_details(this.frm, 
+			"erpnext.accounts.doctype.sales_invoice.sales_invoice.get_party_details",
 			{
 				posting_date: this.frm.doc.posting_date,
 				company: this.frm.doc.company,
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 2af744a..4b427bb 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -15,6 +15,8 @@
 from webnotes.model.code import get_obj
 from webnotes import _, msgprint
 
+from erpnext.accounts.party import get_party_account, get_due_date
+
 month_map = {'Monthly': 1, 'Quarterly': 3, 'Half-yearly': 6, 'Yearly': 12}
 
 from erpnext.controllers.selling_controller import SellingController
@@ -149,7 +151,7 @@
 		self.set_pos_fields(for_validate)
 		
 		if not self.doc.debit_to:
-			self.doc.debit_to = get_customer_account(self.doc.company, self.doc.customer)
+			self.doc.debit_to = get_party_account(self.doc.company, self.doc.customer, "Customer")
 		if not self.doc.due_date:
 			self.doc.due_date = get_due_date(self.doc.posting_date, self.doc.customer, 
 				self.doc.debit_to, self.doc.company)
@@ -845,59 +847,6 @@
 		assign_to.add(args)
 
 @webnotes.whitelist()
-def get_customer_details(company, customer, debit_to, posting_date):
-	if not webnotes.has_permission("Customer", "read", customer):
-		webnotes.throw("No Permission")
-		
-	from erpnext.selling.doctype.customer.customer import get_customer_details
-	
-	if customer:
-		debit_to = get_customer_account(company, customer)
-	elif debit_to:
-		customer = webnotes.conn.get_value('Account',debit_to, 'master_name')
-
-	out = {
-		"customer": customer,
-		"debit_to": debit_to,
-		"due_date": get_due_date(posting_date, customer, debit_to, company)
-	}	
-	out.update(get_customer_details(customer))
-	return out
-	
-def get_customer_account(company, customer):
-	if not company:
-		webnotes.throw(_("Please select company first."))
-
-	if customer:
-		acc_head = webnotes.conn.get_value("Account", {"master_name":customer,
-			"master_type":"Customer", "company": company})
-
-		if not acc_head:
-			webnotes.throw(_("Customer has no account head in selected Company. Open the customer record and create an Account Head first."))
-	
-		return acc_head		
-
-def get_due_date(posting_date, customer, debit_to, company):
-	"""Set Due Date = Posting Date + Credit Days"""
-	due_date = None
-	if posting_date:
-		credit_days = 0
-		if debit_to:
-			credit_days = webnotes.conn.get_value("Account", debit_to, "credit_days")
-		if customer and not credit_days:
-			credit_days = webnotes.conn.get_value("Customer", customer, "credit_days")
-		if company and not credit_days:
-			credit_days = webnotes.conn.get_value("Company", company, "credit_days")
-			
-		if credit_days:
-			due_date = add_days(posting_date, credit_days)
-		else:
-			due_date = posting_date
-
-	return due_date	
-
-
-@webnotes.whitelist()
 def get_bank_cash_account(mode_of_payment):
 	val = webnotes.conn.get_value("Mode of Payment", mode_of_payment, "default_account")
 	if not val:
diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py
new file mode 100644
index 0000000..db37c4f
--- /dev/null
+++ b/erpnext/accounts/party.py
@@ -0,0 +1,85 @@
+# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+
+import webnotes
+from webnotes import _
+
+@webnotes.whitelist()
+def get_party_details(party=None, account=None, party_type="Customer"):
+	if not webnotes.has_permission(party_type, "read", party):
+		webnotes.throw("No Permission")
+	
+	if party_type=="Customer":
+		get_party_details = webnotes.get_attr("erpnext.selling.doctype.customer.customer.get_customer_details")
+	else:
+		get_party_details = webnotes.get_attr("erpnext.buying.doctype.supplier.supplier.get_supplier_details")
+				
+	if party:
+		account = get_party_account(company, party, party_type)
+	elif account:
+		party = webnotes.conn.get_value('Account', account, 'master_name')
+
+	account_fieldname = "debit_to" if party_type=="Customer" else "credit_to" 
+
+	out = {
+		party_type.lower(): party,
+		account_fieldname : account,
+		"due_date": get_due_date(posting_date, party, party_type, account, company)
+	}	
+	out.update(get_party_details(party))
+	return out
+
+def get_party_account(company, party, party_type):
+	if not company:
+		webnotes.throw(_("Please select company first."))
+
+	if party:
+		acc_head = webnotes.conn.get_value("Account", {"master_name":party,
+			"master_type": party_type, "company": company})
+
+		if not acc_head:
+			create_party_account(party, party_type, company)
+	
+		return acc_head		
+
+def get_due_date(posting_date, party, party_type, account, company):
+	"""Set Due Date = Posting Date + Credit Days"""
+	due_date = None
+	if posting_date:
+		credit_days = 0
+		if debit_to:
+			credit_days = webnotes.conn.get_value("Account", account, "credit_days")
+		if party and not credit_days:
+			credit_days = webnotes.conn.get_value(party_type, party, "credit_days")
+		if company and not credit_days:
+			credit_days = webnotes.conn.get_value("Company", company, "credit_days")
+			
+		due_date = add_days(posting_date, credit_days) if credit_days else posting_date
+
+	return due_date	
+
+def create_party_account(party, party_type, company):
+	if not company:
+		webnotes.throw(_("Company is required"))
+		
+	company_details = webnotes.conn.get_value("Company", company, 
+		["abbr", "receivables_group", "payables_group"], as_dict=True)
+	if not webnotes.conn.exists("Account", (party + " - " + abbr)):
+		parent_account = company_details.receivables_group \
+			if party_type=="Customer" else company_details.payables_group
+
+		# create
+		account = webnotes.bean({
+			"doctype": "Account",
+			'account_name': party,
+			'parent_account': parent_account, 
+			'group_or_ledger':'Ledger',
+			'company': company, 
+			'master_type': party_type, 
+			'master_name': party,
+			"freeze_account": "No"
+		}).insert(ignore_permissions=True)
+		
+		msgprint(_("Account Created") + ": " + account.doc.name)
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.js b/erpnext/buying/doctype/purchase_common/purchase_common.js
index d01627a..3d0f80b 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.js
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.js
@@ -62,42 +62,11 @@
 	},
 	
 	supplier: function() {
-		if(this.frm.doc.supplier || this.frm.doc.credit_to) {
-			if(!this.frm.doc.company) {
-				this.frm.set_value("supplier", null);
-				msgprint(wn._("Please specify Company"));
-			} else {
-				var me = this;
-				var buying_price_list = this.frm.doc.buying_price_list;
-
-				return this.frm.call({
-					doc: this.frm.doc,
-					method: "set_supplier_defaults",
-					freeze: true,
-					callback: function(r) {
-						if(!r.exc) {
-							if(me.frm.doc.buying_price_list !== buying_price_list) me.buying_price_list();
-						}
-					}
-				});
-			}
-		}
+		erpnext.utils.get_party_details(this.frm);
 	},
 	
 	supplier_address: function() {
-		var me = this;
-		if (this.frm.doc.supplier) {
-			return wn.call({
-				doc: this.frm.doc,
-				method: "set_supplier_address",
-				freeze: true,
-				args: {
-					supplier: this.frm.doc.supplier,
-					address: this.frm.doc.supplier_address, 
-					contact: this.frm.doc.contact_person
-				},
-			});
-		}
+		erpnext.utils.get_address_display(this.frm);
 	},
 	
 	contact_person: function() { 
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index ebfda85..89e9806 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -225,7 +225,6 @@
 	def set_missing_values(source, target):
 		bean = webnotes.bean(target)
 		bean.run_method("set_missing_values")
-		bean.run_method("set_supplier_defaults")
 
 	def update_item(obj, target, source_parent):
 		target.import_amount = flt(obj.import_amount) - flt(obj.billed_amt)
diff --git a/erpnext/buying/doctype/supplier/supplier.py b/erpnext/buying/doctype/supplier/supplier.py
index 82a52638..1f61deb 100644
--- a/erpnext/buying/doctype/supplier/supplier.py
+++ b/erpnext/buying/doctype/supplier/supplier.py
@@ -8,7 +8,7 @@
 from webnotes.utils import cint
 from webnotes import msgprint, _
 from webnotes.model.doc import make_autoname
-
+from erpnext.accounts.party import create_party_account
 
 from erpnext.utilities.transaction_base import TransactionBase
 
@@ -47,88 +47,20 @@
 		self.update_contact()
 
 		# create account head
-		self.create_account_head()
+		create_party_account(self.doc.name, "Supplier", self.doc.company)
 
 		# update credit days and limit in account
 		self.update_credit_days_limit()
-	
-	def get_payables_group(self):
-		g = webnotes.conn.sql("select payables_group from tabCompany where name=%s", self.doc.company)
-		g = g and g[0][0] or ''
-		if not g:
-			msgprint("Update Company master, assign a default group for Payables")
-			raise Exception
-		return g
-
-	def add_account(self, ac, par, abbr):
-		ac_bean = webnotes.bean({
-			"doctype": "Account",
-			'account_name':ac,
-			'parent_account':par,
-			'group_or_ledger':'Group',
-			'company':self.doc.company,
-			"freeze_account": "No",
-		})
-		ac_bean.ignore_permissions = True
-		ac_bean.insert()
 		
-		msgprint(_("Created Group ") + ac)
-	
 	def get_company_abbr(self):
 		return webnotes.conn.sql("select abbr from tabCompany where name=%s", self.doc.company)[0][0]
 	
-	def get_parent_account(self, abbr):
-		if (not self.doc.supplier_type):
-			msgprint("Supplier Type is mandatory")
-			raise Exception
-		
-		if not webnotes.conn.sql("select name from tabAccount where name=%s and debit_or_credit = 'Credit' and ifnull(is_pl_account, 'No') = 'No'", (self.doc.supplier_type + " - " + abbr)):
-
-			# if not group created , create it
-			self.add_account(self.doc.supplier_type, self.get_payables_group(), abbr)
-		
-		return self.doc.supplier_type + " - " + abbr
-
 	def validate(self):
 		#validation for Naming Series mandatory field...
 		if webnotes.defaults.get_global_default('supp_master_name') == 'Naming Series':
 			if not self.doc.naming_series:
 				msgprint("Series is Mandatory.", raise_exception=1)
-	
-	def create_account_head(self):
-		if self.doc.company :
-			abbr = self.get_company_abbr() 
-			parent_account = self.get_parent_account(abbr)
-						
-			if not webnotes.conn.sql("select name from tabAccount where name=%s", (self.doc.name + " - " + abbr)):
-				ac_bean = webnotes.bean({
-					"doctype": "Account",
-					'account_name': self.doc.name,
-					'parent_account': parent_account,
-					'group_or_ledger':'Ledger',
-					'company': self.doc.company,
-					'account_type': '',
-					'tax_rate': '0',
-					'master_type': 'Supplier',
-					'master_name': self.doc.name,
-					"freeze_account": "No"
-				})
-				ac_bean.ignore_permissions = True
-				ac_bean.insert()
-				
-				msgprint(_("Created Account Head: ") + ac_bean.doc.name)
-			else:
-				self.check_parent_account(parent_account, abbr)
-		else : 
-			msgprint("Please select Company under which you want to create account head")
-	
-	def check_parent_account(self, parent_account, abbr):
-		if webnotes.conn.get_value("Account", self.doc.name + " - " + abbr, 
-			"parent_account") != parent_account:
-			ac = webnotes.bean("Account", self.doc.name + " - " + abbr)
-			ac.doc.parent_account = parent_account
-			ac.save()
-	
+			
 	def get_contacts(self,nm):
 		if nm:
 			contact_details =webnotes.conn.convert_to_lists(webnotes.conn.sql("select name, CONCAT(IFNULL(first_name,''),' ',IFNULL(last_name,'')),contact_no,email_id from `tabContact` where supplier = '%s'"%nm))
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index 83b5909..ee786cf 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -7,6 +7,7 @@
 from webnotes.utils import flt, _round
 from erpnext.buying.utils import get_item_details
 from erpnext.setup.utils import get_company_currency
+from erpnext.buying.doctype.supplier.supplier import get_supplier_details
 
 from erpnext.controllers.stock_controller import StockController
 
@@ -31,10 +32,8 @@
 		self.set_price_list_currency("Buying")
 		
 		# set contact and address details for supplier, if they are not mentioned
-		if self.doc.supplier and not (self.doc.contact_person and self.doc.supplier_address):
-			for fieldname, val in self.get_supplier_defaults().items():
-				if not self.doc.fields.get(fieldname) and self.meta.get_field(fieldname):
-					self.doc.fields[fieldname] = val
+		if self.doc.supplier:
+			self.doc.update_if_not_set(get_supplier_details(self.doc.supplier))
 
 		self.set_missing_item_details(get_item_details)
 		if self.doc.fields.get("__islocal"):
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index aac5482..73b341d 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -35,17 +35,10 @@
 	def set_missing_lead_customer_details(self):
 		from erpnext.selling.doctype.customer.customer import get_customer_details
 		if self.doc.customer:
-			if not (self.doc.contact_person and self.doc.customer_address and self.doc.customer_name):
-				for fieldname, val in get_customer_details(self.doc.customer).iteritems():
-					if not self.doc.fields.get(fieldname) and self.meta.get_field(fieldname):
-						self.doc.fields[fieldname] = val
+			self.doc.update_if_not_set(get_customer_details(self.doc.customer))
 		
 		elif self.doc.lead:
-			if not (self.doc.customer_address and self.doc.customer_name and \
-				self.doc.contact_display):
-				for fieldname, val in self.get_lead_defaults().items():
-					if not self.doc.fields.get(fieldname) and self.meta.get_field(fieldname):
-						self.doc.fields[fieldname] = val
+			self.doc.update_if_not_set(self.get_lead_defaults())
 						
 	def set_price_list_and_item_details(self):
 		self.set_price_list_currency("Selling")
diff --git a/erpnext/public/js/utils/customer_supplier.js b/erpnext/public/js/utils/customer_supplier.js
index ccfbfc9..a856377 100644
--- a/erpnext/public/js/utils/customer_supplier.js
+++ b/erpnext/public/js/utils/customer_supplier.js
@@ -2,27 +2,43 @@
 // License: GNU General Public License v3. See license.txt
 
 wn.provide("erpnext.utils");
-erpnext.utils.get_customer_details = function(frm, method, args) {
-	if(!method) 
-		method = "erpnext.selling.doctype.customer.customer.get_customer_details";
-	if(!args) 
-		args = { customer: frm.doc.customer };
+erpnext.utils.get_party_details = function(frm, method, args) {
+	if(!method) {
+		if(frm.doc.customer) {
+			method = "erpnext.selling.doctype.customer.customer.get_customer_details";
+		} else {
+			method = "erpnext.buying.doctype.supplier.supplier.get_supplier_details";
+		}
+	}
+	if(!args) {
+		if(frm.doc.customer) {
+			args = { customer: frm.doc.customer };
+		} else {
+			args = { supplier: frm.doc.supplier };
+		}
+	}
 	wn.call({
 		method: method,
 		args: args,
 		callback: function(r) {
 			if(r.message) {
-				frm.updating_customer_details = true;
+				frm.updating_party_details = true;
 				frm.set_value(r.message);
-				frm.updating_customer_details = false;
+				frm.updating_party_details = false;
 			}
 		}
 	});
 }
 
 erpnext.utils.get_address_display = function(frm, address_field) {
-	if(frm.updating_customer_details) return;
-	if(!address_field) address_field = "customer_address";
+	if(frm.updating_party_details) return;
+	if(!address_field) {
+		if(frm.doc.customer) {
+			address_field = "customer_address";
+		} else {
+			address_field = "supplier_address";
+		}
+	} 
 	wn.call({
 		method: "erpnext.utilities.doctype.address.address.get_address_display",
 		args: {address: frm.doc[address_field] },
@@ -34,7 +50,7 @@
 }
 
 erpnext.utils.get_contact_details = function(frm) {
-	if(frm.updating_customer_details) return;
+	if(frm.updating_party_details) return;
 	wn.call({
 		method: "erpnext.utilities.doctype.contact.contact.get_contact_details",
 		args: {address: frm.doc.contact_person },
diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py
index 06b80bb..fda93da 100644
--- a/erpnext/selling/doctype/customer/customer.py
+++ b/erpnext/selling/doctype/customer/customer.py
@@ -12,6 +12,7 @@
 from erpnext.utilities.transaction_base import TransactionBase
 from erpnext.utilities.doctype.address.address import get_address_display
 from erpnext.utilities.doctype.contact.contact import get_contact_details
+from erpnext.accounts.party import create_party_account
 
 class DocType(TransactionBase):
 	def __init__(self, doc, doclist=[]):
@@ -29,14 +30,6 @@
 
 	def get_company_abbr(self):
 		return webnotes.conn.get_value('Company', self.doc.company, 'abbr')
-
-	def get_receivables_group(self):
-		g = webnotes.conn.sql("select receivables_group from tabCompany where name=%s", self.doc.company)
-		g = g and g[0][0] or '' 
-		if not g:
-			msgprint("Update Company master, assign a default group for Receivables")
-			raise Exception
-		return g
 	
 	def validate_values(self):
 		if webnotes.defaults.get_global_default('cust_master_name') == 'Naming Series' and not self.doc.naming_series:
@@ -57,29 +50,6 @@
 		webnotes.conn.sql("""update `tabContact` set customer_name=%s, modified=NOW() 
 			where customer=%s""", (self.doc.customer_name, self.doc.name))
 
-	def create_account_head(self):
-		if self.doc.company :
-			abbr = self.get_company_abbr()
-			if not webnotes.conn.exists("Account", (self.doc.name + " - " + abbr)):
-				parent_account = self.get_receivables_group()
-				# create
-				ac_bean = webnotes.bean({
-					"doctype": "Account",
-					'account_name': self.doc.name,
-					'parent_account': parent_account, 
-					'group_or_ledger':'Ledger',
-					'company':self.doc.company, 
-					'master_type':'Customer', 
-					'master_name':self.doc.name,
-					"freeze_account": "No"
-				})
-				ac_bean.ignore_permissions = True
-				ac_bean.insert()
-				
-				msgprint(_("Account Head") + ": " + ac_bean.doc.name + _(" created"))
-		else :
-			msgprint(_("Please Select Company under which you want to create account head"))
-
 	def update_credit_days_limit(self):
 		webnotes.conn.sql("""update tabAccount set credit_days = %s, credit_limit = %s 
 			where master_type='Customer' and master_name = %s""", 
@@ -113,7 +83,8 @@
 		self.update_contact()
 
 		# create account head
-		self.create_account_head()
+		create_party_account(self.doc.name, "Customer", self.doc.company)
+
 		# update credit days and limit in account
 		self.update_credit_days_limit()
 		#create address and contact from lead
diff --git a/erpnext/selling/doctype/installation_note/installation_note.js b/erpnext/selling/doctype/installation_note/installation_note.js
index c666247..1373225 100644
--- a/erpnext/selling/doctype/installation_note/installation_note.js
+++ b/erpnext/selling/doctype/installation_note/installation_note.js
@@ -6,7 +6,7 @@
 
 
 wn.ui.form.on_change("Installation Note", "customer", 
-	function(frm) { erpnext.utils.get_customer_details(frm); });
+	function(frm) { erpnext.utils.get_party_details(frm); });
 
 wn.ui.form.on_change("Installation Note", "customer_address", 
 	function(frm) { erpnext.utils.get_address_display(frm); });
diff --git a/erpnext/selling/doctype/opportunity/opportunity.js b/erpnext/selling/doctype/opportunity/opportunity.js
index fd449fa..8731f2e 100644
--- a/erpnext/selling/doctype/opportunity/opportunity.js
+++ b/erpnext/selling/doctype/opportunity/opportunity.js
@@ -4,7 +4,7 @@
 {% include 'utilities/doctype/sms_control/sms_control.js' %};
 
 wn.ui.form.on_change("Opportunity", "customer", function(frm) { 
-	erpnext.utils.get_customer_details(frm) });
+	erpnext.utils.get_party_details(frm) });
 wn.ui.form.on_change("Opportunity", "customer_address", erpnext.utils.get_address_display);
 wn.ui.form.on_change("Opportunity", "contact_person", erpnext.utils.get_contact_details);	
 
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index e2cde55..2f25dec 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -104,7 +104,7 @@
 	},
 	
 	customer: function() {
-		erpnext.utils.get_customer_details(this.frm);
+		erpnext.utils.get_party_details(this.frm);
 	},
 	
 	customer_address: function() {
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index 7a33971..955262f 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -301,7 +301,6 @@
 	def set_missing_values(source, target):
 		bean = webnotes.bean(target)
 		bean.run_method("set_missing_values")
-		bean.run_method("set_supplier_defaults")
 
 	doclist = get_mapped_doclist("Purchase Receipt", source_name,	{
 		"Purchase Receipt": {
diff --git a/erpnext/support/doctype/customer_issue/customer_issue.js b/erpnext/support/doctype/customer_issue/customer_issue.js
index d4cdbc2..36bfe97 100644
--- a/erpnext/support/doctype/customer_issue/customer_issue.js
+++ b/erpnext/support/doctype/customer_issue/customer_issue.js
@@ -4,7 +4,7 @@
 wn.provide("erpnext.support");
 
 wn.ui.form.on_change("Customer Issue", "customer", function(frm) { 
-	erpnext.utils.get_customer_details(frm) });
+	erpnext.utils.get_party_details(frm) });
 wn.ui.form.on_change("Customer Issue", "customer_address", 
 	erpnext.utils.get_address_display);
 wn.ui.form.on_change("Customer Issue", "contact_person", 
diff --git a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.js b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.js
index 8c34736..c8af280 100644
--- a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.js
+++ b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.js
@@ -4,7 +4,7 @@
 wn.provide("erpnext.support");
 
 wn.ui.form.on_change("Maintenance Schedule", "customer", function(frm) { 
-	erpnext.utils.get_customer_details(frm) });
+	erpnext.utils.get_party_details(frm) });
 wn.ui.form.on_change("Maintenance Schedule", "customer_address", 
 	erpnext.utils.get_address_display);
 wn.ui.form.on_change("Maintenance Schedule", "contact_person", 
diff --git a/erpnext/support/doctype/maintenance_visit/maintenance_visit.js b/erpnext/support/doctype/maintenance_visit/maintenance_visit.js
index 5d1aa54..186e07c 100644
--- a/erpnext/support/doctype/maintenance_visit/maintenance_visit.js
+++ b/erpnext/support/doctype/maintenance_visit/maintenance_visit.js
@@ -4,7 +4,7 @@
 wn.provide("erpnext.support");
 
 wn.ui.form.on_change("Maintenance Visit", "customer", function(frm) { 
-	erpnext.utils.get_customer_details(frm) });
+	erpnext.utils.get_party_details(frm) });
 wn.ui.form.on_change("Maintenance Visit", "customer_address", 
 	erpnext.utils.get_address_display);
 wn.ui.form.on_change("Maintenance Visit", "contact_person", 
diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py
index d58a453..0241629 100644
--- a/erpnext/utilities/transaction_base.py
+++ b/erpnext/utilities/transaction_base.py
@@ -45,16 +45,6 @@
 					break
 
 		return self._party_type_and_name
-						
-	def get_supplier_defaults(self):
-		from erpnext.buying.doctype.supplier.supplier import get_supplier_details
-		return get_supplier_details(self.doc.supplier)
-		
-	def set_supplier_defaults(self):
-		from erpnext.buying.doctype.supplier.supplier import get_supplier_details
-		for fieldname, val in get_supplier_details(self.doc.supplier).iteritems():
-			if self.meta.get_field(fieldname):
-				self.doc.fields[fieldname] = val
 				
 	def get_lead_defaults(self):
 		out = self.get_default_address_and_contact("lead")