diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index 8ab25a3da2..38f4aea429 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -20,8 +20,8 @@ from erpnext import get_default_currency, get_company_currency class DuplicatePartyAccountError(frappe.ValidationError): pass @frappe.whitelist() -def get_party_details(party=None, account=None, party_type="Customer", company=None, - posting_date=None, price_list=None, currency=None, doctype=None, ignore_permissions=False): +def get_party_details(party=None, account=None, party_type="Customer", company=None, posting_date=None, + price_list=None, currency=None, doctype=None, ignore_permissions=False, fetch_payment_terms_template=True): if not party: return {} @@ -30,10 +30,10 @@ def get_party_details(party=None, account=None, party_type="Customer", company=N frappe.throw(_("{0}: {1} does not exists").format(party_type, party)) return _get_party_details(party, account, party_type, - company, posting_date, price_list, currency, doctype, ignore_permissions) + company, posting_date, price_list, currency, doctype, ignore_permissions, fetch_payment_terms_template) -def _get_party_details(party=None, account=None, party_type="Customer", company=None, - posting_date=None, price_list=None, currency=None, doctype=None, ignore_permissions=False): +def _get_party_details(party=None, account=None, party_type="Customer", company=None, posting_date=None, + price_list=None, currency=None, doctype=None, ignore_permissions=False, fetch_payment_terms_template=True): out = frappe._dict(set_account_and_due_date(party, account, party_type, company, posting_date, doctype)) @@ -50,7 +50,9 @@ def _get_party_details(party=None, account=None, party_type="Customer", company= set_other_values(out, party, party_type) set_price_list(out, party, party_type, price_list) out["taxes_and_charges"] = set_taxes(party.name, party_type, posting_date, company, out.customer_group, out.supplier_type) - out["payment_terms_template"] = get_pyt_term_template(party.name, party_type, company) + + if fetch_payment_terms_template: + out["payment_terms_template"] = get_pyt_term_template(party.name, party_type, company) if not out.get("currency"): out["currency"] = currency @@ -272,6 +274,7 @@ def get_due_date(posting_date, party_type, party, company=None): if posting_date and party: due_date = posting_date template_name = get_pyt_term_template(party, party_type, company) + if template_name: due_date = get_due_date_from_template(template_name, posting_date).strftime("%Y-%m-%d") else: @@ -304,11 +307,13 @@ def get_due_date_from_template(template_name, posting_date): return due_date -def validate_due_date(posting_date, due_date, party_type, party, company=None): +def validate_due_date(posting_date, due_date, party_type, party, company=None, template_name=None): if getdate(due_date) < getdate(posting_date): frappe.throw(_("Due Date cannot be before Posting Date")) else: - default_due_date = get_due_date(posting_date, party_type, party, company) + if not template_name: return + + default_due_date = get_due_date_from_template(template_name, posting_date).strftime("%Y-%m-%d") if not default_due_date: return diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 22ddf1f3e2..68f4f73147 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -138,9 +138,11 @@ class AccountsController(TransactionBase): if not self.due_date: frappe.throw(_("Due Date is mandatory")) - validate_due_date(self.posting_date, self.due_date, "Customer", self.customer, self.company) + validate_due_date(self.posting_date, self.due_date, + "Customer", self.customer, self.company, self.payment_terms_template) elif self.doctype == "Purchase Invoice": - validate_due_date(self.posting_date, self.due_date, "Supplier", self.supplier, self.company) + validate_due_date(self.posting_date, self.due_date, + "Supplier", self.supplier, self.company, self.payment_terms_template) def set_price_list_currency(self, buying_or_selling): if self.meta.get_field("posting_date"): diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index fcc9d75e79..be5f64ecb1 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -52,9 +52,15 @@ class SellingController(StockController): def set_missing_lead_customer_details(self): if getattr(self, "customer", None): from erpnext.accounts.party import _get_party_details + fetch_payment_terms_template = False + if (self.get("__islocal") or + self.company != frappe.db.get_value(self.doctype, self.name, 'company')): + fetch_payment_terms_template = True + party_details = _get_party_details(self.customer, ignore_permissions=self.flags.ignore_permissions, - doctype=self.doctype, company=self.company) + doctype=self.doctype, company=self.company, + fetch_payment_terms_template=fetch_payment_terms_template) if not self.meta.get_field("sales_team"): party_details.pop("sales_team")