[Fix] System always fetches the payment terms template from the company even if it's removed from the sales invoice (#14879)

This commit is contained in:
rohitwaghchaure
2018-07-13 17:40:48 +05:30
committed by Nabin Hait
parent 5c3b69476d
commit 3ffe89659a
3 changed files with 24 additions and 11 deletions

View File

@@ -20,8 +20,8 @@ from erpnext import get_default_currency, get_company_currency
class DuplicatePartyAccountError(frappe.ValidationError): pass class DuplicatePartyAccountError(frappe.ValidationError): pass
@frappe.whitelist() @frappe.whitelist()
def get_party_details(party=None, account=None, party_type="Customer", company=None, def get_party_details(party=None, account=None, party_type="Customer", company=None, posting_date=None,
posting_date=None, price_list=None, currency=None, doctype=None, ignore_permissions=False): price_list=None, currency=None, doctype=None, ignore_permissions=False, fetch_payment_terms_template=True):
if not party: if not party:
return {} 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)) frappe.throw(_("{0}: {1} does not exists").format(party_type, party))
return _get_party_details(party, account, party_type, 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, def _get_party_details(party=None, account=None, party_type="Customer", company=None, posting_date=None,
posting_date=None, price_list=None, currency=None, doctype=None, ignore_permissions=False): 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)) 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_other_values(out, party, party_type)
set_price_list(out, party, party_type, price_list) 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["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"): if not out.get("currency"):
out["currency"] = currency out["currency"] = currency
@@ -272,6 +274,7 @@ def get_due_date(posting_date, party_type, party, company=None):
if posting_date and party: if posting_date and party:
due_date = posting_date due_date = posting_date
template_name = get_pyt_term_template(party, party_type, company) template_name = get_pyt_term_template(party, party_type, company)
if template_name: if template_name:
due_date = get_due_date_from_template(template_name, posting_date).strftime("%Y-%m-%d") due_date = get_due_date_from_template(template_name, posting_date).strftime("%Y-%m-%d")
else: else:
@@ -304,11 +307,13 @@ def get_due_date_from_template(template_name, posting_date):
return due_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): if getdate(due_date) < getdate(posting_date):
frappe.throw(_("Due Date cannot be before Posting Date")) frappe.throw(_("Due Date cannot be before Posting Date"))
else: 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: if not default_due_date:
return return

View File

@@ -138,9 +138,11 @@ class AccountsController(TransactionBase):
if not self.due_date: if not self.due_date:
frappe.throw(_("Due Date is mandatory")) 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": 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): def set_price_list_currency(self, buying_or_selling):
if self.meta.get_field("posting_date"): if self.meta.get_field("posting_date"):

View File

@@ -52,9 +52,15 @@ class SellingController(StockController):
def set_missing_lead_customer_details(self): def set_missing_lead_customer_details(self):
if getattr(self, "customer", None): if getattr(self, "customer", None):
from erpnext.accounts.party import _get_party_details 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, party_details = _get_party_details(self.customer,
ignore_permissions=self.flags.ignore_permissions, 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"): if not self.meta.get_field("sales_team"):
party_details.pop("sales_team") party_details.pop("sales_team")