import inspect import frappe from erpnext.hooks import regional_overrides __version__ = "13.27.0" def get_default_company(user=None): """Get default company for user""" from frappe.defaults import get_user_default_as_list if not user: user = frappe.session.user companies = get_user_default_as_list(user, "company") if companies: default_company = companies[0] else: default_company = frappe.db.get_single_value("Global Defaults", "default_company") return default_company def get_default_currency(): """Returns the currency of the default company""" company = get_default_company() if company: return frappe.get_cached_value("Company", company, "default_currency") def get_default_cost_center(company): """Returns the default cost center of the company""" if not company: return None if not frappe.flags.company_cost_center: frappe.flags.company_cost_center = {} if not company in frappe.flags.company_cost_center: frappe.flags.company_cost_center[company] = frappe.get_cached_value( "Company", company, "cost_center" ) return frappe.flags.company_cost_center[company] def get_company_currency(company): """Returns the default company currency""" if not frappe.flags.company_currency: frappe.flags.company_currency = {} if not company in frappe.flags.company_currency: frappe.flags.company_currency[company] = frappe.db.get_value( "Company", company, "default_currency", cache=True ) return frappe.flags.company_currency[company] def set_perpetual_inventory(enable=1, company=None): if not company: company = "_Test Company" if frappe.flags.in_test else get_default_company() company = frappe.get_doc("Company", company) company.enable_perpetual_inventory = enable company.save() def encode_company_abbr(name, company=None, abbr=None): """Returns name encoded with company abbreviation""" company_abbr = abbr or frappe.get_cached_value("Company", company, "abbr") parts = name.rsplit(" - ", 1) if parts[-1].lower() != company_abbr.lower(): parts.append(company_abbr) return " - ".join(parts) def is_perpetual_inventory_enabled(company): if not company: company = "_Test Company" if frappe.flags.in_test else get_default_company() if not hasattr(frappe.local, "enable_perpetual_inventory"): frappe.local.enable_perpetual_inventory = {} if not company in frappe.local.enable_perpetual_inventory: frappe.local.enable_perpetual_inventory[company] = ( frappe.get_cached_value("Company", company, "enable_perpetual_inventory") or 0 ) return frappe.local.enable_perpetual_inventory[company] def get_default_finance_book(company=None): if not company: company = get_default_company() if not hasattr(frappe.local, "default_finance_book"): frappe.local.default_finance_book = {} if not company in frappe.local.default_finance_book: frappe.local.default_finance_book[company] = frappe.get_cached_value( "Company", company, "default_finance_book" ) return frappe.local.default_finance_book[company] def get_party_account_type(party_type): if not hasattr(frappe.local, "party_account_types"): frappe.local.party_account_types = {} if not party_type in frappe.local.party_account_types: frappe.local.party_account_types[party_type] = ( frappe.db.get_value("Party Type", party_type, "account_type") or "" ) return frappe.local.party_account_types[party_type] def get_region(company=None): """Return the default country based on flag, company or global settings You can also set global company flag in `frappe.flags.company` """ if company or frappe.flags.company: return frappe.get_cached_value("Company", company or frappe.flags.company, "country") elif frappe.flags.country: return frappe.flags.country else: return frappe.get_system_settings("country") def allow_regional(fn): """Decorator to make a function regionally overridable Example: @erpnext.allow_regional def myfunction(): pass""" def caller(*args, **kwargs): region = get_region() fn_name = inspect.getmodule(fn).__name__ + "." + fn.__name__ if region in regional_overrides and fn_name in regional_overrides[region]: return frappe.get_attr(regional_overrides[region][fn_name])(*args, **kwargs) else: return fn(*args, **kwargs) return caller def get_last_membership(member): """Returns last membership if exists""" last_membership = frappe.get_all( "Membership", "name,to_date,membership_type", dict(member=member, paid=1), order_by="to_date desc", limit=1, ) if last_membership: return last_membership[0]