blob: 45218276f680823d041852e7335dadd900ff630e [file] [log] [blame]
Anand Doshi227b2382016-06-09 16:29:12 +05301# -*- coding: utf-8 -*-
2from __future__ import unicode_literals
Chillar Anand915b3432021-09-02 16:44:59 +05303
Rushabh Mehta7231f292017-07-13 15:00:56 +05304import inspect
Chillar Anand915b3432021-09-02 16:44:59 +05305
Rushabh Mehta86a824c2016-04-15 16:44:44 +05306import frappe
Chillar Anand915b3432021-09-02 16:44:59 +05307
Rushabh Mehta7231f292017-07-13 15:00:56 +05308from erpnext.hooks import regional_overrides
Rushabh Mehta86a824c2016-04-15 16:44:44 +05309
Rohit Waghchaure03fdce52021-08-17 10:25:49 +055010__version__ = '13.9.0'
Anand Doshi227b2382016-06-09 16:29:12 +053011
Rushabh Mehta86a824c2016-04-15 16:44:44 +053012def get_default_company(user=None):
13 '''Get default company for user'''
14 from frappe.defaults import get_user_default_as_list
15
16 if not user:
17 user = frappe.session.user
18
19 companies = get_user_default_as_list(user, 'company')
20 if companies:
21 default_company = companies[0]
22 else:
23 default_company = frappe.db.get_single_value('Global Defaults', 'default_company')
24
25 return default_company
26
tundebabzya1091412017-05-19 07:12:45 +010027
Rushabh Mehta86a824c2016-04-15 16:44:44 +053028def get_default_currency():
29 '''Returns the currency of the default company'''
30 company = get_default_company()
31 if company:
Rushabh Mehta708e47a2018-08-08 16:37:31 +053032 return frappe.get_cached_value('Company', company, 'default_currency')
Rushabh Mehta66958302017-01-16 16:57:53 +053033
rohitwaghchaure2e8232e2017-08-10 11:32:59 +053034def get_default_cost_center(company):
35 '''Returns the default cost center of the company'''
36 if not company:
37 return None
38
39 if not frappe.flags.company_cost_center:
40 frappe.flags.company_cost_center = {}
41 if not company in frappe.flags.company_cost_center:
Rushabh Mehta708e47a2018-08-08 16:37:31 +053042 frappe.flags.company_cost_center[company] = frappe.get_cached_value('Company', company, 'cost_center')
rohitwaghchaure2e8232e2017-08-10 11:32:59 +053043 return frappe.flags.company_cost_center[company]
tundebabzya1091412017-05-19 07:12:45 +010044
Rushabh Mehtacc8b2b22017-03-31 12:44:29 +053045def get_company_currency(company):
46 '''Returns the default company currency'''
47 if not frappe.flags.company_currency:
48 frappe.flags.company_currency = {}
49 if not company in frappe.flags.company_currency:
Nabin Hait2a774fa2018-08-09 11:50:34 +053050 frappe.flags.company_currency[company] = frappe.db.get_value('Company', company, 'default_currency', cache=True)
Rushabh Mehtacc8b2b22017-03-31 12:44:29 +053051 return frappe.flags.company_currency[company]
52
Rohit Waghchaurea5f40942017-06-16 15:21:36 +053053def set_perpetual_inventory(enable=1, company=None):
54 if not company:
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053055 company = "_Test Company" if frappe.flags.in_test else get_default_company()
tundebabzya1091412017-05-19 07:12:45 +010056
Rohit Waghchaurea5f40942017-06-16 15:21:36 +053057 company = frappe.get_doc("Company", company)
58 company.enable_perpetual_inventory = enable
59 company.save()
tundebabzya1091412017-05-19 07:12:45 +010060
Rushabh Mehta66958302017-01-16 16:57:53 +053061def encode_company_abbr(name, company):
62 '''Returns name encoded with company abbreviation'''
Rushabh Mehta708e47a2018-08-08 16:37:31 +053063 company_abbr = frappe.get_cached_value('Company', company, "abbr")
Rushabh Mehta66958302017-01-16 16:57:53 +053064 parts = name.rsplit(" - ", 1)
65
66 if parts[-1].lower() != company_abbr.lower():
67 parts.append(company_abbr)
68
tundebabzya1091412017-05-19 07:12:45 +010069 return " - ".join(parts)
70
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053071def is_perpetual_inventory_enabled(company):
72 if not company:
73 company = "_Test Company" if frappe.flags.in_test else get_default_company()
tundebabzya1091412017-05-19 07:12:45 +010074
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053075 if not hasattr(frappe.local, 'enable_perpetual_inventory'):
Rushabh Mehta777526e2017-06-20 12:14:32 +053076 frappe.local.enable_perpetual_inventory = {}
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053077
Rushabh Mehta777526e2017-06-20 12:14:32 +053078 if not company in frappe.local.enable_perpetual_inventory:
Himanshu Mishra35b26272018-11-13 11:13:04 +053079 frappe.local.enable_perpetual_inventory[company] = frappe.get_cached_value('Company',
Rushabh Mehta708e47a2018-08-08 16:37:31 +053080 company, "enable_perpetual_inventory") or 0
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053081
Rushabh Mehta777526e2017-06-20 12:14:32 +053082 return frappe.local.enable_perpetual_inventory[company]
Rushabh Mehta7231f292017-07-13 15:00:56 +053083
Rohit Waghchauref689d012018-05-17 23:29:37 +053084def get_default_finance_book(company=None):
85 if not company:
86 company = get_default_company()
87
88 if not hasattr(frappe.local, 'default_finance_book'):
89 frappe.local.default_finance_book = {}
90
91 if not company in frappe.local.default_finance_book:
Himanshu Mishra35b26272018-11-13 11:13:04 +053092 frappe.local.default_finance_book[company] = frappe.get_cached_value('Company',
Rushabh Mehta708e47a2018-08-08 16:37:31 +053093 company, "default_finance_book")
Rohit Waghchauref689d012018-05-17 23:29:37 +053094
95 return frappe.local.default_finance_book[company]
96
rohitwaghchauree8358f32018-05-16 11:02:26 +053097def get_party_account_type(party_type):
98 if not hasattr(frappe.local, 'party_account_types'):
99 frappe.local.party_account_types = {}
100
101 if not party_type in frappe.local.party_account_types:
102 frappe.local.party_account_types[party_type] = frappe.db.get_value("Party Type",
103 party_type, "account_type") or ''
104
105 return frappe.local.party_account_types[party_type]
106
Rushabh Mehta7231f292017-07-13 15:00:56 +0530107def get_region(company=None):
108 '''Return the default country based on flag, company or global settings
109
110 You can also set global company flag in `frappe.flags.company`
111 '''
112 if company or frappe.flags.company:
Himanshu Mishra35b26272018-11-13 11:13:04 +0530113 return frappe.get_cached_value('Company',
Deepesh Garg6a5ef262021-02-19 14:30:23 +0530114 company or frappe.flags.company, 'country')
Rushabh Mehta7231f292017-07-13 15:00:56 +0530115 elif frappe.flags.country:
116 return frappe.flags.country
117 else:
118 return frappe.get_system_settings('country')
119
Rushabh Mehta393becc2017-07-13 15:49:37 +0530120def allow_regional(fn):
121 '''Decorator to make a function regionally overridable
122
123 Example:
124 @erpnext.allow_regional
125 def myfunction():
126 pass'''
Rushabh Mehta7231f292017-07-13 15:00:56 +0530127 def caller(*args, **kwargs):
128 region = get_region()
129 fn_name = inspect.getmodule(fn).__name__ + '.' + fn.__name__
130 if region in regional_overrides and fn_name in regional_overrides[region]:
131 return frappe.get_attr(regional_overrides[region][fn_name])(*args, **kwargs)
132 else:
133 return fn(*args, **kwargs)
134
135 return caller
136
Shivam Mishra7e1cdf92020-11-09 14:01:11 +0530137def get_last_membership(member):
Vishalca614532017-09-11 15:13:16 +0530138 '''Returns last membership if exists'''
139 last_membership = frappe.get_all('Membership', 'name,to_date,membership_type',
Shivam Mishra7e1cdf92020-11-09 14:01:11 +0530140 dict(member=member, paid=1), order_by='to_date desc', limit=1)
Vishalca614532017-09-11 15:13:16 +0530141
Shivam Mishra7e1cdf92020-11-09 14:01:11 +0530142 if last_membership:
143 return last_membership[0]