[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:
committed by
Nabin Hait
parent
5c3b69476d
commit
3ffe89659a
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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"):
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user