148 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- coding: utf-8 -*-
 | |
| from __future__ import unicode_literals
 | |
| import inspect
 | |
| import frappe
 | |
| from erpnext.hooks import regional_overrides
 | |
| from frappe.utils import getdate
 | |
| 
 | |
| __version__ = '13.0.0-dev'
 | |
| 
 | |
| 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):
 | |
| 	'''Returns name encoded with company abbreviation'''
 | |
| 	company_abbr = 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():
 | |
| 	'''Returns last membership if exists'''
 | |
| 	last_membership = frappe.get_all('Membership', 'name,to_date,membership_type',
 | |
| 		dict(member=frappe.session.user, paid=1), order_by='to_date desc', limit=1)
 | |
| 
 | |
| 	return last_membership and last_membership[0]
 | |
| 
 | |
| def is_member():
 | |
| 	'''Returns true if the user is still a member'''
 | |
| 	last_membership = get_last_membership()
 | |
| 	if last_membership and getdate(last_membership.to_date) > getdate():
 | |
| 		return True
 | |
| 	return False
 |