blob: dcfad1f100e15b14dbee2050f6f913ee585985c0 [file] [log] [blame]
Rushabh Mehta7231f292017-07-13 15:00:56 +05301import inspect
Chillar Anand915b3432021-09-02 16:44:59 +05302
Rushabh Mehta86a824c2016-04-15 16:44:44 +05303import frappe
Chillar Anand915b3432021-09-02 16:44:59 +05304
Ankush Menatefec85d2021-11-26 16:29:21 +05305__version__ = '14.0.0-dev'
Anand Doshi227b2382016-06-09 16:29:12 +05306
Rushabh Mehta86a824c2016-04-15 16:44:44 +05307def get_default_company(user=None):
8 '''Get default company for user'''
9 from frappe.defaults import get_user_default_as_list
10
11 if not user:
12 user = frappe.session.user
13
14 companies = get_user_default_as_list(user, 'company')
15 if companies:
16 default_company = companies[0]
17 else:
18 default_company = frappe.db.get_single_value('Global Defaults', 'default_company')
19
20 return default_company
21
tundebabzya1091412017-05-19 07:12:45 +010022
Rushabh Mehta86a824c2016-04-15 16:44:44 +053023def get_default_currency():
24 '''Returns the currency of the default company'''
25 company = get_default_company()
26 if company:
Rushabh Mehta708e47a2018-08-08 16:37:31 +053027 return frappe.get_cached_value('Company', company, 'default_currency')
Rushabh Mehta66958302017-01-16 16:57:53 +053028
rohitwaghchaure2e8232e2017-08-10 11:32:59 +053029def get_default_cost_center(company):
30 '''Returns the default cost center of the company'''
31 if not company:
32 return None
33
34 if not frappe.flags.company_cost_center:
35 frappe.flags.company_cost_center = {}
36 if not company in frappe.flags.company_cost_center:
Rushabh Mehta708e47a2018-08-08 16:37:31 +053037 frappe.flags.company_cost_center[company] = frappe.get_cached_value('Company', company, 'cost_center')
rohitwaghchaure2e8232e2017-08-10 11:32:59 +053038 return frappe.flags.company_cost_center[company]
tundebabzya1091412017-05-19 07:12:45 +010039
Rushabh Mehtacc8b2b22017-03-31 12:44:29 +053040def get_company_currency(company):
41 '''Returns the default company currency'''
42 if not frappe.flags.company_currency:
43 frappe.flags.company_currency = {}
44 if not company in frappe.flags.company_currency:
Nabin Hait2a774fa2018-08-09 11:50:34 +053045 frappe.flags.company_currency[company] = frappe.db.get_value('Company', company, 'default_currency', cache=True)
Rushabh Mehtacc8b2b22017-03-31 12:44:29 +053046 return frappe.flags.company_currency[company]
47
Rohit Waghchaurea5f40942017-06-16 15:21:36 +053048def set_perpetual_inventory(enable=1, company=None):
49 if not company:
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053050 company = "_Test Company" if frappe.flags.in_test else get_default_company()
tundebabzya1091412017-05-19 07:12:45 +010051
Rohit Waghchaurea5f40942017-06-16 15:21:36 +053052 company = frappe.get_doc("Company", company)
53 company.enable_perpetual_inventory = enable
54 company.save()
tundebabzya1091412017-05-19 07:12:45 +010055
Ankush Menatd7148ad2021-12-20 22:00:31 +053056def encode_company_abbr(name, company=None, abbr=None):
Rushabh Mehta66958302017-01-16 16:57:53 +053057 '''Returns name encoded with company abbreviation'''
Ankush Menatd7148ad2021-12-20 22:00:31 +053058 company_abbr = abbr or frappe.get_cached_value('Company', company, "abbr")
Rushabh Mehta66958302017-01-16 16:57:53 +053059 parts = name.rsplit(" - ", 1)
60
61 if parts[-1].lower() != company_abbr.lower():
62 parts.append(company_abbr)
63
tundebabzya1091412017-05-19 07:12:45 +010064 return " - ".join(parts)
65
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053066def is_perpetual_inventory_enabled(company):
67 if not company:
68 company = "_Test Company" if frappe.flags.in_test else get_default_company()
tundebabzya1091412017-05-19 07:12:45 +010069
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053070 if not hasattr(frappe.local, 'enable_perpetual_inventory'):
Rushabh Mehta777526e2017-06-20 12:14:32 +053071 frappe.local.enable_perpetual_inventory = {}
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053072
Rushabh Mehta777526e2017-06-20 12:14:32 +053073 if not company in frappe.local.enable_perpetual_inventory:
Himanshu Mishra35b26272018-11-13 11:13:04 +053074 frappe.local.enable_perpetual_inventory[company] = frappe.get_cached_value('Company',
Rushabh Mehta708e47a2018-08-08 16:37:31 +053075 company, "enable_perpetual_inventory") or 0
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053076
Rushabh Mehta777526e2017-06-20 12:14:32 +053077 return frappe.local.enable_perpetual_inventory[company]
Rushabh Mehta7231f292017-07-13 15:00:56 +053078
Rohit Waghchauref689d012018-05-17 23:29:37 +053079def get_default_finance_book(company=None):
80 if not company:
81 company = get_default_company()
82
83 if not hasattr(frappe.local, 'default_finance_book'):
84 frappe.local.default_finance_book = {}
85
86 if not company in frappe.local.default_finance_book:
Himanshu Mishra35b26272018-11-13 11:13:04 +053087 frappe.local.default_finance_book[company] = frappe.get_cached_value('Company',
Rushabh Mehta708e47a2018-08-08 16:37:31 +053088 company, "default_finance_book")
Rohit Waghchauref689d012018-05-17 23:29:37 +053089
90 return frappe.local.default_finance_book[company]
91
rohitwaghchauree8358f32018-05-16 11:02:26 +053092def get_party_account_type(party_type):
93 if not hasattr(frappe.local, 'party_account_types'):
94 frappe.local.party_account_types = {}
95
96 if not party_type in frappe.local.party_account_types:
97 frappe.local.party_account_types[party_type] = frappe.db.get_value("Party Type",
98 party_type, "account_type") or ''
99
100 return frappe.local.party_account_types[party_type]
101
Rushabh Mehta7231f292017-07-13 15:00:56 +0530102def get_region(company=None):
103 '''Return the default country based on flag, company or global settings
104
105 You can also set global company flag in `frappe.flags.company`
106 '''
107 if company or frappe.flags.company:
Himanshu Mishra35b26272018-11-13 11:13:04 +0530108 return frappe.get_cached_value('Company',
Deepesh Garg6a5ef262021-02-19 14:30:23 +0530109 company or frappe.flags.company, 'country')
Rushabh Mehta7231f292017-07-13 15:00:56 +0530110 elif frappe.flags.country:
111 return frappe.flags.country
112 else:
113 return frappe.get_system_settings('country')
114
Rushabh Mehta393becc2017-07-13 15:49:37 +0530115def allow_regional(fn):
116 '''Decorator to make a function regionally overridable
117
118 Example:
119 @erpnext.allow_regional
120 def myfunction():
121 pass'''
Sagar Vorab68a9962022-02-09 16:56:24 +0530122
Rushabh Mehta7231f292017-07-13 15:00:56 +0530123 def caller(*args, **kwargs):
Sagar Vorab68a9962022-02-09 16:56:24 +0530124 overrides = frappe.get_hooks("regional_overrides", {}).get(get_region())
125 function_path = f"{inspect.getmodule(fn).__name__}.{fn.__name__}"
126
127 if not overrides or function_path not in overrides:
Rushabh Mehta7231f292017-07-13 15:00:56 +0530128 return fn(*args, **kwargs)
129
Sagar Vorab68a9962022-02-09 16:56:24 +0530130 # Priority given to last installed app
131 return frappe.get_attr(overrides[function_path][-1])(*args, **kwargs)
132
Rushabh Mehta7231f292017-07-13 15:00:56 +0530133 return caller