From fec027e83203e6705f690469cd39101e4eba3b06 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Tue, 15 Jan 2013 11:40:15 +0100 Subject: [PATCH 01/29] [IMP] reorder modules menus bzr revid: chs@openerp.com-20130115104015-5ytx00t0b5230aaf --- openerp/addons/base/module/module_view.xml | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/openerp/addons/base/module/module_view.xml b/openerp/addons/base/module/module_view.xml index 3a43a2591ba..3923c9de3bd 100644 --- a/openerp/addons/base/module/module_view.xml +++ b/openerp/addons/base/module/module_view.xml @@ -171,23 +171,18 @@ - - Modules ir.module.module form kanban,tree,form -

No module found!

You should try others search criteria.

- + @@ -195,20 +190,14 @@ Apps apps - - + Updates apps.updates {} - - + From 7e1a76cdd846a8c455d402fcd76d8baa58a9b2f8 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Tue, 15 Jan 2013 11:40:47 +0100 Subject: [PATCH 02/29] [FIX] setup.py: correct windows install bzr revid: chs@openerp.com-20130115104047-6hrl825bn5pkmoo6 --- setup.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/setup.py b/setup.py index b144924d022..e4e6001d302 100755 --- a/setup.py +++ b/setup.py @@ -43,6 +43,12 @@ def data(): base = os.path.join('pytz', root[len(tzdir) + 1:]) r[base] = [os.path.join(root, f) for f in filenames] + import docutils + dudir = os.path.dirname(docutils.__file__) + for root, _, filenames in os.walk(dudir): + base = os.path.join('docutils', root[len(dudir) + 1:]) + r[base] = [os.path.join(root, f) for f in filenames if not f.endswith(('.py', '.pyc', '.pyo'))] + return r.items() def gen_manifest(): From e2639618f666605e385befb578db3f889a8c035f Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 17 Jan 2013 10:27:22 +0100 Subject: [PATCH 03/29] [DOC] remove openerpdev intersphinx, add ref to module doc bzr revid: xmo@openerp.com-20130117092722-6rfhkcu4igrgeo06 --- addons/web/doc/conf.py | 1 - addons/web/doc/module.rst | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/web/doc/conf.py b/addons/web/doc/conf.py index 54434190707..7fe38022ab1 100644 --- a/addons/web/doc/conf.py +++ b/addons/web/doc/conf.py @@ -253,6 +253,5 @@ todo_include_todos = True intersphinx_mapping = { 'python': ('http://docs.python.org/', None), 'openerpserver': ('http://doc.openerp.com/trunk/developers/server', None), - 'openerpdev': ('http://doc.openerp.com/trunk/developers', None), 'openerpcommand': ('http://doc.openerp.com/trunk/developers/command', None), } diff --git a/addons/web/doc/module.rst b/addons/web/doc/module.rst index 1bdb7c14799..8306e885f65 100644 --- a/addons/web/doc/module.rst +++ b/addons/web/doc/module.rst @@ -1,3 +1,5 @@ +.. _module: + Building an OpenERP Web module ============================== From 3574038ffdf78e8c63430ecc92a4f2d916207fda Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Thu, 17 Jan 2013 14:29:24 +0100 Subject: [PATCH 04/29] [FIX] apps: install_from_url: fix install condition + better logging bzr revid: chs@openerp.com-20130117132924-ejzbkh5przqi6hwf --- openerp/addons/base/module/module.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/openerp/addons/base/module/module.py b/openerp/addons/base/module/module.py index 9e8b68451c5..123bf4124ed 100644 --- a/openerp/addons/base/module/module.py +++ b/openerp/addons/base/module/module.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2012 OpenERP S.A. (). +# Copyright (C) 2004-2013 OpenERP S.A. (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -656,6 +656,7 @@ class module(osv.osv): def install_from_urls(self, cr, uid, urls, context=None): OPENERP = 'openerp' tmp = tempfile.mkdtemp() + _logger.debug('Install from url: %r', urls) try: # 1. Download & unzip missing modules for module_name, url in urls.items(): @@ -672,12 +673,13 @@ class module(osv.osv): zipfile.ZipFile(StringIO(content)).extractall(tmp) assert os.path.isdir(os.path.join(tmp, module_name)) - # 2a. Copy/Replace module source in addons path + # 2a. Copy/Replace module source in addons path for module_name, url in urls.items(): if module_name == OPENERP or not url: continue # OPENERP is special case, handled below, and no URL means local module module_path = modules.get_module_path(module_name, downloaded=True, display_warning=False) bck = backup(module_path, False) + _logger.info('Copy downloaded module `%s` to `%s`', module_name, module_path) shutil.move(os.path.join(tmp, module_name), module_path) if bck: shutil.rmtree(bck) @@ -697,15 +699,22 @@ class module(osv.osv): # then replace the server by the new "base" module server_dir = openerp.tools.config['root_path'] # XXX or dirname() bck = backup(server_dir) + _logger.info('Copy downloaded module `openerp` to `%s`', server_dir) shutil.move(os.path.join(tmp, OPENERP), server_dir) #if bck: # shutil.rmtree(bck) self.update_list(cr, uid, context=context) - ids = self.search(cr, uid, [('name', 'in', urls.keys())], context=context) - if self.search_count(cr, uid, [('id', 'in', ids), ('state', '=', 'installed')], context=context): - # if any to update + with_urls = [m for m, u in urls.items() if u] + downloaded_ids = self.search(cr, uid, [('name', 'in', with_urls)], context=context) + already_installed = self.search(cr, uid, [('id', 'in', downloaded_ids), ('state', '=', 'installed')], context=context) + + to_install_ids = self.search(cr, uid, [('name', 'in', urls.keys()), ('state', '=', 'uninstalled')], context=context) + post_install_action = self.button_immediate_install(cr, uid, to_install_ids, context=context) + + if already_installed: + # in this case, force server restart to reload python code... cr.commit() openerp.service.restart_server() return { @@ -713,7 +722,7 @@ class module(osv.osv): 'tag': 'home', 'params': {'wait': True}, } - return self.button_immediate_install(cr, uid, ids, context=context) + return post_install_action finally: shutil.rmtree(tmp) From 4857a8a020d81ebd375122fb478726103c3f2393 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Thu, 17 Jan 2013 14:51:08 +0100 Subject: [PATCH 05/29] [FIX] module loading: call adapt_version() instead of computing it ourself bzr revid: chs@openerp.com-20130117135108-a4wt4wtbtfdwiui3 --- openerp/modules/loading.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/openerp/modules/loading.py b/openerp/modules/loading.py index fb68642f137..638a40c9fa8 100644 --- a/openerp/modules/loading.py +++ b/openerp/modules/loading.py @@ -3,7 +3,7 @@ # # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (). -# Copyright (C) 2010-2012 OpenERP s.a. (). +# Copyright (C) 2010-2013 OpenERP s.a. (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -36,14 +36,12 @@ import openerp.modules.graph import openerp.modules.migration import openerp.osv as osv import openerp.pooler as pooler -import openerp.release as release import openerp.tools as tools from openerp import SUPERUSER_ID -from openerp import SUPERUSER_ID from openerp.tools.translate import _ from openerp.modules.module import initialize_sys_path, \ - load_openerp_module, init_module_models + load_openerp_module, init_module_models, adapt_version _logger = logging.getLogger(__name__) @@ -213,7 +211,7 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules= migrations.migrate_module(package, 'post') - ver = release.major_version + '.' + package.data['version'] + ver = adapt_version(package.data['version']) # Set new modules and dependencies modobj.write(cr, SUPERUSER_ID, [module_id], {'state': 'installed', 'latest_version': ver}) # Update translations for all installed languages From 3276861ff6125d02e08b5c5b12b75925e056c4bc Mon Sep 17 00:00:00 2001 From: "Xavier Fernandez http://www.smile.fr" <> Date: Wed, 28 Aug 2013 17:21:17 +0200 Subject: [PATCH 07/29] [FIX] port Xavier Fernandez's fix for Bug #971412: Translations export has no fixed order lp bug: https://launchpad.net/bugs/971412 fixed bzr revid: ls@numerigraphe.com-20130828152117-e1h0yljgbn538v9o --- openerp/tools/translate.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openerp/tools/translate.py b/openerp/tools/translate.py index 41113b8ccd9..53762b87970 100644 --- a/openerp/tools/translate.py +++ b/openerp/tools/translate.py @@ -458,7 +458,8 @@ def trans_export(lang, modules, buffer, format, cr): row.setdefault('tnrs', []).append((type, name, res_id)) row.setdefault('comments', set()).update(comments) - for src, row in grouped_rows.items(): + for src in sorted(grouped_rows): + row = grouped_rows[src] if not lang: # translation template, so no translation value row['translation'] = '' From 1f3a482f4fc309262802b980e143234a56b9503d Mon Sep 17 00:00:00 2001 From: Lionel Sausin Date: Thu, 29 Aug 2013 09:50:35 +0200 Subject: [PATCH 08/29] [REF] avoid the lookup in sorted translation export as suggested by Guewen Baconnier @ Camptocamp bzr revid: ls@numerigraphe.com-20130829075035-lml81a7bbn66c8qu --- openerp/tools/translate.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openerp/tools/translate.py b/openerp/tools/translate.py index 53762b87970..6e9eb50f162 100644 --- a/openerp/tools/translate.py +++ b/openerp/tools/translate.py @@ -458,8 +458,7 @@ def trans_export(lang, modules, buffer, format, cr): row.setdefault('tnrs', []).append((type, name, res_id)) row.setdefault('comments', set()).update(comments) - for src in sorted(grouped_rows): - row = grouped_rows[src] + for src, row in sorted(grouped_rows.items()): if not lang: # translation template, so no translation value row['translation'] = '' From 855836e96e42f1be3075eaa87628184f52112b80 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Thu, 27 Feb 2014 13:56:48 +0100 Subject: [PATCH 09/29] [IMP] Move the netsvc.dispatch_rpc function from netsvc to openerp.http bzr revid: stw@openerp.com-20140227125648-kunaefr22y28honx --- openerp/http.py | 96 +++++++++++++++++++++++++++++++--- openerp/netsvc.py | 86 ------------------------------ openerp/service/wsgi_server.py | 2 +- openerp/tools/__init__.py | 2 +- openerp/tools/debugger.py | 8 +++ 5 files changed, 98 insertions(+), 96 deletions(-) create mode 100644 openerp/tools/debugger.py diff --git a/openerp/http.py b/openerp/http.py index bcd7511d769..ea1e82ed4c6 100644 --- a/openerp/http.py +++ b/openerp/http.py @@ -21,8 +21,10 @@ import time import traceback import urlparse import warnings +from pprint import pformat import babel.core +import psutil import psycopg2 import simplejson import werkzeug.contrib.sessions @@ -34,6 +36,7 @@ import werkzeug.wrappers import werkzeug.wsgi import openerp +import openerp.netsvc from openerp.service import security, model as service_model import openerp.tools @@ -50,6 +53,83 @@ request = _request_stack() A global proxy that always redirect to the current request object. """ +def replace_request_password(args): + # password is always 3rd argument in a request, we replace it in RPC logs + # so it's easier to forward logs for diagnostics/debugging purposes... + if len(args) > 2: + args = list(args) + args[2] = '*' + return tuple(args) + +def log(logger, level, prefix, msg, depth=None): + indent='' + indent_after=' '*len(prefix) + for line in (prefix+pformat(msg, depth=depth)).split('\n'): + logger.log(level, indent+line) + indent=indent_after + +def dispatch_rpc(service_name, method, params): + """ Handle a RPC call. + + This is pure Python code, the actual marshalling (from/to XML-RPC) is done + in a upper layer. + """ + try: + rpc_request = logging.getLogger(__name__ + '.rpc.request') + rpc_response = logging.getLogger(__name__ + '.rpc.response') + rpc_request_flag = rpc_request.isEnabledFor(logging.DEBUG) + rpc_response_flag = rpc_response.isEnabledFor(logging.DEBUG) + if rpc_request_flag or rpc_response_flag: + start_time = time.time() + start_rss, start_vms = 0, 0 + start_rss, start_vms = psutil.Process(os.getpid()).get_memory_info() + if rpc_request and rpc_response_flag: + log(rpc_request, logging.DEBUG, '%s.%s' % (service_name, method), replace_request_password(params)) + + threading.current_thread().uid = None + threading.current_thread().dbname = None + if service_name == 'common': + dispatch = openerp.service.common.dispatch + elif service_name == 'db': + dispatch = openerp.service.db.dispatch + elif service_name == 'object': + dispatch = openerp.service.model.dispatch + elif service_name == 'report': + dispatch = openerp.service.report.dispatch + else: + dispatch = openerp.service.wsgi_server.rpc_handlers.get(service_name) + result = dispatch(method, params) + + if rpc_request_flag or rpc_response_flag: + end_time = time.time() + end_rss, end_vms = 0, 0 + end_rss, end_vms = psutil.Process(os.getpid()).get_memory_info() + logline = '%s.%s time:%.3fs mem: %sk -> %sk (diff: %sk)' % (service_name, method, end_time - start_time, start_vms / 1024, end_vms / 1024, (end_vms - start_vms)/1024) + if rpc_response_flag: + log(rpc_response, logging.DEBUG, logline, result) + else: + log(rpc_request, logging.DEBUG, logline, replace_request_password(params), depth=1) + + return result + except openerp.osv.orm.except_orm: + raise + except openerp.exceptions.AccessError: + raise + except openerp.exceptions.AccessDenied: + raise + except openerp.exceptions.Warning: + raise + except openerp.exceptions.RedirectWarning: + raise + except openerp.exceptions.DeferredException, e: + _logger.exception(openerp.tools.exception_to_unicode(e)) + openerp.tools.debugger.post_mortem(openerp.tools.config, e.traceback) + raise + except Exception, e: + _logger.exception(openerp.tools.exception_to_unicode(e)) + openerp.tools.debugger.post_mortem(openerp.tools.config, sys.exc_info()) + raise + def local_redirect(path, query=None, keep_hash=False, forward_debug=True, code=303): url = path if not query: @@ -618,7 +698,7 @@ class SessionExpiredException(Exception): class Service(object): """ .. deprecated:: 8.0 - Use ``openerp.netsvc.dispatch_rpc()`` instead. + Use ``dispatch_rpc()`` instead. """ def __init__(self, session, service_name): self.session = session @@ -626,7 +706,7 @@ class Service(object): def __getattr__(self, method): def proxy_method(*args): - result = openerp.netsvc.dispatch_rpc(self.service_name, method, args) + result = dispatch_rpc(self.service_name, method, args) return result return proxy_method @@ -699,7 +779,7 @@ class OpenERPSession(werkzeug.contrib.sessions.Session): HTTP_HOST=wsgienv['HTTP_HOST'], REMOTE_ADDR=wsgienv['REMOTE_ADDR'], ) - uid = openerp.netsvc.dispatch_rpc('common', 'authenticate', [db, login, password, env]) + uid = dispatch_rpc('common', 'authenticate', [db, login, password, env]) else: security.check(db, uid, password) self.db = db @@ -803,14 +883,14 @@ class OpenERPSession(werkzeug.contrib.sessions.Session): def send(self, service_name, method, *args): """ .. deprecated:: 8.0 - Use ``openerp.netsvc.dispatch_rpc()`` instead. + Use ``dispatch_rpc()`` instead. """ - return openerp.netsvc.dispatch_rpc(service_name, method, args) + return dispatch_rpc(service_name, method, args) def proxy(self, service): """ .. deprecated:: 8.0 - Use ``openerp.netsvc.dispatch_rpc()`` instead. + Use ``dispatch_rpc()`` instead. """ return Service(self, service) @@ -1184,7 +1264,7 @@ class Root(object): return request.registry['ir.http'].routing_map() def db_list(force=False, httprequest=None): - dbs = openerp.netsvc.dispatch_rpc("db", "list", [force]) + dbs = dispatch_rpc("db", "list", [force]) return db_filter(dbs, httprequest=httprequest) def db_filter(dbs, httprequest=None): @@ -1229,7 +1309,7 @@ class CommonController(Controller): @route('/jsonrpc', type='json', auth="none") def jsonrpc(self, service, method, args): """ Method used by client APIs to contact OpenERP. """ - return openerp.netsvc.dispatch_rpc(service, method, args) + return dispatch_rpc(service, method, args) @route('/gen_session_id', type='json', auth="none") def gen_session_id(self): diff --git a/openerp/netsvc.py b/openerp/netsvc.py index 755f6513b25..f19162cde5a 100644 --- a/openerp/netsvc.py +++ b/openerp/netsvc.py @@ -26,10 +26,6 @@ import os import release import sys import threading -import time -import types -from pprint import pformat -import psutil import tools import openerp @@ -188,86 +184,4 @@ def init_alternative_logger(): logger.addHandler(handler) logger.setLevel(logging.ERROR) -def replace_request_password(args): - # password is always 3rd argument in a request, we replace it in RPC logs - # so it's easier to forward logs for diagnostics/debugging purposes... - if len(args) > 2: - args = list(args) - args[2] = '*' - return tuple(args) - -def log(logger, level, prefix, msg, depth=None): - indent='' - indent_after=' '*len(prefix) - for line in (prefix+pformat(msg, depth=depth)).split('\n'): - logger.log(level, indent+line) - indent=indent_after - -def dispatch_rpc(service_name, method, params): - """ Handle a RPC call. - - This is pure Python code, the actual marshalling (from/to XML-RPC) is done - in a upper layer. - """ - try: - rpc_request = logging.getLogger(__name__ + '.rpc.request') - rpc_response = logging.getLogger(__name__ + '.rpc.response') - rpc_request_flag = rpc_request.isEnabledFor(logging.DEBUG) - rpc_response_flag = rpc_response.isEnabledFor(logging.DEBUG) - if rpc_request_flag or rpc_response_flag: - start_time = time.time() - start_rss, start_vms = 0, 0 - start_rss, start_vms = psutil.Process(os.getpid()).get_memory_info() - if rpc_request and rpc_response_flag: - log(rpc_request,logging.DEBUG,'%s.%s'%(service_name,method), replace_request_password(params)) - - threading.current_thread().uid = None - threading.current_thread().dbname = None - if service_name == 'common': - dispatch = openerp.service.common.dispatch - elif service_name == 'db': - dispatch = openerp.service.db.dispatch - elif service_name == 'object': - dispatch = openerp.service.model.dispatch - elif service_name == 'report': - dispatch = openerp.service.report.dispatch - else: - dispatch = openerp.service.wsgi_server.rpc_handlers.get(service_name) - result = dispatch(method, params) - - if rpc_request_flag or rpc_response_flag: - end_time = time.time() - end_rss, end_vms = 0, 0 - end_rss, end_vms = psutil.Process(os.getpid()).get_memory_info() - logline = '%s.%s time:%.3fs mem: %sk -> %sk (diff: %sk)' % (service_name, method, end_time - start_time, start_vms / 1024, end_vms / 1024, (end_vms - start_vms)/1024) - if rpc_response_flag: - log(rpc_response,logging.DEBUG, logline, result) - else: - log(rpc_request,logging.DEBUG, logline, replace_request_password(params), depth=1) - - return result - except openerp.osv.orm.except_orm: - raise - except openerp.exceptions.AccessError: - raise - except openerp.exceptions.AccessDenied: - raise - except openerp.exceptions.Warning: - raise - except openerp.exceptions.RedirectWarning: - raise - except openerp.exceptions.DeferredException, e: - _logger.exception(tools.exception_to_unicode(e)) - post_mortem(e.traceback) - raise - except Exception, e: - _logger.exception(tools.exception_to_unicode(e)) - post_mortem(sys.exc_info()) - raise - -def post_mortem(info): - if tools.config['debug_mode'] and isinstance(info[2], types.TracebackType): - import pdb - pdb.post_mortem(info[2]) - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/service/wsgi_server.py b/openerp/service/wsgi_server.py index 506a07d0295..b31736ba998 100644 --- a/openerp/service/wsgi_server.py +++ b/openerp/service/wsgi_server.py @@ -72,7 +72,7 @@ def xmlrpc_return(start_response, service, method, params, string_faultcode=Fals # This also mimics SimpleXMLRPCDispatcher._marshaled_dispatch() for # exception handling. try: - result = openerp.netsvc.dispatch_rpc(service, method, params) + result = openerp.http.dispatch_rpc(service, method, params) response = xmlrpclib.dumps((result,), methodresponse=1, allow_none=False, encoding=None) except Exception, e: if string_faultcode: diff --git a/openerp/tools/__init__.py b/openerp/tools/__init__.py index 18dab088440..6ad2cca4724 100644 --- a/openerp/tools/__init__.py +++ b/openerp/tools/__init__.py @@ -34,7 +34,7 @@ from yaml_import import * from sql import * from float_utils import * from mail import * - +from debugger import * # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/tools/debugger.py b/openerp/tools/debugger.py new file mode 100644 index 00000000000..293d4052513 --- /dev/null +++ b/openerp/tools/debugger.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# Copyright: 2014 - OpenERP S.A. +import types + +def post_mortem(config, info): + if config['debug_mode'] and isinstance(info[2], types.TracebackType): + import pdb + pdb.post_mortem(info[2]) From 3f779a5cae7bd4ca0399cf06e331f5047ec0e343 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Fri, 28 Feb 2014 17:10:55 +0100 Subject: [PATCH 10/29] [IMP] Add the ir_logging object where we will store the log messages (exception, error and warning) bzr revid: stw@openerp.com-20140228161055-98897xl1r46mf9mr --- openerp/addons/base/ir/__init__.py | 1 + openerp/addons/base/ir/ir_logging.py | 52 ++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 openerp/addons/base/ir/ir_logging.py diff --git a/openerp/addons/base/ir/__init__.py b/openerp/addons/base/ir/__init__.py index b3df5bcbccb..9aa1e7c42a2 100644 --- a/openerp/addons/base/ir/__init__.py +++ b/openerp/addons/base/ir/__init__.py @@ -39,6 +39,7 @@ import ir_mail_server import ir_fields import ir_qweb import ir_http +import ir_logging # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/addons/base/ir/ir_logging.py b/openerp/addons/base/ir/ir_logging.py new file mode 100644 index 00000000000..66708aa729a --- /dev/null +++ b/openerp/addons/base/ir/ir_logging.py @@ -0,0 +1,52 @@ +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2014 OpenERP SA () +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +import logging + +from openerp.osv import osv, fields +from openerp.tools.translate import _ + +class ir_logging(osv.Model): + _name = 'ir.logging' + + EXCEPTIONS_TYPE = [ + ('client', 'Client'), + ('server', 'Server') + ] + + _columns = { + 'name': fields.char('Name', required=True), + 'type': fields.selection(EXCEPTIONS_TYPE, string='Type', required=True, select=True), + 'dbname': fields.char('Database Name'), + 'level': fields.char('Level'), + 'message': fields.text('Message', required=True), + 'exception': fields.text('Exception'), + 'path': fields.char('Path', required=True), + 'func': fields.char('Function', required=True), + 'line': fields.char('Line', required=True), + } + + def call_function(self, cr, uid, ids, context=None): + logger = logging.getLogger() + logger.error("I think there is an error") + try: + raise Exception("I want to kill your process...") + except Exception, ex: + logger.exception("Please log me into the database") + return True \ No newline at end of file From 047d071a48630e3db2922d404d3d7f5395a88245 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Fri, 28 Feb 2014 17:11:47 +0100 Subject: [PATCH 11/29] [IMP] Add a new Logging Handler, where we will store in the database of OpenERP. this database can be overrided via the --log-pgsql-database bzr revid: stw@openerp.com-20140228161147-s9nnrfq2tc94vq5p --- openerp/http.py | 12 ++--- openerp/loggers/__init__.py | 1 + openerp/loggers/handlers.py | 100 ++++++++++++++++++++++++++++++++++++ openerp/netsvc.py | 51 ++++++++++++++---- openerp/tools/config.py | 24 ++++++--- 5 files changed, 162 insertions(+), 26 deletions(-) create mode 100644 openerp/loggers/__init__.py create mode 100644 openerp/loggers/handlers.py diff --git a/openerp/http.py b/openerp/http.py index ea1e82ed4c6..92fe03a6232 100644 --- a/openerp/http.py +++ b/openerp/http.py @@ -111,15 +111,9 @@ def dispatch_rpc(service_name, method, params): log(rpc_request, logging.DEBUG, logline, replace_request_password(params), depth=1) return result - except openerp.osv.orm.except_orm: - raise - except openerp.exceptions.AccessError: - raise - except openerp.exceptions.AccessDenied: - raise - except openerp.exceptions.Warning: - raise - except openerp.exceptions.RedirectWarning: + except (openerp.osv.orm.except_orm, openerp.exceptions.AccessError, \ + openerp.exceptions.AccessDenied, openerp.exceptions.Warning, \ + openerp.exceptions.RedirectWarning): raise except openerp.exceptions.DeferredException, e: _logger.exception(openerp.tools.exception_to_unicode(e)) diff --git a/openerp/loggers/__init__.py b/openerp/loggers/__init__.py new file mode 100644 index 00000000000..19b76b55b64 --- /dev/null +++ b/openerp/loggers/__init__.py @@ -0,0 +1 @@ +from handlers import PostgreSQLHandler \ No newline at end of file diff --git a/openerp/loggers/handlers.py b/openerp/loggers/handlers.py new file mode 100644 index 00000000000..763aa079195 --- /dev/null +++ b/openerp/loggers/handlers.py @@ -0,0 +1,100 @@ +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2014 OpenERP SA () +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import contextlib +import datetime +import logging +import threading + +import psycopg2 + +from openerp import tools + +# The PostgreSQL Handler for the logging module, will be used by OpenERP to store the logs +# in the database, --log-pgsql-database=YOUR_DBNAME +# By default the system will use the current database + +class PostgreSQLHandler(logging.Handler): + @contextlib.contextmanager + def create_connection(self): + db_name = None + + db_name_from_cli = tools.config['log_pgsql_database'] + if not db_name_from_cli: + # If there is no database, and only in this case, we are going to use the database + # from the current thread and create a connection to this database. + + current_thread = threading.current_thread() + + db_name_from_thread = getattr(current_thread, 'dbname', None) + if isinstance(db_name_from_thread, basestring): + db_name = db_name_from_thread + else: + db_name = db_name_from_cli + + if not db_name: + return + + parameters = { + 'user': tools.config['db_user'] or None, + 'password': tools.config['db_password'] or None, + 'host': tools.config['db_host'] or None, + 'port': tools.config['db_port'] or None, + 'database': db_name, + } + try: + connection = psycopg2.connect(**parameters) + + if connection: + yield connection + except Exception, ex: # Use a specific exception + print ex + + def emit(self, record): + # We use a context manager to be tolerant to the errors (error of connections,...) + with self.create_connection() as conn: + exception = False + if record.exc_info: + exception = record.exc_text + + now = datetime.datetime.utcnow() + + current_thread = threading.current_thread() + uid = getattr(current_thread, 'uid', False) + dbname = getattr(current_thread, 'dbname', False) + + parameters = ( + now, uid, now, uid, 'server', dbname, record.name, + logging.getLevelName(record.levelno), record.msg, exception, + record.filename, record.funcName, record.lineno + ) + + with conn.cursor() as cursor: + cursor.execute(""" + INSERT INTO ir_logging( + create_date, create_uid, write_date, write_uid, + type, dbname, name, level, message, exception, path, func, + line + ) + VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + """, + parameters + ) + conn.commit() diff --git a/openerp/netsvc.py b/openerp/netsvc.py index f19162cde5a..250cd52a1d1 100644 --- a/openerp/netsvc.py +++ b/openerp/netsvc.py @@ -29,6 +29,7 @@ import threading import tools import openerp +import openerp.loggers _logger = logging.getLogger(__name__) @@ -85,6 +86,19 @@ class ColoredFormatter(DBFormatter): record.levelname = COLOR_PATTERN % (30 + fg_color, 40 + bg_color, record.levelname) return DBFormatter.format(self, record) +import platform +def is_posix_operating_system(): + return os.name == 'posix' + +def is_windows_operating_system(): + return os.name == 'nt' + +def is_linux_operating_system(): + return is_posix_operating_system() and platform.system() == 'Linux' + +def is_macosx_operating_system(): + return is_posix_operating_system() and platform.system() == 'Darwin' + def init_logger(): from tools.translate import resetlocale resetlocale() @@ -94,24 +108,32 @@ def init_logger(): if tools.config['syslog']: # SysLog Handler - if os.name == 'nt': + if is_windows_operating_system(): handler = logging.handlers.NTEventLogHandler("%s %s" % (release.description, release.version)) - else: + elif is_linux_operating_system(): handler = logging.handlers.SysLogHandler('/dev/log') - format = '%s %s' % (release.description, release.version) \ - + ':%(dbname)s:%(levelname)s:%(name)s:%(message)s' + elif is_macosx_operating_system(): # There is no /dev/log on OSX + handler = logging.handlers.SysLogHandler('/var/run/log') + else: + raise Exception("There is no syslog handler for this Operating System: %s", platform.system()) + + format = '%s %s' % (release.description, release.version) + ':%(dbname)s:%(levelname)s:%(name)s:%(message)s' elif tools.config['logfile']: # LogFile Handler logf = tools.config['logfile'] try: + # We check we have the right location for the log files dirname = os.path.dirname(logf) if dirname and not os.path.isdir(dirname): os.makedirs(dirname) + if tools.config['logrotate'] is not False: - handler = logging.handlers.TimedRotatingFileHandler(logf,'D',1,30) - elif os.name == 'posix': + handler = logging.handlers.TimedRotatingFileHandler(filename=logf, when='D', interval=1, backupCount=30) + + elif is_posix_operating_system(): handler = logging.handlers.WatchedFileHandler(logf) + else: handler = logging.handlers.FileHandler(logf) except Exception: @@ -125,12 +147,14 @@ def init_logger(): # behind Apache with mod_wsgi, handler.stream will have type mod_wsgi.Log, # which has no fileno() method. (mod_wsgi.Log is what is being bound to # sys.stderr when the logging.StreamHandler is being constructed above.) - if isinstance(handler, logging.StreamHandler) \ - and hasattr(handler.stream, 'fileno') \ - and os.isatty(handler.stream.fileno()): + def has_fileno(stream): + return hasattr(stream, 'fileno') and os.isatty(stream.fileno()) + + if isinstance(handler, logging.StreamHandler) and has_fileno(handler.stream): formatter = ColoredFormatter(format) else: formatter = DBFormatter(format) + handler.setFormatter(formatter) # Configure handlers @@ -141,7 +165,9 @@ def init_logger(): logging_configurations = DEFAULT_LOG_CONFIGURATION + pseudo_config + logconfig for logconfig_item in logging_configurations: loggername, level = logconfig_item.split(':') + level = getattr(logging, level, logging.INFO) + logger = logging.getLogger(loggername) logger.handlers = [] logger.setLevel(level) @@ -149,6 +175,13 @@ def init_logger(): if loggername != '': logger.propagate = False + # magic ;-) + # we manage the connection in the postgresqlhandler + postgresqlHandler = openerp.loggers.handlers.PostgreSQLHandler() + postgresqlHandler.setLevel(logging.WARNING) + logger = logging.getLogger() + logger.addHandler(postgresqlHandler) + for logconfig_item in logging_configurations: _logger.debug('logger level set: "%s"', logconfig_item) diff --git a/openerp/tools/config.py b/openerp/tools/config.py index 07435075f8d..ab1eab8a52a 100644 --- a/openerp/tools/config.py +++ b/openerp/tools/config.py @@ -72,9 +72,10 @@ class configmanager(object): } # Not exposed in the configuration file. - self.blacklist_for_save = set( - ['publisher_warranty_url', 'load_language', 'root_path', - 'init', 'save', 'config', 'update', 'stop_after_init']) + self.blacklist_for_save = set([ + 'publisher_warranty_url', 'load_language', 'root_path', + 'init', 'save', 'config', 'update', 'stop_after_init' + ]) # dictionary mapping option destination (keys in self.options) to MyOptions. self.casts = {} @@ -83,7 +84,10 @@ class configmanager(object): self.config_file = fname self.has_ssl = check_ssl() - self._LOGLEVELS = dict([(getattr(loglevels, 'LOG_%s' % x), getattr(logging, x)) for x in ('CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG', 'NOTSET')]) + self._LOGLEVELS = dict([ + (getattr(loglevels, 'LOG_%s' % x), getattr(logging, x)) + for x in ('CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG', 'NOTSET') + ]) version = "%s %s" % (release.description, release.version) self.parser = parser = optparse.OptionParser(version=version, option_class=MyOption) @@ -176,12 +180,16 @@ class configmanager(object): group.add_option('--log-response', action="append_const", dest="log_handler", const="openerp.netsvc.rpc.response:DEBUG", help='shortcut for --log-handler=openerp.netsvc.rpc.response:DEBUG') group.add_option('--log-web', action="append_const", dest="log_handler", const="openerp.addons.web.http:DEBUG", help='shortcut for --log-handler=openerp.addons.web.http:DEBUG') group.add_option('--log-sql', action="append_const", dest="log_handler", const="openerp.sql_db:DEBUG", help='shortcut for --log-handler=openerp.sql_db:DEBUG') + group.add_option('--log-pgsql-database', dest='log_pgsql_database', help="database where OpenERP will store the exceptions", my_default=False) # For backward-compatibility, map the old log levels to something # quite close. - levels = ['info', 'debug_rpc', 'warn', 'test', 'critical', - 'debug_sql', 'error', 'debug', 'debug_rpc_answer', 'notset'] - group.add_option('--log-level', dest='log_level', type='choice', choices=levels, - my_default='info', help='specify the level of the logging. Accepted values: ' + str(levels) + ' (deprecated option).') + levels = [ + 'info', 'debug_rpc', 'warn', 'test', 'critical', + 'debug_sql', 'error', 'debug', 'debug_rpc_answer', 'notset' + ] + group.add_option('--log-level', dest='log_level', type='choice', + choices=levels, my_default='info', + help='specify the level of the logging. Accepted values: %s (deprecated option).' % (levels,)) parser.add_option_group(group) From cff80a9a0c6c3824b138db533665eb1bc1031bd4 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Mon, 10 Mar 2014 12:11:37 +0100 Subject: [PATCH 12/29] [IMP] Add views for the ir.logging object bzr revid: stw@openerp.com-20140310111137-04axbgdajd9jloxg --- openerp/addons/base/__openerp__.py | 1 + openerp/addons/base/ir/ir_logging_view.xml | 65 ++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 openerp/addons/base/ir/ir_logging_view.xml diff --git a/openerp/addons/base/__openerp__.py b/openerp/addons/base/__openerp__.py index 3c3c290f986..57ce6b31e32 100644 --- a/openerp/addons/base/__openerp__.py +++ b/openerp/addons/base/__openerp__.py @@ -57,6 +57,7 @@ The kernel of OpenERP, needed for all installation. 'ir/ir_values_view.xml', 'ir/osv_memory_autovacuum.xml', 'ir/ir_model_report.xml', + 'ir/ir_logging_view.xml', 'workflow/workflow_view.xml', 'module/module_view.xml', 'module/module_data.xml', diff --git a/openerp/addons/base/ir/ir_logging_view.xml b/openerp/addons/base/ir/ir_logging_view.xml new file mode 100644 index 00000000000..d23e45f1d14 --- /dev/null +++ b/openerp/addons/base/ir/ir_logging_view.xml @@ -0,0 +1,65 @@ + + + + + ir.logging + +
+ + + + + + + + + + + +
+
+
+ + ir.logging + + + + + + + + + + + + + + ir.logging + + + + + + + + + + + + + + + + + + Logging + ir.logging + form + tree,form + + + + + +
+
\ No newline at end of file From d9fcc1604500b6df079cd40beba7c368be992372 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Tue, 11 Mar 2014 18:13:56 +0100 Subject: [PATCH 13/29] [FIX] ir.logging: Raise an internal exception in the case where there is no defined database, but this exception is catched by the _internal_emit method and just ignore it to avoid a crash. Better solution, try to log on the standard handler. bzr revid: stw@openerp.com-20140311171356-jghlh2w2pnxvtu2e --- openerp/loggers/handlers.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/openerp/loggers/handlers.py b/openerp/loggers/handlers.py index 763aa079195..24be46085c8 100644 --- a/openerp/loggers/handlers.py +++ b/openerp/loggers/handlers.py @@ -31,6 +31,9 @@ from openerp import tools # in the database, --log-pgsql-database=YOUR_DBNAME # By default the system will use the current database +class NoDatabaseError(Exception): + pass + class PostgreSQLHandler(logging.Handler): @contextlib.contextmanager def create_connection(self): @@ -50,7 +53,7 @@ class PostgreSQLHandler(logging.Handler): db_name = db_name_from_cli if not db_name: - return + raise NoDatabaseError("There is no defined database on this request") parameters = { 'user': tools.config['db_user'] or None, @@ -67,8 +70,7 @@ class PostgreSQLHandler(logging.Handler): except Exception, ex: # Use a specific exception print ex - def emit(self, record): - # We use a context manager to be tolerant to the errors (error of connections,...) + def _internal_emit(self, record): with self.create_connection() as conn: exception = False if record.exc_info: @@ -81,7 +83,7 @@ class PostgreSQLHandler(logging.Handler): dbname = getattr(current_thread, 'dbname', False) parameters = ( - now, uid, now, uid, 'server', dbname, record.name, + now, uid, now, uid, 'server', dbname, record.name, logging.getLevelName(record.levelno), record.msg, exception, record.filename, record.funcName, record.lineno ) @@ -89,12 +91,17 @@ class PostgreSQLHandler(logging.Handler): with conn.cursor() as cursor: cursor.execute(""" INSERT INTO ir_logging( - create_date, create_uid, write_date, write_uid, + create_date, create_uid, write_date, write_uid, type, dbname, name, level, message, exception, path, func, line ) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) - """, - parameters - ) + """, parameters) conn.commit() + + def emit(self, record): + # We use a context manager to be tolerant to the errors (error of connections,...) + try: + self._internal_emit(record) + except NoDatabaseError: + pass From e9d047e6119d8065a8d31a7d3b374630ab90c40d Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sun, 16 Mar 2014 19:29:33 +0100 Subject: [PATCH 14/29] sql loggin cleanups - prepare for netsvc will be renamed to logging - move back log from http.py has it's used by the cron - move sql handler to netsvc, simplify to use sql_db - remove unused handler - close plaform specific #ifdef pandora's box bzr revid: al@openerp.com-20140316182933-jkcji9yqfbsokcmg --- openerp/http.py | 16 +----- openerp/loggers/__init__.py | 1 - openerp/loggers/handlers.py | 107 ------------------------------------ openerp/netsvc.py | 97 +++++++++++++++++--------------- openerp/tools/config.py | 4 +- 5 files changed, 58 insertions(+), 167 deletions(-) delete mode 100644 openerp/loggers/__init__.py delete mode 100644 openerp/loggers/handlers.py diff --git a/openerp/http.py b/openerp/http.py index ac5ad3495da..b6e87e26f81 100644 --- a/openerp/http.py +++ b/openerp/http.py @@ -21,7 +21,6 @@ import time import traceback import urlparse import warnings -from pprint import pformat import babel.core import psutil @@ -36,9 +35,7 @@ import werkzeug.wrappers import werkzeug.wsgi import openerp -import openerp.netsvc from openerp.service import security, model as service_model -import openerp.tools _logger = logging.getLogger(__name__) @@ -61,13 +58,6 @@ def replace_request_password(args): args[2] = '*' return tuple(args) -def log(logger, level, prefix, msg, depth=None): - indent='' - indent_after=' '*len(prefix) - for line in (prefix+pformat(msg, depth=depth)).split('\n'): - logger.log(level, indent+line) - indent=indent_after - def dispatch_rpc(service_name, method, params): """ Handle a RPC call. @@ -84,7 +74,7 @@ def dispatch_rpc(service_name, method, params): start_rss, start_vms = 0, 0 start_rss, start_vms = psutil.Process(os.getpid()).get_memory_info() if rpc_request and rpc_response_flag: - log(rpc_request, logging.DEBUG, '%s.%s' % (service_name, method), replace_request_password(params)) + openerp.netsvc.log(rpc_request, logging.DEBUG, '%s.%s' % (service_name, method), replace_request_password(params)) threading.current_thread().uid = None threading.current_thread().dbname = None @@ -106,9 +96,9 @@ def dispatch_rpc(service_name, method, params): end_rss, end_vms = psutil.Process(os.getpid()).get_memory_info() logline = '%s.%s time:%.3fs mem: %sk -> %sk (diff: %sk)' % (service_name, method, end_time - start_time, start_vms / 1024, end_vms / 1024, (end_vms - start_vms)/1024) if rpc_response_flag: - log(rpc_response, logging.DEBUG, logline, result) + openerp.netsvc.log(rpc_response, logging.DEBUG, logline, result) else: - log(rpc_request, logging.DEBUG, logline, replace_request_password(params), depth=1) + openerp.netsvc.log(rpc_request, logging.DEBUG, logline, replace_request_password(params), depth=1) return result except (openerp.osv.orm.except_orm, openerp.exceptions.AccessError, \ diff --git a/openerp/loggers/__init__.py b/openerp/loggers/__init__.py deleted file mode 100644 index 19b76b55b64..00000000000 --- a/openerp/loggers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from handlers import PostgreSQLHandler \ No newline at end of file diff --git a/openerp/loggers/handlers.py b/openerp/loggers/handlers.py deleted file mode 100644 index 24be46085c8..00000000000 --- a/openerp/loggers/handlers.py +++ /dev/null @@ -1,107 +0,0 @@ -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2014 OpenERP SA () -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import contextlib -import datetime -import logging -import threading - -import psycopg2 - -from openerp import tools - -# The PostgreSQL Handler for the logging module, will be used by OpenERP to store the logs -# in the database, --log-pgsql-database=YOUR_DBNAME -# By default the system will use the current database - -class NoDatabaseError(Exception): - pass - -class PostgreSQLHandler(logging.Handler): - @contextlib.contextmanager - def create_connection(self): - db_name = None - - db_name_from_cli = tools.config['log_pgsql_database'] - if not db_name_from_cli: - # If there is no database, and only in this case, we are going to use the database - # from the current thread and create a connection to this database. - - current_thread = threading.current_thread() - - db_name_from_thread = getattr(current_thread, 'dbname', None) - if isinstance(db_name_from_thread, basestring): - db_name = db_name_from_thread - else: - db_name = db_name_from_cli - - if not db_name: - raise NoDatabaseError("There is no defined database on this request") - - parameters = { - 'user': tools.config['db_user'] or None, - 'password': tools.config['db_password'] or None, - 'host': tools.config['db_host'] or None, - 'port': tools.config['db_port'] or None, - 'database': db_name, - } - try: - connection = psycopg2.connect(**parameters) - - if connection: - yield connection - except Exception, ex: # Use a specific exception - print ex - - def _internal_emit(self, record): - with self.create_connection() as conn: - exception = False - if record.exc_info: - exception = record.exc_text - - now = datetime.datetime.utcnow() - - current_thread = threading.current_thread() - uid = getattr(current_thread, 'uid', False) - dbname = getattr(current_thread, 'dbname', False) - - parameters = ( - now, uid, now, uid, 'server', dbname, record.name, - logging.getLevelName(record.levelno), record.msg, exception, - record.filename, record.funcName, record.lineno - ) - - with conn.cursor() as cursor: - cursor.execute(""" - INSERT INTO ir_logging( - create_date, create_uid, write_date, write_uid, - type, dbname, name, level, message, exception, path, func, - line - ) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) - """, parameters) - conn.commit() - - def emit(self, record): - # We use a context manager to be tolerant to the errors (error of connections,...) - try: - self._internal_emit(record) - except NoDatabaseError: - pass diff --git a/openerp/netsvc.py b/openerp/netsvc.py index 250cd52a1d1..a2c8f687f0f 100644 --- a/openerp/netsvc.py +++ b/openerp/netsvc.py @@ -19,20 +19,32 @@ # ############################################################################## - +import contextlib import logging import logging.handlers import os +import platform import release import sys import threading +from pprint import pformat + +import psycopg2 import tools import openerp -import openerp.loggers +import sql_db + _logger = logging.getLogger(__name__) +def log(logger, level, prefix, msg, depth=None): + indent='' + indent_after=' '*len(prefix) + for line in (prefix+pformat(msg, depth=depth)).split('\n'): + logger.log(level, indent+line) + indent=indent_after + def LocalService(name): """ The openerp.netsvc.LocalService() function is deprecated. It still works @@ -59,6 +71,38 @@ def LocalService(name): with registry.cursor() as cr: return registry['ir.actions.report.xml']._lookup_report(cr, name[len('report.'):]) +class PostgreSQLHandler(logging.Handler): + """ PostgreSQL Loggin Handler will store logs in the database, by default + the current database, can be set using --log-db=DBNAME + """ + def emit(self, record): + print "Emit PG", record + ct = threading.current_thread() + ct_db = getattr(ct, 'dbname') + ct_uid = getattr(ct, 'uid') + dbname = tools.config['log_db'] or ct_db + if dbname: + cr = None + try: + cr = sql_db.db_connect(dbname).cursor() + exception = False + if record.exc_info: + exception = record.exc_text + level = logging.getLevelName(record.levelno) + val = (uid, uid, 'server', dbname, record.name, level, record.msg, exception, record.filename, record.funcName, record.lineno) + cr.execute(""" + INSERT INTO ir_logging(create_date, write_date, create_uid, write_uid, type, dbname, name, level, message, exception, path, func, line) + VALUES (NOW() at time zone 'UTC', NOW() at time zone 'UTC', %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + """, val ) + cr.commit() + except Exception, e: + print "Exception",e + print repr(e) + pass + finally: + if cr: + cr.close() + BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, _NOTHING, DEFAULT = range(10) #The background is set with 40 plus the number of the color, and the foreground with 30 #These are the sequences need to get colored ouput @@ -86,19 +130,6 @@ class ColoredFormatter(DBFormatter): record.levelname = COLOR_PATTERN % (30 + fg_color, 40 + bg_color, record.levelname) return DBFormatter.format(self, record) -import platform -def is_posix_operating_system(): - return os.name == 'posix' - -def is_windows_operating_system(): - return os.name == 'nt' - -def is_linux_operating_system(): - return is_posix_operating_system() and platform.system() == 'Linux' - -def is_macosx_operating_system(): - return is_posix_operating_system() and platform.system() == 'Darwin' - def init_logger(): from tools.translate import resetlocale resetlocale() @@ -108,15 +139,10 @@ def init_logger(): if tools.config['syslog']: # SysLog Handler - if is_windows_operating_system(): + if os.name == 'nt': handler = logging.handlers.NTEventLogHandler("%s %s" % (release.description, release.version)) - elif is_linux_operating_system(): - handler = logging.handlers.SysLogHandler('/dev/log') - elif is_macosx_operating_system(): # There is no /dev/log on OSX - handler = logging.handlers.SysLogHandler('/var/run/log') else: - raise Exception("There is no syslog handler for this Operating System: %s", platform.system()) - + handler = logging.handlers.SysLogHandler() format = '%s %s' % (release.description, release.version) + ':%(dbname)s:%(levelname)s:%(name)s:%(message)s' elif tools.config['logfile']: @@ -130,12 +156,11 @@ def init_logger(): if tools.config['logrotate'] is not False: handler = logging.handlers.TimedRotatingFileHandler(filename=logf, when='D', interval=1, backupCount=30) - - elif is_posix_operating_system(): + elif os.name == 'posix': handler = logging.handlers.WatchedFileHandler(logf) - else: handler = logging.handlers.FileHandler(logf) + except Exception: sys.stderr.write("ERROR: couldn't create the logfile directory. Logging to the standard output.\n") handler = logging.StreamHandler(sys.stdout) @@ -147,10 +172,10 @@ def init_logger(): # behind Apache with mod_wsgi, handler.stream will have type mod_wsgi.Log, # which has no fileno() method. (mod_wsgi.Log is what is being bound to # sys.stderr when the logging.StreamHandler is being constructed above.) - def has_fileno(stream): + def is_a_tty(stream): return hasattr(stream, 'fileno') and os.isatty(stream.fileno()) - if isinstance(handler, logging.StreamHandler) and has_fileno(handler.stream): + if isinstance(handler, logging.StreamHandler) and is_a_tty(handler.stream): formatter = ColoredFormatter(format) else: formatter = DBFormatter(format) @@ -165,9 +190,7 @@ def init_logger(): logging_configurations = DEFAULT_LOG_CONFIGURATION + pseudo_config + logconfig for logconfig_item in logging_configurations: loggername, level = logconfig_item.split(':') - level = getattr(logging, level, logging.INFO) - logger = logging.getLogger(loggername) logger.handlers = [] logger.setLevel(level) @@ -175,9 +198,8 @@ def init_logger(): if loggername != '': logger.propagate = False - # magic ;-) # we manage the connection in the postgresqlhandler - postgresqlHandler = openerp.loggers.handlers.PostgreSQLHandler() + postgresqlHandler = PostgreSQLHandler() postgresqlHandler.setLevel(logging.WARNING) logger = logging.getLogger() logger.addHandler(postgresqlHandler) @@ -204,17 +226,4 @@ PSEUDOCONFIG_MAPPER = { 'critical': ['openerp:CRITICAL'], } -# A alternative logging scheme for automated runs of the -# server intended to test it. -def init_alternative_logger(): - class H(logging.Handler): - def emit(self, record): - if record.levelno > 20: - print record.levelno, record.pathname, record.msg - handler = H() - # Add the handler to the 'openerp' logger. - logger = logging.getLogger('openerp') - logger.addHandler(handler) - logger.setLevel(logging.ERROR) - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/tools/config.py b/openerp/tools/config.py index 998e3163355..8963720fda0 100644 --- a/openerp/tools/config.py +++ b/openerp/tools/config.py @@ -1,4 +1,4 @@ -# -*- coding: utf-8 -*- +#openerp.loggers.handlers. -*- coding: utf-8 -*- ############################################################################## # # OpenERP, Open Source Management Solution @@ -187,7 +187,7 @@ class configmanager(object): group.add_option('--log-response', action="append_const", dest="log_handler", const="openerp.netsvc.rpc.response:DEBUG", help='shortcut for --log-handler=openerp.netsvc.rpc.response:DEBUG') group.add_option('--log-web', action="append_const", dest="log_handler", const="openerp.addons.web.http:DEBUG", help='shortcut for --log-handler=openerp.addons.web.http:DEBUG') group.add_option('--log-sql', action="append_const", dest="log_handler", const="openerp.sql_db:DEBUG", help='shortcut for --log-handler=openerp.sql_db:DEBUG') - group.add_option('--log-pgsql-database', dest='log_pgsql_database', help="database where OpenERP will store the exceptions", my_default=False) + group.add_option('--log-db', dest='log_db', help="database where OpenERP will store the exceptions", my_default=False) # For backward-compatibility, map the old log levels to something # quite close. levels = [ From eaacd8a4d88877008edf7800357e55a62c9e0a76 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sun, 16 Mar 2014 20:16:22 +0100 Subject: [PATCH 15/29] ir_logging make it work, and make it usable bzr revid: al@openerp.com-20140316191622-l59vkjeu2e8nbh75 --- openerp/addons/base/ir/ir_logging.py | 11 ++------ openerp/addons/base/ir/ir_logging_view.xml | 31 ++++++++++----------- openerp/netsvc.py | 32 ++++++++++------------ 3 files changed, 32 insertions(+), 42 deletions(-) diff --git a/openerp/addons/base/ir/ir_logging.py b/openerp/addons/base/ir/ir_logging.py index 66708aa729a..a2b4e606290 100644 --- a/openerp/addons/base/ir/ir_logging.py +++ b/openerp/addons/base/ir/ir_logging.py @@ -24,6 +24,7 @@ from openerp.tools.translate import _ class ir_logging(osv.Model): _name = 'ir.logging' + _order = 'id DESC' EXCEPTIONS_TYPE = [ ('client', 'Client'), @@ -31,22 +32,14 @@ class ir_logging(osv.Model): ] _columns = { + 'create_date': fields.datetime('Create Date', readonly=True), 'name': fields.char('Name', required=True), 'type': fields.selection(EXCEPTIONS_TYPE, string='Type', required=True, select=True), 'dbname': fields.char('Database Name'), 'level': fields.char('Level'), 'message': fields.text('Message', required=True), - 'exception': fields.text('Exception'), 'path': fields.char('Path', required=True), 'func': fields.char('Function', required=True), 'line': fields.char('Line', required=True), } - def call_function(self, cr, uid, ids, context=None): - logger = logging.getLogger() - logger.error("I think there is an error") - try: - raise Exception("I want to kill your process...") - except Exception, ex: - logger.exception("Please log me into the database") - return True \ No newline at end of file diff --git a/openerp/addons/base/ir/ir_logging_view.xml b/openerp/addons/base/ir/ir_logging_view.xml index d23e45f1d14..1fa5170387a 100644 --- a/openerp/addons/base/ir/ir_logging_view.xml +++ b/openerp/addons/base/ir/ir_logging_view.xml @@ -5,17 +5,17 @@ ir.logging
- - - + + + + - - - - + + + @@ -23,13 +23,14 @@ ir.logging - - + + + - + @@ -37,11 +38,11 @@ ir.logging - - - + + + @@ -50,7 +51,6 @@ - Logging ir.logging @@ -58,8 +58,7 @@ tree,form - - \ No newline at end of file + diff --git a/openerp/netsvc.py b/openerp/netsvc.py index a2c8f687f0f..af45301dbb4 100644 --- a/openerp/netsvc.py +++ b/openerp/netsvc.py @@ -76,28 +76,26 @@ class PostgreSQLHandler(logging.Handler): the current database, can be set using --log-db=DBNAME """ def emit(self, record): - print "Emit PG", record ct = threading.current_thread() - ct_db = getattr(ct, 'dbname') - ct_uid = getattr(ct, 'uid') + ct_db = getattr(ct, 'dbname', None) + ct_uid = getattr(ct, 'uid', None) dbname = tools.config['log_db'] or ct_db if dbname: cr = None try: cr = sql_db.db_connect(dbname).cursor() - exception = False - if record.exc_info: - exception = record.exc_text + msg = record.msg + traceback = getattr(record, 'exc_text', '') + if traceback: + msg = "%s\n%s" % (msg, traceback) level = logging.getLevelName(record.levelno) - val = (uid, uid, 'server', dbname, record.name, level, record.msg, exception, record.filename, record.funcName, record.lineno) + val = (ct_uid, ct_uid, 'server', dbname, record.name, level, msg, record.pathname, record.lineno, record.funcName) cr.execute(""" - INSERT INTO ir_logging(create_date, write_date, create_uid, write_uid, type, dbname, name, level, message, exception, path, func, line) - VALUES (NOW() at time zone 'UTC', NOW() at time zone 'UTC', %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + INSERT INTO ir_logging(create_date, write_date, create_uid, write_uid, type, dbname, name, level, message, path, line, func) + VALUES (NOW() at time zone 'UTC', NOW() at time zone 'UTC', %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) """, val ) cr.commit() except Exception, e: - print "Exception",e - print repr(e) pass finally: if cr: @@ -187,6 +185,9 @@ def init_logger(): logconfig = tools.config['log_handler'] + postgresqlHandler = PostgreSQLHandler() + postgresqlHandler.setLevel(logging.WARNING) + logging_configurations = DEFAULT_LOG_CONFIGURATION + pseudo_config + logconfig for logconfig_item in logging_configurations: loggername, level = logconfig_item.split(':') @@ -195,18 +196,15 @@ def init_logger(): logger.handlers = [] logger.setLevel(level) logger.addHandler(handler) + logger.addHandler(postgresqlHandler) if loggername != '': logger.propagate = False - # we manage the connection in the postgresqlhandler - postgresqlHandler = PostgreSQLHandler() - postgresqlHandler.setLevel(logging.WARNING) - logger = logging.getLogger() - logger.addHandler(postgresqlHandler) - for logconfig_item in logging_configurations: _logger.debug('logger level set: "%s"', logconfig_item) + + DEFAULT_LOG_CONFIGURATION = [ 'openerp.workflow.workitem:WARNING', 'openerp.netsvc.rpc.request:INFO', From 58fb28746a6f7921f4334694a37d31dd6bb376a6 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sun, 16 Mar 2014 20:22:23 +0100 Subject: [PATCH 16/29] ir_logging, cleanup and minimize merge diff bzr revid: al@openerp.com-20140316192223-gfxzbo83j5hpm527 --- openerp/netsvc.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/openerp/netsvc.py b/openerp/netsvc.py index af45301dbb4..579f495d56b 100644 --- a/openerp/netsvc.py +++ b/openerp/netsvc.py @@ -19,11 +19,9 @@ # ############################################################################## -import contextlib import logging import logging.handlers import os -import platform import release import sys import threading @@ -35,7 +33,6 @@ import tools import openerp import sql_db - _logger = logging.getLogger(__name__) def log(logger, level, prefix, msg, depth=None): @@ -141,7 +138,8 @@ def init_logger(): handler = logging.handlers.NTEventLogHandler("%s %s" % (release.description, release.version)) else: handler = logging.handlers.SysLogHandler() - format = '%s %s' % (release.description, release.version) + ':%(dbname)s:%(levelname)s:%(name)s:%(message)s' + format = '%s %s' % (release.description, release.version) \ + + ':%(dbname)s:%(levelname)s:%(name)s:%(message)s' elif tools.config['logfile']: # LogFile Handler @@ -151,14 +149,12 @@ def init_logger(): dirname = os.path.dirname(logf) if dirname and not os.path.isdir(dirname): os.makedirs(dirname) - if tools.config['logrotate'] is not False: handler = logging.handlers.TimedRotatingFileHandler(filename=logf, when='D', interval=1, backupCount=30) elif os.name == 'posix': handler = logging.handlers.WatchedFileHandler(logf) else: handler = logging.handlers.FileHandler(logf) - except Exception: sys.stderr.write("ERROR: couldn't create the logfile directory. Logging to the standard output.\n") handler = logging.StreamHandler(sys.stdout) @@ -177,7 +173,6 @@ def init_logger(): formatter = ColoredFormatter(format) else: formatter = DBFormatter(format) - handler.setFormatter(formatter) # Configure handlers @@ -203,8 +198,6 @@ def init_logger(): for logconfig_item in logging_configurations: _logger.debug('logger level set: "%s"', logconfig_item) - - DEFAULT_LOG_CONFIGURATION = [ 'openerp.workflow.workitem:WARNING', 'openerp.netsvc.rpc.request:INFO', From 99a89152b4b21ab4eee46408ccaffb9fb7db619d Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sun, 16 Mar 2014 20:29:37 +0100 Subject: [PATCH 17/29] ir_logging, improve search view bzr revid: al@openerp.com-20140316192937-q1rxct0hhlwpm2t0 --- openerp/addons/base/ir/ir_logging_view.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openerp/addons/base/ir/ir_logging_view.xml b/openerp/addons/base/ir/ir_logging_view.xml index 1fa5170387a..afc7a07f3aa 100644 --- a/openerp/addons/base/ir/ir_logging_view.xml +++ b/openerp/addons/base/ir/ir_logging_view.xml @@ -47,6 +47,8 @@ + +
From aa7d42acfc43465049665405dfec81d185e23403 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sun, 16 Mar 2014 20:43:28 +0100 Subject: [PATCH 18/29] ir_logging fix msg, add uid in form view bzr revid: al@openerp.com-20140316194328-3tooio3km8ev26wj --- openerp/addons/base/ir/ir_logging_view.xml | 2 +- openerp/netsvc.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openerp/addons/base/ir/ir_logging_view.xml b/openerp/addons/base/ir/ir_logging_view.xml index afc7a07f3aa..f963fc0d393 100644 --- a/openerp/addons/base/ir/ir_logging_view.xml +++ b/openerp/addons/base/ir/ir_logging_view.xml @@ -24,6 +24,7 @@ + @@ -61,6 +62,5 @@ - diff --git a/openerp/netsvc.py b/openerp/netsvc.py index 579f495d56b..3de345a0adf 100644 --- a/openerp/netsvc.py +++ b/openerp/netsvc.py @@ -81,7 +81,7 @@ class PostgreSQLHandler(logging.Handler): cr = None try: cr = sql_db.db_connect(dbname).cursor() - msg = record.msg + msg = unicode(record.msg) traceback = getattr(record, 'exc_text', '') if traceback: msg = "%s\n%s" % (msg, traceback) From e6a5d82036a53ff3d4bdb8aed6f754e6c5b56a63 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Mon, 17 Mar 2014 01:08:51 +0100 Subject: [PATCH 19/29] [FIX] ir_logging missing field bzr revid: al@openerp.com-20140317000851-3vyo7m3kc9k8jki5 --- openerp/addons/base/ir/ir_logging.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openerp/addons/base/ir/ir_logging.py b/openerp/addons/base/ir/ir_logging.py index a2b4e606290..dd06a19c0ae 100644 --- a/openerp/addons/base/ir/ir_logging.py +++ b/openerp/addons/base/ir/ir_logging.py @@ -33,6 +33,7 @@ class ir_logging(osv.Model): _columns = { 'create_date': fields.datetime('Create Date', readonly=True), + 'create_uid': fields.integer('Uid', readonly=True), # Integer not m2o is intentionnal 'name': fields.char('Name', required=True), 'type': fields.selection(EXCEPTIONS_TYPE, string='Type', required=True, select=True), 'dbname': fields.char('Database Name'), From ce1b0ad243afd9f7251676a7a22571a232a73c3b Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Tue, 18 Mar 2014 01:29:54 +0100 Subject: [PATCH 20/29] [FIX] ir_logging acl bzr revid: al@openerp.com-20140318002954-3vc2wj6llc2017bu --- openerp/addons/base/security/ir.model.access.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/openerp/addons/base/security/ir.model.access.csv b/openerp/addons/base/security/ir.model.access.csv index 25df6e117d0..6113f17c5aa 100644 --- a/openerp/addons/base/security/ir.model.access.csv +++ b/openerp/addons/base/security/ir.model.access.csv @@ -113,3 +113,4 @@ "access_ir_needaction_mixin","ir_needaction_mixin","model_ir_needaction_mixin",,1,1,1,1 "access_res_font_all","res_res_font all","model_res_font",,1,0,0,0 "access_res_font_group_user","res_res_font group_user","model_res_font","group_user",1,1,1,1 +"access_ir_logging","ir_logging admin","model_ir_logging","group_erp_manager",1,1,1,1 From f2b51c7b69910e7962715f33fc4f89110b057b46 Mon Sep 17 00:00:00 2001 From: "ajay javiya (OpenERP)" Date: Tue, 18 Mar 2014 14:05:59 +0530 Subject: [PATCH 21/29] [FIX] : subscribe/unsubscribe button not work [IMP]: layout bzr revid: aja@tinyerp.com-20140318083559-jwc196mypc67p5x4 --- addons/website_mail/static/src/js/website_mail.js | 3 +-- addons/website_mail_group/controllers/main.py | 2 +- addons/website_mail_group/views/website_mail_group.xml | 6 +++--- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/addons/website_mail/static/src/js/website_mail.js b/addons/website_mail/static/src/js/website_mail.js index 672a21324a8..5fac61c3d36 100644 --- a/addons/website_mail/static/src/js/website_mail.js +++ b/addons/website_mail/static/src/js/website_mail.js @@ -39,8 +39,7 @@ return false; } this.$target.removeClass('has-error'); - - openerp.jsonRpc('/website_mail/follow', 'call', { + openerp.jsonRpc('/website_mail/follow/', 'call', { 'id': +this.$target.data('id'), 'object': this.$target.data('object'), 'message_is_follower': this.$target.attr("data-follow") || "off", diff --git a/addons/website_mail_group/controllers/main.py b/addons/website_mail_group/controllers/main.py index a6f3adcd522..fe133434abc 100644 --- a/addons/website_mail_group/controllers/main.py +++ b/addons/website_mail_group/controllers/main.py @@ -59,7 +59,7 @@ class MailGroup(http.Controller): domain.append(('parent_id','=',False)) thread_count = thread_obj.search_count(cr, uid, domain, context=context) pager = request.website.pager( - url='/groups/%s/%s' % (group.id, mode), + url='/groups/%s/%s/' % (group.id, mode), total=thread_count, page=page, step=self._thread_per_page, diff --git a/addons/website_mail_group/views/website_mail_group.xml b/addons/website_mail_group/views/website_mail_group.xml index 9e4b41329b4..fb18ee9f3fd 100644 --- a/addons/website_mail_group/views/website_mail_group.xml +++ b/addons/website_mail_group/views/website_mail_group.xml @@ -45,13 +45,13 @@
-
-
From 48d3befa070ffd82f267e5c51ff05673824c9993 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Thu, 20 Mar 2014 00:45:42 +0100 Subject: [PATCH 23/29] ir_logging disabled by default bzr revid: al@openerp.com-20140319234542-jsmxchx7tuv13e13 --- openerp/netsvc.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openerp/netsvc.py b/openerp/netsvc.py index 3de345a0adf..26691c120a5 100644 --- a/openerp/netsvc.py +++ b/openerp/netsvc.py @@ -191,7 +191,8 @@ def init_logger(): logger.handlers = [] logger.setLevel(level) logger.addHandler(handler) - logger.addHandler(postgresqlHandler) + if tools.config['log_db']: + logger.addHandler(postgresqlHandler) if loggername != '': logger.propagate = False From 6e4db0a0a682c806384e1b9fa8fd6f5f04c89376 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Thu, 20 Mar 2014 01:05:24 +0100 Subject: [PATCH 24/29] ir_logging fix config option bzr revid: al@openerp.com-20140320000524-gs98xy6iqh2ceev6 --- openerp/netsvc.py | 6 +++--- openerp/tools/config.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/openerp/netsvc.py b/openerp/netsvc.py index 9efc7120589..28919f23d4d 100644 --- a/openerp/netsvc.py +++ b/openerp/netsvc.py @@ -22,23 +22,23 @@ import logging import logging.handlers import os +import pprint import release import sys import threading -from pprint import pformat import psycopg2 -import tools import openerp import sql_db +import tools _logger = logging.getLogger(__name__) def log(logger, level, prefix, msg, depth=None): indent='' indent_after=' '*len(prefix) - for line in (prefix+pformat(msg, depth=depth)).split('\n'): + for line in (prefix + pprint.pformat(msg, depth=depth)).split('\n'): logger.log(level, indent+line) indent=indent_after diff --git a/openerp/tools/config.py b/openerp/tools/config.py index 8963720fda0..6b4e3f68f6a 100644 --- a/openerp/tools/config.py +++ b/openerp/tools/config.py @@ -187,7 +187,7 @@ class configmanager(object): group.add_option('--log-response', action="append_const", dest="log_handler", const="openerp.netsvc.rpc.response:DEBUG", help='shortcut for --log-handler=openerp.netsvc.rpc.response:DEBUG') group.add_option('--log-web', action="append_const", dest="log_handler", const="openerp.addons.web.http:DEBUG", help='shortcut for --log-handler=openerp.addons.web.http:DEBUG') group.add_option('--log-sql', action="append_const", dest="log_handler", const="openerp.sql_db:DEBUG", help='shortcut for --log-handler=openerp.sql_db:DEBUG') - group.add_option('--log-db', dest='log_db', help="database where OpenERP will store the exceptions", my_default=False) + group.add_option('--log-db', dest='log_db', help="Logging database", my_default=False) # For backward-compatibility, map the old log levels to something # quite close. levels = [ @@ -392,7 +392,7 @@ class configmanager(object): 'xmlrpc', 'syslog', 'without_demo', 'timezone', 'xmlrpcs_interface', 'xmlrpcs_port', 'xmlrpcs', 'static_http_enable', 'static_http_document_root', 'static_http_url_prefix', - 'secure_cert_file', 'secure_pkey_file', 'dbfilter', 'log_handler', 'log_level' + 'secure_cert_file', 'secure_pkey_file', 'dbfilter', 'log_handler', 'log_level', 'log_db' ] for arg in keys: From e73230d0fcce4ff7b5bbf4c95fd4eef393e2eb8f Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Thu, 20 Mar 2014 01:09:12 +0100 Subject: [PATCH 25/29] ir_logging fix logger names bzr revid: al@openerp.com-20140320000912-1a5hngnw8ilq22k8 --- openerp/netsvc.py | 8 ++++---- openerp/tools/config.py | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/openerp/netsvc.py b/openerp/netsvc.py index 28919f23d4d..d762eb5006f 100644 --- a/openerp/netsvc.py +++ b/openerp/netsvc.py @@ -205,15 +205,15 @@ def init_logger(): DEFAULT_LOG_CONFIGURATION = [ 'openerp.workflow.workitem:WARNING', - 'openerp.netsvc.rpc.request:INFO', - 'openerp.netsvc.rpc.response:INFO', + 'openerp.http.rpc.request:INFO', + 'openerp.http.rpc.response:INFO', 'openerp.addons.web.http:INFO', 'openerp.sql_db:INFO', ':INFO', ] PSEUDOCONFIG_MAPPER = { - 'debug_rpc_answer': ['openerp:DEBUG','openerp.netsvc.rpc.request:DEBUG', 'openerp.netsvc.rpc.response:DEBUG'], - 'debug_rpc': ['openerp:DEBUG','openerp.netsvc.rpc.request:DEBUG'], + 'debug_rpc_answer': ['openerp:DEBUG','openerp.http.rpc.request:DEBUG', 'openerp.http.rpc.response:DEBUG'], + 'debug_rpc': ['openerp:DEBUG','openerp.http.rpc.request:DEBUG'], 'debug': ['openerp:DEBUG'], 'debug_sql': ['openerp.sql_db:DEBUG'], 'info': [], diff --git a/openerp/tools/config.py b/openerp/tools/config.py index 6b4e3f68f6a..8313f4d786e 100644 --- a/openerp/tools/config.py +++ b/openerp/tools/config.py @@ -183,9 +183,9 @@ class configmanager(object): group.add_option("--logrotate", dest="logrotate", action="store_true", my_default=False, help="enable logfile rotation") group.add_option("--syslog", action="store_true", dest="syslog", my_default=False, help="Send the log to the syslog server") group.add_option('--log-handler', action="append", default=DEFAULT_LOG_HANDLER, my_default=DEFAULT_LOG_HANDLER, metavar="PREFIX:LEVEL", help='setup a handler at LEVEL for a given PREFIX. An empty PREFIX indicates the root logger. This option can be repeated. Example: "openerp.orm:DEBUG" or "werkzeug:CRITICAL" (default: ":INFO")') - group.add_option('--log-request', action="append_const", dest="log_handler", const="openerp.netsvc.rpc.request:DEBUG", help='shortcut for --log-handler=openerp.netsvc.rpc.request:DEBUG') - group.add_option('--log-response', action="append_const", dest="log_handler", const="openerp.netsvc.rpc.response:DEBUG", help='shortcut for --log-handler=openerp.netsvc.rpc.response:DEBUG') - group.add_option('--log-web', action="append_const", dest="log_handler", const="openerp.addons.web.http:DEBUG", help='shortcut for --log-handler=openerp.addons.web.http:DEBUG') + group.add_option('--log-request', action="append_const", dest="log_handler", const="openerp.http.rpc.request:DEBUG", help='shortcut for --log-handler=openerp.http.rpc.request:DEBUG') + group.add_option('--log-response', action="append_const", dest="log_handler", const="openerp.http.rpc.response:DEBUG", help='shortcut for --log-handler=openerp.http.rpc.response:DEBUG') + group.add_option('--log-web', action="append_const", dest="log_handler", const="openerp.http:DEBUG", help='shortcut for --log-handler=openerp.http:DEBUG') group.add_option('--log-sql', action="append_const", dest="log_handler", const="openerp.sql_db:DEBUG", help='shortcut for --log-handler=openerp.sql_db:DEBUG') group.add_option('--log-db', dest='log_db', help="Logging database", my_default=False) # For backward-compatibility, map the old log levels to something From 800ab84e3b64b97d534d2f02d1eb7f8098ab16de Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Thu, 20 Mar 2014 05:47:27 +0000 Subject: [PATCH 26/29] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20140320054727-1wcctx54alajpzne --- openerp/addons/base/i18n/ab.po | 4 +- openerp/addons/base/i18n/af.po | 4 +- openerp/addons/base/i18n/am.po | 4 +- openerp/addons/base/i18n/ar.po | 4 +- openerp/addons/base/i18n/bg.po | 4 +- openerp/addons/base/i18n/bn.po | 4 +- openerp/addons/base/i18n/bs.po | 4 +- openerp/addons/base/i18n/ca.po | 4 +- openerp/addons/base/i18n/cs.po | 4 +- openerp/addons/base/i18n/da.po | 4 +- openerp/addons/base/i18n/de.po | 4 +- openerp/addons/base/i18n/el.po | 4 +- openerp/addons/base/i18n/en_GB.po | 4 +- openerp/addons/base/i18n/es.po | 4 +- openerp/addons/base/i18n/es_AR.po | 4 +- openerp/addons/base/i18n/es_BO.po | 4 +- openerp/addons/base/i18n/es_CL.po | 4 +- openerp/addons/base/i18n/es_CR.po | 4 +- openerp/addons/base/i18n/es_DO.po | 4 +- openerp/addons/base/i18n/es_EC.po | 4 +- openerp/addons/base/i18n/es_MX.po | 4 +- openerp/addons/base/i18n/es_PE.po | 4 +- openerp/addons/base/i18n/es_VE.po | 4 +- openerp/addons/base/i18n/et.po | 4 +- openerp/addons/base/i18n/eu.po | 4 +- openerp/addons/base/i18n/fa.po | 4 +- openerp/addons/base/i18n/fa_AF.po | 4 +- openerp/addons/base/i18n/fi.po | 4 +- openerp/addons/base/i18n/fr.po | 4 +- openerp/addons/base/i18n/fr_CA.po | 197 +++++++++++++++++++++------ openerp/addons/base/i18n/gl.po | 4 +- openerp/addons/base/i18n/gu.po | 4 +- openerp/addons/base/i18n/he.po | 4 +- openerp/addons/base/i18n/hi.po | 4 +- openerp/addons/base/i18n/hr.po | 4 +- openerp/addons/base/i18n/hu.po | 4 +- openerp/addons/base/i18n/hy.po | 4 +- openerp/addons/base/i18n/id.po | 4 +- openerp/addons/base/i18n/is.po | 4 +- openerp/addons/base/i18n/it.po | 4 +- openerp/addons/base/i18n/ja.po | 4 +- openerp/addons/base/i18n/ka.po | 4 +- openerp/addons/base/i18n/kk.po | 4 +- openerp/addons/base/i18n/ko.po | 4 +- openerp/addons/base/i18n/lt.po | 4 +- openerp/addons/base/i18n/lv.po | 4 +- openerp/addons/base/i18n/mk.po | 4 +- openerp/addons/base/i18n/mn.po | 4 +- openerp/addons/base/i18n/nb.po | 4 +- openerp/addons/base/i18n/nl.po | 4 +- openerp/addons/base/i18n/nl_BE.po | 4 +- openerp/addons/base/i18n/pl.po | 4 +- openerp/addons/base/i18n/pt.po | 4 +- openerp/addons/base/i18n/pt_BR.po | 4 +- openerp/addons/base/i18n/ro.po | 4 +- openerp/addons/base/i18n/ru.po | 4 +- openerp/addons/base/i18n/sk.po | 4 +- openerp/addons/base/i18n/sl.po | 4 +- openerp/addons/base/i18n/sq.po | 4 +- openerp/addons/base/i18n/sr.po | 4 +- openerp/addons/base/i18n/sr@latin.po | 4 +- openerp/addons/base/i18n/sv.po | 4 +- openerp/addons/base/i18n/th.po | 4 +- openerp/addons/base/i18n/tlh.po | 4 +- openerp/addons/base/i18n/tr.po | 4 +- openerp/addons/base/i18n/uk.po | 4 +- openerp/addons/base/i18n/ur.po | 4 +- openerp/addons/base/i18n/vi.po | 4 +- openerp/addons/base/i18n/zh_CN.po | 4 +- openerp/addons/base/i18n/zh_HK.po | 4 +- openerp/addons/base/i18n/zh_TW.po | 4 +- 71 files changed, 294 insertions(+), 183 deletions(-) diff --git a/openerp/addons/base/i18n/ab.po b/openerp/addons/base/i18n/ab.po index 0d6e5aaef89..6b28e22586f 100644 --- a/openerp/addons/base/i18n/ab.po +++ b/openerp/addons/base/i18n/ab.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:41+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:30+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/af.po b/openerp/addons/base/i18n/af.po index 69e8103fdbd..248585cfa4a 100644 --- a/openerp/addons/base/i18n/af.po +++ b/openerp/addons/base/i18n/af.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:41+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:30+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/am.po b/openerp/addons/base/i18n/am.po index fca6a2b148c..dce06ee8cd5 100644 --- a/openerp/addons/base/i18n/am.po +++ b/openerp/addons/base/i18n/am.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:42+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:31+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ar.po b/openerp/addons/base/i18n/ar.po index 4e9c2e2b4bd..15a0ba086b4 100644 --- a/openerp/addons/base/i18n/ar.po +++ b/openerp/addons/base/i18n/ar.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:42+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:31+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/bg.po b/openerp/addons/base/i18n/bg.po index 0f4c299e8e9..87b6fde3494 100644 --- a/openerp/addons/base/i18n/bg.po +++ b/openerp/addons/base/i18n/bg.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:43+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:32+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/bn.po b/openerp/addons/base/i18n/bn.po index 6f848c3918a..18d9cb25618 100644 --- a/openerp/addons/base/i18n/bn.po +++ b/openerp/addons/base/i18n/bn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:43+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:32+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/bs.po b/openerp/addons/base/i18n/bs.po index ba7d39d340f..64560df5bfc 100644 --- a/openerp/addons/base/i18n/bs.po +++ b/openerp/addons/base/i18n/bs.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:43+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:32+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ca.po b/openerp/addons/base/i18n/ca.po index c51a2a0e546..5e9a509e2f8 100644 --- a/openerp/addons/base/i18n/ca.po +++ b/openerp/addons/base/i18n/ca.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:43+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:32+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/cs.po b/openerp/addons/base/i18n/cs.po index 3c18cc5bc07..d5f8a06d703 100644 --- a/openerp/addons/base/i18n/cs.po +++ b/openerp/addons/base/i18n/cs.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:44+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:33+0000\n" +"X-Generator: Launchpad (build 16967)\n" "X-Poedit-Language: Czech\n" #. module: base diff --git a/openerp/addons/base/i18n/da.po b/openerp/addons/base/i18n/da.po index ad2f9c7542b..14414eccc68 100644 --- a/openerp/addons/base/i18n/da.po +++ b/openerp/addons/base/i18n/da.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:44+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:33+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/de.po b/openerp/addons/base/i18n/de.po index dcf9b51367a..1e0a1c51e4c 100644 --- a/openerp/addons/base/i18n/de.po +++ b/openerp/addons/base/i18n/de.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:46+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:35+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/el.po b/openerp/addons/base/i18n/el.po index d0144cde2fa..2428ce6643d 100644 --- a/openerp/addons/base/i18n/el.po +++ b/openerp/addons/base/i18n/el.po @@ -12,8 +12,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:46+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:35+0000\n" +"X-Generator: Launchpad (build 16967)\n" "X-Poedit-Country: GREECE\n" "X-Poedit-Language: Greek\n" "X-Poedit-SourceCharset: utf-8\n" diff --git a/openerp/addons/base/i18n/en_GB.po b/openerp/addons/base/i18n/en_GB.po index 4577c3be9d6..3ac3d49d9ad 100644 --- a/openerp/addons/base/i18n/en_GB.po +++ b/openerp/addons/base/i18n/en_GB.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:55+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:44+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es.po b/openerp/addons/base/i18n/es.po index 161143cb35c..3289f1acd3c 100644 --- a/openerp/addons/base/i18n/es.po +++ b/openerp/addons/base/i18n/es.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:53+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:41+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_AR.po b/openerp/addons/base/i18n/es_AR.po index 8316f687607..ff156da38c1 100644 --- a/openerp/addons/base/i18n/es_AR.po +++ b/openerp/addons/base/i18n/es_AR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:55+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:43+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_BO.po b/openerp/addons/base/i18n/es_BO.po index 090125e661b..4d8aa3b9f5e 100644 --- a/openerp/addons/base/i18n/es_BO.po +++ b/openerp/addons/base/i18n/es_BO.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:56+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:45+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_CL.po b/openerp/addons/base/i18n/es_CL.po index 0df508399c7..e5fb10c6ca3 100644 --- a/openerp/addons/base/i18n/es_CL.po +++ b/openerp/addons/base/i18n/es_CL.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:56+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:44+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_CR.po b/openerp/addons/base/i18n/es_CR.po index 56f664e3259..ff0e9053b68 100644 --- a/openerp/addons/base/i18n/es_CR.po +++ b/openerp/addons/base/i18n/es_CR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:57+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:45+0000\n" +"X-Generator: Launchpad (build 16967)\n" "Language: \n" #. module: base diff --git a/openerp/addons/base/i18n/es_DO.po b/openerp/addons/base/i18n/es_DO.po index c93d78cbb59..c95ba0fcad8 100644 --- a/openerp/addons/base/i18n/es_DO.po +++ b/openerp/addons/base/i18n/es_DO.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:56+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:44+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_EC.po b/openerp/addons/base/i18n/es_EC.po index 11977f93058..6126d7c2a6f 100644 --- a/openerp/addons/base/i18n/es_EC.po +++ b/openerp/addons/base/i18n/es_EC.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:57+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:46+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_MX.po b/openerp/addons/base/i18n/es_MX.po index e8919023269..332d7384c82 100644 --- a/openerp/addons/base/i18n/es_MX.po +++ b/openerp/addons/base/i18n/es_MX.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:57+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:46+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_PE.po b/openerp/addons/base/i18n/es_PE.po index d6c439413be..cbdab27c57d 100644 --- a/openerp/addons/base/i18n/es_PE.po +++ b/openerp/addons/base/i18n/es_PE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:58+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:46+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_VE.po b/openerp/addons/base/i18n/es_VE.po index ff2410c4b72..15260ad574a 100644 --- a/openerp/addons/base/i18n/es_VE.po +++ b/openerp/addons/base/i18n/es_VE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:55+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:43+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/et.po b/openerp/addons/base/i18n/et.po index 0e16cb4c3be..1192725aac4 100644 --- a/openerp/addons/base/i18n/et.po +++ b/openerp/addons/base/i18n/et.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:44+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:33+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/eu.po b/openerp/addons/base/i18n/eu.po index 54a890ed5a6..6fabc952d95 100644 --- a/openerp/addons/base/i18n/eu.po +++ b/openerp/addons/base/i18n/eu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:42+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:31+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/fa.po b/openerp/addons/base/i18n/fa.po index 51409288f56..1b0e025410e 100644 --- a/openerp/addons/base/i18n/fa.po +++ b/openerp/addons/base/i18n/fa.po @@ -9,8 +9,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:50+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:39+0000\n" +"X-Generator: Launchpad (build 16967)\n" "X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n" "X-Poedit-Language: Persian\n" diff --git a/openerp/addons/base/i18n/fa_AF.po b/openerp/addons/base/i18n/fa_AF.po index 808dd0f67fe..af0a0e59729 100644 --- a/openerp/addons/base/i18n/fa_AF.po +++ b/openerp/addons/base/i18n/fa_AF.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:58+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:47+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/fi.po b/openerp/addons/base/i18n/fi.po index 86b4287d829..5646cffb9c9 100644 --- a/openerp/addons/base/i18n/fi.po +++ b/openerp/addons/base/i18n/fi.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:45+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:34+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/fr.po b/openerp/addons/base/i18n/fr.po index 1470da528cd..a7cb0c9fd67 100644 --- a/openerp/addons/base/i18n/fr.po +++ b/openerp/addons/base/i18n/fr.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:45+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:34+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/fr_CA.po b/openerp/addons/base/i18n/fr_CA.po index 0d23b54db1a..c132e8506f3 100644 --- a/openerp/addons/base/i18n/fr_CA.po +++ b/openerp/addons/base/i18n/fr_CA.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:56+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:44+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -29,7 +29,7 @@ msgstr "" #. module: base #: model:res.country,name:base.sh msgid "Saint Helena" -msgstr "" +msgstr "Sainte Hélène" #. module: base #: view:ir.actions.report.xml:0 @@ -39,7 +39,7 @@ msgstr "" #. module: base #: selection:ir.property,type:0 msgid "DateTime" -msgstr "" +msgstr "Date et heure" #. module: base #: code:addons/fields.py:652 @@ -68,7 +68,7 @@ msgstr "" #. module: base #: selection:base.language.install,lang:0 msgid "Hungarian / Magyar" -msgstr "" +msgstr "Hongrois / Magyar" #. module: base #: selection:base.language.install,lang:0 @@ -81,6 +81,8 @@ msgid "" "Helps you manage your projects and tasks by tracking them, generating " "plannings, etc..." msgstr "" +"Vous aide à gérer vos projets et tâches, en assurant leur suivi, en générant " +"des planifications, etc." #. module: base #: model:ir.module.module,summary:base.module_point_of_sale @@ -221,7 +223,7 @@ msgstr "" #. module: base #: model:res.country,name:base.sz msgid "Swaziland" -msgstr "" +msgstr "Swaziland" #. module: base #: code:addons/orm.py:4485 @@ -352,7 +354,7 @@ msgstr "" #. module: base #: model:ir.module.category,name:base.module_category_customer_relationship_management msgid "Customer Relationship Management" -msgstr "" +msgstr "Gestion de la relation client (CRM)" #. module: base #: model:ir.module.module,description:base.module_delivery @@ -389,14 +391,14 @@ msgstr "" #. module: base #: field:res.partner,credit_limit:0 msgid "Credit Limit" -msgstr "" +msgstr "Limite de crédit" #. module: base #: field:ir.model.constraint,date_update:0 #: field:ir.model.data,date_update:0 #: field:ir.model.relation,date_update:0 msgid "Update Date" -msgstr "" +msgstr "Mettre à jour la date" #. module: base #: model:ir.module.module,shortdesc:base.module_base_action_rule @@ -407,12 +409,12 @@ msgstr "" #: view:ir.attachment:0 #: field:ir.attachment,create_uid:0 msgid "Owner" -msgstr "" +msgstr "Propriétaire" #. module: base #: view:ir.actions.act_window:0 msgid "Source Object" -msgstr "" +msgstr "Objet source" #. module: base #: model:res.partner.bank.type,format_layout:base.bank_normal @@ -434,7 +436,7 @@ msgstr "" #: field:ir.model.access,group_id:0 #: view:res.groups:0 msgid "Group" -msgstr "" +msgstr "Groupe" #. module: base #: constraint:res.lang:0 @@ -442,6 +444,9 @@ msgid "" "Invalid date/time format directive specified. Please refer to the list of " "allowed directives, displayed when you edit a language." msgstr "" +"Vous avez spécifié une directive de format date/temps non valide. Veuillez " +"vous référer à la liste des directives autorisées, qui s'affiche lorsque " +"vous modifiez une langue." #. module: base #: code:addons/orm.py:4153 @@ -555,6 +560,19 @@ msgid "" "* Use emails to automatically confirm and send acknowledgements for any " "event registration\n" msgstr "" +"\n" +"Gestion et organisation d'événements\n" +"====================================\n" +"\n" +"Le module 'Événement' vous permet d'organiser efficacement des événements et " +"toutes les tâches liées : planification, suivi des inscriptions, des " +"présences, etc.\n" +"\n" +"Fonctionnalités clés\n" +"--------------------\n" +"* Gestion des événements et des inscriptions\n" +"* Utilisation d'e-mails pour automatiquement confirmer et envoyer des " +"accusés de réception pour chaque inscription à un événement\n" #. module: base #: selection:base.language.install,lang:0 @@ -567,6 +585,8 @@ msgid "" "If you check this, then the second time the user prints with same attachment " "name, it returns the previous report." msgstr "" +"Si vous cochez ceci, alors la seconde fois que l'utilisateur imprimera avec " +"le même nom de pièce jointe, cela retournera le rapport stocké" #. module: base #: model:ir.module.module,description:base.module_mrp_byproduct @@ -597,7 +617,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_hr_timesheet_invoice msgid "Invoice on Timesheets" -msgstr "" +msgstr "Facture sur les feuilles de temps" #. module: base #: view:base.module.upgrade:0 @@ -613,12 +633,12 @@ msgstr "" #. module: base #: field:res.country,name:0 msgid "Country Name" -msgstr "" +msgstr "Nom du pays" #. module: base #: model:res.country,name:base.co msgid "Colombia" -msgstr "" +msgstr "Colombie" #. module: base #: model:res.partner.title,name:base.res_partner_title_mister @@ -640,7 +660,7 @@ msgstr "" #. module: base #: view:res.partner:0 msgid "Sales & Purchases" -msgstr "" +msgstr "Achats et ventes" #. module: base #: view:ir.translation:0 @@ -721,6 +741,33 @@ msgid "" "module named account_voucher.\n" " " msgstr "" +"\n" +"Comptabilité et gestion financière\n" +"==================================\n" +"\n" +"Le module de comptabilité et de finance couvre :\n" +"------------------------------------------------\n" +" * Comptabilité générale\n" +" * Comptabilité de coût / comptabilité analytique\n" +" * Comptabilité de tiers\n" +" * Gestion des taxes\n" +" * Budgets\n" +" * Factures clients et fournisseurs\n" +" * Relevés bancaires\n" +" * Réconciliations par partenaire\n" +"\n" +"Il créé également un tableau de bord pour les comptables qui inclut :\n" +"---------------------------------------------------------------------\n" +" * Une liste des factures clients à approuver\n" +" * L'analyse de la société\n" +" * Un graphe de la trésorerie\n" +"\n" +"Les processus tels que le maintien de la comptabilité générale se fait par " +"le biais des revues financières définies (les lignes d'écriture à regrouper " +"le sont à travers un journal)\n" +"pour un exercice donné et pour la préparation des reçus il ya un module " +"nommé account_voucher.\n" +" " #. module: base #: view:ir.model:0 @@ -763,7 +810,7 @@ msgstr "" #. module: base #: model:res.country,name:base.jo msgid "Jordan" -msgstr "" +msgstr "Jordanie" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_hr @@ -788,7 +835,7 @@ msgstr "" #. module: base #: sql_constraint:res.company:0 msgid "The company name must be unique !" -msgstr "" +msgstr "Le nom de la société doit être unique !" #. module: base #: model:ir.ui.menu,name:base.menu_base_action_rule_admin @@ -820,6 +867,10 @@ msgid "" "invoice, then `object.invoice_address_id.mobile` is the field which gives " "the correct mobile number" msgstr "" +"Fournit les champs qui seront utilisés pour récupérer le numéro du " +"cellulaire. Exemple: vous sélectionnez une facture, alors, " +"`object.invoice_address_id.mobile` est le champ qui représente le numéro du " +"cellulaire correct." #. module: base #: view:ir.mail_server:0 @@ -840,7 +891,7 @@ msgstr "" #: field:base.language.export,name:0 #: field:ir.attachment,datas_fname:0 msgid "File Name" -msgstr "" +msgstr "Nom du fichier" #. module: base #: model:res.country,name:base.rs @@ -891,6 +942,33 @@ msgid "" "also possible in order to automatically create a meeting when a holiday " "request is accepted by setting up a type of meeting in Leave Type.\n" msgstr "" +"\n" +"Gère les absences et les demandes de congés\n" +"===========================================\n" +"\n" +"Cette application contrôle la programmation des congés de votre société. Il " +"permet aux employés de faire des demandes de congés. Ensuite, les managers " +"peuvent examiner les demandes et les approuver ou les rejeter. De cette " +"façon, vous pouvez contrôler la planification de l'ensemble des congés de " +"votre entreprise ou de votre département.\n" +"\n" +"Vous pouvez configurer plusieurs sortes d'absences (maladie, congés payés, " +"congés sans soldes…) et allouer rapidement ces absences à un employé ou un " +"département en utilisant les demandes de congés. Un employé peut aussi faire " +"une demande de congés pour plus de jours en ajoutant une allocation. Cela va " +"augmenter le total des jours disponibles pour ce type de congés (si la " +"demande est acceptée).\n" +"\n" +"Vous pouvez suivre les absences de différentes façons grâce aux rapports " +"suivants : \n" +"\n" +"* Résumé des absences\n" +"* Absences par département\n" +"* Analyse des absences\n" +"\n" +"Une synchronisation avec les agendas internes (Réunions du module CRM) est " +"aussi possible dans le but de créer automatiquement une réunion quand une " +"demande de congés est accepté en ajoutant une type de réunion Absence.\n" #. module: base #: selection:base.language.install,lang:0 @@ -900,7 +978,7 @@ msgstr "" #. module: base #: model:ir.ui.menu,name:base.menu_crm_config_opportunity msgid "Opportunities" -msgstr "" +msgstr "Opportunités" #. module: base #: model:ir.model,name:base.model_base_language_export @@ -910,7 +988,7 @@ msgstr "" #. module: base #: model:res.country,name:base.pg msgid "Papua New Guinea" -msgstr "" +msgstr "Papouasie-Nouvelle-Guinée" #. module: base #: help:ir.actions.report.xml,report_type:0 @@ -941,7 +1019,7 @@ msgstr "" #. module: base #: model:res.country,name:base.zw msgid "Zimbabwe" -msgstr "" +msgstr "Zimbabwe" #. module: base #: help:ir.model.constraint,type:0 @@ -957,7 +1035,7 @@ msgstr "" #. module: base #: model:res.country,name:base.es msgid "Spain" -msgstr "" +msgstr "Espagne" #. module: base #: help:ir.actions.act_window,domain:0 @@ -978,17 +1056,17 @@ msgstr "" #. module: base #: field:res.partner,mobile:0 msgid "Mobile" -msgstr "" +msgstr "Cellulaire" #. module: base #: model:res.country,name:base.om msgid "Oman" -msgstr "" +msgstr "Oman" #. module: base #: model:ir.module.module,shortdesc:base.module_mrp msgid "MRP" -msgstr "" +msgstr "MRP - PBM" #. module: base #: model:ir.module.module,description:base.module_hr_attendance @@ -1026,12 +1104,12 @@ msgstr "" #: model:ir.actions.act_window,name:base.act_menu_create #: view:wizard.ir.model.menu.create:0 msgid "Create Menu" -msgstr "" +msgstr "Créer un menu" #. module: base #: model:res.country,name:base.in msgid "India" -msgstr "" +msgstr "Inde" #. module: base #: model:ir.actions.act_window,name:base.res_request_link-act @@ -1047,7 +1125,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_fleet msgid "Fleet Management" -msgstr "" +msgstr "Gestion de flotte" #. module: base #: help:ir.server.object.lines,value:0 @@ -1107,6 +1185,36 @@ msgid "" "* Planned Revenue by Stage and User (graph)\n" "* Opportunities by Stage (graph)\n" msgstr "" +"\n" +"Le module OpenERP de gestion de la relation client (CRM)\n" +"=============================================\n" +"\n" +"Cette application permet aux utilisateurs de gérer efficacement et " +"intelligemment leurs pistes, opportunités, réunions et appels " +"téléphoniques.\n" +"\n" +"Elle gère les tâches clés comme la communication, l'identification, les " +"assignations, les résolutions et les notifications.\n" +"\n" +"OpenERP assure que toutes les demandes sont suivis par les utilisateurs, les " +"clients et les fournisseurs. Il permet d'envoyer automatiquement des " +"rappels, d'escalader des requêtes, de lancer des actions spécifiques et de " +"nombreuses autres selon les règles de l'entreprise.\n" +"\n" +"Le grand avantage de ce système est que les utilisateurs n'ont rien à faire " +"de spécial. Le module CRM dispose d'une passerelle de courriel permettant de " +"synchroniser les courriels reçus et OpenERP. De cette façon, les " +"utilisateurs peuvent simplement envoyer des courriels au système de suivi " +"des demandes.\n" +"\n" +"OpenERP s'occupera de remercier les utilisateurs de leur message, de diriger " +"cette demande à l'équipe appropriée et de s'assurer que toute les " +"communications futures seront rangées à la bonne place.\n" +"\n" +"\n" +"Le tableau bord de cette application inclus:\n" +"* les revenus prévus par étape de vente et par utilisateur (graphique);\n" +"* les opportunités par étape de vente (graphique).\n" #. module: base #: selection:base.language.export,format:0 @@ -1241,17 +1349,17 @@ msgstr "" #: selection:ir.actions.server,state:0 #: selection:workflow.activity,kind:0 msgid "Dummy" -msgstr "" +msgstr "Factice" #. module: base #: constraint:ir.ui.view:0 msgid "Invalid XML for View Architecture!" -msgstr "" +msgstr "XML invalide pour l'architecture de la vue" #. module: base #: model:res.country,name:base.ky msgid "Cayman Islands" -msgstr "" +msgstr "Îles Caïmans" #. module: base #: view:ir.rule:0 @@ -1287,7 +1395,7 @@ msgstr "" #. module: base #: selection:ir.property,type:0 msgid "Char" -msgstr "" +msgstr "Caractère" #. module: base #: field:ir.module.category,visible:0 @@ -1365,6 +1473,9 @@ msgid "" "decimal number [00,53]. All days in a new year preceding the first Monday " "are considered to be in week 0." msgstr "" +"%W - Numéro de semaine dans l'année (lundi est le premier jour de la " +"semaine) en nombre décimal [00,53]. Tous les jours de la nouvelle année " +"précédant le premier lundi sont considérés faisant partie de la semaine 0." #. module: base #: code:addons/base/module/wizard/base_language_install.py:53 @@ -1390,13 +1501,13 @@ msgstr "" #. module: base #: field:ir.actions.act_url,url:0 msgid "Action URL" -msgstr "" +msgstr "URL de l'action" #. module: base #: field:base.module.import,module_name:0 #: field:ir.module.module,shortdesc:0 msgid "Module Name" -msgstr "" +msgstr "Nom du module" #. module: base #: model:res.country,name:base.mh @@ -1423,7 +1534,7 @@ msgstr "" #: view:ir.ui.view:0 #: selection:ir.ui.view,type:0 msgid "Search" -msgstr "" +msgstr "Recherche" #. module: base #: code:addons/osv.py:154 @@ -1451,12 +1562,12 @@ msgstr "" #: code:addons/base/res/res_users.py:131 #, python-format msgid "Operation Canceled" -msgstr "" +msgstr "Opération annulée" #. module: base #: model:ir.module.module,shortdesc:base.module_document msgid "Document Management System" -msgstr "" +msgstr "Système de gestion des documents" #. module: base #: model:ir.module.module,shortdesc:base.module_crm_claim @@ -1499,7 +1610,7 @@ msgstr "" #: model:ir.module.category,name:base.module_category_purchase_management #: model:ir.ui.menu,name:base.menu_purchase_root msgid "Purchases" -msgstr "" +msgstr "Achats" #. module: base #: model:res.country,name:base.md @@ -1524,12 +1635,12 @@ msgstr "" #. module: base #: view:ir.module.module:0 msgid "Features" -msgstr "" +msgstr "Fonctionnalités" #. module: base #: view:ir.attachment:0 msgid "Data" -msgstr "" +msgstr "Données" #. module: base #: model:ir.module.module,description:base.module_portal_claim @@ -1597,7 +1708,7 @@ msgstr "" #: model:ir.module.category,name:base.module_category_social_network #: model:ir.module.module,shortdesc:base.module_mail msgid "Social Network" -msgstr "" +msgstr "Réseau social" #. module: base #: view:res.lang:0 @@ -12871,7 +12982,7 @@ msgstr "" #. module: base #: model:res.country,name:base.ao msgid "Angola" -msgstr "" +msgstr "Angola" #. module: base #: model:res.country,name:base.tf diff --git a/openerp/addons/base/i18n/gl.po b/openerp/addons/base/i18n/gl.po index d0ea8b19736..68ab1d36f65 100644 --- a/openerp/addons/base/i18n/gl.po +++ b/openerp/addons/base/i18n/gl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:46+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:35+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/gu.po b/openerp/addons/base/i18n/gu.po index 32d105932c4..cf0edaaecf7 100644 --- a/openerp/addons/base/i18n/gu.po +++ b/openerp/addons/base/i18n/gu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:46+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:35+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/he.po b/openerp/addons/base/i18n/he.po index 829f5f0dd6e..70d012d1998 100644 --- a/openerp/addons/base/i18n/he.po +++ b/openerp/addons/base/i18n/he.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:47+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:35+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/hi.po b/openerp/addons/base/i18n/hi.po index cb6b74c5d76..e790f6b39e1 100644 --- a/openerp/addons/base/i18n/hi.po +++ b/openerp/addons/base/i18n/hi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:47+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:36+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/hr.po b/openerp/addons/base/i18n/hr.po index 502eb7017f4..44627278dbc 100644 --- a/openerp/addons/base/i18n/hr.po +++ b/openerp/addons/base/i18n/hr.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:52+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:40+0000\n" +"X-Generator: Launchpad (build 16967)\n" "Language: hr\n" #. module: base diff --git a/openerp/addons/base/i18n/hu.po b/openerp/addons/base/i18n/hu.po index 65678f0c39c..b812e7ee525 100644 --- a/openerp/addons/base/i18n/hu.po +++ b/openerp/addons/base/i18n/hu.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:47+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:36+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/hy.po b/openerp/addons/base/i18n/hy.po index 25c2c973edc..6275f5896e6 100644 --- a/openerp/addons/base/i18n/hy.po +++ b/openerp/addons/base/i18n/hy.po @@ -9,8 +9,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:42+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:31+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/id.po b/openerp/addons/base/i18n/id.po index 3e1d92922eb..f69a0ae481d 100644 --- a/openerp/addons/base/i18n/id.po +++ b/openerp/addons/base/i18n/id.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:48+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:36+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/is.po b/openerp/addons/base/i18n/is.po index 979703590c3..ee314bae98b 100644 --- a/openerp/addons/base/i18n/is.po +++ b/openerp/addons/base/i18n/is.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:47+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:36+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/it.po b/openerp/addons/base/i18n/it.po index b42ad24c4d9..d76609aa203 100644 --- a/openerp/addons/base/i18n/it.po +++ b/openerp/addons/base/i18n/it.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:48+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:36+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ja.po b/openerp/addons/base/i18n/ja.po index 496096243a8..03850c59478 100644 --- a/openerp/addons/base/i18n/ja.po +++ b/openerp/addons/base/i18n/ja.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:48+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:37+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ka.po b/openerp/addons/base/i18n/ka.po index 8ded3adc823..837f7516cc2 100644 --- a/openerp/addons/base/i18n/ka.po +++ b/openerp/addons/base/i18n/ka.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:45+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:34+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/kk.po b/openerp/addons/base/i18n/kk.po index 1f79cb3bea8..5592883f098 100644 --- a/openerp/addons/base/i18n/kk.po +++ b/openerp/addons/base/i18n/kk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:48+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:37+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ko.po b/openerp/addons/base/i18n/ko.po index 59699d475f1..50fb6e38537 100644 --- a/openerp/addons/base/i18n/ko.po +++ b/openerp/addons/base/i18n/ko.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:49+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:37+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/lt.po b/openerp/addons/base/i18n/lt.po index 255c8cca12c..55518a7b577 100644 --- a/openerp/addons/base/i18n/lt.po +++ b/openerp/addons/base/i18n/lt.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:49+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:38+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/lv.po b/openerp/addons/base/i18n/lv.po index 11ab8a66389..f64156a0738 100644 --- a/openerp/addons/base/i18n/lv.po +++ b/openerp/addons/base/i18n/lv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:49+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:37+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/mk.po b/openerp/addons/base/i18n/mk.po index 16ef3f6b681..46cfd2f956a 100644 --- a/openerp/addons/base/i18n/mk.po +++ b/openerp/addons/base/i18n/mk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:49+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:38+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/mn.po b/openerp/addons/base/i18n/mn.po index c6aadd7f268..1d69c955339 100644 --- a/openerp/addons/base/i18n/mn.po +++ b/openerp/addons/base/i18n/mn.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:50+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:38+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/nb.po b/openerp/addons/base/i18n/nb.po index 4cc42eafc50..066dfdb196a 100644 --- a/openerp/addons/base/i18n/nb.po +++ b/openerp/addons/base/i18n/nb.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:50+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:38+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/nl.po b/openerp/addons/base/i18n/nl.po index 1a075753bd5..9950ea883b2 100644 --- a/openerp/addons/base/i18n/nl.po +++ b/openerp/addons/base/i18n/nl.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:44+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:33+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/nl_BE.po b/openerp/addons/base/i18n/nl_BE.po index 650b53002a3..d8e2ab7b023 100644 --- a/openerp/addons/base/i18n/nl_BE.po +++ b/openerp/addons/base/i18n/nl_BE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:56+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:44+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/pl.po b/openerp/addons/base/i18n/pl.po index b98dcfd3e61..bdfe4178bb1 100644 --- a/openerp/addons/base/i18n/pl.po +++ b/openerp/addons/base/i18n/pl.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:51+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:39+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/pt.po b/openerp/addons/base/i18n/pt.po index 40be88b6a5b..ac1ec23c839 100644 --- a/openerp/addons/base/i18n/pt.po +++ b/openerp/addons/base/i18n/pt.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:51+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:39+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/pt_BR.po b/openerp/addons/base/i18n/pt_BR.po index dd733b834d7..0d5261a6539 100644 --- a/openerp/addons/base/i18n/pt_BR.po +++ b/openerp/addons/base/i18n/pt_BR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:55+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:43+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ro.po b/openerp/addons/base/i18n/ro.po index 2eef4d852ee..f6afb07778e 100644 --- a/openerp/addons/base/i18n/ro.po +++ b/openerp/addons/base/i18n/ro.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:51+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:39+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ru.po b/openerp/addons/base/i18n/ru.po index 36b5686a172..dde0d09a88b 100644 --- a/openerp/addons/base/i18n/ru.po +++ b/openerp/addons/base/i18n/ru.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:51+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:40+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sk.po b/openerp/addons/base/i18n/sk.po index fb2f429717c..fa23b9fca86 100644 --- a/openerp/addons/base/i18n/sk.po +++ b/openerp/addons/base/i18n/sk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:52+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:40+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sl.po b/openerp/addons/base/i18n/sl.po index b8c16a387b2..2ce1102afb6 100644 --- a/openerp/addons/base/i18n/sl.po +++ b/openerp/addons/base/i18n/sl.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:52+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:41+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sq.po b/openerp/addons/base/i18n/sq.po index d2e13a78447..75418986b60 100644 --- a/openerp/addons/base/i18n/sq.po +++ b/openerp/addons/base/i18n/sq.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:41+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:30+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sr.po b/openerp/addons/base/i18n/sr.po index 418010621fc..61b34a233f5 100644 --- a/openerp/addons/base/i18n/sr.po +++ b/openerp/addons/base/i18n/sr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:52+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:40+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sr@latin.po b/openerp/addons/base/i18n/sr@latin.po index 6574959fd41..8c9348c3094 100644 --- a/openerp/addons/base/i18n/sr@latin.po +++ b/openerp/addons/base/i18n/sr@latin.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:58+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:47+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sv.po b/openerp/addons/base/i18n/sv.po index 06b1a9d5ba7..a8e01fb7a5d 100644 --- a/openerp/addons/base/i18n/sv.po +++ b/openerp/addons/base/i18n/sv.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:53+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:41+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/th.po b/openerp/addons/base/i18n/th.po index 560d3e03eef..db7e38e2fec 100644 --- a/openerp/addons/base/i18n/th.po +++ b/openerp/addons/base/i18n/th.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:53+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:41+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/tlh.po b/openerp/addons/base/i18n/tlh.po index 9ac32871bc4..afcd43207d9 100644 --- a/openerp/addons/base/i18n/tlh.po +++ b/openerp/addons/base/i18n/tlh.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:53+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:42+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/tr.po b/openerp/addons/base/i18n/tr.po index eea736aa946..2411e610e83 100644 --- a/openerp/addons/base/i18n/tr.po +++ b/openerp/addons/base/i18n/tr.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:54+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:42+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/uk.po b/openerp/addons/base/i18n/uk.po index 7065c8cf42b..5ec02766e6d 100644 --- a/openerp/addons/base/i18n/uk.po +++ b/openerp/addons/base/i18n/uk.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:54+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:42+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ur.po b/openerp/addons/base/i18n/ur.po index 0b9702b1f6d..d18f9aaea23 100644 --- a/openerp/addons/base/i18n/ur.po +++ b/openerp/addons/base/i18n/ur.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:54+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:42+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/vi.po b/openerp/addons/base/i18n/vi.po index c6a970ba990..ae1c01cef12 100644 --- a/openerp/addons/base/i18n/vi.po +++ b/openerp/addons/base/i18n/vi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:54+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:43+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/zh_CN.po b/openerp/addons/base/i18n/zh_CN.po index f9ff9274e58..6ea18ad57c9 100644 --- a/openerp/addons/base/i18n/zh_CN.po +++ b/openerp/addons/base/i18n/zh_CN.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:57+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:46+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/zh_HK.po b/openerp/addons/base/i18n/zh_HK.po index 852bbaa62c1..700bf5c84c7 100644 --- a/openerp/addons/base/i18n/zh_HK.po +++ b/openerp/addons/base/i18n/zh_HK.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:54+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:43+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/zh_TW.po b/openerp/addons/base/i18n/zh_TW.po index 4d96c33f880..1b7ff7144f5 100644 --- a/openerp/addons/base/i18n/zh_TW.po +++ b/openerp/addons/base/i18n/zh_TW.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-12 04:57+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-03-20 05:45+0000\n" +"X-Generator: Launchpad (build 16967)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing From 520e10d4b469f7e18cad701887832ffec91dc1b0 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Thu, 20 Mar 2014 11:15:55 +0100 Subject: [PATCH 27/29] [FIX] account invoice analysis exclude proforma from invoiced bzr revid: al@openerp.com-20140320101555-hw2bgaqs2kw0b7of --- addons/account/report/account_invoice_report_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account/report/account_invoice_report_view.xml b/addons/account/report/account_invoice_report_view.xml index 24723d7fb12..eebc95ae0e2 100644 --- a/addons/account/report/account_invoice_report_view.xml +++ b/addons/account/report/account_invoice_report_view.xml @@ -25,7 +25,7 @@ - + From abf8e0d54f63dcc8cbf7a8fc3b8745fa138b1ad3 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Thu, 20 Mar 2014 18:51:29 +0100 Subject: [PATCH 28/29] [ADD] crm: mass convert lead to opp, add force assignation checkbox, to force the salesman/salesteam on converted/merged lead/opps or leave the existing salesman/salesteam bzr revid: dle@openerp.com-20140320175129-2lj2pu86l3rjoulw --- addons/crm/wizard/crm_lead_to_opportunity.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/addons/crm/wizard/crm_lead_to_opportunity.py b/addons/crm/wizard/crm_lead_to_opportunity.py index 347475d100f..70f6712df74 100644 --- a/addons/crm/wizard/crm_lead_to_opportunity.py +++ b/addons/crm/wizard/crm_lead_to_opportunity.py @@ -197,8 +197,7 @@ class crm_lead2opportunity_mass_convert(osv.osv_memory): ('each_exist_or_create', 'Use existing partner or create'), ('nothing', 'Do not link to a customer') ], 'Related Customer', required=True), - # Uncomment me in trunk - # 'force_assignation': fields.boolean('Force assignation', help='If unchecked, this will leave the salesman of duplicated opportunities'), + 'force_assignation': fields.boolean('Force assignation', help='If unchecked, this will leave the salesman of duplicated opportunities'), } _defaults = { @@ -274,10 +273,7 @@ class crm_lead2opportunity_mass_convert(osv.osv_memory): active_ids = active_ids.difference(merged_lead_ids) active_ids = active_ids.union(remaining_lead_ids) ctx['active_ids'] = list(active_ids) - # Remove me in trunk - ctx['no_force_assignation'] = ctx.get('no_force_assignation', True) - # Uncomment me in trunk - # ctx['no_force_assignation'] = not data.force_assignation + ctx['no_force_assignation'] = not data.force_assignation return self.action_apply(cr, uid, ids, context=ctx) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 54d8cd1e866d1a6dc0b594588a6d900d6404728c Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Thu, 20 Mar 2014 19:38:14 +0100 Subject: [PATCH 29/29] [FIX] crm: round robin tests on salesman assignation set force assignation true bzr revid: dle@openerp.com-20140320183814-163zwgilty4l2jv7 --- addons/crm/test/lead2opportunity_assign_salesmen.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/crm/test/lead2opportunity_assign_salesmen.yml b/addons/crm/test/lead2opportunity_assign_salesmen.yml index 12d212ec5fd..76b35be531d 100644 --- a/addons/crm/test/lead2opportunity_assign_salesmen.yml +++ b/addons/crm/test/lead2opportunity_assign_salesmen.yml @@ -65,8 +65,8 @@ Salesman create a mass convert wizard and convert all the leads. - !python {model: crm.lead2opportunity.partner.mass}: | - context.update({'active_model': 'crm.lead', 'active_ids': [ref("test_crm_lead_01"), ref("test_crm_lead_02"), ref("test_crm_lead_03"), ref("test_crm_lead_04"), ref("test_crm_lead_05"), ref("test_crm_lead_06")], 'active_id': ref("test_crm_lead_01"), 'no_force_assignation': False}) - id = self.create(cr, uid, {'user_ids': [(6, 0, [ref('test_res_user_01'), ref('test_res_user_02'), ref('test_res_user_03'), ref('test_res_user_04')])], 'section_id': ref('crm.section_sales_department'), 'deduplicate': False}, context=context) + context.update({'active_model': 'crm.lead', 'active_ids': [ref("test_crm_lead_01"), ref("test_crm_lead_02"), ref("test_crm_lead_03"), ref("test_crm_lead_04"), ref("test_crm_lead_05"), ref("test_crm_lead_06")], 'active_id': ref("test_crm_lead_01")}) + id = self.create(cr, uid, {'user_ids': [(6, 0, [ref('test_res_user_01'), ref('test_res_user_02'), ref('test_res_user_03'), ref('test_res_user_04')])], 'section_id': ref('crm.section_sales_department'), 'deduplicate': False, 'force_assignation': True}, context=context) self.mass_convert(cr, uid, [id], context=context) - The leads should now be opps with a salesman and a salesteam. Also, salesmen should have been assigned following a round-robin method.