From 2332c23c30c05fb68c025a9a55522a382a394b0d Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 23 Feb 2012 11:30:45 +0100 Subject: [PATCH 1/5] [IMP] replaces tools.misc.get_languages by the static dictionary it returns, rename that dict to ALL_LANGUAGES for clarity bzr revid: xmo@openerp.com-20120223103045-a44cl5kdkrnehc66 --- openerp/addons/base/res/res_lang.py | 2 +- openerp/tools/misc.py | 168 ++++++++++++++-------------- 2 files changed, 83 insertions(+), 87 deletions(-) diff --git a/openerp/addons/base/res/res_lang.py b/openerp/addons/base/res/res_lang.py index 13acf109b04..261f401f6be 100644 --- a/openerp/addons/base/res/res_lang.py +++ b/openerp/addons/base/res/res_lang.py @@ -80,7 +80,7 @@ class lang(osv.osv): _logger.warning(msg, lang, lc) if not lang_name: - lang_name = tools.get_languages().get(lang, lang) + lang_name = tools.ALL_LANGUAGES.get(lang, lang) def fix_xa0(s): diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py index a5c72900fc7..89cd8695078 100644 --- a/openerp/tools/misc.py +++ b/openerp/tools/misc.py @@ -550,95 +550,91 @@ def get_iso_codes(lang): lang = lang.split('_')[0] return lang -def get_languages(): - # The codes below are those from Launchpad's Rosetta, with the exception - # of some trivial codes where the Launchpad code is xx and we have xx_XX. - languages={ - 'ab_RU': u'Abkhazian / аҧсуа', - 'ar_AR': u'Arabic / الْعَرَبيّة', - 'bg_BG': u'Bulgarian / български език', - 'bs_BS': u'Bosnian / bosanski jezik', - 'ca_ES': u'Catalan / Català', - 'cs_CZ': u'Czech / Čeština', - 'da_DK': u'Danish / Dansk', - 'de_DE': u'German / Deutsch', - 'el_GR': u'Greek / Ελληνικά', - 'en_CA': u'English (CA)', - 'en_GB': u'English (UK)', - 'en_US': u'English (US)', - 'es_AR': u'Spanish (AR) / Español (AR)', - 'es_BO': u'Spanish (BO) / Español (BO)', - 'es_CL': u'Spanish (CL) / Español (CL)', - 'es_CO': u'Spanish (CO) / Español (CO)', - 'es_CR': u'Spanish (CR) / Español (CR)', - 'es_DO': u'Spanish (DO) / Español (DO)', - 'es_EC': u'Spanish (EC) / Español (EC)', - 'es_ES': u'Spanish / Español', - 'es_GT': u'Spanish (GT) / Español (GT)', - 'es_HN': u'Spanish (HN) / Español (HN)', - 'es_MX': u'Spanish (MX) / Español (MX)', - 'es_NI': u'Spanish (NI) / Español (NI)', - 'es_PA': u'Spanish (PA) / Español (PA)', - 'es_PE': u'Spanish (PE) / Español (PE)', - 'es_PR': u'Spanish (PR) / Español (PR)', - 'es_PY': u'Spanish (PY) / Español (PY)', - 'es_SV': u'Spanish (SV) / Español (SV)', - 'es_UY': u'Spanish (UY) / Español (UY)', - 'es_VE': u'Spanish (VE) / Español (VE)', - 'et_EE': u'Estonian / Eesti keel', - 'fa_IR': u'Persian / فارس', - 'fi_FI': u'Finnish / Suomi', - 'fr_BE': u'French (BE) / Français (BE)', - 'fr_CH': u'French (CH) / Français (CH)', - 'fr_FR': u'French / Français', - 'gl_ES': u'Galician / Galego', - 'gu_IN': u'Gujarati / ગુજરાતી', - 'he_IL': u'Hebrew / עִבְרִי', - 'hi_IN': u'Hindi / हिंदी', - 'hr_HR': u'Croatian / hrvatski jezik', - 'hu_HU': u'Hungarian / Magyar', - 'id_ID': u'Indonesian / Bahasa Indonesia', - 'it_IT': u'Italian / Italiano', - 'iu_CA': u'Inuktitut / ᐃᓄᒃᑎᑐᑦ', - 'ja_JP': u'Japanese / 日本語', - 'ko_KP': u'Korean (KP) / 한국어 (KP)', - 'ko_KR': u'Korean (KR) / 한국어 (KR)', - 'lt_LT': u'Lithuanian / Lietuvių kalba', - 'lv_LV': u'Latvian / latviešu valoda', - 'ml_IN': u'Malayalam / മലയാളം', - 'mn_MN': u'Mongolian / монгол', - 'nb_NO': u'Norwegian Bokmål / Norsk bokmål', - 'nl_NL': u'Dutch / Nederlands', - 'nl_BE': u'Flemish (BE) / Vlaams (BE)', - 'oc_FR': u'Occitan (FR, post 1500) / Occitan', - 'pl_PL': u'Polish / Język polski', - 'pt_BR': u'Portugese (BR) / Português (BR)', - 'pt_PT': u'Portugese / Português', - 'ro_RO': u'Romanian / română', - 'ru_RU': u'Russian / русский язык', - 'si_LK': u'Sinhalese / සිංහල', - 'sl_SI': u'Slovenian / slovenščina', - 'sk_SK': u'Slovak / Slovenský jazyk', - 'sq_AL': u'Albanian / Shqip', - 'sr_RS': u'Serbian (Cyrillic) / српски', - 'sr@latin': u'Serbian (Latin) / srpski', - 'sv_SE': u'Swedish / svenska', - 'te_IN': u'Telugu / తెలుగు', - 'tr_TR': u'Turkish / Türkçe', - 'vi_VN': u'Vietnamese / Tiếng Việt', - 'uk_UA': u'Ukrainian / українська', - 'ur_PK': u'Urdu / اردو', - 'zh_CN': u'Chinese (CN) / 简体中文', - 'zh_HK': u'Chinese (HK)', - 'zh_TW': u'Chinese (TW) / 正體字', - 'th_TH': u'Thai / ภาษาไทย', - 'tlh_TLH': u'Klingon', - } - return languages +ALL_LANGUAGES = { + 'ab_RU': u'Abkhazian / аҧсуа', + 'ar_AR': u'Arabic / الْعَرَبيّة', + 'bg_BG': u'Bulgarian / български език', + 'bs_BS': u'Bosnian / bosanski jezik', + 'ca_ES': u'Catalan / Català', + 'cs_CZ': u'Czech / Čeština', + 'da_DK': u'Danish / Dansk', + 'de_DE': u'German / Deutsch', + 'el_GR': u'Greek / Ελληνικά', + 'en_CA': u'English (CA)', + 'en_GB': u'English (UK)', + 'en_US': u'English (US)', + 'es_AR': u'Spanish (AR) / Español (AR)', + 'es_BO': u'Spanish (BO) / Español (BO)', + 'es_CL': u'Spanish (CL) / Español (CL)', + 'es_CO': u'Spanish (CO) / Español (CO)', + 'es_CR': u'Spanish (CR) / Español (CR)', + 'es_DO': u'Spanish (DO) / Español (DO)', + 'es_EC': u'Spanish (EC) / Español (EC)', + 'es_ES': u'Spanish / Español', + 'es_GT': u'Spanish (GT) / Español (GT)', + 'es_HN': u'Spanish (HN) / Español (HN)', + 'es_MX': u'Spanish (MX) / Español (MX)', + 'es_NI': u'Spanish (NI) / Español (NI)', + 'es_PA': u'Spanish (PA) / Español (PA)', + 'es_PE': u'Spanish (PE) / Español (PE)', + 'es_PR': u'Spanish (PR) / Español (PR)', + 'es_PY': u'Spanish (PY) / Español (PY)', + 'es_SV': u'Spanish (SV) / Español (SV)', + 'es_UY': u'Spanish (UY) / Español (UY)', + 'es_VE': u'Spanish (VE) / Español (VE)', + 'et_EE': u'Estonian / Eesti keel', + 'fa_IR': u'Persian / فارس', + 'fi_FI': u'Finnish / Suomi', + 'fr_BE': u'French (BE) / Français (BE)', + 'fr_CH': u'French (CH) / Français (CH)', + 'fr_FR': u'French / Français', + 'gl_ES': u'Galician / Galego', + 'gu_IN': u'Gujarati / ગુજરાતી', + 'he_IL': u'Hebrew / עִבְרִי', + 'hi_IN': u'Hindi / हिंदी', + 'hr_HR': u'Croatian / hrvatski jezik', + 'hu_HU': u'Hungarian / Magyar', + 'id_ID': u'Indonesian / Bahasa Indonesia', + 'it_IT': u'Italian / Italiano', + 'iu_CA': u'Inuktitut / ᐃᓄᒃᑎᑐᑦ', + 'ja_JP': u'Japanese / 日本語', + 'ko_KP': u'Korean (KP) / 한국어 (KP)', + 'ko_KR': u'Korean (KR) / 한국어 (KR)', + 'lt_LT': u'Lithuanian / Lietuvių kalba', + 'lv_LV': u'Latvian / latviešu valoda', + 'ml_IN': u'Malayalam / മലയാളം', + 'mn_MN': u'Mongolian / монгол', + 'nb_NO': u'Norwegian Bokmål / Norsk bokmål', + 'nl_NL': u'Dutch / Nederlands', + 'nl_BE': u'Flemish (BE) / Vlaams (BE)', + 'oc_FR': u'Occitan (FR, post 1500) / Occitan', + 'pl_PL': u'Polish / Język polski', + 'pt_BR': u'Portugese (BR) / Português (BR)', + 'pt_PT': u'Portugese / Português', + 'ro_RO': u'Romanian / română', + 'ru_RU': u'Russian / русский язык', + 'si_LK': u'Sinhalese / සිංහල', + 'sl_SI': u'Slovenian / slovenščina', + 'sk_SK': u'Slovak / Slovenský jazyk', + 'sq_AL': u'Albanian / Shqip', + 'sr_RS': u'Serbian (Cyrillic) / српски', + 'sr@latin': u'Serbian (Latin) / srpski', + 'sv_SE': u'Swedish / svenska', + 'te_IN': u'Telugu / తెలుగు', + 'tr_TR': u'Turkish / Türkçe', + 'vi_VN': u'Vietnamese / Tiếng Việt', + 'uk_UA': u'Ukrainian / українська', + 'ur_PK': u'Urdu / اردو', + 'zh_CN': u'Chinese (CN) / 简体中文', + 'zh_HK': u'Chinese (HK)', + 'zh_TW': u'Chinese (TW) / 正體字', + 'th_TH': u'Thai / ภาษาไทย', + 'tlh_TLH': u'Klingon', +} def scan_languages(): # Now it will take all languages from get languages function without filter it with base module languages - lang_dict = get_languages() + lang_dict = ALL_LANGUAGES ret = [(lang, lang_dict.get(lang, lang)) for lang in list(lang_dict)] ret.sort(key=lambda k:k[1]) return ret From 18d38fb5eebeb52ad88678a7017a4230c7783727 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 23 Feb 2012 11:32:07 +0100 Subject: [PATCH 2/5] [IMP] document tools.misc.scan_languages, make its implementation less retarded bzr revid: xmo@openerp.com-20120223103207-ra1a0dzcyoe745cx --- openerp/tools/misc.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py index 89cd8695078..06105fbdb56 100644 --- a/openerp/tools/misc.py +++ b/openerp/tools/misc.py @@ -633,12 +633,12 @@ ALL_LANGUAGES = { } def scan_languages(): - # Now it will take all languages from get languages function without filter it with base module languages - lang_dict = ALL_LANGUAGES - ret = [(lang, lang_dict.get(lang, lang)) for lang in list(lang_dict)] - ret.sort(key=lambda k:k[1]) - return ret + """ Returns all languages supported by OpenERP for translation + :returns: a list of (lang_code, lang_name) pairs + :rtype: [(str, unicode)] + """ + return sorted(ALL_LANGUAGES.iteritems(), key=lambda k: k[1]) def get_user_companies(cr, user): def _get_company_children(cr, ids): From 25e699d72dc1d3e61af94402ad3e66b23cd24303 Mon Sep 17 00:00:00 2001 From: Samus Aran Date: Fri, 23 Mar 2012 16:08:50 +0100 Subject: [PATCH 3/5] [IMP] Creating new row in db also update write_date and write_uid bzr revid: cto@openerp.com-20120323150850-26j5ht8eexue86sh --- openerp/osv/orm.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 32b039f6598..22c1a0bc183 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -4172,9 +4172,9 @@ class BaseModel(object): and vals[field]: self._check_selection_field_value(cr, user, field, vals[field], context=context) if self._log_access: - upd0 += ',create_uid,create_date' - upd1 += ",%s,(now() at time zone 'UTC')" - upd2.append(user) + upd0 += ',create_uid,create_date,write_uid,write_date' + upd1 += ",%s,(now() at time zone 'UTC'),%s,(now() at time zone 'UTC')" + upd2.extend((user, user)) cr.execute('insert into "'+self._table+'" (id'+upd0+") values ("+str(id_new)+upd1+')', tuple(upd2)) self.check_access_rule(cr, user, [id_new], 'create', context=context) upd_todo.sort(lambda x, y: self._columns[x].priority-self._columns[y].priority) From ff438c8eb778f51774c54cfc6bd02f8d4a55cbc3 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Wed, 12 Sep 2012 11:59:46 +0200 Subject: [PATCH 4/5] [FIX] openerp.tools.misc.file_open: Very little fix to display coherent error message when file not found occurs. bzr revid: stw@openerp.com-20120912095946-chjiq2y4bltisfw9 --- openerp/tools/misc.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py index 2858a7e1f23..03004b0876f 100644 --- a/openerp/tools/misc.py +++ b/openerp/tools/misc.py @@ -142,6 +142,8 @@ def file_open(name, mode="r", subdir='addons', pathinfo=False): adps = addons.module.ad_paths rtp = os.path.normcase(os.path.abspath(config['root_path'])) + basename = name + if os.path.isabs(name): # It is an absolute path # Is it below 'addons_path' or 'root_path'? @@ -154,7 +156,7 @@ def file_open(name, mode="r", subdir='addons', pathinfo=False): else: # It is outside the OpenERP root: skip zipfile lookup. base, name = os.path.split(name) - return _fileopen(name, mode=mode, basedir=base, pathinfo=pathinfo) + return _fileopen(name, mode=mode, basedir=base, pathinfo=pathinfo, basename=basename) if name.replace(os.sep, '/').startswith('addons/'): subdir = 'addons' @@ -172,16 +174,19 @@ def file_open(name, mode="r", subdir='addons', pathinfo=False): for adp in adps: try: return _fileopen(name2, mode=mode, basedir=adp, - pathinfo=pathinfo) + pathinfo=pathinfo, basename=basename) except IOError: pass # Second, try to locate in root_path - return _fileopen(name, mode=mode, basedir=rtp, pathinfo=pathinfo) + return _fileopen(name, mode=mode, basedir=rtp, pathinfo=pathinfo, basename=basename) -def _fileopen(path, mode, basedir, pathinfo): +def _fileopen(path, mode, basedir, pathinfo, basename=None): name = os.path.normpath(os.path.join(basedir, path)) + + if basename is None: + basename = name # Give higher priority to module directories, which is # a more common case than zipped modules. if os.path.isfile(name): @@ -220,8 +225,8 @@ def _fileopen(path, mode, basedir, pathinfo): pass # Not found if name.endswith('.rml'): - raise IOError('Report %r doesn\'t exist or deleted' % name) - raise IOError('File not found: %s' % name) + raise IOError('Report %r doesn\'t exist or deleted' % basename) + raise IOError('File not found: %s' % basename) #---------------------------------------------------------- From 9511db24161b9fdfc5f13c9782718fa42e340c5a Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Wed, 12 Sep 2012 12:50:40 +0200 Subject: [PATCH 5/5] [IMP] useability Send by Post -> Print Invoice bzr revid: fp@tinyerp.com-20120912105040-n6l8y2jn2hmq2ml6 --- addons/sale/sale_view.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml index 1f077f6601d..31a37c1a921 100644 --- a/addons/sale/sale_view.xml +++ b/addons/sale/sale_view.xml @@ -158,8 +158,8 @@