blob: b0692038f8bdef9780ca53582b58b72ce2d89fe9 [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
Rushabh Mehta86a824c2016-04-15 16:44:44 +05306
Saurabh6f9ef5b2017-07-27 18:20:27 +06007__version__ = '8.6.3'
Anand Doshi227b2382016-06-09 16:29:12 +05308
Rushabh Mehta86a824c2016-04-15 16:44:44 +05309def get_default_company(user=None):
10 '''Get default company for user'''
11 from frappe.defaults import get_user_default_as_list
12
13 if not user:
14 user = frappe.session.user
15
16 companies = get_user_default_as_list(user, 'company')
17 if companies:
18 default_company = companies[0]
19 else:
20 default_company = frappe.db.get_single_value('Global Defaults', 'default_company')
21
22 return default_company
23
tundebabzya1091412017-05-19 07:12:45 +010024
Rushabh Mehta86a824c2016-04-15 16:44:44 +053025def get_default_currency():
26 '''Returns the currency of the default company'''
27 company = get_default_company()
28 if company:
Anand Doshi227b2382016-06-09 16:29:12 +053029 return frappe.db.get_value('Company', company, 'default_currency')
Rushabh Mehta66958302017-01-16 16:57:53 +053030
tundebabzya1091412017-05-19 07:12:45 +010031
Rushabh Mehtacc8b2b22017-03-31 12:44:29 +053032def get_company_currency(company):
33 '''Returns the default company currency'''
34 if not frappe.flags.company_currency:
35 frappe.flags.company_currency = {}
36 if not company in frappe.flags.company_currency:
37 frappe.flags.company_currency[company] = frappe.db.get_value('Company', company, 'default_currency')
38 return frappe.flags.company_currency[company]
39
Rohit Waghchaurea5f40942017-06-16 15:21:36 +053040def set_perpetual_inventory(enable=1, company=None):
41 if not company:
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053042 company = "_Test Company" if frappe.flags.in_test else get_default_company()
tundebabzya1091412017-05-19 07:12:45 +010043
Rohit Waghchaurea5f40942017-06-16 15:21:36 +053044 company = frappe.get_doc("Company", company)
45 company.enable_perpetual_inventory = enable
46 company.save()
tundebabzya1091412017-05-19 07:12:45 +010047
Rushabh Mehta66958302017-01-16 16:57:53 +053048def encode_company_abbr(name, company):
49 '''Returns name encoded with company abbreviation'''
50 company_abbr = frappe.db.get_value("Company", company, "abbr")
51 parts = name.rsplit(" - ", 1)
52
53 if parts[-1].lower() != company_abbr.lower():
54 parts.append(company_abbr)
55
tundebabzya1091412017-05-19 07:12:45 +010056 return " - ".join(parts)
57
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053058def is_perpetual_inventory_enabled(company):
59 if not company:
60 company = "_Test Company" if frappe.flags.in_test else get_default_company()
tundebabzya1091412017-05-19 07:12:45 +010061
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053062 if not hasattr(frappe.local, 'enable_perpetual_inventory'):
Rushabh Mehta777526e2017-06-20 12:14:32 +053063 frappe.local.enable_perpetual_inventory = {}
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053064
Rushabh Mehta777526e2017-06-20 12:14:32 +053065 if not company in frappe.local.enable_perpetual_inventory:
Rohit Waghchaure2d9b3cd2017-06-21 09:40:06 +053066 frappe.local.enable_perpetual_inventory[company] = frappe.db.get_value("Company",
Rushabh Mehta777526e2017-06-20 12:14:32 +053067 company, "enable_perpetual_inventory") or 0
Rohit Waghchauree9ff1912017-06-19 12:54:59 +053068
Rushabh Mehta777526e2017-06-20 12:14:32 +053069 return frappe.local.enable_perpetual_inventory[company]
Rushabh Mehta7231f292017-07-13 15:00:56 +053070
71def get_region(company=None):
72 '''Return the default country based on flag, company or global settings
73
74 You can also set global company flag in `frappe.flags.company`
75 '''
76 if company or frappe.flags.company:
77 return frappe.db.get_value('Company',
78 company or frappe.flags.company, 'country')
79 elif frappe.flags.country:
80 return frappe.flags.country
81 else:
82 return frappe.get_system_settings('country')
83
Rushabh Mehta393becc2017-07-13 15:49:37 +053084def allow_regional(fn):
85 '''Decorator to make a function regionally overridable
86
87 Example:
88 @erpnext.allow_regional
89 def myfunction():
90 pass'''
Rushabh Mehta7231f292017-07-13 15:00:56 +053091 def caller(*args, **kwargs):
92 region = get_region()
93 fn_name = inspect.getmodule(fn).__name__ + '.' + fn.__name__
94 if region in regional_overrides and fn_name in regional_overrides[region]:
95 return frappe.get_attr(regional_overrides[region][fn_name])(*args, **kwargs)
96 else:
97 return fn(*args, **kwargs)
98
99 return caller
100