fix(sales_invoice): fetch customer price list if available before pos profile price list
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index 91a44b3..8911ddf 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -217,6 +217,9 @@
 		this.get_terms();
 	},
 	customer: function() {
+		if (this.frm.doc.is_pos){
+			var pos_profile = this.frm.doc.pos_profile;
+		}
 		var me = this;
 		if(this.frm.updating_party_details) return;
 		erpnext.utils.get_party_details(this.frm,
@@ -226,6 +229,7 @@
 				party_type: "Customer",
 				account: this.frm.doc.debit_to,
 				price_list: this.frm.doc.selling_price_list,
+				pos_profile: pos_profile
 			}, function() {
 				me.apply_pricing_rule();
 			});
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 6072fb8..895ca07 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -398,11 +398,16 @@
 				self.account_for_change_amount = pos.get('account_for_change_amount')
 
 			for fieldname in ('territory', 'naming_series', 'currency', 'taxes_and_charges', 'letter_head', 'tc_name',
-				'selling_price_list', 'company', 'select_print_heading', 'cash_bank_account', 'company_address',
+				'company', 'select_print_heading', 'cash_bank_account', 'company_address',
 				'write_off_account', 'write_off_cost_center', 'apply_discount_on'):
 					if (not for_validate) or (for_validate and not self.get(fieldname)):
 						self.set(fieldname, pos.get(fieldname))
 
+			customer_price_list = frappe.get_value("Customer", self.customer, 'default_price_list')
+
+			if not customer_price_list:
+				self.set('selling_price_list', pos.get('selling_price_list'))
+
 			if not for_validate:
 				self.update_stock = cint(pos.get("update_stock"))
 
diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py
index 1e1f8b5..c0a44d1 100644
--- a/erpnext/accounts/party.py
+++ b/erpnext/accounts/party.py
@@ -22,18 +22,20 @@
 
 @frappe.whitelist()
 def get_party_details(party=None, account=None, party_type="Customer", company=None, posting_date=None,
-	bill_date=None, price_list=None, currency=None, doctype=None, ignore_permissions=False, fetch_payment_terms_template=True, party_address=None, shipping_address=None):
+	bill_date=None, price_list=None, currency=None, doctype=None, ignore_permissions=False, fetch_payment_terms_template=True,
+	party_address=None, shipping_address=None, pos_profile=None):
 
 	if not party:
 		return {}
 	if not frappe.db.exists(party_type, party):
 		frappe.throw(_("{0}: {1} does not exists").format(party_type, party))
 	return _get_party_details(party, account, party_type,
-		company, posting_date, bill_date, price_list, currency, doctype, ignore_permissions, fetch_payment_terms_template, party_address, shipping_address)
+		company, posting_date, bill_date, price_list, currency, doctype, ignore_permissions,
+		fetch_payment_terms_template, party_address, shipping_address, pos_profile)
 
 def _get_party_details(party=None, account=None, party_type="Customer", company=None, posting_date=None,
 	bill_date=None, price_list=None, currency=None, doctype=None, ignore_permissions=False,
-	fetch_payment_terms_template=True, party_address=None, shipping_address=None):
+	fetch_payment_terms_template=True, party_address=None, shipping_address=None, pos_profile=None):
 
 	out = frappe._dict(set_account_and_due_date(party, account, party_type, company, posting_date, bill_date, doctype))
 	party = out[party_type.lower()]
@@ -49,7 +51,7 @@
 	set_address_details(out, party, party_type, doctype, company, party_address, shipping_address)
 	set_contact_details(out, party, party_type)
 	set_other_values(out, party, party_type)
-	set_price_list(out, party, party_type, price_list)
+	set_price_list(out, party, party_type, price_list, pos_profile)
 
 	out["taxes_and_charges"] = set_taxes(party.name, party_type, posting_date, company, out.customer_group, out.supplier_type)
 
@@ -149,12 +151,20 @@
 
 	return None
 
-def set_price_list(out, party, party_type, given_price_list):
+def set_price_list(out, party, party_type, given_price_list, pos=None):
 	# price list
 	price_list = get_permitted_documents('Price List')
 
 	if price_list:
 		price_list = price_list[0]
+	elif pos and party_type == 'Customer':
+		customer_price_list = frappe.get_value('Customer', party.name, 'default_price_list')
+
+		if customer_price_list:
+			price_list = customer_price_list
+		else:
+			pos_price_list = frappe.get_value('Pos Profile', pos, 'selling_price_list')
+			price_list = pos_price_list
 	else:
 		price_list = get_default_price_list(party) or given_price_list