From 1e1b85e95b307f6eb61c46ae9149bf96a46f9145 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sat, 22 Sep 2012 14:43:54 +0200 Subject: [PATCH 001/158] gevent first try bzr revid: al@openerp.com-20120922124354-unk1u8a9anst5hwo --- openerp-server | 6 ++++++ openerp/service/__init__.py | 3 ++- openerp/service/wsgi_server.py | 5 ++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/openerp-server b/openerp-server index 9025e2d50c2..4d28a4cb759 100755 --- a/openerp-server +++ b/openerp-server @@ -223,6 +223,12 @@ def main(): check_root_user() openerp.tools.config.parse_config(sys.argv[1:]) + # TODO GEVENT if event + import gevent.monkey + gevent.monkey.patch_all() + import gevent_psycopg2 + gevent_psycopg2.monkey_patch() + check_postgres_user() openerp.netsvc.init_logger() report_configuration() diff --git a/openerp/service/__init__.py b/openerp/service/__init__.py index 30a765b1f60..d3a57135284 100644 --- a/openerp/service/__init__.py +++ b/openerp/service/__init__.py @@ -86,7 +86,8 @@ def start_services(): netrpc_server.init_servers() # Start the main cron thread. - openerp.cron.start_master_thread() + # TODO GEVENT if event use greenlet in cron + # openerp.cron.start_master_thread() # Start the top-level servers threads (normally HTTP, HTTPS, and NETRPC). openerp.netsvc.Server.startAll() diff --git a/openerp/service/wsgi_server.py b/openerp/service/wsgi_server.py index 61556974a00..d15d423818b 100644 --- a/openerp/service/wsgi_server.py +++ b/openerp/service/wsgi_server.py @@ -424,7 +424,10 @@ def serve(): # TODO Change the xmlrpc_* options to http_* interface = config['xmlrpc_interface'] or '0.0.0.0' port = config['xmlrpc_port'] - httpd = werkzeug.serving.make_server(interface, port, application, threaded=True) + #httpd = werkzeug.serving.make_server(interface, port, application, threaded=True) + # TODO GEVENT if event + from gevent.wsgi import WSGIServer + httpd = WSGIServer((interface, port), application) _logger.info('HTTP service (werkzeug) running on %s:%s', interface, port) httpd.serve_forever() From 966cadcdd66dc9518a389d54eece1cc49a9ee247 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 15 Nov 2012 15:47:28 +0100 Subject: [PATCH 002/158] Put back cron thread bzr revid: nicolas.vanhoren@openerp.com-20121115144728-0ts5h9m7873892fd --- openerp/service/__init__.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/openerp/service/__init__.py b/openerp/service/__init__.py index 6e3de89ddff..11fe45aaf31 100644 --- a/openerp/service/__init__.py +++ b/openerp/service/__init__.py @@ -82,10 +82,8 @@ def start_services(): # Initialize the HTTP stack. netrpc_server.init_servers() - # Start the main cron thread. - # TODO GEVENT if event use greenlet in cron - #if openerp.conf.max_cron_threads: - # openerp.cron.start_master_thread() + if openerp.conf.max_cron_threads: + openerp.cron.start_master_thread() # Start the top-level servers threads (normally HTTP, HTTPS, and NETRPC). openerp.netsvc.Server.startAll() From 468652ccf7802f2b39a95144aca9e7eeb51dbca5 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 16 Nov 2012 10:41:18 +0100 Subject: [PATCH 003/158] Had to remove the cron again bzr revid: nicolas.vanhoren@openerp.com-20121116094118-ph3oxmwr5qhcp3c7 --- openerp/service/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openerp/service/__init__.py b/openerp/service/__init__.py index 11fe45aaf31..9f5a7a03009 100644 --- a/openerp/service/__init__.py +++ b/openerp/service/__init__.py @@ -83,7 +83,8 @@ def start_services(): netrpc_server.init_servers() if openerp.conf.max_cron_threads: - openerp.cron.start_master_thread() + #openerp.cron.start_master_thread() + pass # Start the top-level servers threads (normally HTTP, HTTPS, and NETRPC). openerp.netsvc.Server.startAll() From 7137bb0b53f38d1a600d47d0b7b9ec83a824337f Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 22 Nov 2012 15:53:09 +0100 Subject: [PATCH 004/158] [IMP] Added configuration option for gevent bzr revid: nicolas.vanhoren@openerp.com-20121122145309-bim6m10p0q7rf6wj --- openerp-server | 14 +++++++++----- openerp/service/__init__.py | 6 +++--- openerp/service/wsgi_server.py | 9 +++++---- openerp/tools/config.py | 3 ++- 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/openerp-server b/openerp-server index f0a858bbe2c..73586e58890 100755 --- a/openerp-server +++ b/openerp-server @@ -224,15 +224,19 @@ def main(): check_root_user() openerp.tools.config.parse_config(sys.argv[1:]) - # TODO GEVENT if event - import gevent.monkey - gevent.monkey.patch_all() - import gevent_psycopg2 - gevent_psycopg2.monkey_patch() + if openerp.tools.config.options["gevent"]: + _logger.info('Using gevent mode') + import gevent.monkey + gevent.monkey.patch_all() + import gevent_psycopg2 + gevent_psycopg2.monkey_patch() check_postgres_user() openerp.netsvc.init_logger() report_configuration() + + if openerp.tools.config.options["gevent"]: + _logger.info('Using gevent mode') config = openerp.tools.config diff --git a/openerp/service/__init__.py b/openerp/service/__init__.py index 9f5a7a03009..154a93df001 100644 --- a/openerp/service/__init__.py +++ b/openerp/service/__init__.py @@ -82,9 +82,9 @@ def start_services(): # Initialize the HTTP stack. netrpc_server.init_servers() - if openerp.conf.max_cron_threads: - #openerp.cron.start_master_thread() - pass + if not openerp.tools.config.options["gevent"]: + if openerp.conf.max_cron_threads: + openerp.cron.start_master_thread() # Start the top-level servers threads (normally HTTP, HTTPS, and NETRPC). openerp.netsvc.Server.startAll() diff --git a/openerp/service/wsgi_server.py b/openerp/service/wsgi_server.py index 8018657fd28..00ad54575b1 100644 --- a/openerp/service/wsgi_server.py +++ b/openerp/service/wsgi_server.py @@ -424,10 +424,11 @@ def serve(): # TODO Change the xmlrpc_* options to http_* interface = config['xmlrpc_interface'] or '0.0.0.0' port = config['xmlrpc_port'] - #httpd = werkzeug.serving.make_server(interface, port, application, threaded=True) - # TODO GEVENT if event - from gevent.wsgi import WSGIServer - httpd = WSGIServer((interface, port), application) + if not openerp.tools.config.options["gevent"]: + httpd = werkzeug.serving.make_server(interface, port, application, threaded=True) + else: + from gevent.wsgi import WSGIServer + httpd = WSGIServer((interface, port), application) _logger.info('HTTP service (werkzeug) running on %s:%s', interface, port) httpd.serve_forever() diff --git a/openerp/tools/config.py b/openerp/tools/config.py index 56f1e5c7b83..e037bf7a6ac 100644 --- a/openerp/tools/config.py +++ b/openerp/tools/config.py @@ -106,6 +106,7 @@ class configmanager(object): help="specify additional addons paths (separated by commas).", action="callback", callback=self._check_addons_path, nargs=1, type="string") group.add_option("--load", dest="server_wide_modules", help="Comma-separated list of server-wide modules default=web") + group.add_option("--gevent", dest="gevent", action="store_true", my_default=False, help="Activate the GEvent mode, this also desactivate the cron.") parser.add_option_group(group) # XML-RPC / HTTP @@ -380,7 +381,7 @@ class configmanager(object): 'netrpc', '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', 'gevent' ] for arg in keys: From c3cb554ab06df9bee9242dbf30bb0117d7751f03 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 22 Nov 2012 16:06:01 +0100 Subject: [PATCH 005/158] Improved config bzr revid: nicolas.vanhoren@openerp.com-20121122150601-7wha9rao9ix2myvv --- openerp/tools/config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openerp/tools/config.py b/openerp/tools/config.py index e037bf7a6ac..7e5b3e0f334 100644 --- a/openerp/tools/config.py +++ b/openerp/tools/config.py @@ -381,7 +381,7 @@ class configmanager(object): 'netrpc', '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', 'gevent' + 'secure_cert_file', 'secure_pkey_file', 'dbfilter', 'log_handler', 'log_level' ] for arg in keys: @@ -400,7 +400,7 @@ class configmanager(object): 'list_db', 'xmlrpcs', 'proxy_mode', 'test_file', 'test_enable', 'test_commit', 'test_report_directory', 'osv_memory_count_limit', 'osv_memory_age_limit', 'max_cron_threads', 'unaccent', - 'workers', 'limit_memory_hard', 'limit_memory_soft', 'limit_time_cpu', 'limit_time_real', 'limit_request' + 'workers', 'limit_memory_hard', 'limit_memory_soft', 'limit_time_cpu', 'limit_time_real', 'limit_request', 'gevent' ] for arg in keys: From 96d50a9a40d77680ffbd1719385e33757c89f725 Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Mon, 10 Dec 2012 15:16:02 +0100 Subject: [PATCH 006/158] [FIX] added period_id field to account_voucher dialog lp bug: https://launchpad.net/bugs/1062621 fixed bzr revid: jco@openerp.com-20121210141602-z7sa9lou4vkuczw3 --- addons/account_voucher/voucher_payment_receipt_view.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml index b6f367601ff..0f923bcd1f4 100644 --- a/addons/account_voucher/voucher_payment_receipt_view.xml +++ b/addons/account_voucher/voucher_payment_receipt_view.xml @@ -305,6 +305,7 @@ widget="selection" on_change="onchange_journal(journal_id, line_cr_ids, False, partner_id, date, amount, type, company_id, context)" string="Payment Method"/> + From dc47ad6c737e386d9ad163cb0cb39c6fe0c02724 Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Wed, 19 Dec 2012 10:22:35 +0100 Subject: [PATCH 007/158] [FIX] Added onchange_company for gain and loss accounts in config settings lp bug: https://launchpad.net/bugs/1076509 fixed bzr revid: jco@openerp.com-20121219092235-wci6jo81q2ihgpgd --- addons/account_voucher/account_voucher.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index 41d3476442e..59399a766d5 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -56,6 +56,13 @@ class account_config_settings(osv.osv_memory): relation='account.account', string="Loss Exchange Rate Account"), } + def onchange_company_id(self, cr, uid, ids, company_id): + res = super(account_config_settings, self).onchange_company_id(cr, uid, ids, company_id) + if company_id: + company = self.pool.get('res.company').browse(cr, uid, company_id) + res['value'].update({'income_currency_exchange_account_id': company.income_currency_exchange_account_id and company.income_currency_exchange_account_id.id, + 'expense_currency_exchange_account_id': company.expense_currency_exchange_account_id and company.expense_currency_exchange_account_id.id}) + return res class account_voucher(osv.osv): def _check_paid(self, cr, uid, ids, name, args, context=None): From a02e894bfcad34945bceaf2a2ef97251555f2d78 Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Wed, 19 Dec 2012 12:55:17 +0100 Subject: [PATCH 008/158] [FIX] Correction when no account or no company bzr revid: jco@openerp.com-20121219115517-uj3t8embox155kty --- addons/account_voucher/account_voucher.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index 59399a766d5..609a19661c0 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -49,19 +49,24 @@ class account_config_settings(osv.osv_memory): 'company_id', 'income_currency_exchange_account_id', type='many2one', relation='account.account', - string="Gain Exchange Rate Account"), + string="Gain Exchange Rate Account", + domain="[('type', '=', 'other')]"), 'expense_currency_exchange_account_id': fields.related( 'company_id', 'expense_currency_exchange_account_id', type="many2one", relation='account.account', - string="Loss Exchange Rate Account"), + string="Loss Exchange Rate Account", + domain="[('type', '=', 'other')]"), } def onchange_company_id(self, cr, uid, ids, company_id): res = super(account_config_settings, self).onchange_company_id(cr, uid, ids, company_id) if company_id: company = self.pool.get('res.company').browse(cr, uid, company_id) - res['value'].update({'income_currency_exchange_account_id': company.income_currency_exchange_account_id and company.income_currency_exchange_account_id.id, - 'expense_currency_exchange_account_id': company.expense_currency_exchange_account_id and company.expense_currency_exchange_account_id.id}) + res['value'].update({'income_currency_exchange_account_id': company.income_currency_exchange_account_id and company.income_currency_exchange_account_id.id or False, + 'expense_currency_exchange_account_id': company.expense_currency_exchange_account_id and company.expense_currency_exchange_account_id.id or False}) + else: + res['value'].update({'income_currency_exchange_account_id': False, + 'expense_currency_exchange_account_id': False}) return res class account_voucher(osv.osv): From dba6e07ecdf8ed61316bdc1f4c4af36e489a95be Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Fri, 21 Dec 2012 10:41:47 +0100 Subject: [PATCH 009/158] [FIX] Will take into account the type of the invoice for the default account in the invoice line lp bug: https://launchpad.net/bugs/1084819 fixed bzr revid: jco@openerp.com-20121221094147-mp7dhttfob7y2xis --- addons/account/account_invoice.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index 02903ea8f33..e836e28d6c6 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -1393,8 +1393,13 @@ class account_invoice_line(osv.osv): def _default_account_id(self, cr, uid, context=None): # XXX this gets the default account for the user's company, # it should get the default account for the invoice's company - # however, the invoice's company does not reach this point - prop = self.pool.get('ir.property').get(cr, uid, 'property_account_income_categ', 'product.category', context=context) + # however, the invoice's company does not reach this point (but will throw error on validation) + if context is None: + context = {} + if context.get('type') in ('out_invoice','out_refund'): + prop = self.pool.get('ir.property').get(cr, uid, 'property_account_income_categ', 'product.category', context=context) + else: + prop = self.pool.get('ir.property').get(cr, uid, 'property_account_expense_categ', 'product.category', context=context) return prop and prop.id or False _defaults = { From 0a6f2417e797e7ade9699d4638f2786f581c6e9f Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Fri, 21 Dec 2012 14:49:56 +0100 Subject: [PATCH 010/158] [FIX] Changes the period used into the period chosen and not the period of today lp bug: https://launchpad.net/bugs/1078004 fixed bzr revid: jco@openerp.com-20121221134956-fgg1ltu1qy1j2ion --- addons/account_asset/account_asset.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py index b7330352b12..b335063b758 100644 --- a/addons/account_asset/account_asset.py +++ b/addons/account_asset/account_asset.py @@ -331,6 +331,9 @@ class account_asset_asset(osv.osv): depreciation_obj = self.pool.get('account.asset.depreciation.line') period = period_obj.browse(cr, uid, period_id, context=context) depreciation_ids = depreciation_obj.search(cr, uid, [('asset_id', 'in', ids), ('depreciation_date', '<=', period.date_stop), ('depreciation_date', '>=', period.date_start), ('move_check', '=', False)], context=context) + if context is None: + context = {} + context.update({'depreciation_date':period.date_stop}) return depreciation_obj.create_move(cr, uid, depreciation_ids, context=context) def create(self, cr, uid, vals, context=None): @@ -388,7 +391,7 @@ class account_asset_depreciation_line(osv.osv): created_move_ids = [] asset_ids = [] for line in self.browse(cr, uid, ids, context=context): - depreciation_date = time.strftime('%Y-%m-%d') + depreciation_date = context.get('depreciation_date') or time.strftime('%Y-%m-%d') period_ids = period_obj.find(cr, uid, depreciation_date, context=context) company_currency = line.asset_id.company_id.currency_id.id current_currency = line.asset_id.currency_id.id From 383314f27381573294351060c7b6a7e01ec075a5 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 10 Jan 2013 17:19:36 +0100 Subject: [PATCH 011/158] First version working with multicorn bzr revid: nicolas.vanhoren@openerp.com-20130110161936-4515hhdlamd3d25r --- openerp/service/workers.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/openerp/service/workers.py b/openerp/service/workers.py index 0a54a80b963..9043eac1bcd 100644 --- a/openerp/service/workers.py +++ b/openerp/service/workers.py @@ -45,6 +45,7 @@ class Multicorn(object): self.socket = None self.workers_http = {} self.workers_cron = {} + self.workers_longpolling = {} self.workers = {} self.generation = 0 self.queue = [] @@ -140,6 +141,8 @@ class Multicorn(object): self.worker_spawn(WorkerHTTP, self.workers_http) while len(self.workers_cron) < config['max_cron_threads']: self.worker_spawn(WorkerCron, self.workers_cron) + while len(self.workers_longpolling) < 1: + self.worker_spawn(WorkerLongPolling, self.workers_longpolling) def sleep(self): try: @@ -334,6 +337,21 @@ class WorkerHTTP(Worker): Worker.start(self) self.server = WorkerBaseWSGIServer(self.multi.app) +class WorkerLongPolling(Worker): + """ Long polling workers """ + def start(self): + config.options["gevent"] = True + _logger.info('Using gevent mode') + import gevent.monkey + gevent.monkey.patch_all() + import gevent_psycopg2 + gevent_psycopg2.monkey_patch() + + Worker.start(self) + from gevent.wsgi import WSGIServer + httpd = WSGIServer(('0.0.0.0', 8072), self.multi.app) + httpd.serve_forever() + class WorkerBaseWSGIServer(werkzeug.serving.BaseWSGIServer): """ werkzeug WSGI Server patched to allow using an external listen socket """ From cb33e09d1bedce2aa17d02fc7c8047b4a2753f40 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 10 Jan 2013 17:33:14 +0100 Subject: [PATCH 012/158] Socket is inited by master process bzr revid: nicolas.vanhoren@openerp.com-20130110163314-449euw1z69eebtpz --- openerp/service/workers.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/openerp/service/workers.py b/openerp/service/workers.py index 9043eac1bcd..aee639035a6 100644 --- a/openerp/service/workers.py +++ b/openerp/service/workers.py @@ -181,6 +181,12 @@ class Multicorn(object): self.socket.setblocking(0) self.socket.bind(self.address) self.socket.listen(8) + # long polling socket + self.long_polling_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.long_polling_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.long_polling_socket.setblocking(0) + self.long_polling_socket.bind(('0.0.0.0', 8072)) + self.long_polling_socket.listen(8) def stop(self, graceful=True): if graceful: @@ -349,8 +355,8 @@ class WorkerLongPolling(Worker): Worker.start(self) from gevent.wsgi import WSGIServer - httpd = WSGIServer(('0.0.0.0', 8072), self.multi.app) - httpd.serve_forever() + self.server = WSGIServer(self.multi.long_polling_socket, self.multi.app) + self.server.serve_forever() class WorkerBaseWSGIServer(werkzeug.serving.BaseWSGIServer): """ werkzeug WSGI Server patched to allow using an external listen socket From fc58729b2f2a6a2baa79d474cfc2eb15234f22a1 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Tue, 15 Jan 2013 18:47:05 +0100 Subject: [PATCH 013/158] [WIP] introduce a way to reference specific config options bzr revid: abo@openerp.com-20130115174705-qldpq3le1ul4nh0j --- openerp/addons/base/res/res_config.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index ff0c3bfe6ad..a3b168a8d82 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -570,17 +570,17 @@ class res_config_settings(osv.osv_memory): if action_ids: return act_window.read(cr, uid, action_ids[0], [], context=context) return {} - + def name_get(self, cr, uid, ids, context=None): """ Override name_get method to return an appropriate configuration wizard name, and not the generated name.""" - + if not ids: return [] # name_get may receive int id instead of an id list if isinstance(ids, (int, long)): ids = [ids] - + act_window = self.pool.get('ir.actions.act_window') action_ids = act_window.search(cr, uid, [('res_model', '=', self._name)], context=context) name = self._name @@ -588,4 +588,23 @@ class res_config_settings(osv.osv_memory): name = act_window.read(cr, uid, action_ids[0], ['name'], context=context)['name'] return [(record.id, name) for record in self.browse(cr, uid , ids, context=context)] + def get_path(self, cr, uid, module_name, menu_xml_id=None, field_name=None, context=None): + """ + Return a string representing the path to access a specific + configuration option through the interface. + """ + + config_path = '' + + # Fetch the path + if (menu_xml_id): + dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id) + config_path += self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context).name + + # Fetch the exact config option name + #if (field_name): + # self.pool.get('mycfgobj')._get_all_columns().strings[field_name] + + return config_path + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From ff25f7a3d4d6dd15170692487de304a804060b0d Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Wed, 16 Jan 2013 18:14:11 +0100 Subject: [PATCH 014/158] [IMP] use a var to store the menuitem separator makes it easier to modify makes it possible to import anywhere bzr revid: abo@openerp.com-20130116171411-iugmyk4vqjewko2z --- openerp/addons/base/ir/ir_ui_menu.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openerp/addons/base/ir/ir_ui_menu.py b/openerp/addons/base/ir/ir_ui_menu.py index 5da85c43577..95379098cf4 100644 --- a/openerp/addons/base/ir/ir_ui_menu.py +++ b/openerp/addons/base/ir/ir_ui_menu.py @@ -30,6 +30,8 @@ from openerp.osv import fields, osv from openerp.tools.translate import _ from openerp import SUPERUSER_ID +MENU_ITEM_SEPARATOR = "/" + def one_in(setA, setB): """Check the presence of an element of setA in setB """ @@ -154,7 +156,7 @@ class ir_ui_menu(osv.osv): if level<=0: return '...' if elmt.parent_id: - parent_path = self._get_one_full_name(elmt.parent_id, level-1) + "/" + parent_path = self._get_one_full_name(elmt.parent_id, level-1) + MENU_ITEM_SEPARATOR else: parent_path = '' return parent_path + elmt.name From 70890bfa3250e33769e12a818780f90b3889be63 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Wed, 16 Jan 2013 18:14:54 +0100 Subject: [PATCH 015/158] [WIP] introduce a way to reference specific config options bzr revid: abo@openerp.com-20130116171454-s4tt2f6le80oruc0 --- openerp/addons/base/res/res_config.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index a3b168a8d82..f7085f44000 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -25,6 +25,7 @@ from openerp import pooler from openerp.osv import osv, fields from openerp.tools import ustr from openerp.tools.translate import _ +from openerp.addons.base.ir.ir_ui_menu import MENU_ITEM_SEPARATOR _logger = logging.getLogger(__name__) @@ -588,22 +589,24 @@ class res_config_settings(osv.osv_memory): name = act_window.read(cr, uid, action_ids[0], ['name'], context=context)['name'] return [(record.id, name) for record in self.browse(cr, uid , ids, context=context)] - def get_path(self, cr, uid, module_name, menu_xml_id=None, field_name=None, context=None): + def get_config_path(self, cr, uid, module_name, menu_xml_id=None, model_name=None, field_name=None, context=None): """ Return a string representing the path to access a specific configuration option through the interface. + + :return string """ config_path = '' # Fetch the path - if (menu_xml_id): + if (module_name and menu_xml_id): dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id) - config_path += self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context).name + config_path += self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context).complete_name # Fetch the exact config option name - #if (field_name): - # self.pool.get('mycfgobj')._get_all_columns().strings[field_name] + if (model_name and field_name): + config_path += MENU_ITEM_SEPARATOR + self.pool.get(model_name)._all_columns.get(field_name).column.string return config_path From a4120a879adf2b50dd18ed8a6310b9bae65f0209 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Thu, 17 Jan 2013 11:30:57 +0100 Subject: [PATCH 016/158] [IMP] long polling: disable the watchdog for the WorkerLongPolling, added command-line option for its port. bzr revid: vmt@openerp.com-20130117103057-12ez48kj48pntb1g --- openerp/service/workers.py | 12 ++++++++++-- openerp/tools/config.py | 5 ++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/openerp/service/workers.py b/openerp/service/workers.py index 29ae9de10c0..7321978e859 100644 --- a/openerp/service/workers.py +++ b/openerp/service/workers.py @@ -35,6 +35,7 @@ class Multicorn(object): def __init__(self, app): # config self.address = (config['xmlrpc_interface'] or '0.0.0.0', config['xmlrpc_port']) + self.long_polling_address = (config['xmlrpc_interface'] or '0.0.0.0', config['longpolling_port']) self.population = config['workers'] self.timeout = config['limit_time_real'] self.limit_request = config['limit_request'] @@ -132,7 +133,8 @@ class Multicorn(object): def process_timeout(self): now = time.time() for (pid, worker) in self.workers.items(): - if now - worker.watchdog_time >= worker.watchdog_timeout: + if (worker.watchdog_timeout is not None) and \ + (now - worker.watchdog_time >= worker.watchdog_timeout): _logger.error("Worker (%s) timeout", pid) self.worker_kill(pid, signal.SIGKILL) @@ -185,7 +187,7 @@ class Multicorn(object): self.long_polling_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.long_polling_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.long_polling_socket.setblocking(0) - self.long_polling_socket.bind(('0.0.0.0', 8072)) + self.long_polling_socket.bind(self.long_polling_address) self.long_polling_socket.listen(8) def stop(self, graceful=True): @@ -230,6 +232,7 @@ class Worker(object): self.multi = multi self.watchdog_time = time.time() self.watchdog_pipe = multi.pipe_new() + # Can be set to None if no watchdog is desired. self.watchdog_timeout = multi.timeout self.ppid = os.getpid() self.pid = None @@ -345,6 +348,11 @@ class WorkerHTTP(Worker): class WorkerLongPolling(Worker): """ Long polling workers """ + def __init__(self, multi): + super(WorkerLongPolling, self).__init__(multi) + # Disable the watchdog feature for this kind of worker. + self.watchdog_timeout = None + def start(self): config.options["gevent"] = True _logger.info('Using gevent mode') diff --git a/openerp/tools/config.py b/openerp/tools/config.py index 83a347f0864..dcbf26783e3 100644 --- a/openerp/tools/config.py +++ b/openerp/tools/config.py @@ -121,6 +121,8 @@ class configmanager(object): help="disable the XML-RPC protocol") group.add_option("--proxy-mode", dest="proxy_mode", action="store_true", my_default=False, help="Enable correct behavior when behind a reverse proxy") + group.add_option("--longpolling-port", dest="longpolling_port", my_default=8072, + help="specify the TCP port for longpolling requests", type="int") parser.add_option_group(group) # XML-RPC / HTTPS @@ -378,7 +380,8 @@ class configmanager(object): self.options['pidfile'] = False # if defined dont take the configfile value even if the defined value is None - keys = ['xmlrpc_interface', 'xmlrpc_port', 'db_name', 'db_user', 'db_password', 'db_host', + keys = ['xmlrpc_interface', 'xmlrpc_port', 'longpolling_port', + 'db_name', 'db_user', 'db_password', 'db_host', 'db_port', 'db_template', 'logfile', 'pidfile', 'smtp_port', 'email_from', 'smtp_server', 'smtp_user', 'smtp_password', 'netrpc_interface', 'netrpc_port', 'db_maxconn', 'import_partial', 'addons_path', From 8214854b7996804bdfc8ec3d4ea2398f03d50370 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 17 Jan 2013 15:47:55 +0100 Subject: [PATCH 017/158] [IMP] doc bzr revid: abo@openerp.com-20130117144755-r9oboeaw8rr1seqa --- openerp/osv/osv.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openerp/osv/osv.py b/openerp/osv/osv.py index 018976ac663..20dfe74b7ff 100644 --- a/openerp/osv/osv.py +++ b/openerp/osv/osv.py @@ -39,6 +39,7 @@ import openerp.exceptions _logger = logging.getLogger(__name__) # Deprecated. +# Have a look at exceptions.py instead. class except_osv(Exception): def __init__(self, name, value): self.name = name From 6b926883ccdb362b85be7b8e878f21775ad0375e Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 17 Jan 2013 16:50:03 +0100 Subject: [PATCH 018/158] [IMP] add a missing import (exceptions) bzr revid: abo@openerp.com-20130117155003-5akv67tylaz59s7l --- openerp/__init__.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openerp/__init__.py b/openerp/__init__.py index c9db7076e71..0afcaf0bfc0 100644 --- a/openerp/__init__.py +++ b/openerp/__init__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (). # @@ -15,7 +15,7 @@ # 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 . +# along with this program. If not, see . # ############################################################################## @@ -28,6 +28,7 @@ SUPERUSER_ID = 1 import addons import cli import conf +import exceptions import loglevels import modules import netsvc From c588e762d4dde0680e9609202065e5bf739edcec Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 17 Jan 2013 17:05:46 +0100 Subject: [PATCH 019/158] [IMP] simplify the new config reference mechanism code bzr revid: abo@openerp.com-20130117160546-mg9g9zrbvp4poly6 --- openerp/addons/base/res/res_config.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index f7085f44000..cec30a6d303 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -589,24 +589,34 @@ class res_config_settings(osv.osv_memory): name = act_window.read(cr, uid, action_ids[0], ['name'], context=context)['name'] return [(record.id, name) for record in self.browse(cr, uid , ids, context=context)] - def get_config_path(self, cr, uid, module_name, menu_xml_id=None, model_name=None, field_name=None, context=None): + def get_path(self, cr, uid, menu_xml_id=None, field_name=None, context=None): """ Return a string representing the path to access a specific configuration option through the interface. - :return string + :return string: may vary depending of the given params + - if menu_xml_id and not field_name: the string will contain the + path to the config option. + e.g.: "Settings/Configuration/Sales" + - if not menu_xml_id and field_name: the string will contain the + config option's human readable name + e.g.: "Create leads from incoming mails" + - if menu_xml_id and field_name: the string will contain the path + and the config option's human readable name + e.g.: "Settings/Configuration/Sales/Create leads from incoming mails" """ config_path = '' - # Fetch the path - if (module_name and menu_xml_id): + # Fetch the path to the config option + if (menu_xml_id): + module_name, menu_xml_id = menu_xml_id.split('.') dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id) config_path += self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context).complete_name # Fetch the exact config option name - if (model_name and field_name): - config_path += MENU_ITEM_SEPARATOR + self.pool.get(model_name)._all_columns.get(field_name).column.string + if (field_name): + config_path += MENU_ITEM_SEPARATOR + self._all_columns.get(field_name).column.string return config_path From fb5288e93cc68197400d2deaf7fa522273d73a5a Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 17 Jan 2013 19:33:42 +0100 Subject: [PATCH 020/158] [IMP] get_path code; return a tuple instead of a string also add a helper bzr revid: abo@openerp.com-20130117183342-rhfnxh4y777rruqt --- openerp/addons/base/res/res_config.py | 39 +++++++++++++-------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index cec30a6d303..910c473a4be 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -589,35 +589,34 @@ class res_config_settings(osv.osv_memory): name = act_window.read(cr, uid, action_ids[0], ['name'], context=context)['name'] return [(record.id, name) for record in self.browse(cr, uid , ids, context=context)] - def get_path(self, cr, uid, menu_xml_id=None, field_name=None, context=None): + def get_path(self, cr, uid, menu_xml_id, field_name, context=None): """ Return a string representing the path to access a specific configuration option through the interface. - :return string: may vary depending of the given params - - if menu_xml_id and not field_name: the string will contain the - path to the config option. - e.g.: "Settings/Configuration/Sales" - - if not menu_xml_id and field_name: the string will contain the - config option's human readable name - e.g.: "Create leads from incoming mails" - - if menu_xml_id and field_name: the string will contain the path - and the config option's human readable name - e.g.: "Settings/Configuration/Sales/Create leads from incoming mails" + Note that we'll prefer to find back the model's name through the + ui_menu and then its action than directly using self. It will + make the call to this method from a helper function possible. + + :return tuple t: t[0] contains the full path, t[1] contains + the "human readable" configuration option name """ - config_path = '' - # Fetch the path to the config option - if (menu_xml_id): - module_name, menu_xml_id = menu_xml_id.split('.') - dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id) - config_path += self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context).complete_name + module_name, menu_xml_id = menu_xml_id.split('.') + dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id) + ir_ui_menu = self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context) + res_name = ir_ui_menu.complete_name # Fetch the exact config option name - if (field_name): - config_path += MENU_ITEM_SEPARATOR + self._all_columns.get(field_name).column.string + res_path = self.pool.get(ir_ui_menu.action.res_model)._all_columns.get(field_name).column.string - return config_path + return (res_name, res_path) + +def get_config_path(cr, uid, menu_xml_id=None, field_name=None, context=None): + """ + Simple helper for res_config_settings.get_path(). + """ + return pooler.get_pool(cr.dbname).get('res.config.settings').get_path(cr, uid, menu_xml_id, field_name, context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From a075983249df68cc9797b2c92f32f0039a4e68b9 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Fri, 18 Jan 2013 12:03:00 +0100 Subject: [PATCH 021/158] [IMP] simplify the helper by using SUPERUSER_ID bzr revid: abo@openerp.com-20130118110300-d0z0xr8df0zygiv5 --- openerp/addons/base/res/res_config.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index 910c473a4be..81e01e46f2f 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -21,7 +21,7 @@ import logging from operator import attrgetter -from openerp import pooler +from openerp import pooler, SUPERUSER_ID from openerp.osv import osv, fields from openerp.tools import ustr from openerp.tools.translate import _ @@ -613,10 +613,10 @@ class res_config_settings(osv.osv_memory): return (res_name, res_path) -def get_config_path(cr, uid, menu_xml_id=None, field_name=None, context=None): +def get_config_path(cr, menu_xml_id=None, field_name=None, context=None): """ Simple helper for res_config_settings.get_path(). """ - return pooler.get_pool(cr.dbname).get('res.config.settings').get_path(cr, uid, menu_xml_id, field_name, context) + return pooler.get_pool(cr.dbname).get('res.config.settings').get_path(cr, SUPERUSER_ID, menu_xml_id, field_name, context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 8bd622202b123b4919ca7862b92d4fe19d5f464b Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Fri, 18 Jan 2013 16:23:46 +0100 Subject: [PATCH 022/158] [IMP] introduce a new type of exception: WarningConfig. Note that no corresponding RPC_FAULT_CODE has been added; WarningConfig will share the same RPC_FAULT_CODE than Warning (RPC_FAULT_CODE_WARNING = 2) Also remove a few whitespaces bzr revid: abo@openerp.com-20130118152346-5v4j94wjrq34hq4m --- openerp/exceptions.py | 8 ++++++++ openerp/netsvc.py | 4 +++- openerp/service/netrpc_server.py | 8 +++++--- openerp/service/wsgi_server.py | 4 +++- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/openerp/exceptions.py b/openerp/exceptions.py index fbf52c7f3a9..387e126b8c4 100644 --- a/openerp/exceptions.py +++ b/openerp/exceptions.py @@ -27,9 +27,17 @@ treated as a 'Server error'. """ +import re + class Warning(Exception): pass +class WarningConfig(Exception): + """ Warning bound to a misconfiguration. """ + def __init__(self, msg): + # todo: treat the msg (regex) + super(WarningConfig, self).__init__(msg) + class AccessDenied(Exception): """ Login/password error. No message, no traceback. """ def __init__(self): diff --git a/openerp/netsvc.py b/openerp/netsvc.py index 533b1659191..3362b86fac7 100644 --- a/openerp/netsvc.py +++ b/openerp/netsvc.py @@ -107,7 +107,7 @@ class ExportService(object): """ _services = {} - + def __init__(self, name): ExportService._services[name] = self self.__name = name @@ -306,6 +306,8 @@ def dispatch_rpc(service_name, method, params): raise except openerp.exceptions.Warning: raise + except openerp.exceptions.WarningConfig: + raise except openerp.exceptions.DeferredException, e: _logger.exception(tools.exception_to_unicode(e)) post_mortem(e.traceback) diff --git a/openerp/service/netrpc_server.py b/openerp/service/netrpc_server.py index af89a734f28..f87274ef6e6 100644 --- a/openerp/service/netrpc_server.py +++ b/openerp/service/netrpc_server.py @@ -15,7 +15,7 @@ # 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 . +# along with this program. If not, see . # ############################################################################## @@ -145,7 +145,7 @@ class TinySocketClientThread(threading.Thread): break except Exception, e: try: - valid_exception = Exception(netrpc_handle_exception_legacy(e)) + valid_exception = Exception(netrpc_handle_exception_legacy(e)) valid_traceback = getattr(e, 'traceback', sys.exc_info()) formatted_traceback = "".join(traceback.format_exception(*valid_traceback)) _logger.debug("netrpc: communication-level exception", exc_info=True) @@ -164,12 +164,14 @@ class TinySocketClientThread(threading.Thread): def stop(self): self.running = False - + def netrpc_handle_exception_legacy(e): if isinstance(e, openerp.osv.osv.except_osv): return 'warning -- ' + e.name + '\n\n' + e.value if isinstance(e, openerp.exceptions.Warning): return 'warning -- Warning\n\n' + str(e) + if isinstance(e, openerp.exceptions.WarningConfig): + return 'warning -- Warning\n\n' + str(e) if isinstance(e, openerp.exceptions.AccessError): return 'warning -- AccessError\n\n' + str(e) if isinstance(e, openerp.exceptions.AccessDenied): diff --git a/openerp/service/wsgi_server.py b/openerp/service/wsgi_server.py index 67436a1c0bf..e83f06cc264 100644 --- a/openerp/service/wsgi_server.py +++ b/openerp/service/wsgi_server.py @@ -95,6 +95,8 @@ def xmlrpc_handle_exception(e): response = xmlrpclib.dumps(fault, allow_none=False, encoding=None) elif isinstance(e, openerp.exceptions.Warning): fault = xmlrpclib.Fault(RPC_FAULT_CODE_WARNING, str(e)) + elif isinstance(e, openerp.exceptions.WarningConfig): + fault = xmlrpclib.Fault(RPC_FAULT_CODE_WARNING, str(e)) response = xmlrpclib.dumps(fault, allow_none=False, encoding=None) elif isinstance (e, openerp.exceptions.AccessError): fault = xmlrpclib.Fault(RPC_FAULT_CODE_ACCESS_ERROR, str(e)) @@ -311,7 +313,7 @@ def http_to_wsgi(http_dir): handler.auth_provider.checkRequest(handler, path) except websrv_lib.AuthRequiredExc, ae: # Darwin 9.x.x webdav clients will report "HTTP/1.0" to us, while they support (and need) the - # authorisation features of HTTP/1.1 + # authorisation features of HTTP/1.1 if request_version != 'HTTP/1.1' and ('Darwin/9.' not in handler.headers.get('User-Agent', '')): start_response("403 Forbidden", []) return [] From 571276eb660b58a56f4680f2ba933aa28f521d11 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Fri, 18 Jan 2013 16:24:20 +0100 Subject: [PATCH 023/158] [IMP] introduce a new type of exception: WarningConfig. Note that no corresponding RPC_FAULT_CODE has been added; WarningConfig will share the same RPC_FAULT_CODE than Warning (RPC_FAULT_CODE_WARNING = 2) bzr revid: abo@openerp.com-20130118152420-9wk5nwuydwdwzoge --- addons/web/session.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/web/session.py b/addons/web/session.py index 30e9308d4e1..a2719482a2c 100644 --- a/addons/web/session.py +++ b/addons/web/session.py @@ -92,6 +92,8 @@ class OpenERPSession(object): raise xmlrpclib.Fault(code_string % (e.name, e.value), '') except openerp.exceptions.Warning, e: raise xmlrpclib.Fault(code_string % ("Warning", e), '') + except openerp.exceptions.WarningConfig, e: + raise xmlrpclib.Fault(code_string % ("Warning", e), '') except openerp.exceptions.AccessError, e: raise xmlrpclib.Fault(code_string % ("AccessError", e), '') except openerp.exceptions.AccessDenied, e: From ed0a292f5d2f766dd0be3cbf258d1f05a13fbbbf Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Fri, 18 Jan 2013 16:25:11 +0100 Subject: [PATCH 024/158] [IMP] gevent: no longer a command-line flag (always used in multi-process, never otherwise) The internal flag is in openerp.__init__ (as the multi_process flag). bzr revid: vmt@openerp.com-20130118152511-57u4gxyolz0hd4y8 --- openerp/__init__.py | 2 ++ openerp/cli/server.py | 10 ---------- openerp/service/__init__.py | 5 +++-- openerp/service/workers.py | 2 +- openerp/service/wsgi_server.py | 2 +- openerp/tools/config.py | 3 +-- 6 files changed, 8 insertions(+), 16 deletions(-) diff --git a/openerp/__init__.py b/openerp/__init__.py index c9db7076e71..307170b9033 100644 --- a/openerp/__init__.py +++ b/openerp/__init__.py @@ -51,6 +51,8 @@ wsgi.register_wsgi_handler = wsgi.wsgi_server.register_wsgi_handler # its own copy of the data structure and we don't need to care about # locks between threads. multi_process = False +# Is the server running with gevent. +evented = False # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/cli/server.py b/openerp/cli/server.py index 0df13ffb3a7..84a818c0c5d 100644 --- a/openerp/cli/server.py +++ b/openerp/cli/server.py @@ -230,20 +230,10 @@ def main(args): check_root_user() openerp.tools.config.parse_config(args) - if openerp.tools.config.options["gevent"]: - _logger.info('Using gevent mode') - import gevent.monkey - gevent.monkey.patch_all() - import gevent_psycopg2 - gevent_psycopg2.monkey_patch() - check_postgres_user() openerp.netsvc.init_logger() report_configuration() - if openerp.tools.config.options["gevent"]: - _logger.info('Using gevent mode') - config = openerp.tools.config configure_babel_localedata_path() diff --git a/openerp/service/__init__.py b/openerp/service/__init__.py index dd8d4fe9152..dd654b4c8a2 100644 --- a/openerp/service/__init__.py +++ b/openerp/service/__init__.py @@ -34,6 +34,7 @@ import web_services import web_services import wsgi_server +import openerp import openerp.modules import openerp.netsvc import openerp.osv @@ -91,13 +92,13 @@ def start_services(): # Start the WSGI server. wsgi_server.start_service() # Start the main cron thread. - if not openerp.tools.config.options["gevent"]: + if not openerp.evented: cron.start_service() def stop_services(): """ Stop all services. """ # stop services - if not openerp.tools.config.options["gevent"]: + if not openerp.evented: cron.stop_service() netrpc_server.stop_service() wsgi_server.stop_service() diff --git a/openerp/service/workers.py b/openerp/service/workers.py index 7321978e859..3e8df86fede 100644 --- a/openerp/service/workers.py +++ b/openerp/service/workers.py @@ -354,7 +354,7 @@ class WorkerLongPolling(Worker): self.watchdog_timeout = None def start(self): - config.options["gevent"] = True + openerp.evented = True _logger.info('Using gevent mode') import gevent.monkey gevent.monkey.patch_all() diff --git a/openerp/service/wsgi_server.py b/openerp/service/wsgi_server.py index 010a8cde957..196b3f5db7d 100644 --- a/openerp/service/wsgi_server.py +++ b/openerp/service/wsgi_server.py @@ -424,7 +424,7 @@ def serve(): # TODO Change the xmlrpc_* options to http_* interface = config['xmlrpc_interface'] or '0.0.0.0' port = config['xmlrpc_port'] - if not openerp.tools.config.options["gevent"]: + if not openerp.evented: httpd = werkzeug.serving.make_server(interface, port, application, threaded=True) else: from gevent.wsgi import WSGIServer diff --git a/openerp/tools/config.py b/openerp/tools/config.py index dcbf26783e3..c4b52c10b31 100644 --- a/openerp/tools/config.py +++ b/openerp/tools/config.py @@ -108,7 +108,6 @@ class configmanager(object): help="specify additional addons paths (separated by commas).", action="callback", callback=self._check_addons_path, nargs=1, type="string") group.add_option("--load", dest="server_wide_modules", help="Comma-separated list of server-wide modules default=web") - group.add_option("--gevent", dest="gevent", action="store_true", my_default=False, help="Activate the GEvent mode, this also desactivate the cron.") parser.add_option_group(group) # XML-RPC / HTTP @@ -412,7 +411,7 @@ class configmanager(object): 'list_db', 'xmlrpcs', 'proxy_mode', 'test_file', 'test_enable', 'test_commit', 'test_report_directory', 'osv_memory_count_limit', 'osv_memory_age_limit', 'max_cron_threads', 'unaccent', - 'workers', 'limit_memory_hard', 'limit_memory_soft', 'limit_time_cpu', 'limit_time_real', 'limit_request', 'gevent' + 'workers', 'limit_memory_hard', 'limit_memory_soft', 'limit_time_cpu', 'limit_time_real', 'limit_request', ] for arg in keys: From 6f5c0e1a08a003087b3d61e8602d1c7ab02dd688 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Fri, 18 Jan 2013 18:15:41 +0100 Subject: [PATCH 025/158] [REV] reintroduce the model's name in the get_path()'s signature, but in a different way bzr revid: abo@openerp.com-20130118171541-tyxl4k6w1wwa3kyl --- openerp/addons/base/res/res_config.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index 81e01e46f2f..197b60ebab0 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -589,15 +589,11 @@ class res_config_settings(osv.osv_memory): name = act_window.read(cr, uid, action_ids[0], ['name'], context=context)['name'] return [(record.id, name) for record in self.browse(cr, uid , ids, context=context)] - def get_path(self, cr, uid, menu_xml_id, field_name, context=None): + def get_path(self, cr, uid, menu_xml_id=None, full_field_name=None, context=None): """ Return a string representing the path to access a specific configuration option through the interface. - Note that we'll prefer to find back the model's name through the - ui_menu and then its action than directly using self. It will - make the call to this method from a helper function possible. - :return tuple t: t[0] contains the full path, t[1] contains the "human readable" configuration option name """ @@ -606,12 +602,13 @@ class res_config_settings(osv.osv_memory): module_name, menu_xml_id = menu_xml_id.split('.') dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id) ir_ui_menu = self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context) - res_name = ir_ui_menu.complete_name + res_path = ir_ui_menu.complete_name # Fetch the exact config option name - res_path = self.pool.get(ir_ui_menu.action.res_model)._all_columns.get(field_name).column.string + model_name, field_name = full_field_name.rsplit('.', 1) + res_name = self.pool.get(model_name)._all_columns.get(field_name).column.string - return (res_name, res_path) + return (res_path, res_name) def get_config_path(cr, menu_xml_id=None, field_name=None, context=None): """ From 64eedb68166a418ce355e3aa01c4d0bcba6cd39a Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Fri, 18 Jan 2013 18:16:19 +0100 Subject: [PATCH 026/158] [WIP] start the implementation of WarningConfig bzr revid: abo@openerp.com-20130118171619-dx0yjwuun0j7m43p --- openerp/exceptions.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/openerp/exceptions.py b/openerp/exceptions.py index 387e126b8c4..f99ed433049 100644 --- a/openerp/exceptions.py +++ b/openerp/exceptions.py @@ -35,7 +35,20 @@ class Warning(Exception): class WarningConfig(Exception): """ Warning bound to a misconfiguration. """ def __init__(self, msg): - # todo: treat the msg (regex) + # WIP WIP WIP WIP WIP WIP WIP + def sub_path(g): + menu_xml_id = g.group(1) + + return '(group to convert: '+menu_xml_id+')' + + def sub_path(g): + menu_xml_id = g.group(1) + + return '(group to convert: '+menu_xml_id+')' + + # Treat the msg: find the menu_xml_id and the field_name + teststr = 'coucou [path:blabla_bla_bla]' + print ">>>>> sub: ", re.sub(r'\[path:([a-z_]*)\]', sub_path, teststr) super(WarningConfig, self).__init__(msg) class AccessDenied(Exception): From 9d8a2b9eb523d2676dd6ed06d550b96094086ffd Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Mon, 21 Jan 2013 16:07:48 +0100 Subject: [PATCH 027/158] [WIP] move the code to another place bzr revid: abo@openerp.com-20130121150748-3bw28jhvsj23s1zo --- openerp/addons/base/res/res_config.py | 44 ++++++++++++++++++--------- openerp/exceptions.py | 16 ---------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index 197b60ebab0..d96b2b5175c 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -20,12 +20,13 @@ ############################################################################## import logging from operator import attrgetter +import re from openerp import pooler, SUPERUSER_ID from openerp.osv import osv, fields from openerp.tools import ustr from openerp.tools.translate import _ -from openerp.addons.base.ir.ir_ui_menu import MENU_ITEM_SEPARATOR +from openerp import exceptions _logger = logging.getLogger(__name__) @@ -594,26 +595,41 @@ class res_config_settings(osv.osv_memory): Return a string representing the path to access a specific configuration option through the interface. - :return tuple t: t[0] contains the full path, t[1] contains + :return dict d: d['path'] contains the full path, d['name'] contains the "human readable" configuration option name """ + res = {'path': None, 'name': None} + # Fetch the path to the config option - module_name, menu_xml_id = menu_xml_id.split('.') - dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id) - ir_ui_menu = self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context) - res_path = ir_ui_menu.complete_name + if (menu_xml_id): + module_name, menu_xml_id = menu_xml_id.split('.') + dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id) + ir_ui_menu = self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context) + res['path'] = ir_ui_menu.complete_name # Fetch the exact config option name - model_name, field_name = full_field_name.rsplit('.', 1) - res_name = self.pool.get(model_name)._all_columns.get(field_name).column.string + if (full_field_name): + model_name, field_name = full_field_name.rsplit('.', 1) + res['name'] = self.pool.get(model_name)._all_columns.get(field_name).column.string - return (res_path, res_name) + return res -def get_config_path(cr, menu_xml_id=None, field_name=None, context=None): - """ - Simple helper for res_config_settings.get_path(). - """ - return pooler.get_pool(cr.dbname).get('res.config.settings').get_path(cr, SUPERUSER_ID, menu_xml_id, field_name, context) +def get_warning_config(cr, msg, context=None): + res_config_obj = pooler.get_pool(cr.dbname).get('res.config.settings') + + def sub_path(g): + s = g.group(1) + return res_config_obj.get_path(cr, SUPERUSER_ID, menu_xml_id=s, full_field_name=None, context=context)['path'] + + def sub_field(g): + s = g.group(1) + return res_config_obj.get_path(cr, SUPERUSER_ID, menu_xml_id=None, full_field_name=s, context=context)['name'] + + # Treat the msg: find the menu_xml_id and the field_name + msg = re.sub(r'\[path:([a-z_\.]*)\]', sub_path, msg) + msg = re.sub(r'\[field:([a-z_\.]*)\]', sub_field, msg) + + return exceptions.WarningConfig(msg) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/exceptions.py b/openerp/exceptions.py index f99ed433049..c43f706fa61 100644 --- a/openerp/exceptions.py +++ b/openerp/exceptions.py @@ -27,28 +27,12 @@ treated as a 'Server error'. """ -import re - class Warning(Exception): pass class WarningConfig(Exception): """ Warning bound to a misconfiguration. """ def __init__(self, msg): - # WIP WIP WIP WIP WIP WIP WIP - def sub_path(g): - menu_xml_id = g.group(1) - - return '(group to convert: '+menu_xml_id+')' - - def sub_path(g): - menu_xml_id = g.group(1) - - return '(group to convert: '+menu_xml_id+')' - - # Treat the msg: find the menu_xml_id and the field_name - teststr = 'coucou [path:blabla_bla_bla]' - print ">>>>> sub: ", re.sub(r'\[path:([a-z_]*)\]', sub_path, teststr) super(WarningConfig, self).__init__(msg) class AccessDenied(Exception): From 0a0e5e9fb02817a0a12c1019590e540ab4f9eb05 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Mon, 21 Jan 2013 17:59:16 +0100 Subject: [PATCH 028/158] [WIP] heavy refactoring of the get option path feature bzr revid: abo@openerp.com-20130121165916-9oc7ox7ygmpb6lhm --- openerp/addons/base/res/res_config.py | 55 ++++++++++++--------------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index d96b2b5175c..68f11d989c6 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -590,46 +590,39 @@ class res_config_settings(osv.osv_memory): name = act_window.read(cr, uid, action_ids[0], ['name'], context=context)['name'] return [(record.id, name) for record in self.browse(cr, uid , ids, context=context)] - def get_path(self, cr, uid, menu_xml_id=None, full_field_name=None, context=None): - """ - Return a string representing the path to access a specific - configuration option through the interface. + def get_option_path(self, cr, uid, menu_xml_id=None, context=None): + module_name, menu_xml_id = menu_xml_id.split('.') + dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id) + ir_ui_menu = self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context) - :return dict d: d['path'] contains the full path, d['name'] contains - the "human readable" configuration option name - """ + return ir_ui_menu.complete_name - res = {'path': None, 'name': None} + def get_option_name(self, cr, uid, full_field_name=None, context=None): + model_name, field_name = full_field_name.rsplit('.', 1) - # Fetch the path to the config option - if (menu_xml_id): - module_name, menu_xml_id = menu_xml_id.split('.') - dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id) - ir_ui_menu = self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context) - res['path'] = ir_ui_menu.complete_name - - # Fetch the exact config option name - if (full_field_name): - model_name, field_name = full_field_name.rsplit('.', 1) - res['name'] = self.pool.get(model_name)._all_columns.get(field_name).column.string - - return res + return self.pool.get(model_name)._all_columns.get(field_name).column.string def get_warning_config(cr, msg, context=None): res_config_obj = pooler.get_pool(cr.dbname).get('res.config.settings') - def sub_path(g): - s = g.group(1) - return res_config_obj.get_path(cr, SUPERUSER_ID, menu_xml_id=s, full_field_name=None, context=context)['path'] + # Treat the msg + # 1/ find the path and field references, put them in a list + references = re.findall(r'\[((?:path|field):[a-z_\.]*)\]', msg, flags=re.I) - def sub_field(g): - s = g.group(1) - return res_config_obj.get_path(cr, SUPERUSER_ID, menu_xml_id=None, full_field_name=s, context=context)['name'] + # 2/ fetch the path and field replacement values + # (full path and human readable field's name) + values = [] + for item in references: + ref_type, ref = item.split(':') + if ref_type == 'path': + values.append(res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context)) + elif ref_type == 'field': + values.append(res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context)) - # Treat the msg: find the menu_xml_id and the field_name - msg = re.sub(r'\[path:([a-z_\.]*)\]', sub_path, msg) - msg = re.sub(r'\[field:([a-z_\.]*)\]', sub_field, msg) + # 3/ replace the text references by the %s conversion symbol + msg = re.sub(r'\[((?:path|field):[a-z_\.]*)\]', '%s', msg, flags=re.I) - return exceptions.WarningConfig(msg) + # 4/ translate all the strings, substitute and return the result + return exceptions.WarningConfig(_(msg) % tuple(map(_, values))) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 8ab50cc0efbc52fd043e4252d32e845abfad00a7 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Mon, 21 Jan 2013 19:16:50 +0100 Subject: [PATCH 029/158] [WIP] remove a useless translation phase bzr revid: abo@openerp.com-20130121181650-md0t80lokegr5kx1 --- openerp/addons/base/res/res_config.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index 68f11d989c6..7f5dd7779e5 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -605,7 +605,7 @@ class res_config_settings(osv.osv_memory): def get_warning_config(cr, msg, context=None): res_config_obj = pooler.get_pool(cr.dbname).get('res.config.settings') - # Treat the msg + # Process the msg # 1/ find the path and field references, put them in a list references = re.findall(r'\[((?:path|field):[a-z_\.]*)\]', msg, flags=re.I) @@ -622,7 +622,7 @@ def get_warning_config(cr, msg, context=None): # 3/ replace the text references by the %s conversion symbol msg = re.sub(r'\[((?:path|field):[a-z_\.]*)\]', '%s', msg, flags=re.I) - # 4/ translate all the strings, substitute and return the result - return exceptions.WarningConfig(_(msg) % tuple(map(_, values))) + # 4/ substitute and return the result + return exceptions.WarningConfig(msg % tuple(values)) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 9419e59fefb9fce7450b95cb405623e8710a1d95 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Tue, 22 Jan 2013 15:31:56 +0100 Subject: [PATCH 030/158] [IMP] change the warning string's pattern to something more familiar to translators bzr revid: abo@openerp.com-20130122143156-ffp79tdg1ryvr5y2 --- openerp/addons/base/res/res_config.py | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index 7f5dd7779e5..9580121e98f 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -604,25 +604,23 @@ class res_config_settings(osv.osv_memory): def get_warning_config(cr, msg, context=None): res_config_obj = pooler.get_pool(cr.dbname).get('res.config.settings') + regex_path = r'%\(((?:path|field):[a-z_\.]*)\)s' - # Process the msg - # 1/ find the path and field references, put them in a list - references = re.findall(r'\[((?:path|field):[a-z_\.]*)\]', msg, flags=re.I) + # Process the message + # 1/ find the path and/or field references, put them in a list + references = re.findall(regex_path, msg, flags=re.I) - # 2/ fetch the path and field replacement values + # 2/ fetch the path and/or field replacement values # (full path and human readable field's name) - values = [] + values = {} for item in references: ref_type, ref = item.split(':') if ref_type == 'path': - values.append(res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context)) + values[item] = res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context) elif ref_type == 'field': - values.append(res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context)) - - # 3/ replace the text references by the %s conversion symbol - msg = re.sub(r'\[((?:path|field):[a-z_\.]*)\]', '%s', msg, flags=re.I) + values[item] = res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context) # 4/ substitute and return the result - return exceptions.WarningConfig(msg % tuple(values)) + return exceptions.WarningConfig(msg % values) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 5cb047aa75922c2560f18fdf0f973e63a5f6c731 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Tue, 22 Jan 2013 17:22:23 +0100 Subject: [PATCH 031/158] [IMP] add documentation also replace the %(path:)s by %(menu:)s (more cohesive) bzr revid: abo@openerp.com-20130122162223-no1wzf1gyxpdvzqk --- openerp/addons/base/res/res_config.py | 41 +++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index 9580121e98f..6ed28f88927 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -591,6 +591,15 @@ class res_config_settings(osv.osv_memory): return [(record.id, name) for record in self.browse(cr, uid , ids, context=context)] def get_option_path(self, cr, uid, menu_xml_id=None, context=None): + """ + Fetch the path to a specified configuration view. + + :param string menu_xml_id: the xml id of the menuitem where the view + is located, structured as follows: module_name.menuitem_xml_id + (e.g.: "base.menu_sale_config") + :return string: full path to the menuitem + (e.g.: "Settings/Configuration/Sales") + """ module_name, menu_xml_id = menu_xml_id.split('.') dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id) ir_ui_menu = self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context) @@ -598,13 +607,41 @@ class res_config_settings(osv.osv_memory): return ir_ui_menu.complete_name def get_option_name(self, cr, uid, full_field_name=None, context=None): + """ + Fetch the human readable name of a specified configuration option. + + :param string full_field_name: the full name of the field, structured + as follows: model_name.field_name + (e.g.: "sale.config.settings.fetchmail_lead") + :return string: human readable name of the field + (e.g.: "Create leads from incoming mails") + """ model_name, field_name = full_field_name.rsplit('.', 1) return self.pool.get(model_name)._all_columns.get(field_name).column.string def get_warning_config(cr, msg, context=None): + """ + Helper: return a WarningConfig exception with the given message where the + %(field:)s and/or %(menu:)s are replaced by the human readable field's name + and/or menuitem's full path. + + Usage: + ------ + Just include in your error message %(field:model_name.field_name)s to + obtain the human readable field's name, and/or + %(menu:module_name.menuitem_xml_id)s to obtain the menuitem's full path. + + Example of use: + --------------- + from openerp.addons.base.res.res_config import get_warning_config + raise get_warning_config(cr, _("Error: this action is prohibited. You should check the field %(field:sale.config.settings.fetchmail_lead)s in %(menu:base.menu_sale_config)s."), context=context) + will return an exception containing the following message: + Error: this action is prohibited. You should check the field Create leads from incoming mails in Settings/Configuration/Sales. + """ + res_config_obj = pooler.get_pool(cr.dbname).get('res.config.settings') - regex_path = r'%\(((?:path|field):[a-z_\.]*)\)s' + regex_path = r'%\(((?:menu|field):[a-z_\.]*)\)s' # Process the message # 1/ find the path and/or field references, put them in a list @@ -615,7 +652,7 @@ def get_warning_config(cr, msg, context=None): values = {} for item in references: ref_type, ref = item.split(':') - if ref_type == 'path': + if ref_type == 'menu': values[item] = res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context) elif ref_type == 'field': values[item] = res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context) From 0b65aa2231e6aac97b3aae844bddfacf9a338c8c Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Wed, 23 Jan 2013 16:22:34 +0100 Subject: [PATCH 032/158] [IMP] fix a comment's indentation, remove a few whitespaces bzr revid: abo@openerp.com-20130123152234-g2ou48xajxsq8sqj --- openerp/osv/orm.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 6056e405b78..8b10d7da168 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -2287,7 +2287,7 @@ class BaseModel(object): if view_type == 'tree' or not action[2].get('multi')] resprint = [clean(print_) for print_ in resprint if view_type == 'tree' or not print_[2].get('multi')] - #When multi="True" set it will display only in More of the list view + #When multi="True" set it will display only in More of the list view resrelate = [clean(action) for action in resrelate if (action[2].get('multi') and view_type == 'tree') or (not action[2].get('multi') and view_type == 'form')] @@ -2682,17 +2682,17 @@ class BaseModel(object): order = orderby or groupby data_ids = self.search(cr, uid, [('id', 'in', alldata.keys())], order=order, context=context) - + # the IDs of records that have groupby field value = False or '' should be included too data_ids += set(alldata.keys()).difference(data_ids) - - if groupby: + + if groupby: data = self.read(cr, uid, data_ids, [groupby], context=context) # restore order of the search as read() uses the default _order (this is only for groups, so the footprint of data should be small): data_dict = dict((d['id'], d[groupby] ) for d in data) result = [{'id': i, groupby: data_dict[i]} for i in data_ids] else: - result = [{'id': i} for i in data_ids] + result = [{'id': i} for i in data_ids] for d in result: if groupby: @@ -2756,7 +2756,7 @@ class BaseModel(object): return _logger.info('Computing parent left and right for table %s...', self._table) def browse_rec(root, pos=0): -# TODO: set order + # TODO: set order where = self._parent_name+'='+str(root) if not root: where = self._parent_name+' IS NULL' @@ -3867,7 +3867,7 @@ class BaseModel(object): if operation in ('read','unlink'): # No need to warn about deleting an already deleted record. # And no error when reading a record that was deleted, to prevent spurious - # errors for non-transactional search/read sequences coming from clients + # errors for non-transactional search/read sequences coming from clients return _logger.warning('Failed operation on deleted record(s): %s, uid: %s, model: %s', operation, uid, self._name) raise except_orm(_('Missing document(s)'), @@ -4355,12 +4355,12 @@ class BaseModel(object): del vals[self._inherits[table]] record_id = tocreate[table].pop('id', None) - + # When linking/creating parent records, force context without 'no_store_function' key that - # defers stored functions computing, as these won't be computed in batch at the end of create(). + # defers stored functions computing, as these won't be computed in batch at the end of create(). parent_context = dict(context) parent_context.pop('no_store_function', None) - + if record_id is None or not record_id: record_id = self.pool.get(table).create(cr, user, tocreate[table], context=parent_context) else: @@ -4409,7 +4409,7 @@ class BaseModel(object): upd0 = upd0 + ',"' + field + '"' upd1 = upd1 + ',' + self._columns[field]._symbol_set[0] upd2.append(self._columns[field]._symbol_set[1](vals[field])) - #for the function fields that receive a value, we set them directly in the database + #for the function fields that receive a value, we set them directly in the database #(they may be required), but we also need to trigger the _fct_inv() if (hasattr(self._columns[field], '_fnct_inv')) and not isinstance(self._columns[field], fields.related): #TODO: this way to special case the related fields is really creepy but it shouldn't be changed at From 11dbed0fb7f9d5720c7e9b49c0df0d3f2a19c339 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Wed, 23 Jan 2013 16:37:22 +0100 Subject: [PATCH 033/158] [IMP] only call ir.translation when necessary bzr revid: abo@openerp.com-20130123153722-iijbl8hvesstneq3 --- openerp/osv/orm.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 8b10d7da168..471f72a82ac 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -3504,7 +3504,6 @@ class BaseModel(object): res = {} - translation_obj = self.pool.get('ir.translation') for parent in self._inherits: res.update(self.pool.get(parent).fields_get(cr, user, allfields, context)) @@ -3520,6 +3519,8 @@ class BaseModel(object): res[f]['states'] = {} if 'lang' in context: + translation_obj = self.pool.get('ir.translation') + if 'string' in res[f]: res_trans = translation_obj._get_source(cr, user, self._name + ',' + f, 'field', context['lang']) if res_trans: From 28960472df20d10024f2c45596a116dd87d81643 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Wed, 23 Jan 2013 16:49:43 +0100 Subject: [PATCH 034/158] [IMP] use fields_get() instead of _all_columns.get(): this method has the advantage to provide translation support bzr revid: abo@openerp.com-20130123154943-2ux9vpts4pmvr7nq --- openerp/addons/base/res/res_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index 6ed28f88927..d2f2e8a265f 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -618,7 +618,7 @@ class res_config_settings(osv.osv_memory): """ model_name, field_name = full_field_name.rsplit('.', 1) - return self.pool.get(model_name)._all_columns.get(field_name).column.string + return self.pool.get(model_name).fields_get(cr, uid, allfields=[field_name], context=context)[field_name]['string'] def get_warning_config(cr, msg, context=None): """ From 59dc49061cf5e1520ef02df969e7c5bdf79a470b Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 24 Jan 2013 16:41:19 +0100 Subject: [PATCH 035/158] [IMP] we don't need a special type of exception anymore bzr revid: abo@openerp.com-20130124154119-5283u6x1it5xvt0r --- openerp/addons/base/res/res_config.py | 4 ++-- openerp/exceptions.py | 5 ----- openerp/netsvc.py | 2 -- openerp/service/netrpc_server.py | 2 -- openerp/service/wsgi_server.py | 3 --- 5 files changed, 2 insertions(+), 14 deletions(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index d2f2e8a265f..33615333447 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -622,7 +622,7 @@ class res_config_settings(osv.osv_memory): def get_warning_config(cr, msg, context=None): """ - Helper: return a WarningConfig exception with the given message where the + Helper: return a Warning exception with the given message where the %(field:)s and/or %(menu:)s are replaced by the human readable field's name and/or menuitem's full path. @@ -658,6 +658,6 @@ def get_warning_config(cr, msg, context=None): values[item] = res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context) # 4/ substitute and return the result - return exceptions.WarningConfig(msg % values) + return exceptions.Warning(msg % values) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/exceptions.py b/openerp/exceptions.py index c43f706fa61..fbf52c7f3a9 100644 --- a/openerp/exceptions.py +++ b/openerp/exceptions.py @@ -30,11 +30,6 @@ treated as a 'Server error'. class Warning(Exception): pass -class WarningConfig(Exception): - """ Warning bound to a misconfiguration. """ - def __init__(self, msg): - super(WarningConfig, self).__init__(msg) - class AccessDenied(Exception): """ Login/password error. No message, no traceback. """ def __init__(self): diff --git a/openerp/netsvc.py b/openerp/netsvc.py index 3362b86fac7..47ee4d81e20 100644 --- a/openerp/netsvc.py +++ b/openerp/netsvc.py @@ -306,8 +306,6 @@ def dispatch_rpc(service_name, method, params): raise except openerp.exceptions.Warning: raise - except openerp.exceptions.WarningConfig: - raise except openerp.exceptions.DeferredException, e: _logger.exception(tools.exception_to_unicode(e)) post_mortem(e.traceback) diff --git a/openerp/service/netrpc_server.py b/openerp/service/netrpc_server.py index f87274ef6e6..34bb30d8f75 100644 --- a/openerp/service/netrpc_server.py +++ b/openerp/service/netrpc_server.py @@ -170,8 +170,6 @@ def netrpc_handle_exception_legacy(e): return 'warning -- ' + e.name + '\n\n' + e.value if isinstance(e, openerp.exceptions.Warning): return 'warning -- Warning\n\n' + str(e) - if isinstance(e, openerp.exceptions.WarningConfig): - return 'warning -- Warning\n\n' + str(e) if isinstance(e, openerp.exceptions.AccessError): return 'warning -- AccessError\n\n' + str(e) if isinstance(e, openerp.exceptions.AccessDenied): diff --git a/openerp/service/wsgi_server.py b/openerp/service/wsgi_server.py index 0b1cff68114..5da34e2e48a 100644 --- a/openerp/service/wsgi_server.py +++ b/openerp/service/wsgi_server.py @@ -95,9 +95,6 @@ def xmlrpc_handle_exception(e): response = xmlrpclib.dumps(fault, allow_none=False, encoding=None) elif isinstance(e, openerp.exceptions.Warning): fault = xmlrpclib.Fault(RPC_FAULT_CODE_WARNING, str(e)) - elif isinstance(e, openerp.exceptions.WarningConfig): - fault = xmlrpclib.Fault(RPC_FAULT_CODE_WARNING, str(e)) - response = xmlrpclib.dumps(fault, allow_none=False, encoding=None) elif isinstance (e, openerp.exceptions.AccessError): fault = xmlrpclib.Fault(RPC_FAULT_CODE_ACCESS_ERROR, str(e)) response = xmlrpclib.dumps(fault, allow_none=False, encoding=None) From 75ce079a814f8795d43171965a842aa19a51b2f3 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 24 Jan 2013 16:41:19 +0100 Subject: [PATCH 036/158] [IMP] we don't need a special type of exception anymore bzr revid: abo@openerp.com-20130124154119-flmuzwunpi72c02i --- addons/web/session.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/addons/web/session.py b/addons/web/session.py index a2719482a2c..30e9308d4e1 100644 --- a/addons/web/session.py +++ b/addons/web/session.py @@ -92,8 +92,6 @@ class OpenERPSession(object): raise xmlrpclib.Fault(code_string % (e.name, e.value), '') except openerp.exceptions.Warning, e: raise xmlrpclib.Fault(code_string % ("Warning", e), '') - except openerp.exceptions.WarningConfig, e: - raise xmlrpclib.Fault(code_string % ("Warning", e), '') except openerp.exceptions.AccessError, e: raise xmlrpclib.Fault(code_string % ("AccessError", e), '') except openerp.exceptions.AccessDenied, e: From 7d7fe62ca8147a8d6ebd323034a64d7cc076a0c8 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Fri, 25 Jan 2013 16:49:41 +0100 Subject: [PATCH 037/158] [IMP] procurement: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130125154941-8jbzke0diaqhf5j3 --- addons/procurement/schedulers.py | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py index 3cb34d6bdff..76b31cc6da3 100644 --- a/addons/procurement/schedulers.py +++ b/addons/procurement/schedulers.py @@ -62,8 +62,7 @@ class procurement_order(osv.osv): procurement_obj = self.pool.get('procurement.order') if not ids: ids = procurement_obj.search(cr, uid, [('state', '=', 'exception')], order="date_planned") - for id in ids: - wf_service.trg_validate(uid, 'procurement.order', id, 'button_restart', cr) + self.signal_button_restart(cr, uid, ids) if use_new_cursor: cr.commit() company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id @@ -78,7 +77,7 @@ class procurement_order(osv.osv): ids = procurement_obj.search(cr, uid, [('state', '=', 'confirmed'), ('procure_method', '=', 'make_to_order')], offset=offset, limit=500, order='priority, date_planned', context=context) for proc in procurement_obj.browse(cr, uid, ids, context=context): if maxdate >= proc.date_planned: - wf_service.trg_validate(uid, 'procurement.order', proc.id, 'button_check', cr) + self.signal_button_check(cr, uid, [proc.id]) else: offset += 1 report_later += 1 @@ -100,7 +99,7 @@ class procurement_order(osv.osv): ids = procurement_obj.search(cr, uid, [('state', '=', 'confirmed'), ('procure_method', '=', 'make_to_stock')], offset=offset) for proc in procurement_obj.browse(cr, uid, ids): if maxdate >= proc.date_planned: - wf_service.trg_validate(uid, 'procurement.order', proc.id, 'button_check', cr) + self.signal_button_check(cr, uid, [proc.id]) report_ids.append(proc.id) else: report_later += 1 @@ -178,8 +177,8 @@ class procurement_order(osv.osv): proc_id = proc_obj.create(cr, uid, self._prepare_automatic_op_procurement(cr, uid, product, warehouse, location_id, context=context), context=context) - wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr) - wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_check', cr) + self.signal_button_confirm(cr, uid, [proc_id]) + self.signal_button_check(cr, uid, [proc_id]) return True def _get_orderpoint_date_planned(self, cr, uid, orderpoint, start_date, context=None): @@ -254,7 +253,7 @@ class procurement_order(osv.osv): to_generate = qty for proc_data in procure_datas: if to_generate >= proc_data['product_qty']: - wf_service.trg_validate(uid, 'procurement.order', proc_data['id'], 'button_confirm', cr) + self.signal_button_confirm(cr, uid, [proc_data['id']]) procurement_obj.write(cr, uid, [proc_data['id']], {'origin': op.name}, context=context) to_generate -= proc_data['product_qty'] if not to_generate: @@ -265,10 +264,8 @@ class procurement_order(osv.osv): proc_id = procurement_obj.create(cr, uid, self._prepare_orderpoint_procurement(cr, uid, op, qty, context=context), context=context) - wf_service.trg_validate(uid, 'procurement.order', proc_id, - 'button_confirm', cr) - wf_service.trg_validate(uid, 'procurement.order', proc_id, - 'button_check', cr) + self.signal_button_confirm(cr, uid, [proc_id]) + self.signal_button_check(cr, uid, [proc_id]) orderpoint_obj.write(cr, uid, [op.id], {'procurement_id': proc_id}, context=context) offset += len(ids) @@ -279,6 +276,4 @@ class procurement_order(osv.osv): cr.close() return {} -procurement_order() - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 8eb9987b0ea3d437596473c98c71958dd4a697c8 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Fri, 25 Jan 2013 16:50:56 +0100 Subject: [PATCH 038/158] [DOC] Started workflow (technical) documentation. bzr revid: vmt@openerp.com-20130125155056-9b1nizd4yfsfnd6a --- doc/workflows.rst | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 doc/workflows.rst diff --git a/doc/workflows.rst b/doc/workflows.rst new file mode 100644 index 00000000000..61a58575c9b --- /dev/null +++ b/doc/workflows.rst @@ -0,0 +1,13 @@ +.. _workflows: + +Workflows +========= + +- Low-level workflow functions (i.e. the openerp.workflow "service"). + Useful when looking-up a model and its records is not necessary, i.e. when + working with raw model name and record ids is preferred (less hit to the + database). Cannot really be used as it would bypass the ORM methods. +- Model-level (ORM) methods. +- XML-RPC endpoint and methods. + +- Blah Model.signal_xxxx() From ad7d846106af54a631485388623e8a6f69b38d45 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Fri, 25 Jan 2013 16:51:32 +0100 Subject: [PATCH 039/158] [IMP] orm: expose a signal_xxx() method to call workflow.trg_validate(). bzr revid: vmt@openerp.com-20130125155132-nhyntobe5xm1g7h0 --- openerp/osv/orm.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 6056e405b78..0ffabcf0e19 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -5251,6 +5251,20 @@ class BaseModel(object): """ stuff to do right after the registry is built """ pass + def __getattr__(self, name): + if name.startswith('signal_'): + signal_name = name[len('signal_'):] + assert signal_name + def handle_workflow_signal(cr, uid, ids): + workflow_service = netsvc.LocalService("workflow") + res = {} + for id in ids: + # TODO consolidate trg_validate() and the functions it calls to work on a list of IDs. + res[id] = workflow_service.trg_validate(uid, self._name, id, signal_name, cr) + return res + return handle_workflow_signal + raise AttributeError + # keep this import here, at top it will cause dependency cycle errors import expression From 200d008fc4c4409d5f8c898d31f9afdaf7275cdd Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Fri, 25 Jan 2013 17:53:14 +0100 Subject: [PATCH 040/158] [FIX] orm: call super in __getattr__. bzr revid: vmt@openerp.com-20130125165314-66j55mtobvt61c7r --- openerp/osv/orm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 0ffabcf0e19..d3c11118116 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -5263,7 +5263,7 @@ class BaseModel(object): res[id] = workflow_service.trg_validate(uid, self._name, id, signal_name, cr) return res return handle_workflow_signal - raise AttributeError + return super(BaseModel, self).__getattr__(name) # keep this import here, at top it will cause dependency cycle errors import expression From a2679597a0f3f3eaf6277e030ca2a9b44763f873 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Fri, 25 Jan 2013 17:53:55 +0100 Subject: [PATCH 041/158] [IMP] purchase: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130125165355-78o1utblskn0sa5e --- addons/purchase/purchase.py | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 799601acb64..bf3686d5a34 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -22,6 +22,7 @@ import time from datetime import datetime from dateutil.relativedelta import relativedelta +from operator import attrgetter from openerp.osv import fields, osv from openerp import netsvc @@ -260,9 +261,7 @@ class purchase_order(osv.osv): raise osv.except_osv(_('Invalid Action!'), _('In order to delete a purchase order, you must cancel it first.')) # automatically sending subflow.delete upon deletion - wf_service = netsvc.LocalService("workflow") - for id in unlink_ids: - wf_service.trg_validate(uid, 'purchase.order', id, 'purchase_cancel', cr) + self.signal_purchase_cancel(cr, uid, unlink_ids) return super(purchase_order, self).unlink(cr, uid, unlink_ids, context=context) @@ -439,8 +438,7 @@ class purchase_order(osv.osv): This function prints the request for quotation and mark it as sent, so that we can see more easily the next step of the workflow ''' assert len(ids) == 1, 'This option should only be used for a single id at a time' - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'purchase.order', ids[0], 'send_rfq', cr) + self.signal_send_rfq(cr, uid, ids) datas = { 'model': 'purchase.order', 'ids': ids, @@ -571,26 +569,24 @@ class purchase_order(osv.osv): return False def action_cancel(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") for purchase in self.browse(cr, uid, ids, context=context): for pick in purchase.picking_ids: if pick.state not in ('draft','cancel'): raise osv.except_osv( _('Unable to cancel this purchase order.'), _('First cancel all receptions related to this purchase order.')) - for pick in purchase.picking_ids: - wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_cancel', cr) + self.pool.get('stock.picking') \ + .signal_button_cancel(cr, uid, map(attrgetter('id'), purchase.picking_ids)) for inv in purchase.invoice_ids: if inv and inv.state not in ('cancel','draft'): raise osv.except_osv( _('Unable to cancel this purchase order.'), _('You must first cancel all receptions related to this purchase order.')) - if inv: - wf_service.trg_validate(uid, 'account.invoice', inv.id, 'invoice_cancel', cr) + self.pool.get('account.invoice') \ + .signal_invoice_cancel(cr, uid, map(attrgetter('id'), purchase.invoice_ids)) self.write(cr,uid,ids,{'state':'cancel'}) - for (id, name) in self.name_get(cr, uid, ids): - wf_service.trg_validate(uid, 'purchase.order', id, 'purchase_cancel', cr) + self.signal_purchase_cancel(cr, uid, ids) return True def _prepare_order_picking(self, cr, uid, order, context=None): @@ -648,11 +644,11 @@ class purchase_order(osv.osv): will be added. A new picking will be created if omitted. :return: list of IDs of pickings used/created for the given order lines (usually just one) """ + stock_picking = self.pool.get('stock.picking') if not picking_id: - picking_id = self.pool.get('stock.picking').create(cr, uid, self._prepare_order_picking(cr, uid, order, context=context)) + picking_id = stock_picking.create(cr, uid, self._prepare_order_picking(cr, uid, order, context=context)) todo_moves = [] stock_move = self.pool.get('stock.move') - wf_service = netsvc.LocalService("workflow") for order_line in order_lines: if not order_line.product_id: continue @@ -663,7 +659,7 @@ class purchase_order(osv.osv): todo_moves.append(move) stock_move.action_confirm(cr, uid, todo_moves) stock_move.force_assign(cr, uid, todo_moves) - wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr) + stock_picking.signal_button_confirm(cr, uid, [picking_id]) return [picking_id] def action_picking_create(self, cr, uid, ids, context=None): @@ -714,7 +710,6 @@ class purchase_order(osv.osv): """ #TOFIX: merged order line should be unlink - wf_service = netsvc.LocalService("workflow") def make_key(br, fields): list_key = [] for field in fields: @@ -782,6 +777,7 @@ class purchase_order(osv.osv): allorders = [] orders_info = {} + wf_service = netsvc.LocalService("workflow") for order_key, (order_data, old_ids) in new_orders.iteritems(): # skip merges with only one order if len(old_ids) < 2: @@ -802,7 +798,7 @@ class purchase_order(osv.osv): # make triggers pointing to the old orders point to the new order for old_id in old_ids: wf_service.trg_redirect(uid, 'purchase.order', old_id, neworder_id, cr) - wf_service.trg_validate(uid, 'purchase.order', old_id, 'purchase_cancel', cr) + self.signal_purchase_cancel(cr, uid, [old_id]) # TODO Is it necessary to interleave the calls? return orders_info @@ -1169,8 +1165,7 @@ class mail_mail(osv.Model): def _postprocess_sent_message(self, cr, uid, mail, context=None): if mail.model == 'purchase.order': - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'purchase.order', mail.res_id, 'send_rfq', cr) + self.pool.get('purchase.order').signal_send_rfq(cr, uid, [mail.res_id]) return super(mail_mail, self)._postprocess_sent_message(cr, uid, mail=mail, context=context) @@ -1192,8 +1187,7 @@ class mail_compose_message(osv.Model): context = context or {} if context.get('default_model') == 'purchase.order' and context.get('default_res_id'): context = dict(context, mail_post_autofollow=True) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'purchase.order', context['default_res_id'], 'send_rfq', cr) + self.pool.get('purchase.order').signal_send_rfq(cr, uid, [context['default_res_id']]) return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 11632909ae3e6952d4f26469077819ad57134985 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Fri, 25 Jan 2013 22:17:51 +0100 Subject: [PATCH 042/158] [FIX] lunch: passing self in a super call. bzr revid: vmt@openerp.com-20130125211751-725w3trha283ypa2 --- addons/lunch/lunch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/lunch/lunch.py b/addons/lunch/lunch.py index 0f9033fce38..022eb5208eb 100644 --- a/addons/lunch/lunch.py +++ b/addons/lunch/lunch.py @@ -159,7 +159,7 @@ class lunch_order(osv.Model): def specific_function(cr, uid, ids, context=None): return self.add_preference(cr, uid, ids, pref_id, context=context) return specific_function - return super(lunch_order,self).__getattr__(self,attr) + return super(lunch_order, self).__getattr__(attr) def fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False): """ From 494b2481e2ce798364eb1548b1e57d9e1e9c2d39 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 10:17:16 +0100 Subject: [PATCH 043/158] [IMP] purchase: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128091716-ni5zb1qp4sib58rm --- addons/purchase/test/process/rfq2order2done.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/purchase/test/process/rfq2order2done.yml b/addons/purchase/test/process/rfq2order2done.yml index 4bf55d61973..be68a8ca01e 100644 --- a/addons/purchase/test/process/rfq2order2done.yml +++ b/addons/purchase/test/process/rfq2order2done.yml @@ -62,8 +62,7 @@ import netsvc invoice_ids = [x.id for x in self.browse(cr, uid, ref("purchase_order_1")).invoice_ids] wf_service = netsvc.LocalService("workflow") - for invoice in invoice_ids: - wf_service.trg_validate(uid, 'account.invoice', invoice, 'invoice_open', cr) + self.pool.get('account.invoice').signal_invoice_open(cr, uid, invoice_ids) - I check that purchase order is invoiced. - From 86680d853b12bd4564ab7d0792eae7534bdbbd9f Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 10:29:30 +0100 Subject: [PATCH 044/158] [IMP] account_payment: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128092930-6lhgyprwirpt6y3z --- addons/account_payment/account_payment.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/account_payment/account_payment.py b/addons/account_payment/account_payment.py index d67db60e590..c57c83aa765 100644 --- a/addons/account_payment/account_payment.py +++ b/addons/account_payment/account_payment.py @@ -135,9 +135,8 @@ class payment_order(osv.osv): return True def set_done(self, cr, uid, ids, *args): - wf_service = netsvc.LocalService("workflow") self.write(cr, uid, ids, {'date_done': time.strftime('%Y-%m-%d')}) - wf_service.trg_validate(uid, 'payment.order', ids[0], 'done', cr) + self.signal_done(cr, uid, [ids[0]]) return True def copy(self, cr, uid, id, default=None, context=None): From f6fd7368a283439f3d7ca8110acd49066dcac18b Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 11:00:38 +0100 Subject: [PATCH 045/158] [IMP] procurement: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128100038-6dyftmdm8tfn6j5k --- addons/procurement/procurement.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py index 50efe0f500e..21c260b99cd 100644 --- a/addons/procurement/procurement.py +++ b/addons/procurement/procurement.py @@ -19,10 +19,12 @@ # ############################################################################## +from operator import attrgetter +import time + from openerp.osv import fields, osv from openerp.tools.translate import _ from openerp import netsvc -import time import openerp.addons.decimal_precision as dp # Procurement @@ -42,7 +44,6 @@ class mrp_property_group(osv.osv): 'name': fields.char('Property Group', size=64, required=True), 'description': fields.text('Description'), } -mrp_property_group() class mrp_property(osv.osv): """ @@ -59,7 +60,6 @@ class mrp_property(osv.osv): _defaults = { 'composition': lambda *a: 'min', } -mrp_property() class StockMove(osv.osv): _inherit = 'stock.move' @@ -72,7 +72,6 @@ class StockMove(osv.osv): default['procurements'] = [] return super(StockMove, self).copy(cr, uid, id, default, context=context) -StockMove() class procurement_order(osv.osv): """ @@ -456,15 +455,13 @@ class procurement_order(osv.osv): class StockPicking(osv.osv): _inherit = 'stock.picking' - def test_finished(self, cursor, user, ids): + def test_finished(self, cr, uid, ids): wf_service = netsvc.LocalService("workflow") - res = super(StockPicking, self).test_finished(cursor, user, ids) - for picking in self.browse(cursor, user, ids): + res = super(StockPicking, self).test_finished(cr, uid, ids) + for picking in self.browse(cr, uid, ids): for move in picking.move_lines: if move.state == 'done' and move.procurements: - for procurement in move.procurements: - wf_service.trg_validate(user, 'procurement.order', - procurement.id, 'button_check', cursor) + self.pool.get('procurement.order').signal_button_check(cr, uid, map(attrgetter('id'), move.procurements)) return res class stock_warehouse_orderpoint(osv.osv): From 99664df35a52019dab329b993801ee1642b0704b Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 12:39:54 +0100 Subject: [PATCH 046/158] [IMP] stock_location: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128113954-i60z7w4mygprra40 --- addons/stock_location/procurement_pull.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/addons/stock_location/procurement_pull.py b/addons/stock_location/procurement_pull.py index eb5235d35ba..9f5dfb77375 100644 --- a/addons/stock_location/procurement_pull.py +++ b/addons/stock_location/procurement_pull.py @@ -49,7 +49,6 @@ class procurement_order(osv.osv): proc_obj = self.pool.get('procurement.order') move_obj = self.pool.get('stock.move') picking_obj=self.pool.get('stock.picking') - wf_service = netsvc.LocalService("workflow") for proc in proc_obj.browse(cr, uid, ids, context=context): line = None for line in proc.product_id.flow_pull_ids: @@ -109,9 +108,8 @@ class procurement_order(osv.osv): 'procure_method': line.procure_method, 'move_id': move_id, }) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr) - wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr) + self.pool.get('stock.picking').signal_button_confirm(cr, uid, [picking_id]) + self.signal_button_confirm(cr, uid, [proc_id]) if proc.move_id: move_obj.write(cr, uid, [proc.move_id.id], {'location_id':proc.location_id.id}) @@ -119,9 +117,8 @@ class procurement_order(osv.osv): self.write(cr, uid, [proc.id], {'state':'running', 'message': msg}) self.message_post(cr, uid, [proc.id], body=msg, context=context) # trigger direct processing (the new procurement shares the same planned date as the original one, which is already being processed) - wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_check', cr) + self.signal_button_check(cr, uid, [proc_id]) # TODO is it necessary to interleave the calls? return False -procurement_order() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 781e6737acc114b7a76d711aa7e31ba78dd401b3 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 13:01:47 +0100 Subject: [PATCH 047/158] [IMP] account_followup: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128120147-oj7pvl2015x4764v --- addons/account_followup/tests/test_account_followup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/account_followup/tests/test_account_followup.py b/addons/account_followup/tests/test_account_followup.py index 14f458de98d..8ddf3f82288 100644 --- a/addons/account_followup/tests/test_account_followup.py +++ b/addons/account_followup/tests/test_account_followup.py @@ -44,8 +44,7 @@ class TestAccountFollowup(TransactionCase): 'quantity': 5, 'price_unit':200 })]}) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.invoice', self.invoice_id, 'invoice_open', cr) + self.registry('account.invoice').signal_invoice_open(cr, uid, [self.invoice_id]) self.voucher = self.registry("account.voucher") From 8d50446d278643bf645107744a6ba12108c9eea1 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 15:16:23 +0100 Subject: [PATCH 048/158] [IMP] hr_holidays: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128141623-4rxcgqx7t33yydbp --- addons/hr_holidays/hr_holidays.py | 21 +++++++++------------ addons/hr_holidays/test/test_hr_holiday.yml | 3 +-- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index c7d7867911d..234897809e1 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -24,7 +24,7 @@ import datetime import time from itertools import groupby -from operator import itemgetter +from operator import attrgetter, itemgetter import math from openerp import netsvc @@ -370,11 +370,11 @@ class hr_holidays(osv.osv): 'employee_id': emp.id } leave_ids.append(self.create(cr, uid, vals, context=None)) - wf_service = netsvc.LocalService("workflow") for leave_id in leave_ids: - wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'confirm', cr) - wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'validate', cr) - wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'second_validate', cr) + # TODO is it necessary to interleave the calls? + self.signal_confirm(cr, uid, [leave_id]) + self.signal_validate(cr, uid, [leave_id]) + self.signal_second_validate(cr, uid, [leave_id]) return True def holidays_confirm(self, cr, uid, ids, context=None): @@ -404,9 +404,7 @@ class hr_holidays(osv.osv): meeting_obj.unlink(cr, uid, [record.meeting_id.id]) # If a category that created several holidays, cancel all related - wf_service = netsvc.LocalService("workflow") - for request in record.linked_request_ids or []: - wf_service.trg_validate(uid, 'hr.holidays', request.id, 'refuse', cr) + self.signal_refuse(cr, uid, map(attrgetter('id'), record.linked_request_ids or [])) self._remove_resource_leave(cr, uid, ids, context=context) return True @@ -478,10 +476,9 @@ class hr_employee(osv.osv): leave_id = holiday_obj.create(cr, uid, {'name': _('Leave Request for %s') % employee.name, 'employee_id': employee.id, 'holiday_status_id': status_id, 'type': 'remove', 'holiday_type': 'employee', 'number_of_days_temp': abs(diff)}, context=context) else: return False - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'confirm', cr) - wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'validate', cr) - wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'second_validate', cr) + holidays_obj.signal_confirm(cr, uid, [leave_id]) + holidays_obj.signal_validate(cr, uid, [leave_id]) + holidays_obj.signal_second_validate(cr, uid, [leave_id]) return True def _get_remaining_days(self, cr, uid, ids, name, args, context=None): diff --git a/addons/hr_holidays/test/test_hr_holiday.yml b/addons/hr_holidays/test/test_hr_holiday.yml index f0e85d552cb..e78c2fd08bc 100644 --- a/addons/hr_holidays/test/test_hr_holiday.yml +++ b/addons/hr_holidays/test/test_hr_holiday.yml @@ -19,9 +19,8 @@ - !python {model: hr.holidays}: | import netsvc - wf_service = netsvc.LocalService("workflow") self.set_to_draft(cr, uid, [ref('hr_holidays_employee1_cl')]) - wf_service.trg_validate(uid, 'hr.holidays', ref('hr_holidays_employee1_cl'), 'confirm', cr) + self.signal_confirm(cr, uid, [ref('hr_holidays_employee1_cl')]) - I validate the holiday request by clicking on "To Approve" button. - From ca919bec2c979a70e615f5023b6241b36b2c0ba1 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 15:51:43 +0100 Subject: [PATCH 049/158] [IMP] account_voucher: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128145143-w68s6z1kuulqk6ig --- addons/account_voucher/account_voucher.py | 8 ++------ addons/account_voucher/test/case1_usd_usd.yml | 8 ++------ addons/account_voucher/test/case2_suppl_usd_eur.yml | 8 ++------ .../account_voucher/test/case2_usd_eur_debtor_in_eur.yml | 6 ++---- .../account_voucher/test/case2_usd_eur_debtor_in_usd.yml | 8 ++------ addons/account_voucher/test/case3_eur_eur.yml | 8 ++------ addons/account_voucher/test/case4_cad_chf.yml | 3 +-- addons/account_voucher/test/sales_payment.yml | 3 +-- addons/account_voucher/test/sales_receipt.yml | 3 +-- 9 files changed, 15 insertions(+), 40 deletions(-) diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index de9cebdd09b..2046d787ef3 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -820,10 +820,7 @@ class account_voucher(osv.osv): return vals def button_proforma_voucher(self, cr, uid, ids, context=None): - context = context or {} - wf_service = netsvc.LocalService("workflow") - for vid in ids: - wf_service.trg_validate(uid, 'account.voucher', vid, 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, ids) return {'type': 'ir.actions.act_window_close'} def proforma_voucher(self, cr, uid, ids, context=None): @@ -1506,7 +1503,6 @@ class account_bank_statement(osv.osv): def create_move_from_st_line(self, cr, uid, st_line_id, company_currency_id, next_number, context=None): voucher_obj = self.pool.get('account.voucher') - wf_service = netsvc.LocalService("workflow") move_line_obj = self.pool.get('account.move.line') bank_st_line_obj = self.pool.get('account.bank.statement.line') st_line = bank_st_line_obj.browse(cr, uid, st_line_id, context=context) @@ -1514,7 +1510,7 @@ class account_bank_statement(osv.osv): voucher_obj.write(cr, uid, [st_line.voucher_id.id], {'number': next_number}, context=context) if st_line.voucher_id.state == 'cancel': voucher_obj.action_cancel_draft(cr, uid, [st_line.voucher_id.id], context=context) - wf_service.trg_validate(uid, 'account.voucher', st_line.voucher_id.id, 'proforma_voucher', cr) + voucher_obj.signal_proforma_voucher(cr, uid, [st_line.voucher_id.id]) v = voucher_obj.browse(cr, uid, st_line.voucher_id.id, context=context) bank_st_line_obj.write(cr, uid, [st_line_id], { diff --git a/addons/account_voucher/test/case1_usd_usd.yml b/addons/account_voucher/test/case1_usd_usd.yml index 0f4c2058fc7..fd1945691ba 100644 --- a/addons/account_voucher/test/case1_usd_usd.yml +++ b/addons/account_voucher/test/case1_usd_usd.yml @@ -182,10 +182,8 @@ I confirm the voucher - !python {model: account.voucher}: | - import netsvc voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 1 USD/USD'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that the move of my first voucher is valid - @@ -279,10 +277,8 @@ I confirm the voucher - !python {model: account.voucher}: | - import netsvc voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 1'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that the move of my second voucher is valid - diff --git a/addons/account_voucher/test/case2_suppl_usd_eur.yml b/addons/account_voucher/test/case2_suppl_usd_eur.yml index b32228032d3..91fb99f6360 100644 --- a/addons/account_voucher/test/case2_suppl_usd_eur.yml +++ b/addons/account_voucher/test/case2_suppl_usd_eur.yml @@ -161,10 +161,8 @@ I confirm the voucher - !python {model: account.voucher}: | - import netsvc voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that the move of my voucher is valid - @@ -266,10 +264,8 @@ I confirm the voucher - !python {model: account.voucher}: | - import netsvc voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that my voucher state is posted - diff --git a/addons/account_voucher/test/case2_usd_eur_debtor_in_eur.yml b/addons/account_voucher/test/case2_usd_eur_debtor_in_eur.yml index 275e4c58835..2afdc8ad31b 100644 --- a/addons/account_voucher/test/case2_usd_eur_debtor_in_eur.yml +++ b/addons/account_voucher/test/case2_usd_eur_debtor_in_eur.yml @@ -181,8 +181,7 @@ !python {model: account.voucher}: | import netsvc voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 USD/EUR DR EUR'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that the move of my voucher is valid - @@ -256,8 +255,7 @@ !python {model: account.voucher}: | import netsvc voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR DR EUR'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that my voucher state is posted - diff --git a/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml b/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml index 667882e3a32..b049fc7692e 100644 --- a/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml +++ b/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml @@ -179,10 +179,8 @@ I confirm the voucher - !python {model: account.voucher}: | - import netsvc voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 USD/EUR DR USD'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that the move of my voucher is valid - @@ -269,10 +267,8 @@ I confirm the voucher - !python {model: account.voucher}: | - import netsvc voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR DR USD'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that my voucher state is posted - diff --git a/addons/account_voucher/test/case3_eur_eur.yml b/addons/account_voucher/test/case3_eur_eur.yml index f2f9461c31e..d0b18a5231b 100644 --- a/addons/account_voucher/test/case3_eur_eur.yml +++ b/addons/account_voucher/test/case3_eur_eur.yml @@ -141,10 +141,8 @@ I confirm the voucher - !python {model: account.voucher}: | - import netsvc voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 3'),('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that the move of my first voucher is valid - @@ -231,10 +229,8 @@ I confirm the voucher - !python {model: account.voucher}: | - import netsvc voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 3'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that the move of my second voucher is valid - diff --git a/addons/account_voucher/test/case4_cad_chf.yml b/addons/account_voucher/test/case4_cad_chf.yml index bc33e387a85..e8fe4c8cf9b 100644 --- a/addons/account_voucher/test/case4_cad_chf.yml +++ b/addons/account_voucher/test/case4_cad_chf.yml @@ -143,8 +143,7 @@ !python {model: account.voucher}: | import netsvc voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 4'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that the move of my voucher is valid - diff --git a/addons/account_voucher/test/sales_payment.yml b/addons/account_voucher/test/sales_payment.yml index b71e42add0b..e7ed61c2cb2 100644 --- a/addons/account_voucher/test/sales_payment.yml +++ b/addons/account_voucher/test/sales_payment.yml @@ -61,8 +61,7 @@ id = self.create(cr, uid, vals) voucher_id = self.browse(cr, uid, id) assert (voucher_id.state=='draft'), "Voucher is not in draft state" - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher_id.id, 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, [voucher_id.id]) - Finally i will Confirm the state of the invoice is paid diff --git a/addons/account_voucher/test/sales_receipt.yml b/addons/account_voucher/test/sales_receipt.yml index cf4bc5c46d3..af10777d98a 100644 --- a/addons/account_voucher/test/sales_receipt.yml +++ b/addons/account_voucher/test/sales_receipt.yml @@ -65,8 +65,7 @@ id = self.create(cr, uid, vals) voucher_id = self.browse(cr, uid, id) assert (voucher_id.state=='draft'), "Voucher is not in draft state" - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher_id.id, 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, [voucher_id.id]) - I check that move lines are reconciled meaning voucher is paid - From 752649aa77a350b60e9cad39436f7c90b2b34652 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 16:29:16 +0100 Subject: [PATCH 050/158] [IMP] l10n_in_hr_payroll: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128152916-kt23l68420hkg49y --- addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py index 76fc1247de6..da98bbe681a 100644 --- a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py +++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py @@ -198,8 +198,9 @@ class hr_payslip_run(osv.osv): advice_id = advice_pool.create(cr, uid, advice_data, context=context) slip_ids = [] for slip_id in run.slip_ids: - wf_service.trg_validate(uid, 'hr.payslip', slip_id.id, 'hr_verify_sheet', cr) - wf_service.trg_validate(uid, 'hr.payslip', slip_id.id, 'process_sheet', cr) + # TODO is it necessary to interleave the calls ? + payslip_pool.signal_hr_verify_sheet(cr, uid, [slip_id.id]) + payslip_pool.signal_process_sheet(cr, uid, [slip_id.id]) slip_ids.append(slip_id.id) for slip in payslip_pool.browse(cr, uid, slip_ids, context=context): From 48a371d2b2b31544ed39b567b90c87a2da4ba9d1 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 16:29:29 +0100 Subject: [PATCH 051/158] [IMP] stock: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128152929-6rpoaccy5huw8kdq --- addons/stock/stock.py | 22 ++++++++------------- addons/stock/wizard/stock_return_picking.py | 3 +-- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 7198c89e286..2d351d9302e 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -759,10 +759,9 @@ class stock_picking(osv.osv): """ Changes state of picking to available if all moves are confirmed. @return: True """ - wf_service = netsvc.LocalService("workflow") for pick in self.browse(cr, uid, ids): if pick.state == 'draft': - wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_confirm', cr) + self.signal_button_confirm(cr, uid, [pick.id]) move_ids = [x.id for x in pick.move_lines if x.state == 'confirmed'] if not move_ids: raise osv.except_osv(_('Warning!'),_('Not enough stock, unable to reserve the products.')) @@ -784,12 +783,10 @@ class stock_picking(osv.osv): """ Confirms picking directly from draft state. @return: True """ - wf_service = netsvc.LocalService("workflow") for pick in self.browse(cr, uid, ids): if not pick.move_lines: raise osv.except_osv(_('Error!'),_('You cannot process picking without stock moves.')) - wf_service.trg_validate(uid, 'stock.picking', pick.id, - 'button_confirm', cr) + self.signal_button_confirm(cr, uid, [pick.id]) return True def draft_validate(self, cr, uid, ids, context=None): @@ -1345,18 +1342,18 @@ class stock_picking(osv.osv): # At first we confirm the new picking (if necessary) if new_picking: - wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr) + self.signal_button_confirm(cr, uid, [new_picking]) # Then we finish the good picking self.write(cr, uid, [pick.id], {'backorder_id': new_picking}) self.action_move(cr, uid, [new_picking], context=context) - wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_done', cr) + self.signal_button_done(cr, uid, [new_picking]) wf_service.trg_write(uid, 'stock.picking', pick.id, cr) delivered_pack_id = new_picking back_order_name = self.browse(cr, uid, delivered_pack_id, context=context).name self.message_post(cr, uid, ids, body=_("Back order %s has been created.") % (back_order_name), context=context) else: self.action_move(cr, uid, [pick.id], context=context) - wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_done', cr) + self.signal_button_done(cr, uid, [pick.id]) delivered_pack_id = pick.id delivered_pack = self.browse(cr, uid, delivered_pack_id, context=context) @@ -2037,7 +2034,6 @@ class stock_move(osv.osv): res_obj = self.pool.get('res.company') location_obj = self.pool.get('stock.location') move_obj = self.pool.get('stock.move') - wf_service = netsvc.LocalService("workflow") new_moves = [] if context is None: context = {} @@ -2073,7 +2069,7 @@ class stock_move(osv.osv): }) new_moves.append(self.browse(cr, uid, [new_id])[0]) if pickid: - wf_service.trg_validate(uid, 'stock.picking', pickid, 'button_confirm', cr) + self.signal_button_confirm(cr, uid, [pickid]) if new_moves: new_moves += self.create_chained_picking(cr, uid, new_moves, context) return new_moves @@ -2195,6 +2191,7 @@ class stock_move(osv.osv): return True if context is None: context = {} + wf_service = netsvc.LocalService("workflow") pickings = set() for move in self.browse(cr, uid, ids, context=context): if move.state in ('confirmed', 'waiting', 'assigned', 'draft'): @@ -2203,7 +2200,6 @@ class stock_move(osv.osv): if move.move_dest_id and move.move_dest_id.state == 'waiting': self.write(cr, uid, [move.move_dest_id.id], {'state': 'assigned'}) if context.get('call_unlink',False) and move.move_dest_id.picking_id: - wf_service = netsvc.LocalService("workflow") wf_service.trg_write(uid, 'stock.picking', move.move_dest_id.picking_id.id, cr) self.write(cr, uid, ids, {'state': 'cancel', 'move_dest_id': False}) if not context.get('call_unlink',False): @@ -2211,7 +2207,6 @@ class stock_move(osv.osv): if all(move.state == 'cancel' for move in pick.move_lines): self.pool.get('stock.picking').write(cr, uid, [pick.id], {'state': 'cancel'}) - wf_service = netsvc.LocalService("workflow") for id in ids: wf_service.trg_trigger(uid, 'stock.move', id, cr) return True @@ -2633,7 +2628,6 @@ class stock_move(osv.osv): product_obj = self.pool.get('product.product') currency_obj = self.pool.get('res.currency') uom_obj = self.pool.get('product.uom') - wf_service = netsvc.LocalService("workflow") if context is None: context = {} @@ -2734,7 +2728,7 @@ class stock_move(osv.osv): res = cr.fetchall() if len(res) == len(move.picking_id.move_lines): picking_obj.action_move(cr, uid, [move.picking_id.id]) - wf_service.trg_validate(uid, 'stock.picking', move.picking_id.id, 'button_done', cr) + picking_obj.signal_button_done(cr, uid, [move.picking_id.id]) return [move.id for move in complete] diff --git a/addons/stock/wizard/stock_return_picking.py b/addons/stock/wizard/stock_return_picking.py index 7c6f0655e7a..bc149f86176 100644 --- a/addons/stock/wizard/stock_return_picking.py +++ b/addons/stock/wizard/stock_return_picking.py @@ -151,7 +151,6 @@ class stock_return_picking(osv.osv_memory): data_obj = self.pool.get('stock.return.picking.memory') act_obj = self.pool.get('ir.actions.act_window') model_obj = self.pool.get('ir.model.data') - wf_service = netsvc.LocalService("workflow") pick = pick_obj.browse(cr, uid, record_id, context=context) data = self.read(cr, uid, ids[0], context=context) date_cur = time.strftime('%Y-%m-%d %H:%M:%S') @@ -206,7 +205,7 @@ class stock_return_picking(osv.osv_memory): if set_invoice_state_to_none: pick_obj.write(cr, uid, [pick.id], {'invoice_state':'none'}, context=context) - wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr) + pick_obj.signal_button_confirm(cr, uid, [new_picking]) pick_obj.force_assign(cr, uid, [new_picking], context) # Update view id in context, lp:702939 model_list = { From 45ba35783f556c851e1a6791ea79f309ff43d98c Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 17:34:03 +0100 Subject: [PATCH 052/158] [IMP] mrp_operations: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128163403-dmbb0a1y0ejbt66t --- addons/mrp_operations/mrp_operations.py | 46 +++++++++---------- .../test/workcenter_operations.yml | 32 ++++--------- 2 files changed, 30 insertions(+), 48 deletions(-) diff --git a/addons/mrp_operations/mrp_operations.py b/addons/mrp_operations/mrp_operations.py index 1ce60946f6c..a60b348559c 100644 --- a/addons/mrp_operations/mrp_operations.py +++ b/addons/mrp_operations/mrp_operations.py @@ -118,16 +118,15 @@ class mrp_production_workcenter_line(osv.osv): @param action: Action to perform. @return: Nothing """ - wf_service = netsvc.LocalService("workflow") prod_obj_pool = self.pool.get('mrp.production') oper_obj = self.browse(cr, uid, ids)[0] prod_obj = oper_obj.production_id if action == 'start': if prod_obj.state =='confirmed': prod_obj_pool.force_production(cr, uid, [prod_obj.id]) - wf_service.trg_validate(uid, 'mrp.production', prod_obj.id, 'button_produce', cr) + prod_obj_pool.signal_button_produce(cr, uid, [prod_obj.id]) elif prod_obj.state =='ready': - wf_service.trg_validate(uid, 'mrp.production', prod_obj.id, 'button_produce', cr) + prod_obj_pool.signal_button_produce(cr, uid, [prod_obj.id]) elif prod_obj.state =='in_production': return else: @@ -143,7 +142,7 @@ class mrp_production_workcenter_line(osv.osv): for production in prod_obj_pool.browse(cr, uid, [prod_obj.id], context= None): if production.move_lines or production.move_created_ids: prod_obj_pool.action_produce(cr,uid, production.id, production.product_qty, 'consume_produce', context = None) - wf_service.trg_validate(uid, 'mrp.production', oper_obj.production_id.id, 'button_produce_done', cr) + prod_obj_pool.signal_button_produce_done(cr, uid, [oper_obj.production_id.id]) return def write(self, cr, uid, ids, vals, context=None, update=True): @@ -228,23 +227,21 @@ class mrp_production(osv.osv): @return: Super method """ obj = self.browse(cr, uid, ids)[0] - wf_service = netsvc.LocalService("workflow") + workcenter_pool = self.pool.get('mrp.production.workcenter.line') for workcenter_line in obj.workcenter_lines: if workcenter_line.state == 'draft': - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', workcenter_line.id, 'button_start_working', cr) - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', workcenter_line.id, 'button_done', cr) + workcenter_pool.signal_button_start_working(cr, uid, [workcenter_line.id]) + workcenter_pool.signal_button_done(cr, uid, [workcenter_line.id]) return super(mrp_production,self).action_production_end(cr, uid, ids) def action_in_production(self, cr, uid, ids): """ Changes state to In Production and writes starting date. @return: True """ - obj = self.browse(cr, uid, ids)[0] workcenter_pool = self.pool.get('mrp.production.workcenter.line') - wf_service = netsvc.LocalService("workflow") for prod in self.browse(cr, uid, ids): if prod.workcenter_lines: - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', prod.workcenter_lines[0].id, 'button_start_working', cr) + workcenter_pool.signal_button_start_working(cr, uid, [prod.workcenter_lines[0].id]) return super(mrp_production,self).action_in_production(cr, uid, ids) def action_cancel(self, cr, uid, ids, context=None): @@ -252,9 +249,8 @@ class mrp_production(osv.osv): @return: Super method """ obj = self.browse(cr, uid, ids,context=context)[0] - wf_service = netsvc.LocalService("workflow") for workcenter_line in obj.workcenter_lines: - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', workcenter_line.id, 'button_cancel', cr) + workcenter_pool.signal_button_cancel(cr, uid, [workcenter_line.id]) return super(mrp_production,self).action_cancel(cr,uid,ids,context=context) def _compute_planned_workcenter(self, cr, uid, ids, context=None, mini=False): @@ -503,35 +499,35 @@ class mrp_operations_operation(osv.osv): return super(mrp_operations_operation, self).write(cr, uid, ids, vals, context=context) def create(self, cr, uid, vals, context=None): + workcenter_pool = self.pool.get('mrp.production.workcenter.line') wf_service = netsvc.LocalService('workflow') code_ids=self.pool.get('mrp_operations.operation.code').search(cr,uid,[('id','=',vals['code_id'])]) code=self.pool.get('mrp_operations.operation.code').browse(cr, uid, code_ids, context=context)[0] - wc_op_id=self.pool.get('mrp.production.workcenter.line').search(cr,uid,[('workcenter_id','=',vals['workcenter_id']),('production_id','=',vals['production_id'])]) + wc_op_id=workcenter_pool.search(cr,uid,[('workcenter_id','=',vals['workcenter_id']),('production_id','=',vals['production_id'])]) if code.start_stop in ('start','done','pause','cancel','resume'): if not wc_op_id: production_obj=self.pool.get('mrp.production').browse(cr, uid, vals['production_id'], context=context) - wc_op_id.append(self.pool.get('mrp.production.workcenter.line').create(cr,uid,{'production_id':vals['production_id'],'name':production_obj.product_id.name,'workcenter_id':vals['workcenter_id']})) + wc_op_id.append(workcenter_pool.create(cr,uid,{'production_id':vals['production_id'],'name':production_obj.product_id.name,'workcenter_id':vals['workcenter_id']})) if code.start_stop=='start': - self.pool.get('mrp.production.workcenter.line').action_start_working(cr,uid,wc_op_id) - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_start_working', cr) - + workcenter_pool.action_start_working(cr,uid,wc_op_id) + workcenter_pool.signal_button_start_working(cr, uid, [wc_op_id[0]]) if code.start_stop=='done': - self.pool.get('mrp.production.workcenter.line').action_done(cr,uid,wc_op_id) - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_done', cr) + workcenter_pool.action_done(cr,uid,wc_op_id) + workcenter_pool.signal_button_done(cr, uid, [wc_op_id[0]]) self.pool.get('mrp.production').write(cr,uid,vals['production_id'],{'date_finished':datetime.now().strftime('%Y-%m-%d %H:%M:%S')}) if code.start_stop=='pause': - self.pool.get('mrp.production.workcenter.line').action_pause(cr,uid,wc_op_id) - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_pause', cr) + workcenter_pool.action_pause(cr,uid,wc_op_id) + workcenter_pool.signal_button_pause(cr, uid, [wc_op_id[0]]) if code.start_stop=='resume': - self.pool.get('mrp.production.workcenter.line').action_resume(cr,uid,wc_op_id) - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_resume', cr) + workcenter_pool.action_resume(cr,uid,wc_op_id) + workcenter_pool.signal_button_resume(cr, uid, [wc_op_id[0]]) if code.start_stop=='cancel': - self.pool.get('mrp.production.workcenter.line').action_cancel(cr,uid,wc_op_id) - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_cancel', cr) + workcenter_pool.action_cancel(cr,uid,wc_op_id) + workcenter_pool.signal_button_cancel(cr, uid, [wc_op_id[0]]) if not self.check_operation(cr, uid, vals): return diff --git a/addons/mrp_operations/test/workcenter_operations.yml b/addons/mrp_operations/test/workcenter_operations.yml index c1449657967..4754bb463ff 100644 --- a/addons/mrp_operations/test/workcenter_operations.yml +++ b/addons/mrp_operations/test/workcenter_operations.yml @@ -39,62 +39,48 @@ Production start on first work center, so I start work operation on first work center. - !python {model: mrp.production}: | - import netsvc order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_start_working', cr) + self.pool.get('mrp.production.workcenter.line').signal_button_start_working(cr, uid, [order.workcenter_lines[0].id]) - Now I pause first work operation due to technical fault of work center. - !python {model: mrp.production}: | - import netsvc order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_pause', cr) + self.pool.get('mrp.production.workcenter.line').signal_button_pause(cr, uid, [order.workcenter_lines[0].id]) - I resume first work operation. - !python {model: mrp.production}: | - import netsvc order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_resume', cr) + self.pool.get('mrp.production.workcenter.line').signal_button_resume(cr, uid, [order.workcenter_lines[0].id]) - I cancel first work operation. - !python {model: mrp.production}: | - import netsvc order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_cancel', cr) + self.pool.get('mrp.production.workcenter.line').signal_button_cancel(cr, uid, [order.workcenter_lines[0].id]) - I reset first work operation and start after resolving techninal fault of work center. - !python {model: mrp.production}: | - import netsvc order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_draft', cr) - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_start_working', cr) + self.pool.get('mrp.production.workcenter.line').signal_button_draft(cr, uid, [order.workcenter_lines[0].id]) + self.pool.get('mrp.production.workcenter.line').signal_button_start_working(cr, uid, [order.workcenter_lines[0].id]) - I close first work operation as this work center completed its process. - !python {model: mrp.production}: | - import netsvc order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_done', cr) + self.pool.get('mrp.production.workcenter.line').signal_button_done(cr, uid, [order.workcenter_lines[0].id]) - Now I close other operations one by one which are in start state. - !python {model: mrp.production}: | - import netsvc order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) - wf_service = netsvc.LocalService("workflow") for work_line in order.workcenter_lines[1:]: - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', work_line.id, 'button_start_working', cr) - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', work_line.id, 'button_done', cr) + self.pool.get('mrp.production.workcenter.line').signal_button_start_working(cr, uid, [work_line.id]) + self.pool.get('mrp.production.workcenter.line').signal_button_done(cr, uid, [work_line.id]) - I check that the production order is now done. From 271aafd8de871e3dc196c48b8cbaccd283a69961 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Tue, 29 Jan 2013 13:27:10 +0100 Subject: [PATCH 053/158] [IMP] added create_workflow, delete_workflow,redirect_workflow as ORM methods. bzr revid: vmt@openerp.com-20130129122710-ypvk9x7ndq84mq8r --- openerp/osv/orm.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index d3c11118116..64b44d9e743 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -3928,6 +3928,24 @@ class BaseModel(object): result[res_id] = wf_service.trg_validate(uid, self._name, res_id, signal, cr) return result + def create_workflow(self, cr, uid, ids): + wf_service = netsvc.LocalService("workflow") + for res_id in ids: + wf_service.trg_create(uid, self._name, res_id, cr) + return True + + def delete_workflow(self, cr, uid, ids): + wf_service = netsvc.LocalService("workflow") + for res_id in ids: + wf_service.trg_create(uid, self._name, res_id, cr) + return True + + def redirect_workflow(self, cr, uid, old_new_ids): + wf_service = netsvc.LocalService("workflow") + for old_id, new_id in old_new_ids: + wf_service.trg_redirect(uid, self._name, old_id, new_id, cr) + return True + def unlink(self, cr, uid, ids, context=None): """ Delete records with given ids From 830acb128d8451bebb48c7ab14367d7488a12d57 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Tue, 29 Jan 2013 13:28:08 +0100 Subject: [PATCH 054/158] [IMP] purchase: use the new ORM methods create_workflow, delete_workflow, redirect_workflow. bzr revid: vmt@openerp.com-20130129122808-etp3ytphzn2cxnr1 --- addons/purchase/purchase.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index bf3686d5a34..a45da4a2d61 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -487,8 +487,8 @@ class purchase_order(osv.osv): wf_service = netsvc.LocalService("workflow") for p_id in ids: # Deleting the existing instance of workflow for PO - wf_service.trg_delete(uid, 'purchase.order', p_id, cr) - wf_service.trg_create(uid, 'purchase.order', p_id, cr) + self.delete_workflow(cr, uid, [p_id]) # TODO is it necessary to interleave the calls? + self.create_workflow(cr, uid, [p_id]) return True def action_invoice_create(self, cr, uid, ids, context=None): @@ -797,7 +797,7 @@ class purchase_order(osv.osv): # make triggers pointing to the old orders point to the new order for old_id in old_ids: - wf_service.trg_redirect(uid, 'purchase.order', old_id, neworder_id, cr) + self.redirect_workflow(cr, uid, [(old_id, neworder_id)]) self.signal_purchase_cancel(cr, uid, [old_id]) # TODO Is it necessary to interleave the calls? return orders_info From 02a2c8574d101354899ca139221327a36e54a4a1 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Wed, 30 Jan 2013 15:29:03 +0530 Subject: [PATCH 055/158] [IMP] hr_holidays:use the new ORM methods create_workflow, delete_workflow, redirect_workflow. bzr revid: cha@tinyerp.com-20130130095903-6exhtm6uruk0ek30 --- addons/hr_holidays/hr_holidays.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 234897809e1..ce30951f7a9 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -304,10 +304,9 @@ class hr_holidays(osv.osv): 'manager_id': False, 'manager_id2': False, }) - wf_service = netsvc.LocalService("workflow") for id in ids: - wf_service.trg_delete(uid, 'hr.holidays', id, cr) - wf_service.trg_create(uid, 'hr.holidays', id, cr) + self.delete_workflow(cr, uid, [id]) + self.create_workflow(cr, uid, [id]) to_unlink = [] for record in self.browse(cr, uid, ids, context=context): for record2 in record.linked_request_ids: From 3d0b141406b397fa989c56af0946f11595951ff5 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Wed, 30 Jan 2013 17:30:32 +0100 Subject: [PATCH 056/158] [IMP] remove default 'None' value (doesn't make sense anymore) bzr revid: abo@openerp.com-20130130163032-jsfm0fa5r54wmvpv --- openerp/addons/base/res/res_config.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index 33615333447..0bbdf5b5e84 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -590,7 +590,7 @@ class res_config_settings(osv.osv_memory): name = act_window.read(cr, uid, action_ids[0], ['name'], context=context)['name'] return [(record.id, name) for record in self.browse(cr, uid , ids, context=context)] - def get_option_path(self, cr, uid, menu_xml_id=None, context=None): + def get_option_path(self, cr, uid, menu_xml_id, context=None): """ Fetch the path to a specified configuration view. @@ -606,7 +606,7 @@ class res_config_settings(osv.osv_memory): return ir_ui_menu.complete_name - def get_option_name(self, cr, uid, full_field_name=None, context=None): + def get_option_name(self, cr, uid, full_field_name, context=None): """ Fetch the human readable name of a specified configuration option. @@ -657,7 +657,7 @@ def get_warning_config(cr, msg, context=None): elif ref_type == 'field': values[item] = res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context) - # 4/ substitute and return the result + # 3/ substitute and return the result return exceptions.Warning(msg % values) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 2459399cac7426cf57fe9c31fbae43f3636bb221 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Wed, 30 Jan 2013 17:56:42 +0100 Subject: [PATCH 057/158] [IMP] make get_config_warning() a method of res.config.settings, avoiding heavy import of res_config or long path calls like 'openerp.addons.base.res.res_config.get_config_warning()' just use self.pool.get('res.config.settings').get_config_warning() instead bzr revid: abo@openerp.com-20130130165642-pq5sbdluesxu7p6d --- openerp/addons/base/res/res_config.py | 66 +++++++++++++-------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index 0bbdf5b5e84..32e24238d52 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -620,44 +620,44 @@ class res_config_settings(osv.osv_memory): return self.pool.get(model_name).fields_get(cr, uid, allfields=[field_name], context=context)[field_name]['string'] -def get_warning_config(cr, msg, context=None): - """ - Helper: return a Warning exception with the given message where the - %(field:)s and/or %(menu:)s are replaced by the human readable field's name - and/or menuitem's full path. + def get_config_warning(self, cr, msg, context=None): + """ + Helper: return a Warning exception with the given message where the + %(field:)s and/or %(menu:)s are replaced by the human readable field's name + and/or menuitem's full path. - Usage: - ------ - Just include in your error message %(field:model_name.field_name)s to - obtain the human readable field's name, and/or - %(menu:module_name.menuitem_xml_id)s to obtain the menuitem's full path. + Usage: + ------ + Just include in your error message %(field:model_name.field_name)s to + obtain the human readable field's name, and/or + %(menu:module_name.menuitem_xml_id)s to obtain the menuitem's full path. - Example of use: - --------------- - from openerp.addons.base.res.res_config import get_warning_config - raise get_warning_config(cr, _("Error: this action is prohibited. You should check the field %(field:sale.config.settings.fetchmail_lead)s in %(menu:base.menu_sale_config)s."), context=context) - will return an exception containing the following message: - Error: this action is prohibited. You should check the field Create leads from incoming mails in Settings/Configuration/Sales. - """ + Example of use: + --------------- + from openerp.addons.base.res.res_config import get_warning_config + raise get_warning_config(cr, _("Error: this action is prohibited. You should check the field %(field:sale.config.settings.fetchmail_lead)s in %(menu:base.menu_sale_config)s."), context=context) + will return an exception containing the following message: + Error: this action is prohibited. You should check the field Create leads from incoming mails in Settings/Configuration/Sales. + """ - res_config_obj = pooler.get_pool(cr.dbname).get('res.config.settings') - regex_path = r'%\(((?:menu|field):[a-z_\.]*)\)s' + res_config_obj = pooler.get_pool(cr.dbname).get('res.config.settings') + regex_path = r'%\(((?:menu|field):[a-z_\.]*)\)s' - # Process the message - # 1/ find the path and/or field references, put them in a list - references = re.findall(regex_path, msg, flags=re.I) + # Process the message + # 1/ find the path and/or field references, put them in a list + references = re.findall(regex_path, msg, flags=re.I) - # 2/ fetch the path and/or field replacement values - # (full path and human readable field's name) - values = {} - for item in references: - ref_type, ref = item.split(':') - if ref_type == 'menu': - values[item] = res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context) - elif ref_type == 'field': - values[item] = res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context) + # 2/ fetch the path and/or field replacement values + # (full path and human readable field's name) + values = {} + for item in references: + ref_type, ref = item.split(':') + if ref_type == 'menu': + values[item] = res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context) + elif ref_type == 'field': + values[item] = res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context) - # 3/ substitute and return the result - return exceptions.Warning(msg % values) + # 3/ substitute and return the result + return exceptions.Warning(msg % values) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 19368fb65c24bf21852e50eeae5fb0767f1c1fce Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 10:16:08 +0530 Subject: [PATCH 058/158] [IMP] sale: use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130131044608-h5dj2xfqyo8ewm6k --- addons/sale/sale.py | 19 ++++++------------- addons/sale/wizard/sale_line_invoice.py | 3 +-- addons/sale/wizard/sale_make_invoice.py | 6 ++---- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 66653c61849..93556a3e7d5 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -418,8 +418,7 @@ class sale_order(osv.osv): This function prints the sales order and mark it as sent, so that we can see more easily the next step of the workflow ''' assert len(ids) == 1, 'This option should only be used for a single id at a time' - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'sale.order', ids[0], 'quotation_sent', cr) + self.signal_quotation_sent(cr, uid, [ids[0]]) datas = { 'model': 'sale.order', 'ids': ids, @@ -432,12 +431,10 @@ class sale_order(osv.osv): view of one of the newly created invoices """ mod_obj = self.pool.get('ir.model.data') - wf_service = netsvc.LocalService("workflow") - + # create invoices through the sales orders' workflow inv_ids0 = set(inv.id for sale in self.browse(cr, uid, ids, context) for inv in sale.invoice_ids) - for id in ids: - wf_service.trg_validate(uid, 'sale.order', id, 'manual_invoice', cr) + self.signal_manual_invoice(cr, uid, ids) inv_ids1 = set(inv.id for sale in self.browse(cr, uid, ids, context) for inv in sale.invoice_ids) # determine newly created invoices new_inv_ids = list(inv_ids1 - inv_ids0) @@ -555,7 +552,6 @@ class sale_order(osv.osv): return True def action_cancel(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") if context is None: context = {} sale_order_line_obj = self.pool.get('sale.order.line') @@ -566,8 +562,7 @@ class sale_order(osv.osv): _('Cannot cancel this sales order!'), _('First cancel all invoices attached to this sales order.')) for r in self.read(cr, uid, ids, ['invoice_ids']): - for inv in r['invoice_ids']: - wf_service.trg_validate(uid, 'account.invoice', inv, 'invoice_cancel', cr) + self.pool.get('account.invoice').signal_invoice_cancel(cr, uid, r['invoice_ids']) sale_order_line_obj.write(cr, uid, [l.id for l in sale.order_line], {'state': 'cancel'}) self.write(cr, uid, ids, {'state': 'cancel'}) @@ -575,8 +570,7 @@ class sale_order(osv.osv): def action_button_confirm(self, cr, uid, ids, context=None): assert len(ids) == 1, 'This option should only be used for a single id at a time.' - wf_service = netsvc.LocalService('workflow') - wf_service.trg_validate(uid, 'sale.order', ids[0], 'order_confirm', cr) + self.signal_order_confirm(cr, uid, ids) # redisplay the record as a sales order view_ref = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'sale', 'view_order_form') @@ -992,8 +986,7 @@ class mail_compose_message(osv.Model): context = context or {} if context.get('default_model') == 'sale.order' and context.get('default_res_id') and context.get('mark_so_as_sent'): context = dict(context, mail_post_autofollow=True) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'sale.order', context['default_res_id'], 'quotation_sent', cr) + self.pool.get('sale.order').signal_quotation_sent(cr, uid, context['default_res_id']) return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale/wizard/sale_line_invoice.py b/addons/sale/wizard/sale_line_invoice.py index 4aa58088129..4b18c9a4b39 100644 --- a/addons/sale/wizard/sale_line_invoice.py +++ b/addons/sale/wizard/sale_line_invoice.py @@ -80,7 +80,6 @@ class sale_order_line_make_invoice(osv.osv_memory): sales_order_line_obj = self.pool.get('sale.order.line') sales_order_obj = self.pool.get('sale.order') - wf_service = netsvc.LocalService('workflow') for line in sales_order_line_obj.browse(cr, uid, context.get('active_ids', []), context=context): if (not line.invoiced) and (line.state not in ('draft', 'cancel')): if not line.order_id.id in invoices: @@ -103,7 +102,7 @@ class sale_order_line_make_invoice(osv.osv_memory): flag = False break if flag: - wf_service.trg_validate(uid, 'sale.order', line.order_id.id, 'manual_invoice', cr) + sales_order_obj.signal_manual_invoice(cr, uid, line.order_id.id) sales_order_obj.write(cr, uid, [line.order_id.id], {'state': 'progress'}) if not invoices: diff --git a/addons/sale/wizard/sale_make_invoice.py b/addons/sale/wizard/sale_make_invoice.py index d60adbb7b25..608ae0493df 100644 --- a/addons/sale/wizard/sale_make_invoice.py +++ b/addons/sale/wizard/sale_make_invoice.py @@ -52,10 +52,8 @@ class sale_make_invoice(osv.osv_memory): context = {} data = self.read(cr, uid, ids)[0] order_obj.action_invoice_create(cr, uid, context.get(('active_ids'), []), data['grouped'], date_inv = data['invoice_date']) - wf_service = netsvc.LocalService("workflow") - for id in context.get(('active_ids'), []): - wf_service.trg_validate(uid, 'sale.order', id, 'manual_invoice', cr) - + order_obj.signal_manual_invoice(cr, uid, context.get(('active_ids'), [])) + for o in order_obj.browse(cr, uid, context.get(('active_ids'), []), context=context): for i in o.invoice_ids: newinv.append(i.id) From 4fa593ade57fd184f70829d7b70c46ed80ae41be Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 10:42:29 +0530 Subject: [PATCH 059/158] [IMP] sale: for yml use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130131051229-r530h3eawm5bm62s --- addons/sale/test/cancel_order.yml | 5 +---- addons/sale/test/manual_order_policy.yml | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/addons/sale/test/cancel_order.yml b/addons/sale/test/cancel_order.yml index cde3a5b34f2..d9d76f19935 100644 --- a/addons/sale/test/cancel_order.yml +++ b/addons/sale/test/cancel_order.yml @@ -51,11 +51,8 @@ I cancel all the invoices. - !python {model: sale.order}: | - import netsvc invoice_ids = self.browse(cr, uid, ref("sale_order_8")).invoice_ids - wf_service = netsvc.LocalService("workflow") - for invoice in invoice_ids: - wf_service.trg_validate(uid, 'account.invoice', invoice.id, 'invoice_cancel', cr) + self.pool.get('account.invoice').signal_invoice_cancel(cr, uid, invoice_ids) - I check order status in "Invoice Exception" and related invoice is in cancel state. - diff --git a/addons/sale/test/manual_order_policy.yml b/addons/sale/test/manual_order_policy.yml index 5fe29950176..905f04b01f5 100644 --- a/addons/sale/test/manual_order_policy.yml +++ b/addons/sale/test/manual_order_policy.yml @@ -41,11 +41,8 @@ I open the Invoice. - !python {model: sale.order}: | - import netsvc - wf_service = netsvc.LocalService("workflow") so = self.browse(cr, uid, ref("sale_order_2")) - for invoice in so.invoice_ids: - wf_service.trg_validate(uid, 'account.invoice', invoice.id, 'invoice_open', cr) + self.pool.get('account.invoice').signal_invoice_open(cr, uid, so.invoice_ids) - I pay the invoice. - From 2ac6d7876f813ece0e13d632b125119f96e035b7 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 11:13:37 +0530 Subject: [PATCH 060/158] [IMP] sale_stock: use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130131054337-iph87376e9bhoqpy --- addons/sale_stock/sale_stock.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py index 1b5ddefbe74..6f891a047a1 100644 --- a/addons/sale_stock/sale_stock.py +++ b/addons/sale_stock/sale_stock.py @@ -194,7 +194,6 @@ class sale_order(osv.osv): return res def action_cancel(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") if context is None: context = {} sale_order_line_obj = self.pool.get('sale.order.line') @@ -209,11 +208,9 @@ class sale_order(osv.osv): for mov in pick.move_lines: proc_ids = proc_obj.search(cr, uid, [('move_id', '=', mov.id)]) if proc_ids: - for proc in proc_ids: - wf_service.trg_validate(uid, 'procurement.order', proc, 'button_check', cr) + self.pool.get('procurement.order').signal_button_check(cr, uid, proc_ids) for r in self.read(cr, uid, ids, ['picking_ids']): - for pick in r['picking_ids']: - wf_service.trg_validate(uid, 'stock.picking', pick, 'button_cancel', cr) + self.pool.get('stock.picking').signal_button_cancel(cr, uid, r['picking_ids']) return super(sale_order, self).action_cancel(cr, uid, ids, context=context) def action_wait(self, cr, uid, ids, context=None): @@ -396,11 +393,9 @@ class sale_order(osv.osv): line.write({'procurement_id': proc_id}) self.ship_recreate(cr, uid, order, line, move_id, proc_id) - wf_service = netsvc.LocalService("workflow") if picking_id: - wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr) - for proc_id in proc_ids: - wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr) + self.pool.get('stock.picking').signal_button_confirm(cr, uid, [picking_id]) + self.pool.get('procurement.order').signal_button_confirm(cr, uid, proc_ids) val = {} if order.state == 'shipping_except': From 3dfaff6bc3cbe4ad4f479ec6dfb549389126a9cd Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 11:45:33 +0530 Subject: [PATCH 061/158] [IMP] sale_stock: for yml use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130131061533-ivbzasitl9a2mi04 --- addons/sale_stock/sale_stock.py | 1 - addons/sale_stock/test/cancel_order_sale_stock.yml | 8 ++------ addons/sale_stock/test/picking_order_policy.yml | 4 +--- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py index 6f891a047a1..f63282b7a16 100644 --- a/addons/sale_stock/sale_stock.py +++ b/addons/sale_stock/sale_stock.py @@ -23,7 +23,6 @@ from datetime import datetime, timedelta from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP, float_compare from dateutil.relativedelta import relativedelta from openerp.osv import fields, osv -from openerp import netsvc from openerp.tools.translate import _ class sale_shop(osv.osv): diff --git a/addons/sale_stock/test/cancel_order_sale_stock.yml b/addons/sale_stock/test/cancel_order_sale_stock.yml index 6805a90ca80..9081cac9fa3 100644 --- a/addons/sale_stock/test/cancel_order_sale_stock.yml +++ b/addons/sale_stock/test/cancel_order_sale_stock.yml @@ -17,11 +17,9 @@ Now I cancel latest shipment. - !python {model: stock.picking}: | - import netsvc delivery_orders = self.search(cr, uid, [('sale_id','=',ref("sale.sale_order_8"))]) last_delivery_order_id = delivery_orders[0] - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'stock.picking', last_delivery_order_id, 'button_cancel', cr) + self.pool.get('stock.picking').signal_button_cancel(cr, uid, [last_delivery_order_id]) - I run the scheduler. - @@ -50,11 +48,9 @@ To cancel the sale order from Invoice Exception, I have to cancel the invoice of sale order. - !python {model: sale.order}: | - import netsvc invoice_ids = self.browse(cr, uid, ref("sale.sale_order_8")).invoice_ids - wf_service = netsvc.LocalService("workflow") first_invoice_id = invoice_ids[0] - wf_service.trg_validate(uid, 'account.invoice', first_invoice_id.id, 'invoice_cancel', cr) + self.pool.get('account.invoice').signal_invoice_cancel(cr, uid, [first_invoice_id.id]) - I check order status in "Invoice Exception" and related invoice is in cancel state. - diff --git a/addons/sale_stock/test/picking_order_policy.yml b/addons/sale_stock/test/picking_order_policy.yml index 800c131e288..a28326598ac 100644 --- a/addons/sale_stock/test/picking_order_policy.yml +++ b/addons/sale_stock/test/picking_order_policy.yml @@ -132,11 +132,9 @@ I open the Invoice. - !python {model: sale.order}: | - import netsvc - wf_service = netsvc.LocalService("workflow") so = self.browse(cr, uid, ref("sale.sale_order_6")) for invoice in so.invoice_ids: - wf_service.trg_validate(uid, 'account.invoice', invoice.id, 'invoice_open', cr) + self.pool.get('account.invoice').signal_invoice_open(cr, uid, [invoice.id]) - I pay the invoice - From ba02e50efacdc621130aff19e02c6d0e69c07a7d Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 12:03:33 +0530 Subject: [PATCH 062/158] [IMP] hr_payroll: use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130131063333-jhcpvbingaqxroiq --- addons/hr_payroll/hr_payroll.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/addons/hr_payroll/hr_payroll.py b/addons/hr_payroll/hr_payroll.py index b711ed1a9c4..06af3054b68 100644 --- a/addons/hr_payroll/hr_payroll.py +++ b/addons/hr_payroll/hr_payroll.py @@ -26,7 +26,6 @@ from datetime import datetime from datetime import timedelta from dateutil import relativedelta -from openerp import netsvc from openerp.osv import fields, osv from openerp import tools from openerp.tools.translate import _ @@ -331,13 +330,12 @@ class hr_payslip(osv.osv): def refund_sheet(self, cr, uid, ids, context=None): mod_obj = self.pool.get('ir.model.data') - wf_service = netsvc.LocalService("workflow") for payslip in self.browse(cr, uid, ids, context=context): id_copy = self.copy(cr, uid, payslip.id, {'credit_note': True, 'name': _('Refund: ')+payslip.name}, context=context) self.compute_sheet(cr, uid, [id_copy], context=context) - wf_service.trg_validate(uid, 'hr.payslip', id_copy, 'hr_verify_sheet', cr) - wf_service.trg_validate(uid, 'hr.payslip', id_copy, 'process_sheet', cr) - + self.signal_hr_verify_sheet(cr, uid, [id_copy]) + self.signal_process_sheet(cr, uid, [id_copy]) + form_id = mod_obj.get_object_reference(cr, uid, 'hr_payroll', 'view_hr_payslip_form') form_res = form_id and form_id[1] or False tree_id = mod_obj.get_object_reference(cr, uid, 'hr_payroll', 'view_hr_payslip_tree') From da43da8f3b54be5c4e5392f567d51057d2b250c9 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 14:54:40 +0530 Subject: [PATCH 063/158] [IMP] hr_timesheet_sheet: use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130131092440-gxhz5y5rxkfuy9k3 --- addons/hr_timesheet_sheet/hr_timesheet_sheet.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py index c473670b014..d9b76dcfb89 100644 --- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py +++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py @@ -93,8 +93,7 @@ class hr_timesheet_sheet(osv.osv): self.check_employee_attendance_state(cr, uid, sheet.id, context=context) di = sheet.user_id.company_id.timesheet_max_difference if (abs(sheet.total_difference) < di) or not di: - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'hr_timesheet_sheet.sheet', sheet.id, 'confirm', cr) + self.signal_confirm(cr, uid, [sheet.id]) else: raise osv.except_osv(_('Warning!'), _('Please verify that the total difference of the sheet is lower than %.2f.') %(di,)) return True @@ -192,9 +191,8 @@ class hr_timesheet_sheet(osv.osv): def action_set_to_draft(self, cr, uid, ids, *args): self.write(cr, uid, ids, {'state': 'draft'}) - wf_service = netsvc.LocalService('workflow') for id in ids: - wf_service.trg_create(uid, self._name, id, cr) + self.create_workflow(cr, uid, [id]) return True def name_get(self, cr, uid, ids, context=None): From 4b7ad7da5633f31b1b06237a8e1a4f5985f12555 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 14:59:50 +0530 Subject: [PATCH 064/158] [IMP] removed unused import bzr revid: cha@tinyerp.com-20130131092950-mm2xjuv2j2t0gk7v --- addons/hr_timesheet_sheet/hr_timesheet_sheet.py | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py index d9b76dcfb89..5948c02bc5e 100644 --- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py +++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py @@ -25,7 +25,6 @@ from dateutil.relativedelta import relativedelta from openerp.osv import fields, osv from openerp.tools.translate import _ -from openerp import netsvc class hr_timesheet_sheet(osv.osv): _name = "hr_timesheet_sheet.sheet" From d43fa7273659c2600c74d6b8b6ac4a6c62c9f2f2 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 15:09:01 +0530 Subject: [PATCH 065/158] [FIX] l10n_in_hr_payroll: removed unused imports. bzr revid: cha@tinyerp.com-20130131093901-423rr2g3h5ke0vpb --- addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py index da98bbe681a..6a7638d919a 100644 --- a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py +++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py @@ -26,7 +26,6 @@ from calendar import isleap from openerp.tools.translate import _ from openerp.osv import fields, osv -from openerp import netsvc import openerp.addons.decimal_precision as dp DATETIME_FORMAT = "%Y-%m-%d" @@ -179,7 +178,6 @@ class hr_payslip_run(osv.osv): return res def create_advice(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") payslip_pool = self.pool.get('hr.payslip') payslip_line_pool = self.pool.get('hr.payslip.line') advice_pool = self.pool.get('hr.payroll.advice') From 4ce0098aa72d05fbfa332c61b694228eb5bf95fd Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 15:17:28 +0530 Subject: [PATCH 066/158] [FIX] purchase: removed unused imports. bzr revid: cha@tinyerp.com-20130131094728-944bmu3sa1dmbhzy --- addons/purchase/purchase.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index a45da4a2d61..e76bf4a0358 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -25,7 +25,6 @@ from dateutil.relativedelta import relativedelta from operator import attrgetter from openerp.osv import fields, osv -from openerp import netsvc from openerp import pooler from openerp.tools.translate import _ import openerp.addons.decimal_precision as dp @@ -484,7 +483,6 @@ class purchase_order(osv.osv): if not len(ids): return False self.write(cr, uid, ids, {'state':'draft','shipped':0}) - wf_service = netsvc.LocalService("workflow") for p_id in ids: # Deleting the existing instance of workflow for PO self.delete_workflow(cr, uid, [p_id]) # TODO is it necessary to interleave the calls? @@ -777,7 +775,6 @@ class purchase_order(osv.osv): allorders = [] orders_info = {} - wf_service = netsvc.LocalService("workflow") for order_key, (order_data, old_ids) in new_orders.iteritems(): # skip merges with only one order if len(old_ids) < 2: From de90c600cdc9771494b17504ddc63024f5d18f6c Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 15:25:41 +0530 Subject: [PATCH 067/158] [FIX] purchase: removed unused imports from yml. bzr revid: cha@tinyerp.com-20130131095541-2p4hocnztgrkvp98 --- addons/purchase/test/process/rfq2order2done.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/addons/purchase/test/process/rfq2order2done.yml b/addons/purchase/test/process/rfq2order2done.yml index be68a8ca01e..ff9158b3c09 100644 --- a/addons/purchase/test/process/rfq2order2done.yml +++ b/addons/purchase/test/process/rfq2order2done.yml @@ -59,9 +59,7 @@ I Validate Invoice of Purchase Order. - !python {model: purchase.order}: | - import netsvc invoice_ids = [x.id for x in self.browse(cr, uid, ref("purchase_order_1")).invoice_ids] - wf_service = netsvc.LocalService("workflow") self.pool.get('account.invoice').signal_invoice_open(cr, uid, invoice_ids) - I check that purchase order is invoiced. From 8045a7556d4fcef4a9640828e84fb799370d9a18 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 16:00:15 +0530 Subject: [PATCH 068/158] [IMP] purchase_requisition: use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130131103015-ooa3nr4j6qllpfgk --- addons/purchase_requisition/purchase_requisition.py | 4 +--- addons/purchase_requisition/test/purchase_requisition.yml | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py index f773bbd8505..79b8cce4bd5 100644 --- a/addons/purchase_requisition/purchase_requisition.py +++ b/addons/purchase_requisition/purchase_requisition.py @@ -22,7 +22,6 @@ from datetime import datetime from dateutil.relativedelta import relativedelta import time -from openerp import netsvc from openerp.osv import fields,osv from openerp.tools.translate import _ @@ -211,8 +210,7 @@ class purchase_order(osv.osv): proc_ids = proc_obj.search(cr, uid, [('purchase_id', '=', order.id)]) if proc_ids and po.state=='confirmed': proc_obj.write(cr, uid, proc_ids, {'purchase_id': po.id}) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'purchase.order', order.id, 'purchase_cancel', cr) + self.signal_purchase_cancel(cr, uid, [order.id]) po.requisition_id.tender_done(context=context) return res diff --git a/addons/purchase_requisition/test/purchase_requisition.yml b/addons/purchase_requisition/test/purchase_requisition.yml index 38e66788dcf..f23737d21b8 100644 --- a/addons/purchase_requisition/test/purchase_requisition.yml +++ b/addons/purchase_requisition/test/purchase_requisition.yml @@ -69,10 +69,8 @@ I confirmed RFQ which has best price. - !python {model: purchase.order}: | - import netsvc - wf_service = netsvc.LocalService("workflow") purchase = self.browse(cr, uid, ref('rfq2'), context=context) - wf_service.trg_validate(uid, 'purchase.order', purchase.id, 'purchase_confirm', cr) + self.signal_purchase_confirm(cr, uid, [purchase.id]) - I check status of requisition after confirmed best RFQ. From fc374647a9c0dad7411992d799132c0475fbaf38 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 16:49:52 +0530 Subject: [PATCH 069/158] [IMP] procurement: use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130131111952-tnq7iiwj9u5opyge --- addons/procurement/procurement.py | 1 - addons/procurement/schedulers.py | 3 --- addons/procurement/wizard/make_procurement_product.py | 6 ++---- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py index 21c260b99cd..30d870647e2 100644 --- a/addons/procurement/procurement.py +++ b/addons/procurement/procurement.py @@ -456,7 +456,6 @@ class procurement_order(osv.osv): class StockPicking(osv.osv): _inherit = 'stock.picking' def test_finished(self, cr, uid, ids): - wf_service = netsvc.LocalService("workflow") res = super(StockPicking, self).test_finished(cr, uid, ids) for picking in self.browse(cr, uid, ids): for move in picking.move_lines: diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py index 76b31cc6da3..c09d9a22a16 100644 --- a/addons/procurement/schedulers.py +++ b/addons/procurement/schedulers.py @@ -57,7 +57,6 @@ class procurement_order(osv.osv): try: if use_new_cursor: cr = pooler.get_db(use_new_cursor).cursor() - wf_service = netsvc.LocalService("workflow") procurement_obj = self.pool.get('procurement.order') if not ids: @@ -154,7 +153,6 @@ class procurement_order(osv.osv): product_obj = self.pool.get('product.product') proc_obj = self.pool.get('procurement.order') warehouse_obj = self.pool.get('stock.warehouse') - wf_service = netsvc.LocalService("workflow") warehouse_ids = warehouse_obj.search(cr, uid, [], context=context) products_ids = product_obj.search(cr, uid, [('purchase_ok', '=', True)], order='id', context=context) @@ -224,7 +222,6 @@ class procurement_order(osv.osv): orderpoint_obj = self.pool.get('stock.warehouse.orderpoint') procurement_obj = self.pool.get('procurement.order') - wf_service = netsvc.LocalService("workflow") offset = 0 ids = [1] if automatic: diff --git a/addons/procurement/wizard/make_procurement_product.py b/addons/procurement/wizard/make_procurement_product.py index 34a146289f6..fa159780af2 100644 --- a/addons/procurement/wizard/make_procurement_product.py +++ b/addons/procurement/wizard/make_procurement_product.py @@ -19,7 +19,6 @@ # ############################################################################## -from openerp import netsvc from openerp.osv import fields, osv @@ -64,7 +63,6 @@ class make_procurement(osv.osv_memory): user = self.pool.get('res.users').browse(cr, uid, uid, context=context).login wh_obj = self.pool.get('stock.warehouse') procurement_obj = self.pool.get('procurement.order') - wf_service = netsvc.LocalService("workflow") data_obj = self.pool.get('ir.model.data') for proc in self.browse(cr, uid, ids, context=context): @@ -78,8 +76,8 @@ class make_procurement(osv.osv_memory): 'location_id': wh.lot_stock_id.id, 'procure_method':'make_to_order', }) - - wf_service.trg_validate(uid, 'procurement.order', procure_id, 'button_confirm', cr) + + self.pool.get('procurement.order').signal_button_confirm(cr, uid, [procure_id]) id2 = data_obj._get_id(cr, uid, 'procurement', 'procurement_tree_view') From d4328ba8d57010a669efc1724264fba534f88b46 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 17:29:54 +0530 Subject: [PATCH 070/158] [IMP] account_voucher: : use the new ORM methods create_workflow, delete_workflow, redirect_workflow. bzr revid: cha@tinyerp.com-20130131115954-54u8z5ibntrs4sco --- addons/account_voucher/account_voucher.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index 2046d787ef3..2e808e26b75 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -22,7 +22,6 @@ import time from lxml import etree -from openerp import netsvc from openerp.osv import fields, osv import openerp.addons.decimal_precision as dp from openerp.tools.translate import _ @@ -828,9 +827,7 @@ class account_voucher(osv.osv): return True def action_cancel_draft(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") - for voucher_id in ids: - wf_service.trg_create(uid, 'account.voucher', voucher_id, cr) + self.create_workflow(cr, uid, ids) self.write(cr, uid, ids, {'state':'draft'}) return True From eebaf0767ed79a70cc999ff32cae325bc81aa839 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Thu, 31 Jan 2013 17:30:47 +0530 Subject: [PATCH 071/158] [IMP] mrp_operation: use the new ORM methods create_workflow, delete_workflow, redirect_workflow. bzr revid: tta@openerp.com-20130131120047-9ehhi00keo0p6gjq --- addons/mrp_operations/mrp_operations.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/addons/mrp_operations/mrp_operations.py b/addons/mrp_operations/mrp_operations.py index a60b348559c..cce27d3a6c2 100644 --- a/addons/mrp_operations/mrp_operations.py +++ b/addons/mrp_operations/mrp_operations.py @@ -500,7 +500,6 @@ class mrp_operations_operation(osv.osv): def create(self, cr, uid, vals, context=None): workcenter_pool = self.pool.get('mrp.production.workcenter.line') - wf_service = netsvc.LocalService('workflow') code_ids=self.pool.get('mrp_operations.operation.code').search(cr,uid,[('id','=',vals['code_id'])]) code=self.pool.get('mrp_operations.operation.code').browse(cr, uid, code_ids, context=context)[0] wc_op_id=workcenter_pool.search(cr,uid,[('workcenter_id','=',vals['workcenter_id']),('production_id','=',vals['production_id'])]) @@ -545,10 +544,9 @@ class mrp_operations_operation(osv.osv): return super(mrp_operations_operation, self).create(cr, uid, vals, context=context) def initialize_workflow_instance(self, cr, uid, context=None): - wf_service = netsvc.LocalService("workflow") - line_ids = self.pool.get('mrp.production.workcenter.line').search(cr, uid, [], context=context) - for line_id in line_ids: - wf_service.trg_create(uid, 'mrp.production.workcenter.line', line_id, cr) + mrp_production_workcenter_line = self.pool.get('mrp.production.workcenter.line') + line_ids = mrp_production_workcenter_line.search(cr, uid, [], context=context) + mrp_production_workcenter_line.create_workflow(cr, uid, line_ids) return True _columns={ From 401b039e809598fc9e242f9dda1a34545430219d Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Thu, 31 Jan 2013 17:49:15 +0530 Subject: [PATCH 072/158] [IMP] mrp: use the new signal_xxx method instead of trg_validate. bzr revid: tta@openerp.com-20130131121915-gahj7t5ob6s2y0q8 --- addons/mrp/mrp.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index 44fbaafbcfe..b8081f461d6 100644 --- a/addons/mrp/mrp.py +++ b/addons/mrp/mrp.py @@ -27,7 +27,6 @@ from openerp.osv import fields, osv from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP from openerp.tools import float_compare from openerp.tools.translate import _ -from openerp import netsvc from openerp import tools #---------------------------------------------------------- @@ -775,8 +774,7 @@ class mrp_production(osv.osv): for new_parent_id in new_parent_ids: stock_mov_obj.write(cr, uid, [raw_product.id], {'move_history_ids': [(4,new_parent_id)]}) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'mrp.production', production_id, 'button_produce_done', cr) + self.signal_button_produce_done(cr, uid, [production_id]) return True def _costs_generate(self, cr, uid, production): @@ -844,7 +842,6 @@ class mrp_production(osv.osv): return True def _make_production_line_procurement(self, cr, uid, production_line, shipment_move_id, context=None): - wf_service = netsvc.LocalService("workflow") procurement_order = self.pool.get('procurement.order') production = production_line.production_id location_id = production.location_src_id.id @@ -864,7 +861,7 @@ class mrp_production(osv.osv): 'move_id': shipment_move_id, 'company_id': production.company_id.id, }) - wf_service.trg_validate(uid, procurement_order._name, procurement_id, 'button_confirm', cr) + self.signal_button_confirm(cr, uid, [procurement_id]) return procurement_id def _make_production_internal_shipment_line(self, cr, uid, production_line, shipment_id, parent_move_id, destination_location_id=False, context=None): @@ -977,7 +974,6 @@ class mrp_production(osv.osv): @return: Newly generated Shipment Id. """ shipment_id = False - wf_service = netsvc.LocalService("workflow") uncompute_ids = filter(lambda x:x, [not x.product_lines and x.id or False for x in self.browse(cr, uid, ids, context=context)]) self.action_compute(cr, uid, uncompute_ids, context=context) for production in self.browse(cr, uid, ids, context=context): @@ -995,7 +991,7 @@ class mrp_production(osv.osv): destination_location_id=source_location_id, context=context) self._make_production_line_procurement(cr, uid, line, shipment_move_id, context=context) - wf_service.trg_validate(uid, 'stock.picking', shipment_id, 'button_confirm', cr) + self.registry('stock.picking').signal_button_confirm(cr, uid, [shipment_id]) production.write({'state':'confirmed'}, context=context) return shipment_id From 9a1d53ba2dbd3f5c7e42696f3aef8e4963754013 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 18:01:22 +0530 Subject: [PATCH 073/158] [IMP] account_payment: : use the new ORM methods create_workflow, delete_workflow, redirect_workflow. bzr revid: cha@tinyerp.com-20130131123122-td7ebesygpa605y0 --- addons/account_payment/account_payment.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/addons/account_payment/account_payment.py b/addons/account_payment/account_payment.py index c57c83aa765..bf0377111a8 100644 --- a/addons/account_payment/account_payment.py +++ b/addons/account_payment/account_payment.py @@ -23,7 +23,6 @@ import logging import time from openerp.osv import fields, osv -from openerp import netsvc _logger = logging.getLogger(__name__) @@ -120,9 +119,7 @@ class payment_order(osv.osv): def set_to_draft(self, cr, uid, ids, *args): self.write(cr, uid, ids, {'state': 'draft'}) - wf_service = netsvc.LocalService("workflow") - for id in ids: - wf_service.trg_create(uid, 'payment.order', id, cr) + self.create_workflow(cr, uid, ids) return True def action_open(self, cr, uid, ids, *args): From c35416245f1932361e65fb7cfbe75a0aee3c1372 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Thu, 31 Jan 2013 18:18:41 +0530 Subject: [PATCH 074/158] [IMP] mrp_repain: use the new signal_xxx method instead of trg_validate. bzr revid: tta@openerp.com-20130131124841-ej81d0ethz8859r0 --- addons/mrp_repair/mrp_repair.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/addons/mrp_repair/mrp_repair.py b/addons/mrp_repair/mrp_repair.py index 8c43158a876..7bb12b0402a 100644 --- a/addons/mrp_repair/mrp_repair.py +++ b/addons/mrp_repair/mrp_repair.py @@ -20,7 +20,6 @@ ############################################################################## from openerp.osv import fields,osv -from openerp import netsvc from datetime import datetime from dateutil.relativedelta import relativedelta from openerp.tools.translate import _ @@ -314,9 +313,7 @@ class mrp_repair(osv.osv): for repair in self.browse(cr, uid, ids): mrp_line_obj.write(cr, uid, [l.id for l in repair.operations], {'state': 'draft'}) self.write(cr, uid, ids, {'state':'draft'}) - wf_service = netsvc.LocalService("workflow") - for id in ids: - wf_service.trg_create(uid, 'mrp.repair', id, cr) + self.create_workflow(cr, uid, ids) return True def action_confirm(self, cr, uid, ids, *args): @@ -505,7 +502,6 @@ class mrp_repair(osv.osv): """ res = {} move_obj = self.pool.get('stock.move') - wf_service = netsvc.LocalService("workflow") repair_line_obj = self.pool.get('mrp.repair.line') seq_obj = self.pool.get('ir.sequence') pick_obj = self.pool.get('stock.picking') @@ -548,7 +544,7 @@ class mrp_repair(osv.osv): 'tracking_id': False, 'state': 'assigned', }) - wf_service.trg_validate(uid, 'stock.picking', picking, 'button_confirm', cr) + self.registry.signal_button_confirm(cr, uid, [picking]) self.write(cr, uid, [repair.id], {'state': 'done', 'picking_id': picking}) res[repair.id] = picking else: From f63497e12ff9c933706dec07ba13d6432bd7199a Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Thu, 31 Jan 2013 18:36:50 +0530 Subject: [PATCH 075/158] [IMP] hr_expense: cleanup the code for workflow declaration. bzr revid: tta@openerp.com-20130131130650-szwdnjyqiohdimio --- addons/hr_expense/hr_expense.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/addons/hr_expense/hr_expense.py b/addons/hr_expense/hr_expense.py index f32479c2ae2..0b6ec48974b 100644 --- a/addons/hr_expense/hr_expense.py +++ b/addons/hr_expense/hr_expense.py @@ -21,7 +21,6 @@ import time -from openerp import netsvc from openerp.osv import fields, osv from openerp.tools.translate import _ @@ -152,7 +151,6 @@ class hr_expense_expense(osv.osv): account_journal = self.pool.get('account.journal') voucher_obj = self.pool.get('account.voucher') currency_obj = self.pool.get('res.currency') - wkf_service = netsvc.LocalService("workflow") if context is None: context = {} for exp in self.browse(cr, uid, ids, context=context): From d80d06514474fc33a262b4e9a736b67e72cae029 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Thu, 31 Jan 2013 18:41:07 +0530 Subject: [PATCH 076/158] [IMP] hr_payroll_account: use the new signal_xxx method instead of trg_validate. bzr revid: tta@openerp.com-20130131131107-4h42x3g19blw6jzw --- addons/hr_payroll_account/test/hr_payroll_account.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/addons/hr_payroll_account/test/hr_payroll_account.yml b/addons/hr_payroll_account/test/hr_payroll_account.yml index 5abf7d5dffa..ad0197c7905 100644 --- a/addons/hr_payroll_account/test/hr_payroll_account.yml +++ b/addons/hr_payroll_account/test/hr_payroll_account.yml @@ -104,10 +104,8 @@ I want to check cancel button. So I first cancel the sheet then make it set to draft. - !python {model: hr.payslip}: | - import netsvc - wf_service = netsvc.LocalService("workflow") self.cancel_sheet(cr, uid, [ref("hr_payslip_0")], None) - wf_service.trg_validate(uid, 'hr.payslip', ref("hr_payslip_0"), 'draft', cr) + self.signal_draft(cr, uid, [ref("hr_payslip_0")]) - Then I click on the "Confirm" button. - From a4af8609686386d3371289ea24e019a897ca13bd Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 31 Jan 2013 19:15:20 +0100 Subject: [PATCH 077/158] [IMP] introduce a new kind of exception: RedirectWarning (warning with an additional redirection button) bzr revid: abo@openerp.com-20130131181520-q5ol3ngsn93u7hg5 --- openerp/exceptions.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/openerp/exceptions.py b/openerp/exceptions.py index fbf52c7f3a9..46f0a29b1e0 100644 --- a/openerp/exceptions.py +++ b/openerp/exceptions.py @@ -30,6 +30,19 @@ treated as a 'Server error'. class Warning(Exception): pass +class RedirectWarning(Exception): + """ Warning with a possibility to redirect the user instead of simply + discarding the warning message. + """ + def __init__(self, msg, action_id, button_text): + """ + :param int action_id: id of the action required to perform the + redirection + :param string button_text: text to put on the button which will trigger + the redirection + """ + super(RedirectWarning, self).__init__(msg, action_id, button_text) + class AccessDenied(Exception): """ Login/password error. No message, no traceback. """ def __init__(self): From a2d53ee33b23269a3c311daf696d3c919953e4e8 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 31 Jan 2013 19:18:53 +0100 Subject: [PATCH 078/158] [IMP] the implementation of get_option_path(): return a tuple with the full path and the id of the action linked to the given menu xml id bzr revid: abo@openerp.com-20130131181853-mp7r238q0zf5go4l --- openerp/addons/base/res/res_config.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index 32e24238d52..35afafe1ad7 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -597,14 +597,16 @@ class res_config_settings(osv.osv_memory): :param string menu_xml_id: the xml id of the menuitem where the view is located, structured as follows: module_name.menuitem_xml_id (e.g.: "base.menu_sale_config") - :return string: full path to the menuitem - (e.g.: "Settings/Configuration/Sales") + :return tuple: + - t[0]: string: full path to the menuitem + (e.g.: "Settings/Configuration/Sales") + - t[1]: int: id of the menuitem's action """ module_name, menu_xml_id = menu_xml_id.split('.') dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id) ir_ui_menu = self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context) - return ir_ui_menu.complete_name + return (ir_ui_menu.complete_name, ir_ui_menu.action.id) def get_option_name(self, cr, uid, full_field_name, context=None): """ @@ -644,20 +646,25 @@ class res_config_settings(osv.osv_memory): regex_path = r'%\(((?:menu|field):[a-z_\.]*)\)s' # Process the message - # 1/ find the path and/or field references, put them in a list + # 1/ find the menu and/or field references, put them in a list references = re.findall(regex_path, msg, flags=re.I) - # 2/ fetch the path and/or field replacement values - # (full path and human readable field's name) + # 2/ fetch the menu and/or field replacement values (full path and + # human readable field's name) and the action_id if any values = {} + action_id = None + buttontext = None for item in references: ref_type, ref = item.split(':') if ref_type == 'menu': - values[item] = res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context) + values[item], action_id = res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context) + buttontext = _('Go to the configuration panel') elif ref_type == 'field': values[item] = res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context) # 3/ substitute and return the result - return exceptions.Warning(msg % values) - + if (action_id): + return exceptions.RedirectWarning(msg % values, action_id, _('Go to the configuration panel')) + else: + return exceptions.Warning(msg % values) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 62285a48ed6d6ecba3776b994a10ad217d527f31 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 31 Jan 2013 19:29:21 +0100 Subject: [PATCH 079/158] [IMP] add a handler for the new exception RedirectWarning bzr revid: abo@openerp.com-20130131182921-9tv71vzjr2agdusc --- addons/web/static/src/js/chrome.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 1407df4d33f..86d0a20ed20 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -327,6 +327,34 @@ instance.web.ExceptionHandler = { */ instance.web.crash_manager_registry = new instance.web.Registry(); +/** + * Handle redirection warnings, which behave more or less like a regular + * warning, with an additional redirection button. + */ +instance.web.RedirectWarningHandler = instance.web.Dialog.extend(instance.web.ExceptionHandler, { + init: function(parent, error) { + this._super(parent); + this.error = error; + }, + display: function() { + error = this.error; + error.data.message = error.data.arguments[0]; + + instance.web.dialog($('
' + QWeb.render('CrashManager.warning', {error: error}) + '
'), { + title: "OpenERP " + (_.str.capitalize(error.type) || "Warning"), + buttons: [ + {text: _t("Ok"), click: function() { $(this).dialog("close"); }}, + {text: error.data.arguments[2], click: function() { + window.location.href='#action='+error.data.arguments[1]; + $(this).dialog("close"); + }} + ] + }); + this.destroy(); + } +}); +instance.web.crash_manager_registry.add('openerp.exceptions.RedirectWarning', 'instance.web.RedirectWarningHandler'); + instance.web.Loading = instance.web.Widget.extend({ template: _t("Loading"), init: function(parent) { From 0b7fe8278e8050faa6fbd568db2c704fc619254e Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 10:23:11 +0530 Subject: [PATCH 080/158] [IMP] mrp: use the new signal_xxx methods instead of trg_validate. bzr revid: tta@openerp.com-20130201045311-1njirm57d9cd5mff --- addons/mrp/stock.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/addons/mrp/stock.py b/addons/mrp/stock.py index ae7edf54750..1ff121c78bd 100644 --- a/addons/mrp/stock.py +++ b/addons/mrp/stock.py @@ -21,7 +21,6 @@ from openerp.osv import fields from openerp.osv import osv -from openerp import netsvc class StockMove(osv.osv): @@ -45,7 +44,6 @@ class StockMove(osv.osv): move_obj = self.pool.get('stock.move') procurement_obj = self.pool.get('procurement.order') product_obj = self.pool.get('product.product') - wf_service = netsvc.LocalService("workflow") processed_ids = [move.id] if move.product_id.supply_method == 'produce' and move.product_id.procure_method == 'make_to_order': bis = bom_obj.search(cr, uid, [ @@ -90,16 +88,17 @@ class StockMove(osv.osv): 'procure_method': prodobj.procure_method, 'move_id': mid, }) - wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr) + procurement_obj.signal_button_confirm(cr, uid, [proc_id]) + move_obj.write(cr, uid, [move.id], { 'location_dest_id': move.location_id.id, # dummy move for the kit 'auto_validate': True, 'picking_id': False, 'state': 'confirmed' }) - for m in procurement_obj.search(cr, uid, [('move_id','=',move.id)], context): - wf_service.trg_validate(uid, 'procurement.order', m, 'button_confirm', cr) - wf_service.trg_validate(uid, 'procurement.order', m, 'button_wait_done', cr) + procurement_ids = procurement_obj.search(cr, uid, [('move_id','=',move.id)], context) + procurement_obj.signal_button_confirm(cr, uid, procurement_ids) + procurement_obj.signal_button_wait_done(cr, uid, procurement_ids) return processed_ids def action_consume(self, cr, uid, ids, product_qty, location_id=False, context=None): @@ -110,7 +109,6 @@ class StockMove(osv.osv): """ res = [] production_obj = self.pool.get('mrp.production') - wf_service = netsvc.LocalService("workflow") for move in self.browse(cr, uid, ids): move.action_confirm(context) new_moves = super(StockMove, self).action_consume(cr, uid, [move.id], product_qty, location_id, context=context) @@ -118,7 +116,7 @@ class StockMove(osv.osv): for prod in production_obj.browse(cr, uid, production_ids, context=context): if prod.state == 'confirmed': production_obj.force_production(cr, uid, [prod.id]) - wf_service.trg_validate(uid, 'mrp.production', prod.id, 'button_produce', cr) + production_obj.signal_button_produce(cr, uid, production_ids) for new_move in new_moves: if new_move == move.id: #This move is already there in move lines of production order @@ -135,14 +133,13 @@ class StockMove(osv.osv): """ res = [] production_obj = self.pool.get('mrp.production') - wf_service = netsvc.LocalService("workflow") for move in self.browse(cr, uid, ids, context=context): new_moves = super(StockMove, self).action_scrap(cr, uid, [move.id], product_qty, location_id, context=context) #If we are not scrapping our whole move, tracking and lot references must not be removed #self.write(cr, uid, [move.id], {'prodlot_id': False, 'tracking_id': False}) production_ids = production_obj.search(cr, uid, [('move_lines', 'in', [move.id])]) for prod_id in production_ids: - wf_service.trg_validate(uid, 'mrp.production', prod_id, 'button_produce', cr) + production_obj.signal_button_produce(cr, uid, [prod_id]) for new_move in new_moves: production_obj.write(cr, uid, production_ids, {'move_lines': [(4, new_move)]}) res.append(new_move) From 263e0cf4824324d9842cca0688350bee7c726643 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 10:35:51 +0530 Subject: [PATCH 081/158] [IMP] hr_timesheet_invoice: code cleanup unused import. bzr revid: tta@openerp.com-20130201050551-1v45eut2toek9g7x --- addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml | 2 -- .../test/test_hr_timesheet_invoice_no_prod_tax.yml | 2 -- 2 files changed, 4 deletions(-) diff --git a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml index de19ea8fb3a..0896cf7d517 100644 --- a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml +++ b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml @@ -115,6 +115,4 @@ I click on "Create Invoice" button to create Invoice and validate the invoice. - !python {model: hr.timesheet.invoice.create.final}: | - import netsvc - wkf_service = netsvc.LocalService("workflow") res = self.do_create(cr, uid, [ref("hr_timesheet_invoice_create_final_0")], {"active_ids": [ref("account.analytic_agrolait")]}) diff --git a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice_no_prod_tax.yml b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice_no_prod_tax.yml index 68e827e79f1..d00963073f0 100644 --- a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice_no_prod_tax.yml +++ b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice_no_prod_tax.yml @@ -114,6 +114,4 @@ I click on "Create Invoice" button to create Invoice and validate the invoice. - !python {model: hr.timesheet.invoice.create.final}: | - import netsvc - wkf_service = netsvc.LocalService("workflow") res = self.do_create(cr, uid, [ref("hr_timesheet_invoice_create_final_0")], {"active_ids": [ref("account.analytic_agrolait")]}) From ddf3057db54a72991bd06b4d577da3c5ab4a2ab8 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 10:42:33 +0530 Subject: [PATCH 082/158] [IMP] mrp: use the new signal_xxx methods instead of trg_validate. bzr revid: tta@openerp.com-20130201051233-tcegov6upxq1jsqo --- addons/mrp/procurement.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/addons/mrp/procurement.py b/addons/mrp/procurement.py index 8162c3178dc..1f94f0034ad 100644 --- a/addons/mrp/procurement.py +++ b/addons/mrp/procurement.py @@ -24,7 +24,6 @@ from dateutil.relativedelta import relativedelta from openerp.osv import fields from openerp.osv import osv from openerp.tools.translate import _ -from openerp import netsvc class procurement_order(osv.osv): _inherit = 'procurement.order' @@ -87,7 +86,6 @@ class procurement_order(osv.osv): company = self.pool.get('res.users').browse(cr, uid, uid, context).company_id production_obj = self.pool.get('mrp.production') move_obj = self.pool.get('stock.move') - wf_service = netsvc.LocalService("workflow") procurement_obj = self.pool.get('procurement.order') for procurement in procurement_obj.browse(cr, uid, ids, context=context): res_id = procurement.move_id.id @@ -112,7 +110,7 @@ class procurement_order(osv.osv): self.write(cr, uid, [procurement.id], {'state': 'running', 'production_id': produce_id}) bom_result = production_obj.action_compute(cr, uid, [produce_id], properties=[x.id for x in procurement.property_ids]) - wf_service.trg_validate(uid, 'mrp.production', produce_id, 'button_confirm', cr) + production_obj.signal_button_confirm(cr, uid, [produce_id]) if res_id: move_obj.write(cr, uid, [res_id], {'location_id': procurement.location_id.id}) From 191a095164482f7fe91a897a9ba812dd9c153f46 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 10:50:27 +0530 Subject: [PATCH 083/158] [IMP] membership: use the new signal_xxx methods instead of trg_validate. bzr revid: tta@openerp.com-20130201052027-2c0quhoqligc6ag2 --- addons/membership/test/test_membership.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/membership/test/test_membership.yml b/addons/membership/test/test_membership.yml index 357fcbcfc3e..8e8e7887b44 100644 --- a/addons/membership/test/test_membership.yml +++ b/addons/membership/test/test_membership.yml @@ -42,8 +42,8 @@ membership_lines = membership_line_pool.browse(cr, uid, membership_line_ids) assert membership_lines, _('Membership is not registrated.') membership_line = membership_lines[0] - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.invoice', membership_line.account_invoice_id.id, 'invoice_open', cr) + invoice_pool.signal_invoice_open(cr, uid, [membership_line.account_invoice_id.id]) + - | I'm checking "Current membership state" of "Seagate". It is an "Invoiced Member" or not. - From 89d400f824ba89dc45bc6a982b7b74a64a5f29ed Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 11:11:20 +0530 Subject: [PATCH 084/158] [IMP] mrp_repair: use the new signal_xxx methods instead of trg_validate. bzr revid: tta@openerp.com-20130201054120-lzah0vb83w3ff53z --- addons/mrp_repair/wizard/make_invoice.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/addons/mrp_repair/wizard/make_invoice.py b/addons/mrp_repair/wizard/make_invoice.py index a6e93aca064..9442746d68e 100644 --- a/addons/mrp_repair/wizard/make_invoice.py +++ b/addons/mrp_repair/wizard/make_invoice.py @@ -19,7 +19,6 @@ # ############################################################################## -from openerp import netsvc from openerp.osv import fields, osv class make_invoice(osv.osv_memory): @@ -50,9 +49,7 @@ class make_invoice(osv.osv_memory): # We have to trigger the workflow of the given repairs, otherwise they remain 'to be invoiced'. # Note that the signal 'action_invoice_create' will trigger another call to the method 'action_invoice_create', # but that second call will not do anything, since the repairs are already invoiced. - wf_service = netsvc.LocalService("workflow") - for repair_id in context['active_ids']: - wf_service.trg_validate(uid, 'mrp.repair', repair_id, 'action_invoice_create', cr) + order_obj.signal_action_invoice_create(cr, uid, context['active_ids']) form_res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_form') form_id = form_res and form_res[1] or False From 048907a80f9f24986fdba0a0d462adb9dd1e94b1 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 11:38:37 +0530 Subject: [PATCH 085/158] [IMP] sale_mrp: use the new signal_xxx methods instead of trg_validate. bzr revid: tta@openerp.com-20130201060837-6uiv82cobhwjhimg --- addons/sale_mrp/test/sale_mrp.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/addons/sale_mrp/test/sale_mrp.yml b/addons/sale_mrp/test/sale_mrp.yml index 6fd64301af2..c2eff008943 100644 --- a/addons/sale_mrp/test/sale_mrp.yml +++ b/addons/sale_mrp/test/sale_mrp.yml @@ -103,11 +103,8 @@ !python {model: procurement.order}: | sale_order_obj = self.pool.get('sale.order') so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) - import netsvc - wf_service = netsvc.LocalService("workflow") proc_ids = self.search(cr, uid, [('origin','=',so.name)]) - for proc in proc_ids: - wf_service.trg_validate(uid, 'procurement.order',proc,'button_check', cr) + self.signal_button_check(cr, uid, proc_ids) - I verify that a procurement state is "running" - From 3589c008ad440ea18d8f382c590228977af7c70e Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Fri, 1 Feb 2013 11:54:21 +0530 Subject: [PATCH 086/158] [IMP] POS: use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130201062421-luknla6wp3yqxhqm --- addons/point_of_sale/point_of_sale.py | 20 ++++++++----------- addons/point_of_sale/wizard/pos_confirm.py | 4 +--- addons/point_of_sale/wizard/pos_payment.py | 4 +--- addons/point_of_sale/wizard/pos_return.py | 10 +++------- .../wizard/pos_session_opening.py | 4 +--- 5 files changed, 14 insertions(+), 28 deletions(-) diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 970eb1fbed7..9b9e5b951b4 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -27,7 +27,7 @@ import pdb import time import openerp -from openerp import netsvc, tools +from openerp import tools from openerp.osv import fields, osv from openerp.tools.translate import _ @@ -442,8 +442,7 @@ class pos_session(osv.osv): } def _confirm_orders(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") - + for session in self.browse(cr, uid, ids, context=context): order_ids = [order.id for order in session.order_ids if order.state == 'paid'] @@ -457,7 +456,7 @@ class pos_session(osv.osv): _('Error!'), _("You cannot confirm all orders of this session, because they have not the 'paid' status")) else: - wf_service.trg_validate(uid, 'pos.order', order.id, 'done', cr) + self.pool.get('pos.order').signal_done(cr, uid, [order.id]) return True @@ -519,8 +518,7 @@ class pos_order(osv.osv): 'journal': cash_journal.id, }, context=context) order_ids.append(order_id) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'pos.order', order_id, 'paid', cr) + self.signal_paid(cr, uid, [order_id]) return order_ids def unlink(self, cr, uid, ids, context=None): @@ -695,9 +693,8 @@ class pos_order(osv.osv): }, context=context) if line.qty < 0: location_id, output_id = output_id, location_id - - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr) + + self.pool.get('stock.picking').signal_button_confirm(cr, uid, [picking_id]) picking_obj.force_assign(cr, uid, [picking_id], context) return True @@ -707,7 +704,7 @@ class pos_order(osv.osv): """ stock_picking_obj = self.pool.get('stock.picking') for order in self.browse(cr, uid, ids, context=context): - wf_service.trg_validate(uid, 'stock.picking', order.picking_id.id, 'button_cancel', cr) + self.pool.get('stock.picking').signal_button_cancel(cr, uid, [order.picking_id.id]) if stock_picking_obj.browse(cr, uid, order.picking_id.id, context=context).state <> 'cancel': raise osv.except_osv(_('Error!'), _('Unable to cancel the picking.')) self.write(cr, uid, ids, {'state': 'cancel'}, context=context) @@ -803,7 +800,6 @@ class pos_order(osv.osv): return self.write(cr, uid, ids, {'state':'invoiced'}, context=context) def action_invoice(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") inv_ref = self.pool.get('account.invoice') inv_line_ref = self.pool.get('account.invoice.line') product_obj = self.pool.get('product.product') @@ -857,7 +853,7 @@ class pos_order(osv.osv): and [(6, 0, inv_line['invoice_line_tax_id'])] or [] inv_line_ref.create(cr, uid, inv_line, context=context) inv_ref.button_reset_taxes(cr, uid, [inv_id], context=context) - wf_service.trg_validate(uid, 'pos.order', order.id, 'invoice', cr) + self.signal_invoice(cr, uid, [order.id]) if not inv_ids: return {} diff --git a/addons/point_of_sale/wizard/pos_confirm.py b/addons/point_of_sale/wizard/pos_confirm.py index 4dec36685f0..ebc432a846f 100644 --- a/addons/point_of_sale/wizard/pos_confirm.py +++ b/addons/point_of_sale/wizard/pos_confirm.py @@ -19,7 +19,6 @@ # ############################################################################## -from openerp import netsvc from openerp.osv import osv @@ -28,7 +27,6 @@ class pos_confirm(osv.osv_memory): _description = 'Post POS Journal Entries' def action_confirm(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") order_obj = self.pool.get('pos.order') ids = order_obj.search(cr, uid, [('state','=','paid')], context=context) for order in order_obj.browse(cr, uid, ids, context=context): @@ -38,7 +36,7 @@ class pos_confirm(osv.osv_memory): todo = False break if todo: - wf_service.trg_validate(uid, 'pos.order', order.id, 'done', cr) + self.pool.get('pos.order').signal_done(cr, uid, [order.id]) # Check if there is orders to reconcile their invoices ids = order_obj.search(cr, uid, [('state','=','invoiced'),('invoice_id.state','=','open')], context=context) diff --git a/addons/point_of_sale/wizard/pos_payment.py b/addons/point_of_sale/wizard/pos_payment.py index 0a1684ca9ca..5f90f267f7e 100644 --- a/addons/point_of_sale/wizard/pos_payment.py +++ b/addons/point_of_sale/wizard/pos_payment.py @@ -23,7 +23,6 @@ import time import pos_box_entries -from openerp import netsvc from openerp.osv import osv, fields from openerp.tools.translate import _ @@ -67,8 +66,7 @@ class pos_make_payment(osv.osv_memory): order_obj.add_payment(cr, uid, active_id, data, context=context) if order_obj.test_paid(cr, uid, [active_id]): - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'pos.order', active_id, 'paid', cr) + self.pool.get('pos.order').signal_paid(cr, uid, [active_id]) return {'type' : 'ir.actions.act_window_close' } ##self.print_report(cr, uid, ids, context=context) diff --git a/addons/point_of_sale/wizard/pos_return.py b/addons/point_of_sale/wizard/pos_return.py index d6dfdd1e183..f711a2e56ee 100644 --- a/addons/point_of_sale/wizard/pos_return.py +++ b/addons/point_of_sale/wizard/pos_return.py @@ -19,7 +19,6 @@ # ############################################################################## -from openerp import netsvc from openerp.osv import osv,fields from openerp.tools.translate import _ import time @@ -104,7 +103,6 @@ class pos_return(osv.osv_memory): property_obj= self.pool.get("ir.property") uom_obj =self. pool.get('product.uom') statementl_obj = self.pool.get('account.bank.statement.line') - wf_service = netsvc.LocalService("workflow") #Todo :Need to clean the code if active_id: data = self.browse(cr, uid, ids, context=context)[0] @@ -157,7 +155,7 @@ class pos_return(osv.osv_memory): 'amount': -amount, }) order_obj.write(cr,uid, [active_id,new_order], {'state': 'done'}) - wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr) + self.pool.get('stock.picking').signal_button_confirm(cr, uid, [new_picking]) picking_obj.force_assign(cr, uid, [new_picking], context) act = { 'domain': "[('id', 'in', ["+str(new_order)+"])]", @@ -200,7 +198,6 @@ class add_product(osv.osv_memory): date_cur=time.strftime('%Y-%m-%d') uom_obj = self.pool.get('product.uom') prod_obj=self.pool.get('product.product') - wf_service = netsvc.LocalService("workflow") order_obj.add_product(cr, uid, active_id, data['product_id'], data['quantity'], context=context) for order_id in order_obj.browse(cr, uid, [active_id], context=context): @@ -232,7 +229,7 @@ class add_product(osv.osv_memory): 'date':date_cur }) - wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr) + self.pool.get('stock.picking').signal_button_confirm(cr, uid, [new_picking]) picking_obj.force_assign(cr, uid, [new_picking], context) order_obj.write(cr,uid,active_id,{'picking_id':new_picking}) @@ -265,7 +262,6 @@ class add_product(osv.osv_memory): if return_id: data = return_boj.read(cr,uid,return_id,[])[0] - wf_service = netsvc.LocalService("workflow") self_data = self.browse(cr, uid, ids, context=context)[0] order_obj.add_product(cr, uid, active_ids[0], self_data.product_id.id, self_data.quantity, context=context) @@ -306,7 +302,7 @@ class add_product(osv.osv_memory): 'name':'%s (return)' % order_id.name, 'date':date_cur, }) - wf_service.trg_validate(uid, 'stock.picking',new_picking,'button_confirm', cr) + self.poolget('stock.picking').signal_button_confirm(cr, uid, [new_picking]) picking_obj.force_assign(cr, uid, [new_picking], context) obj=order_obj.browse(cr,uid, active_ids[0]) context.update({'return':'return'}) diff --git a/addons/point_of_sale/wizard/pos_session_opening.py b/addons/point_of_sale/wizard/pos_session_opening.py index 1aa4cb702c4..e0135de0cdb 100644 --- a/addons/point_of_sale/wizard/pos_session_opening.py +++ b/addons/point_of_sale/wizard/pos_session_opening.py @@ -1,6 +1,5 @@ #!/usr/bin/env python -from openerp import netsvc from openerp.osv import osv, fields from openerp.tools.translate import _ @@ -37,9 +36,8 @@ class pos_session_opening(osv.osv_memory): } def open_existing_session_cb_close(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") wizard = self.browse(cr, uid, ids[0], context=context) - wf_service.trg_validate(uid, 'pos.session', wizard.pos_session_id.id, 'cashbox_control', cr) + self.pool.get('pos.session').signal_cashbox_control(cr, uid, [wizard.pos_session_id.id]) return self.open_session_cb(cr, uid, ids, context) def open_session_cb(self, cr, uid, ids, context=None): From b5a9ccbe11af41f0b11e4b07ea6e10eecce72d69 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 12:17:40 +0530 Subject: [PATCH 087/158] [IMP] account: use the new signal_xxx methods instead of trg_validate and also update code with create_workflow and delete_workflow feature. bzr revid: tta@openerp.com-20130201064740-wxigbf179uf6dnnt --- addons/account/account_invoice.py | 10 +++------- addons/account/wizard/account_state_open.py | 3 +-- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index 250a0446534..d7b2052305b 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -23,7 +23,6 @@ import time from lxml import etree import openerp.addons.decimal_precision as dp -from openerp import netsvc from openerp import pooler from openerp.osv import fields, osv, orm from openerp.tools.translate import _ @@ -80,11 +79,10 @@ class account_invoice(osv.osv): def _reconciled(self, cr, uid, ids, name, args, context=None): res = {} - wf_service = netsvc.LocalService("workflow") for inv in self.browse(cr, uid, ids, context=context): res[inv.id] = self.test_paid(cr, uid, [inv.id]) if not res[inv.id] and inv.state == 'paid': - wf_service.trg_validate(uid, 'account.invoice', inv.id, 'open_test', cr) + self.signal_open_test(cr, uid, [inv.id]) return res def _get_reference_type(self, cr, uid, context=None): @@ -638,10 +636,8 @@ class account_invoice(osv.osv): # go from canceled state to draft state def action_cancel_draft(self, cr, uid, ids, *args): self.write(cr, uid, ids, {'state':'draft'}) - wf_service = netsvc.LocalService("workflow") - for inv_id in ids: - wf_service.trg_delete(uid, 'account.invoice', inv_id, cr) - wf_service.trg_create(uid, 'account.invoice', inv_id, cr) + self.delete_workflow(cr, uid, ids) + self.create_workflow(cr, uid, ids) return True # Workflow stuff diff --git a/addons/account/wizard/account_state_open.py b/addons/account/wizard/account_state_open.py index b2cbdc4961b..5d0ae6b66bd 100644 --- a/addons/account/wizard/account_state_open.py +++ b/addons/account/wizard/account_state_open.py @@ -35,8 +35,7 @@ class account_state_open(osv.osv_memory): data_inv = obj_invoice.browse(cr, uid, context['active_ids'][0], context=context) if data_inv.reconciled: raise osv.except_osv(_('Warning!'), _('Invoice is already reconciled.')) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.invoice', context['active_ids'][0], 'open_test', cr) + obj_invoice.signal_open_test(cr, uid, context['active_ids'][0]) return {'type': 'ir.actions.act_window_close'} account_state_open() From 27bd0dbfef0802bc621e5b80a82fcbbeea4a7ebe Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Fri, 1 Feb 2013 12:29:48 +0530 Subject: [PATCH 088/158] [FIX] sale: did some changes bzr revid: cha@tinyerp.com-20130201065948-oae060lc7f25z1b3 --- addons/sale/sale.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 93556a3e7d5..c8ccfed1cba 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -418,7 +418,7 @@ class sale_order(osv.osv): This function prints the sales order and mark it as sent, so that we can see more easily the next step of the workflow ''' assert len(ids) == 1, 'This option should only be used for a single id at a time' - self.signal_quotation_sent(cr, uid, [ids[0]]) + self.signal_quotation_sent(cr, uid, ids) datas = { 'model': 'sale.order', 'ids': ids, @@ -986,7 +986,7 @@ class mail_compose_message(osv.Model): context = context or {} if context.get('default_model') == 'sale.order' and context.get('default_res_id') and context.get('mark_so_as_sent'): context = dict(context, mail_post_autofollow=True) - self.pool.get('sale.order').signal_quotation_sent(cr, uid, context['default_res_id']) + self.pool.get('sale.order').signal_quotation_sent(cr, uid, [context['default_res_id']]) return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 0b2a72f0a8e2ef74f53683fddeb7eddfaf60b9d4 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Fri, 1 Feb 2013 12:36:28 +0530 Subject: [PATCH 089/158] [FIX] sale: did some changes bzr revid: cha@tinyerp.com-20130201070628-utvt502wrg5ynv44 --- addons/sale/wizard/sale_line_invoice.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/sale/wizard/sale_line_invoice.py b/addons/sale/wizard/sale_line_invoice.py index 4b18c9a4b39..fe8432fc7db 100644 --- a/addons/sale/wizard/sale_line_invoice.py +++ b/addons/sale/wizard/sale_line_invoice.py @@ -102,7 +102,7 @@ class sale_order_line_make_invoice(osv.osv_memory): flag = False break if flag: - sales_order_obj.signal_manual_invoice(cr, uid, line.order_id.id) + sales_order_obj.signal_manual_invoice(cr, uid, [line.order_id.id]) sales_order_obj.write(cr, uid, [line.order_id.id], {'state': 'progress'}) if not invoices: From 75ffe3c712a8aabb6f8c1d00ed6642ba45439c4b Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 12:48:33 +0530 Subject: [PATCH 090/158] [IMP] account: use the new signal_xxx methods instead of trg_validate and also update code with create_workflow and delete_workflow feature. bzr revid: tta@openerp.com-20130201071833-x48y4zloat1diqa5 --- addons/account/wizard/account_invoice_refund.py | 5 +---- addons/account/wizard/account_invoice_state.py | 16 +++++++--------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/addons/account/wizard/account_invoice_refund.py b/addons/account/wizard/account_invoice_refund.py index 54d6c38a353..68937004dbc 100644 --- a/addons/account/wizard/account_invoice_refund.py +++ b/addons/account/wizard/account_invoice_refund.py @@ -23,7 +23,6 @@ import time from openerp.osv import fields, osv from openerp.tools.translate import _ -from openerp import netsvc class account_invoice_refund(osv.osv_memory): @@ -90,7 +89,6 @@ class account_invoice_refund(osv.osv_memory): account_m_line_obj = self.pool.get('account.move.line') mod_obj = self.pool.get('ir.model.data') act_obj = self.pool.get('ir.actions.act_window') - wf_service = netsvc.LocalService('workflow') inv_tax_obj = self.pool.get('account.invoice.tax') inv_line_obj = self.pool.get('account.invoice.line') res_users_obj = self.pool.get('res.users') @@ -161,8 +159,7 @@ class account_invoice_refund(osv.osv_memory): to_reconcile_ids[line.account_id.id] = [line.id] if type(line.reconcile_id) != osv.orm.browse_null: reconcile_obj.unlink(cr, uid, line.reconcile_id.id) - wf_service.trg_validate(uid, 'account.invoice', \ - refund.id, 'invoice_open', cr) + inv_obj.signal_invoice_open(cr, uid, [refund.id]) refund = inv_obj.browse(cr, uid, refund_id[0], context=context) for tmpline in refund.move_id.line_id: if tmpline.account_id.id == inv.account_id.id: diff --git a/addons/account/wizard/account_invoice_state.py b/addons/account/wizard/account_invoice_state.py index f79b4c046e3..9fab19ff42c 100644 --- a/addons/account/wizard/account_invoice_state.py +++ b/addons/account/wizard/account_invoice_state.py @@ -21,7 +21,6 @@ from openerp.osv import osv from openerp.tools.translate import _ -from openerp import netsvc from openerp import pooler class account_invoice_confirm(osv.osv_memory): @@ -33,16 +32,16 @@ class account_invoice_confirm(osv.osv_memory): _description = "Confirm the selected invoices" def invoice_confirm(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService('workflow') if context is None: context = {} pool_obj = pooler.get_pool(cr.dbname) - data_inv = pool_obj.get('account.invoice').read(cr, uid, context['active_ids'], ['state'], context=context) - + account_invoice_obj = pool_obj.get('account.invoice') + data_inv = account_invoice_obj.read(cr, uid, context['active_ids'], ['state'], context=context) for record in data_inv: if record['state'] not in ('draft','proforma','proforma2'): raise osv.except_osv(_('Warning!'), _("Selected invoice(s) cannot be confirmed as they are not in 'Draft' or 'Pro-Forma' state.")) - wf_service.trg_validate(uid, 'account.invoice', record['id'], 'invoice_open', cr) + account_invoice_obj.signal_invoice_open(cr, uid, [ record['id'] ]) + return {'type': 'ir.actions.act_window_close'} account_invoice_confirm() @@ -59,14 +58,13 @@ class account_invoice_cancel(osv.osv_memory): def invoice_cancel(self, cr, uid, ids, context=None): if context is None: context = {} - wf_service = netsvc.LocalService('workflow') pool_obj = pooler.get_pool(cr.dbname) - data_inv = pool_obj.get('account.invoice').read(cr, uid, context['active_ids'], ['state'], context=context) - + account_invoice_obj = pool_obj.get('account.invoice') + data_inv = account_invoice_obj.read(cr, uid, context['active_ids'], ['state'], context=context) for record in data_inv: if record['state'] in ('cancel','paid'): raise osv.except_osv(_('Warning!'), _("Selected invoice(s) cannot be cancelled as they are already in 'Cancelled' or 'Done' state.")) - wf_service.trg_validate(uid, 'account.invoice', record['id'], 'invoice_cancel', cr) + account_invoice_obj.signal_invoice_cancel(cr , uid, [record['id']]) return {'type': 'ir.actions.act_window_close'} account_invoice_cancel() From f3c4e973cd74c3be9f47cd254cef69dbbb652c80 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Fri, 1 Feb 2013 14:14:04 +0530 Subject: [PATCH 091/158] [FIX] hr_holidays: did some changes. bzr revid: cha@tinyerp.com-20130201084404-uanxza6nx80l8pn9 --- addons/hr_holidays/hr_holidays.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index ce30951f7a9..c81c4062a73 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -27,7 +27,6 @@ from itertools import groupby from operator import attrgetter, itemgetter import math -from openerp import netsvc from openerp import tools from openerp.osv import fields, osv from openerp.tools.translate import _ @@ -304,9 +303,8 @@ class hr_holidays(osv.osv): 'manager_id': False, 'manager_id2': False, }) - for id in ids: - self.delete_workflow(cr, uid, [id]) - self.create_workflow(cr, uid, [id]) + self.delete_workflow(cr, uid, ids) + self.create_workflow(cr, uid, ids) to_unlink = [] for record in self.browse(cr, uid, ids, context=context): for record2 in record.linked_request_ids: From 19685c35a592408b223b8a6b1a7503c6ecb2cd26 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 14:36:21 +0530 Subject: [PATCH 092/158] [FIX] code corrected. bzr revid: tta@openerp.com-20130201090621-sym8rxhgofk6wg9p --- addons/mrp/mrp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index b8081f461d6..9f2d651d3d0 100644 --- a/addons/mrp/mrp.py +++ b/addons/mrp/mrp.py @@ -991,7 +991,7 @@ class mrp_production(osv.osv): destination_location_id=source_location_id, context=context) self._make_production_line_procurement(cr, uid, line, shipment_move_id, context=context) - self.registry('stock.picking').signal_button_confirm(cr, uid, [shipment_id]) + self.pool.get('stock.picking').signal_button_confirm(cr, uid, [shipment_id]) production.write({'state':'confirmed'}, context=context) return shipment_id From 95a8d5759e6b033978af444813d1436828e640ea Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Fri, 1 Feb 2013 14:53:07 +0530 Subject: [PATCH 093/158] [FIX] hr_timesheet_sheet: did some changes. bzr revid: cha@tinyerp.com-20130201092307-yajxn97wnhz3xofj --- addons/hr_timesheet_sheet/hr_timesheet_sheet.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py index 5948c02bc5e..d4e71cedbf5 100644 --- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py +++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py @@ -190,8 +190,7 @@ class hr_timesheet_sheet(osv.osv): def action_set_to_draft(self, cr, uid, ids, *args): self.write(cr, uid, ids, {'state': 'draft'}) - for id in ids: - self.create_workflow(cr, uid, [id]) + self.create_workflow(cr, uid, ids) return True def name_get(self, cr, uid, ids, context=None): From aded1b1840f3f98e68fcea07cdbc9cf99b4c57e1 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 15:20:35 +0530 Subject: [PATCH 094/158] [FIX] code corrected for mrp.repair. bzr revid: tta@openerp.com-20130201095035-2hbkwbc9npxf74kr --- addons/mrp_repair/mrp_repair.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mrp_repair/mrp_repair.py b/addons/mrp_repair/mrp_repair.py index 7bb12b0402a..6c3f0ce21e1 100644 --- a/addons/mrp_repair/mrp_repair.py +++ b/addons/mrp_repair/mrp_repair.py @@ -544,7 +544,7 @@ class mrp_repair(osv.osv): 'tracking_id': False, 'state': 'assigned', }) - self.registry.signal_button_confirm(cr, uid, [picking]) + pick_obj.signal_button_confirm(cr, uid, [picking]) self.write(cr, uid, [repair.id], {'state': 'done', 'picking_id': picking}) res[repair.id] = picking else: From c2ffb389a3d6125461e63f0c85193931a9bdb76f Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Fri, 1 Feb 2013 17:36:10 +0530 Subject: [PATCH 095/158] [FIX] sale: Made some changes bzr revid: cha@tinyerp.com-20130201120610-eotziutfkhsgd77o --- addons/sale/test/manual_order_policy.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/sale/test/manual_order_policy.yml b/addons/sale/test/manual_order_policy.yml index 905f04b01f5..d138e917a4d 100644 --- a/addons/sale/test/manual_order_policy.yml +++ b/addons/sale/test/manual_order_policy.yml @@ -42,7 +42,9 @@ - !python {model: sale.order}: | so = self.browse(cr, uid, ref("sale_order_2")) - self.pool.get('account.invoice').signal_invoice_open(cr, uid, so.invoice_ids) + account_invoice_obj = self.pool.get('account.invoice') + for invoice in so.invoice_ids: + account_invoice_obj.signal_invoice_open(cr, uid, [invoice.id]) - I pay the invoice. - From a500b5d24942ee1bc4b1746793fef54f3d800dab Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Fri, 1 Feb 2013 18:49:55 +0530 Subject: [PATCH 096/158] [FIX] sale: Made some changes bzr revid: cha@tinyerp.com-20130201131955-nmcaji8bkblipxo3 --- addons/sale/test/cancel_order.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/sale/test/cancel_order.yml b/addons/sale/test/cancel_order.yml index d9d76f19935..982452bc50e 100644 --- a/addons/sale/test/cancel_order.yml +++ b/addons/sale/test/cancel_order.yml @@ -52,7 +52,9 @@ - !python {model: sale.order}: | invoice_ids = self.browse(cr, uid, ref("sale_order_8")).invoice_ids - self.pool.get('account.invoice').signal_invoice_cancel(cr, uid, invoice_ids) + account_invoice_obj = self.pool.get('account.invoice') + for invoice in invoice_ids: + account_invoice_obj.signal_invoice_cancel(cr, uid, [invoice.id]) - I check order status in "Invoice Exception" and related invoice is in cancel state. - From df29fec0906661bf4cd58f8e2d631b088c8c6193 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Fri, 1 Feb 2013 19:04:40 +0530 Subject: [PATCH 097/158] [FIX] sale_stock: Made some changes bzr revid: cha@tinyerp.com-20130201133440-fgo2lj4q22i4dpfb --- addons/sale_stock/sale_stock.py | 3 ++- addons/sale_stock/test/picking_order_policy.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py index f63282b7a16..b121bf425b6 100644 --- a/addons/sale_stock/sale_stock.py +++ b/addons/sale_stock/sale_stock.py @@ -208,8 +208,9 @@ class sale_order(osv.osv): proc_ids = proc_obj.search(cr, uid, [('move_id', '=', mov.id)]) if proc_ids: self.pool.get('procurement.order').signal_button_check(cr, uid, proc_ids) + stock_obj = self.pool.get('stock.picking') for r in self.read(cr, uid, ids, ['picking_ids']): - self.pool.get('stock.picking').signal_button_cancel(cr, uid, r['picking_ids']) + stock_obj.signal_button_cancel(cr, uid, r['picking_ids']) return super(sale_order, self).action_cancel(cr, uid, ids, context=context) def action_wait(self, cr, uid, ids, context=None): diff --git a/addons/sale_stock/test/picking_order_policy.yml b/addons/sale_stock/test/picking_order_policy.yml index a28326598ac..406aaf0bf8a 100644 --- a/addons/sale_stock/test/picking_order_policy.yml +++ b/addons/sale_stock/test/picking_order_policy.yml @@ -133,8 +133,9 @@ - !python {model: sale.order}: | so = self.browse(cr, uid, ref("sale.sale_order_6")) + account_invoice_obj = self.pool.get('account.invoice') for invoice in so.invoice_ids: - self.pool.get('account.invoice').signal_invoice_open(cr, uid, [invoice.id]) + account_invoice_obj.signal_invoice_open(cr, uid, [invoice.id]) - I pay the invoice - From 8d5340a27d818929a7ce3e008cff7328ac0d260d Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Fri, 1 Feb 2013 17:50:15 +0100 Subject: [PATCH 098/158] [IMP] fix a typo, even if it doesn't matter (odo would probably say something like 'stop acting nitpicky !' ;)) bzr revid: abo@openerp.com-20130201165015-l3dtvil3u59kqzf7 --- openerp/tests/addons/test_exceptions/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/tests/addons/test_exceptions/models.py b/openerp/tests/addons/test_exceptions/models.py index 45f0e6dbd47..03788159bf8 100644 --- a/openerp/tests/addons/test_exceptions/models.py +++ b/openerp/tests/addons/test_exceptions/models.py @@ -29,5 +29,5 @@ class m(openerp.osv.osv.Model): raise Exception('AccessDenied') def generate_undefined(self, cr, uid, ids, context=None): - self.surely_undefined_sumbol + self.surely_undefined_symbol # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 195be49479f93239849cd18c8807425e1fc983e7 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Fri, 1 Feb 2013 18:17:42 +0100 Subject: [PATCH 099/158] [IMP] add a new test for the new exception type bzr revid: abo@openerp.com-20130201171742-axfcg7y99uxpersw --- openerp/exceptions.py | 2 ++ openerp/tests/addons/test_exceptions/models.py | 4 ++++ openerp/tests/addons/test_exceptions/view.xml | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/openerp/exceptions.py b/openerp/exceptions.py index 46f0a29b1e0..41fff85010c 100644 --- a/openerp/exceptions.py +++ b/openerp/exceptions.py @@ -25,6 +25,8 @@ This module defines a few exception types. Those types are understood by the RPC layer. Any other exception type bubbling until the RPC layer will be treated as a 'Server error'. +If you consider introducing new exceptions, check out the test_exceptions +addon. """ class Warning(Exception): diff --git a/openerp/tests/addons/test_exceptions/models.py b/openerp/tests/addons/test_exceptions/models.py index 03788159bf8..78f0e182b48 100644 --- a/openerp/tests/addons/test_exceptions/models.py +++ b/openerp/tests/addons/test_exceptions/models.py @@ -19,6 +19,9 @@ class m(openerp.osv.osv.Model): def generate_warning(self, cr, uid, ids, context=None): raise openerp.exceptions.Warning('description') + def generate_redirect_warning(self, cr, uid, ids, context=None): + raise openerp.exceptions.RedirectWarning('description', self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base', 'action_client_base_menu'), 'go to the redirection') + def generate_access_denied(self, cr, uid, ids, context=None): raise openerp.exceptions.AccessDenied() @@ -30,4 +33,5 @@ class m(openerp.osv.osv.Model): def generate_undefined(self, cr, uid, ids, context=None): self.surely_undefined_symbol + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/tests/addons/test_exceptions/view.xml b/openerp/tests/addons/test_exceptions/view.xml index 180029e739a..0c8e373a278 100644 --- a/openerp/tests/addons/test_exceptions/view.xml +++ b/openerp/tests/addons/test_exceptions/view.xml @@ -21,6 +21,10 @@ From 4af287772553b2b677fc1171233149e723193998 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Wed, 13 Feb 2013 16:27:56 +0100 Subject: [PATCH 138/158] [IMP] doc: add missing documentation on new methods bzr revid: rco@openerp.com-20130213152756-asq8oalkorn4nr1b --- doc/orm-methods.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/orm-methods.rst b/doc/orm-methods.rst index 6085a12c50b..fb8c461761e 100644 --- a/doc/orm-methods.rst +++ b/doc/orm-methods.rst @@ -27,9 +27,19 @@ way.) This is used instead of ``LocalService('workflow').trg_delete()``. +.. automethod:: BaseModel.step_workflow + :noindex: + + This is used instead of ``LocalService('workflow').trg_write()``. + .. automethod:: BaseModel.redirect_workflow :noindex: +.. automethod:: BaseModel.signal_workflow + :noindex: + + This is used instead of ``LocalService('workflow').trg_validate()``. + .. method:: BaseModel.signal_xxx(cr, uid, ids) :noindex: From b409abe3ad591470c7c047d9045ae44357922da6 Mon Sep 17 00:00:00 2001 From: csn-openerp Date: Wed, 13 Feb 2013 16:41:37 +0100 Subject: [PATCH 139/158] [FIX]procurement : put back size limit on field message since some db in saas were not update and we need to truncate to size=124 for those bzr revid: csn@openerp.com-20130213154137-4jl6h3c8dn4xpguf --- addons/procurement/procurement.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py index 1ccc08236c7..59f624ed712 100644 --- a/addons/procurement/procurement.py +++ b/addons/procurement/procurement.py @@ -103,7 +103,7 @@ class procurement_order(osv.osv): readonly=True, required=True, help="If you encode manually a Procurement, you probably want to use" \ " a make to order method."), 'note': fields.text('Note'), - 'message': fields.char('Latest error', help="Exception occurred while computing procurement orders."), + 'message': fields.char('Latest error', size=124, help="Exception occurred while computing procurement orders."), 'state': fields.selection([ ('draft','Draft'), ('cancel','Cancelled'), From e72d321e01ac24e3aed8bc8b7c9f18fba1db42dd Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 13 Feb 2013 17:36:18 +0100 Subject: [PATCH 140/158] [FIX] many2many in kanban templates are mixed up in some cases lp bug: https://launchpad.net/bugs/1121902 fixed bzr revid: fme@openerp.com-20130213163618-sm1ces6h1wm7hsjn --- addons/web_kanban/static/src/js/kanban.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index 23fac79736b..53279d3ce20 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -134,7 +134,9 @@ instance.web_kanban.KanbanView = instance.web.View.extend({ switch (node.tag) { case 'field': if (this.fields_view.fields[node.attrs.name].type === 'many2many') { - this.many2manys.push(node.attrs.name); + if (_.indexOf(this.many2manys, node.attrs.name) < 0) { + this.many2manys.push(node.attrs.name); + } node.tag = 'div'; node.attrs['class'] = (node.attrs['class'] || '') + ' oe_form_field oe_tags'; } else { From 6540500f6a741372a34c1eeaf60735d88a917fdb Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Thu, 14 Feb 2013 04:37:42 +0000 Subject: [PATCH 141/158] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20130214043742-09n43fevg1oo3lrw --- addons/auth_crypt/i18n/ru.po | 75 +++--------- addons/auth_oauth_signup/i18n/ru.po | 23 ++++ addons/mail/i18n/hu.po | 115 +++++++++++------- addons/marketing_campaign_crm_demo/i18n/hu.po | 78 ++++++++++-- 4 files changed, 175 insertions(+), 116 deletions(-) create mode 100644 addons/auth_oauth_signup/i18n/ru.po diff --git a/addons/auth_crypt/i18n/ru.po b/addons/auth_crypt/i18n/ru.po index 9701a6ba556..20afe17ee9e 100644 --- a/addons/auth_crypt/i18n/ru.po +++ b/addons/auth_crypt/i18n/ru.po @@ -1,75 +1,28 @@ # Russian translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. +# FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-03 16:03+0000\n" -"PO-Revision-Date: 2012-12-07 08:15+0000\n" -"Last-Translator: Denis Karataev \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-02-13 09:46+0000\n" +"Last-Translator: FULL NAME \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-08 04:59+0000\n" -"X-Generator: Launchpad (build 16341)\n" +"X-Launchpad-Export-Date: 2013-02-14 04:37+0000\n" +"X-Generator: Launchpad (build 16491)\n" -#. module: base_crypt -#: model:ir.model,name:base_crypt.model_res_users +#. module: auth_crypt +#: field:res.users,password_crypt:0 +msgid "Encrypted Password" +msgstr "Зашифрованный пароль" + +#. module: auth_crypt +#: model:ir.model,name:auth_crypt.model_res_users msgid "Users" msgstr "Пользователи" - -#~ msgid "res.users" -#~ msgstr "res.users" - -#, python-format -#~ msgid "Error" -#~ msgstr "Error" - -#, python-format -#~ msgid "Please specify the password !" -#~ msgstr "Необходимо указать пароль!" - -#~ msgid "The chosen company is not in the allowed companies for this user" -#~ msgstr "" -#~ "Выбранная организация отсутствует в списке разрешённых для этого пользователя" - -#~ msgid "You can not have two users with the same login !" -#~ msgstr "Не может быть двух пользователей с одинаковым именем пользователя!" - -#~ msgid "Base - Password Encryption" -#~ msgstr "Основной - Шифрование паролей" - -#~ msgid "" -#~ "This module replaces the cleartext password in the database with a password " -#~ "hash,\n" -#~ "preventing anyone from reading the original password.\n" -#~ "For your existing user base, the removal of the cleartext passwords occurs " -#~ "the first time\n" -#~ "a user logs into the database, after installing base_crypt.\n" -#~ "After installing this module it won't be possible to recover a forgotten " -#~ "password for your\n" -#~ "users, the only solution is for an admin to set a new password.\n" -#~ "\n" -#~ "Note: installing this module does not mean you can ignore basic security " -#~ "measures,\n" -#~ "as the password is still transmitted unencrypted on the network (by the " -#~ "client),\n" -#~ "unless you are using a secure protocol such as XML-RPCS.\n" -#~ " " -#~ msgstr "" -#~ "Этот модуль заменяет текстовые пароли в базе данных на их хэши,\n" -#~ "предотвращая хищение оригинальных паролей.\n" -#~ "Для существующей базы пользователей, удаление текстового пароля происходит " -#~ "при\n" -#~ "первом входе пользователя после установки base_crypt.\n" -#~ "После установки этого модуля станет невозможно восстановление пароля \n" -#~ "пользователя. Возможна будет только замена пароля.\n" -#~ "\n" -#~ "Прим.: установка этого модуля не избавляет от необходимости соблюдать\n" -#~ "базовые меры безопасности, поскольку пароли всё ещё передаются открытым\n" -#~ "текстом по сети, если не используется безопасный протокол вроде XML-RPCS.\n" -#~ " " diff --git a/addons/auth_oauth_signup/i18n/ru.po b/addons/auth_oauth_signup/i18n/ru.po new file mode 100644 index 00000000000..d1c4716c71c --- /dev/null +++ b/addons/auth_oauth_signup/i18n/ru.po @@ -0,0 +1,23 @@ +# Russian translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-02-13 09:46+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-02-14 04:37+0000\n" +"X-Generator: Launchpad (build 16491)\n" + +#. module: auth_oauth_signup +#: model:ir.model,name:auth_oauth_signup.model_res_users +msgid "Users" +msgstr "Пользователи" diff --git a/addons/mail/i18n/hu.po b/addons/mail/i18n/hu.po index 3d3117c1b51..c7781d6eeef 100644 --- a/addons/mail/i18n/hu.po +++ b/addons/mail/i18n/hu.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-02-12 17:52+0000\n" +"PO-Revision-Date: 2013-02-13 13:32+0000\n" "Last-Translator: krnkris \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-02-13 04:36+0000\n" +"X-Launchpad-Export-Date: 2013-02-14 04:37+0000\n" "X-Generator: Launchpad (build 16491)\n" #. module: mail @@ -906,12 +906,12 @@ msgstr "Alcsoportba rakott üzenetek" #. module: mail #: field:mail.alias,alias_user_id:0 msgid "Owner" -msgstr "" +msgstr "Tulajdonos" #. module: mail #: model:ir.model,name:mail.model_res_users msgid "Users" -msgstr "" +msgstr "Felhasználók" #. module: mail #: model:ir.model,name:mail.model_mail_message @@ -920,25 +920,25 @@ msgstr "" #: field:mail.notification,message_id:0 #: field:mail.wizard.invite,message:0 msgid "Message" -msgstr "" +msgstr "Üzenet" #. module: mail #: help:mail.followers,res_id:0 #: help:mail.wizard.invite,res_id:0 msgid "Id of the followed resource" -msgstr "" +msgstr "A követett forrás ID azonosítója" #. module: mail #: field:mail.compose.message,body:0 #: field:mail.message,body:0 msgid "Contents" -msgstr "" +msgstr "Tartalmak" #. module: mail #: model:ir.actions.act_window,name:mail.action_view_mail_alias #: model:ir.ui.menu,name:mail.mail_alias_menu msgid "Aliases" -msgstr "" +msgstr "Álnevek" #. module: mail #: help:mail.message.subtype,description:0 @@ -946,40 +946,44 @@ msgid "" "Description that will be added in the message posted for this subtype. If " "void, the name will be added instead." msgstr "" +"Leírás ami hozzá lesz adva az altípusnak elküldendő üzenethez. Ha üres, a " +"név lesz hozzáadva helyette." #. module: mail #: field:mail.compose.message,vote_user_ids:0 #: field:mail.message,vote_user_ids:0 msgid "Votes" -msgstr "" +msgstr "Szavazatok" #. module: mail #: view:mail.group:0 msgid "Group" -msgstr "" +msgstr "Csoport" #. module: mail #: help:mail.compose.message,starred:0 #: help:mail.message,starred:0 msgid "Current user has a starred notification linked to this message" msgstr "" +"A jelenlegi felhasználónak van egy kicsillagozott értesítése mely hozzá van " +"rendelve az üzenethez." #. module: mail #: field:mail.group,public:0 msgid "Privacy" -msgstr "" +msgstr "Adatvédelem" #. module: mail #: view:mail.mail:0 msgid "Notification" -msgstr "" +msgstr "Értesítés" #. module: mail #. openerp-web #: code:addons/mail/static/src/js/mail.js:585 #, python-format msgid "Please complete partner's informations" -msgstr "" +msgstr "Kérem egészítse ki a partner információkat" #. module: mail #: view:mail.wizard.invite:0 @@ -994,7 +998,7 @@ msgstr "A kijelölt elemek követői és" #. module: mail #: field:mail.alias,alias_force_thread_id:0 msgid "Record Thread ID" -msgstr "" +msgstr "Összefűzési azonosító ID elmentése" #. module: mail #: model:ir.ui.menu,name:mail.mail_group_root @@ -1013,12 +1017,21 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Nem található üzenet és nem lett még elküldve üzenet.\n" +"

\n" +" Kattintson felül jobbra az ikonra egy üzenet " +"összeállításához. Ez az\n" +" üzenet lesz elküldve e-mailként, ha ez egy belső " +"kapcsolat.\n" +"

\n" +" " #. module: mail #: view:mail.mail:0 #: field:mail.mail,state:0 msgid "Status" -msgstr "" +msgstr "Állapot" #. module: mail #: view:mail.mail:0 @@ -1029,13 +1042,13 @@ msgstr "Kimenő" #. module: mail #: selection:res.partner,notification_email_send:0 msgid "All feeds" -msgstr "" +msgstr "Összes betáplálás" #. module: mail #: help:mail.compose.message,record_name:0 #: help:mail.message,record_name:0 msgid "Name get of the related document." -msgstr "" +msgstr "A név az ide vonatkozó dokumentumról levéve." #. module: mail #: model:ir.actions.act_window,name:mail.action_view_notifications @@ -1046,12 +1059,12 @@ msgstr "" #: field:mail.message,notification_ids:0 #: view:mail.notification:0 msgid "Notifications" -msgstr "" +msgstr "Értesítések" #. module: mail #: view:mail.alias:0 msgid "Search Alias" -msgstr "" +msgstr "Álnév keresés" #. module: mail #: help:mail.alias,alias_force_thread_id:0 @@ -1060,6 +1073,9 @@ msgid "" "attached, even if they did not reply to it. If set, this will disable the " "creation of new records completely." msgstr "" +"Az összefűzés (rekord) választható ID azonosítója, amely minden beérkezett " +"üzenethez hozzá lesz mellékleve, még akkor is ha nem válaszoltak rá. Ha " +"beállított, akkor teljesen ki lesz kapcsolva az új rekord létrehozása." #. module: mail #: help:mail.message.subtype,name:0 @@ -1070,28 +1086,33 @@ msgid "" "subtypes allow to precisely tune the notifications the user want to receive " "on its wall." msgstr "" +"Üzenet altípus sokkal pontosabb típust ad az üzenetekhez, főként a rendszer " +"értesítésekhez. Például, az értesítés kapcsolódhat új rekordhoz (Új), vagy " +"egy szakasz változás a műveletben (Szakasz változás). Üzenet altípusok " +"lehetővé teszik az értesítések pontos behangolását, melyeket a felhasználó " +"az üzenet falán látni szeretne." #. module: mail #: view:mail.mail:0 msgid "by" -msgstr "" +msgstr "által" #. module: mail #: model:mail.group,name:mail.group_best_sales_practices msgid "Best Sales Practices" -msgstr "" +msgstr "Legjobb Értékesítési Praktikák" #. module: mail #: selection:mail.group,public:0 msgid "Selected Group Only" -msgstr "" +msgstr "Csak a kiválasztott csoport" #. module: mail #: field:mail.group,message_is_follower:0 #: field:mail.thread,message_is_follower:0 #: field:res.partner,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "Ez egy követő" #. module: mail #: view:mail.alias:0 @@ -1102,12 +1123,12 @@ msgstr "Felhasználó" #. module: mail #: view:mail.group:0 msgid "Groups" -msgstr "" +msgstr "Csoportok" #. module: mail #: view:mail.message:0 msgid "Messages Search" -msgstr "" +msgstr "Üzenetek keresése" #. module: mail #: field:mail.compose.message,date:0 @@ -1144,19 +1165,19 @@ msgstr "Bejegyzés írás a követőimnek" #. module: mail #: model:ir.model,name:mail.model_res_groups msgid "Access Groups" -msgstr "" +msgstr "Csoportok hozzáférése" #. module: mail #: field:mail.message.subtype,default:0 msgid "Default" -msgstr "" +msgstr "Alapértelmezett" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:260 #, python-format msgid "show more message" -msgstr "" +msgstr "mutassa a többi üzenetet" #. module: mail #. openerp-web @@ -1168,25 +1189,27 @@ msgstr "Megjelölés feladatkét" #. module: mail #: help:mail.message.subtype,parent_id:0 msgid "Parent subtype, used for automatic subscription." -msgstr "" +msgstr "Szülő altípus, ami automatikus feliratkozáshoz használt." #. module: mail #: model:ir.model,name:mail.model_mail_wizard_invite msgid "Invite wizard" -msgstr "" +msgstr "Meghívó varázsló" #. module: mail #: field:mail.group,message_summary:0 #: field:mail.thread,message_summary:0 #: field:res.partner,message_summary:0 msgid "Summary" -msgstr "" +msgstr "Összegzés" #. module: mail #: help:mail.message.subtype,res_model:0 msgid "" "Model the subtype applies to. If False, this subtype applies to all models." msgstr "" +"Az altípushoz alkalmazott minta. Ha téves, akkor ez az altípus lesz " +"használva az összes mintához." #. module: mail #: field:mail.compose.message,subtype_id:0 @@ -1194,32 +1217,32 @@ msgstr "" #: field:mail.message,subtype_id:0 #: view:mail.message.subtype:0 msgid "Subtype" -msgstr "" +msgstr "Altípus" #. module: mail #: view:mail.group:0 msgid "Group Form" -msgstr "" +msgstr "Csoport űrlap" #. module: mail #: field:mail.compose.message,starred:0 #: field:mail.message,starred:0 #: field:mail.notification,starred:0 msgid "Starred" -msgstr "" +msgstr "Csillagozott" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:262 #, python-format msgid "more messages" -msgstr "" +msgstr "több üzenet" #. module: mail #: code:addons/mail/update.py:93 #, python-format msgid "Error" -msgstr "" +msgstr "Hiba" #. module: mail #. openerp-web @@ -1233,6 +1256,7 @@ msgstr "Követés" msgid "" "Unfortunately this email alias is already used, please choose a unique one" msgstr "" +"Sajnos ez az email álnév már használva van, kérem válasszon egy egyedit." #. module: mail #: help:mail.alias,alias_user_id:0 @@ -1242,19 +1266,24 @@ msgid "" "the sender (From) address, or will use the Administrator account if no " "system user is found for that address." msgstr "" +"A rekord tulajdonosa létrehozva amikor erre az álnévre e-mailek érkeznek. " +"Ha ez a mező nincs kialakítva akkor a rendszer megpróbálja megkeresni a " +"jogos tulajdonost a elküldési (űrlap) címről, vagy az adminisztrátor " +"felhasználót fogja használni ha nem talált rendszer felhasználót azzal a " +"címmel." #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail_followers.xml:52 #, python-format msgid "And" -msgstr "" +msgstr "És" #. module: mail #: field:mail.compose.message,message_id:0 #: field:mail.message,message_id:0 msgid "Message-Id" -msgstr "" +msgstr "Üzenet-ID azonosító" #. module: mail #: help:mail.group,image:0 @@ -1262,6 +1291,7 @@ msgid "" "This field holds the image used as photo for the group, limited to " "1024x1024px." msgstr "" +"Ez a mező a képet tárolja amit a csoporthoz használ, limitálva 1024x1024px." #. module: mail #: field:mail.compose.message,attachment_ids:0 @@ -1274,7 +1304,7 @@ msgstr "Mellékletek" #: field:mail.compose.message,record_name:0 #: field:mail.message,record_name:0 msgid "Message Record Name" -msgstr "" +msgstr "Üzenet rekord név" #. module: mail #: field:mail.mail,email_cc:0 @@ -1284,7 +1314,7 @@ msgstr "Másolat" #. module: mail #: help:mail.notification,starred:0 msgid "Starred message that goes into the todo mailbox" -msgstr "" +msgstr "Csillagos üzenet amely a teendők levélládába megy" #. module: mail #. openerp-web @@ -1292,17 +1322,18 @@ msgstr "" #: view:mail.compose.message:0 #, python-format msgid "Followers of" -msgstr "" +msgstr "Követők ehhez" #. module: mail #: help:mail.mail,auto_delete:0 msgid "Permanently delete this email after sending it, to save space" msgstr "" +"Tartósan törli ezt az üzenetet az elküldés után, hely felszabadítása miatt" #. module: mail #: model:ir.actions.client,name:mail.action_mail_group_feeds msgid "Discussion Group" -msgstr "" +msgstr "Megbeszélés csoport" #. module: mail #. openerp-web diff --git a/addons/marketing_campaign_crm_demo/i18n/hu.po b/addons/marketing_campaign_crm_demo/i18n/hu.po index 8c3b1bb2be9..a4a68e0e584 100644 --- a/addons/marketing_campaign_crm_demo/i18n/hu.po +++ b/addons/marketing_campaign_crm_demo/i18n/hu.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-01-21 15:22+0000\n" -"Last-Translator: Krisztian Eyssen \n" +"PO-Revision-Date: 2013-02-13 12:33+0000\n" +"Last-Translator: krnkris \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-22 05:59+0000\n" -"X-Generator: Launchpad (build 16378)\n" +"X-Launchpad-Export-Date: 2013-02-14 04:37+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: marketing_campaign_crm_demo #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_8 @@ -28,6 +28,14 @@ msgid "" "reply to this message.

\n" "

Regards,OpenERP Team,

" msgstr "" +"

Hello,

\n" +"

Köszönjük érdeklődésedet és feliratkozásodat a műszaki " +"képzésre.

\n" +" Egyéb, további felmerülő kérdésekben állunk rendelkezésre. " +"Nagyon köszönjük együttműködésedet.

\n" +"

Ha további információra van szükség, küldj választ erre az " +"üzenetre.

\n" +"

Tisztelettel,OpenERP csapata,

" #. module: marketing_campaign_crm_demo #: model:ir.actions.report.xml,name:marketing_campaign_crm_demo.mc_crm_lead_demo_report @@ -37,7 +45,7 @@ msgstr "Marketingkampány demojelentés" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_8 msgid "Thanks for subscribing to technical training" -msgstr "" +msgstr "Köszönjük a feliratkozást a műszaki képzésre" #. module: marketing_campaign_crm_demo #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_3 @@ -49,6 +57,12 @@ msgid "" "reply to this message.

\n" "

Regards,OpenERP Team,

" msgstr "" +"

Hello,

\n" +"

Köszönjük érdeklődésedet és feliratkozásodat az OpenERP " +"felfedező napra.

\n" +"

Ha további információra van szükség, küldj válasz választ " +"erre az üzenetre.

\n" +"

Tisztelettel,OpenERP csapat,

" #. module: marketing_campaign_crm_demo #: report:crm.lead.demo:0 @@ -58,7 +72,7 @@ msgstr "Vállalat :" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_4 msgid "Thanks for buying the OpenERP book" -msgstr "" +msgstr "Köszönjük, hogy megvásárolta az OpenERP könyvet" #. module: marketing_campaign_crm_demo #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_6 @@ -71,16 +85,23 @@ msgid "" "reply to this message.

\n" "

Regards,OpenERP Team,

" msgstr "" +"

Hello,

\n" +"

Van egy nagyon jó ajánlatunk ami megfelelhet Önnek.\n" +" Az ezüst tagjainknak, mi fizetjük a műszaki oktatást 2013 " +"Júniusában.

\n" +"

Ha további információra van szükség, küldj válasz választ " +"erre az üzenetre.

\n" +"

Tisztelettel,OpenERP csapat,

" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_1 msgid "Thanks for showing interest in OpenERP" -msgstr "" +msgstr "Köszönjük érdeklődését az OpenERP iránt" #. module: marketing_campaign_crm_demo #: model:ir.actions.server,name:marketing_campaign_crm_demo.action_dummy msgid "Dummy Action" -msgstr "" +msgstr "Látszólagos művelet" #. module: marketing_campaign_crm_demo #: report:crm.lead.demo:0 @@ -98,6 +119,13 @@ msgid "" "reply to this message.

\n" "

Regards,OpenERP Team,

" msgstr "" +"

Hello,

\n" +"

an egy nagyon jó ajánlatunk ami megfelelhet Önnek.\n" +" Ajánljuk, hogy iratkozzon fel az OpenERP felfedező napra 2013 " +"májusában.

\n" +"

Ha további információra van szükség, küldj válasz választ " +"erre az üzenetre.

\n" +"

Tisztelettel,OpenERP csapat,

" #. module: marketing_campaign_crm_demo #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_5 @@ -110,26 +138,33 @@ msgid "" "reply to this message.

\n" "

Regards,OpenERP Team,

" msgstr "" +"

Hello,

\n" +"

an egy nagyon jó ajánlatunk ami megfelelhet Önnek.\n" +" Az arany partnereknek, mi szervezzük az ingyenes oktatást 2013 " +"Júniusában.

\n" +"

Ha további információra van szükség, küldj válasz választ " +"erre az üzenetre.

\n" +"

Tisztelettel,OpenERP csapat,

" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_2 msgid "Propose to subscribe to the OpenERP Discovery Day on May 2010" -msgstr "" +msgstr "Javasolja a feliratkozást az OpenERP felfedező napra 2013 Májusában" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_3 msgid "Thanks for subscribing to the OpenERP Discovery Day" -msgstr "" +msgstr "Köszönjük, hogy feliratkozott az OpenERP felfedező napra" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_7 msgid "Propose gold partnership to silver partners" -msgstr "" +msgstr "Javasolja az arany partner tagságot az ezüst tagoknak" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_6 msgid "Propose paid training to Silver partners" -msgstr "" +msgstr "Javasolja a költségtérítéses oktatást az Ezüst partnereknek" #. module: marketing_campaign_crm_demo #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_4 @@ -139,6 +174,12 @@ msgid "" " If any further information required kindly revert back.\n" "

Regards,OpenERP Team,

" msgstr "" +"

Hello,

\n" +"

Köszönjük az OpenERP könyv utáni érdeklődését és a " +"vásárlását.

\n" +" Ha további információra van szüksége kérjük forduljon hozzánk " +"bizalommal.\n" +"

Tisztelettel,OpenERP csapata,

" #. module: marketing_campaign_crm_demo #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_7 @@ -150,11 +191,17 @@ msgid "" "reply to this message.

\n" "

Regards,OpenERP Team,

" msgstr "" +"

Hello,

\n" +"

Nagyon jó ajánlatunk van ami illeszkedhet az Ön igényeihez.\n" +" Az Ezüst partnereinknek, Arany tagságot ajánlunk.

\n" +"

Ha további információra van szükségük, kérjük válaszoljon " +"erre az üzenetre.

\n" +"

Tisztelettel,OpenERP csapata,

" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_5 msgid "Propose a free technical training to Gold partners" -msgstr "" +msgstr "Ajánljon ingyenes műszaki oktatást az Arany partnereknek" #. module: marketing_campaign_crm_demo #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_1 @@ -166,3 +213,8 @@ msgid "" "reply to this message.

\n" "

Regards,OpenERP Team,

" msgstr "" +"

Hello,

\n" +"

Köszönjük az OpenERP iránti őszinte érdeklődését.

\n" +"

Ha további információra van szükségük, kérjük válaszoljon " +"erre az üzenetre.

\n" +"

Tisztelettel,OpenERP csapata,

" From 522bf1508a196170c4d753f2d59f7226ba083ed1 Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Thu, 14 Feb 2013 05:36:03 +0000 Subject: [PATCH 142/158] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20130213052103-dyim9whx08wn9mg4 bzr revid: launchpad_translations_on_behalf_of_openerp-20130214053603-ct5y2ol2671v2jiy --- openerp/addons/base/i18n/es.po | 10 +++++----- openerp/addons/base/i18n/fr.po | 10 +++++----- openerp/addons/base/i18n/hr.po | 11 ++++++++--- openerp/addons/base/i18n/pl.po | 10 +++++----- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/openerp/addons/base/i18n/es.po b/openerp/addons/base/i18n/es.po index a6a64ab135d..c25d12a00d8 100644 --- a/openerp/addons/base/i18n/es.po +++ b/openerp/addons/base/i18n/es.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-server\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-01-30 10:48+0000\n" -"Last-Translator: Mustufa Rangwala (Open ERP) \n" +"PO-Revision-Date: 2013-02-13 07:54+0000\n" +"Last-Translator: Pedro Manuel Baeza \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-01-31 05:16+0000\n" -"X-Generator: Launchpad (build 16455)\n" +"X-Launchpad-Export-Date: 2013-02-14 05:36+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -8437,7 +8437,7 @@ msgstr "Territorio británico del Océano Índico" #. module: base #: model:ir.actions.server,name:base.action_server_module_immediate_install msgid "Module Immediate Install" -msgstr "Módulo de instalación inmediata" +msgstr "Instalación inmediata del módulo(s)" #. module: base #: view:ir.actions.server:0 diff --git a/openerp/addons/base/i18n/fr.po b/openerp/addons/base/i18n/fr.po index a7f8b1797c2..c6df3c8b892 100644 --- a/openerp/addons/base/i18n/fr.po +++ b/openerp/addons/base/i18n/fr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-server\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-02-07 10:58+0000\n" -"Last-Translator: Quentin THEURET \n" +"PO-Revision-Date: 2013-02-13 14:15+0000\n" +"Last-Translator: WANTELLET Sylvain \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-02-08 05:22+0000\n" -"X-Generator: Launchpad (build 16482)\n" +"X-Launchpad-Export-Date: 2013-02-14 05:35+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -16149,7 +16149,7 @@ msgstr "" #. module: base #: view:res.partner:0 msgid "Internal Notes" -msgstr "" +msgstr "Notes internes" #. module: base #: model:res.partner.title,name:base.res_partner_title_pvt_ltd diff --git a/openerp/addons/base/i18n/hr.po b/openerp/addons/base/i18n/hr.po index c29fea7fa14..9edcabd1f8f 100644 --- a/openerp/addons/base/i18n/hr.po +++ b/openerp/addons/base/i18n/hr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-server\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-01-26 15:01+0000\n" +"PO-Revision-Date: 2013-02-13 23:16+0000\n" "Last-Translator: Davor Bojkić \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-01-27 05:09+0000\n" -"X-Generator: Launchpad (build 16451)\n" +"X-Launchpad-Export-Date: 2013-02-14 05:35+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -391,6 +391,8 @@ msgid "" "There is already a shared filter set as default for %(model)s, delete or " "change it before setting a new default" msgstr "" +"Već postoji dijeljeni set filtera kao zadani za %(model)s, obrišite ga ili " +"izmjenite prije spremanja novog." #. module: base #: code:addons/orm.py:2648 @@ -856,6 +858,9 @@ msgid "" "image, with aspect ratio preserved. Use this field anywhere a small image is " "required." msgstr "" +"Mala sličica ovog kontakta. Veličina je automatski promijenjena na 64x64 px " +"sliku. sa očuvanim proporcijama. Koristite ovo polje gdjegod je potrebna " +"mala slika." #. module: base #: help:ir.actions.server,mobile:0 diff --git a/openerp/addons/base/i18n/pl.po b/openerp/addons/base/i18n/pl.po index a8374b70a7d..5c2cde6f92c 100644 --- a/openerp/addons/base/i18n/pl.po +++ b/openerp/addons/base/i18n/pl.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-server\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-02-03 21:52+0000\n" -"Last-Translator: Mike08 \n" +"PO-Revision-Date: 2013-02-12 11:37+0000\n" +"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-02-04 05:42+0000\n" -"X-Generator: Launchpad (build 16462)\n" +"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -14619,7 +14619,7 @@ msgstr "Uruchom" #. module: base #: selection:res.partner,type:0 msgid "Shipping" -msgstr "Przewoźnik" +msgstr "Dostawa" #. module: base #: model:ir.module.module,description:base.module_project_mrp From 94ffa103936e3b6d3135a4edc07897f7eaf47c31 Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Thu, 14 Feb 2013 05:36:33 +0000 Subject: [PATCH 143/158] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20130214053633-muupgrai3q1dopwe --- addons/account/i18n/es_MX.po | 12 +- addons/account/i18n/mn.po | 190 ++++++++++---- addons/auth_crypt/i18n/ru.po | 73 +----- addons/auth_oauth_signup/i18n/ru.po | 23 ++ addons/base_calendar/i18n/cs.po | 38 ++- addons/base_import/i18n/hr.po | 374 +++++++++++++++++++++++++--- addons/procurement/i18n/mn.po | 4 +- addons/stock/i18n/mn.po | 82 +++--- 8 files changed, 595 insertions(+), 201 deletions(-) create mode 100644 addons/auth_oauth_signup/i18n/ru.po diff --git a/addons/account/i18n/es_MX.po b/addons/account/i18n/es_MX.po index dbe6df94020..f425cc9a8ba 100644 --- a/addons/account/i18n/es_MX.po +++ b/addons/account/i18n/es_MX.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2012-12-21 23:00+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-02-14 00:11+0000\n" +"Last-Translator: OscarAlca \n" "Language-Team: Spanish (Mexico) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-01-18 06:30+0000\n" -"X-Generator: Launchpad (build 16430)\n" +"X-Launchpad-Export-Date: 2013-02-14 05:36+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -5664,7 +5664,7 @@ msgstr "" #: selection:account.invoice.report,type:0 #: selection:report.invoice.created,type:0 msgid "Customer Refund" -msgstr "" +msgstr "Nota de crédito" #. module: account #: field:account.tax,ref_tax_sign:0 @@ -6186,7 +6186,7 @@ msgstr "" #: model:ir.actions.act_window,name:account.action_invoice_tree3 #: model:ir.ui.menu,name:account.menu_action_invoice_tree3 msgid "Customer Refunds" -msgstr "" +msgstr "Notas de crédito del cliente" #. module: account #: field:account.account,foreign_balance:0 diff --git a/addons/account/i18n/mn.po b/addons/account/i18n/mn.po index b7b5092501c..fcde26ed560 100644 --- a/addons/account/i18n/mn.po +++ b/addons/account/i18n/mn.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-02-13 04:11+0000\n" +"PO-Revision-Date: 2013-02-13 10:27+0000\n" "Last-Translator: gobi \n" "Language-Team: Mongolian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n" +"X-Launchpad-Export-Date: 2013-02-14 05:36+0000\n" "X-Generator: Launchpad (build 16491)\n" #. module: account @@ -610,7 +610,7 @@ msgstr "Данс энэ журнальд хэрэглэгдсэн" #: help:account.vat.declaration,chart_account_id:0 #: help:accounting.report,chart_account_id:0 msgid "Select Charts of Accounts" -msgstr "Дансны модоо сонго" +msgstr "Дансны төлөвлөгөө сонго" #. module: account #: model:ir.model,name:account.model_account_invoice_refund @@ -994,7 +994,8 @@ msgstr "өдөр" msgid "" "If checked, the new chart of accounts will not contain this by default." msgstr "" -"Хэрэв тэмдэглэгдсэн бол шинэ дансны мод нь үүнийг анхны байдлаараа агуулахгүй" +"Хэрэв тэмдэглэгдсэн бол шинэ дансны төлөвлөгөө нь үүнийг анхны байдлаараа " +"агуулахгүй" #. module: account #: model:ir.actions.act_window,help:account.action_account_manual_reconcile @@ -2059,7 +2060,7 @@ msgstr "Бүх харицлагч" #. module: account #: view:account.analytic.chart:0 msgid "Analytic Account Charts" -msgstr "Аналитик дансны мод" +msgstr "Аналитик дансны төлөвлөгөө" #. module: account #: report:account.overdue:0 @@ -2590,7 +2591,7 @@ msgstr "" #. module: account #: view:account.chart.template:0 msgid "Search Chart of Account Templates" -msgstr "Дансны Модны Үлгэр Хайх" +msgstr "Дансны Төлөвлөгөөний Үлгэр Хайх" #. module: account #: report:account.invoice:0 @@ -3583,7 +3584,7 @@ msgstr "Байнга" msgid "" "Full accounting features: journals, legal statements, chart of accounts, etc." msgstr "" -"Бүрэн санхүүгийн боломж: журнал, албан ёсны хуулга, дансны мод, r.м." +"Бүрэн санхүүгийн боломж: журнал, албан ёсны хуулга, дансны төлөвлөгөө, r.м." #. module: account #: view:account.analytic.line:0 @@ -3645,7 +3646,7 @@ msgstr "Тулгалтын Сурвалж" #. module: account #: field:account.config.settings,has_chart_of_accounts:0 msgid "Company has a chart of accounts" -msgstr "Компани нь дансны модтой байна" +msgstr "Компани нь дансны төлөвлөгөөтэй байна" #. module: account #: model:ir.model,name:account.model_account_tax_code_template @@ -3852,7 +3853,7 @@ msgstr "" #: model:ir.actions.act_window,name:account.action_account_chart_template_form #: model:ir.ui.menu,name:account.menu_action_account_chart_template_form msgid "Chart of Accounts Templates" -msgstr "Дансны модны загвар" +msgstr "Дансны төлөвлөгөөний үлгэр" #. module: account #: view:account.bank.statement:0 @@ -4109,6 +4110,11 @@ msgid "" "by\n" " your supplier/customer." msgstr "" +"Энэхүү кредит баримтыг шууд засварлаад батлаж болно\n" +" эсвэл үүнийг ноорог хэвээр нь хадгалаад\n" +" нийлүүлэгч/захиалагчаас ирэх баримтыг " +"хүлээж\n" +" болно." #. module: account #: view:validate.account.move.lines:0 @@ -4126,6 +4132,8 @@ msgid "" "You have not supplied enough arguments to compute the initial balance, " "please select a period and a journal in the context." msgstr "" +"Эхлэлийн балансыг тооцоолоход хүрэлцэх аргументийг дамжуулсангүй, агуулга " +"дотор мөчлөг болон журналыг сонгоно уу." #. module: account #: model:ir.actions.report.xml,name:account.account_transfers @@ -4135,12 +4143,12 @@ msgstr "Шилжүүлэлт" #. module: account #: field:account.config.settings,expects_chart_of_accounts:0 msgid "This company has its own chart of accounts" -msgstr "Энэ компани нь өөрийн дансны модтой байна" +msgstr "Энэ компани нь өөрийн дансны төлөвлөгөөтэй байна" #. module: account #: view:account.chart:0 msgid "Account charts" -msgstr "Дансны мод" +msgstr "Дансны төлөвлөгөө" #. module: account #: view:cash.box.out:0 @@ -4176,6 +4184,18 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Захиалагчийн нэхэмжлэлийг үүсгэхдээ дарна.\n" +"

\n" +" OpenERP-н цахим нэхэмжлэл нь захиалагчийн төлбөрийг \n" +" цуглуулах ажлыг хялбарчлах, хурдасгах боломжийг олгоно. \n" +" Захиалагч имэйлээр нэхэмжлэлийг хүлээн авах бөгөөд \n" +" онлайнаар төлөх эсвэл импортлох боломжтой. \n" +"

\n" +" Нэхэмжлэлийн доод талд захиалагчтай харилцсан түүх шууд \n" +" ил харагдана.\n" +"

\n" +" " #. module: account #: field:account.tax.code,name:0 @@ -4207,6 +4227,8 @@ msgid "" "You cannot modify a posted entry of this journal.\n" "First you should set the journal to allow cancelling entries." msgstr "" +"Энэ журналын илгээгдсэн бичлэгийг засварлах боломжгүй.\n" +"Эхлээд журналыг цуцлахыг зөвшөөрдөг болгох хэрэгтэй." #. module: account #: model:ir.actions.act_window,name:account.action_account_print_sale_purchase_journal @@ -4231,6 +4253,8 @@ msgid "" "There is no fiscal year defined for this date.\n" "Please create one from the configuration of the accounting menu." msgstr "" +"Энэ огноонд санхүүгийн жил тодорхойлогдоогүй байна.\n" +"Санхүүгийн менюний тохиргоо хэсгээс үүсгэнэ үү." #. module: account #: view:account.addtmpl.wizard:0 @@ -4242,7 +4266,7 @@ msgstr "Данс үүсгэх" #: code:addons/account/wizard/account_fiscalyear_close.py:62 #, python-format msgid "The entries to reconcile should belong to the same company." -msgstr "" +msgstr "Тулгах бичилтүүд нь ижил компанид харъяалагдаж байх ёстой." #. module: account #: field:account.invoice.tax,tax_amount:0 @@ -4263,6 +4287,7 @@ msgstr "Задаргаа" #: help:account.config.settings,default_purchase_tax:0 msgid "This purchase tax will be assigned by default on new products." msgstr "" +"Энэ худалдан авалтын татвар нь автоматаар шинээр үүсгэсэн бараанд олгогдоно." #. module: account #: report:account.invoice:0 @@ -4280,7 +4305,7 @@ msgstr "НӨАТ :" #: model:ir.actions.act_window,name:account.action_account_tree #: model:ir.ui.menu,name:account.menu_action_account_tree2 msgid "Chart of Accounts" -msgstr "Дансны мод" +msgstr "Дансны төлөвлөгөө" #. module: account #: view:account.tax.chart:0 @@ -4290,7 +4315,7 @@ msgstr "(Хэрэв та мөчлөг сонгохгүй бол бүх нээл #. module: account #: model:ir.model,name:account.model_account_journal_cashbox_line msgid "account.journal.cashbox.line" -msgstr "" +msgstr "account.journal.cashbox.line" #. module: account #: model:ir.model,name:account.model_account_partner_reconcile_process @@ -4360,7 +4385,7 @@ msgstr "Тулгалтыг арилгах" #. module: account #: view:account.chart.template:0 msgid "Chart of Accounts Template" -msgstr "Загвар дансны мод" +msgstr "Дансны төлөвлөгөөний үлгэр" #. module: account #: code:addons/account/account.py:2310 @@ -4431,7 +4456,7 @@ msgstr "" #. module: account #: field:account.config.settings,group_check_supplier_invoice_total:0 msgid "Check the total of supplier invoices" -msgstr "" +msgstr "Нийлүүлэгчийн нэхэмжлэлийн дүнг шалгана уу" #. module: account #: view:account.tax:0 @@ -4445,6 +4470,8 @@ msgid "" "When monthly periods are created. The status is 'Draft'. At the end of " "monthly period it is in 'Done' status." msgstr "" +"Сараар мөчлөгийг үүсгэгдэхэд төлөв нь 'Ноорог' байна. Сарын мөчлөгийн " +"төгсгөлд энэ нь 'Хийгдсэн' төлөвтэй болно." #. module: account #: view:account.invoice.report:0 @@ -4520,7 +4547,7 @@ msgstr "Татварын кодын үржүүлэх коэффициент" #. module: account #: field:account.config.settings,complete_tax_set:0 msgid "Complete set of taxes" -msgstr "" +msgstr "Татварын олонлогуудыг гүйцээнэ үү" #. module: account #: field:account.account,name:0 @@ -4538,12 +4565,12 @@ msgstr "Нэр" #: code:addons/account/installer.py:94 #, python-format msgid "No unconfigured company !" -msgstr "" +msgstr "Тохируулаагүй компани алга !" #. module: account #: field:res.company,expects_chart_of_accounts:0 msgid "Expects a Chart of Accounts" -msgstr "" +msgstr "Дансны төлөвлөгөөг гэж таамаглана" #. module: account #: field:account.move.line,date:0 @@ -4554,7 +4581,7 @@ msgstr "Огноо" #: code:addons/account/wizard/account_fiscalyear_close.py:100 #, python-format msgid "The journal must have default credit and debit account." -msgstr "" +msgstr "Журнал нь үндсэн утга байх дебит, кредит данстай байх ёстой." #. module: account #: model:ir.actions.act_window,name:account.action_bank_tree @@ -4565,7 +4592,7 @@ msgstr "Банкы дансдаа тохируулах" #. module: account #: xsl:account.transfer:0 msgid "Partner ID" -msgstr "" +msgstr "Харилцагчийн ID" #. module: account #: help:account.bank.statement,message_ids:0 @@ -4605,13 +4632,15 @@ msgid "" "Check this box if you don't want any tax related to this tax Code to appear " "on invoices." msgstr "" +"Хэрэв нэхэмжлэл дээр энэ кодтой холбогдсон ямарваа дансыг харуулахгүй байхыг " +"энэ сонголтыг тэмдэглэнэ." #. module: account #: code:addons/account/account_move_line.py:1061 #: code:addons/account/account_move_line.py:1144 #, python-format msgid "You cannot use an inactive account." -msgstr "" +msgstr "Идэвхгүй дансыг хэрэглэх боломжгүй." #. module: account #: model:ir.actions.act_window,name:account.open_board_account @@ -4732,7 +4761,7 @@ msgstr "(Нээх гэж буй нэхэмжлэл нь тулгагдаагүй #. module: account #: field:account.tax,account_analytic_collected_id:0 msgid "Invoice Tax Analytic Account" -msgstr "" +msgstr "Нэхэмжлэлийн Татварын Шинжилгээний Данс" #. module: account #: field:account.chart,period_from:0 @@ -4770,6 +4799,8 @@ msgid "" "This payment term will be used instead of the default one for sale orders " "and customer invoices" msgstr "" +"Энэ төлбөрийн нөхцөл нь борлуулалтын захиалга, захиалагчийн нэхэмжлэлийн " +"үндсэн утгын оронд хэрэглэгдэнэ." #. module: account #: view:account.config.settings:0 @@ -4777,6 +4808,7 @@ msgid "" "If you put \"%(year)s\" in the prefix, it will be replaced by the current " "year." msgstr "" +"Хэрэв \"%(year)s\" гэж угтварт нь тавьбал энэ одоогийн жилээр солигдоно." #. module: account #: help:account.account,active:0 @@ -4794,7 +4826,7 @@ msgstr "Батлагдсан журналын бичилтүүд" #. module: account #: field:account.move.line,blocked:0 msgid "No Follow-up" -msgstr "" +msgstr "Дагаж хийх зүйлс байхгүй" #. module: account #: view:account.tax.template:0 @@ -4813,6 +4845,9 @@ msgid "" "9.99 EUR, whereas a decimal precision of 4 will allow journal entries like: " "0.0231 EUR." msgstr "" +"Тухайлбал, аравны нарийвчлалын орон нь 2 гэж байвал журналын бичилт нь " +"дараах байдалтай байна: 9.99 EUR, харин аравны нарийвчлалын орон нь 4 гэж " +"байвал дараах байдалтай байна: 0.0231 EUR." #. module: account #: field:account.account,shortcut:0 @@ -4876,6 +4911,17 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Шинэ банкны данс тохируулахдаа дарна. \n" +"

\n" +" Компанийн банкны дансуудыг тохируулаад тайлангийн\n" +" хөлд харагдах дансыг нь сонгоно.\n" +"

\n" +" Хэрэв OpenERP-н санхүүгийн модулийг ашиглаж байгаа бол\n" +" журнал болон санхүүгийн данс нь тохируулсан өгөгдөл дээрээс\n" +" шууд үүснэ.\n" +"

\n" +" " #. module: account #: constraint:account.tax.code.template:0 @@ -4883,6 +4929,8 @@ msgid "" "Error!\n" "You cannot create recursive Tax Codes." msgstr "" +"Алдаа!\n" +"Тойрог хамааралтай татварын код үүсгэж болохгүй." #. module: account #: constraint:account.period:0 @@ -4890,6 +4938,8 @@ msgid "" "Error!\n" "The duration of the Period(s) is/are invalid." msgstr "" +"Алдаа!\n" +"Мөчлөгийн үргэлжлэх хугацаа буруу байна." #. module: account #: field:account.entries.report,month:0 @@ -4906,7 +4956,7 @@ msgstr "Сар" #: code:addons/account/account.py:668 #, python-format msgid "You cannot change the code of account which contains journal items!" -msgstr "" +msgstr "Журналын бичилт агуулж байгаа дансны кодыг өөрчлөж болохгүй!" #. module: account #: field:account.config.settings,purchase_sequence_prefix:0 @@ -4921,6 +4971,8 @@ msgid "" "Cannot find a chart of account, you should create one from Settings\\" "Configuration\\Accounting menu." msgstr "" +"Дансны төлөвлөгөөг олохгүй байна. Санхүү меню дахь Тохиргоо\\Тохиргоо " +"хэсгээс үүсгэнэ." #. module: account #: field:account.entries.report,product_uom_id:0 @@ -4942,7 +4994,7 @@ msgstr "Дансны төрөл" #. module: account #: selection:account.journal,type:0 msgid "Bank and Checks" -msgstr "" +msgstr "Банк болон Чек" #. module: account #: field:account.account.template,note:0 @@ -4970,7 +5022,7 @@ msgstr "Хоосон орхивол өнөөдрийн огноо сонгогд #: view:account.bank.statement:0 #: field:account.cashbox.line,subtotal_closing:0 msgid "Closing Subtotal" -msgstr "" +msgstr "Хаалтын Дэд дүн" #. module: account #: field:account.tax,base_code_id:0 @@ -4982,7 +5034,7 @@ msgstr "Account Base Code" #, python-format msgid "" "You have to provide an account for the write off/exchange difference entry." -msgstr "" +msgstr "Та Хасагдуулга/солилцооны ялгааны дансыг зааж өгөх ёстой." #. module: account #: help:res.company,paypal_account:0 @@ -5025,7 +5077,7 @@ msgstr "Хэрэв тэг үлдэгдэлтэй дансуудыг харахы #. module: account #: field:account.move.reconcile,opening_reconciliation:0 msgid "Opening Entries Reconciliation" -msgstr "" +msgstr "Нээлтийн Бичилтийн Тулгалт" #. module: account #. openerp-web @@ -5037,7 +5089,7 @@ msgstr "Сүүлчийн тулгалт:" #. module: account #: selection:account.move.line,state:0 msgid "Balanced" -msgstr "" +msgstr "Балансалсан" #. module: account #: model:process.node,note:account.process_node_importinvoice0 @@ -5051,16 +5103,18 @@ msgid "" "There is currently no company without chart of account. The wizard will " "therefore not be executed." msgstr "" +"Одоогоор дансны төлөвлөгөө үгүй компани байхгүй байна. Иймээс харилцах цонх " +"нь ажиллахгүй." #. module: account #: model:ir.actions.act_window,name:account.action_wizard_multi_chart msgid "Set Your Accounting Options" -msgstr "" +msgstr "Санхүүгийн сонголтуудыг тохируулах" #. module: account #: model:ir.model,name:account.model_account_chart msgid "Account chart" -msgstr "Дансны мод" +msgstr "Дансны төлөвлөгөө" #. module: account #: field:account.invoice,reference_type:0 @@ -5149,7 +5203,7 @@ msgstr "Мөчлөгийн нэр компаний хэмжээнд үл дав #. module: account #: help:wizard.multi.charts.accounts,currency_id:0 msgid "Currency as per company's country." -msgstr "" +msgstr "Компанийн хэмжээнд улсын валют" #. module: account #: view:account.tax:0 @@ -5169,7 +5223,7 @@ msgid "" "you want to generate accounts of this template only when loading its child " "template." msgstr "" -"Хэрэв энэ үлгэр нь Дансны Модыг үүсгэх харилцах цонхонд хэрэглэхээргүй " +"Хэрэв энэ үлгэр нь Дансны Төлөвлөгөөг үүсгэх харилцах цонхонд хэрэглэхээргүй " "байвал энэ тэмдэглэгээг арилгана. Энэ нь зөвхөн дэд үлгэрийг дуудаж дэд " "дансдыг үүсгэхэд л хэрэгтэй." @@ -5190,6 +5244,8 @@ msgid "" "Error!\n" "You cannot create an account which has parent account of different company." msgstr "" +"Алдаа!\n" +"Өөр компанийн дансыг эцэг дансаа болгосон данс үүсгэж болохгүй." #. module: account #: code:addons/account/account_invoice.py:631 @@ -5229,7 +5285,7 @@ msgstr "Давтан гүйлгээний загвар" #. module: account #: view:account.tax:0 msgid "Children/Sub Taxes" -msgstr "" +msgstr "Охин/Дэд татвар" #. module: account #: xsl:account.transfer:0 @@ -5261,12 +5317,12 @@ msgstr "Цуцлагдсан" #. module: account #: help:account.config.settings,group_proforma_invoices:0 msgid "Allows you to put invoices in pro-forma state." -msgstr "" +msgstr "Нэхэмжлэлийг урьдчилсан төлөвт тавих боломжийг олгоно." #. module: account #: view:account.journal:0 msgid "Unit Of Currency Definition" -msgstr "" +msgstr "Валютын нэгжний тодорхойлолт" #. module: account #: help:account.partner.ledger,amount_currency:0 @@ -5275,6 +5331,7 @@ msgid "" "It adds the currency column on report if the currency differs from the " "company currency." msgstr "" +"Энэ нь тайланд валют баганыг хэрэв компанийн валютаас ялгаатай байвал нэмнэ." #. module: account #: code:addons/account/account.py:3346 @@ -5349,6 +5406,9 @@ msgid "" "printed it comes to 'Printed' status. When all transactions are done, it " "comes in 'Done' status." msgstr "" +"Журналын мөчлөг нь үүсгэгдмэгцээ 'Ноорог' төлөвтэй байна. Хэрэв тайлан " +"хэвлэгдвэл 'Хэвлэгдсэн' төлөвт шилжинэ. Бүх гүйлгээ хийгдсэн бол 'Хийгдсэн' " +"төлөвт шилжинэ." #. module: account #: code:addons/account/account.py:3157 @@ -5377,7 +5437,7 @@ msgstr "Нэхэмжлэл" #. module: account #: help:account.config.settings,expects_chart_of_accounts:0 msgid "Check this box if this company is a legal entity." -msgstr "" +msgstr "Хэрэв энэ компани нь хуулийн этгээд бол энэ талбарыг тэмдэглэ." #. module: account #: model:account.account.type,name:account.conf_account_type_chk @@ -5494,6 +5554,8 @@ msgid "" "Set the account that will be set by default on invoice tax lines for " "invoices. Leave empty to use the expense account." msgstr "" +"Нэхэмжлэлийн татварын мөрөнд автоматаар сонгогдох дансыг тохируулж өгнө. " +"Хэрэв зардлын дансыг хэрэглэхээр бол хоосон үлдээнэ." #. module: account #: code:addons/account/account.py:890 @@ -5529,6 +5591,8 @@ msgid "" "Please verify the price of the invoice !\n" "The encoded total does not match the computed total." msgstr "" +"Нэхэмжлэлийн үнийг шалгана уу !\n" +"Оруулсан нийт дүн тооцоолсон нийт дүнтэй таарахгүй байна." #. module: account #: field:account.account,active:0 @@ -5544,7 +5608,7 @@ msgstr "Идэвхитэй" #: view:account.bank.statement:0 #: field:account.journal,cash_control:0 msgid "Cash Control" -msgstr "" +msgstr "Кассын хяналт" #. module: account #: field:account.analytic.balance,date2:0 @@ -5615,7 +5679,7 @@ msgstr "Ажил гүйлгээ" #: field:account.bank.statement,details_ids:0 #: view:account.journal:0 msgid "CashBox Lines" -msgstr "" +msgstr "Кассын мөрүүд" #. module: account #: model:ir.model,name:account.model_account_vat_declaration @@ -5628,6 +5692,8 @@ msgid "" "If you do not check this box, you will be able to do invoicing & payments, " "but not accounting (Journal Items, Chart of Accounts, ...)" msgstr "" +"Хэрэв энэ талбарыг тэмдэглэхгүй бол нэхэмжлэл, төлбөрийг хийх боломжтой байх " +"боловч санхүүг хөтлөж чадахгүй (Журналын бичилт, Дансны төлөвлөгөө, ...)" #. module: account #: view:account.period:0 @@ -5706,12 +5772,14 @@ msgstr "Хэрэглэх гүйлгээ" msgid "" "Move cannot be deleted if linked to an invoice. (Invoice: %s - Move ID:%s)" msgstr "" +"Хөдөлгөөн хэрэв энэ нэхэмжлэлтэй холбогдсон бол устгагдах боломжгүй. " +"(Нэхэмжлэл: %s - Хөдөлгөөн ID:%s)" #. module: account #: view:account.bank.statement:0 #: help:account.cashbox.line,number_opening:0 msgid "Opening Unit Numbers" -msgstr "" +msgstr "Нээлтийн нэгжийн тоонууд" #. module: account #: field:account.subscription,period_type:0 @@ -5793,11 +5861,14 @@ msgid "" "Put a sequence in the journal definition for automatic numbering or create a " "sequence manually for this piece." msgstr "" +"Энэ зүйлд автомат дарааллын дугаарыг үүсгэж чадахгүй.\n" +"Журналын тодорхойлолтыг дарааллыг сонгож өгөх хэрэгтэй эсвэл энэ зүйлд " +"дугаарыг гараараа оруулж явна." #. module: account #: view:account.invoice:0 msgid "Pro Forma Invoice " -msgstr "" +msgstr "Урьдчилсан нэхэмжлэл " #. module: account #: selection:account.subscription,period_type:0 @@ -5862,7 +5933,7 @@ msgstr "Тооцоолох програмчлалын код (хэрэв төр #, python-format msgid "" "Cannot find a chart of accounts for this company, you should create one." -msgstr "" +msgstr "Энэ компаний дансны төлөвлөгөө олдохгүй байна, үүсгэнэ үү." #. module: account #: selection:account.analytic.journal,type:0 @@ -6186,7 +6257,7 @@ msgstr "Төлбөрийн огноо" #: view:account.bank.statement:0 #: field:account.bank.statement,opening_details_ids:0 msgid "Opening Cashbox Lines" -msgstr "" +msgstr "Кассын Нээлтийн Мөрүүд" #. module: account #: view:account.analytic.account:0 @@ -6598,6 +6669,8 @@ msgid "" "You cannot validate this journal entry because account \"%s\" does not " "belong to chart of accounts \"%s\"." msgstr "" +"Энэ журналын бичилтийг батлаж чадахгүй учир нь данс \"%s\" нь \"%s\" дансны " +"төлөвлөгөөнд харъяалагдахгүй." #. module: account #: view:account.financial.report:0 @@ -7862,7 +7935,7 @@ msgstr "Үнэ" #: view:account.bank.statement:0 #: field:account.bank.statement,closing_details_ids:0 msgid "Closing Cashbox Lines" -msgstr "" +msgstr "Кассын Хаалтын Мөрүүд" #. module: account #: view:account.bank.statement:0 @@ -8127,6 +8200,24 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Шинэ шинжилгээний данс үүсгэхдээ дарна.\n" +"

\n" +" Энгийн дансны төлөвлөгөө нь улс орны хууль, эрх зүйн\n" +" дагууд тодорхойлогдсон бүтэцтэц байдаг. Харин шинжилгээний\n" +" дансны төлөвлөгөө нь өөрийн бизнесийн хэрэгцээ шаардлагын\n" +" дагууд өртөг/орлого зэрэгийн тайлангийн дагууд бүтэцтэй " +"байна.\n" +"

\n" +" Ихэвчлэн гэрээнүүд, төслүүд, бүтээгдэхүүнүүд, хэлтсүүд гэсэн " +"\n" +" байдлаар бүтэцлэгдсэн байдаг. OpenERP-н ихэнх үйлдлүүд нь " +"(нэхэмжлэл,\n" +" цаг бүртгэлийн хуудас, зардал, гм) санхүүгийн бичилтэй " +"холбогдох \n" +" шинжилгээний бичилтийг мөн давхар тогтмол үүсгэдэг.\n" +"

\n" +" " #. module: account #: model:account.account.type,name:account.data_account_type_view @@ -8263,6 +8354,7 @@ msgid "" "You have to set a code for the bank account defined on the selected chart of " "accounts." msgstr "" +"Сонгосон дансны төлөвгөөнд банкны дансны кодыг тодорхойлж өгөх хэрэгтэй." #. module: account #: model:ir.ui.menu,name:account.menu_manual_reconcile @@ -8326,7 +8418,7 @@ msgstr "" #. module: account #: model:ir.model,name:account.model_account_chart_template msgid "Templates for Account Chart" -msgstr "Дансны модны загвар" +msgstr "Дансны төлөвлөгөөний үлгэр" #. module: account #: help:account.model.line,sequence:0 @@ -8523,7 +8615,7 @@ msgstr "" #. module: account #: model:ir.model,name:account.model_account_cashbox_line msgid "CashBox Line" -msgstr "Кассын мөнгө" +msgstr "Кассын мөр" #. module: account #: field:account.installer,charts:0 @@ -8716,7 +8808,7 @@ msgstr "Нийт үлдэгдэл" #. module: account #: view:account.bank.statement:0 msgid "Opening Cash Control" -msgstr "" +msgstr "Кассын нээлтийн хяналт" #. module: account #: model:process.node,note:account.process_node_invoiceinvoice0 @@ -10085,7 +10177,7 @@ msgstr "7 сар" #. module: account #: view:account.account:0 msgid "Chart of accounts" -msgstr "Дансны мод" +msgstr "Дансны төлөвлөгөө" #. module: account #: field:account.subscription.line,subscription_id:0 diff --git a/addons/auth_crypt/i18n/ru.po b/addons/auth_crypt/i18n/ru.po index 9701a6ba556..b13e2c0effb 100644 --- a/addons/auth_crypt/i18n/ru.po +++ b/addons/auth_crypt/i18n/ru.po @@ -1,75 +1,28 @@ # Russian translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. +# FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-03 16:03+0000\n" -"PO-Revision-Date: 2012-12-07 08:15+0000\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-02-13 09:46+0000\n" "Last-Translator: Denis Karataev \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-08 04:59+0000\n" -"X-Generator: Launchpad (build 16341)\n" +"X-Launchpad-Export-Date: 2013-02-14 05:36+0000\n" +"X-Generator: Launchpad (build 16491)\n" -#. module: base_crypt -#: model:ir.model,name:base_crypt.model_res_users +#. module: auth_crypt +#: field:res.users,password_crypt:0 +msgid "Encrypted Password" +msgstr "Зашифрованный пароль" + +#. module: auth_crypt +#: model:ir.model,name:auth_crypt.model_res_users msgid "Users" msgstr "Пользователи" - -#~ msgid "res.users" -#~ msgstr "res.users" - -#, python-format -#~ msgid "Error" -#~ msgstr "Error" - -#, python-format -#~ msgid "Please specify the password !" -#~ msgstr "Необходимо указать пароль!" - -#~ msgid "The chosen company is not in the allowed companies for this user" -#~ msgstr "" -#~ "Выбранная организация отсутствует в списке разрешённых для этого пользователя" - -#~ msgid "You can not have two users with the same login !" -#~ msgstr "Не может быть двух пользователей с одинаковым именем пользователя!" - -#~ msgid "Base - Password Encryption" -#~ msgstr "Основной - Шифрование паролей" - -#~ msgid "" -#~ "This module replaces the cleartext password in the database with a password " -#~ "hash,\n" -#~ "preventing anyone from reading the original password.\n" -#~ "For your existing user base, the removal of the cleartext passwords occurs " -#~ "the first time\n" -#~ "a user logs into the database, after installing base_crypt.\n" -#~ "After installing this module it won't be possible to recover a forgotten " -#~ "password for your\n" -#~ "users, the only solution is for an admin to set a new password.\n" -#~ "\n" -#~ "Note: installing this module does not mean you can ignore basic security " -#~ "measures,\n" -#~ "as the password is still transmitted unencrypted on the network (by the " -#~ "client),\n" -#~ "unless you are using a secure protocol such as XML-RPCS.\n" -#~ " " -#~ msgstr "" -#~ "Этот модуль заменяет текстовые пароли в базе данных на их хэши,\n" -#~ "предотвращая хищение оригинальных паролей.\n" -#~ "Для существующей базы пользователей, удаление текстового пароля происходит " -#~ "при\n" -#~ "первом входе пользователя после установки base_crypt.\n" -#~ "После установки этого модуля станет невозможно восстановление пароля \n" -#~ "пользователя. Возможна будет только замена пароля.\n" -#~ "\n" -#~ "Прим.: установка этого модуля не избавляет от необходимости соблюдать\n" -#~ "базовые меры безопасности, поскольку пароли всё ещё передаются открытым\n" -#~ "текстом по сети, если не используется безопасный протокол вроде XML-RPCS.\n" -#~ " " diff --git a/addons/auth_oauth_signup/i18n/ru.po b/addons/auth_oauth_signup/i18n/ru.po new file mode 100644 index 00000000000..2bb35847b10 --- /dev/null +++ b/addons/auth_oauth_signup/i18n/ru.po @@ -0,0 +1,23 @@ +# Russian translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-02-13 09:46+0000\n" +"Last-Translator: Denis Karataev \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-02-14 05:36+0000\n" +"X-Generator: Launchpad (build 16491)\n" + +#. module: auth_oauth_signup +#: model:ir.model,name:auth_oauth_signup.model_res_users +msgid "Users" +msgstr "Пользователи" diff --git a/addons/base_calendar/i18n/cs.po b/addons/base_calendar/i18n/cs.po index 02184604710..bc88b5e0cb2 100644 --- a/addons/base_calendar/i18n/cs.po +++ b/addons/base_calendar/i18n/cs.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-02-12 18:30+0000\n" +"PO-Revision-Date: 2013-02-13 19:13+0000\n" "Last-Translator: Radomil Urbánek \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n" +"X-Launchpad-Export-Date: 2013-02-14 05:36+0000\n" "X-Generator: Launchpad (build 16491)\n" #. module: base_calendar @@ -68,7 +68,7 @@ msgstr "Opakovaná schůzka" #. module: base_calendar #: model:crm.meeting.type,name:base_calendar.categ_meet5 msgid "Feedback Meeting" -msgstr "" +msgstr "Objednaná schůzka" #. module: base_calendar #: model:ir.actions.act_window,name:base_calendar.action_res_alarm_view @@ -185,7 +185,7 @@ msgstr "Pokud je zaškrtnuto, nové zprávy vyžadují vaši pozornost." #. module: base_calendar #: help:calendar.attendee,rsvp:0 msgid "Indicats whether the favor of a reply is requested" -msgstr "" +msgstr "Vyznačuje, je-li vyžadováno odsouhlasení." #. module: base_calendar #: field:calendar.alarm,alarm_id:0 @@ -303,7 +303,7 @@ msgstr "Stav podílení účastníka" #. module: base_calendar #: view:crm.meeting:0 msgid "Mail To" -msgstr "" +msgstr "Odeslat na" #. module: base_calendar #: field:crm.meeting,name:0 @@ -360,6 +360,8 @@ msgid "" "Holds the Chatter summary (number of messages, ...). This summary is " "directly in html format in order to be inserted in kanban views." msgstr "" +"Udržuje souhrn klábosení (počet zpráv, ...). Tento souhrn je přímo ve " +"formátu HTML aby jej bylo možné vložit do pohledů kanban." #. module: base_calendar #: code:addons/base_calendar/base_calendar.py:399 @@ -528,7 +530,7 @@ msgstr "Informace budíku události" #: code:addons/base_calendar/base_calendar.py:1010 #, python-format msgid "Count cannot be negative or 0." -msgstr "" +msgstr "Počet nemůže být záporný nebo nulový." #. module: base_calendar #: field:crm.meeting,create_date:0 @@ -547,7 +549,7 @@ msgstr "Událost" #: selection:calendar.todo,rrule_type:0 #: selection:crm.meeting,rrule_type:0 msgid "Month(s)" -msgstr "" +msgstr "měsíc" #. module: base_calendar #: view:calendar.event:0 @@ -569,7 +571,7 @@ msgstr "URL Caldav" #. module: base_calendar #: model:ir.model,name:base_calendar.model_mail_wizard_invite msgid "Invite wizard" -msgstr "" +msgstr "Průvodce pozvánkou" #. module: base_calendar #: selection:calendar.event,month_list:0 @@ -1127,7 +1129,7 @@ msgstr "" #: field:calendar.todo,end_type:0 #: field:crm.meeting,end_type:0 msgid "Recurrence Termination" -msgstr "" +msgstr "Ukončení opakování" #. module: base_calendar #: view:crm.meeting:0 @@ -1185,6 +1187,14 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klepněte pro naplánování nové schůzky.\n" +"

\n" +" Kalendář je sdílen zaměstnanci a je propojen\n" +" s dalšími moduly, jako dovolené zaměstnanců nebo obchodní\n" +" příležitosti.\n" +"

\n" +" " #. module: base_calendar #: help:calendar.alarm,description:0 @@ -1330,7 +1340,7 @@ msgstr "ir.values" #. module: base_calendar #: view:crm.meeting:0 msgid "Search Meetings" -msgstr "" +msgstr "Hledat schůzky" #. module: base_calendar #: model:ir.model,name:base_calendar.model_ir_attachment @@ -1366,6 +1376,13 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klepni zde pro nastavení nového druhu upozornění.\n" +"

\n" +" Můžete vytvořit své upozornění, které pak můžete\n" +" použít pro události nebo schůzky v kalendáři.\n" +"

\n" +" " #. module: base_calendar #: selection:crm.meeting,state:0 @@ -1416,6 +1433,7 @@ msgid "" "Contains the text to be used as the message subject for " "email or contains the text to be used for display" msgstr "" +"Obsahuje text, který bude použit jako předmět e-mailu nebo pro zobrazení" #. module: base_calendar #: model:ir.model,name:base_calendar.model_mail_message diff --git a/addons/base_import/i18n/hr.po b/addons/base_import/i18n/hr.po index cb21df6c88b..c4d23e2020b 100644 --- a/addons/base_import/i18n/hr.po +++ b/addons/base_import/i18n/hr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-21 23:00+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-02-13 22:57+0000\n" +"Last-Translator: Davor Bojkić \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-01-18 06:36+0000\n" -"X-Generator: Launchpad (build 16430)\n" +"X-Launchpad-Export-Date: 2013-02-14 05:36+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: base_import #. openerp-web @@ -29,7 +29,7 @@ msgstr "Dohvati sve moguće vrijednosti" #: code:addons/base_import/static/src/xml/import.xml:71 #, python-format msgid "Need to import data from an other application?" -msgstr "" +msgstr "Potreban je uvoz podataka iz druge aplikacije?" #. module: base_import #. openerp-web @@ -47,6 +47,15 @@ msgid "" "give \n" " you an example for Products and their Categories." msgstr "" +"Kada koristite vanjske ID-eve, možete uvesti csv datoteke \n" +" sa kolonom \"External ID\" " +"definirate vanjski ID svakog zapisa \n" +" koji uvozite. Tada ćete biti " +"u mogućnosti napraviti referencu \n" +" na taj zapis sa kolonama tipa " +"\"polje/External ID\". Sljedeća dvije \n" +" csv datoteke daju primjer za " +"proizvode i njihove kategorije." #. module: base_import #. openerp-web @@ -56,13 +65,16 @@ msgid "" "How to export/import different tables from an SQL \n" " application to OpenERP?" msgstr "" +"Kako izvesti/uvesti različite tablice iz SQL \n" +" " +"programa u OpenERP" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/js/import.js:310 #, python-format msgid "Relation Fields" -msgstr "" +msgstr "Relacijska polja" #. module: base_import #. openerp-web @@ -72,6 +84,9 @@ msgid "" "Country/Database ID: the unique OpenERP ID for a \n" " record, defined by the ID postgresql column" msgstr "" +"Država/ID baze: jedinstveni OpenERP ID za \n" +" " +" zapis, definran kolonom postgres kolonom ID" #. module: base_import #. openerp-web @@ -87,6 +102,16 @@ msgid "" "\n" " have a unique Database ID)" msgstr "" +"Korištenje \n" +" Država/ID " +"BAze : ovo bi trebali rijetko koristiti\n" +" za " +"označavanje. Ovo je većinom korišteno od strane programera\n" +" jer je " +"glavna prednost ovoga to što nikad nema konflikata \n" +" (možete " +"imati više zapisa istog naziva, ali uvjek sa jedinstvenim IDentifikatorom u " +"Bazi)" #. module: base_import #. openerp-web @@ -96,6 +121,9 @@ msgid "" "For the country \n" " Belgium, you can use one of these 3 ways to import:" msgstr "" +"Za državu \n" +" " +" Belgiju, možete koristiti jedan od ova 3 načina uza uvoz:" #. module: base_import #. openerp-web @@ -121,13 +149,20 @@ msgid "" "companies) TO \n" " '/tmp/company.csv' with CSV HEADER;" msgstr "" +"kopirajte \n" +" (select " +"'company_'||id as \"External ID\",company_name\n" +" as " +"\"Name\",'True' as \"Is a Company\" from companies) TO\n" +" " +"'/tmp/company.csv' with CSV HEADER;" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:206 #, python-format msgid "CSV file for Manufacturer, Retailer" -msgstr "" +msgstr "CSV datoteka za Proizvođače, Veletrgovce" #. module: base_import #. openerp-web @@ -139,6 +174,11 @@ msgid "" "\n" " data from a third party application." msgstr "" +"Koristi \n" +" Država/Vanjski ID. " +"koristite vanjski ID kad uvozite \n" +" podatke iz drugih " +"aplikacija." #. module: base_import #. openerp-web @@ -152,7 +192,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:80 #, python-format msgid "XXX/External ID" -msgstr "" +msgstr "XXX/Vanjski ID" #. module: base_import #. openerp-web @@ -181,6 +221,14 @@ msgid "" "\n" " See the following question." msgstr "" +"Primjetite da vaša csv datoteka \n" +" ima tabulator za " +"odvajanje, a OpenERP neće \n" +" primjetiti ta odvajanja. " +"Morate promjineiti format \n" +" zapisa u vašem tabličnom " +"kalkulatoru. \n" +" Vidi sljedeće pitanje." #. module: base_import #. openerp-web @@ -199,7 +247,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:239 #, python-format msgid "Can I import several times the same record?" -msgstr "" +msgstr "Mogu li isti zapis uvesti nekoliko puta?" #. module: base_import #. openerp-web @@ -213,7 +261,7 @@ msgstr "Potvrdi" #: code:addons/base_import/static/src/xml/import.xml:55 #, python-format msgid "Map your data to OpenERP" -msgstr "" +msgstr "Mapirajte vaše podatke na OpenERP" #. module: base_import #. openerp-web @@ -224,6 +272,10 @@ msgid "" " the easiest way when your data come from CSV files \n" " that have been created manually." msgstr "" +"Korištenje Države: ovo je \n" +" najlakši način kada vaši " +"podaci dolaze iz csv datoteka\n" +" koje su sastavljene ručno." #. module: base_import #. openerp-web @@ -233,6 +285,8 @@ msgid "" "What's the difference between Database ID and \n" " External ID?" msgstr "" +"Koja je razlika izmeži ID Baze i \n" +" vanjski ID?" #. module: base_import #. openerp-web @@ -244,25 +298,30 @@ msgid "" "\n" " you 3 different fields to import:" msgstr "" +"Na primjer, \n" +" referenciranje države " +"kontakta, OpenERP predlaže \n" +" 3 različita polja za " +"uvoz :" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:175 #, python-format msgid "What can I do if I have multiple matches for a field?" -msgstr "" +msgstr "Što da radim ako imam više istih zapisa za polje?" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:302 #, python-format msgid "External ID,Name,Is a Company" -msgstr "" +msgstr "Vanjski ID , Naziv, Je Tvrtka" #. module: base_import #: field:base_import.tests.models.preview,somevalue:0 msgid "Some Value" -msgstr "" +msgstr "Neka vrijednost" #. module: base_import #. openerp-web @@ -272,6 +331,9 @@ msgid "" "The following CSV file shows how to import \n" " suppliers and their respective contacts" msgstr "" +"Sljedeća csv datoteka pokazuje kako uvesti \n" +" " +" dobavljače i njihove pripadne kontakte" #. module: base_import #. openerp-web @@ -281,6 +343,9 @@ msgid "" "How can I change the CSV file format options when \n" " saving in my spreadsheet application?" msgstr "" +"Kako da promijenim opcije csv formata \n" +" " +"kada spremam datoteku u tabličnom kalkulatoru?" #. module: base_import #. openerp-web @@ -301,6 +366,21 @@ msgid "" "orignial \n" " database)." msgstr "" +"kako možete vidjeti iz ove datoteke, Fabien i Laurence \n" +" " +" rade za organizaciju Biggies (company_1), a \n" +" " +" Eric radi za Organi. Pozezivanje osoba i " +"organizacija se radi \n" +" " +" korištenjem Vanjskog ID-a organizacije. Morali smo " +"staviti prefix \n" +" " +" naziva tablice na Vanjski ID da izbjegnemo konflikt " +"istog ID-a osobe \n" +" " +" i organizacije (osoba_1 i organizacija_1 koji dijele " +"isti ID u originalnoj bazi)." #. module: base_import #. openerp-web @@ -315,13 +395,20 @@ msgid "" "\n" " '/tmp/person.csv' with CSV" msgstr "" +"kopirajte \n" +" (select'person_'||id as \"External ID\",person_name " +"as\n" +" \"Name\",'False' as \"Is a " +"Company\",'company_'||company_id\n" +" as \"Related Company/External ID\" from persons) TO\n" +" '/tmp/person.csv' with CSV" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:148 #, python-format msgid "Country: Belgium" -msgstr "" +msgstr "Država : Belgija" #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_char_stillreadonly @@ -342,7 +429,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:233 #, python-format msgid "Suppliers and their respective contacts" -msgstr "" +msgstr "Dobavljači i njihovi pripadni kontakti" #. module: base_import #. openerp-web @@ -364,6 +451,23 @@ msgid "" "category \n" " hierarchy." msgstr "" +"Ako na primjer imate dvije kategorije proizvoda \n" +" " +" sa podređenim nazivom \"za prodaju\" (npr. \"razno/proizvodi /za " +"prodaju\"\n" +" " +" i \"ostali proizvodi/za prodaju\" vaša validacija je zadržana, ali još " +"uvijek možete\n" +" " +" uvesti vaše podatke. Pazite, ne preporučamo vam da uvozite podatke jer\n" +" " +" će oni biti povezani na prvu kategoriju \"za prodaju\" pronađenu u " +"popisu \n" +" " +" kategorija (\"razno/proizvodi/za prodaju\"). Preporučamo Vam da " +"izmjenite \n" +" " +" jednu od dvostrukih vrijednosti ili hijerarhiju vaših kategorija." #. module: base_import #. openerp-web @@ -375,6 +479,11 @@ msgid "" "\n" " PSQL:" msgstr "" +"Za stvaranje csv datoteke za osobe povezane sa \n" +" " +" organizacijama, koristimo ljedeću SQL naredbu u \n" +" " +" PSQL:" #. module: base_import #. openerp-web @@ -386,6 +495,13 @@ msgid "" " (in 'Save As' dialog box > click 'Tools' dropdown \n" " list > Encoding tab)." msgstr "" +"Microsoft Excell će vam omogućiti \n" +" da promjenite kodnu stranu " +"jedino kod snimanja \n" +" (U 'Save as' dijalogu > " +"kliknite na 'Tools' padajući izbornik > \n" +" odaberite 'Encoding' " +"karticu)" #. module: base_import #: field:base_import.tests.models.preview,othervalue:0 @@ -402,6 +518,13 @@ msgid "" " later, it's thus good practice to specify it\n" " whenever possible" msgstr "" +"će također biti korišteno za ažuriranje originalnog \n" +" " +"uvoza, ako kasnije trebate ponovo uvesti \n" +" " +"izmjenjene podatke, zato se smatra dobrom praksom \n" +" " +"koristiti kad god je moguće" #. module: base_import #. openerp-web @@ -411,6 +534,9 @@ msgid "" "file to import. If you need a sample importable file, you\n" " can use the export tool to generate one." msgstr "" +"datoteka za uvoz. Ako trebate uzorak datoteke koja se može uvesti,\n" +" možete koristiti " +"alat za izvoz da napravite jednu." #. module: base_import #. openerp-web @@ -419,7 +545,7 @@ msgstr "" msgid "" "Country/Database \n" " ID: 21" -msgstr "" +msgstr "Država/Baza" #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_char @@ -429,14 +555,14 @@ msgstr "" #. module: base_import #: help:base_import.import,file:0 msgid "File to check and/or import, raw binary (not base64)" -msgstr "" +msgstr "Datoteke za provjeru i/ili uvoz, raw binary ( ne base64)" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:230 #, python-format msgid "Purchase orders with their respective purchase order lines" -msgstr "" +msgstr "Narudžbe i njihove pripadne stavke" #. module: base_import #. openerp-web @@ -448,6 +574,14 @@ msgid "" " field corresponding to the column. This makes imports\n" " simpler especially when the file has many columns." msgstr "" +"Ako datoteka sadrži\n" +" nazive kolona, OpenERP može " +"pokušati \n" +" automatski odrediti polja koja " +"odgovaraju kolonama. \n" +" Ovo čini uvoz jednostavnijim " +"pogotovo ako datoteka ima \n" +" mnogo kolona." #. module: base_import #. openerp-web @@ -464,6 +598,8 @@ msgid "" ". The issue is\n" " usually an incorrect file encoding." msgstr "" +". Problem je \n" +" obično netočna kodna strana." #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_m2o_required @@ -490,6 +626,19 @@ msgid "" "filter \n" " settings' > Save)." msgstr "" +"Ako uređujete i premate CSV datoteku u tabličnom kalkulatoru \n" +" " +" vaše regionalne postavke sa računala će biti\n" +" " +" primjenjene na separatore i odvajanja. \n" +" " +" Preporučamo da koristite OpenOffice ili LibreOffice kalkulator\n" +" " +" jer vam oni omogućuju izmjene sve tri postavke\n" +" " +" (u 'Spremi kao' dijalogu > označite 'uredi postavke filtera' \n" +" " +" > Spremi)" #. module: base_import #. openerp-web @@ -519,7 +668,7 @@ msgstr "ID baze podataka" #: code:addons/base_import/static/src/xml/import.xml:313 #, python-format msgid "It will produce the following CSV file:" -msgstr "" +msgstr "Će napraviti sljedeću csv datoteku:" #. module: base_import #. openerp-web @@ -548,7 +697,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:360 #, python-format msgid "Import preview failed due to:" -msgstr "" +msgstr "Predpregled uvoza nije uspio zbog:" #. module: base_import #. openerp-web @@ -560,6 +709,11 @@ msgid "" "\n" " that imported it)" msgstr "" +"Područje/Vanjski ID : ID ovog zapisa \n" +" je " +"referenciran u drugoj aplikaciji (ili XML datoteci \n" +" iz " +"koje je uvezen)" #. module: base_import #. openerp-web @@ -588,6 +742,19 @@ msgid "" "\n" " per field you want to import." msgstr "" +"Neka polja definiraju poveznice sa drugim \n" +" " +" objektima. na primjer, područje kontakta je veza \n" +" " +" na zapis objekta 'područje'. Kada ćelite uvesti ovakva polja, \n" +" " +" OpenERP će ponovo stvoriti veze između različitih zapisa.\n" +" " +" Da bi vam pomogao uvesti takva polja, OpenERP pruža 3 \n" +" " +" mehanizma. Možete koristiti jedan i samo jedan mehanizam \n" +" " +" po polju koje želite uvesti." #. module: base_import #. openerp-web @@ -601,6 +768,13 @@ msgid "" " then you will encode it as follow \"Manufacturer,\n" " Retailer\" in the same column of your CSV file." msgstr "" +"Podaci bi trebali biti odvojeni sa zarezima bez ikakvih \n" +" " +" razmaka. Na primjer. ako želite da vaš partner bude \n" +" " +" označen kao 'kupac' i kao 'dobavljač' tada u vačem CSV-u \n" +" " +" unosite \"kupac, dobavljač\" u istoj koloni." #. module: base_import #: code:addons/base_import/models.py:264 @@ -643,7 +817,7 @@ msgstr "Uvezi CSV datoteku" #: code:addons/base_import/static/src/js/import.js:74 #, python-format msgid "Quoting:" -msgstr "" +msgstr "Navođenje:" #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_m2o_required_related @@ -670,7 +844,7 @@ msgstr "Uvoz" #: code:addons/base_import/static/src/js/import.js:407 #, python-format msgid "Here are the possible values:" -msgstr "" +msgstr "Evo mogućih vrijednosti:" #. module: base_import #. openerp-web @@ -687,13 +861,15 @@ msgid "" "A single column was found in the file, this often means the file separator " "is incorrect" msgstr "" +"U datoteci je nađena samo jedna kolona, to često znači da je format " +"razdjelnika neispravan." #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:293 #, python-format msgid "dump of such a PostgreSQL database" -msgstr "" +msgstr "dump takve PostgereSQL baze" #. module: base_import #. openerp-web @@ -710,6 +886,9 @@ msgid "" "The following CSV file shows how to import purchase \n" " orders with their respective purchase order lines:" msgstr "" +"Sljedeća csv datoteka pokazuje kako uvesti \n" +" naloge za nabavu sa " +"njihovm pripadnim stavkama :" #. module: base_import #. openerp-web @@ -719,6 +898,9 @@ msgid "" "What can I do when the Import preview table isn't \n" " displayed correctly?" msgstr "" +"Što mogu uraditi kada se tablice Predpregleda za uvoz\n" +" " +" ne prikazuju ispravno?" #. module: base_import #: field:base_import.tests.models.char,value:0 @@ -749,7 +931,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:149 #, python-format msgid "Country/External ID: base.be" -msgstr "" +msgstr "Područje/Vanjski ID : base.be" #. module: base_import #. openerp-web @@ -764,20 +946,29 @@ msgid "" " the company he work for. (If you want to test this \n" " example, here is a" msgstr "" +"Kao primjer, pretpostavimo da imate SQL bazu \n" +" " +" sa dvije tablice koje želite uvesti: tvrtke i \n" +" " +" osobe. Svaka osoba pripada jednoj tvrtci, tako da \n" +" " +" ćete morati ponovo stvoriti poveznicu između osobe \n" +" " +" i tvrtke za koju radi. (Ako želite probati ovaj primjer, ovdje je" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/js/import.js:396 #, python-format msgid "(%d more)" -msgstr "" +msgstr "(%d više)" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:227 #, python-format msgid "File for some Quotations" -msgstr "" +msgstr "Dadoteka sa nekim ponudama" #. module: base_import #. openerp-web @@ -804,6 +995,19 @@ msgid "" "\n" " table. (like 'company_1', 'person_1' instead of '1')" msgstr "" +"Za upravljanje relacijama između tablica, \n" +" " +"možete koristiti \"Vanjski ID\" mogućnosti OpenERP-a. \n" +" " +"\"Vanjski ID\" zapisa je jedinstveni identifikator ovog zapisa\n" +" u " +"drugoj aplikaciji. Ovaj \"Vanjski ID\" mora biti jedinstven u\n" +" u " +"svim zapisima i svim objektima, pa je uobičajena dobra praksa\n" +" " +"dati prefiks tom \"Vanjskom ID\" po nazivu aplikacije ili tablice. \n" +" " +"(npr. 'company_1', 'osoba_1' umjesto '1')" #. module: base_import #. openerp-web @@ -814,6 +1018,9 @@ msgid "" " \"External ID\". In PSQL, write the following " "command:" msgstr "" +"Prvo ćemo izvesti ave organizacije i njihove \n" +" " +" \"Vanjske ID\". U PSQL, napišite sljedeću narebu:" #. module: base_import #. openerp-web @@ -823,13 +1030,16 @@ msgid "" "How can I import a one2many relationship (e.g. several \n" " Order Lines of a Sales Order)?" msgstr "" +"Kako da uvezem one2many relaciju (npr. nekoliko \n" +" " +" stavki prodajnog maloga)?" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/js/import.js:373 #, python-format msgid "Everything seems valid." -msgstr "" +msgstr "Sve se čini u redu." #. module: base_import #. openerp-web @@ -842,6 +1052,13 @@ msgid "" " use make use of the external ID for this field \n" " 'Category'." msgstr "" +"Međutim ukoliko ne želite mijenjati vaše \n" +" " +"postavke kategorija proizvoda, preporučamo vam da \n" +" " +"koristite vanjski ID za ovo polje \n" +" " +"'Kagtegorija'." #. module: base_import #. openerp-web @@ -858,6 +1075,9 @@ msgid "" "How can I import a many2many relationship field \n" " (e.g. a customer that has multiple tags)?" msgstr "" +"Kako mogu uvesti many2many relacijsko polje \n" +" " +" (npr, kupac koji ima višestruke oznake)?" #. module: base_import #. openerp-web @@ -880,6 +1100,15 @@ msgid "" " link between each person and the company they work \n" " for)." msgstr "" +"Ako trebate uvesti podatke iz različitih tablica, \n" +" " +" morate ponovo kreirati relacije između zapisa \n" +" " +" koji pripadaju različitim tablicama. (npr. ako uvozite\n" +" " +" organizacije i osobe, morate ponovo kreirati poveznicu\n" +" " +" između između svake osobe i organizacije za koju osoba radi)." #. module: base_import #. openerp-web @@ -892,6 +1121,13 @@ msgid "" " Here is when you should use one or the other, \n" " according to your need:" msgstr "" +"Sukladno vačim potrebama trebali bi koristiti \n" +" " +"jedan od 3 načina referenciranja zapisa u relacijama.\n" +" " +"Ovdje trebate koristiti jedan raspoloživih prema, \n" +" " +"vačim potrebama :" #. module: base_import #. openerp-web @@ -914,6 +1150,15 @@ msgid "" " will set the EMPTY value in the field, instead of \n" " assigning the default value." msgstr "" +"Ako ne postavite sva polja u vašoj csv datoteci, \n" +" OpenERP će " +"dodijeliti zadane vrijednosti za svako \n" +" nedefinirano " +"polje, ali ako postavite polja sa praznim virjenostima u csv-u \n" +" OpenERP će " +"postaviti vrijednost tih polja na \"PRAZNO\", umjesto da im \n" +" dodijeli zadane " +"vrijednosti" #. module: base_import #. openerp-web @@ -930,6 +1175,9 @@ msgid "" "What happens if I do not provide a value for a \n" " specific field?" msgstr "" +"Što se dešava ako ne dajem vrijednost za \n" +" " +"pojedino polje?" #. module: base_import #. openerp-web @@ -957,6 +1205,11 @@ msgid "" "spreadsheet \n" " application." msgstr "" +"Ovo vam \n" +" omogućuje da " +"koristite alat za Uvoz/Izvoz OpenERP-a \n" +" za izmjenu serija " +"zapisa u vašem omiljenom tabličnom kalkulatoru" #. module: base_import #. openerp-web @@ -967,6 +1220,10 @@ msgid "" " import an other record that links to the first\n" " one, use" msgstr "" +"kolona u OpenERP-u. Kada \n" +" uvozite drugi zapis " +"koji se referencira na prvi\n" +" koristite" #. module: base_import #. openerp-web @@ -987,20 +1244,33 @@ msgid "" " take care of creating or modifying each record \n" " depending if it's new or not." msgstr "" +"Ako uvozite datoteku koja sadži jednu od \n" +" " +"kolona \"Vanjski ID\" ili \"ID Baze\", zapisi koje ste već\n" +" " +"uvezli će biti izmjenjeni umjesto stvoreni. Ovo je \n" +" " +"veoma korisno i dozvoljava vam da uvozite nekoliko puta \n" +" " +"istu CSV datoteku, upisujući neke izmjene između dva\n" +" " +"uvoza. OpenERP će se pobrinuti o stvaranju ili izmjeni \n" +" " +"svakog zapisa ovisno o tome da li je novi ili postojeći." #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:169 #, python-format msgid "CSV file for categories" -msgstr "" +msgstr "CSV datoteka za kategorije" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/js/import.js:309 #, python-format msgid "Normal Fields" -msgstr "" +msgstr "Normalna polja" #. module: base_import #. openerp-web @@ -1012,6 +1282,11 @@ msgid "" " identifier from the original application and\n" " map it to the" msgstr "" +"kako bi ponovo napravili relacije između\n" +" " +"različitih zapisa, trebali bi koristiti jedinstveni\n" +" " +"identifikator iz originalnog zapisa i njega mapirati na" #. module: base_import #. openerp-web @@ -1038,6 +1313,19 @@ msgid "" "\n" " the fields relative to the order." msgstr "" +"Ako želite uvesti prodajne naloge koji sadrže nekoliko \n" +" " +" stavki, za svaku stavku morate rezervirati\n" +" " +" njezin red u CSV datoteci. Prva stavka naloga \n" +" " +" će biti uvezena ako informacija vezana za taj \n" +" " +" nalog. Svaka dodatna stavka će trebati svoj\n" +" " +" dodatni red koji nema nikakve podatke u poljima\n" +" " +" vezanim za taj nalog." #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_m2o_related @@ -1054,7 +1342,7 @@ msgstr "Naziv" #: code:addons/base_import/static/src/xml/import.xml:80 #, python-format msgid "to the original unique identifier." -msgstr "" +msgstr "originalni jedinstveni identifikator" #. module: base_import #. openerp-web @@ -1090,6 +1378,17 @@ msgid "" " to the first company). You must first import the \n" " companies and then the persons." msgstr "" +"Dvije dobivene datoteke su spremne da budu uvežene u \n" +" " +" OpenERP bez ikakvih izmjena. Nakon uvoza\n" +" " +" ove dvije CSV datoteke, imaćete 4 kontakta \n" +" " +" i 3 organizacije. (prva dva kontakta su povezana na\n" +" " +" prvu organizaciju). Prvo morate uvesti organizacije\n" +" " +" a potom kontakte." #. module: base_import #. openerp-web @@ -1103,6 +1402,15 @@ msgid "" " (displayed under the Browse CSV file bar after you \n" " select your file)." msgstr "" +"Zadane postavke predpogleda za uvoz su zarezi \n" +" " +" za razdvajanje polja, i navodnici kao oznaka teksta. \n" +" " +" Ako vaša CSV datoteka nema ove postavke, možete ih \n" +" " +" izmjeniti u Opcijama postavki formata. (prikazanim u traci\n" +" " +" Potraži CSV datoteku nakon što odaberete jednu)." #. module: base_import #. openerp-web @@ -1131,14 +1439,14 @@ msgstr "Vanjski ID" #: code:addons/base_import/static/src/xml/import.xml:39 #, python-format msgid "File Format Options…" -msgstr "" +msgstr "Opcije Formata datoteka..." #. module: base_import #. openerp-web #: code:addons/base_import/static/src/js/import.js:392 #, python-format msgid "between rows %d and %d" -msgstr "" +msgstr "između reda %d i %d" #. module: base_import #. openerp-web @@ -1163,4 +1471,4 @@ msgstr "" #. module: base_import #: field:base_import.import,file:0 msgid "File" -msgstr "" +msgstr "Datoteka" diff --git a/addons/procurement/i18n/mn.po b/addons/procurement/i18n/mn.po index c88ed5041b2..06ac63d6e03 100644 --- a/addons/procurement/i18n/mn.po +++ b/addons/procurement/i18n/mn.po @@ -14,13 +14,13 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n" +"X-Launchpad-Export-Date: 2013-02-14 05:36+0000\n" "X-Generator: Launchpad (build 16491)\n" #. module: procurement #: model:ir.ui.menu,name:procurement.menu_stock_sched msgid "Schedulers" -msgstr "Төлөвлөгч" +msgstr "Товлогч" #. module: procurement #: model:ir.model,name:procurement.model_make_procurement diff --git a/addons/stock/i18n/mn.po b/addons/stock/i18n/mn.po index b42839648c0..b1c07b7f198 100644 --- a/addons/stock/i18n/mn.po +++ b/addons/stock/i18n/mn.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-02-13 04:17+0000\n" +"PO-Revision-Date: 2013-02-14 03:59+0000\n" "Last-Translator: gobi \n" "Language-Team: Mongolian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n" +"X-Launchpad-Export-Date: 2013-02-14 05:36+0000\n" "X-Generator: Launchpad (build 16491)\n" #. module: stock @@ -88,7 +88,7 @@ msgstr "Сөрөг урсгалыг Хөтлөх боломж" #: field:stock.picking.in,date_done:0 #: field:stock.picking.out,date_done:0 msgid "Date of Transfer" -msgstr "" +msgstr "Шилжүүлэх огноо" #. module: stock #: field:product.product,track_outgoing:0 @@ -160,7 +160,7 @@ msgstr "Тоо хэмжээ сөрөг байж болохгүй." #: view:stock.picking:0 #: view:stock.picking.in:0 msgid "Picking list" -msgstr "Агуулахын баримт" +msgstr "Бэлтгэх Жагсаалт" #. module: stock #: report:lot.stock.overview:0 @@ -319,7 +319,7 @@ msgstr "Боловсруулах Бараанууд" #. module: stock #: view:stock.move:0 msgid "New Pack" -msgstr "" +msgstr "Шинэ ачаа" #. module: stock #: help:stock.fill.inventory,set_stock_zero:0 @@ -472,7 +472,7 @@ msgstr "Хоцролт (Өдөрөөр)" #. module: stock #: selection:stock.picking.out,state:0 msgid "Ready to Deliver" -msgstr "" +msgstr "Хүргэхэд бэлэн" #. module: stock #: model:ir.model,name:stock.model_action_traceability @@ -536,7 +536,7 @@ msgstr "Валютын дундаж үнэ" #. module: stock #: view:product.product:0 msgid "Stock and Expected Variations" -msgstr "" +msgstr "Нөөц болон таамаглагдсан хазайлт" #. module: stock #: help:product.category,property_stock_valuation_account_id:0 @@ -564,7 +564,7 @@ msgstr "" #: code:addons/stock/product.py:196 #, python-format msgid "Products: " -msgstr "Бараа: " +msgstr "Бараанууд " #. module: stock #: field:report.stock.inventory,location_type:0 @@ -681,7 +681,7 @@ msgstr "Баглаа" #. module: stock #: model:ir.actions.report.xml,name:stock.report_picking_list_in msgid "Receipt Slip" -msgstr "" +msgstr "Хүлээн авсан тасалбар" #. module: stock #: code:addons/stock/wizard/stock_move.py:214 @@ -743,7 +743,7 @@ msgstr "Нэмэлт Сурвалжууд" #. module: stock #: view:stock.partial.picking.line:0 msgid "Stock Picking Line" -msgstr "" +msgstr "Бараа Бэлтгэх баримтын мөр" #. module: stock #: field:stock.location,complete_name:0 @@ -884,7 +884,7 @@ msgstr "Хураангуй" #. module: stock #: view:product.category:0 msgid "Account Stock Properties" -msgstr "" +msgstr "Барааны дансны үзүүлэлтүүд" #. module: stock #: sql_constraint:stock.picking:0 @@ -936,7 +936,7 @@ msgstr "Гологдол Бараанууд" #. module: stock #: view:product.product:0 msgid "- update" -msgstr "" +msgstr "- шинэчлэх" #. module: stock #: report:stock.picking.list:0 @@ -974,7 +974,7 @@ msgstr "IT Нийлүүлэгчид" #. module: stock #: view:stock.config.settings:0 msgid "Location & Warehouse" -msgstr "" +msgstr "Байрлал & Агуулах" #. module: stock #: selection:report.stock.inventory,location_type:0 @@ -993,7 +993,7 @@ msgstr "" #. module: stock #: field:stock.config.settings,decimal_precision:0 msgid "Decimal precision on weight" -msgstr "" +msgstr "Жингийн аравны нарийвчлал" #. module: stock #: view:stock.production.lot:0 @@ -1049,7 +1049,7 @@ msgstr "Дэлгэрэнгүй" #. module: stock #: selection:stock.picking,state:0 msgid "Ready to Transfer" -msgstr "" +msgstr "Шилжүүлэхэд бэлэн" #. module: stock #: report:lot.stock.overview:0 @@ -1089,7 +1089,7 @@ msgstr "Журнал" #. module: stock #: model:ir.actions.act_window,name:stock.action_stock_invoice_onshipping msgid "Create Draft Invoices" -msgstr "" +msgstr "Ноорог нэхэмжлэл үүсгэх" #. module: stock #: help:stock.picking,location_id:0 @@ -1107,7 +1107,7 @@ msgstr "" #. module: stock #: selection:stock.picking.in,state:0 msgid "Ready to Receive" -msgstr "" +msgstr "Хүлээн авахад бэлэн" #. module: stock #: view:stock.move:0 @@ -1138,12 +1138,12 @@ msgstr "Захиалгаарх хүлээн авалт/хүргэлт" #. module: stock #: view:stock.production.lot:0 msgid "Product Lots" -msgstr "" +msgstr "Олон бараанууд" #. module: stock #: view:stock.picking:0 msgid "Reverse Transfer" -msgstr "" +msgstr "Эсрэг шилжүүлэг" #. module: stock #: field:stock.config.settings,group_uos:0 @@ -1217,7 +1217,7 @@ msgstr "Үйлдвэрлэлийн байрлал" #: code:addons/stock/product.py:121 #, python-format msgid "Please define journal on the product category: \"%s\" (id: %d)." -msgstr "" +msgstr "Дараах барааны ангилалд журналыг тодорхойлно уу. \"%s\"(id:%d)." #. module: stock #: field:report.stock.lines.date,date:0 @@ -1294,7 +1294,7 @@ msgstr "" #. module: stock #: report:stock.picking.list:0 msgid "Internal Shipment :" -msgstr "" +msgstr "Дотоодын тээвэрлэлт:" #. module: stock #: view:stock.inventory.line:0 @@ -1310,7 +1310,7 @@ msgstr "Гар аргаар тохируулах" #: view:report.stock.move:0 #: field:report.stock.move,picking_id:0 msgid "Shipment" -msgstr "" +msgstr "Тээвэрлэлт" #. module: stock #: view:stock.location:0 @@ -1333,7 +1333,7 @@ msgstr "" #: code:addons/stock/product.py:113 #, python-format msgid "Please specify company in Location." -msgstr "" +msgstr "Компанийг байрлалд тодорхой заана уу." #. module: stock #: view:stock.move:0 @@ -1370,7 +1370,7 @@ msgstr "Тооллого" #: code:addons/stock/wizard/stock_move.py:214 #, python-format msgid "Processing Error!" -msgstr "" +msgstr "Боловсруулалтын алдаа!" #. module: stock #: help:stock.location,chained_company_id:0 @@ -1415,7 +1415,7 @@ msgstr "Нийт тоо хэмжээ" #: field:stock.picking.in,min_date:0 #: field:stock.picking.out,min_date:0 msgid "Scheduled Time" -msgstr "" +msgstr "Товлосон хугацаа" #. module: stock #: model:ir.actions.act_window,name:stock.move_consume @@ -1506,7 +1506,7 @@ msgstr "" #: code:addons/stock/stock.py:1890 #, python-format msgid "Warning: No Back Order" -msgstr "" +msgstr "Анхааруулга: Захиалга буцаагдаагүй" #. module: stock #: model:ir.model,name:stock.model_stock_move @@ -1623,7 +1623,7 @@ msgstr "Хуваах" #. module: stock #: model:ir.actions.report.xml,name:stock.report_picking_list_out msgid "Delivery Slip" -msgstr "" +msgstr "Хүргэлийн тасалбар" #. module: stock #: model:ir.actions.act_window,name:stock.open_board_warehouse @@ -1710,7 +1710,7 @@ msgstr "Доод хөдөлгөөнийг хянах" #. module: stock #: view:stock.picking.in:0 msgid "Receive" -msgstr "" +msgstr "Хүлээн авах" #. module: stock #: model:res.company,overdue_msg:stock.res_company_1 @@ -1795,7 +1795,7 @@ msgstr "" #: view:product.product:0 #: view:product.template:0 msgid "Storage Location" -msgstr "" +msgstr "Хадгалах байрлал" #. module: stock #: help:stock.partial.move.line,currency:0 @@ -1836,7 +1836,7 @@ msgstr "Төлөвлөгдсөн Сар" #: help:stock.picking.in,origin:0 #: help:stock.picking.out,origin:0 msgid "Reference of the document" -msgstr "" +msgstr "Баримтын сурвалж" #. module: stock #: view:stock.picking:0 @@ -1900,7 +1900,7 @@ msgstr "Бэлэн байдлыг цуцлах" #: code:addons/stock/wizard/stock_location_product.py:49 #, python-format msgid "Current Inventory" -msgstr "" +msgstr "Одоогийн Тооллого" #. module: stock #: help:product.template,property_stock_production:0 @@ -1962,7 +1962,7 @@ msgstr "Хүргэгдсэн Тоо Хэмжээ" #. module: stock #: view:stock.partial.picking:0 msgid "Transfer Products" -msgstr "" +msgstr "Бараануудыг Шилжүүлэх" #. module: stock #: help:product.template,property_stock_inventory:0 @@ -2140,7 +2140,7 @@ msgstr "Бэлтгэлтийн Буцаалт" #: model:ir.actions.act_window,name:stock.act_stock_return_picking_in #: model:ir.actions.act_window,name:stock.act_stock_return_picking_out msgid "Return Shipment" -msgstr "" +msgstr "Буцаах Тээвэрлэлт" #. module: stock #: model:ir.model,name:stock.model_stock_inventory_merge @@ -2284,7 +2284,7 @@ msgstr "Маршрутын нэр" #. module: stock #: report:stock.picking.list:0 msgid "Supplier Address :" -msgstr "" +msgstr "Нийлүүлэгчийн хаяг:" #. module: stock #: view:stock.inventory.line:0 @@ -2360,7 +2360,7 @@ msgstr "Нийлүүлэгчийн байрлал" #. module: stock #: view:stock.location.product:0 msgid "View Products Inventory" -msgstr "" +msgstr "Барааны бүртгэлийг харах" #. module: stock #: view:stock.move:0 @@ -2371,7 +2371,7 @@ msgstr "Үүсгэх" #: code:addons/stock/stock.py:1776 #, python-format msgid "Operation forbidden !" -msgstr "" +msgstr "Үйлдэл хориотой !" #. module: stock #: view:report.stock.inventory:0 @@ -2909,7 +2909,7 @@ msgstr "Идэвхтэй ID нь Context-д алга" #: view:stock.move:0 #: view:stock.picking:0 msgid "Force Availability" -msgstr "боломжийг хурдасгах" +msgstr "Хүчээр бэлэн болгох" #. module: stock #: field:product.template,loc_rack:0 @@ -3213,7 +3213,7 @@ msgstr "" #. module: stock #: view:stock.move:0 msgid "Process" -msgstr "Процесс" +msgstr "Гүйцэтгэх" #. module: stock #: field:stock.production.lot.revision,name:0 @@ -4203,7 +4203,7 @@ msgstr "Хийсвэр Барааны Өртөг" #: view:stock.picking.in:0 #: view:stock.picking.out:0 msgid "Return Products" -msgstr "Буцаах Бараанууд" +msgstr "Бараанууд Буцаах" #. module: stock #: view:stock.inventory:0 @@ -4597,7 +4597,7 @@ msgstr "Хүрэх байршил" #. module: stock #: model:ir.actions.report.xml,name:stock.report_picking_list msgid "Picking Slip" -msgstr "" +msgstr "Бэлтгэлтийн тасалбар" #. module: stock #: help:stock.move,product_packaging:0 @@ -4868,7 +4868,7 @@ msgstr "Сонголттой: дараалсан хөдөлгөөний үе д #. module: stock #: view:stock.picking.out:0 msgid "Print Delivery Slip" -msgstr "" +msgstr "Хүргэлтийн тасалбарыг хэвлэх" #. module: stock #: view:report.stock.inventory:0 From 608ef49402126a00657980d0287ecc06b118f089 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Thu, 14 Feb 2013 10:33:51 +0100 Subject: [PATCH 144/158] [FIX] base_calendar search view bzr revid: al@openerp.com-20130214093351-l975g7wuik0h9op9 --- addons/base_calendar/crm_meeting_view.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/addons/base_calendar/crm_meeting_view.xml b/addons/base_calendar/crm_meeting_view.xml index c2adc01cd54..d9b659b91fa 100644 --- a/addons/base_calendar/crm_meeting_view.xml +++ b/addons/base_calendar/crm_meeting_view.xml @@ -234,11 +234,12 @@ - + + + - - + From ca175b0237a754a267c846e2549936d8d35930ec Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Thu, 14 Feb 2013 16:08:25 +0100 Subject: [PATCH 145/158] [FIX] openerp/service/report: missing import bzr revid: rco@openerp.com-20130214150825-dp0twlvzc8qrkb7v --- openerp/service/report.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openerp/service/report.py b/openerp/service/report.py index 520faa8ead5..90ea5e963ba 100644 --- a/openerp/service/report.py +++ b/openerp/service/report.py @@ -6,6 +6,8 @@ import threading import openerp.netsvc import openerp.pooler +import security + _logger = logging.getLogger(__name__) # TODO: set a maximum report number per user to avoid DOS attacks From 49adee3488ff81ec86e7770bf8e7f6b3e414e6e3 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Thu, 14 Feb 2013 16:35:11 +0100 Subject: [PATCH 146/158] [FIX] openerp/service/report: add all missing imports! bzr revid: rco@openerp.com-20130214153511-r5omlvy5xa1t6rlm --- openerp/service/report.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/openerp/service/report.py b/openerp/service/report.py index 90ea5e963ba..c20c7f0d7ec 100644 --- a/openerp/service/report.py +++ b/openerp/service/report.py @@ -1,10 +1,13 @@ # -*- coding: utf-8 -*- +import base64 import logging +import sys import threading import openerp.netsvc import openerp.pooler +from openerp import tools import security @@ -107,7 +110,7 @@ def exp_report(db, uid, object, ids, datas=None, context=None): cr.close() return True - thread.start_new_thread(go, (id, uid, ids, datas, context)) + threading.Thread(target=go, args=(id, uid, ids, datas, context)).start() return id def _check_report(report_id): From bf6c911b5d88c470dda2ea79f87bbe9ab848b440 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 14 Feb 2013 18:28:52 +0100 Subject: [PATCH 147/158] [IMP] remove whitespaces bzr revid: abo@openerp.com-20130214172852-l2vuptiwtc06xp47 --- addons/account/account_invoice.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index d7b2052305b..ddca98bc3b7 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -306,7 +306,7 @@ class account_invoice(osv.osv): ''' Find the partner for which the accounting entries will be created ''' - #if the chosen partner is not a company and has a parent company, use the parent for the journal entries + #if the chosen partner is not a company and has a parent company, use the parent for the journal entries #because you want to invoice 'Agrolait, accounting department' but the journal items are for 'Agrolait' part = inv.partner_id if part.parent_id and not part.is_company: @@ -417,7 +417,7 @@ class account_invoice(osv.osv): try: compose_form_id = ir_model_data.get_object_reference(cr, uid, 'mail', 'email_compose_message_wizard_form')[1] except ValueError: - compose_form_id = False + compose_form_id = False ctx = dict(context) ctx.update({ 'default_model': 'account.invoice', @@ -538,11 +538,11 @@ class account_invoice(osv.osv): return result def onchange_payment_term_date_invoice(self, cr, uid, ids, payment_term_id, date_invoice): - res = {} + res = {} if not date_invoice: date_invoice = time.strftime('%Y-%m-%d') if not payment_term_id: - return {'value':{'date_due': date_invoice}} #To make sure the invoice has a due date when no payment term + return {'value':{'date_due': date_invoice}} #To make sure the invoice has a due date when no payment term pterm_list = self.pool.get('account.payment.term').compute(cr, uid, payment_term_id, value=1, date_ref=date_invoice) if pterm_list: pterm_list = [line[0] for line in pterm_list] From 496a5803352815afc858b969005e513131f4f092 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 14 Feb 2013 18:31:56 +0100 Subject: [PATCH 148/158] [IMP] let the code breathe bzr revid: abo@openerp.com-20130214173156-e2o3ovrg6t8et90g --- addons/account/account_invoice.py | 6 ++++++ addons/auth_signup/res_users.py | 2 ++ 2 files changed, 8 insertions(+) diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index ddca98bc3b7..fe10e10f7b4 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -564,22 +564,27 @@ class account_invoice(osv.osv): obj_journal = self.pool.get('account.journal') account_obj = self.pool.get('account.account') inv_line_obj = self.pool.get('account.invoice.line') + if company_id and part_id and type: acc_id = False partner_obj = self.pool.get('res.partner').browse(cr,uid,part_id) + if partner_obj.property_account_payable and partner_obj.property_account_receivable: if partner_obj.property_account_payable.company_id.id != company_id and partner_obj.property_account_receivable.company_id.id != company_id: property_obj = self.pool.get('ir.property') rec_pro_id = property_obj.search(cr, uid, [('name','=','property_account_receivable'),('res_id','=','res.partner,'+str(part_id)+''),('company_id','=',company_id)]) pay_pro_id = property_obj.search(cr, uid, [('name','=','property_account_payable'),('res_id','=','res.partner,'+str(part_id)+''),('company_id','=',company_id)]) + if not rec_pro_id: rec_pro_id = property_obj.search(cr, uid, [('name','=','property_account_receivable'),('company_id','=',company_id)]) if not pay_pro_id: pay_pro_id = property_obj.search(cr, uid, [('name','=','property_account_payable'),('company_id','=',company_id)]) + rec_line_data = property_obj.read(cr, uid, rec_pro_id, ['name','value_reference','res_id']) pay_line_data = property_obj.read(cr, uid, pay_pro_id, ['name','value_reference','res_id']) rec_res_id = rec_line_data and rec_line_data[0].get('value_reference',False) and int(rec_line_data[0]['value_reference'].split(',')[1]) or False pay_res_id = pay_line_data and pay_line_data[0].get('value_reference',False) and int(pay_line_data[0]['value_reference'].split(',')[1]) or False + if not rec_res_id and not pay_res_id: raise osv.except_osv(_('Configuration Error!'), _('Cannot find a chart of account, you should create one from Settings\Configuration\Accounting menu.')) @@ -587,6 +592,7 @@ class account_invoice(osv.osv): acc_id = rec_res_id else: acc_id = pay_res_id + val= {'account_id': acc_id} if ids: if company_id: diff --git a/addons/auth_signup/res_users.py b/addons/auth_signup/res_users.py index 9718897ef82..077a0feded9 100644 --- a/addons/auth_signup/res_users.py +++ b/addons/auth_signup/res_users.py @@ -260,11 +260,13 @@ class res_users(osv.Model): template = self.pool.get('ir.model.data').get_object(cr, uid, 'auth_signup', 'reset_password_email') mail_obj = self.pool.get('mail.mail') assert template._name == 'email.template' + for user in self.browse(cr, uid, ids, context): if not user.email: raise osv.except_osv(_("Cannot send email: user has no email address."), user.name) mail_id = self.pool.get('email.template').send_mail(cr, uid, template.id, user.id, True, context=context) mail_state = mail_obj.read(cr, uid, mail_id, ['state'], context=context) + if mail_state and mail_state['state'] == 'exception': raise osv.except_osv(_("Cannot send email: no outgoing email server configured.\nYou can configure it under Settings/General Settings."), user.name) else: From 75f80571dfaf2c92ffee501a01ca8bf2574e6f69 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 14 Feb 2013 18:34:13 +0100 Subject: [PATCH 149/158] [IMP] introduce two examples of use of the new get_config_warning() helper Typical use: self.pool.get("res.config.settings").get_config_warning(cr, _("Excpt message"), context) More documentation and examples in res_config.py doc (see method get_config_warning()) bzr revid: abo@openerp.com-20130214173413-lm4jm86eolinwz69 --- addons/account/account_invoice.py | 4 ++-- addons/auth_signup/res_users.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index fe10e10f7b4..e1e0fccd253 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -586,8 +586,8 @@ class account_invoice(osv.osv): pay_res_id = pay_line_data and pay_line_data[0].get('value_reference',False) and int(pay_line_data[0]['value_reference'].split(',')[1]) or False if not rec_res_id and not pay_res_id: - raise osv.except_osv(_('Configuration Error!'), - _('Cannot find a chart of account, you should create one from Settings\Configuration\Accounting menu.')) + raise self.pool.get('res.config.settings').get_config_warning(cr, _('Cannot find any chart of account: you can create a new one from %(menu:account.menu_account_config)s.'), context) + if type in ('out_invoice', 'out_refund'): acc_id = rec_res_id else: diff --git a/addons/auth_signup/res_users.py b/addons/auth_signup/res_users.py index 077a0feded9..4e86de5b474 100644 --- a/addons/auth_signup/res_users.py +++ b/addons/auth_signup/res_users.py @@ -268,7 +268,7 @@ class res_users(osv.Model): mail_state = mail_obj.read(cr, uid, mail_id, ['state'], context=context) if mail_state and mail_state['state'] == 'exception': - raise osv.except_osv(_("Cannot send email: no outgoing email server configured.\nYou can configure it under Settings/General Settings."), user.name) + raise self.pool.get('res.config.settings').get_config_warning(cr, _("Cannot send email: no outgoing email server configured.\nYou can configure it under %(menu:base_setup.menu_general_configuration)s."), context) else: return { 'type': 'ir.actions.client', From 4bfed04c8da9b39232546a8249a3c11b364abcbc Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Fri, 15 Feb 2013 04:38:55 +0000 Subject: [PATCH 150/158] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20130215043855-aqjya28sl21tmpaf --- addons/knowledge/i18n/hu.po | 41 +++++--- addons/l10n_multilang/i18n/hu.po | 174 +++++++++++++++++++++++++++++++ addons/mail/i18n/hu.po | 130 ++++++++++++++--------- addons/marketing/i18n/hu.po | 34 +++--- 4 files changed, 297 insertions(+), 82 deletions(-) create mode 100644 addons/l10n_multilang/i18n/hu.po diff --git a/addons/knowledge/i18n/hu.po b/addons/knowledge/i18n/hu.po index d34305492f8..d6ff50f6700 100644 --- a/addons/knowledge/i18n/hu.po +++ b/addons/knowledge/i18n/hu.po @@ -7,24 +7,24 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-02-01 10:13+0000\n" -"Last-Translator: Krisztian Eyssen \n" +"PO-Revision-Date: 2013-02-14 15:58+0000\n" +"Last-Translator: krnkris \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-22 05:59+0000\n" -"X-Generator: Launchpad (build 16378)\n" +"X-Launchpad-Export-Date: 2013-02-15 04:38+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: knowledge #: view:knowledge.config.settings:0 msgid "Documents" -msgstr "" +msgstr "Dokumentumok" #. module: knowledge #: model:ir.model,name:knowledge.model_knowledge_config_settings msgid "knowledge.config.settings" -msgstr "" +msgstr "knowledge.config.settings" #. module: knowledge #: help:knowledge.config.settings,module_document_webdav:0 @@ -32,11 +32,13 @@ msgid "" "Access your documents in OpenERP through WebDAV.\n" " This installs the module document_webdav." msgstr "" +"Az OpenERP dokumentumok WebDAV-on keresztüli elérése.\n" +" Ez a document_webdav modult telepíti." #. module: knowledge #: help:knowledge.config.settings,module_document_page:0 msgid "This installs the module document_page." -msgstr "" +msgstr "Ez a document_page modult telepíti." #. module: knowledge #: model:ir.ui.menu,name:knowledge.menu_document2 @@ -47,12 +49,12 @@ msgstr "Csoportmunában készült tartalom" #: model:ir.actions.act_window,name:knowledge.action_knowledge_configuration #: view:knowledge.config.settings:0 msgid "Configure Knowledge" -msgstr "" +msgstr "Tudástár beállítása" #. module: knowledge #: view:knowledge.config.settings:0 msgid "Knowledge and Documents Management" -msgstr "" +msgstr "Tudástár és dokumentum kezelés" #. module: knowledge #: help:knowledge.config.settings,module_document:0 @@ -62,31 +64,36 @@ msgid "" "and a document dashboard.\n" " This installs the module document." msgstr "" +"Ez egy komplett dokumentum kezelő rendszer, beleértve: felhasználó " +"hitelesítást,\n" +" teljes dokumentum keresőt (de a pptx és docx nem " +"támogatott), és egy dokumentum vezérlőpultot.\n" +" Ez a document modult telepíti." #. module: knowledge #: field:knowledge.config.settings,module_document_page:0 msgid "Create static web pages" -msgstr "" +msgstr "Statikus weboldalak készítése" #. module: knowledge #: field:knowledge.config.settings,module_document_ftp:0 msgid "Share repositories (FTP)" -msgstr "" +msgstr "Elérési út (FTP) megosztás" #. module: knowledge #: field:knowledge.config.settings,module_document:0 msgid "Manage documents" -msgstr "" +msgstr "Dokumentum kezelés" #. module: knowledge #: view:knowledge.config.settings:0 msgid "Cancel" -msgstr "" +msgstr "Mégsem" #. module: knowledge #: view:knowledge.config.settings:0 msgid "Apply" -msgstr "" +msgstr "Alkalmaz" #. module: knowledge #: model:ir.ui.menu,name:knowledge.menu_document_configuration @@ -99,16 +106,18 @@ msgid "" "Access your documents in OpenERP through an FTP interface.\n" " This installs the module document_ftp." msgstr "" +"Az OpenERP dokumentumok elérése egy FTP csatolón keresztül.\n" +" Ez a document_ftp modult telepíti." #. module: knowledge #: view:knowledge.config.settings:0 msgid "or" -msgstr "" +msgstr "vagy" #. module: knowledge #: field:knowledge.config.settings,module_document_webdav:0 msgid "Share repositories (WebDAV)" -msgstr "" +msgstr "Elérési útvonal (webDAV) megosztás" #. module: knowledge #: model:ir.ui.menu,name:knowledge.menu_document diff --git a/addons/l10n_multilang/i18n/hu.po b/addons/l10n_multilang/i18n/hu.po new file mode 100644 index 00000000000..b56463cc70e --- /dev/null +++ b/addons/l10n_multilang/i18n/hu.po @@ -0,0 +1,174 @@ +# Hungarian translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-02-08 01:06+0000\n" +"PO-Revision-Date: 2013-02-14 16:15+0000\n" +"Last-Translator: krnkris \n" +"Language-Team: Hungarian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-02-15 04:38+0000\n" +"X-Generator: Launchpad (build 16491)\n" + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template +msgid "Template for Fiscal Position" +msgstr "ÁFA pozíció sablon" + +#. module: l10n_multilang +#: sql_constraint:account.account:0 +msgid "The code of the account must be unique per company !" +msgstr "A főkönyvi számla számának egyedinek kell lennie!" + +#. module: l10n_multilang +#: constraint:account.account.template:0 +msgid "" +"Configuration Error!\n" +"You can not define children to an account with internal type different of " +"\"View\"! " +msgstr "" +"Beállítási hiba!\n" +"Nem tud al-számlát létrehozni egy számlához, melynek a belső \"Nézet\" " +"típusa különböző! " + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_analytic_journal +msgid "Analytic Journal" +msgstr "Analitikus/Gyüjtő napló" + +#. module: l10n_multilang +#: constraint:account.account.template:0 +msgid "Error ! You can not create recursive account templates." +msgstr "Hiba! Nem hozhat létre rekurzív főkönyvi számla sablonokat." + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_journal +msgid "Journal" +msgstr "Napló" + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_chart_template +msgid "Templates for Account Chart" +msgstr "Számlatükör sablonok" + +#. module: l10n_multilang +#: sql_constraint:account.tax:0 +msgid "The description must be unique per company!" +msgstr "A leírás egyedi kell legyen minden vállalathoz!" + +#. module: l10n_multilang +#: constraint:account.tax.code.template:0 +msgid "Error ! You can not create recursive Tax Codes." +msgstr "Hiba! Nem hozhat létre rekurzív adógyűjtőket." + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_tax_template +msgid "account.tax.template" +msgstr "account.tax.template" + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_tax +msgid "account.tax" +msgstr "account.tax" + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_account +msgid "Account" +msgstr "Főkönyvi számla" + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts +msgid "wizard.multi.charts.accounts" +msgstr "wizard.multi.charts.accounts" + +#. module: l10n_multilang +#: constraint:account.journal:0 +msgid "" +"Configuration error! The currency chosen should be shared by the default " +"accounts too." +msgstr "" +"Beállítási hiba! A választott pénznemet meg kell osztani az alapértelmezett " +"főkönyvi számlával is." + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_account_template +msgid "Templates for Accounts" +msgstr "Főkönyvi számla sablonok" + +#. module: l10n_multilang +#: help:account.chart.template,spoken_languages:0 +msgid "" +"State here the languages for which the translations of templates could be " +"loaded at the time of installation of this localization module and copied in " +"the final object when generating them from templates. You must provide the " +"language codes separated by ';'" +msgstr "" +"Adja meg itt a nyelvet amelyen a sablon be fog töltődni a lokalizációs modul " +"telepítése után és az át lesz másolva a végső objektumba a sablonokból való " +"létrehozás után. A nyelvi kódot ';' kell elválasztani." + +#. module: l10n_multilang +#: constraint:account.account:0 +msgid "Error ! You can not create recursive accounts." +msgstr "Hiba! Nem hozhat létre rekurzív számlákat." + +#. module: l10n_multilang +#: constraint:account.account:0 +msgid "" +"Configuration Error! \n" +"You can not select an account type with a deferral method different of " +"\"Unreconciled\" for accounts with internal type \"Payable/Receivable\"! " +msgstr "" + +#. module: l10n_multilang +#: sql_constraint:account.journal:0 +msgid "The name of the journal must be unique per company !" +msgstr "A napló nevének egyedinek kell lennie mindegyik vállalatra!" + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_analytic_account +msgid "Analytic Account" +msgstr "Analitikus/elemző könyvelés" + +#. module: l10n_multilang +#: sql_constraint:account.journal:0 +msgid "The code of the journal must be unique per company !" +msgstr "A napló kódjának egyedinek kell lennie mindegyik vállalathoz!" + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_fiscal_position +msgid "Fiscal Position" +msgstr "Költségvetési pozíció" + +#. module: l10n_multilang +#: constraint:account.account:0 +msgid "" +"Configuration Error! \n" +"You can not define children to an account with internal type different of " +"\"View\"! " +msgstr "" +"Beállítási hiba! \n" +"Nem tud al-számlát létrehozni egy számlához, melynek a belső \"Nézet\" " +"típusa különböző! " + +#. module: l10n_multilang +#: constraint:account.analytic.account:0 +msgid "Error! You can not create recursive analytic accounts." +msgstr "Hiba! Nem hozhat létre rekurzív gyűjtőkódokat." + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_tax_code_template +msgid "Tax Code Template" +msgstr "" + +#. module: l10n_multilang +#: field:account.chart.template,spoken_languages:0 +msgid "Spoken Languages" +msgstr "Beszélt nyelvek" diff --git a/addons/mail/i18n/hu.po b/addons/mail/i18n/hu.po index c7781d6eeef..817c0a71fa4 100644 --- a/addons/mail/i18n/hu.po +++ b/addons/mail/i18n/hu.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-02-13 13:32+0000\n" +"PO-Revision-Date: 2013-02-14 16:43+0000\n" "Last-Translator: krnkris \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-02-14 04:37+0000\n" +"X-Launchpad-Export-Date: 2013-02-15 04:38+0000\n" "X-Generator: Launchpad (build 16491)\n" #. module: mail @@ -1340,7 +1340,7 @@ msgstr "Megbeszélés csoport" #: code:addons/mail/static/src/xml/mail.xml:224 #, python-format msgid "Done" -msgstr "" +msgstr "Kész" #. module: mail #: model:mail.message.subtype,name:mail.mt_comment @@ -1357,7 +1357,7 @@ msgstr "Követ" #. module: mail #: field:mail.group,name:0 msgid "Name" -msgstr "" +msgstr "Név" #. module: mail #: model:mail.group,name:mail.group_all_employees @@ -1370,45 +1370,45 @@ msgstr "Teljes vállalat" #: view:mail.compose.message:0 #, python-format msgid "and" -msgstr "" +msgstr "és" #. module: mail #: help:mail.mail,body_html:0 msgid "Rich-text/HTML message" -msgstr "" +msgstr "Rich-text/HTML üzenet" #. module: mail #: view:mail.mail:0 msgid "Creation Month" -msgstr "" +msgstr "Létrehozás hónapja" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:272 #, python-format msgid "Compose new Message" -msgstr "" +msgstr "Új üzenet létrehozása" #. module: mail #: field:mail.group,menu_id:0 msgid "Related Menu" -msgstr "" +msgstr "Kapcsolódó menü" #. module: mail #: view:mail.message:0 msgid "Content" -msgstr "" +msgstr "Tartalom" #. module: mail #: field:mail.mail,email_to:0 msgid "To" -msgstr "" +msgstr "Címzett" #. module: mail #: field:mail.compose.message,notified_partner_ids:0 #: field:mail.message,notified_partner_ids:0 msgid "Notified partners" -msgstr "" +msgstr "Értesített partnerek" #. module: mail #: help:mail.group,public:0 @@ -1416,11 +1416,13 @@ msgid "" "This group is visible by non members. Invisible groups can add " "members through the invite button." msgstr "" +"Ez a csoport azoknak is látható akik nem tagok. A nem látható csoportok " +"tagokat adhatnak a meghívó gombbal." #. module: mail #: model:mail.group,name:mail.group_board msgid "Board meetings" -msgstr "" +msgstr "Tanácskozás" #. module: mail #: constraint:mail.alias:0 @@ -1428,40 +1430,42 @@ msgid "" "Invalid expression, it must be a literal python dictionary definition e.g. " "\"{'field': 'value'}\"" msgstr "" +"Nem érvényes kifejezés, ennek python szótár kifejezésnek kell lennie pl.: " +"\"{'field': 'value'}\"" #. module: mail #: field:mail.alias,alias_model_id:0 msgid "Aliased Model" -msgstr "" +msgstr "Minta álnév" #. module: mail #: help:mail.compose.message,message_id:0 #: help:mail.message,message_id:0 msgid "Message unique identifier" -msgstr "" +msgstr "Üzenet egyedi azonosító" #. module: mail #: field:mail.group,description:0 #: field:mail.message.subtype,description:0 msgid "Description" -msgstr "" +msgstr "Leírás" #. module: mail #: model:ir.model,name:mail.model_mail_followers msgid "Document Followers" -msgstr "" +msgstr "Követők dokumentuma" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail_followers.xml:35 #, python-format msgid "Remove this follower" -msgstr "" +msgstr "Követő eltávolítása" #. module: mail #: selection:res.partner,notification_email_send:0 msgid "Never" -msgstr "" +msgstr "Soha" #. module: mail #: field:mail.mail,mail_server_id:0 @@ -1472,7 +1476,7 @@ msgstr "Kimenő levelező szerver" #: code:addons/mail/mail_message.py:920 #, python-format msgid "Partners email addresses not found" -msgstr "" +msgstr "A partnerek e-mail címei nem találhatóak" #. module: mail #: view:mail.mail:0 @@ -1483,19 +1487,21 @@ msgstr "Elküldött" #. module: mail #: field:mail.mail,body_html:0 msgid "Rich-text Contents" -msgstr "" +msgstr "Rich-text tartalmak" #. module: mail #: help:mail.compose.message,to_read:0 #: help:mail.message,to_read:0 msgid "Current user has an unread notification linked to this message" msgstr "" +"A jelenlegi felhasználónak van egy olvasatlan értesítése ehhez az üzenethez " +"csatolva" #. module: mail #: help:res.partner,notification_email_send:0 msgid "" "Choose in which case you want to receive an email when you receive new feeds." -msgstr "" +msgstr "Válassza ki milyen esetekben kíván e-mail kapni az új bevitelekből." #. module: mail #: model:ir.actions.act_window,name:mail.action_view_groups @@ -1511,13 +1517,17 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" nincs üzenete ebben a csoportban.\n" +"

\n" +" " #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:195 #, python-format msgid "Please, wait while the file is uploading." -msgstr "" +msgstr "Kérem várjon amíg a fájl feltöltődik." #. module: mail #: view:mail.group:0 @@ -1527,6 +1537,9 @@ msgid "" "installed\n" " the portal module." msgstr "" +"Ez a csoport mindenki számára látható,\n" +" az ügyfeleinek is, ha telepítette a\n" +" portal modult." #. module: mail #. openerp-web @@ -1540,17 +1553,17 @@ msgstr "Visszahelyezés a feladatokhoz" #: code:addons/mail/static/src/xml/mail.xml:113 #, python-format msgid "this document" -msgstr "" +msgstr "ez a dokumentum" #. module: mail #: field:mail.compose.message,filter_id:0 msgid "Filters" -msgstr "" +msgstr "Szűrők" #. module: mail #: field:res.partner,notification_email_send:0 msgid "Receive Feeds by Email" -msgstr "" +msgstr "Új hozzászólások e-mailen fogadva" #. module: mail #: help:base.config.settings,alias_domain:0 @@ -1558,6 +1571,8 @@ msgid "" "If you have setup a catch-all email domain redirected to the OpenERP server, " "enter the domain name here." msgstr "" +"Ha be állítja az összes e-mail fogadása domain átirányítás az openERP " +"szerverre, akkor írja ide a domain nevet." #. module: mail #: model:ir.actions.act_window,name:mail.action_view_mail_message @@ -1574,7 +1589,7 @@ msgstr "Üzenetek" #: code:addons/mail/static/src/xml/mail.xml:126 #, python-format msgid "others..." -msgstr "" +msgstr "mások..." #. module: mail #: model:ir.actions.client,name:mail.action_mail_star_feeds @@ -1588,12 +1603,12 @@ msgstr "Feladat" #: field:mail.group,alias_id:0 #: field:res.users,alias_id:0 msgid "Alias" -msgstr "" +msgstr "Álnév" #. module: mail #: model:ir.model,name:mail.model_mail_mail msgid "Outgoing Mails" -msgstr "" +msgstr "Elküldött levelek" #. module: mail #: help:mail.compose.message,notification_ids:0 @@ -1602,6 +1617,8 @@ msgid "" "Technical field holding the message notifications. Use notified_partner_ids " "to access notified partners." msgstr "" +"Technikai mező a értesítés üzenetek tárolásához. Használja a " +"notified_partner_ids az értesített partnerek eléréséhez." #. module: mail #: model:ir.ui.menu,name:mail.mail_feeds @@ -1613,12 +1630,12 @@ msgstr "Üzenetek" #: view:mail.alias:0 #: field:mail.message.subtype,res_model:0 msgid "Model" -msgstr "" +msgstr "Modell" #. module: mail #: view:mail.message:0 msgid "Unread" -msgstr "" +msgstr "Olvasatlan" #. module: mail #: help:mail.followers,subtype_ids:0 @@ -1626,23 +1643,25 @@ msgid "" "Message subtypes followed, meaning subtypes that will be pushed onto the " "user's Wall." msgstr "" +"Üzenet altípus követve, azt jelenti, hogy az altípus ki lesz rakva a " +"felhasználó üzenőfalára." #. module: mail #: help:mail.group,message_ids:0 #: help:mail.thread,message_ids:0 #: help:res.partner,message_ids:0 msgid "Messages and communication history" -msgstr "" +msgstr "Üzenetek és kommunikáció történet" #. module: mail #: help:mail.mail,references:0 msgid "Message references, such as identifiers of previous messages" -msgstr "" +msgstr "Üzenet hivatkozások, mint előző üzenetek azonosítói" #. module: mail #: field:mail.compose.message,composition_mode:0 msgid "Composition mode" -msgstr "" +msgstr "Összeállítási mód" #. module: mail #: field:mail.compose.message,model:0 @@ -1650,14 +1669,14 @@ msgstr "" #: field:mail.message,model:0 #: field:mail.wizard.invite,res_model:0 msgid "Related Document Model" -msgstr "" +msgstr "Ide vonatkozó dokumentum modell" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:287 #, python-format msgid "unlike" -msgstr "" +msgstr "nem valószínű" #. module: mail #: help:mail.compose.message,author_id:0 @@ -1666,22 +1685,24 @@ msgid "" "Author of the message. If not set, email_from may hold an email address that " "did not match any partner." msgstr "" +"Az üzenet szerzője. Ha nincs beállítva, az e-mail ettől, egy címet " +"tartalmaz ami nem mutat egyik partnerre sem." #. module: mail #: help:mail.mail,email_cc:0 msgid "Carbon copy message recipients" -msgstr "" +msgstr "Üzenet másolat címzettjei" #. module: mail #: field:mail.alias,alias_domain:0 msgid "Alias domain" -msgstr "" +msgstr "Álénév domain" #. module: mail #: code:addons/mail/update.py:93 #, python-format msgid "Error during communication with the publisher warranty server." -msgstr "" +msgstr "Hiba a kiadó garancia szerverével történő kommunikációval." #. module: mail #: selection:mail.group,public:0 @@ -1701,32 +1722,41 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Nincs teendő.\n" +"

\n" +" Ha a Beérkezett üzeneteinél végez műveletet, " +"megjelölheti\n" +" mint teendő. Ebből a menüből, minden teendőjét " +"elvégezheti.\n" +"

\n" +" " #. module: mail #: selection:mail.mail,state:0 msgid "Delivery Failed" -msgstr "" +msgstr "Küldés sikertelen" #. module: mail #: field:mail.compose.message,partner_ids:0 msgid "Additional contacts" -msgstr "" +msgstr "További kapcsolatok" #. module: mail #: help:mail.compose.message,parent_id:0 #: help:mail.message,parent_id:0 msgid "Initial thread message." -msgstr "" +msgstr "Elsődleges összefűzött üzenet." #. module: mail #: model:mail.group,name:mail.group_hr_policies msgid "HR Policies" -msgstr "" +msgstr "HR Emberi erőforrás menedzsment házirend" #. module: mail #: selection:res.partner,notification_email_send:0 msgid "Emails only" -msgstr "" +msgstr "Kizárólag e-mailek" #. module: mail #: model:ir.actions.client,name:mail.action_mail_inbox_feeds @@ -1739,35 +1769,35 @@ msgstr "Beérkezett üzenetek" #: code:addons/mail/static/src/xml/mail.xml:58 #, python-format msgid "File" -msgstr "" +msgstr "Fájl" #. module: mail #. openerp-web #: code:addons/mail/static/src/js/many2many_tags_email.js:63 #, python-format msgid "Please complete partner's informations and Email" -msgstr "" +msgstr "Kérem egészítse ki a partner információkat és e-mailjét" #. module: mail #: model:ir.actions.act_window,name:mail.action_view_message_subtype #: model:ir.ui.menu,name:mail.menu_message_subtype msgid "Subtypes" -msgstr "" +msgstr "Altípusok" #. module: mail #: model:ir.model,name:mail.model_mail_alias msgid "Email Aliases" -msgstr "" +msgstr "e-amil álnevek" #. module: mail #: field:mail.group,image_small:0 msgid "Small-sized photo" -msgstr "" +msgstr "Kis-méretű fotó" #. module: mail #: help:mail.mail,reply_to:0 msgid "Preferred response address for the message" -msgstr "" +msgstr "Előnyben részesített válasz cím ehhez az üzenethez" #~ msgid "Open Attachments" #~ msgstr "Mellékletek megnyitása" diff --git a/addons/marketing/i18n/hu.po b/addons/marketing/i18n/hu.po index 48acf144f2e..cc8760c35a6 100644 --- a/addons/marketing/i18n/hu.po +++ b/addons/marketing/i18n/hu.po @@ -7,19 +7,19 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-01-31 14:00+0000\n" -"Last-Translator: Krisztian Eyssen \n" +"PO-Revision-Date: 2013-02-14 16:51+0000\n" +"Last-Translator: krnkris \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-22 05:59+0000\n" -"X-Generator: Launchpad (build 16378)\n" +"X-Launchpad-Export-Date: 2013-02-15 04:38+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: marketing #: model:ir.model,name:marketing.model_marketing_config_settings msgid "marketing.config.settings" -msgstr "" +msgstr "marketing.config.settings" #. module: marketing #: help:marketing.config.settings,module_marketing_campaign_crm_demo:0 @@ -33,7 +33,7 @@ msgstr "" #: model:ir.actions.act_window,name:marketing.action_marketing_configuration #: view:marketing.config.settings:0 msgid "Configure Marketing" -msgstr "" +msgstr "Értékesítés beállítás" #. module: marketing #: view:crm.lead:0 @@ -44,47 +44,47 @@ msgstr "Marketing" #. module: marketing #: field:marketing.config.settings,module_marketing_campaign:0 msgid "Marketing campaigns" -msgstr "" +msgstr "Értékesítési kampány" #. module: marketing #: view:marketing.config.settings:0 msgid "or" -msgstr "" +msgstr "vagy" #. module: marketing #: view:marketing.config.settings:0 msgid "Campaigns" -msgstr "" +msgstr "Kampányok" #. module: marketing #: model:res.groups,name:marketing.group_marketing_manager msgid "Manager" -msgstr "" +msgstr "Igazgató" #. module: marketing #: model:res.groups,name:marketing.group_marketing_user msgid "User" -msgstr "" +msgstr "Felhasználó" #. module: marketing #: view:marketing.config.settings:0 msgid "Campaigns Settings" -msgstr "" +msgstr "Kampány beállítások" #. module: marketing #: field:marketing.config.settings,module_crm_profiling:0 msgid "Track customer profile to focus your campaigns" -msgstr "" +msgstr "Vevő profil nyomonkövetése a kampányra összpontosítva" #. module: marketing #: view:marketing.config.settings:0 msgid "Cancel" -msgstr "" +msgstr "Mégsem" #. module: marketing #: view:marketing.config.settings:0 msgid "Apply" -msgstr "" +msgstr "Alkalmaz" #. module: marketing #: help:marketing.config.settings,module_marketing_campaign:0 @@ -101,11 +101,13 @@ msgid "" "Allows users to perform segmentation within partners.\n" " This installs the module crm_profiling." msgstr "" +"A felhasználóknak engedélyezi a partnerek kiválogatását.\n" +" Ez telepíti a crm_profiling modult." #. module: marketing #: field:marketing.config.settings,module_marketing_campaign_crm_demo:0 msgid "Demo data for marketing campaigns" -msgstr "" +msgstr "Demo adatok a merketing kampányhoz" #~ msgid "Configure Your Marketing Application" #~ msgstr "Marketing alkalmazásainak beállítása" From 5d31ed34d04163d59ccd4511d2626172aa6610b5 Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Fri, 15 Feb 2013 04:49:06 +0000 Subject: [PATCH 151/158] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20130215044906-l8qxbb03kjhy48it --- addons/web_kanban/i18n/da.po | 37 ++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/addons/web_kanban/i18n/da.po b/addons/web_kanban/i18n/da.po index 008b99dcc6b..69339d9a1c4 100644 --- a/addons/web_kanban/i18n/da.po +++ b/addons/web_kanban/i18n/da.po @@ -8,21 +8,21 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-07-01 08:56+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-02-15 00:44+0000\n" +"Last-Translator: Casper Madsen of CloudMinds \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-02-07 05:09+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-15 04:49+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/js/kanban.js:704 #, python-format msgid "Edit column" -msgstr "" +msgstr "Rediger kolonne" #. module: web_kanban #. openerp-web @@ -30,6 +30,7 @@ msgstr "" #, python-format msgid "An error has occured while moving the record to this group." msgstr "" +"En fejl er opstået i forbindelse med flytningen af posten til denne gruppe." #. module: web_kanban #. openerp-web @@ -43,42 +44,42 @@ msgstr "Kanban" #: code:addons/web_kanban/static/src/js/kanban.js:557 #, python-format msgid "Undefined" -msgstr "Ikke defineret" +msgstr "Udefineret" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/js/kanban.js:723 #, python-format msgid "Are you sure to remove this column ?" -msgstr "" +msgstr "Er du sikker på at du vil fjerne denne kolonne?" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:42 #, python-format msgid "Edit" -msgstr "" +msgstr "Redigér" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/js/kanban.js:190 #, python-format msgid "Add column" -msgstr "" +msgstr "Tilføj kolonne" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/js/kanban.js:1100 #, python-format msgid "Create: " -msgstr "" +msgstr "Opret: " #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:24 #, python-format msgid "Add a new column" -msgstr "" +msgstr "Tilføj en ny kolonne" #. module: web_kanban #. openerp-web @@ -86,14 +87,14 @@ msgstr "" #: code:addons/web_kanban/static/src/xml/web_kanban.xml:40 #, python-format msgid "Fold" -msgstr "" +msgstr "Fold" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:91 #, python-format msgid "Add" -msgstr "" +msgstr "Tilføj" #. module: web_kanban #. openerp-web @@ -114,7 +115,7 @@ msgstr "Er du sikker på at du vil slette denne post?" #: code:addons/web_kanban/static/src/js/kanban.js:694 #, python-format msgid "Unfold" -msgstr "" +msgstr "Fold ud" #. module: web_kanban #. openerp-web @@ -128,7 +129,7 @@ msgstr "Vis mere ... (" #: code:addons/web_kanban/static/src/xml/web_kanban.xml:92 #, python-format msgid "Cancel" -msgstr "" +msgstr "Annullér" #. module: web_kanban #. openerp-web @@ -143,21 +144,21 @@ msgstr "tilbageværende)" #: code:addons/web_kanban/static/src/xml/web_kanban.xml:91 #, python-format msgid "or" -msgstr "" +msgstr "eller" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:51 #, python-format msgid "99+" -msgstr "" +msgstr "99+" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:43 #, python-format msgid "Delete" -msgstr "" +msgstr "Slet" #~ msgid "Create" #~ msgstr "Opret" From b30307da329fef4589eae9876934a1a7d3daaae2 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 15 Feb 2013 13:33:24 +0100 Subject: [PATCH 152/158] Revert 4580 bzr revid: nicolas.vanhoren@openerp.com-20130215123324-m10141rj595x30pl --- openerp/service/workers.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/openerp/service/workers.py b/openerp/service/workers.py index da3a7a221da..0f962cdb968 100644 --- a/openerp/service/workers.py +++ b/openerp/service/workers.py @@ -141,8 +141,7 @@ class Multicorn(object): def process_spawn(self): while len(self.workers_http) < self.population: self.worker_spawn(WorkerHTTP, self.workers_http) - while len(self.workers_cron) < config['max_cron_threads'] \ - and config['db_name']: + while len(self.workers_cron) < config['max_cron_threads']: self.worker_spawn(WorkerCron, self.workers_cron) while len(self.workers_longpolling) < 1: self.worker_spawn(WorkerLongPolling, self.workers_longpolling) @@ -400,7 +399,7 @@ class WorkerCron(Worker): if config['db_name']: db_names = config['db_name'].split(',') else: - db_names = [] + db_names = openerp.service.db.exp_list(True) for db_name in db_names: if rpc_request_flag: start_time = time.time() From 0a27066e54e591bee841990441c179c9e6b442de Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Fri, 15 Feb 2013 15:35:03 +0100 Subject: [PATCH 153/158] [REF] code review bzr revid: qdp-launchpad@openerp.com-20130215143503-6a6x53gdeb6j33tm --- openerp/addons/base/res/res_config.py | 47 +++-- openerp/exceptions.py | 18 +- openerp/osv/orm.py | 3 +- openerp/service/netrpc_server.py.THIS | 245 -------------------------- openerp/service/wsgi_server.py | 3 +- 5 files changed, 30 insertions(+), 286 deletions(-) delete mode 100644 openerp/service/netrpc_server.py.THIS diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index 2dae5c7f865..354a612d075 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -594,16 +594,13 @@ class res_config_settings(osv.osv_memory): def get_option_path(self, cr, uid, menu_xml_id, context=None): """ - Fetch the path to a specified configuration view and the action id - to access it. + Fetch the path to a specified configuration view and the action id to access it. - :param string menu_xml_id: the xml id of the menuitem where the view - is located, structured as follows: module_name.menuitem_xml_id - (e.g.: "base.menu_sale_config") + :param string menu_xml_id: the xml id of the menuitem where the view is located, + structured as follows: module_name.menuitem_xml_id (e.g.: "base.menu_sale_config") :return tuple: - - t[0]: string: full path to the menuitem - (e.g.: "Settings/Configuration/Sales") - - t[1]: long: id of the menuitem's action + - t[0]: string: full path to the menuitem (e.g.: "Settings/Configuration/Sales") + - t[1]: long: id of the menuitem's action """ module_name, menu_xml_id = menu_xml_id.split('.') dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id) @@ -615,11 +612,9 @@ class res_config_settings(osv.osv_memory): """ Fetch the human readable name of a specified configuration option. - :param string full_field_name: the full name of the field, structured - as follows: model_name.field_name - (e.g.: "sale.config.settings.fetchmail_lead") - :return string: human readable name of the field - (e.g.: "Create leads from incoming mails") + :param string full_field_name: the full name of the field, structured as follows: + model_name.field_name (e.g.: "sale.config.settings.fetchmail_lead") + :return string: human readable name of the field (e.g.: "Create leads from incoming mails") """ model_name, field_name = full_field_name.rsplit('.', 1) @@ -627,22 +622,23 @@ class res_config_settings(osv.osv_memory): def get_config_warning(self, cr, msg, context=None): """ - Helper: return a Warning exception with the given message where the - %(field:)s and/or %(menu:)s are replaced by the human readable field's name - and/or menuitem's full path. + Helper: return a Warning exception with the given message where the %(field:xxx)s + and/or %(menu:yyy)s are replaced by the human readable field's name and/or menuitem's + full path. Usage: ------ - Just include in your error message %(field:model_name.field_name)s to - obtain the human readable field's name, and/or - %(menu:module_name.menuitem_xml_id)s to obtain the menuitem's full path. + Just include in your error message %(field:model_name.field_name)s to obtain the human + readable field's name, and/or %(menu:module_name.menuitem_xml_id)s to obtain the menuitem's + full path. Example of use: --------------- from openerp.addons.base.res.res_config import get_warning_config raise get_warning_config(cr, _("Error: this action is prohibited. You should check the field %(field:sale.config.settings.fetchmail_lead)s in %(menu:base.menu_sale_config)s."), context=context) - will return an exception containing the following message: - Error: this action is prohibited. You should check the field Create leads from incoming mails in Settings/Configuration/Sales. + + This will return an exception containing the following message: + Error: this action is prohibited. You should check the field Create leads from incoming mails in Settings/Configuration/Sales. """ res_config_obj = pooler.get_pool(cr.dbname).get('res.config.settings') @@ -656,18 +652,15 @@ class res_config_settings(osv.osv_memory): # human readable field's name) and the action_id if any values = {} action_id = None - buttontext = None for item in references: ref_type, ref = item.split(':') if ref_type == 'menu': - values[item], action_id = res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context) - buttontext = _('Go to the configuration panel') + values[item], action_id = res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context=context) elif ref_type == 'field': - values[item] = res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context) + values[item] = res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context=context) # 3/ substitute and return the result if (action_id): return exceptions.RedirectWarning(msg % values, action_id, _('Go to the configuration panel')) - else: - return exceptions.Warning(msg % values) + return exceptions.Warning(msg % values) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/exceptions.py b/openerp/exceptions.py index 41fff85010c..7789345585c 100644 --- a/openerp/exceptions.py +++ b/openerp/exceptions.py @@ -25,8 +25,7 @@ This module defines a few exception types. Those types are understood by the RPC layer. Any other exception type bubbling until the RPC layer will be treated as a 'Server error'. -If you consider introducing new exceptions, check out the test_exceptions -addon. +If you consider introducing new exceptions, check out the test_exceptions addon. """ class Warning(Exception): @@ -34,16 +33,13 @@ class Warning(Exception): class RedirectWarning(Exception): """ Warning with a possibility to redirect the user instead of simply - discarding the warning message. + diplaying the warning message. + + Should receive as parameters: + :param int action_id: id of the action where to perform the redirection + :param string button_text: text to put on the button that will trigger + the redirection. """ - def __init__(self, msg, action_id, button_text): - """ - :param int action_id: id of the action required to perform the - redirection - :param string button_text: text to put on the button which will trigger - the redirection - """ - super(RedirectWarning, self).__init__(msg, action_id, button_text) class AccessDenied(Exception): """ Login/password error. No message, no traceback. """ diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index cbc56bf834d..ebde4c17a51 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -3500,6 +3500,7 @@ class BaseModel(object): res = {} + translation_obj = self.pool.get('ir.translation') for parent in self._inherits: res.update(self.pool.get(parent).fields_get(cr, user, allfields, context)) @@ -3515,8 +3516,6 @@ class BaseModel(object): res[f]['states'] = {} if 'lang' in context: - translation_obj = self.pool.get('ir.translation') - if 'string' in res[f]: res_trans = translation_obj._get_source(cr, user, self._name + ',' + f, 'field', context['lang']) if res_trans: diff --git a/openerp/service/netrpc_server.py.THIS b/openerp/service/netrpc_server.py.THIS deleted file mode 100644 index 34bb30d8f75..00000000000 --- a/openerp/service/netrpc_server.py.THIS +++ /dev/null @@ -1,245 +0,0 @@ -# -*- coding: utf-8 -*- - -# -# Copyright P. Christeas 2008,2009 -# Copyright (C) 2004-2009 Tiny SPRL (). -# -# 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 . -# -############################################################################## - -#.apidoc title: NET-RPC Server - -""" This file contains instance of the net-rpc server -""" -import logging -import select -import socket -import sys -import threading -import traceback -import openerp -import openerp.service.netrpc_socket -import openerp.netsvc as netsvc -import openerp.tools as tools - -_logger = logging.getLogger(__name__) - -class Server: - """ Generic interface for all servers with an event loop etc. - Override this to impement http, net-rpc etc. servers. - - Servers here must have threaded behaviour. start() must not block, - there is no run(). - """ - __is_started = False - __servers = [] - __starter_threads = [] - - # we don't want blocking server calls (think select()) to - # wait forever and possibly prevent exiting the process, - # but instead we want a form of polling/busy_wait pattern, where - # _server_timeout should be used as the default timeout for - # all I/O blocking operations - _busywait_timeout = 0.5 - - def __init__(self): - Server.__servers.append(self) - if Server.__is_started: - # raise Exception('All instances of servers must be inited before the startAll()') - # Since the startAll() won't be called again, allow this server to - # init and then start it after 1sec (hopefully). Register that - # timer thread in a list, so that we can abort the start if quitAll - # is called in the meantime - t = threading.Timer(1.0, self._late_start) - t.name = 'Late start timer for %s' % str(self.__class__) - Server.__starter_threads.append(t) - t.start() - - def start(self): - _logger.debug("called stub Server.start") - - def _late_start(self): - self.start() - for thr in Server.__starter_threads: - if thr.finished.is_set(): - Server.__starter_threads.remove(thr) - - def stop(self): - _logger.debug("called stub Server.stop") - - def stats(self): - """ This function should return statistics about the server """ - return "%s: No statistics" % str(self.__class__) - - @classmethod - def startAll(cls): - if cls.__is_started: - return - _logger.info("Starting %d services" % len(cls.__servers)) - for srv in cls.__servers: - srv.start() - cls.__is_started = True - - @classmethod - def quitAll(cls): - if not cls.__is_started: - return - _logger.info("Stopping %d services" % len(cls.__servers)) - for thr in cls.__starter_threads: - if not thr.finished.is_set(): - thr.cancel() - cls.__starter_threads.remove(thr) - - for srv in cls.__servers: - srv.stop() - cls.__is_started = False - - @classmethod - def allStats(cls): - res = ["Servers %s" % ('stopped', 'started')[cls.__is_started]] - res.extend(srv.stats() for srv in cls.__servers) - return '\n'.join(res) - - def _close_socket(self): - netsvc.close_socket(self.socket) - -class TinySocketClientThread(threading.Thread): - def __init__(self, sock, threads): - spn = sock and sock.getpeername() - spn = 'netrpc-client-%s:%s' % spn[0:2] - threading.Thread.__init__(self, name=spn) - self.sock = sock - # Only at the server side, use a big timeout: close the - # clients connection when they're idle for 20min. - self.sock.settimeout(1200) - self.threads = threads - - def run(self): - self.running = True - try: - ts = openerp.server.netrpc_socket.mysocket(self.sock) - except Exception: - self.threads.remove(self) - self.running = False - return False - - while self.running: - try: - msg = ts.myreceive() - result = netsvc.dispatch_rpc(msg[0], msg[1], msg[2:]) - ts.mysend(result) - except socket.timeout: - #terminate this channel because other endpoint is gone - break - except Exception, e: - try: - valid_exception = Exception(netrpc_handle_exception_legacy(e)) - valid_traceback = getattr(e, 'traceback', sys.exc_info()) - formatted_traceback = "".join(traceback.format_exception(*valid_traceback)) - _logger.debug("netrpc: communication-level exception", exc_info=True) - ts.mysend(valid_exception, exception=True, traceback=formatted_traceback) - break - except Exception, ex: - #terminate this channel if we can't properly send back the error - _logger.exception("netrpc: cannot deliver exception message to client") - break - - netsvc.close_socket(self.sock) - self.sock = None - self.threads.remove(self) - self.running = False - return True - - def stop(self): - self.running = False - -def netrpc_handle_exception_legacy(e): - if isinstance(e, openerp.osv.osv.except_osv): - return 'warning -- ' + e.name + '\n\n' + e.value - if isinstance(e, openerp.exceptions.Warning): - return 'warning -- Warning\n\n' + str(e) - if isinstance(e, openerp.exceptions.AccessError): - return 'warning -- AccessError\n\n' + str(e) - if isinstance(e, openerp.exceptions.AccessDenied): - return 'AccessDenied ' + str(e) - return openerp.tools.exception_to_unicode(e) - -class TinySocketServerThread(threading.Thread,Server): - def __init__(self, interface, port, secure=False): - threading.Thread.__init__(self, name="NetRPCDaemon-%d"%port) - Server.__init__(self) - self.__port = port - self.__interface = interface - self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - self.socket.bind((self.__interface, self.__port)) - self.socket.listen(5) - self.threads = [] - _logger.info("starting NET-RPC service on %s:%s", interface or '0.0.0.0', port) - - def run(self): - try: - self.running = True - while self.running: - fd_sets = select.select([self.socket], [], [], self._busywait_timeout) - if not fd_sets[0]: - continue - (clientsocket, address) = self.socket.accept() - ct = TinySocketClientThread(clientsocket, self.threads) - clientsocket = None - self.threads.append(ct) - ct.start() - lt = len(self.threads) - if (lt > 10) and (lt % 10 == 0): - # Not many threads should be serving at the same time, so log - # their abuse. - _logger.debug("Netrpc: %d threads", len(self.threads)) - self.socket.close() - except Exception, e: - _logger.warning("Netrpc: closing because of exception %s", e) - self.socket.close() - return False - - def stop(self): - self.running = False - for t in self.threads: - t.stop() - self._close_socket() - - def stats(self): - res = "Net-RPC: " + ( (self.running and "running") or "stopped") - i = 0 - for t in self.threads: - i += 1 - res += "\nNet-RPC #%d: %s " % (i, t.name) - if t.isAlive(): - res += "running" - else: - res += "finished" - if t.sock: - res += ", socket" - return res - -netrpcd = None - -def start_service(): - global netrpcd - if tools.config.get('netrpc', False): - netrpcd = TinySocketServerThread(tools.config.get('netrpc_interface', ''), int(tools.config.get('netrpc_port', 8070))) - -def stop_service(): - Server.quitAll() - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/service/wsgi_server.py b/openerp/service/wsgi_server.py index 94177d7a9a6..1513094394a 100644 --- a/openerp/service/wsgi_server.py +++ b/openerp/service/wsgi_server.py @@ -94,8 +94,9 @@ def xmlrpc_handle_exception(e): if isinstance(e, openerp.osv.orm.except_orm): # legacy fault = xmlrpclib.Fault(RPC_FAULT_CODE_WARNING, openerp.tools.ustr(e.value)) response = xmlrpclib.dumps(fault, allow_none=False, encoding=None) - elif isinstance(e, openerp.exceptions.Warning): + elif isinstance(e, openerp.exceptions.Warning) or isinstance(e, openerp.exceptions.RedirectWarning): fault = xmlrpclib.Fault(RPC_FAULT_CODE_WARNING, str(e)) + response = xmlrpclib.dumps(fault, allow_none=False, encoding=None) elif isinstance (e, openerp.exceptions.AccessError): fault = xmlrpclib.Fault(RPC_FAULT_CODE_ACCESS_ERROR, str(e)) response = xmlrpclib.dumps(fault, allow_none=False, encoding=None) From f0eac0b71b3a2778e667e2f61bf5a4723fc9cae1 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Fri, 15 Feb 2013 15:37:18 +0100 Subject: [PATCH 154/158] [REF] code refactoring bzr revid: qdp-launchpad@openerp.com-20130215143718-96rdoi766tsm3fho --- addons/account/account_invoice.py | 6 +++--- addons/account/account_invoice_view.xml | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index 4fabfc0532a..60e3dc44328 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -558,7 +558,7 @@ class account_invoice(osv.osv): def onchange_partner_bank(self, cursor, user, ids, partner_bank_id=False): return {'value': {}} - def onchange_company_id(self, cr, uid, ids, company_id, part_id, type, invoice_line, currency_id): + def onchange_company_id(self, cr, uid, ids, company_id, part_id, type, invoice_line, currency_id, context=None): val = {} dom = {} obj_journal = self.pool.get('account.journal') @@ -567,7 +567,7 @@ class account_invoice(osv.osv): if company_id and part_id and type: acc_id = False - partner_obj = self.pool.get('res.partner').browse(cr,uid,part_id) + partner_obj = self.pool.get('res.partner').browse(cr, uid, part_id, context=context) if partner_obj.property_account_payable and partner_obj.property_account_receivable: if partner_obj.property_account_payable.company_id.id != company_id and partner_obj.property_account_receivable.company_id.id != company_id: @@ -586,7 +586,7 @@ class account_invoice(osv.osv): pay_res_id = pay_line_data and pay_line_data[0].get('value_reference',False) and int(pay_line_data[0]['value_reference'].split(',')[1]) or False if not rec_res_id and not pay_res_id: - raise self.pool.get('res.config.settings').get_config_warning(cr, _('Cannot find any chart of account: you can create a new one from %(menu:account.menu_account_config)s.'), context) + raise self.pool.get('res.config.settings').get_config_warning(cr, _('Cannot find any chart of account: you can create a new one from %(menu:account.menu_account_config)s.'), context=context) if type in ('out_invoice', 'out_refund'): acc_id = rec_res_id diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index 6cca8e0ce46..9a440d3705b 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -257,7 +257,7 @@ - +
@@ -390,7 +390,7 @@ - + Date: Sun, 17 Feb 2013 04:47:51 +0000 Subject: [PATCH 155/158] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20130216050946-w4syry6ser8ygl2j bzr revid: launchpad_translations_on_behalf_of_openerp-20130217044751-x711l71w351nknkb --- addons/web_kanban/i18n/da.po | 2 +- 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 | 22 ++--- openerp/addons/base/i18n/bg.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 | 36 +++++++-- 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 | 6 +- openerp/addons/base/i18n/es_AR.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_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 | 115 ++++++++++++++++++++++----- 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 | 9 ++- openerp/addons/base/i18n/hu.po | 16 ++-- 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 | 22 +++-- 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 | 33 +++++--- openerp/addons/base/i18n/nl_BE.po | 4 +- openerp/addons/base/i18n/pl.po | 6 +- openerp/addons/base/i18n/pt.po | 4 +- openerp/addons/base/i18n/pt_BR.po | 4 +- openerp/addons/base/i18n/ro.po | 15 ++-- 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 +- 68 files changed, 317 insertions(+), 193 deletions(-) diff --git a/addons/web_kanban/i18n/da.po b/addons/web_kanban/i18n/da.po index 69339d9a1c4..0fa4a479ef1 100644 --- a/addons/web_kanban/i18n/da.po +++ b/addons/web_kanban/i18n/da.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-02-15 04:49+0000\n" +"X-Launchpad-Export-Date: 2013-02-16 05:09+0000\n" "X-Generator: Launchpad (build 16491)\n" #. module: web_kanban diff --git a/openerp/addons/base/i18n/ab.po b/openerp/addons/base/i18n/ab.po index 899abe16d6f..8b61d50744e 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: 2013-02-07 04:43+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:37+0000\n" +"X-Generator: Launchpad (build 16491)\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 274e44a8692..645d82d1046 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: 2013-02-07 04:43+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:37+0000\n" +"X-Generator: Launchpad (build 16491)\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 e34482d3e60..afb9d172fde 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: 2013-02-07 04:43+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:37+0000\n" +"X-Generator: Launchpad (build 16491)\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 a6f29207c17..e86afb7115c 100644 --- a/openerp/addons/base/i18n/ar.po +++ b/openerp/addons/base/i18n/ar.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.4\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2012-11-25 18:53+0000\n" -"Last-Translator: waleed bazaza \n" +"PO-Revision-Date: 2013-02-16 09:04+0000\n" +"Last-Translator: Ahmad Khayyat \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-02-07 04:43+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:37+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -953,7 +953,7 @@ msgstr "مستودعات مشتركة (WebDav)" #. module: base #: view:res.users:0 msgid "Email Preferences" -msgstr "تفضيلات البريد الالكتروني" +msgstr "تفضيلات البريد الإلكتروني" #. module: base #: code:addons/base/ir/ir_fields.py:195 @@ -1328,7 +1328,7 @@ msgstr "" #. module: base #: model:ir.actions.client,name:base.action_client_base_menu msgid "Open Settings Menu" -msgstr "" +msgstr "فتح قائمة الإعدادات" #. module: base #: selection:base.language.install,lang:0 @@ -2169,7 +2169,7 @@ msgstr "" #: model:ir.ui.menu,name:base.menu_administration #: model:res.groups,name:base.group_system msgid "Settings" -msgstr "إعدادات" +msgstr "الإعدادات" #. module: base #: selection:ir.actions.act_window,view_type:0 @@ -4039,7 +4039,7 @@ msgstr "الجبل الأسود" #. module: base #: model:ir.module.module,shortdesc:base.module_fetchmail msgid "Email Gateway" -msgstr "بوابة البريد الالكتروني" +msgstr "بوابة البريد الإلكتروني" #. module: base #: code:addons/base/ir/ir_mail_server.py:465 @@ -4544,7 +4544,7 @@ msgstr "الهندية / हिंदी" #: model:ir.actions.act_window,name:base.action_view_base_language_install #: model:ir.ui.menu,name:base.menu_view_base_language_install msgid "Load a Translation" -msgstr "" +msgstr "تحميل ترجمة" #. module: base #: field:ir.module.module,latest_version:0 @@ -5254,7 +5254,7 @@ msgstr "الأسعار" #. module: base #: model:ir.module.module,shortdesc:base.module_email_template msgid "Email Templates" -msgstr "" +msgstr "قوالب البريد الإلكتروني" #. module: base #: model:res.country,name:base.sy @@ -11302,7 +11302,7 @@ msgstr "لا يمكن أن يكون حجم الحقل أقل من 1 !" #. module: base #: model:ir.module.module,shortdesc:base.module_mrp_operations msgid "Manufacturing Operations" -msgstr "" +msgstr "عمليات التصنيع" #. module: base #: view:base.language.export:0 diff --git a/openerp/addons/base/i18n/bg.po b/openerp/addons/base/i18n/bg.po index 90909a2bfa8..3810e84889e 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: 2013-02-07 04:44+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:38+0000\n" +"X-Generator: Launchpad (build 16491)\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 a848cc3835f..bfe35fe0d52 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: 2013-02-07 04:44+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:38+0000\n" +"X-Generator: Launchpad (build 16491)\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 5bc72b026fc..32175f266d6 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: 2013-02-07 04:44+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:38+0000\n" +"X-Generator: Launchpad (build 16491)\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 c3001f7c711..4edaf0f412d 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: 2013-02-07 04:44+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:38+0000\n" +"X-Generator: Launchpad (build 16491)\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 04e55b19745..50165a1b609 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: 2013-02-07 04:44+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:38+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -25,6 +25,10 @@ msgid "" "================================================\n" " " msgstr "" +"\n" +"Modul for check-skrivning og -udprint.\n" +"================================================\n" +" " #. module: base #: model:res.country,name:base.sh @@ -48,6 +52,8 @@ msgid "" "The second argument of the many2many field %s must be a SQL table !You used " "%s, which is not a valid SQL table name." msgstr "" +"Det andet argument i many2many-feltet %s skal være en SQL-tabel. !Du brugte " +"%s, som ikke er et gyldigt tabelnavn." #. module: base #: field:ir.ui.view,arch:0 @@ -73,7 +79,7 @@ msgstr "Ungarsk / Magyar" #. module: base #: selection:base.language.install,lang:0 msgid "Spanish (PY) / Español (PY)" -msgstr "" +msgstr "Spanish (PY) / Spansk (PY)" #. module: base #: model:ir.module.category,description:base.module_category_project_management @@ -81,11 +87,13 @@ msgid "" "Helps you manage your projects and tasks by tracking them, generating " "plannings, etc..." msgstr "" +"Hjælper dig med at administrere dine projekter og opgaver ved at spore dem, " +"generere planlægning, osv. .." #. module: base #: model:ir.module.module,summary:base.module_point_of_sale msgid "Touchscreen Interface for Shops" -msgstr "" +msgstr "Touchscreen-grænseflade for butikker" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_in_hr_payroll @@ -101,7 +109,7 @@ msgstr "" #. module: base #: view:ir.module.module:0 msgid "Created Views" -msgstr "" +msgstr "Oprettede visninger" #. module: base #: model:ir.module.module,description:base.module_product_manufacturer @@ -118,11 +126,22 @@ msgid "" " * Product Attributes\n" " " msgstr "" +"\n" +"Et modul som tilføjer producenterne og attributter på produkt formularen.\n" +"====================================================================\n" +"\n" +"Du kan nu definere følgende for et produkt:\n" +"-----------------------------------------------\n" +" * Producent\n" +" * Producentens produktnavn\n" +" * Producentens produktkode\n" +" * Produktattributter\n" +" " #. module: base #: field:ir.actions.client,params:0 msgid "Supplementary arguments" -msgstr "" +msgstr "Supplerende argumenter" #. module: base #: model:ir.module.module,description:base.module_google_base_account @@ -131,11 +150,14 @@ msgid "" "The module adds google user in res user.\n" "========================================\n" msgstr "" +"\n" +"Modulet tilføjer google user i res user.\n" +"========================================\n" #. module: base #: help:res.partner,employee:0 msgid "Check this box if this contact is an Employee." -msgstr "" +msgstr "Afkryds denne boks hvis kontakten er en medarbejder." #. module: base #: help:ir.model.fields,domain:0 diff --git a/openerp/addons/base/i18n/de.po b/openerp/addons/base/i18n/de.po index 9b015dc92be..523d774d2db 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: 2013-02-07 04:45+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:39+0000\n" +"X-Generator: Launchpad (build 16491)\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 8ee858b6d6b..b883501295f 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: 2013-02-07 04:46+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:40+0000\n" +"X-Generator: Launchpad (build 16491)\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 55ec9f2647c..364d5c46eda 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: 2013-02-07 04:51+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:46+0000\n" +"X-Generator: Launchpad (build 16491)\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 216b131f1fd..8c40e08046c 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: 2013-02-07 04:50+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:44+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -8436,7 +8436,7 @@ msgstr "Territorio británico del Océano Índico" #. module: base #: model:ir.actions.server,name:base.action_server_module_immediate_install msgid "Module Immediate Install" -msgstr "Módulo de instalación inmediata" +msgstr "Instalación inmediata del módulo(s)" #. module: base #: view:ir.actions.server:0 diff --git a/openerp/addons/base/i18n/es_AR.po b/openerp/addons/base/i18n/es_AR.po index b0878db6476..1cc63b1d08c 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: 2013-02-07 04:51+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:46+0000\n" +"X-Generator: Launchpad (build 16491)\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 87519633abd..0750e176485 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: 2013-02-07 04:52+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:46+0000\n" +"X-Generator: Launchpad (build 16491)\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 454b7a14415..8680af5bdc4 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: 2013-02-07 04:52+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:47+0000\n" +"X-Generator: Launchpad (build 16491)\n" "Language: \n" #. module: base diff --git a/openerp/addons/base/i18n/es_DO.po b/openerp/addons/base/i18n/es_DO.po index 07b2740fc10..aae14bfadd9 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: 2013-02-07 04:51+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:46+0000\n" +"X-Generator: Launchpad (build 16491)\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 c9d62b9a777..adf40f0beb2 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: 2013-02-07 04:53+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:47+0000\n" +"X-Generator: Launchpad (build 16491)\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 81c2889acb5..3683ba67ca7 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: 2013-02-07 04:52+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:47+0000\n" +"X-Generator: Launchpad (build 16491)\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 c71dae6fbb4..a2fbcb32b52 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: 2013-02-07 04:51+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:45+0000\n" +"X-Generator: Launchpad (build 16491)\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 57d183b0851..3af33a370ff 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: 2013-02-07 04:45+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:39+0000\n" +"X-Generator: Launchpad (build 16491)\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 4f510294299..281900e4e3d 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: 2013-02-07 04:44+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:37+0000\n" +"X-Generator: Launchpad (build 16491)\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 4f96538eeb0..0f63c33e275 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: 2013-02-07 04:48+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:42+0000\n" +"X-Generator: Launchpad (build 16491)\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 c9ce5eb59b5..583ff5b5173 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: 2013-02-07 04:53+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:47+0000\n" +"X-Generator: Launchpad (build 16491)\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 5416b5a4eae..578cfa0f498 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: 2013-02-07 04:45+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:39+0000\n" +"X-Generator: Launchpad (build 16491)\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 bc889e3b550..7a62b403471 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: 2013-02-07 04:45+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:39+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -42,7 +42,7 @@ msgstr "Autre configuration" #. module: base #: selection:ir.property,type:0 msgid "DateTime" -msgstr "Horodatage" +msgstr "Date/Heure" #. module: base #: code:addons/fields.py:643 @@ -698,6 +698,22 @@ msgid "" " A + B + C -> D + E\n" " " msgstr "" +"\n" +"Ce module vous permet de produire plusieurs produits à partir d'un ordre de " +"production.\n" +"======================================================================\n" +"\n" +"Vous pouvez configurer des sous-produits dans la nomenclature des " +"matériaux.\n" +"\n" +"Sans ce module :\n" +"----------------------\n" +" A + B + C -> D\n" +"\n" +"Avec ce module : \n" +"-----------------------\n" +" A + B + C -> D + E\n" +" " #. module: base #: selection:base.language.install,lang:0 @@ -2217,7 +2233,7 @@ msgstr "Accès en lecture" #. module: base #: help:ir.attachment,res_id:0 msgid "The record id this is attached to" -msgstr "" +msgstr "L'ID de l'enregistrement est attaché à" #. module: base #: model:ir.module.module,description:base.module_share @@ -3594,7 +3610,7 @@ msgstr "" #. module: base #: field:res.company,rml_header1:0 msgid "Company Tagline" -msgstr "" +msgstr "Slogan de la société" #. module: base #: code:addons/base/res/res_users.py:668 @@ -3612,6 +3628,8 @@ msgid "" "the user will have an access to the human resources configuration as well as " "statistic reports." msgstr "" +"l'utilisateur aura un accès à la configuration des ressources humaines comme " +"aux rapports statistiques." #. module: base #: model:ir.module.module,description:base.module_l10n_pl @@ -4409,6 +4427,18 @@ msgid "" "If you need to manage your meetings, you should install the CRM module.\n" " " msgstr "" +"\n" +"Ceci est un système complet d'agenda.\n" +"===============================\n" +"\n" +"Il supporte :\n" +"---------------\n" +" - L'agenda des événements,\n" +" - Les événements récurrents.\n" +"\n" +"Si vous souhaitez gérer vos rendez-vous, vous devriez installer le module " +"CRM.\n" +" " #. module: base #: model:res.country,name:base.je @@ -4438,7 +4468,7 @@ msgstr "%x - Représentation de date appropriée" #. module: base #: view:res.partner:0 msgid "Tag" -msgstr "" +msgstr "Étiquette" #. module: base #: view:res.lang:0 @@ -4478,7 +4508,7 @@ msgstr "" #. module: base #: model:res.country,name:base.sk msgid "Slovakia" -msgstr "" +msgstr "Slovaquie" #. module: base #: model:res.country,name:base.nr @@ -4719,6 +4749,18 @@ msgid "" "comptable\n" "Seddik au cours du troisième trimestre 2010." msgstr "" +"\n" +"Ce module de base permet de gérer le plan comptable pour le Maroc.\n" +"=================================================================\n" +"\n" +"Ce Module charge le modèle du plan de comptes standard Marocain et permet " +"de\n" +"générer les états comptables aux normes marocaines (Bilan, CPC (comptes de\n" +"produits et charges), balance générale à 6 colonnes, Grand livre " +"cumulatif...).\n" +"L'intégration comptable a été validé avec l'aide du Cabinet d'expertise " +"comptable\n" +"Seddik au cours du troisième trimestre 2010." #. module: base #: help:ir.module.module,auto_install:0 @@ -4753,7 +4795,7 @@ msgstr "Plans comtables" #. module: base #: model:ir.ui.menu,name:base.menu_event_main msgid "Events Organization" -msgstr "" +msgstr "Organisation d'évènements" #. module: base #: model:ir.actions.act_window,name:base.action_partner_customer_form @@ -4781,7 +4823,7 @@ msgstr "Champ de base" #. module: base #: model:ir.module.category,name:base.module_category_managing_vehicles_and_contracts msgid "Managing vehicles and contracts" -msgstr "" +msgstr "Gestion de véhicules et de contrats" #. module: base #: model:ir.module.module,description:base.module_base_setup @@ -4908,12 +4950,12 @@ msgstr "" #. module: base #: model:ir.module.module,summary:base.module_sale msgid "Quotations, Sales Orders, Invoicing" -msgstr "" +msgstr "Devis, commandes, facturation" #. module: base #: field:res.partner,parent_id:0 msgid "Related Company" -msgstr "" +msgstr "Société parente" #. module: base #: help:ir.actions.act_url,help:0 @@ -4959,7 +5001,7 @@ msgstr "`code` doit être unique." #. module: base #: model:ir.module.module,shortdesc:base.module_knowledge msgid "Knowledge Management System" -msgstr "" +msgstr "Base de connaissances" #. module: base #: view:workflow.activity:0 @@ -4983,6 +5025,14 @@ msgid "" "invite.\n" "\n" msgstr "" +"\n" +"Ce module met à jour les notes dans OpenERP, en utilisant un éditeur " +"externe\n" +"===============================================================\n" +"\n" +"Utilisez le pour mettre à jour vos notes en temps réel, avec les " +"utilisateurs invités.\n" +"\n" #. module: base #: model:ir.module.module,description:base.module_account_sequence @@ -5002,6 +5052,23 @@ msgid "" " * Number Padding\n" " " msgstr "" +"\n" +"Ce module permet de paramétrer les séquences de numérotation interne des " +"écritures comptables.\n" +"=============================================================================" +"=\n" +"\n" +"Il permet de configurer les séquences comptables\n" +"\n" +"Vous pouvez personnaliser les attributs suivants de la séquence : \n" +"-----------------------------------------------------------------------------" +"-----------\n" +" * Préfixe\n" +" * Suffixe\n" +" * Nombre suivant\n" +" * Incrément\n" +" * Espacement.\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_project_timesheet @@ -13513,7 +13580,7 @@ msgstr "Chypre" #. module: base #: field:res.users,new_password:0 msgid "Set Password" -msgstr "" +msgstr "Définir le mot de passe" #. module: base #: field:ir.actions.server,subject:0 @@ -14748,7 +14815,7 @@ msgstr "Thaïlande" #. module: base #: model:ir.model,name:base.model_change_password_wizard msgid "Change Password Wizard" -msgstr "" +msgstr "Assistant de changement de mot de passe" #. module: base #: model:ir.module.module,summary:base.module_account_voucher @@ -14867,7 +14934,7 @@ msgstr "Taux de la devise" #: view:base.module.upgrade:0 #: field:base.module.upgrade,module_info:0 msgid "Modules to Update" -msgstr "" +msgstr "Modules à mettre à jour" #. module: base #: model:ir.ui.menu,name:base.menu_custom_multicompany @@ -14956,7 +15023,7 @@ msgstr "Utilisation de l'action" #. module: base #: field:ir.module.module,name:0 msgid "Technical Name" -msgstr "" +msgstr "Nom technique" #. module: base #: model:ir.model,name:base.model_workflow_workitem @@ -15020,7 +15087,7 @@ msgstr "Allemagne - Comptabilité" #. module: base #: view:ir.sequence:0 msgid "Day of the Year: %(doy)s" -msgstr "" +msgstr "Jour de l'année: %(doy)s" #. module: base #: field:ir.ui.menu,web_icon:0 @@ -15043,6 +15110,8 @@ msgid "" "If this field is empty, the view applies to all users. Otherwise, the view " "applies to the users of those groups only." msgstr "" +"Si ce champ est vide, la vue s'applique à tous les utilisateurs. Sinon, la " +"vue s'applique aux utilisateurs de ces groupes uniquement." #. module: base #: selection:base.language.install,lang:0 @@ -15057,12 +15126,12 @@ msgstr "" #. module: base #: field:ir.actions.act_window,src_model:0 msgid "Source Model" -msgstr "" +msgstr "Classe source" #. module: base #: view:ir.sequence:0 msgid "Day of the Week (0:Monday): %(weekday)s" -msgstr "" +msgstr "Jour de la semaine (0: lundi): %(weekday)s" #. module: base #: code:addons/base/module/wizard/base_module_upgrade.py:84 @@ -15076,7 +15145,7 @@ msgstr "Dépendance non trouvé !" #: code:addons/base/ir/ir_model.py:1024 #, python-format msgid "Administrator access is required to uninstall a module" -msgstr "" +msgstr "L'accès administrateur est nécessaire pour désinstaller un module" #. module: base #: model:ir.model,name:base.model_base_module_configuration @@ -15780,7 +15849,7 @@ msgstr "Chili" #. module: base #: model:ir.module.module,shortdesc:base.module_web_view_editor msgid "View Editor" -msgstr "" +msgstr "Editeur de vue" #. module: base #: view:ir.cron:0 @@ -15860,6 +15929,8 @@ msgid "" "Do you confirm the uninstallation of this module? This will permanently " "erase all data currently stored by the module!" msgstr "" +"Confirmez-vous la désinstallation de ce module ? Cela efface définitivement " +"toutes les données actuellement stockées par le module !" #. module: base #: field:ir.actions.server,mobile:0 @@ -16077,7 +16148,7 @@ msgstr "" #. module: base #: view:res.partner:0 msgid "Internal Notes" -msgstr "" +msgstr "Notes internes" #. module: base #: model:res.partner.title,name:base.res_partner_title_pvt_ltd diff --git a/openerp/addons/base/i18n/gl.po b/openerp/addons/base/i18n/gl.po index 7973d78a9fb..561c4d34428 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: 2013-02-07 04:45+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:40+0000\n" +"X-Generator: Launchpad (build 16491)\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 abc564b4665..55f2bd205e6 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: 2013-02-07 04:46+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:40+0000\n" +"X-Generator: Launchpad (build 16491)\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 ec3dbfd946d..6c2e7b4c248 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: 2013-02-07 04:46+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:40+0000\n" +"X-Generator: Launchpad (build 16491)\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 34212be5a98..101d61b59f8 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: 2013-02-07 04:46+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:40+0000\n" +"X-Generator: Launchpad (build 16491)\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 1ed80ec578a..4409e7226ae 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: 2013-02-07 04:49+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:43+0000\n" +"X-Generator: Launchpad (build 16491)\n" "Language: hr\n" #. module: base @@ -391,6 +391,8 @@ msgid "" "There is already a shared filter set as default for %(model)s, delete or " "change it before setting a new default" msgstr "" +"Već postoji dijeljeni set filtera kao zadani za %(model)s, obrišite ga ili " +"izmjenite prije spremanja novog." #. module: base #: code:addons/orm.py:2648 @@ -856,6 +858,9 @@ msgid "" "image, with aspect ratio preserved. Use this field anywhere a small image is " "required." msgstr "" +"Mala sličica ovog kontakta. Veličina je automatski promijenjena na 64x64 px " +"sliku. sa očuvanim proporcijama. Koristite ovo polje gdjegod je potrebna " +"mala slika." #. module: base #: help:ir.actions.server,mobile:0 diff --git a/openerp/addons/base/i18n/hu.po b/openerp/addons/base/i18n/hu.po index b7614e2a02c..77dcffb413c 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: 2013-02-07 04:46+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:41+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -17983,7 +17983,7 @@ msgstr "Jamaika" #. module: base #: field:res.partner,color:0 msgid "Color Index" -msgstr "Szín mutató" +msgstr "Szín meghatározó" #. module: base #: model:ir.actions.act_window,help:base.action_partner_category_form @@ -17994,10 +17994,10 @@ msgid "" "also belong to his parent category." msgstr "" "Rendszerezze a partner kategóriákat annak érdekében, hogy hatékonyabban " -"tudja osztályozni őket a nyomonkövetési és analitikai célokra. Egy partner " -"több kategóriához is tartozhat és a kategóriák hierarchikus szerkezettel is " -"rendelkezhetnek: egy partner, aki egy adott kategóriához tartozik szintén " -"tartozhat a szülőkategóriához is." +"tudja osztályozni őket a nyomonkövetési és analitikai, elemzési célokra. Egy " +"partner több kategóriához is tartozhat és a kategóriák hierarchikus " +"szerkezettel is rendelkezhetnek: egy partner, aki egy adott kategóriához " +"tartozik, szintén tartozhat a szülőkategóriához is." #. module: base #: model:ir.module.module,description:base.module_survey @@ -18029,7 +18029,7 @@ msgstr "" "választ adhat a \n" "különböző kérdésekre ha a felmérés elkészült. Partnerek is küldhetnek emailt " "a felhasználó\n" -"nevével és jelszóval meghívásként a felmérésben való részvételhez.\n" +"nevével és jelszóval, meghívásként a felmérésben való részvételhez.\n" " " #. module: base diff --git a/openerp/addons/base/i18n/hy.po b/openerp/addons/base/i18n/hy.po index 20ec2b20b2f..ebbbf0f3cad 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: 2013-02-07 04:43+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:37+0000\n" +"X-Generator: Launchpad (build 16491)\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 1ca3668a411..93d42d05c61 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: 2013-02-07 04:46+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:41+0000\n" +"X-Generator: Launchpad (build 16491)\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 f03ad62b867..b1b9b136051 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: 2013-02-07 04:46+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:41+0000\n" +"X-Generator: Launchpad (build 16491)\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 30d251b7a13..41a4d069421 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: 2013-02-07 04:47+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:41+0000\n" +"X-Generator: Launchpad (build 16491)\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 e7606212023..55e22742f6b 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: 2013-02-07 04:47+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:41+0000\n" +"X-Generator: Launchpad (build 16491)\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 86ee7429002..523c9736b5c 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: 2013-02-07 04:45+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:39+0000\n" +"X-Generator: Launchpad (build 16491)\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 213a1048df3..f67aac01beb 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: 2013-02-07 04:47+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:41+0000\n" +"X-Generator: Launchpad (build 16491)\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 26503dde406..5844568aa4e 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: 2013-02-07 04:47+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:41+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -741,6 +741,12 @@ msgid "" "Contains the installer for marketing-related modules.\n" " " msgstr "" +"\n" +"마케팅 메뉴.\n" +"===================\n" +"\n" +"마케팅 관련 모듈의 설치 파일을 포함하고 있음.\n" +" " #. module: base #: model:ir.module.module,description:base.module_web_linkedin @@ -776,7 +782,7 @@ msgstr "" #. module: base #: help:ir.cron,nextcall:0 msgid "Next planned execution date for this job." -msgstr "" +msgstr "이 업무에 대한 다음 실행 계획일" #. module: base #: model:ir.model,name:base.model_ir_ui_view @@ -791,7 +797,7 @@ msgstr "에리트레아" #. module: base #: sql_constraint:res.company:0 msgid "The company name must be unique !" -msgstr "" +msgstr "회사명은 유일해야 함!" #. module: base #: model:ir.ui.menu,name:base.menu_base_action_rule_admin @@ -1006,6 +1012,12 @@ msgid "" "actions(Sign in/Sign out) performed by them.\n" " " msgstr "" +"\n" +"이 모듈은 직원의 출근(근태)관리를 목적으로 합니다.\n" +"==================================================\n" +"\n" +"직원의 계정의 활동 상황(로그인/로그아웃)에 기반하여 근태를 관리합니다.\n" +" " #. module: base #: model:res.country,name:base.nu @@ -1684,7 +1696,7 @@ msgstr "" msgid "" "Helps you manage your purchase-related processes such as requests for " "quotations, supplier invoices, etc..." -msgstr "" +msgstr "견적 요청, 공급업체 송장 요청 등과 같은 구매 관련 프로세스를 관리하는데 도움을 줍니다." #. module: base #: help:res.partner,website:0 diff --git a/openerp/addons/base/i18n/lt.po b/openerp/addons/base/i18n/lt.po index af5c3f35363..e4749b63ce8 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: 2013-02-07 04:47+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:42+0000\n" +"X-Generator: Launchpad (build 16491)\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 ec629a95962..f928517c4b8 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: 2013-02-07 04:47+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:42+0000\n" +"X-Generator: Launchpad (build 16491)\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 73795499f14..a48d0f0afb3 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: 2013-02-07 04:48+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:42+0000\n" +"X-Generator: Launchpad (build 16491)\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 4112f85bc77..97fd57bf06f 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: 2013-02-08 04:35+0000\n" -"X-Generator: Launchpad (build 16482)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:42+0000\n" +"X-Generator: Launchpad (build 16491)\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 29b4954a421..8d64cb5f9c0 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: 2013-02-07 04:48+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:42+0000\n" +"X-Generator: Launchpad (build 16491)\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 086e2d16c1b..cab24aae169 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: 2013-02-07 04:44+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:39+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -1563,7 +1563,7 @@ msgstr "" #. module: base #: field:ir.module.category,parent_id:0 msgid "Parent Application" -msgstr "Parent applicatie" +msgstr "Bovenliggende applicatie" #. module: base #: model:ir.actions.act_window,name:base.ir_action_wizard @@ -2225,7 +2225,7 @@ msgstr "%s (kopie)" #. module: base #: model:ir.module.module,shortdesc:base.module_account_chart msgid "Template of Charts of Accounts" -msgstr "Grootboekschema template" +msgstr "Grootboekschema sjabloon" #. module: base #: field:res.partner,type:0 @@ -6589,7 +6589,7 @@ msgstr "Toename nummer mag niet nul zijn." #. module: base #: model:ir.module.module,shortdesc:base.module_account_cancel msgid "Cancel Journal Entries" -msgstr "Annuleer journaalposten" +msgstr "Annuleer boekingen" #. module: base #: field:res.partner,tz_offset:0 @@ -6693,7 +6693,7 @@ msgid "" "the user will be able to manage his own human resources stuff (leave " "request, timesheets, ...), if he is linked to an employee in the system." msgstr "" -"de gebruiker heeft de mogelijkheid om zijn eigen personeelsbeheer zaken te " +"De gebruiker heeft de mogelijkheid om zijn eigen personeelsbeheer zaken te " "beheren (verlofaanvragen, urenstaten, etc.) als hij is gekoppeld aan een " "werknemer in het systeem." @@ -7232,7 +7232,7 @@ msgstr "" #: model:res.groups,comment:base.group_hr_user msgid "the user will be able to approve document created by employees." msgstr "" -"de gebruiker heeft de mogelijkheid om documenten goed te keuren welke zijn " +"De gebruiker heeft de mogelijkheid om documenten goed te keuren welke zijn " "gemaakt door werknemers." #. module: base @@ -7428,7 +7428,7 @@ msgstr "Brits Territorium in de Indische Oceaan" #. module: base #: model:ir.actions.server,name:base.action_server_module_immediate_install msgid "Module Immediate Install" -msgstr "Module directie installatie" +msgstr "Directe installatie" #. module: base #: view:ir.actions.server:0 @@ -9574,6 +9574,17 @@ msgid "" "Thank you in advance for your cooperation.\n" "Best Regards," msgstr "" +"Geachte heer / mevrouw,\n" +"\n" +"Uit onze gegevens blijkt dat sommige rekeningen nog niet zijn betaald. " +"Hieronder vindt u meer informatie.\n" +"Indien het bedrag reeds is betaald, dan kunt u dit bericht negeren. Anders " +"willen wij u vragen het totale bedrag hieronder vermeld, over te maken.\n" +"\n" +"Als u vragen hebt over uw facturen, neem dan contact met ons op.\n" +"\n" +"Dank u bij voorbaat voor uw medewerking.\n" +"Met vriendelijke groet," #. module: base #: view:ir.module.category:0 @@ -13951,7 +13962,7 @@ msgid "" msgstr "" "CSV formaat: kunt u rechtstreeks bewerken met uw favoriete spreadsheet-" "software,\n" -"                                 de meest rechtse kolom (waarde) bevat de " +" de meest rechtse kolom (waarde) bevat de " "vertalingen" #. module: base @@ -14733,7 +14744,7 @@ msgstr "Geplande acties uitvoeren" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_journal msgid "Invoicing Journals" -msgstr "Factuur journaalposten" +msgstr "Factureren boekingen" #. module: base #: help:ir.ui.view,groups_id:0 @@ -15272,6 +15283,8 @@ msgid "" "file encoding, please be sure to view and edit\n" " using the same encoding." msgstr "" +"bestand codering. Zorg ervoor dat u het bestand bekijkt en bewerkt\n" +" met dezelfde codering." #. module: base #: view:ir.rule:0 diff --git a/openerp/addons/base/i18n/nl_BE.po b/openerp/addons/base/i18n/nl_BE.po index 6ee5eb187c6..af08388f7f0 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: 2013-02-07 04:52+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:46+0000\n" +"X-Generator: Launchpad (build 16491)\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 a12bbc9f9d4..428e8c79b2b 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: 2013-02-07 04:48+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:43+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -14618,7 +14618,7 @@ msgstr "Uruchom" #. module: base #: selection:res.partner,type:0 msgid "Shipping" -msgstr "Przewoźnik" +msgstr "Dostawa" #. module: base #: model:ir.module.module,description:base.module_project_mrp diff --git a/openerp/addons/base/i18n/pt.po b/openerp/addons/base/i18n/pt.po index 3417c833545..f843460c18e 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: 2013-02-07 04:48+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:43+0000\n" +"X-Generator: Launchpad (build 16491)\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 7c3f985f96d..f21c56f160a 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: 2013-02-07 04:51+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:45+0000\n" +"X-Generator: Launchpad (build 16491)\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 fbcb6a5f0e3..029dccf009e 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: 2013-02-07 04:49+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:43+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -11497,11 +11497,12 @@ msgid "" msgstr "" "Stimate Domn/Doamna,\n" "\n" -"Inregistrarile noastre indica faptul ca unii parametrii din contul " -"dumneavoastra sunt inca scadente. Aveti toate detaliile mai jos.\n" -"Daca suma a fost deja platita, va rugam sa ignorati acest aviz. In cazul in " -"care nu a fost platita inca, va rugam sa efectuati plata restanta.\n" -"Daca aveti intrebari in legatura cu acest cont, va rugam sa ne contactati.\n" +"Inregistrarile noastre indica faptul ca aveti unele plati inca scadente. " +"Gasiti toate detaliile mai jos.\n" +"Daca suma a fost deja platita, va rugam sa ignorati acest aviz. In cazul " +"contrar, va rugam sa efectuati plata restanta descrisa mai jos.\n" +"Daca aveti intrebari in legatura cu contul dumneavoastra, va rugam sa ne " +"contactati.\n" "\n" "Va multumim anticipat pentru cooperarea dumneavoastra.\n" "Cu stima," diff --git a/openerp/addons/base/i18n/ru.po b/openerp/addons/base/i18n/ru.po index f7abb90c79d..b7d1dfd77f7 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: 2013-02-07 04:49+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:43+0000\n" +"X-Generator: Launchpad (build 16491)\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 2803d252a13..9b475e097d3 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: 2013-02-07 04:49+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:44+0000\n" +"X-Generator: Launchpad (build 16491)\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 ad63c5552c0..312e0e7e696 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: 2013-02-07 04:49+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:44+0000\n" +"X-Generator: Launchpad (build 16491)\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 0b807f99742..c8162e55590 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: 2013-02-07 04:43+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:37+0000\n" +"X-Generator: Launchpad (build 16491)\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 1c8fb3fdc48..6ea6258be22 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: 2013-02-07 04:49+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:43+0000\n" +"X-Generator: Launchpad (build 16491)\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 8b8a2cf2647..8bf4a15e2ab 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: 2013-02-07 04:53+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:47+0000\n" +"X-Generator: Launchpad (build 16491)\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 d82136c0107..7445b2d2ab9 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: 2013-02-07 04:50+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:44+0000\n" +"X-Generator: Launchpad (build 16491)\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 f44c434e785..76408c11a13 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: 2013-02-07 04:50+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:44+0000\n" +"X-Generator: Launchpad (build 16491)\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 892d8d1cc69..8521911a434 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: 2013-02-07 04:50+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:44+0000\n" +"X-Generator: Launchpad (build 16491)\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 230a10b03b2..78a47208137 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: 2013-02-07 04:50+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:45+0000\n" +"X-Generator: Launchpad (build 16491)\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 bdf75fd0948..7e78a30bd82 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: 2013-02-07 04:50+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:45+0000\n" +"X-Generator: Launchpad (build 16491)\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 de667acc7f9..32f051788b6 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: 2013-02-07 04:50+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:45+0000\n" +"X-Generator: Launchpad (build 16491)\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 7b69b5379cd..e991fe537d8 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: 2013-02-07 04:51+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:45+0000\n" +"X-Generator: Launchpad (build 16491)\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 de526b0c906..66262e60048 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: 2013-02-07 04:52+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:47+0000\n" +"X-Generator: Launchpad (build 16491)\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 8b5a88f419b..9dbbf546b4b 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: 2013-02-07 04:51+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:45+0000\n" +"X-Generator: Launchpad (build 16491)\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 c793d9f29c8..b9e74d7397f 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: 2013-02-07 04:52+0000\n" -"X-Generator: Launchpad (build 16477)\n" +"X-Launchpad-Export-Date: 2013-02-17 04:46+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing From ee256b5664665ce45b9397b5225bf004c0c35754 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 18 Feb 2013 16:31:07 +0100 Subject: [PATCH 156/158] [FIX] service: call stop() instead of shutdown() in the evented case. bzr revid: vmt@openerp.com-20130218153107-m5ikcn10gckk8ik3 --- openerp/service/wsgi_server.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/openerp/service/wsgi_server.py b/openerp/service/wsgi_server.py index 0676f8c02b0..0ca7dfcbd94 100644 --- a/openerp/service/wsgi_server.py +++ b/openerp/service/wsgi_server.py @@ -450,8 +450,13 @@ def stop_service(): The server is supposed to have been started by start_server() above. """ if httpd: - httpd.shutdown() - close_socket(httpd.socket) + if not openerp.evented: + httpd.shutdown() + close_socket(httpd.socket) + else: + import gevent + httpd.stop() + gevent.shutdown() def close_socket(sock): """ Closes a socket instance cleanly From b985c7302f387948f6d4ddd5ba7b02861c747885 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 18 Feb 2013 17:48:39 +0100 Subject: [PATCH 157/158] [FIX] openerp namespace: the import hook was still inserting modules in sys.moduls at their shortname. bzr revid: vmt@openerp.com-20130218164839-2qludhn3znpdftq5 --- openerp/modules/module.py | 56 --------------------------------------- openerp/service/cron.py | 6 +---- 2 files changed, 1 insertion(+), 61 deletions(-) diff --git a/openerp/modules/module.py b/openerp/modules/module.py index 9f716099b56..e71c1f1c519 100644 --- a/openerp/modules/module.py +++ b/openerp/modules/module.py @@ -62,23 +62,6 @@ class AddonsImportHook(object): backward compatibility, `import ` is still supported. Now they are living in `openerp.addons`. The good way to import such modules is thus `import openerp.addons.module`. - - For backward compatibility, loading an addons puts it in `sys.modules` - under both the legacy (short) name, and the new (longer) name. This - ensures that - import hr - import openerp.addons.hr - loads the hr addons only once. - - When an OpenERP addons name clashes with some other installed Python - module (for instance this is the case of the `resource` addons), - obtaining the OpenERP addons is only possible with the long name. The - short name will give the expected Python module. - - Instead of relying on some addons path, an alternative approach would be - to use pkg_resources entry points from already installed Python libraries - (and install our addons as such). Even when implemented, we would still - have to support the addons path approach for backward compatibility. """ def find_module(self, module_name, package_path): @@ -86,25 +69,6 @@ class AddonsImportHook(object): if len(module_parts) == 3 and module_name.startswith('openerp.addons.'): return self # We act as a loader too. - # TODO list of loadable modules can be cached instead of always - # calling get_module_path(). - if len(module_parts) == 1 and \ - get_module_path(module_parts[0], - display_warning=False): - try: - # Check if the bare module name clashes with another module. - f, path, descr = imp.find_module(module_parts[0]) - _logger.warning(""" -Ambiguous import: the OpenERP module `%s` is shadowed by another -module (available at %s). -To import it, use `import openerp.addons..`.""" % (module_name, path)) - return - except ImportError, e: - # Using `import ` instead of - # `import openerp.addons.` is ugly but not harmful - # and kept for backward compatibility. - return self # We act as a loader too. - def load_module(self, module_name): module_parts = module_name.split('.') @@ -113,29 +77,9 @@ To import it, use `import openerp.addons..`.""" % (module_name, path)) if module_name in sys.modules: return sys.modules[module_name] - if len(module_parts) == 1: - module_part = module_parts[0] - if module_part in sys.modules: - return sys.modules[module_part] - - try: - # Check if the bare module name shadows another module. - f, path, descr = imp.find_module(module_part) - is_shadowing = True - except ImportError, e: - # Using `import ` instead of - # `import openerp.addons.` is ugly but not harmful - # and kept for backward compatibility. - is_shadowing = False - # Note: we don't support circular import. f, path, descr = imp.find_module(module_part, ad_paths) mod = imp.load_module('openerp.addons.' + module_part, f, path, descr) - if not is_shadowing: - sys.modules[module_part] = mod - for k in sys.modules.keys(): - if k.startswith('openerp.addons.' + module_part): - sys.modules[k[len('openerp.addons.'):]] = sys.modules[k] sys.modules['openerp.addons.' + module_part] = mod return mod diff --git a/openerp/service/cron.py b/openerp/service/cron.py index f3c81fe785f..3155ed4259b 100644 --- a/openerp/service/cron.py +++ b/openerp/service/cron.py @@ -44,11 +44,7 @@ def cron_runner(number): _logger.debug('cron%d polling for jobs', number) for db_name, registry in registries.items(): while True and registry.ready: - # acquired = openerp.addons.base.ir.ir_cron.ir_cron._acquire_job(db_name) - # TODO why isnt openerp.addons.base defined ? - import sys - base = sys.modules['addons.base'] - acquired = base.ir.ir_cron.ir_cron._acquire_job(db_name) + acquired = openerp.addons.base.ir.ir_cron.ir_cron._acquire_job(db_name) if not acquired: break From 5bca6d888f2b244248a1fca8834a1d10472d7df1 Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Tue, 19 Feb 2013 04:57:06 +0000 Subject: [PATCH 158/158] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20130216045714-d9igbkeb3a2wzohp bzr revid: launchpad_translations_on_behalf_of_openerp-20130218044953-7p6xwm71bp0eaxna bzr revid: launchpad_translations_on_behalf_of_openerp-20130219045706-ixtnuj13l1xhob4u --- addons/account_analytic_analysis/i18n/mn.po | 79 +-- addons/account_test/i18n/ar.po | 241 +++++++++ addons/base_action_rule/i18n/cs.po | 338 ++++++++++++ addons/contacts/i18n/hu.po | 17 +- addons/google_docs/i18n/mn.po | 188 +++++++ addons/google_docs/i18n/sv.po | 188 +++++++ addons/hr/i18n/hu.po | 70 ++- addons/knowledge/i18n/mn.po | 32 +- addons/marketing/i18n/hu.po | 11 +- addons/marketing_campaign/i18n/hu.po | 180 +++++-- addons/portal_crm/i18n/ro.po | 568 ++++++++++++++++++++ addons/portal_sale/i18n/mn.po | 344 ++++++++++++ addons/report_webkit/i18n/mn.po | 517 ++++++++++++++++++ 13 files changed, 2637 insertions(+), 136 deletions(-) create mode 100644 addons/account_test/i18n/ar.po create mode 100644 addons/base_action_rule/i18n/cs.po create mode 100644 addons/google_docs/i18n/mn.po create mode 100644 addons/google_docs/i18n/sv.po create mode 100644 addons/portal_crm/i18n/ro.po create mode 100644 addons/portal_sale/i18n/mn.po create mode 100644 addons/report_webkit/i18n/mn.po diff --git a/addons/account_analytic_analysis/i18n/mn.po b/addons/account_analytic_analysis/i18n/mn.po index ca1f43d0234..d961188e2dc 100644 --- a/addons/account_analytic_analysis/i18n/mn.po +++ b/addons/account_analytic_analysis/i18n/mn.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2010-12-20 23:20+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2013-02-15 10:57+0000\n" +"Last-Translator: gobi \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-22 05:42+0000\n" -"X-Generator: Launchpad (build 16378)\n" +"X-Launchpad-Export-Date: 2013-02-16 04:57+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: account_analytic_analysis #: view:account.analytic.account:0 @@ -29,12 +29,12 @@ msgstr "Бүлэглэх..." #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "To Invoice" -msgstr "" +msgstr "Үнийн нэхэмжлэл" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Remaining" -msgstr "" +msgstr "Үлдэгдэл" #. module: account_analytic_analysis #: view:account.analytic.account:0 @@ -71,12 +71,12 @@ msgstr "" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "⇒ Invoice" -msgstr "" +msgstr "⇒ Нэхэмжлэл" #. module: account_analytic_analysis #: field:account.analytic.account,ca_invoiced:0 msgid "Invoiced Amount" -msgstr "Нэхэмжилсэн дүн" +msgstr "Нэхэмжлэлийн дүн" #. module: account_analytic_analysis #: field:account.analytic.account,last_worked_invoiced_date:0 @@ -86,7 +86,7 @@ msgstr "Эцсийн өртөгийг нэхэмжилсэн огноо" #. module: account_analytic_analysis #: help:account.analytic.account,fix_price_to_invoice:0 msgid "Sum of quotations for this contract." -msgstr "" +msgstr "Энэ гэрээний ханшийн нийлбэр." #. module: account_analytic_analysis #: help:account.analytic.account,ca_invoiced:0 @@ -120,7 +120,7 @@ msgstr "Аналитик данс" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Partner" -msgstr "" +msgstr "Харилцагч" #. module: account_analytic_analysis #: view:account.analytic.account:0 @@ -149,12 +149,12 @@ msgstr "" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "End Date" -msgstr "Дуусах огноо" +msgstr "Дуусан огноо" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Account Manager" -msgstr "" +msgstr "Дансны менежер" #. module: account_analytic_analysis #: help:account.analytic.account,remaining_hours_to_invoice:0 @@ -164,12 +164,12 @@ msgstr "" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Expected" -msgstr "" +msgstr "Тооцоолсон" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Contracts not assigned" -msgstr "" +msgstr "Гэрээнүүд оноогдоогүй байна" #. module: account_analytic_analysis #: help:account.analytic.account,theorical_margin:0 @@ -205,6 +205,7 @@ msgstr "Бодит зөрүүний хэмжээ (%)" #: help:account.analytic.account,remaining_hours:0 msgid "Computed using the formula: Maximum Time - Total Worked Time" msgstr "" +"Тооцоололд ашиглагдсан томъёо: Хамгийн их хугацаа - Нийт ажилласан хугацаа" #. module: account_analytic_analysis #: help:account.analytic.account,hours_quantity:0 @@ -218,7 +219,7 @@ msgstr "" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Nothing to invoice, create" -msgstr "" +msgstr "Нэхэмжлэх, үүсгэх зүйлс алга" #. module: account_analytic_analysis #: model:res.groups,name:account_analytic_analysis.group_template_required @@ -228,7 +229,7 @@ msgstr "" #. module: account_analytic_analysis #: field:account.analytic.account,hours_quantity:0 msgid "Total Worked Time" -msgstr "" +msgstr "Нийт ажилласан хугацаа" #. module: account_analytic_analysis #: field:account.analytic.account,real_margin:0 @@ -238,7 +239,7 @@ msgstr "Бодит зөрүү" #. module: account_analytic_analysis #: model:ir.model,name:account_analytic_analysis.model_account_analytic_analysis_summary_month msgid "Hours summary by month" -msgstr "Hours summary by month" +msgstr "Сарын цагийн хураангуй" #. module: account_analytic_analysis #: help:account.analytic.account,real_margin_rate:0 @@ -248,12 +249,12 @@ msgstr "Томъёг ашиглан тооцоолох: (Бодит зөрүү/ #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "or view" -msgstr "" +msgstr "эсвэл үзэх" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Customer Contracts" -msgstr "" +msgstr "Захиалагчийн гэрээнүүд" #. module: account_analytic_analysis #: view:account.analytic.account:0 @@ -270,7 +271,7 @@ msgstr "Сар" #: model:ir.actions.act_window,name:account_analytic_analysis.action_hr_tree_invoiced_all #: model:ir.ui.menu,name:account_analytic_analysis.menu_action_hr_tree_invoiced_all msgid "Time & Materials to Invoice" -msgstr "" +msgstr "Хугацаа & Нэхэмжлэлийн материал" #. module: account_analytic_analysis #: model:ir.actions.act_window,name:account_analytic_analysis.action_account_analytic_overdue_all @@ -281,12 +282,12 @@ msgstr "Гэрээнүүд" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Start Date" -msgstr "" +msgstr "Эхлэх огноо" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Invoiced" -msgstr "" +msgstr "Нэхэмжилсэн" #. module: account_analytic_analysis #: view:account.analytic.account:0 @@ -305,7 +306,7 @@ msgstr "Захиалагчтай шинэчлэхээр хүлээж байга #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Timesheets" -msgstr "" +msgstr "Цагийн хуудас" #. module: account_analytic_analysis #: help:account.analytic.account,hours_qtt_non_invoiced:0 @@ -329,7 +330,7 @@ msgstr "Тоо ширхэг хязгаараас давсан" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Status" -msgstr "" +msgstr "Төлөв" #. module: account_analytic_analysis #: field:account.analytic.account,ca_theorical:0 @@ -350,7 +351,7 @@ msgstr "OpenERP-д гэрээ нь харилцагч бүхий шинжилг #. module: account_analytic_analysis #: model:ir.actions.act_window,name:account_analytic_analysis.action_sales_order msgid "Sales Orders" -msgstr "" +msgstr "Борлуулалтын захиалгууд" #. module: account_analytic_analysis #: help:account.analytic.account,last_invoice_date:0 @@ -437,12 +438,12 @@ msgstr "" #. module: account_analytic_analysis #: field:account.analytic.account,toinvoice_total:0 msgid "Total to Invoice" -msgstr "" +msgstr "Нийт нэхэмжлэл" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Sale Orders" -msgstr "" +msgstr "Борлуулалтын захиалга" #. module: account_analytic_analysis #: view:account.analytic.account:0 @@ -452,7 +453,7 @@ msgstr "Нээх" #. module: account_analytic_analysis #: field:account.analytic.account,invoiced_total:0 msgid "Total Invoiced" -msgstr "" +msgstr "Нийт нэхэмжлэл" #. module: account_analytic_analysis #: help:account.analytic.account,remaining_ca:0 @@ -468,7 +469,7 @@ msgstr "Сүүлийн нэхэмжлэлийн огноо" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Units Remaining" -msgstr "" +msgstr "Нэгжийн үлдэгдэл" #. module: account_analytic_analysis #: model:ir.actions.act_window,help:account_analytic_analysis.action_hr_tree_invoiced_all @@ -497,7 +498,7 @@ msgstr "Нэхэмжлэх" #. module: account_analytic_analysis #: field:account.analytic.account,total_cost:0 msgid "Total Costs" -msgstr "Нийт өртөг" +msgstr "Нийт зардал" #. module: account_analytic_analysis #: help:account.analytic.account,remaining_total:0 @@ -526,7 +527,7 @@ msgstr "Онолын Хязгаар" #. module: account_analytic_analysis #: field:account.analytic.account,remaining_total:0 msgid "Total Remaining" -msgstr "" +msgstr "Нийт үлдэгдэл" #. module: account_analytic_analysis #: help:account.analytic.account,real_margin:0 @@ -536,12 +537,12 @@ msgstr "Томъёг ашиглан тооцоолох: Нэхэмжилсэн #. module: account_analytic_analysis #: field:account.analytic.account,hours_qtt_est:0 msgid "Estimation of Hours to Invoice" -msgstr "" +msgstr "Нэхэмжлэх цагийн тооцоолол" #. module: account_analytic_analysis #: field:account.analytic.account,fix_price_invoices:0 msgid "Fixed Price" -msgstr "" +msgstr "Тогтмол үнэ" #. module: account_analytic_analysis #: help:account.analytic.account,last_worked_date:0 @@ -551,23 +552,23 @@ msgstr "Энэ данс дээр хйигдсэн сүүлийн ажлын ог #. module: account_analytic_analysis #: model:ir.model,name:account_analytic_analysis.model_sale_config_settings msgid "sale.config.settings" -msgstr "" +msgstr "sale.config.settings" #. module: account_analytic_analysis #: field:sale.config.settings,group_template_required:0 msgid "Mandatory use of templates." -msgstr "" +msgstr "Үлгэрүүдийн зайлшгүй хэрэглээ" #. module: account_analytic_analysis #: model:ir.actions.act_window,name:account_analytic_analysis.template_of_contract_action #: model:ir.ui.menu,name:account_analytic_analysis.menu_template_of_contract_action msgid "Contract Template" -msgstr "" +msgstr "Гэрээний загвар" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Units Done" -msgstr "" +msgstr "Хийгдсэн Нэгжүүд" #. module: account_analytic_analysis #: help:account.analytic.account,total_cost:0 @@ -581,7 +582,7 @@ msgstr "" #. module: account_analytic_analysis #: field:account.analytic.account,est_total:0 msgid "Total Estimation" -msgstr "" +msgstr "Нийт таамаг тооцоо" #. module: account_analytic_analysis #: field:account.analytic.account,remaining_ca:0 @@ -617,7 +618,7 @@ msgstr "" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Total" -msgstr "" +msgstr "Нийт" #~ msgid "" #~ "Number of hours that can be invoiced plus those that already have been " diff --git a/addons/account_test/i18n/ar.po b/addons/account_test/i18n/ar.po new file mode 100644 index 00000000000..c2d46674b1b --- /dev/null +++ b/addons/account_test/i18n/ar.po @@ -0,0 +1,241 @@ +# Arabic translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-02-18 11:32+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Arabic \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-02-19 04:57+0000\n" +"X-Generator: Launchpad (build 16491)\n" + +#. module: account_test +#: view:accounting.assert.test:0 +msgid "" +"Code should always set a variable named `result` with the result of your " +"test, that can be a list or\n" +"a dictionary. If `result` is an empty list, it means that the test was " +"succesful. Otherwise it will\n" +"try to translate and print what is inside `result`.\n" +"\n" +"If the result of your test is a dictionary, you can set a variable named " +"`column_order` to choose in\n" +"what order you want to print `result`'s content.\n" +"\n" +"Should you need them, you can also use the following variables into your " +"code:\n" +" * cr: cursor to the database\n" +" * uid: ID of the current user\n" +"\n" +"In any ways, the code must be legal python statements with correct " +"indentation (if needed).\n" +"\n" +"Example: \n" +" sql = '''SELECT id, name, ref, date\n" +" FROM account_move_line \n" +" WHERE account_id IN (SELECT id FROM account_account WHERE type " +"= 'view')\n" +" '''\n" +" cr.execute(sql)\n" +" result = cr.dictfetchall()" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,name:account_test.account_test_02 +msgid "Test 2: Opening a fiscal year" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,desc:account_test.account_test_05 +msgid "" +"Check that reconciled invoice for Sales/Purchases has reconciled entries for " +"Payable and Receivable Accounts" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,desc:account_test.account_test_03 +msgid "" +"Check if movement lines are balanced and have the same date and period" +msgstr "" + +#. module: account_test +#: field:accounting.assert.test,name:0 +msgid "Test Name" +msgstr "" + +#. module: account_test +#: report:account.test.assert.print:0 +msgid "Accouting tests on" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,name:account_test.account_test_01 +msgid "Test 1: General balance" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,desc:account_test.account_test_06 +msgid "Check that paid/reconciled invoices are not in 'Open' state" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,desc:account_test.account_test_05_2 +msgid "" +"Check that reconciled account moves, that define Payable and Receivable " +"accounts, are belonging to reconciled invoices" +msgstr "" + +#. module: account_test +#: view:accounting.assert.test:0 +msgid "Tests" +msgstr "" + +#. module: account_test +#: field:accounting.assert.test,desc:0 +msgid "Test Description" +msgstr "" + +#. module: account_test +#: view:accounting.assert.test:0 +msgid "Description" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,desc:account_test.account_test_06_1 +msgid "Check that there's no move for any account with « View » account type" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,name:account_test.account_test_08 +msgid "Test 9 : Accounts and partners on account moves" +msgstr "" + +#. module: account_test +#: model:ir.actions.act_window,name:account_test.action_accounting_assert +#: model:ir.actions.report.xml,name:account_test.account_assert_test_report +#: model:ir.ui.menu,name:account_test.menu_action_license +msgid "Accounting Tests" +msgstr "" + +#. module: account_test +#: code:addons/account_test/report/account_test_report.py:74 +#, python-format +msgid "The test was passed successfully" +msgstr "" + +#. module: account_test +#: field:accounting.assert.test,active:0 +msgid "Active" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,name:account_test.account_test_06 +msgid "Test 6 : Invoices status" +msgstr "" + +#. module: account_test +#: model:ir.model,name:account_test.model_accounting_assert_test +msgid "accounting.assert.test" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,name:account_test.account_test_05 +msgid "" +"Test 5.1 : Payable and Receivable accountant lines of reconciled invoices" +msgstr "" + +#. module: account_test +#: field:accounting.assert.test,code_exec:0 +msgid "Python code" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,desc:account_test.account_test_07 +msgid "" +"Check on bank statement that the Closing Balance = Starting Balance + sum of " +"statement lines" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,name:account_test.account_test_07 +msgid "Test 8 : Closing balance on bank statements" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,name:account_test.account_test_03 +msgid "Test 3: Movement lines" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,name:account_test.account_test_05_2 +msgid "Test 5.2 : Reconcilied invoices and Payable/Receivable accounts" +msgstr "" + +#. module: account_test +#: view:accounting.assert.test:0 +msgid "Expression" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,name:account_test.account_test_04 +msgid "Test 4: Totally reconciled mouvements" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,desc:account_test.account_test_04 +msgid "Check if the totally reconciled movements are balanced" +msgstr "" + +#. module: account_test +#: field:accounting.assert.test,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,desc:account_test.account_test_02 +msgid "" +"Check if the balance of the new opened fiscal year matches with last year's " +"balance" +msgstr "" + +#. module: account_test +#: view:accounting.assert.test:0 +msgid "Python Code" +msgstr "" + +#. module: account_test +#: model:ir.actions.act_window,help:account_test.action_accounting_assert +msgid "" +"

\n" +" Click to create Accounting Test.\n" +"

\n" +" " +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,desc:account_test.account_test_01 +msgid "Check the balance: Debit sum = Credit sum" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,desc:account_test.account_test_08 +msgid "Check that general accounts and partners on account moves are active" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,name:account_test.account_test_06_1 +msgid "Test 7: « View  » account type" +msgstr "" + +#. module: account_test +#: view:accounting.assert.test:0 +msgid "Code Help" +msgstr "" diff --git a/addons/base_action_rule/i18n/cs.po b/addons/base_action_rule/i18n/cs.po new file mode 100644 index 00000000000..2321a9b5d31 --- /dev/null +++ b/addons/base_action_rule/i18n/cs.po @@ -0,0 +1,338 @@ +# Czech translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-02-15 15:11+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Czech \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-02-16 04:57+0000\n" +"X-Generator: Launchpad (build 16491)\n" + +#. module: base_action_rule +#: selection:base.action.rule.lead.test,state:0 +msgid "In Progress" +msgstr "Probíhá" + +#. module: base_action_rule +#: view:base.action.rule:0 +msgid "" +"- In this same \"Search\" view, select the menu \"Save Current Filter\", " +"enter the name (Ex: Create the 01/01/2012) and add the option \"Share with " +"all users\"" +msgstr "" +"- V tomto zobrazení \"Vyhledat\" zvolte nabídku \"Uložit aktuální filtr\", " +"zadejte jméno (Např.: Vytvořeno 01.01.2012) a přidejte volbu \"sdílet se " +"všemi uživateli\"" + +#. module: base_action_rule +#: model:ir.model,name:base_action_rule.model_base_action_rule +msgid "Action Rules" +msgstr "Pravidla akcí" + +#. module: base_action_rule +#: view:base.action.rule:0 +msgid "Select a filter or a timer as condition." +msgstr "Zvolte jako podmínku filtr nebo časovač" + +#. module: base_action_rule +#: field:base.action.rule.lead.test,user_id:0 +msgid "Responsible" +msgstr "Zodpovídá" + +#. module: base_action_rule +#: help:base.action.rule,server_action_ids:0 +msgid "Examples: email reminders, call object service, etc." +msgstr "Například: připomenutí e-mailu, volání služby, apod." + +#. module: base_action_rule +#: field:base.action.rule,act_followers:0 +msgid "Add Followers" +msgstr "Přidejte na vědomí" + +#. module: base_action_rule +#: field:base.action.rule,act_user_id:0 +msgid "Set Responsible" +msgstr "Nastavte odpovědnou osobu" + +#. module: base_action_rule +#: help:base.action.rule,trg_date_range:0 +msgid "" +"Delay after the trigger date.You can put a negative number if you need a " +"delay before thetrigger date, like sending a reminder 15 minutes before a " +"meeting." +msgstr "" +"Zpoždění po datu spuštění. Můžete zadat záporné číslo, pokud potřebujete " +"prodlevu před datem spuštění, jako zaslání připomenutí 15 minut před " +"schůzkou." + +#. module: base_action_rule +#: model:ir.model,name:base_action_rule.model_base_action_rule_lead_test +msgid "base.action.rule.lead.test" +msgstr "base.action.rule.lead.test" + +#. module: base_action_rule +#: selection:base.action.rule.lead.test,state:0 +msgid "Closed" +msgstr "Uzavřeno" + +#. module: base_action_rule +#: selection:base.action.rule.lead.test,state:0 +msgid "New" +msgstr "Nové" + +#. module: base_action_rule +#: field:base.action.rule,trg_date_range:0 +msgid "Delay after trigger date" +msgstr "Po datu spuštění" + +#. module: base_action_rule +#: view:base.action.rule:0 +msgid "Conditions" +msgstr "Podmínky" + +#. module: base_action_rule +#: selection:base.action.rule.lead.test,state:0 +msgid "Pending" +msgstr "Čekající" + +#. module: base_action_rule +#: field:base.action.rule.lead.test,state:0 +msgid "Status" +msgstr "Stav" + +#. module: base_action_rule +#: field:base.action.rule,filter_pre_id:0 +msgid "Before Update Filter" +msgstr "Filtr před aktualizací" + +#. module: base_action_rule +#: view:base.action.rule:0 +msgid "Action Rule" +msgstr "Pravidlo akce" + +#. module: base_action_rule +#: help:base.action.rule,filter_id:0 +msgid "" +"If present, this condition must be satisfied after the update of the record." +msgstr "Existuje-li, musí být tato podmínka po aktualizaci záznamu splněna." + +#. module: base_action_rule +#: view:base.action.rule:0 +msgid "Fields to Change" +msgstr "Pole, která je možno měnit" + +#. module: base_action_rule +#: view:base.action.rule:0 +msgid "The filter must therefore be available in this page." +msgstr "Filtr musí být na této straně k dispozici." + +#. module: base_action_rule +#: field:base.action.rule,filter_id:0 +msgid "After Update Filter" +msgstr "Filtr po aktualizaci" + +#. module: base_action_rule +#: selection:base.action.rule,trg_date_range_type:0 +msgid "Hours" +msgstr "hodin" + +#. module: base_action_rule +#: view:base.action.rule:0 +msgid "To create a new filter:" +msgstr "Nový filtr vytvoříte:" + +#. module: base_action_rule +#: field:base.action.rule,active:0 +#: field:base.action.rule.lead.test,active:0 +msgid "Active" +msgstr "Aktivní" + +#. module: base_action_rule +#: view:base.action.rule:0 +msgid "Delay After Trigger Date" +msgstr "Zpoždění po datu spuštění" + +#. module: base_action_rule +#: view:base.action.rule:0 +msgid "" +"An action rule is checked when you create or modify the \"Related Document " +"Model\". The precondition filter is checked right before the modification " +"while the postcondition filter is checked after the modification. A " +"precondition filter will therefore not work during a creation." +msgstr "" +"Pravidlo akce je ověřováno při vytváření nebo úpravě \"souvisejícího modelu " +"dokumentu\". Platnost filtru s podmínkou před je ověřována před úpravou, " +"zatímco platnost filtru s podmínkou po je kontrolována po úpravě. Filtr s " +"podmínkou před nebude tedy pracovat při vytváření." + +#. module: base_action_rule +#: view:base.action.rule:0 +msgid "Filter Condition" +msgstr "Podmínka filtru" + +#. module: base_action_rule +#: view:base.action.rule:0 +msgid "" +"- Go to your \"Related Document Model\" page and set the filter parameters " +"in the \"Search\" view (Example of filter based on Leads/Opportunities: " +"Creation Date \"is equal to\" 01/01/2012)" +msgstr "" +"- Přejděte na stránku \"Přiřazený model dokumentu\" a nastavte parametry " +"filtru v zobrazení \"Hledat\" (Příklad filtru na základě Zájemci / " +"Příležitosti: Datum vytvoření \"je\" 01.01.2012)" + +#. module: base_action_rule +#: field:base.action.rule,name:0 +msgid "Rule Name" +msgstr "Název pravidla" + +#. module: base_action_rule +#: model:ir.actions.act_window,name:base_action_rule.base_action_rule_act +#: model:ir.ui.menu,name:base_action_rule.menu_base_action_rule_form +msgid "Automated Actions" +msgstr "Automatické akce" + +#. module: base_action_rule +#: help:base.action.rule,sequence:0 +msgid "Gives the sequence order when displaying a list of rules." +msgstr "Udává pořadí příkazů při zobrazení seznamu pravidel." + +#. module: base_action_rule +#: selection:base.action.rule,trg_date_range_type:0 +msgid "Months" +msgstr "měsíců" + +#. module: base_action_rule +#: selection:base.action.rule,trg_date_range_type:0 +msgid "Days" +msgstr "dnů" + +#. module: base_action_rule +#: view:base.action.rule:0 +msgid "Timer" +msgstr "Časovač" + +#. module: base_action_rule +#: field:base.action.rule,trg_date_range_type:0 +msgid "Delay type" +msgstr "Typ zpoždění" + +#. module: base_action_rule +#: view:base.action.rule:0 +msgid "Server actions to run" +msgstr "Akce serveru ke spuštění" + +#. module: base_action_rule +#: help:base.action.rule,active:0 +msgid "When unchecked, the rule is hidden and will not be executed." +msgstr "Pokud neoznačíte, pravidlo nebude vidět neprovede se." + +#. module: base_action_rule +#: selection:base.action.rule.lead.test,state:0 +msgid "Cancelled" +msgstr "Zrušeno" + +#. module: base_action_rule +#: field:base.action.rule,model:0 +msgid "Model" +msgstr "Model" + +#. module: base_action_rule +#: field:base.action.rule,last_run:0 +msgid "Last Run" +msgstr "Naposledy spuštěno" + +#. module: base_action_rule +#: selection:base.action.rule,trg_date_range_type:0 +msgid "Minutes" +msgstr "minut" + +#. module: base_action_rule +#: field:base.action.rule,model_id:0 +msgid "Related Document Model" +msgstr "Související model dokumentu" + +#. module: base_action_rule +#: help:base.action.rule,filter_pre_id:0 +msgid "" +"If present, this condition must be satisfied before the update of the record." +msgstr "Existuje-li, musí být podmínka spolněna po aktualizaci záznamu." + +#. module: base_action_rule +#: field:base.action.rule,sequence:0 +msgid "Sequence" +msgstr "Pořadí" + +#. module: base_action_rule +#: view:base.action.rule:0 +msgid "Actions" +msgstr "Akce" + +#. module: base_action_rule +#: model:ir.actions.act_window,help:base_action_rule.base_action_rule_act +msgid "" +"

\n" +" Click to setup a new automated action rule. \n" +"

\n" +" Use automated actions to automatically trigger actions for\n" +" various screens. Example: a lead created by a specific user " +"may\n" +" be automatically set to a specific sales team, or an\n" +" opportunity which still has status pending after 14 days " +"might\n" +" trigger an automatic reminder email.\n" +"

\n" +" " +msgstr "" +"

\n" +" Klepni pro vytvoření nového automatického pravidla akce. \n" +"

\n" +" Automatické akce používejte pro různé automaticky spouštěné\n" +" akce. Například: a zájemce vytvořený konkrétním uživatelem " +"může\n" +" být automaticky přiřazen do určité obchodní skupiny, nebo\n" +" příležitost, která je 14 dnů ve stavu \"čekající\" může " +"odeslat\n" +" upozorňující e-mail.\n" +"

\n" +" " + +#. module: base_action_rule +#: field:base.action.rule,create_date:0 +msgid "Create Date" +msgstr "Datum vytvoření" + +#. module: base_action_rule +#: field:base.action.rule.lead.test,date_action_last:0 +msgid "Last Action" +msgstr "Poslední akce" + +#. module: base_action_rule +#: field:base.action.rule.lead.test,partner_id:0 +msgid "Partner" +msgstr "Partner" + +#. module: base_action_rule +#: field:base.action.rule,trg_date_id:0 +msgid "Trigger Date" +msgstr "Datum spuštění" + +#. module: base_action_rule +#: view:base.action.rule:0 +#: field:base.action.rule,server_action_ids:0 +msgid "Server Actions" +msgstr "Akce serveru" + +#. module: base_action_rule +#: field:base.action.rule.lead.test,name:0 +msgid "Subject" +msgstr "Předmět" diff --git a/addons/contacts/i18n/hu.po b/addons/contacts/i18n/hu.po index 500d4f50c83..343ecb73bb4 100644 --- a/addons/contacts/i18n/hu.po +++ b/addons/contacts/i18n/hu.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-11-27 23:56+0000\n" -"Last-Translator: Krisztian Eyssen \n" +"PO-Revision-Date: 2013-02-15 16:22+0000\n" +"Last-Translator: krnkris \n" "Language-Team: Hungarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-22 06:07+0000\n" -"X-Generator: Launchpad (build 16378)\n" +"X-Launchpad-Export-Date: 2013-02-16 04:57+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: contacts #: model:ir.actions.act_window,help:contacts.action_contacts @@ -29,6 +29,15 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kattintson új kapcsolat hozzáadásához a címjegyzékhez.\n" +"

\n" +" OpenERP segít az összes tevékenység nyomon követésében ami \n" +" összefüggésben áll a vevőkkel; megbeszélésekkel, üzleti " +"lehetőségek történetével,\n" +" dokumentumokkal stb.\n" +"

\n" +" " #. module: contacts #: model:ir.actions.act_window,name:contacts.action_contacts diff --git a/addons/google_docs/i18n/mn.po b/addons/google_docs/i18n/mn.po new file mode 100644 index 00000000000..8968332fba0 --- /dev/null +++ b/addons/google_docs/i18n/mn.po @@ -0,0 +1,188 @@ +# Mongolian translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-02-19 02:49+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Mongolian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-02-19 04:57+0000\n" +"X-Generator: Launchpad (build 16491)\n" + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:139 +#, python-format +msgid "Key Error!" +msgstr "" + +#. module: google_docs +#: view:google.docs.config:0 +msgid "" +"for a presentation (slide show) document with url like " +"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" +".p`, the ID is `presentation:123456789`" +msgstr "" + +#. module: google_docs +#: view:google.docs.config:0 +msgid "" +"for a text document with url like " +"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " +"`document:123456789`" +msgstr "" + +#. module: google_docs +#: field:google.docs.config,gdocs_resource_id:0 +msgid "Google Resource ID to Use as Template" +msgstr "" + +#. module: google_docs +#: view:google.docs.config:0 +msgid "" +"for a drawing document with url like " +"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " +"`drawings:123456789`" +msgstr "" + +#. module: google_docs +#. openerp-web +#: code:addons/google_docs/static/src/xml/gdocs.xml:6 +#, python-format +msgid "Add Google Doc..." +msgstr "" + +#. module: google_docs +#: view:google.docs.config:0 +msgid "" +"This is the id of the template document, on google side. You can find it " +"thanks to its URL:" +msgstr "" + +#. module: google_docs +#: model:ir.model,name:google_docs.model_google_docs_config +msgid "Google Docs templates config" +msgstr "" + +#. module: google_docs +#. openerp-web +#: code:addons/google_docs/static/src/js/gdocs.js:25 +#, python-format +msgid "" +"The user google credentials are not set yet. Contact your administrator for " +"help." +msgstr "" + +#. module: google_docs +#: view:google.docs.config:0 +msgid "" +"for a spreadsheet document with url like " +"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " +"the ID is `spreadsheet:123456789`" +msgstr "" + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:101 +#, python-format +msgid "" +"Your resource id is not correct. You can find the id in the google docs URL." +msgstr "" + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:125 +#, python-format +msgid "Creating google docs may only be done by one at a time." +msgstr "" + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:56 +#: code:addons/google_docs/google_docs.py:101 +#: code:addons/google_docs/google_docs.py:125 +#, python-format +msgid "Google Docs Error!" +msgstr "" + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:56 +#, python-format +msgid "Check your google configuration in Users/Users/Synchronization tab." +msgstr "" + +#. module: google_docs +#: model:ir.ui.menu,name:google_docs.menu_gdocs_config +msgid "Google Docs configuration" +msgstr "" + +#. module: google_docs +#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config +#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config +msgid "Models configuration" +msgstr "Моделийн тохиргоо" + +#. module: google_docs +#: field:google.docs.config,model_id:0 +msgid "Model" +msgstr "Модел" + +#. module: google_docs +#. openerp-web +#: code:addons/google_docs/static/src/js/gdocs.js:28 +#, python-format +msgid "User Google credentials are not yet set." +msgstr "" + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:139 +#, python-format +msgid "Your Google Doc Name Pattern's key does not found in object." +msgstr "" + +#. module: google_docs +#: help:google.docs.config,name_template:0 +msgid "" +"Choose how the new google docs will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_docs +#: view:google.docs.config:0 +msgid "Google Docs Configuration" +msgstr "" + +#. module: google_docs +#: help:google.docs.config,gdocs_resource_id:0 +msgid "" +"\n" +"This is the id of the template document, on google side. You can find it " +"thanks to its URL: \n" +"*for a text document with url like " +"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " +"`document:123456789`\n" +"*for a spreadsheet document with url like " +"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " +"the ID is `spreadsheet:123456789`\n" +"*for a presentation (slide show) document with url like " +"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" +".p`, the ID is `presentation:123456789`\n" +"*for a drawing document with url like " +"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " +"`drawings:123456789`\n" +"...\n" +msgstr "" + +#. module: google_docs +#: model:ir.model,name:google_docs.model_ir_attachment +msgid "ir.attachment" +msgstr "" + +#. module: google_docs +#: field:google.docs.config,name_template:0 +msgid "Google Doc Name Pattern" +msgstr "" diff --git a/addons/google_docs/i18n/sv.po b/addons/google_docs/i18n/sv.po new file mode 100644 index 00000000000..6228d0b7ad5 --- /dev/null +++ b/addons/google_docs/i18n/sv.po @@ -0,0 +1,188 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-02-15 14:26+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-02-16 04:57+0000\n" +"X-Generator: Launchpad (build 16491)\n" + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:139 +#, python-format +msgid "Key Error!" +msgstr "Nyckelfel!" + +#. module: google_docs +#: view:google.docs.config:0 +msgid "" +"for a presentation (slide show) document with url like " +"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" +".p`, the ID is `presentation:123456789`" +msgstr "" + +#. module: google_docs +#: view:google.docs.config:0 +msgid "" +"for a text document with url like " +"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " +"`document:123456789`" +msgstr "" + +#. module: google_docs +#: field:google.docs.config,gdocs_resource_id:0 +msgid "Google Resource ID to Use as Template" +msgstr "" + +#. module: google_docs +#: view:google.docs.config:0 +msgid "" +"for a drawing document with url like " +"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " +"`drawings:123456789`" +msgstr "" + +#. module: google_docs +#. openerp-web +#: code:addons/google_docs/static/src/xml/gdocs.xml:6 +#, python-format +msgid "Add Google Doc..." +msgstr "Lägg till Google-dokument..." + +#. module: google_docs +#: view:google.docs.config:0 +msgid "" +"This is the id of the template document, on google side. You can find it " +"thanks to its URL:" +msgstr "" + +#. module: google_docs +#: model:ir.model,name:google_docs.model_google_docs_config +msgid "Google Docs templates config" +msgstr "" + +#. module: google_docs +#. openerp-web +#: code:addons/google_docs/static/src/js/gdocs.js:25 +#, python-format +msgid "" +"The user google credentials are not set yet. Contact your administrator for " +"help." +msgstr "" + +#. module: google_docs +#: view:google.docs.config:0 +msgid "" +"for a spreadsheet document with url like " +"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " +"the ID is `spreadsheet:123456789`" +msgstr "" + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:101 +#, python-format +msgid "" +"Your resource id is not correct. You can find the id in the google docs URL." +msgstr "" + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:125 +#, python-format +msgid "Creating google docs may only be done by one at a time." +msgstr "" + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:56 +#: code:addons/google_docs/google_docs.py:101 +#: code:addons/google_docs/google_docs.py:125 +#, python-format +msgid "Google Docs Error!" +msgstr "" + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:56 +#, python-format +msgid "Check your google configuration in Users/Users/Synchronization tab." +msgstr "" + +#. module: google_docs +#: model:ir.ui.menu,name:google_docs.menu_gdocs_config +msgid "Google Docs configuration" +msgstr "" + +#. module: google_docs +#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config +#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config +msgid "Models configuration" +msgstr "" + +#. module: google_docs +#: field:google.docs.config,model_id:0 +msgid "Model" +msgstr "" + +#. module: google_docs +#. openerp-web +#: code:addons/google_docs/static/src/js/gdocs.js:28 +#, python-format +msgid "User Google credentials are not yet set." +msgstr "" + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:139 +#, python-format +msgid "Your Google Doc Name Pattern's key does not found in object." +msgstr "" + +#. module: google_docs +#: help:google.docs.config,name_template:0 +msgid "" +"Choose how the new google docs will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_docs +#: view:google.docs.config:0 +msgid "Google Docs Configuration" +msgstr "" + +#. module: google_docs +#: help:google.docs.config,gdocs_resource_id:0 +msgid "" +"\n" +"This is the id of the template document, on google side. You can find it " +"thanks to its URL: \n" +"*for a text document with url like " +"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " +"`document:123456789`\n" +"*for a spreadsheet document with url like " +"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " +"the ID is `spreadsheet:123456789`\n" +"*for a presentation (slide show) document with url like " +"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" +".p`, the ID is `presentation:123456789`\n" +"*for a drawing document with url like " +"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " +"`drawings:123456789`\n" +"...\n" +msgstr "" + +#. module: google_docs +#: model:ir.model,name:google_docs.model_ir_attachment +msgid "ir.attachment" +msgstr "" + +#. module: google_docs +#: field:google.docs.config,name_template:0 +msgid "Google Doc Name Pattern" +msgstr "" diff --git a/addons/hr/i18n/hu.po b/addons/hr/i18n/hu.po index 82805ae8b7f..32337b6db0b 100644 --- a/addons/hr/i18n/hu.po +++ b/addons/hr/i18n/hu.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2012-05-10 18:17+0000\n" -"Last-Translator: Krisztian Eyssen \n" +"PO-Revision-Date: 2013-02-15 18:13+0000\n" +"Last-Translator: krnkris \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-22 05:48+0000\n" -"X-Generator: Launchpad (build 16378)\n" +"X-Launchpad-Export-Date: 2013-02-16 04:57+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: hr #: model:process.node,name:hr.process_node_openerpuser0 @@ -24,7 +24,7 @@ msgstr "OpenERP felhasználó" #. module: hr #: field:hr.config.settings,module_hr_timesheet_sheet:0 msgid "Allow timesheets validation by managers" -msgstr "" +msgstr "Engedélyezze az időkimutatások vezetőség általi megerősítését" #. module: hr #: field:hr.job,requirements:0 @@ -58,11 +58,14 @@ msgid "" "128x128px image, with aspect ratio preserved. Use this field in form views " "or some kanban views." msgstr "" +"Közepes méretű fotó az alkalmazottakról. Automatikusan átméretezett mint " +"128x128px kép, az arányok megtartása mellett. Használja ezt a mezőt a forma " +"nézetben és egyes kanban nézetben." #. module: hr #: view:hr.config.settings:0 msgid "Time Tracking" -msgstr "" +msgstr "Idő követés" #. module: hr #: view:hr.employee:0 @@ -78,12 +81,12 @@ msgstr "Saját osztály létrehozása" #. module: hr #: help:hr.job,no_of_employee:0 msgid "Number of employees currently occupying this job position." -msgstr "" +msgstr "Alakalmazottak száma akik jelenleg betöltik ezt az állás pozíciót." #. module: hr #: field:hr.config.settings,module_hr_evaluation:0 msgid "Organize employees periodic evaluation" -msgstr "" +msgstr "Alkalmazottak szervezése időközönkénti értékeléssel" #. module: hr #: view:hr.department:0 @@ -98,7 +101,7 @@ msgstr "Osztály, részleg" #. module: hr #: field:hr.employee,work_email:0 msgid "Work Email" -msgstr "" +msgstr "Munkahelyi e-mail" #. module: hr #: help:hr.employee,image:0 @@ -106,11 +109,13 @@ msgid "" "This field holds the image used as photo for the employee, limited to " "1024x1024px." msgstr "" +"Ez a mező tartalmazza a képet amit az alkalmazottakhoz használ, limitált " +"méret 1024x1024px." #. module: hr #: help:hr.config.settings,module_hr_holidays:0 msgid "This installs the module hr_holidays." -msgstr "" +msgstr "Ez a hr_holidays modult telepíti." #. module: hr #: view:hr.job:0 @@ -125,7 +130,7 @@ msgstr "Toborzás folyamatban" #. module: hr #: field:hr.job,message_unread:0 msgid "Unread Messages" -msgstr "" +msgstr "Olvasatlan üzenetek" #. module: hr #: field:hr.department,company_id:0 @@ -143,33 +148,33 @@ msgstr "Várható felvételek" #. module: hr #: field:res.users,employee_ids:0 msgid "Related employees" -msgstr "" +msgstr "Ide kapcsolódó alkalmazottak" #. module: hr #: constraint:hr.employee.category:0 msgid "Error! You cannot create recursive Categories." -msgstr "" +msgstr "Hiba! Nem tud többszörös kategóriát létrehozni." #. module: hr #: help:hr.config.settings,module_hr_recruitment:0 msgid "This installs the module hr_recruitment." -msgstr "" +msgstr "Ez a hr_recruitment modult telepíti." #. module: hr #: view:hr.employee:0 msgid "Birth" -msgstr "" +msgstr "Született" #. module: hr #: model:ir.actions.act_window,name:hr.open_view_categ_form #: model:ir.ui.menu,name:hr.menu_view_employee_category_form msgid "Employee Tags" -msgstr "" +msgstr "Alkalmazott címke" #. module: hr #: view:hr.job:0 msgid "Launch Recruitement" -msgstr "" +msgstr "Ebéd igénylés" #. module: hr #: model:process.transition,name:hr.process_transition_employeeuser0 @@ -194,22 +199,22 @@ msgstr "Házas" #. module: hr #: field:hr.job,message_ids:0 msgid "Messages" -msgstr "" +msgstr "Üzenetek" #. module: hr #: view:hr.config.settings:0 msgid "Talent Management" -msgstr "" +msgstr "Képesség kezelés" #. module: hr #: help:hr.config.settings,module_hr_timesheet_sheet:0 msgid "This installs the module hr_timesheet_sheet." -msgstr "" +msgstr "Ez a hr_timesheet_sheet modult telepíti." #. module: hr #: view:hr.employee:0 msgid "Mobile:" -msgstr "" +msgstr "Mobil:" #. module: hr #: view:hr.employee:0 @@ -219,12 +224,12 @@ msgstr "Beosztás" #. module: hr #: help:hr.job,message_unread:0 msgid "If checked new messages require your attention." -msgstr "" +msgstr "Ha be van jelölve, akkor figyelje az új üzeneteket." #. module: hr #: field:hr.employee,color:0 msgid "Color Index" -msgstr "" +msgstr "Szín meghatározó" #. module: hr #: model:process.transition,note:hr.process_transition_employeeuser0 @@ -232,11 +237,13 @@ msgid "" "The Related user field on the Employee form allows to link the OpenERP user " "(and her rights) to the employee." msgstr "" +"Az alkalmazott űrlapján ide vonatkozó felhasználó mező lehetővé teszi az " +"OpenERP felhasználó (és jogosultságai) hozzárendelését az alkalmazottakhoz." #. module: hr #: field:hr.employee,image_medium:0 msgid "Medium-sized photo" -msgstr "" +msgstr "Közepes méretű fotó" #. module: hr #: field:hr.employee,identification_id:0 @@ -277,7 +284,7 @@ msgstr "Iroda címe" #. module: hr #: field:hr.job,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "Követők" #. module: hr #: view:hr.employee:0 @@ -298,6 +305,9 @@ msgid "" "image, with aspect ratio preserved. Use this field anywhere a small image is " "required." msgstr "" +"Kis méretű fotó az alkalmazottról. Automatikusan átméretezve 64x64px képre, " +"az arányok megtartás mellett. Használja ezt mezőt bárhol ahol kisméretű " +"képet igényel." #. module: hr #: field:hr.employee,birthday:0 @@ -307,12 +317,12 @@ msgstr "Születési idő" #. module: hr #: help:hr.job,no_of_recruitment:0 msgid "Number of new employees you expect to recruit." -msgstr "" +msgstr "A felvenni kívánt alkalmazottak száma" #. module: hr #: model:ir.actions.client,name:hr.action_client_hr_menu msgid "Open HR Menu" -msgstr "" +msgstr "Munkaügy HR menü megnyitása" #. module: hr #: help:hr.job,message_summary:0 @@ -320,6 +330,8 @@ msgid "" "Holds the Chatter summary (number of messages, ...). This summary is " "directly in html format in order to be inserted in kanban views." msgstr "" +"A chettelés összegzést megállítja (üzenetek száma,...). Ez az összegzés " +"direkt HTML formátumú ahhoz hogy beilleszthető legyen a kanban nézetekbe." #. module: hr #: help:hr.config.settings,module_account_analytic_analysis:0 @@ -327,6 +339,8 @@ msgid "" "This installs the module account_analytic_analysis, which will install sales " "management too." msgstr "" +"Ez az account_analytic_analysis modult telepíti, amely az értékesítés " +"kezelést is magában foglalja." #. module: hr #: view:board.board:0 @@ -343,7 +357,7 @@ msgstr "Munka" #. module: hr #: field:hr.job,no_of_employee:0 msgid "Current Number of Employees" -msgstr "" +msgstr "Jelenlegi alkalmazottak száma" #. module: hr #: field:hr.department,member_ids:0 diff --git a/addons/knowledge/i18n/mn.po b/addons/knowledge/i18n/mn.po index 8f06a0378d0..223fbbd71cc 100644 --- a/addons/knowledge/i18n/mn.po +++ b/addons/knowledge/i18n/mn.po @@ -8,24 +8,24 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-12-19 23:48+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2013-02-15 10:59+0000\n" +"Last-Translator: erdenebold \n" "Language-Team: Mongolian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-22 05:59+0000\n" -"X-Generator: Launchpad (build 16378)\n" +"X-Launchpad-Export-Date: 2013-02-16 04:57+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: knowledge #: view:knowledge.config.settings:0 msgid "Documents" -msgstr "" +msgstr "Баримтууд" #. module: knowledge #: model:ir.model,name:knowledge.model_knowledge_config_settings msgid "knowledge.config.settings" -msgstr "" +msgstr "knowledge.config.settings" #. module: knowledge #: help:knowledge.config.settings,module_document_webdav:0 @@ -33,11 +33,13 @@ msgid "" "Access your documents in OpenERP through WebDAV.\n" " This installs the module document_webdav." msgstr "" +"OpenERP бичиг баримтууд руу WebDAV-р хандана.\n" +" Энэ нь document_webdav модулийг суулгана." #. module: knowledge #: help:knowledge.config.settings,module_document_page:0 msgid "This installs the module document_page." -msgstr "" +msgstr "Энэ нь мdocument_page модулийг суулгана." #. module: knowledge #: model:ir.ui.menu,name:knowledge.menu_document2 @@ -48,12 +50,12 @@ msgstr "Хамтарсан агуулга" #: model:ir.actions.act_window,name:knowledge.action_knowledge_configuration #: view:knowledge.config.settings:0 msgid "Configure Knowledge" -msgstr "" +msgstr "Баримтын Тохиргоо" #. module: knowledge #: view:knowledge.config.settings:0 msgid "Knowledge and Documents Management" -msgstr "" +msgstr "Бичиг Баримт, Мэдлэгийн менежмент" #. module: knowledge #: help:knowledge.config.settings,module_document:0 @@ -67,7 +69,7 @@ msgstr "" #. module: knowledge #: field:knowledge.config.settings,module_document_page:0 msgid "Create static web pages" -msgstr "" +msgstr "Статик веб хуудас үүсгэх." #. module: knowledge #: field:knowledge.config.settings,module_document_ftp:0 @@ -77,17 +79,17 @@ msgstr "" #. module: knowledge #: field:knowledge.config.settings,module_document:0 msgid "Manage documents" -msgstr "" +msgstr "Бичиг баримтуудыг менежмент хийх" #. module: knowledge #: view:knowledge.config.settings:0 msgid "Cancel" -msgstr "" +msgstr "Цуцлах" #. module: knowledge #: view:knowledge.config.settings:0 msgid "Apply" -msgstr "" +msgstr "Ашиглах" #. module: knowledge #: model:ir.ui.menu,name:knowledge.menu_document_configuration @@ -100,11 +102,13 @@ msgid "" "Access your documents in OpenERP through an FTP interface.\n" " This installs the module document_ftp." msgstr "" +"OpenERP бичиг баримтууд руу FTP интерфейсээр хандана.\n" +"Энэ нь document_ftp модулийг суулгана." #. module: knowledge #: view:knowledge.config.settings:0 msgid "or" -msgstr "" +msgstr "эсвэл" #. module: knowledge #: field:knowledge.config.settings,module_document_webdav:0 diff --git a/addons/marketing/i18n/hu.po b/addons/marketing/i18n/hu.po index cc8760c35a6..d30ea159220 100644 --- a/addons/marketing/i18n/hu.po +++ b/addons/marketing/i18n/hu.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-02-14 16:51+0000\n" +"PO-Revision-Date: 2013-02-15 16:10+0000\n" "Last-Translator: krnkris \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-02-15 04:38+0000\n" +"X-Launchpad-Export-Date: 2013-02-16 04:57+0000\n" "X-Generator: Launchpad (build 16491)\n" #. module: marketing @@ -28,6 +28,9 @@ msgid "" "Campaigns.\n" " This installs the module marketing_campaign_crm_demo." msgstr "" +"Demó adatok telepítése mint érdeklődések, kampányok és szakaszok a Marketing " +"kampányokhoz.\n" +" Ez a marketing_campaign_crm_demo modult telepíti.." #. module: marketing #: model:ir.actions.act_window,name:marketing.action_marketing_configuration @@ -94,6 +97,10 @@ msgid "" "CRM leads.\n" " This installs the module marketing_campaign." msgstr "" +"Marketing kampányokon keresztüli érdeklődés automatizálást biztosít.\n" +" Kampányt meg lehet határozni valójában bármely forrásból, " +"nem csak a CMR érdeklődésekből.\n" +" Ez a marketing_campaign modult telepíti." #. module: marketing #: help:marketing.config.settings,module_crm_profiling:0 diff --git a/addons/marketing_campaign/i18n/hu.po b/addons/marketing_campaign/i18n/hu.po index 460d35dd20e..7ccfe78d3ee 100644 --- a/addons/marketing_campaign/i18n/hu.po +++ b/addons/marketing_campaign/i18n/hu.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-02-04 14:42+0000\n" -"Last-Translator: Krisztian Eyssen \n" +"PO-Revision-Date: 2013-02-15 12:34+0000\n" +"Last-Translator: krnkris \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-22 06:01+0000\n" -"X-Generator: Launchpad (build 16378)\n" +"X-Launchpad-Export-Date: 2013-02-16 04:57+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: marketing_campaign #: view:marketing.campaign:0 @@ -31,16 +31,18 @@ msgstr "Előző tevékenység" #, python-format msgid "The current step for this item has no email or report to preview." msgstr "" +"Ennek a tételnek az aktuális lépéséhez nincs előnézeti e-mail vagy jelentés." #. module: marketing_campaign #: constraint:marketing.campaign.transition:0 msgid "The To/From Activity of transition must be of the same Campaign " msgstr "" +"A tól/hoz átvezetési tevékenységnek ugyanahhoz a kampányhoz kell tartoznia. " #. module: marketing_campaign #: selection:marketing.campaign.transition,trigger:0 msgid "Time" -msgstr "" +msgstr "Idő" #. module: marketing_campaign #: selection:marketing.campaign.activity,type:0 @@ -62,16 +64,19 @@ msgid "" "reached this point has generated a certain revenue. You can get revenue " "statistics in the Reporting section" msgstr "" +"Állítson be elvárt jövedelmet, ha figyelembe akarja venni amikor az egyes " +"kampány termékek elérik ezt a szintet akkor azok bevételt generálnak. El " +"tudja érni a bevétel statisztikát a Jelentések részen." #. module: marketing_campaign #: field:marketing.campaign.transition,trigger:0 msgid "Trigger" -msgstr "" +msgstr "Indítás" #. module: marketing_campaign #: view:marketing.campaign:0 msgid "Follow-Up" -msgstr "" +msgstr "Fizetési emlékeztető" #. module: marketing_campaign #: field:campaign.analysis,count:0 @@ -89,7 +94,7 @@ msgstr "Kampányszerkesztő" #: view:marketing.campaign.segment:0 #: selection:marketing.campaign.segment,state:0 msgid "Running" -msgstr "" +msgstr "Folyamatban lévő" #. module: marketing_campaign #: model:email.template,body_html:marketing_campaign.email_template_3 @@ -97,6 +102,7 @@ msgid "" "Hi, we are delighted to let you know that you have entered the select circle " "of our Gold Partners" msgstr "" +"Helló, mi örömmel tudatjuk, hogy bekerül az arany kiválasztott tagok körébe" #. module: marketing_campaign #: selection:campaign.analysis,month:0 @@ -112,6 +118,7 @@ msgstr "Tárgy" #: view:marketing.campaign.segment:0 msgid "Sync mode: only records created after last sync" msgstr "" +"Szinkronizációs mód: csak a legutóbbi szinkronizlás után létrehozott rekordok" #. module: marketing_campaign #: help:marketing.campaign.activity,condition:0 @@ -125,6 +132,15 @@ msgid "" " - transitions: list of campaign transitions outgoing from this activity\n" "...- re: Python regular expression module" msgstr "" +"Python kifejezés annak eldöntésére, hogy a tevékenység végrehajtható, egyéb " +"esetben törölve vagy visszavonva lesz. A kifejezés a használhatja a " +"következő [böngészhető] változókat:\n" +" - tevékenység: a vállalat tevékenysége\n" +" - feladatelemek: a kampány feladatelem\n" +" - forrás: ezt a kampányt képviselő forrás termék\n" +" - átmeneti időszakok: kampány átmeneti időszak listák amik ebből a " +"tevékenységből származnak\n" +"...- re: Python általános kifejező modul" #. module: marketing_campaign #: view:marketing.campaign:0 @@ -145,11 +161,13 @@ msgid "" "The campaign cannot be started. It does not have any starting activity. " "Modify campaign's activities to mark one as the starting point." msgstr "" +"A kampány nem indítható el. Nincs semmilyen elindítható tevékenysége. " +"Módosítsa a kampány tevékenységet, legyen egy induló pontja." #. module: marketing_campaign #: help:marketing.campaign.activity,email_template_id:0 msgid "The email to send when this activity is activated" -msgstr "" +msgstr "A küldendő email a tevékenység aktiválása után" #. module: marketing_campaign #: view:marketing.campaign.segment:0 @@ -176,12 +194,12 @@ msgstr "Visszaállítás" #. module: marketing_campaign #: help:marketing.campaign,object_id:0 msgid "Choose the resource on which you want this campaign to be run" -msgstr "" +msgstr "Válasszon forrást amelyen a kampányt futtatni szeretné" #. module: marketing_campaign #: model:ir.actions.client,name:marketing_campaign.action_client_marketing_menu msgid "Open Marketing Menu" -msgstr "" +msgstr "Merketing menü megnyitása" #. module: marketing_campaign #: field:marketing.campaign.segment,sync_last_date:0 @@ -199,6 +217,8 @@ msgid "" "Date on which this segment was synchronized last time (automatically or " "manually)" msgstr "" +"Dátum amelyen a szakasz utoljára szinkronizálva lett (automatikusan vagy " +"kézzel)" #. module: marketing_campaign #: selection:campaign.analysis,state:0 @@ -225,16 +245,25 @@ msgid "" "Normal - the campaign runs normally and automatically sends all emails and " "reports (be very careful with this mode, you're live!)" msgstr "" +"Teszt - Ez közvetlenül, automatikusan létrehozza és futtatja az összes " +"tevékenységet (anélkül, hogy az átmenetek késésére várakozna) de nem küld e-" +"maileket és nem készít jelentéseket.\n" +"Valós idejű teszt - Ez közvetlenül létrehozza és futtatja tevékenységeket de " +"nem küld e-maileket és nem készít jelentéseket.\n" +"Kézi visszaigazolással - a kampány normál futása, de a felhasználónak kézzel " +"kell érvényesítenie a feladatelemet.\n" +"Normál - a kampány normál futása és automatikus email küldések és jelentés " +"készítések (legyen nagyon óvatos ezzel a móddal, élőben tesz mindent!)" #. module: marketing_campaign #: help:marketing.campaign.segment,date_run:0 msgid "Initial start date of this segment." -msgstr "" +msgstr "Elsődleges indítási dátuma ennek a szakasznak." #. module: marketing_campaign #: view:res.partner:0 msgid "False" -msgstr "" +msgstr "Hamis" #. module: marketing_campaign #: view:campaign.analysis:0 @@ -251,7 +280,7 @@ msgstr "Kampány" #. module: marketing_campaign #: model:email.template,body_html:marketing_campaign.email_template_1 msgid "Hello, you will receive your welcome pack via email shortly." -msgstr "" +msgstr "Helló, nemsokára emailben megkapja az üdvözlő csomagot." #. module: marketing_campaign #: view:campaign.analysis:0 @@ -266,7 +295,7 @@ msgstr "Szakasz" #: code:addons/marketing_campaign/marketing_campaign.py:214 #, python-format msgid "You cannot duplicate a campaign, Not supported yet." -msgstr "" +msgstr "Nem sokszorozhat kampányt, még nem támogatott." #. module: marketing_campaign #: help:marketing.campaign.activity,type:0 @@ -279,11 +308,20 @@ msgid "" "of the resource record\n" " " msgstr "" +"A művelet típusa melyet elvégez, amikor ehhez a tevékenységhez bevisz egy " +"tételt, úgy mint:\n" +" - Email: email küldése az előre definiált sablonból\n" +" - Jelentés: a erőforrás tételnél meghatározott jelentés nyomtatása és " +"elmentése egy konkrét könyvtárba\n" +" - Egyedi művelet: előre meghatározott művelet végrehajtása, pl.: " +"erőforrás rekord mező módosítása\n" +" " #. module: marketing_campaign #: help:marketing.campaign.segment,date_next_sync:0 msgid "Next time the synchronization job is scheduled to run automatically" msgstr "" +"Következő időpont a munka szinkronizálására amikor az automatikusan futni fog" #. module: marketing_campaign #: selection:marketing.campaign.transition,interval_type:0 @@ -301,7 +339,7 @@ msgstr "Partner" #. module: marketing_campaign #: model:ir.filters,name:marketing_campaign.filter0 msgid "Partners" -msgstr "" +msgstr "Partnerek" #. module: marketing_campaign #: view:campaign.analysis:0 @@ -312,7 +350,7 @@ msgstr "Marketing jelentések" #: selection:marketing.campaign,state:0 #: selection:marketing.campaign.segment,state:0 msgid "New" -msgstr "" +msgstr "Új" #. module: marketing_campaign #: sql_constraint:marketing.campaign.transition:0 @@ -322,7 +360,7 @@ msgstr "Az intervallumnak pozitívnak vagy 0-nak kell lennie" #. module: marketing_campaign #: selection:marketing.campaign.activity,type:0 msgid "Email" -msgstr "" +msgstr "E-mail" #. module: marketing_campaign #: field:marketing.campaign,name:0 @@ -335,7 +373,7 @@ msgstr "Név" #. module: marketing_campaign #: field:marketing.campaign.workitem,res_name:0 msgid "Resource Name" -msgstr "" +msgstr "Erőforrás neve" #. module: marketing_campaign #: field:marketing.campaign.segment,sync_mode:0 @@ -346,7 +384,7 @@ msgstr "Szinkronizálási mód" #: view:marketing.campaign:0 #: view:marketing.campaign.segment:0 msgid "Run" -msgstr "" +msgstr "Futtatás" #. module: marketing_campaign #: view:marketing.campaign.activity:0 @@ -357,12 +395,12 @@ msgstr "Előző tevékenységek" #. module: marketing_campaign #: model:email.template,subject:marketing_campaign.email_template_2 msgid "Congratulations! You are now a Silver Partner!" -msgstr "" +msgstr "Gratulálok! Ön mostmár Ezüst partner!" #. module: marketing_campaign #: help:marketing.campaign.segment,date_done:0 msgid "Date this segment was last closed or cancelled." -msgstr "" +msgstr "Dátum amikor ez a szakasz utoljára le volt zárva vagy visszavonva." #. module: marketing_campaign #: view:marketing.campaign.workitem:0 @@ -417,6 +455,9 @@ msgid "" "reached this point has entailed a certain cost. You can get cost statistics " "in the Reporting section" msgstr "" +"Változó költség beállítása ha úgy dönt, hogy mindegyik kampány tétel amikor " +"eléri ezt a szintet akkor maga után von egy bizonyos költséget. Megkaphatja " +"a költség statisztikát a Jelentés résznél" #. module: marketing_campaign #: selection:marketing.campaign.transition,interval_type:0 @@ -434,6 +475,9 @@ msgid "" "By activating this option, workitems that aren't executed because the " "condition is not met are marked as cancelled instead of being deleted." msgstr "" +"Ennek a lehetőségnek a aktiválásával, feladatelemek melyek a körülmények " +"miatt nem végrehajthatóak azok visszavontak ahelyett, hogy törölte volna " +"azokat." #. module: marketing_campaign #: view:campaign.analysis:0 @@ -444,7 +488,7 @@ msgstr "Kivételek" #: model:ir.actions.act_window,name:marketing_campaign.act_marketing_campaing_followup #: field:res.partner,workitem_ids:0 msgid "Workitems" -msgstr "" +msgstr "Feladatelemek" #. module: marketing_campaign #: field:marketing.campaign,fixed_cost:0 @@ -477,6 +521,23 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kattintson marketing kampány létrehozásához.\n" +"

\n" +" OpenERP marketing kampánya lehetővé teszi a kiállításaihoz\n" +" az automatikus kommunikációt. Szakaszokat tud meghatározni \n" +" (körülmények megadásával) az érdeklődőkhöz és a partnerekhez \n" +" a kampány elvégzéséhez.\n" +"

\n" +" Egy kampánynak több tevékenysége lehet mint: email küldés, " +"levél\n" +" nyomtatás, csoporthoz fűzés, stb. ezek a tevékenységek " +"kapcsolhatóak\n" +" egy sajátos helyzethez; kapcsolati űrlap, 10 nappal az első " +"kapcsolat\n" +" felvételtől, ha az érdeklődés még nincs lezárva, stb.\n" +"

\n" +" " #. module: marketing_campaign #: field:marketing.campaign.transition,interval_nbr:0 @@ -507,6 +568,10 @@ msgid "" "for reporting purposes, via the Campaign Analysis or Campaign Follow-up " "views." msgstr "" +"A létrehozott feladatelemek a rekordhoz tartozó partnerhez lesznek csatlova. " +"Ha a rekord a partnerrel megegyezik akkor a mezőt hagyja üresen. Ez hasznos " +"jelentés céljából, a Kampány analízis elemzéshez vagy a Kampány nyomkövetés " +"nézetben." #. module: marketing_campaign #: view:campaign.analysis:0 @@ -535,6 +600,7 @@ msgstr "Tesztmód" #: selection:marketing.campaign.segment,sync_mode:0 msgid "Only records modified after last sync (no duplicates)" msgstr "" +"Csak az utolsó szinkronizálás óta módosult rekordok (nincs többszörözés)" #. module: marketing_campaign #: model:ir.model,name:marketing_campaign.model_ir_actions_report_xml @@ -549,7 +615,7 @@ msgstr "Kampánystatisztikák" #. module: marketing_campaign #: help:marketing.campaign.activity,server_action_id:0 msgid "The action to perform when this activity is activated" -msgstr "" +msgstr "Az elvégzett művelet miután tevékenység aktiválásra került" #. module: marketing_campaign #: field:marketing.campaign,partner_field_id:0 @@ -574,6 +640,13 @@ msgid "" "records which have the same value for the unique field as other records that " "already entered the campaign." msgstr "" +"Még egy kritérium meghatározásának hozzáadása a szűrőhöz, amikor egy új " +"rekordot választ a kampányba való beillesztéshez \"Nincs többszörözés\" " +"megakadályozva olyan rekord választását melyek már előzőleg be lettek " +"illesztve a kampányba. Ha a kampányban van \"Egyedi mező\" beállítva, " +"\"nincs többszörözés\" akkor is megakadályozza olyan rekord kiválasztását, " +"melynek ugyanaz az értéke az egyedi mezőre mint a másik rekordnak, mely már " +"be lett írva a kampányba." #. module: marketing_campaign #: selection:marketing.campaign,mode:0 @@ -599,7 +672,7 @@ msgstr "Tervezet" #. module: marketing_campaign #: view:marketing.campaign.workitem:0 msgid "Marketing Campaign Activity" -msgstr "" +msgstr "marketing kampány tevékenység" #. module: marketing_campaign #: view:marketing.campaign.workitem:0 @@ -616,7 +689,7 @@ msgstr "Előnézet" #: view:marketing.campaign.workitem:0 #: field:marketing.campaign.workitem,state:0 msgid "Status" -msgstr "" +msgstr "Állapot" #. module: marketing_campaign #: selection:campaign.analysis,month:0 @@ -639,6 +712,9 @@ msgid "" "An activity with a signal can be called programmatically. Be careful, the " "workitem is always created when a signal is sent" msgstr "" +"Egy tevékenység jeladóval ellátva úgy is nevezhető mint programozott " +"végrehajtó. Vigyázzon, a feladatelem mindig létre lesz hozva, ha a jelet " +"elküldik" #. module: marketing_campaign #: view:campaign.analysis:0 @@ -646,7 +722,7 @@ msgstr "" #: view:marketing.campaign.workitem:0 #: selection:marketing.campaign.workitem,state:0 msgid "To Do" -msgstr "" +msgstr "Teendő" #. module: marketing_campaign #: selection:campaign.analysis,month:0 @@ -656,17 +732,17 @@ msgstr "Június" #. module: marketing_campaign #: model:ir.model,name:marketing_campaign.model_email_template msgid "Email Templates" -msgstr "" +msgstr "E-mail sablonok" #. module: marketing_campaign #: view:marketing.campaign.segment:0 msgid "Sync mode: all records" -msgstr "" +msgstr "Szinkronizációs mód: minden rekord" #. module: marketing_campaign #: selection:marketing.campaign.segment,sync_mode:0 msgid "All records (no duplicates)" -msgstr "" +msgstr "Minden rekord (nincs sokszorozás)" #. module: marketing_campaign #: view:marketing.campaign.segment:0 @@ -696,7 +772,7 @@ msgstr "Jelentés generálódik, amikor ez a tevékenység aktiválódott" #. module: marketing_campaign #: field:marketing.campaign,unique_field_id:0 msgid "Unique Field" -msgstr "" +msgstr "Egyedi mező" #. module: marketing_campaign #: selection:campaign.analysis,state:0 @@ -729,7 +805,7 @@ msgstr "Kivitelezés dátuma" #. module: marketing_campaign #: model:ir.model,name:marketing_campaign.model_marketing_campaign_workitem msgid "Campaign Workitem" -msgstr "" +msgstr "Kampány feladatelem" #. module: marketing_campaign #: model:ir.model,name:marketing_campaign.model_marketing_campaign_activity @@ -739,7 +815,7 @@ msgstr "Kampánytevékenység" #. module: marketing_campaign #: help:marketing.campaign.activity,report_directory_id:0 msgid "This folder is used to store the generated reports" -msgstr "" +msgstr "Ez a könyvtár a létrehozott jelentések tárolására szolgál" #. module: marketing_campaign #: code:addons/marketing_campaign/marketing_campaign.py:136 @@ -781,12 +857,12 @@ msgstr "Folyamat" #: selection:marketing.campaign.transition,trigger:0 #, python-format msgid "Cosmetic" -msgstr "" +msgstr "Kozmetika" #. module: marketing_campaign #: help:marketing.campaign.transition,trigger:0 msgid "How is the destination workitem triggered" -msgstr "" +msgstr "Ahogy a végső feladatelem kapcsolva lesz" #. module: marketing_campaign #: view:campaign.analysis:0 @@ -809,7 +885,7 @@ msgstr "Nem támogatott művelet" #: view:marketing.campaign.segment:0 #: view:marketing.campaign.workitem:0 msgid "Cancel" -msgstr "" +msgstr "Visszavonás" #. module: marketing_campaign #: view:marketing.campaign.segment:0 @@ -820,6 +896,7 @@ msgstr "Zárás" #: constraint:marketing.campaign.segment:0 msgid "Model of filter must be same as resource model of Campaign " msgstr "" +"A szűrő modelljének ugyanannak kell lennie mint a kampány erőforrás modellje " #. module: marketing_campaign #: view:marketing.campaign.segment:0 @@ -835,12 +912,12 @@ msgstr "Erőforrás ID" #. module: marketing_campaign #: model:ir.model,name:marketing_campaign.model_marketing_campaign_transition msgid "Campaign Transition" -msgstr "" +msgstr "Kampány átmenet" #. module: marketing_campaign #: view:marketing.campaign.segment:0 msgid "Marketing Campaign Segment" -msgstr "" +msgstr "Marketing kampány szakasz" #. module: marketing_campaign #: model:ir.actions.act_window,name:marketing_campaign.act_marketing_campaing_segment_opened @@ -854,7 +931,7 @@ msgstr "Szegmensek" #. module: marketing_campaign #: field:marketing.campaign.activity,keep_if_condition_not_met:0 msgid "Don't Delete Workitems" -msgstr "" +msgstr "Ne törölje a feladatelemeket" #. module: marketing_campaign #: view:marketing.campaign.activity:0 @@ -876,7 +953,7 @@ msgstr "Tevékenységek" #. module: marketing_campaign #: selection:marketing.campaign,mode:0 msgid "With Manual Confirmation" -msgstr "" +msgstr "Kézi visszaigazolással" #. module: marketing_campaign #: selection:campaign.analysis,month:0 @@ -891,7 +968,7 @@ msgstr "Típus" #. module: marketing_campaign #: model:email.template,subject:marketing_campaign.email_template_3 msgid "Congratulations! You are now one of our Gold Partners!" -msgstr "" +msgstr "Gratulálunk! Most már Ön is egy Arany tagsággal rendelkezik!" #. module: marketing_campaign #: help:marketing.campaign,unique_field_id:0 @@ -910,7 +987,7 @@ msgstr "" #: code:addons/marketing_campaign/marketing_campaign.py:529 #, python-format msgid "After %(interval_nbr)d %(interval_type)s" -msgstr "" +msgstr "Után %(interval_nbr)d %(interval_type)s" #. module: marketing_campaign #: model:ir.model,name:marketing_campaign.model_marketing_campaign @@ -937,7 +1014,7 @@ msgstr "Február" #: view:marketing.campaign.workitem:0 #: field:marketing.campaign.workitem,object_id:0 msgid "Resource" -msgstr "" +msgstr "Erőforrás" #. module: marketing_campaign #: help:marketing.campaign,fixed_cost:0 @@ -946,11 +1023,15 @@ msgid "" "revenue on each campaign activity. Cost and Revenue statistics are included " "in Campaign Reporting." msgstr "" +"fix költség a kampány futtatásához. Lehetősége van megadni változó költséget " +"is és bevételt mindegyik kampány tevékenységhez. Költség és bevétel " +"statisztikák a Kampány jelentéseknél." #. module: marketing_campaign #: view:marketing.campaign.segment:0 msgid "Sync mode: only records updated after last sync" msgstr "" +"Szinkronizálási mód: csak az utolsó szinkronizálás óta frissített rekordok" #. module: marketing_campaign #: code:addons/marketing_campaign/marketing_campaign.py:793 @@ -961,12 +1042,12 @@ msgstr "E-mail előnézet" #. module: marketing_campaign #: field:marketing.campaign.activity,signal:0 msgid "Signal" -msgstr "" +msgstr "Jel" #. module: marketing_campaign #: help:marketing.campaign.workitem,date:0 msgid "If date is not set, this workitem has to be run manually" -msgstr "" +msgstr "Ha nincs beállítva a dátum, ezt a feladatelemet kézzel kell futtatni" #. module: marketing_campaign #: selection:campaign.analysis,month:0 @@ -978,6 +1059,7 @@ msgstr "Április" #, python-format msgid "The campaign cannot be marked as done before all segments are closed." msgstr "" +"Minden szakasz lezárása előtt a kampányt nem lehet elvégzettnek jelölni." #. module: marketing_campaign #: view:marketing.campaign:0 @@ -1006,7 +1088,7 @@ msgstr "" #: code:addons/marketing_campaign/marketing_campaign.py:136 #, python-format msgid "The campaign cannot be started. There are no activities in it." -msgstr "" +msgstr "a kampány nem indítható el. Nincs tevékenység benne." #. module: marketing_campaign #: field:marketing.campaign.segment,date_next_sync:0 @@ -1017,7 +1099,7 @@ msgstr "Következő szinkronizáció" #: model:email.template,body_html:marketing_campaign.email_template_2 msgid "" "Hi, we are delighted to welcome you among our Silver Partners as of today!" -msgstr "" +msgstr "Helló, örömmel köszöntjük az Ezüst Partnereink között a mai naptól!" #. module: marketing_campaign #: field:marketing.campaign.segment,ir_filter_id:0 @@ -1032,7 +1114,7 @@ msgstr "Összes" #. module: marketing_campaign #: selection:marketing.campaign.segment,sync_mode:0 msgid "Only records created after last sync" -msgstr "" +msgstr "Csak az utolsó szinkronizáció után létrehozott rekordok" #. module: marketing_campaign #: field:marketing.campaign.activity,variable_cost:0 @@ -1042,7 +1124,7 @@ msgstr "Változó költség" #. module: marketing_campaign #: model:email.template,subject:marketing_campaign.email_template_1 msgid "Welcome to the OpenERP Partner Channel!" -msgstr "" +msgstr "Köszöntjük az OpenERP Partnereknél!" #. module: marketing_campaign #: view:campaign.analysis:0 diff --git a/addons/portal_crm/i18n/ro.po b/addons/portal_crm/i18n/ro.po new file mode 100644 index 00000000000..5fa2bfd0036 --- /dev/null +++ b/addons/portal_crm/i18n/ro.po @@ -0,0 +1,568 @@ +# Romanian translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-02-17 16:28+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Romanian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-02-18 04:49+0000\n" +"X-Generator: Launchpad (build 16491)\n" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,type:0 +msgid "Lead" +msgstr "Pista" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,title:0 +msgid "Title" +msgstr "Titlu" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,probability:0 +msgid "Success Rate (%)" +msgstr "Rata de succes (%)" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Contact us" +msgstr "Contactati-ne" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_action:0 +msgid "Next Action Date" +msgstr "Data Actiunii Urmatoare" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,fax:0 +msgid "Fax" +msgstr "Fax" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,zip:0 +msgid "Zip" +msgstr "Cod postal" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,message_unread:0 +msgid "Unread Messages" +msgstr "Mesaje Necitite" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,company_id:0 +msgid "Company" +msgstr "Companie" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,day_open:0 +msgid "Days to Open" +msgstr "Zile pana la deschidere" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Thank you for your interest, we'll respond to your request shortly." +msgstr "" +"va multumim pentru interes, vom da raspuns solicitarii dumneavoastra in " +"scurt timp." + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,priority:0 +msgid "Highest" +msgstr "Cel mai ridicat (cea mai ridicata)" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,mobile:0 +msgid "Mobile" +msgstr "Mobil" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,description:0 +msgid "Notes" +msgstr "Note" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,message_ids:0 +msgid "Messages" +msgstr "Mesaje" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,color:0 +msgid "Color Index" +msgstr "Index de Culori" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_latitude:0 +msgid "Geo Latitude" +msgstr "Latitudine Geo" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_name:0 +msgid "Customer Name" +msgstr "Numele clientului" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,state:0 +msgid "Cancelled" +msgstr "Anulat(a)" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "Daca este selectat, mesajele noi necesita atentia dumneavoastra." + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,channel_id:0 +msgid "Communication channel (mail, direct, phone, ...)" +msgstr "Canal de comunicare (e-mail, direct, telefon, ...)" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,type_id:0 +msgid "Campaign" +msgstr "Campanie" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,ref:0 +msgid "Reference" +msgstr "Referinta" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_action_next:0 +#: field:portal_crm.crm_contact_us,title_action:0 +msgid "Next Action" +msgstr "Urmatoarea actiune" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,message_summary:0 +msgid "" +"Holds the Chatter summary (number of messages, ...). This summary is " +"directly in html format in order to be inserted in kanban views." +msgstr "" +"Contine rezumatul Chatter (numar de mesaje, ...). Acest rezumat este direct " +"in format HTML, cu scopul de a se introduce in vizualizari kanban." + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_id:0 +msgid "Partner" +msgstr "Partener" + +#. module: portal_crm +#: model:ir.actions.act_window,name:portal_crm.action_contact_us +msgid "Contact Us" +msgstr "Contactati-ne" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,name:0 +msgid "Subject" +msgstr "Subiect" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,opt_out:0 +msgid "Opt-Out" +msgstr "Nu participati" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,priority:0 +msgid "Priority" +msgstr "Prioritate" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,state_id:0 +msgid "State" +msgstr "Stare" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,message_follower_ids:0 +msgid "Followers" +msgstr "Urmari" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,partner_id:0 +msgid "Linked partner (optional). Usually created when converting the lead." +msgstr "" +"Partener asociat (optional). Creat de obicei atunci cand pista este " +"transformata." + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,payment_mode:0 +msgid "Payment Mode" +msgstr "Modalitatea de plata" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,state:0 +msgid "New" +msgstr "Nou(a)" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,type:0 +msgid "Type" +msgstr "Tip" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,email_from:0 +msgid "Email" +msgstr "E-mail" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,channel_id:0 +msgid "Channel" +msgstr "Canal" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Name" +msgstr "Nume" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,priority:0 +msgid "Lowest" +msgstr "Cel mai scazut (cea mai scazuta)" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,create_date:0 +msgid "Creation Date" +msgstr "Data Crearii" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Close" +msgstr "Inchide" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,state:0 +msgid "Pending" +msgstr "In asteptare" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,type:0 +msgid "Type is used to separate Leads and Opportunities" +msgstr "Tip folosit pentru a separa Clientii potentiali si Oportunitatile" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,categ_ids:0 +msgid "Categories" +msgstr "Categorii" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,stage_id:0 +msgid "Stage" +msgstr "Etapa" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,user_login:0 +msgid "User Login" +msgstr "Autentificare Utilizator" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,opt_out:0 +msgid "" +"If opt-out is checked, this contact has refused to receive emails or " +"unsubscribed to a campaign." +msgstr "" +"Daca este bifata optiunea de neparticipare, acest contact a refuzat sa " +"primeasca e-mailuri sau s-a dezabonat de la o campanie." + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,contact_name:0 +msgid "Contact Name" +msgstr "Numele Contactului" + +#. module: portal_crm +#: model:ir.ui.menu,name:portal_crm.portal_company_contact +msgid "Contact" +msgstr "Contact" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_address_email:0 +msgid "Partner Contact Email" +msgstr "E-mail Contact Partener" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,planned_revenue:0 +msgid "Expected Revenue" +msgstr "Venituri Estimate" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,task_ids:0 +msgid "Tasks" +msgstr "Sarcini" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Contact form" +msgstr "Formular de contact" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,company_currency:0 +msgid "Currency" +msgstr "Moneda" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,write_date:0 +msgid "Update Date" +msgstr "Data Actualizarii" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_deadline:0 +msgid "Expected Closing" +msgstr "Inchidere estimata" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,ref2:0 +msgid "Reference 2" +msgstr "Referinta 2" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,user_email:0 +msgid "User Email" +msgstr "E-mail utilizator" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_open:0 +msgid "Opened" +msgstr "Deschis(a)" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,state:0 +msgid "In Progress" +msgstr "In curs de desfasurare" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,partner_name:0 +msgid "" +"The name of the future partner company that will be created while converting " +"the lead into opportunity" +msgstr "" +"Numele viitorului partener al companiei care va fi creat in timpul " +"transformarii pistei in oportunitate" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,planned_cost:0 +msgid "Planned Costs" +msgstr "Costuri planificate" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,date_deadline:0 +msgid "Estimate of the date on which the opportunity will be won." +msgstr "Estimarea datei in care oportunitatea va fi castigata." + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,email_cc:0 +msgid "" +"These email addresses will be added to the CC field of all inbound and " +"outbound emails for this record before being sent. Separate multiple email " +"addresses with a comma" +msgstr "" +"Aceste adrese de email vor fi adaugate in campul CC al tuturor email-urilor " +"primite si trimise pentru aceasta inregistrare inainte de a fi trimise. " +"Despartiti adresele de mail multiple cu o virgula" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,priority:0 +msgid "Low" +msgstr "Scazut(a)" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_closed:0 +#: selection:portal_crm.crm_contact_us,state:0 +msgid "Closed" +msgstr "Inchis(a)" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_assign:0 +msgid "Assignation Date" +msgstr "Data alocarii" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,state:0 +msgid "Status" +msgstr "Status" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,priority:0 +msgid "Normal" +msgstr "Normal" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,email_cc:0 +msgid "Global CC" +msgstr "CC global" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,street2:0 +msgid "Street2" +msgstr "Strada2" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,id:0 +msgid "ID" +msgstr "ID" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,phone:0 +msgid "Phone" +msgstr "Telefon" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,message_is_follower:0 +msgid "Is a Follower" +msgstr "Este o persoana interesata" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,active:0 +msgid "Active" +msgstr "Activ(a)" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,user_id:0 +msgid "Salesperson" +msgstr "Agent de vanzari" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,day_close:0 +msgid "Days to Close" +msgstr "Zile pana la inchidere" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,company_ids:0 +msgid "Companies" +msgstr "Companii" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,message_summary:0 +msgid "Summary" +msgstr "Continut" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,section_id:0 +msgid "" +"When sending mails, the default email address is taken from the sales team." +msgstr "" +"Atunci cand trimiteti email-uri, adresa implicita este luata de la echipa de " +"vanzari." + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_address_name:0 +msgid "Partner Contact Name" +msgstr "Numele de Contact al Partenerului" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_longitude:0 +msgid "Geo Longitude" +msgstr "Geo Longitudine" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,date_assign:0 +msgid "Last date this case was forwarded/assigned to a partner" +msgstr "" +"Ultima data cand acest caz a fost redirectionat/atribuit unui partener" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,email_from:0 +msgid "Email address of the contact" +msgstr "Adresa de email a contactului" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,city:0 +msgid "City" +msgstr "Oras" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Submit" +msgstr "Trimite" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,function:0 +msgid "Function" +msgstr "Functie" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,referred:0 +msgid "Referred By" +msgstr "Recomandat de" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_assigned_id:0 +msgid "Assigned Partner" +msgstr "Partenerul Alocat" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,type:0 +msgid "Opportunity" +msgstr "Oportunitate" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,partner_assigned_id:0 +msgid "Partner this case has been forwarded/assigned to." +msgstr "Partenerul caruia i-a fost redirectionat/atribuit cazul." + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,country_id:0 +msgid "Country" +msgstr "Tara" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Thank you" +msgstr "Va multumim" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,state:0 +msgid "" +"The Status is set to 'Draft', when a case is created. If the case is in " +"progress the Status is set to 'Open'. When the case is over, the Status is " +"set to 'Done'. If the case needs to be reviewed then the Status is set to " +"'Pending'." +msgstr "" +"Starea este setata pe 'Ciorna' atunci cand este creat un caz. Atunci cand " +"cazul este in desfasurare, Starea este setata pe 'Deschis'. Cand cazul este " +"finalizat, Starea este setata pe 'Efectuat'. Cand cazul trebuie revazut, " +"atunci Starea este setata pe 'In asteptare'." + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,message_ids:0 +msgid "Messages and communication history" +msgstr "Istoric mesaje si conversatii" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,type_id:0 +msgid "" +"From which campaign (seminar, marketing campaign, mass mailing, ...) did " +"this contact come from?" +msgstr "" +"Din ce campanie (seminar, campanie de marketing, trimitere de e-mail-uri in " +"masa,...) provine acest contact?" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,priority:0 +msgid "High" +msgstr "Ridicat(a)" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,section_id:0 +msgid "Sales Team" +msgstr "Echipa de vanzari" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,street:0 +msgid "Street" +msgstr "Strada" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_action_last:0 +msgid "Last Action" +msgstr "Ultima Actiune" + +#. module: portal_crm +#: model:ir.model,name:portal_crm.model_portal_crm_crm_contact_us +msgid "Contact form for the portal" +msgstr "Formular de contact pentru portal" diff --git a/addons/portal_sale/i18n/mn.po b/addons/portal_sale/i18n/mn.po new file mode 100644 index 00000000000..7306fd1e385 --- /dev/null +++ b/addons/portal_sale/i18n/mn.po @@ -0,0 +1,344 @@ +# Mongolian translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:06+0000\n" +"PO-Revision-Date: 2013-02-18 08:59+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Mongolian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-02-19 04:57+0000\n" +"X-Generator: Launchpad (build 16491)\n" + +#. module: portal_sale +#: model:ir.model,name:portal_sale.model_account_config_settings +msgid "account.config.settings" +msgstr "" + +#. module: portal_sale +#: model:ir.actions.act_window,help:portal_sale.portal_action_invoices +msgid "We haven't sent you any invoice." +msgstr "" + +#. module: portal_sale +#: model:email.template,report_name:portal_sale.email_template_edi_sale +msgid "" +"${(object.name or '').replace('/','_')}_${object.state == 'draft' and " +"'draft' or ''}" +msgstr "" + +#. module: portal_sale +#: model:res.groups,name:portal_sale.group_payment_options +msgid "View Online Payment Options" +msgstr "" + +#. module: portal_sale +#: field:account.config.settings,group_payment_options:0 +msgid "Show payment buttons to employees too" +msgstr "" + +#. module: portal_sale +#: model:email.template,subject:portal_sale.email_template_edi_sale +msgid "" +"${object.company_id.name} ${object.state in ('draft', 'sent') and " +"'Quotation' or 'Order'} (Ref ${object.name or 'n/a' })" +msgstr "" + +#. module: portal_sale +#: model:ir.actions.act_window,help:portal_sale.action_quotations_portal +msgid "We haven't sent you any quotation." +msgstr "" + +#. module: portal_sale +#: model:ir.ui.menu,name:portal_sale.portal_sales_orders +msgid "Sales Orders" +msgstr "Борлуулалтын захиалгууд" + +#. module: portal_sale +#: model:res.groups,comment:portal_sale.group_payment_options +msgid "" +"Members of this group see the online payment options\n" +"on Sale Orders and Customer Invoices. These options are meant for customers " +"who are accessing\n" +"their documents through the portal." +msgstr "" + +#. module: portal_sale +#: model:email.template,body_html:portal_sale.email_template_edi_sale +msgid "" +"\n" +"
\n" +"\n" +"

Hello ${object.partner_id.name},

\n" +" \n" +"

Here is your ${object.state in ('draft', 'sent') and 'quotation' or " +"'order confirmation'} from ${object.company_id.name}:

\n" +"\n" +"

\n" +"   REFERENCES
\n" +"   Order number: ${object.name}
\n" +"   Order total: ${object.amount_total} " +"${object.pricelist_id.currency_id.name}
\n" +"   Order date: ${object.date_order}
\n" +" % if object.origin:\n" +"   Order reference: ${object.origin}
\n" +" % endif\n" +" % if object.client_order_ref:\n" +"   Your reference: ${object.client_order_ref}
\n" +" % endif\n" +" % if object.user_id:\n" +"   Your contact: ${object.user_id.name}\n" +" % endif\n" +"

\n" +"\n" +" <% set signup_url = object.get_signup_url() %>\n" +" % if signup_url:\n" +"

\n" +" You can access this document and pay online via our Customer Portal:\n" +"

\n" +" View ${object.state in ('draft', 'sent') " +"and 'Quotation' or 'Order'}\n" +" % endif\n" +"\n" +" % if object.paypal_url:\n" +"
\n" +"

It is also possible to directly pay with Paypal:

\n" +" \n" +" \n" +" \n" +" % endif\n" +"\n" +"
\n" +"

If you have any question, do not hesitate to contact us.

\n" +"

Thank you for choosing ${object.company_id.name or 'us'}!

\n" +"
\n" +"
\n" +"
\n" +"

\n" +" ${object.company_id.name}

\n" +"
\n" +"
\n" +" \n" +" % if object.company_id.street:\n" +" ${object.company_id.street}
\n" +" % endif\n" +" % if object.company_id.street2:\n" +" ${object.company_id.street2}
\n" +" % endif\n" +" % if object.company_id.city or object.company_id.zip:\n" +" ${object.company_id.zip} ${object.company_id.city}
\n" +" % endif\n" +" % if object.company_id.country_id:\n" +" ${object.company_id.state_id and ('%s, ' % " +"object.company_id.state_id.name) or ''} ${object.company_id.country_id.name " +"or ''}
\n" +" % endif\n" +"
\n" +" % if object.company_id.phone:\n" +"
\n" +" Phone:  ${object.company_id.phone}\n" +"
\n" +" % endif\n" +" % if object.company_id.website:\n" +"
\n" +" Web : ${object.company_id.website}\n" +"
\n" +" % endif\n" +"

\n" +"
\n" +"
\n" +" " +msgstr "" + +#. module: portal_sale +#: model:email.template,report_name:portal_sale.email_template_edi_invoice +msgid "" +"Invoice_${(object.number or '').replace('/','_')}_${object.state == 'draft' " +"and 'draft' or ''}" +msgstr "" + +#. module: portal_sale +#: model:email.template,subject:portal_sale.email_template_edi_invoice +msgid "${object.company_id.name} Invoice (Ref ${object.number or 'n/a' })" +msgstr "" + +#. module: portal_sale +#: model:ir.model,name:portal_sale.model_mail_mail +msgid "Outgoing Mails" +msgstr "Гарах мэйлүүд" + +#. module: portal_sale +#: model:ir.actions.act_window,name:portal_sale.action_quotations_portal +#: model:ir.ui.menu,name:portal_sale.portal_quotations +msgid "Quotations" +msgstr "Үнэ ханш" + +#. module: portal_sale +#: model:ir.model,name:portal_sale.model_sale_order +msgid "Sales Order" +msgstr "Борлуулалтын захиалга" + +#. module: portal_sale +#: field:account.invoice,portal_payment_options:0 +#: field:sale.order,portal_payment_options:0 +msgid "Portal Payment Options" +msgstr "Портал Төлбөрийг Тохируулга" + +#. module: portal_sale +#: help:account.config.settings,group_payment_options:0 +msgid "" +"Show online payment options on Sale Orders and Customer Invoices to " +"employees. If not checked, these options are only visible to portal users." +msgstr "" + +#. module: portal_sale +#: model:ir.actions.act_window,name:portal_sale.portal_action_invoices +#: model:ir.ui.menu,name:portal_sale.portal_invoices +msgid "Invoices" +msgstr "Нэхэмжлэлүүд" + +#. module: portal_sale +#: view:account.config.settings:0 +msgid "Configure payment acquiring methods" +msgstr "" + +#. module: portal_sale +#: model:email.template,body_html:portal_sale.email_template_edi_invoice +msgid "" +"\n" +"
\n" +"\n" +"

Hello ${object.partner_id.name},

\n" +"\n" +"

A new invoice is available for you:

\n" +" \n" +"

\n" +"   REFERENCES
\n" +"   Invoice number: ${object.number}
\n" +"   Invoice total: ${object.amount_total} " +"${object.currency_id.name}
\n" +"   Invoice date: ${object.date_invoice}
\n" +" % if object.origin:\n" +"   Order reference: ${object.origin}
\n" +" % endif\n" +" % if object.user_id:\n" +"   Your contact: ${object.user_id.name}\n" +" % endif\n" +"

\n" +"\n" +" <% set signup_url = object.get_signup_url() %>\n" +" % if signup_url:\n" +"

\n" +" You can access the invoice document and pay online via our Customer " +"Portal:\n" +"

\n" +" View Invoice\n" +" % endif\n" +" \n" +" % if object.paypal_url:\n" +"
\n" +"

It is also possible to directly pay with Paypal:

\n" +" \n" +" \n" +" \n" +" % endif\n" +" \n" +"
\n" +"

If you have any question, do not hesitate to contact us.

\n" +"

Thank you for choosing ${object.company_id.name or 'us'}!

\n" +"
\n" +"
\n" +"
\n" +"

\n" +" ${object.company_id.name}

\n" +"
\n" +"
\n" +" \n" +" % if object.company_id.street:\n" +" ${object.company_id.street}
\n" +" % endif\n" +" % if object.company_id.street2:\n" +" ${object.company_id.street2}
\n" +" % endif\n" +" % if object.company_id.city or object.company_id.zip:\n" +" ${object.company_id.zip} ${object.company_id.city}
\n" +" % endif\n" +" % if object.company_id.country_id:\n" +" ${object.company_id.state_id and ('%s, ' % " +"object.company_id.state_id.name) or ''} ${object.company_id.country_id.name " +"or ''}
\n" +" % endif\n" +"
\n" +" % if object.company_id.phone:\n" +"
\n" +" Phone:  ${object.company_id.phone}\n" +"
\n" +" % endif\n" +" % if object.company_id.website:\n" +"
\n" +" Web : ${object.company_id.website}\n" +"
\n" +" % endif\n" +"

\n" +"
\n" +"
\n" +" " +msgstr "" + +#. module: portal_sale +#: model:ir.actions.act_window,help:portal_sale.action_orders_portal +msgid "We haven't sent you any sales order." +msgstr "" + +#. module: portal_sale +#: model:ir.model,name:portal_sale.model_account_invoice +msgid "Invoice" +msgstr "Нэхэмжлэл" + +#. module: portal_sale +#: model:ir.actions.act_window,name:portal_sale.action_orders_portal +msgid "Sale Orders" +msgstr "Борлуулалтын захиалга" diff --git a/addons/report_webkit/i18n/mn.po b/addons/report_webkit/i18n/mn.po new file mode 100644 index 00000000000..dc73fc69f20 --- /dev/null +++ b/addons/report_webkit/i18n/mn.po @@ -0,0 +1,517 @@ +# Mongolian translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:06+0000\n" +"PO-Revision-Date: 2013-02-18 09:23+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Mongolian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-02-19 04:57+0000\n" +"X-Generator: Launchpad (build 16491)\n" + +#. module: report_webkit +#: view:ir.actions.report.xml:0 +msgid "Webkit Template (used if Report File is not found)" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "Tabloid 29 279.4 x 431.8 mm" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "Ledger 28 431.8 x 279.4 mm" +msgstr "" + +#. module: report_webkit +#: code:addons/report_webkit/webkit_report.py:233 +#, python-format +msgid "No header defined for this Webkit report!" +msgstr "" + +#. module: report_webkit +#: help:ir.header_img,type:0 +msgid "Image type(png,gif,jpeg)" +msgstr "" + +#. module: report_webkit +#: help:ir.actions.report.xml,precise_mode:0 +msgid "" +"This mode allow more precise element " +" position as each object is printed on a separate HTML. " +" but memory and disk " +"usage is wider" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "Executive 4 7.5 x 10 inches, 190.5 x 254 mm" +msgstr "" + +#. module: report_webkit +#: field:ir.header_img,company_id:0 +#: field:ir.header_webkit,company_id:0 +msgid "Company" +msgstr "Компани" + +#. module: report_webkit +#: code:addons/report_webkit/webkit_report.py:234 +#, python-format +msgid "Please set a header in company settings." +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "DLE 26 110 x 220 mm" +msgstr "DLE 26 110 x 200 mm" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "B7 21 88 x 125 mm" +msgstr "" + +#. module: report_webkit +#: view:res.company:0 +msgid "Headers" +msgstr "Толгой хэсэг" + +#. module: report_webkit +#: help:ir.header_img,name:0 +msgid "Name of Image" +msgstr "" + +#. module: report_webkit +#: model:ir.actions.act_window,name:report_webkit.action_header_webkit +#: model:ir.ui.menu,name:report_webkit.menu_header_webkit +msgid "Webkit Headers/Footers" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "Legal 3 8.5 x 14 inches, 215.9 x 355.6 mm" +msgstr "" + +#. module: report_webkit +#: model:ir.model,name:report_webkit.model_ir_header_webkit +msgid "ir.header_webkit" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "A4 0 210 x 297 mm, 8.26 x 11.69 inches" +msgstr "" + +#. module: report_webkit +#: code:addons/report_webkit/webkit_report.py:176 +#, python-format +msgid "Webkit error" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "B2 17 500 x 707 mm" +msgstr "" + +#. module: report_webkit +#: code:addons/report_webkit/webkit_report.py:260 +#: code:addons/report_webkit/webkit_report.py:271 +#: code:addons/report_webkit/webkit_report.py:280 +#: code:addons/report_webkit/webkit_report.py:293 +#: code:addons/report_webkit/webkit_report.py:304 +#, python-format +msgid "Webkit render!" +msgstr "" + +#. module: report_webkit +#: model:ir.model,name:report_webkit.model_ir_header_img +msgid "ir.header_img" +msgstr "" + +#. module: report_webkit +#: field:ir.actions.report.xml,precise_mode:0 +msgid "Precise Mode" +msgstr "" + +#. module: report_webkit +#: code:addons/report_webkit/webkit_report.py:96 +#, python-format +msgid "" +"Please install executable on your system (sudo apt-get install wkhtmltopdf) " +"or download it from here: " +"http://code.google.com/p/wkhtmltopdf/downloads/list and set the path in the " +"ir.config_parameter with the webkit_path key.Minimal version is 0.9.9" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "A0 5 841 x 1189 mm" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "C5E 24 163 x 229 mm" +msgstr "" + +#. module: report_webkit +#: field:ir.header_img,type:0 +msgid "Type" +msgstr "Төрөл" + +#. module: report_webkit +#: code:addons/report_webkit/wizard/report_webkit_actions.py:133 +#, python-format +msgid "Client Actions Connections" +msgstr "" + +#. module: report_webkit +#: field:res.company,header_image:0 +msgid "Available Images" +msgstr "" + +#. module: report_webkit +#: field:ir.header_webkit,html:0 +msgid "webkit header" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "B1 15 707 x 1000 mm" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "A1 6 594 x 841 mm" +msgstr "" + +#. module: report_webkit +#: help:ir.actions.report.xml,webkit_header:0 +msgid "The header linked to the report" +msgstr "" + +#. module: report_webkit +#: code:addons/report_webkit/webkit_report.py:95 +#, python-format +msgid "Wkhtmltopdf library path is not set" +msgstr "" + +#. module: report_webkit +#: view:ir.actions.report.xml:0 +#: view:res.company:0 +msgid "Webkit" +msgstr "" + +#. module: report_webkit +#: help:ir.header_webkit,format:0 +msgid "Select Proper Paper size" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "B5 1 176 x 250 mm, 6.93 x 9.84 inches" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "A7 11 74 x 105 mm" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "A6 10 105 x 148 mm" +msgstr "" + +#. module: report_webkit +#: help:ir.actions.report.xml,report_webkit_data:0 +msgid "This template will be used if the main report file is not found" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "Folio 27 210 x 330 mm" +msgstr "" + +#. module: report_webkit +#: field:ir.header_webkit,margin_top:0 +msgid "Top Margin (mm)" +msgstr "" + +#. module: report_webkit +#: view:report.webkit.actions:0 +msgid "_Ok" +msgstr "" + +#. module: report_webkit +#: help:report.webkit.actions,print_button:0 +msgid "" +"Check this to add a Print action for this Report in the sidebar of the " +"corresponding document types" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "B3 18 353 x 500 mm" +msgstr "" + +#. module: report_webkit +#: field:ir.actions.report.xml,webkit_header:0 +msgid "Webkit Header" +msgstr "" + +#. module: report_webkit +#: help:ir.actions.report.xml,webkit_debug:0 +msgid "Enable the webkit engine debugger" +msgstr "" + +#. module: report_webkit +#: field:ir.header_img,img:0 +msgid "Image" +msgstr "" + +#. module: report_webkit +#: view:ir.header_img:0 +msgid "Header Image" +msgstr "Толгой зураг" + +#. module: report_webkit +#: field:res.company,header_webkit:0 +msgid "Available html" +msgstr "" + +#. module: report_webkit +#: help:report.webkit.actions,open_action:0 +msgid "" +"Check this to view the newly added internal print action after creating it " +"(technical view) " +msgstr "" + +#. module: report_webkit +#: view:res.company:0 +msgid "Images" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,orientation:0 +msgid "Portrait" +msgstr "" + +#. module: report_webkit +#: view:report.webkit.actions:0 +msgid "or" +msgstr "эсвэл" + +#. module: report_webkit +#: selection:ir.header_webkit,orientation:0 +msgid "Landscape" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "B8 22 62 x 88 mm" +msgstr "" + +#. module: report_webkit +#: code:addons/report_webkit/webkit_report.py:177 +#, python-format +msgid "The command 'wkhtmltopdf' failed with error code = %s. Message: %s" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "A2 7 420 x 594 mm" +msgstr "" + +#. module: report_webkit +#: field:report.webkit.actions,print_button:0 +msgid "Add print button" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "A9 13 37 x 52 mm" +msgstr "" + +#. module: report_webkit +#: model:ir.model,name:report_webkit.model_res_company +msgid "Companies" +msgstr "" + +#. module: report_webkit +#: field:ir.header_webkit,margin_bottom:0 +msgid "Bottom Margin (mm)" +msgstr "" + +#. module: report_webkit +#: model:ir.model,name:report_webkit.model_report_webkit_actions +msgid "Webkit Actions" +msgstr "" + +#. module: report_webkit +#: field:report.webkit.actions,open_action:0 +msgid "Open added action" +msgstr "" + +#. module: report_webkit +#: field:ir.header_webkit,margin_right:0 +msgid "Right Margin (mm)" +msgstr "" + +#. module: report_webkit +#: code:addons/report_webkit/webkit_report.py:228 +#, python-format +msgid "Webkit report template not found!" +msgstr "" + +#. module: report_webkit +#: field:ir.header_webkit,orientation:0 +msgid "Orientation" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "B6 20 125 x 176 mm" +msgstr "" + +#. module: report_webkit +#: help:ir.header_webkit,html:0 +msgid "Set Webkit Report Header" +msgstr "" + +#. module: report_webkit +#: field:ir.header_webkit,format:0 +msgid "Paper size" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid ":B10 16 31 x 44 mm" +msgstr "" + +#. module: report_webkit +#: view:report.webkit.actions:0 +msgid "Cancel" +msgstr "" + +#. module: report_webkit +#: field:ir.header_webkit,css:0 +msgid "Header CSS" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "B4 19 250 x 353 mm" +msgstr "" + +#. module: report_webkit +#: model:ir.actions.act_window,name:report_webkit.action_header_img +#: model:ir.ui.menu,name:report_webkit.menu_header_img +msgid "Webkit Logos" +msgstr "" + +#. module: report_webkit +#: code:addons/report_webkit/webkit_report.py:172 +#, python-format +msgid "No diagnosis message was provided" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "A3 8 297 x 420 mm" +msgstr "" + +#. module: report_webkit +#: field:ir.actions.report.xml,report_webkit_data:0 +msgid "Webkit Template" +msgstr "" + +#. module: report_webkit +#: field:ir.header_webkit,footer_html:0 +msgid "webkit footer" +msgstr "" + +#. module: report_webkit +#: field:ir.actions.report.xml,webkit_debug:0 +msgid "Webkit debug" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "Letter 2 8.5 x 11 inches, 215.9 x 279.4 mm" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "B0 14 1000 x 1414 mm" +msgstr "" + +#. module: report_webkit +#: field:ir.header_img,name:0 +#: field:ir.header_webkit,name:0 +msgid "Name" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "A5 9 148 x 210 mm" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "A8 12 52 x 74 mm" +msgstr "" + +#. module: report_webkit +#: model:ir.actions.act_window,name:report_webkit.wizard_ofdo_report_actions +#: view:report.webkit.actions:0 +msgid "Add Print Buttons" +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "Comm10E 25 105 x 241 mm, U.S. Common 10 Envelope" +msgstr "" + +#. module: report_webkit +#: field:ir.header_webkit,margin_left:0 +msgid "Left Margin (mm)" +msgstr "" + +#. module: report_webkit +#: code:addons/report_webkit/webkit_report.py:228 +#, python-format +msgid "Error!" +msgstr "" + +#. module: report_webkit +#: help:ir.header_webkit,footer_html:0 +msgid "Set Webkit Report Footer." +msgstr "" + +#. module: report_webkit +#: selection:ir.header_webkit,format:0 +msgid "B9 23 33 x 62 mm" +msgstr "" + +#. module: report_webkit +#: model:ir.model,name:report_webkit.model_ir_actions_report_xml +msgid "ir.actions.report.xml" +msgstr "" + +#. module: report_webkit +#: code:addons/report_webkit/webkit_report.py:174 +#, python-format +msgid "The following diagnosis message was provided:\n" +msgstr "" + +#. module: report_webkit +#: view:ir.header_webkit:0 +msgid "HTML Header" +msgstr ""