fix(regional): set `frappe.flags.company` temporarily, where required
diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py
index 03cf82a..4996203 100644
--- a/erpnext/accounts/party.py
+++ b/erpnext/accounts/party.py
@@ -33,6 +33,7 @@
from erpnext import get_company_currency
from erpnext.accounts.utils import get_fiscal_year
from erpnext.exceptions import InvalidAccountCurrency, PartyDisabled, PartyFrozen
+from erpnext.utilities.regional import temporary_flag
PURCHASE_TRANSACTION_TYPES = {"Purchase Order", "Purchase Receipt", "Purchase Invoice"}
SALES_TRANSACTION_TYPES = {
@@ -261,9 +262,8 @@
)
if doctype in TRANSACTION_TYPES:
- # required to set correct region
- frappe.flags.company = company
- get_regional_address_details(party_details, doctype, company)
+ with temporary_flag("company", company):
+ get_regional_address_details(party_details, doctype, company)
return party_address, shipping_address
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 4193b53..7940489 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -56,6 +56,7 @@
get_item_tax_map,
get_item_warehouse,
)
+from erpnext.utilities.regional import temporary_flag
from erpnext.utilities.transaction_base import TransactionBase
@@ -760,7 +761,9 @@
}
)
- update_gl_dict_with_regional_fields(self, gl_dict)
+ with temporary_flag("company", self.company):
+ update_gl_dict_with_regional_fields(self, gl_dict)
+
accounting_dimensions = get_accounting_dimensions()
dimension_dict = frappe._dict()
diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py
index 4661c5c..77006b9 100644
--- a/erpnext/controllers/taxes_and_totals.py
+++ b/erpnext/controllers/taxes_and_totals.py
@@ -18,6 +18,7 @@
validate_taxes_and_charges,
)
from erpnext.stock.get_item_details import _get_item_tax_template
+from erpnext.utilities.regional import temporary_flag
class calculate_taxes_and_totals(object):
@@ -942,7 +943,6 @@
def get_itemised_tax_breakup_html(doc):
if not doc.taxes:
return
- frappe.flags.company = doc.company
# get headers
tax_accounts = []
@@ -952,15 +952,11 @@
if tax.description not in tax_accounts:
tax_accounts.append(tax.description)
- headers = get_itemised_tax_breakup_header(doc.doctype + " Item", tax_accounts)
-
- # get tax breakup data
- itemised_tax, itemised_taxable_amount = get_itemised_tax_breakup_data(doc)
-
- get_rounded_tax_amount(itemised_tax, doc.precision("tax_amount", "taxes"))
-
- update_itemised_tax_data(doc)
- frappe.flags.company = None
+ with temporary_flag("company", doc.company):
+ headers = get_itemised_tax_breakup_header(doc.doctype + " Item", tax_accounts)
+ itemised_tax, itemised_taxable_amount = get_itemised_tax_breakup_data(doc)
+ get_rounded_tax_amount(itemised_tax, doc.precision("tax_amount", "taxes"))
+ update_itemised_tax_data(doc)
return frappe.render_template(
"templates/includes/itemised_tax_breakup.html",
@@ -977,10 +973,8 @@
@frappe.whitelist()
def get_round_off_applicable_accounts(company, account_list):
# required to set correct region
- frappe.flags.company = company
- account_list = get_regional_round_off_accounts(company, account_list)
-
- return account_list
+ with temporary_flag("company", company):
+ return get_regional_round_off_accounts(company, account_list)
@erpnext.allow_regional
diff --git a/erpnext/utilities/regional.py b/erpnext/utilities/regional.py
new file mode 100644
index 0000000..858976f
--- /dev/null
+++ b/erpnext/utilities/regional.py
@@ -0,0 +1,13 @@
+from contextlib import contextmanager
+
+import frappe
+
+
+@contextmanager
+def temporary_flag(flag_name, value):
+ flags = frappe.local.flags
+ flags[flag_name] = value
+ try:
+ yield
+ finally:
+ flags.pop(flag_name, None)