blob: 106384ade0642b811cafdefcceca4f8935fe09fe [file] [log] [blame]
Anand Doshi227b2382016-06-09 16:29:12 +05301# -*- coding: utf-8 -*-
2from __future__ import unicode_literals
Rushabh Mehta7231f292017-07-13 15:00:56 +05303import inspect
Rushabh Mehta86a824c2016-04-15 16:44:44 +05304import frappe
Rushabh Mehta7231f292017-07-13 15:00:56 +05305from erpnext.hooks import regional_overrides
Vishalb4d73cb2017-09-19 15:18:33 +05306from frappe.utils import getdate
Rushabh Mehta86a824c2016-04-15 16:44:44 +05307
Sahil Khan0906bc82019-09-05 17:50:44 +05508__version__ = '12.1.1'
Anand Doshi227b2382016-06-09 16:29:12 +05309
Rushabh Mehta86a824c2016-04-15 16:44:44 +053010def get_default_company(user=None):
11 '''Get default company for user'''
12 from frappe.defaults import get_user_default_as_list
13
14 if not user:
15 user = frappe.session.user
16
17 companies = get_user_default_as_list(user, 'company')
18 if companies:
19 default_company = companies[0]
20 else:
21 default_company = frappe.db.get_single_value('Global Defaults', 'default_company')
22
23 return default_company
24
tundebabzya1091412017-05-19 07:12:45 +010025
Rushabh Mehta86a824c2016-04-15 16:44:44 +053026def get_default_currency():
27 '''Returns the currency of the default company'''
28 company = get_default_company()
29 if company:
Rushabh Mehta708e47a2018-08-08 16:37:31 +053030 return frappe.get_cached_value('Company', company, 'default_currency')
Rushabh Mehta66958302017-01-16 16:57:53 +053031
rohitwaghchaure2e8232e2017-08-10 11:32:59 +053032def get_default_cost_center(company):
33 '''Returns the default cost center of the company'''
34 if not company:
35 return None
36
37 if not frappe.flags.company_cost_center:
38 frappe.flags.company_cost_center = {}
39 if not company in frappe.flags.company_cost_center:
Rushabh Mehta708e47a2018-08-08 16:37:31 +053040 frappe.flags.company_cost_center[company] = frappe.get_cached_value('Company', company, 'cost_center')
rohitwaghchaure2e8232e2017-08-10 11:32:59 +053041 return frappe.flags.company_cost_center[company]
tundebabzya1091412017-05-19 07:12:45 +010042
Rushabh Mehtacc8b2b22017-03-31 12:44:29 +053043def get_company_currency(company):
44 '''Returns the default company currency'''
45 if not frappe.flags.company_currency:
46 frappe.flags.company_currency = {}
47 if not company in frappe.flags.company_currency:
Nabin Hait2a774fa2018-08-09 11:50:34 +053048 frappe.flags.company_currency[company] = frappe.db.get_value('Company', company, 'default_currency', cache=True)
Rushabh Mehtacc8b2b22017-03-31 12:44:29 +053049 return frappe.flags.company_currency[company]
50
Rohit Waghchaurea5f40942017-06-16 15:21:36 +053051def set_perpetual_inventory(enable=1, company=None):
52 if not company:
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053053 company = "_Test Company" if frappe.flags.in_test else get_default_company()
tundebabzya1091412017-05-19 07:12:45 +010054
Rohit Waghchaurea5f40942017-06-16 15:21:36 +053055 company = frappe.get_doc("Company", company)
56 company.enable_perpetual_inventory = enable
57 company.save()
tundebabzya1091412017-05-19 07:12:45 +010058
Rushabh Mehta66958302017-01-16 16:57:53 +053059def encode_company_abbr(name, company):
60 '''Returns name encoded with company abbreviation'''
Rushabh Mehta708e47a2018-08-08 16:37:31 +053061 company_abbr = frappe.get_cached_value('Company', company, "abbr")
Rushabh Mehta66958302017-01-16 16:57:53 +053062 parts = name.rsplit(" - ", 1)
63
64 if parts[-1].lower() != company_abbr.lower():
65 parts.append(company_abbr)
66
tundebabzya1091412017-05-19 07:12:45 +010067 return " - ".join(parts)
68
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053069def is_perpetual_inventory_enabled(company):
70 if not company:
71 company = "_Test Company" if frappe.flags.in_test else get_default_company()
tundebabzya1091412017-05-19 07:12:45 +010072
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053073 if not hasattr(frappe.local, 'enable_perpetual_inventory'):
Rushabh Mehta777526e2017-06-20 12:14:32 +053074 frappe.local.enable_perpetual_inventory = {}
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053075
Rushabh Mehta777526e2017-06-20 12:14:32 +053076 if not company in frappe.local.enable_perpetual_inventory:
Himanshu Mishra35b26272018-11-13 11:13:04 +053077 frappe.local.enable_perpetual_inventory[company] = frappe.get_cached_value('Company',
Rushabh Mehta708e47a2018-08-08 16:37:31 +053078 company, "enable_perpetual_inventory") or 0
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053079
Rushabh Mehta777526e2017-06-20 12:14:32 +053080 return frappe.local.enable_perpetual_inventory[company]
Rushabh Mehta7231f292017-07-13 15:00:56 +053081
Rohit Waghchauref689d012018-05-17 23:29:37 +053082def get_default_finance_book(company=None):
83 if not company:
84 company = get_default_company()
85
86 if not hasattr(frappe.local, 'default_finance_book'):
87 frappe.local.default_finance_book = {}
88
89 if not company in frappe.local.default_finance_book:
Himanshu Mishra35b26272018-11-13 11:13:04 +053090 frappe.local.default_finance_book[company] = frappe.get_cached_value('Company',
Rushabh Mehta708e47a2018-08-08 16:37:31 +053091 company, "default_finance_book")
Rohit Waghchauref689d012018-05-17 23:29:37 +053092
93 return frappe.local.default_finance_book[company]
94
rohitwaghchauree8358f32018-05-16 11:02:26 +053095def get_party_account_type(party_type):
96 if not hasattr(frappe.local, 'party_account_types'):
97 frappe.local.party_account_types = {}
98
99 if not party_type in frappe.local.party_account_types:
100 frappe.local.party_account_types[party_type] = frappe.db.get_value("Party Type",
101 party_type, "account_type") or ''
102
103 return frappe.local.party_account_types[party_type]
104
Rushabh Mehta7231f292017-07-13 15:00:56 +0530105def get_region(company=None):
106 '''Return the default country based on flag, company or global settings
107
108 You can also set global company flag in `frappe.flags.company`
109 '''
110 if company or frappe.flags.company:
Himanshu Mishra35b26272018-11-13 11:13:04 +0530111 return frappe.get_cached_value('Company',
Rushabh Mehta708e47a2018-08-08 16:37:31 +0530112 company or frappe.flags.company, 'country')
Rushabh Mehta7231f292017-07-13 15:00:56 +0530113 elif frappe.flags.country:
114 return frappe.flags.country
115 else:
116 return frappe.get_system_settings('country')
117
Rushabh Mehta393becc2017-07-13 15:49:37 +0530118def allow_regional(fn):
119 '''Decorator to make a function regionally overridable
120
121 Example:
122 @erpnext.allow_regional
123 def myfunction():
124 pass'''
Rushabh Mehta7231f292017-07-13 15:00:56 +0530125 def caller(*args, **kwargs):
126 region = get_region()
127 fn_name = inspect.getmodule(fn).__name__ + '.' + fn.__name__
128 if region in regional_overrides and fn_name in regional_overrides[region]:
129 return frappe.get_attr(regional_overrides[region][fn_name])(*args, **kwargs)
130 else:
131 return fn(*args, **kwargs)
132
133 return caller
134
Vishalca614532017-09-11 15:13:16 +0530135def get_last_membership():
136 '''Returns last membership if exists'''
137 last_membership = frappe.get_all('Membership', 'name,to_date,membership_type',
138 dict(member=frappe.session.user, paid=1), order_by='to_date desc', limit=1)
139
140 return last_membership and last_membership[0]
141
142def is_member():
143 '''Returns true if the user is still a member'''
144 last_membership = get_last_membership()
145 if last_membership and getdate(last_membership.to_date) > getdate():
146 return True
Himanshu Mishra35b26272018-11-13 11:13:04 +0530147 return False