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