From d47800d1b66b5ca3eb7ba841e496ae8f99f5d23f Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sat, 2 Jun 2012 18:25:23 +0200 Subject: [PATCH 01/36] ir.attachment move methods bzr revid: al@openerp.com-20120602162523-0zp9bzd6cqu8qgis --- openerp/addons/base/ir/ir_attachment.py | 104 ++++++++++++------------ 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/openerp/addons/base/ir/ir_attachment.py b/openerp/addons/base/ir/ir_attachment.py index 4978378f22a..9f8814430b8 100644 --- a/openerp/addons/base/ir/ir_attachment.py +++ b/openerp/addons/base/ir/ir_attachment.py @@ -26,6 +26,58 @@ from osv.orm import except_orm import tools class ir_attachment(osv.osv): + def _name_get_resname(self, cr, uid, ids, object, method, context): + data = {} + for attachment in self.browse(cr, uid, ids, context=context): + model_object = attachment.res_model + res_id = attachment.res_id + if model_object and res_id: + model_pool = self.pool.get(model_object) + res = model_pool.name_get(cr,uid,[res_id],context) + res_name = res and res[0][1] or False + if res_name: + field = self._columns.get('res_name',False) + if field and len(res_name) > field.size: + res_name = res_name[:field.size-3] + '...' + data[attachment.id] = res_name + else: + data[attachment.id] = False + return data + + _name = 'ir.attachment' + _columns = { + 'name': fields.char('Attachment Name',size=256, required=True), + 'datas': fields.binary('Data'), + 'datas_fname': fields.char('File Name',size=256), + 'description': fields.text('Description'), + 'res_name': fields.function(_name_get_resname, type='char', size=128, + string='Resource Name', store=True), + 'res_model': fields.char('Resource Object',size=64, readonly=True, + help="The database object this attachment will be attached to"), + 'res_id': fields.integer('Resource ID', readonly=True, + help="The record id this is attached to"), + 'url': fields.char('Url', size=512, oldname="link"), + 'type': fields.selection( + [ ('url','URL'), ('binary','Binary'), ], + 'Type', help="Binary File or external URL", required=True, change_default=True), + + 'create_date': fields.datetime('Date Created', readonly=True), + 'create_uid': fields.many2one('res.users', 'Owner', readonly=True), + 'company_id': fields.many2one('res.company', 'Company', change_default=True), + } + + _defaults = { + 'type': 'binary', + 'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'ir.attachment', context=c), + } + + def _auto_init(self, cr, context=None): + super(ir_attachment, self)._auto_init(cr, context) + cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = %s', ('ir_attachment_res_idx',)) + if not cr.fetchone(): + cr.execute('CREATE INDEX ir_attachment_res_idx ON ir_attachment (res_model, res_id)') + cr.commit() + def check(self, cr, uid, ids, mode, context=None, values=None): """Restricts the access to an ir.attachment, according to referred model In the 'document' module, it is overriden to relax this hard rule, since @@ -120,58 +172,6 @@ class ir_attachment(osv.osv): return self.pool.get('ir.actions.act_window').for_xml_id( cr, uid, 'base', 'action_attachment', context=context) - def _name_get_resname(self, cr, uid, ids, object, method, context): - data = {} - for attachment in self.browse(cr, uid, ids, context=context): - model_object = attachment.res_model - res_id = attachment.res_id - if model_object and res_id: - model_pool = self.pool.get(model_object) - res = model_pool.name_get(cr,uid,[res_id],context) - res_name = res and res[0][1] or False - if res_name: - field = self._columns.get('res_name',False) - if field and len(res_name) > field.size: - res_name = res_name[:field.size-3] + '...' - data[attachment.id] = res_name - else: - data[attachment.id] = False - return data - - _name = 'ir.attachment' - _columns = { - 'name': fields.char('Attachment Name',size=256, required=True), - 'datas': fields.binary('Data'), - 'datas_fname': fields.char('File Name',size=256), - 'description': fields.text('Description'), - 'res_name': fields.function(_name_get_resname, type='char', size=128, - string='Resource Name', store=True), - 'res_model': fields.char('Resource Object',size=64, readonly=True, - help="The database object this attachment will be attached to"), - 'res_id': fields.integer('Resource ID', readonly=True, - help="The record id this is attached to"), - 'url': fields.char('Url', size=512, oldname="link"), - 'type': fields.selection( - [ ('url','URL'), ('binary','Binary'), ], - 'Type', help="Binary File or external URL", required=True, change_default=True), - - 'create_date': fields.datetime('Date Created', readonly=True), - 'create_uid': fields.many2one('res.users', 'Owner', readonly=True), - 'company_id': fields.many2one('res.company', 'Company', change_default=True), - } - - _defaults = { - 'type': 'binary', - 'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'ir.attachment', context=c), - } - - def _auto_init(self, cr, context=None): - super(ir_attachment, self)._auto_init(cr, context) - cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = %s', ('ir_attachment_res_idx',)) - if not cr.fetchone(): - cr.execute('CREATE INDEX ir_attachment_res_idx ON ir_attachment (res_model, res_id)') - cr.commit() - ir_attachment() From 30ce97d206a92897df6fe4856fe148b01c587d46 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Thu, 7 Jun 2012 23:35:37 +0200 Subject: [PATCH 02/36] [IMP] ir_attachment external storage bzr revid: al@openerp.com-20120607213537-ajm4dihfkco8wssl --- openerp/addons/base/ir/ir_attachment.py | 117 +++++++++++++++++++++--- 1 file changed, 105 insertions(+), 12 deletions(-) diff --git a/openerp/addons/base/ir/ir_attachment.py b/openerp/addons/base/ir/ir_attachment.py index 9f8814430b8..dc3ea5faf87 100644 --- a/openerp/addons/base/ir/ir_attachment.py +++ b/openerp/addons/base/ir/ir_attachment.py @@ -26,6 +26,19 @@ from osv.orm import except_orm import tools class ir_attachment(osv.osv): + """Attachments are used to link binary files or url to any openerp document. + + External attachment storage + --------------------------- + + The 'data' function field (_data_get,data_set) is implemented using + _file_read, _file_write and _file_delete which can be overridden to + implement other storage engines, shuch methods should check for other + location pseudo uri (example: hdfs://hadoppserver) + + The default implementation is the file:dirname location that stores files + on the local filesystem using name based on their sha1 hash + """ def _name_get_resname(self, cr, uid, ids, object, method, context): data = {} for attachment in self.browse(cr, uid, ids, context=context): @@ -44,26 +57,106 @@ class ir_attachment(osv.osv): data[attachment.id] = False return data + # 'data' field implementation + def _full_path(self, cr, uid, location, path) + # location = 'file:filestore' + assert location.startswith('file:'), "Unhandled filestore location %s" % location + location = location[5:] + + # sanitize location name and path + location = re.sub('[.]','',location) + location = path.strip('/\\') + + path = re.sub('[.]','',path) + path = path.strip('/\\') + return os.path.join(tools.config['root_path'], location, cr.dbname, path) + + def _file_read(self, cr, uid, location, fname, bin_size=False) + full_path = self._full_path(cr, uid, location, fname) + r = '' + try: + if bin_size: + r = os.path.filesize(full_path) + else: + r = open(full_path).read().encode('base64') + except IOError: + _logger.error("_read_file reading %s",full_path) + return r + + def _file_write(self, cr, uid, location, value): + bin_value = value.decode('base64') + fname = hashlib.sha1(bin_value).hexdigest() + # scatter files across 1024 dirs + # we use '/' in the db (even on windows) + fname = fname[:3] + '/' + fname + full_path = self._full_path(cr, uid, location, fname) + try: + dirname = os.path.dirname(full_path) + if not os.path.isdir(dirname): + os.makedirs(dirname) + open(full_path,'wb').write(bin_value) + except IOError: + _logger.error("_file_write writing %s",full_path) + return fname + + def _file_delete(self, cr, uid, location, fname, threshold=1): + count = self.search(cr, 1, [('store_fname','=',fname)], count=True) + if count <= threshold: + full_path = self._full_path(cr, uid, location, fname) + try: + os.unlink(full_path) + except IOError: + _logger.error("_file_delete could not unlink %s",full_path) + + def _data_get(self, cr, uid, ids, name, arg, context=None): + if context is None: + context = {} + result = {} + location = self.pool.get('ir.config_parameter').get_param('ir_attachment.location') + bin_size = context.get('bin_size', False) + for i in self.browse(cr, uid, ids, context=context): + if location and i.store_fname: + result[i.id] = self._file_read(cr, uid, location, i.store_fname, bin_size) + else: + result[i.id] = i.db_datas + return result + + def _data_set(self, cr, uid, id, name, value, arg, context=None): + if not value: + return True + if context is None: + context = {} + result = {} + location = self.pool.get('ir.config_parameter').get_param('ir_attachment.location') + bin_size = context.get('bin_size', False) + if path: + i = self.browse(cr, uid, id, context=context) + if i.store_fname: + self._file_delete(cr, uid, location, i.store_fname) + fname = self._file_write(cr, uid, location, value) + self.write(cr, uid, [id], {'store_fname': fname}, context=context) + else: + self.write(cr, uid, [id], {'db_datas': value}, context=context) + return True + _name = 'ir.attachment' _columns = { 'name': fields.char('Attachment Name',size=256, required=True), - 'datas': fields.binary('Data'), 'datas_fname': fields.char('File Name',size=256), 'description': fields.text('Description'), - 'res_name': fields.function(_name_get_resname, type='char', size=128, - string='Resource Name', store=True), - 'res_model': fields.char('Resource Object',size=64, readonly=True, - help="The database object this attachment will be attached to"), - 'res_id': fields.integer('Resource ID', readonly=True, - help="The record id this is attached to"), - 'url': fields.char('Url', size=512, oldname="link"), - 'type': fields.selection( - [ ('url','URL'), ('binary','Binary'), ], - 'Type', help="Binary File or external URL", required=True, change_default=True), - + 'res_name': fields.function(_name_get_resname, type='char', size=128, string='Resource Name', store=True), + 'res_model': fields.char('Resource Model',size=64, readonly=True, help="The database object this attachment will be attached to"), + 'res_id': fields.integer('Resource ID', readonly=True, help="The record id this is attached to"), 'create_date': fields.datetime('Date Created', readonly=True), 'create_uid': fields.many2one('res.users', 'Owner', readonly=True), 'company_id': fields.many2one('res.company', 'Company', change_default=True), + 'type': fields.selection( [ ('url','URL'), ('binary','Binary'), ], + 'Type', help="Binary File or URL", required=True, change_default=True), + 'url': fields.char('Url', size=1024), + # al: For the moment I keepi those shitty field names for backward compatibility with document + 'datas': fields.function(_data_get, fnct_inv=_data_set, string='File Content', type="binary", nodrop=True), + 'store_fname': fields.char('Stored Filename', size=256), + 'db_datas': fields.binary('Database Data'), } _defaults = { From 9c8aa2cb967a0ffd3d468604672e4ee2020fc558 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Fri, 8 Jun 2012 01:28:03 +0200 Subject: [PATCH 03/36] remove unsed cruft bzr revid: al@openerp.com-20120607232803-5263vpe6io9hm5h2 --- addons/document/README.txt | 8 ---- addons/document/__openerp__.py | 4 +- addons/document/board_document_demo.xml | 17 ------- addons/document/custom_report.xml | 6 --- addons/document/custom_view.xml | 14 ------ addons/document/dict_tools.py | 59 ------------------------- addons/document/document_demo.xml | 1 - 7 files changed, 3 insertions(+), 106 deletions(-) delete mode 100644 addons/document/README.txt delete mode 100644 addons/document/board_document_demo.xml delete mode 100644 addons/document/custom_report.xml delete mode 100644 addons/document/custom_view.xml delete mode 100644 addons/document/dict_tools.py diff --git a/addons/document/README.txt b/addons/document/README.txt deleted file mode 100644 index 34887026aeb..00000000000 --- a/addons/document/README.txt +++ /dev/null @@ -1,8 +0,0 @@ -To be done: ------------ - -* Test to not create several times the same file / directory - -> May be put a sql_constraints uniq on several files - -> test through remove or put - -* Retest everything diff --git a/addons/document/__openerp__.py b/addons/document/__openerp__.py index d8e42703efc..f518dac9903 100644 --- a/addons/document/__openerp__.py +++ b/addons/document/__openerp__.py @@ -55,7 +55,9 @@ ATTENTION: 'report/document_report_view.xml', 'board_document_view.xml', ], - 'demo_xml': [ 'document_demo.xml','board_document_demo.xml'], + 'demo_xml': [ + 'document_demo.xml', + ], 'test': [ 'test/document_test2.yml', ], diff --git a/addons/document/board_document_demo.xml b/addons/document/board_document_demo.xml deleted file mode 100644 index 672fb5cb268..00000000000 --- a/addons/document/board_document_demo.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - diff --git a/addons/document/custom_report.xml b/addons/document/custom_report.xml deleted file mode 100644 index ebfe70e4c50..00000000000 --- a/addons/document/custom_report.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/addons/document/custom_view.xml b/addons/document/custom_view.xml deleted file mode 100644 index 45c4b337d99..00000000000 --- a/addons/document/custom_view.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - grcompta - - - - grcomptaadmin - - - - - - diff --git a/addons/document/dict_tools.py b/addons/document/dict_tools.py deleted file mode 100644 index e117b429f83..00000000000 --- a/addons/document/dict_tools.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- encoding: utf-8 -*- -# Copyright P. Christeas 2008-2010 -# Copyright 2010 OpenERP SA. http://www.openerp.com -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public License -# as published by the Free Software Foundation; version 2 of the License. -# -# 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 Lesser General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -############################################################################### - - -def dict_merge(*dicts): - """ Return a dict with all values of dicts - """ - res = {} - for d in dicts: - res.update(d) - return res - -def dict_merge2(*dicts): - """ Return a dict with all values of dicts. - If some key appears twice and contains iterable objects, the values - are merged (instead of overwritten). - """ - res = {} - for d in dicts: - for k in d.keys(): - if k in res and isinstance(res[k], (list, tuple)): - res[k] = res[k] + d[k] - elif k in res and isinstance(res[k], dict): - res[k].update(d[k]) - else: - res[k] = d[k] - return res - -def dict_filter(srcdic, keys, res=None): - ''' Return a copy of srcdic that has only keys set. - If any of keys are missing from srcdic, the result won't have them, - either. - @param res If given, result will be updated there, instead of a new dict. - ''' - if res is None: - res = {} - for k in keys: - if k in srcdic: - res[k] = srcdic[k] - return res - -#eof - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/document_demo.xml b/addons/document/document_demo.xml index b94048ec13c..fda125afb95 100644 --- a/addons/document/document_demo.xml +++ b/addons/document/document_demo.xml @@ -4,6 +4,5 @@ - From dcb59283db053c47ea508c86f1e450f7b9dcd99e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Najla=C3=A2?= Date: Mon, 22 Oct 2012 14:08:19 +0200 Subject: [PATCH 04/36] [IMP] crm_partner_assign: merge view_res_partner_filter_group_activation and view_res_partner_filter_assign into one view bzr revid: nel@tinyerp.com-20121022120819-gdr5edpaim1qk1r9 --- addons/crm_partner_assign/res_partner_view.xml | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/addons/crm_partner_assign/res_partner_view.xml b/addons/crm_partner_assign/res_partner_view.xml index 3b55c70f4c7..aeafc367792 100644 --- a/addons/crm_partner_assign/res_partner_view.xml +++ b/addons/crm_partner_assign/res_partner_view.xml @@ -88,6 +88,9 @@ res.partner + + + @@ -165,16 +168,6 @@ - - res.partner.geo.inherit.search - res.partner - - - - - - - From 807c949030d8b672e7a3da1ed2819d8886c92710 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sun, 16 Dec 2012 13:25:55 +0100 Subject: [PATCH 05/36] minor fixes bzr revid: al@openerp.com-20121216122555-frwadjd247zidw7o --- openerp/addons/base/ir/ir_attachment.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/openerp/addons/base/ir/ir_attachment.py b/openerp/addons/base/ir/ir_attachment.py index 0a4ec979103..644cec10bf0 100644 --- a/openerp/addons/base/ir/ir_attachment.py +++ b/openerp/addons/base/ir/ir_attachment.py @@ -99,9 +99,9 @@ class ir_attachment(osv.osv): _logger.error("_file_write writing %s",full_path) return fname - def _file_delete(self, cr, uid, location, fname, threshold=1): + def _file_delete(self, cr, uid, location, fname): count = self.search(cr, 1, [('store_fname','=',fname)], count=True) - if count <= threshold: + if count <= 1: full_path = self._full_path(cr, uid, location, fname) try: os.unlink(full_path) @@ -122,14 +122,13 @@ class ir_attachment(osv.osv): return result def _data_set(self, cr, uid, id, name, value, arg, context=None): + # We dont handle setting data to null if not value: return True if context is None: context = {} - result = {} location = self.pool.get('ir.config_parameter').get_param('ir_attachment.location') - bin_size = context.get('bin_size', False) - if path: + if location: i = self.browse(cr, uid, id, context=context) if i.store_fname: self._file_delete(cr, uid, location, i.store_fname) From 2569587c905bcdb01dd6f62b996e979626992851 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sun, 16 Dec 2012 18:38:56 +0100 Subject: [PATCH 06/36] Simplify openerp testing, deprecated redondant test declaration, we feed all tests.* modules to unittest2.TestLoader.loadTestsFromModule(module) bzr revid: al@openerp.com-20121216173856-euntlfi80uzutkp0 --- openerp/addons/base/__openerp__.py | 5 - openerp/addons/base/ir/ir_attachment.py | 10 +- openerp/addons/base/test/base_test.xml | 14 --- openerp/addons/base/test/test_ir_cron.py | 116 ------------------ openerp/addons/base/test/test_ir_cron.yml | 61 --------- openerp/addons/base/tests/__init__.py | 14 +-- .../addons/base/tests/test_ir_attachment.py | 16 +++ openerp/modules/module.py | 97 +++------------ openerp/tests/__init__.py | 36 ++---- 9 files changed, 58 insertions(+), 311 deletions(-) delete mode 100644 openerp/addons/base/test/base_test.xml delete mode 100644 openerp/addons/base/test/test_ir_cron.py delete mode 100644 openerp/addons/base/test/test_ir_cron.yml create mode 100644 openerp/addons/base/tests/test_ir_attachment.py diff --git a/openerp/addons/base/__openerp__.py b/openerp/addons/base/__openerp__.py index b4473434cdf..d400b28a729 100644 --- a/openerp/addons/base/__openerp__.py +++ b/openerp/addons/base/__openerp__.py @@ -93,16 +93,11 @@ The kernel of OpenERP, needed for all installation. 'res/res_partner_image_demo.xml', ], 'test': [ - 'test/base_test.xml', 'test/base_test.yml', 'test/test_context.xml', 'test/bug_lp541545.xml', 'test/test_osv_expression.yml', 'test/test_ir_rule.yml', # <-- These tests modify/add/delete ir_rules. - # Commented because this takes some time. - # This must be (un)commented with the corresponding import statement - # in test/__init__.py. - # 'test/test_ir_cron.yml', # <-- These tests perform a roolback. ], 'installable': True, 'auto_install': True, diff --git a/openerp/addons/base/ir/ir_attachment.py b/openerp/addons/base/ir/ir_attachment.py index 644cec10bf0..4b9a721e7b5 100644 --- a/openerp/addons/base/ir/ir_attachment.py +++ b/openerp/addons/base/ir/ir_attachment.py @@ -112,13 +112,13 @@ class ir_attachment(osv.osv): if context is None: context = {} result = {} - location = self.pool.get('ir.config_parameter').get_param('ir_attachment.location') + location = self.pool.get('ir.config_parameter').get_param(cr, uid, 'ir_attachment.location') bin_size = context.get('bin_size', False) - for i in self.browse(cr, uid, ids, context=context): - if location and i.store_fname: + for attach in self.browse(cr, uid, ids, context=context): + if location and attach.store_fname: result[i.id] = self._file_read(cr, uid, location, i.store_fname, bin_size) else: - result[i.id] = i.db_datas + result[i.id] = attach.db_datas return result def _data_set(self, cr, uid, id, name, value, arg, context=None): @@ -127,7 +127,7 @@ class ir_attachment(osv.osv): return True if context is None: context = {} - location = self.pool.get('ir.config_parameter').get_param('ir_attachment.location') + location = self.pool.get('ir.config_parameter').get_param(cr, uid, 'ir_attachment.location') if location: i = self.browse(cr, uid, id, context=context) if i.store_fname: diff --git a/openerp/addons/base/test/base_test.xml b/openerp/addons/base/test/base_test.xml deleted file mode 100644 index 27bcabfc8f9..00000000000 --- a/openerp/addons/base/test/base_test.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - ASUSTeK - - - - \ No newline at end of file diff --git a/openerp/addons/base/test/test_ir_cron.py b/openerp/addons/base/test/test_ir_cron.py deleted file mode 100644 index 6ef79ac3a78..00000000000 --- a/openerp/addons/base/test/test_ir_cron.py +++ /dev/null @@ -1,116 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2011-TODAY OpenERP S.A. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import time -from datetime import datetime -from dateutil.relativedelta import relativedelta - -import openerp - -JOB = { - 'function': u'_0_seconds', - 'interval_type': u'minutes', - 'user_id': 1, - 'name': u'test', - 'args': False, - 'numbercall': 1, - 'nextcall': datetime.now().strftime('%Y-%m-%d %H:%M:%S'), - 'priority': 5, - 'doall': True, - 'active': True, - 'interval_number': 1, - 'model': u'ir.cron' -} - -class test_ir_cron(openerp.osv.osv.osv): - """ Add a few handy methods to test cron jobs scheduling. """ - _inherit = "ir.cron" - - def _0_seconds(a, b, c): - print ">>> _0_seconds" - - def _20_seconds(self, cr, uid): - print ">>> in _20_seconds" - time.sleep(20) - print ">>> out _20_seconds" - - def _80_seconds(self, cr, uid): - print ">>> in _80_seconds" - time.sleep(80) - print ">>> out _80_seconds" - - def test_0(self, cr, uid): - now = datetime.now() - t1 = (now + relativedelta(minutes=1)).strftime('%Y-%m-%d %H:%M:%S') - t2 = (now + relativedelta(minutes=1, seconds=5)).strftime('%Y-%m-%d %H:%M:%S') - t3 = (now + relativedelta(minutes=1, seconds=10)).strftime('%Y-%m-%d %H:%M:%S') - self.create(cr, uid, dict(JOB, name='test_0 _20_seconds A', function='_20_seconds', nextcall=t1)) - self.create(cr, uid, dict(JOB, name='test_0 _20_seconds B', function='_20_seconds', nextcall=t2)) - self.create(cr, uid, dict(JOB, name='test_0 _20_seconds C', function='_20_seconds', nextcall=t3)) - - def test_1(self, cr, uid): - now = datetime.now() - t1 = (now + relativedelta(minutes=1)).strftime('%Y-%m-%d %H:%M:%S') - self.create(cr, uid, dict(JOB, name='test_1 _20_seconds * 3', function='_20_seconds', nextcall=t1, numbercall=3)) - - def test_2(self, cr, uid): - now = datetime.now() - t1 = (now + relativedelta(minutes=1)).strftime('%Y-%m-%d %H:%M:%S') - self.create(cr, uid, dict(JOB, name='test_2 _80_seconds * 2', function='_80_seconds', nextcall=t1, numbercall=2)) - - def test_3(self, cr, uid): - now = datetime.now() - t1 = (now + relativedelta(minutes=1)).strftime('%Y-%m-%d %H:%M:%S') - t2 = (now + relativedelta(minutes=1, seconds=5)).strftime('%Y-%m-%d %H:%M:%S') - t3 = (now + relativedelta(minutes=1, seconds=10)).strftime('%Y-%m-%d %H:%M:%S') - self.create(cr, uid, dict(JOB, name='test_3 _80_seconds A', function='_80_seconds', nextcall=t1)) - self.create(cr, uid, dict(JOB, name='test_3 _20_seconds B', function='_20_seconds', nextcall=t2)) - self.create(cr, uid, dict(JOB, name='test_3 _20_seconds C', function='_20_seconds', nextcall=t3)) - - # This test assumes 4 cron threads. - def test_00(self, cr, uid): - self.test_00_set = set() - now = datetime.now() - t1 = (now + relativedelta(minutes=1)).strftime('%Y-%m-%d %H:%M:%S') - t2 = (now + relativedelta(minutes=1, seconds=5)).strftime('%Y-%m-%d %H:%M:%S') - t3 = (now + relativedelta(minutes=1, seconds=10)).strftime('%Y-%m-%d %H:%M:%S') - self.create(cr, uid, dict(JOB, name='test_00 _20_seconds_A', function='_20_seconds_A', nextcall=t1)) - self.create(cr, uid, dict(JOB, name='test_00 _20_seconds_B', function='_20_seconds_B', nextcall=t2)) - self.create(cr, uid, dict(JOB, name='test_00 _20_seconds_C', function='_20_seconds_C', nextcall=t3)) - - def _expect(self, cr, uid, to_add, to_sleep, to_expect_in, to_expect_out): - assert self.test_00_set == to_expect_in - self.test_00_set.add(to_add) - time.sleep(to_sleep) - self.test_00_set.discard(to_add) - assert self.test_00_set == to_expect_out - - def _20_seconds_A(self, cr, uid): - self._expect(cr, uid, 'A', 20, set(), set(['B', 'C'])) - - def _20_seconds_B(self, cr, uid): - self._expect(cr, uid, 'B', 20, set('A'), set('C')) - - def _20_seconds_C(self, cr, uid): - self._expect(cr, uid, 'C', 20, set(['A', 'B']), set()) - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/openerp/addons/base/test/test_ir_cron.yml b/openerp/addons/base/test/test_ir_cron.yml deleted file mode 100644 index 16d648e1c30..00000000000 --- a/openerp/addons/base/test/test_ir_cron.yml +++ /dev/null @@ -1,61 +0,0 @@ -- - Test the cron jobs scheduling. -- - Disable the existing cron jobs if any during the tests. -- - !python {model: ir.cron }: | - # For this test to work, as it involves multiple database cursors, - # we have to commit changes. But YAML tests must be rollbacked, so - # the final database state is left untouched. So we have to be a bit - # ugly here: use our own cursor, commit, and clean after ourselves. - # We also pass around some ids using setattr/delattr, and we have to - # rollback the previous tests otherwise we won't be able to touch the - # db. - # Well, this should probably be a standalone, or regular unit test, - # instead of using the YAML infrastructure. - cr.rollback() - our_cr = self.pool.db.cursor() - try: - ids = self.search(our_cr, uid, [], {}) - setattr(self, 'saved_ids', ids) - self.write(our_cr, uid, ids, {'active': False}, {}) - our_cr.commit() - finally: - our_cr.close() -- - Three concurrent jobs started with a slight time gap. Assume 4 cron threads. - This will take about 2 minutes. -- - !python {model: ir.cron }: | - # Pretend initialization is already done. We the use a try/finally - # to reset _init correctly. - self.pool._init = False - our_cr = self.pool.db.cursor() - try: - self.test_00(our_cr, uid) # this will commit using the passed cursor - import openerp.cron - openerp.cron._thread_slots = 4 - # Wake up this db as soon as the master cron thread starts. - openerp.cron.schedule_wakeup(1, self.pool.db.dbname) - # Pretend to be the master thread, for 4 iterations. - openerp.cron.runner_body() - openerp.cron.runner_body() - openerp.cron.runner_body() - openerp.cron.runner_body() - finally: - self.pool._init = True - our_cr.close() -- - Clean after ourselves. -- - !python {model: ir.cron }: | - our_cr = self.pool.db.cursor() - try: - ids = [x for x in self.search(our_cr, uid, ['|', ('active', '=', True), ('active', '=', False)], {}) if x not in self.saved_ids] - self.unlink(our_cr, uid, ids, {}) - ids = self.saved_ids - delattr(self, 'saved_ids') - self.write(our_cr, uid, ids, {'active': True}, {}) - our_cr.commit() - finally: - our_cr.close() diff --git a/openerp/addons/base/tests/__init__.py b/openerp/addons/base/tests/__init__.py index 70f9a932d01..1d60f1a60a8 100644 --- a/openerp/addons/base/tests/__init__.py +++ b/openerp/addons/base/tests/__init__.py @@ -1,9 +1,7 @@ -import test_base, test_expression, test_search, test_ir_values, test_menu +#import test_base +#import test_expression +import test_ir_attachment +#import test_ir_values +#import test_menu +#import test_search -checks = [ - test_base, - test_expression, - test_search, - test_ir_values, - test_menu, -] diff --git a/openerp/addons/base/tests/test_ir_attachment.py b/openerp/addons/base/tests/test_ir_attachment.py new file mode 100644 index 00000000000..fa04a4f967c --- /dev/null +++ b/openerp/addons/base/tests/test_ir_attachment.py @@ -0,0 +1,16 @@ +import unittest2 + +import openerp.tests.common as common + +class test_ir_attachment(common.TransactionCase): + + def test_00_attachment_flow(self): + + registry, cr, uid = self.registry, self.cr, self.uid + + ira = registry('ir.attachment') + d = ira.create(cr, uid, {'name': 'a1', 'datas':'blob1'}) + + #name_asc = partners.search(cr, uid, [('name', 'like', 'test_search_order%')], order="name asc") + #self.assertEqual([a, ab, b, c], name_asc, "Search with 'NAME ASC' order failed.") + diff --git a/openerp/modules/module.py b/openerp/modules/module.py index bb4ff481fb9..aefab86796e 100644 --- a/openerp/modules/module.py +++ b/openerp/modules/module.py @@ -456,15 +456,9 @@ def get_modules_with_version(): continue return res -def get_test_modules(module, submodule, explode): - """ - Return a list of submodules containing tests. - `submodule` can be: - - None - - the name of a submodule - - '__fast_suite__' - - '__sanity_checks__' - """ +def get_test_modules(module): + """ Return a list of module for the addons potentialy containing tests to + feed unittest2.TestLoader.loadTestsFromModule() """ # Turn command-line module, submodule into importable names. if module is None: pass @@ -472,74 +466,21 @@ def get_test_modules(module, submodule, explode): module = 'openerp.tests' else: module = 'openerp.addons.' + module + '.tests' - # Try to import the module try: __import__(module) except Exception, e: - if explode: - print 'Can not `import %s`.' % module - import logging - logging.exception('') - sys.exit(1) - else: - if str(e) == 'No module named tests': - # It seems the module has no `tests` sub-module, no problem. - pass - else: - _logger.exception('Can not `import %s`.', module) - return [] + # If module has no `tests` sub-module, no problem. + if str(e) != 'No module named tests': + _logger.exception('Can not `import %s`.', module) + return [] - # Discover available test sub-modules. - m = sys.modules[module] - submodule_names = sorted([x for x in dir(m) \ - if x.startswith('test_') and \ - isinstance(getattr(m, x), types.ModuleType)]) - submodules = [getattr(m, x) for x in submodule_names] - - def show_submodules_and_exit(): - if submodule_names: - print 'Available submodules are:' - for x in submodule_names: - print ' ', x - sys.exit(1) - - if submodule is None: - # Use auto-discovered sub-modules. - ms = submodules - elif submodule == '__fast_suite__': - # Obtain the explicit test sub-modules list. - ms = getattr(sys.modules[module], 'fast_suite', None) - # `suite` was used before the 6.1 release instead of `fast_suite`. - ms = ms if ms else getattr(sys.modules[module], 'suite', None) - if ms is None: - if explode: - print 'The module `%s` has no defined test suite.' % (module,) - show_submodules_and_exit() - else: - ms = [] - elif submodule == '__sanity_checks__': - ms = getattr(sys.modules[module], 'checks', None) - if ms is None: - if explode: - print 'The module `%s` has no defined sanity checks.' % (module,) - show_submodules_and_exit() - else: - ms = [] - else: - # Pick the command-line-specified test sub-module. - m = getattr(sys.modules[module], submodule, None) - ms = [m] - - if m is None: - if explode: - print 'The module `%s` has no submodule named `%s`.' % \ - (module, submodule) - show_submodules_and_exit() - else: - ms = [] - - return ms + # include submodules too + result = [] + for name in sys.modules: + if name.startswith(module): + result.append(sys.modules[name]) + return result def run_unit_tests(module_name): """ @@ -547,14 +488,9 @@ def run_unit_tests(module_name): Return None if no test was found. """ import unittest2 - ms = get_test_modules(module_name, '__fast_suite__', explode=False) - # TODO: No need to try again if the above call failed because of e.g. a syntax error. - ms.extend(get_test_modules(module_name, '__sanity_checks__', explode=False)) - suite = unittest2.TestSuite() - for m in ms: - suite.addTests(unittest2.TestLoader().loadTestsFromModule(m)) + ms = get_test_modules(module_name) if ms: - _logger.log(logging.TEST, 'module %s: executing %s `fast_suite` and/or `checks` sub-modules', module_name, len(ms)) + _logger.log(logging.TEST, 'module %s: running test.', module_name) # Use a custom stream object to log the test executions. class MyStream(object): def __init__(self): @@ -570,6 +506,9 @@ def run_unit_tests(module_name): c = '` ' + c first = False _logger.log(logging.TEST, c) + suite = unittest2.TestSuite() + for m in ms: + suite.addTests(unittest2.TestLoader().loadTestsFromModule(m)) result = unittest2.TextTestRunner(verbosity=2, stream=MyStream()).run(suite) if result.wasSuccessful(): return True diff --git a/openerp/tests/__init__.py b/openerp/tests/__init__.py index 92a40ab306c..38569464bbe 100644 --- a/openerp/tests/__init__.py +++ b/openerp/tests/__init__.py @@ -8,28 +8,18 @@ Tests can be explicitely added to the `fast_suite` or `checks` lists or not. See the :ref:`test-framework` section in the :ref:`features` list. """ -from . import test_expression, test_mail, test_ir_sequence, test_orm, \ - test_fields, test_basecase, \ - test_view_validation, test_uninstall, test_misc, test_db_cursor, \ - test_osv, test_translate -from . import test_ir_filters - -fast_suite = [ - test_ir_sequence, - test_ir_filters -] - -checks = [ - test_expression, - test_mail, - test_db_cursor, - test_orm, - test_fields, - test_basecase, - test_view_validation, - test_misc, - test_osv, - test_translate, -] +#import test_basecase +#import test_db_cursor +#import test_expression +#import test_fields +#import test_ir_filters +#import test_ir_sequence +#import test_mail +#import test_misc +#import test_orm +#import test_osv +#import test_translate +#import test_uninstall +#import test_view_validation # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 70aa2c995a53208a9e4aabf85f0c9ee210c61506 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sun, 16 Dec 2012 20:03:17 +0100 Subject: [PATCH 07/36] filestore testcase and fix bugs bzr revid: al@openerp.com-20121216190317-xoz0jij2cfk0c2zk --- openerp/addons/base/ir/ir_attachment.py | 23 +++-- openerp/addons/base/tests/__init__.py | 10 +-- .../addons/base/tests/test_ir_attachment.py | 87 +++++++++++++++++-- openerp/tests/__init__.py | 26 +++--- 4 files changed, 114 insertions(+), 32 deletions(-) diff --git a/openerp/addons/base/ir/ir_attachment.py b/openerp/addons/base/ir/ir_attachment.py index 4b9a721e7b5..f9502b7a288 100644 --- a/openerp/addons/base/ir/ir_attachment.py +++ b/openerp/addons/base/ir/ir_attachment.py @@ -19,7 +19,10 @@ # ############################################################################## +import hashlib import itertools +import os +import re from osv import fields,osv from osv.orm import except_orm @@ -65,7 +68,7 @@ class ir_attachment(osv.osv): # sanitize location name and path location = re.sub('[.]','',location) - location = path.strip('/\\') + location = location.strip('/\\') path = re.sub('[.]','',path) path = path.strip('/\\') @@ -106,6 +109,7 @@ class ir_attachment(osv.osv): try: os.unlink(full_path) except IOError: + # Harmless and needed for race conditions _logger.error("_file_delete could not unlink %s",full_path) def _data_get(self, cr, uid, ids, name, arg, context=None): @@ -113,12 +117,12 @@ class ir_attachment(osv.osv): context = {} result = {} location = self.pool.get('ir.config_parameter').get_param(cr, uid, 'ir_attachment.location') - bin_size = context.get('bin_size', False) + bin_size = context.get('bin_size') for attach in self.browse(cr, uid, ids, context=context): if location and attach.store_fname: - result[i.id] = self._file_read(cr, uid, location, i.store_fname, bin_size) + result[attach.id] = self._file_read(cr, uid, location, attach.store_fname, bin_size) else: - result[i.id] = attach.db_datas + result[attach.id] = attach.db_datas return result def _data_set(self, cr, uid, id, name, value, arg, context=None): @@ -129,9 +133,9 @@ class ir_attachment(osv.osv): context = {} location = self.pool.get('ir.config_parameter').get_param(cr, uid, 'ir_attachment.location') if location: - i = self.browse(cr, uid, id, context=context) - if i.store_fname: - self._file_delete(cr, uid, location, i.store_fname) + attach = self.browse(cr, uid, id, context=context) + if attach.store_fname: + self._file_delete(cr, uid, location, attach.store_fname) fname = self._file_write(cr, uid, location, value) self.write(cr, uid, [id], {'store_fname': fname}, context=context) else: @@ -263,6 +267,11 @@ class ir_attachment(osv.osv): def unlink(self, cr, uid, ids, context=None): self.check(cr, uid, ids, 'unlink', context=context) + location = self.pool.get('ir.config_parameter').get_param(cr, uid, 'ir_attachment.location') + if location: + for attach in self.browse(cr, uid, ids, context=context): + if attach.store_fname: + self._file_delete(cr, uid, location, attach.store_fname) return super(ir_attachment, self).unlink(cr, uid, ids, context) def create(self, cr, uid, values, context=None): diff --git a/openerp/addons/base/tests/__init__.py b/openerp/addons/base/tests/__init__.py index 1d60f1a60a8..4a586a8a971 100644 --- a/openerp/addons/base/tests/__init__.py +++ b/openerp/addons/base/tests/__init__.py @@ -1,7 +1,7 @@ -#import test_base -#import test_expression +import test_base +import test_expression import test_ir_attachment -#import test_ir_values -#import test_menu -#import test_search +import test_ir_values +import test_menu +import test_search diff --git a/openerp/addons/base/tests/test_ir_attachment.py b/openerp/addons/base/tests/test_ir_attachment.py index fa04a4f967c..4d96ec42b28 100644 --- a/openerp/addons/base/tests/test_ir_attachment.py +++ b/openerp/addons/base/tests/test_ir_attachment.py @@ -1,16 +1,89 @@ +import hashlib +import os + import unittest2 -import openerp.tests.common as common +import openerp +import openerp.tests.common -class test_ir_attachment(common.TransactionCase): +class test_ir_attachment(openerp.tests.common.TransactionCase): def test_00_attachment_flow(self): - registry, cr, uid = self.registry, self.cr, self.uid - + root_path = openerp.tools.config['root_path'] ira = registry('ir.attachment') - d = ira.create(cr, uid, {'name': 'a1', 'datas':'blob1'}) - #name_asc = partners.search(cr, uid, [('name', 'like', 'test_search_order%')], order="name asc") - #self.assertEqual([a, ab, b, c], name_asc, "Search with 'NAME ASC' order failed.") + # Blob1 + blob1 = 'blob1' + blob1_b64 = blob1.encode('base64') + blob1_hash = hashlib.sha1(blob1).hexdigest() + blob1_fname = blob1_hash[:3] + '/' + blob1_hash + + # Blob2 + blob2 = 'blob2' + blob2_b64 = blob2.encode('base64') + blob2_hash = hashlib.sha1(blob2).hexdigest() + blob2_fname = blob2_hash[:3] + '/' + blob2_hash + + # 'ir_attachment.location' is undefined test database storage + a1 = ira.create(cr, uid, {'name': 'a1', 'datas': blob1_b64}) + a1_read = ira.read(cr, uid, [a1], ['datas']) + self.assertEqual(a1_read[0]['datas'], blob1_b64) + + cr.execute("select id,db_datas from ir_attachment where id = %s", (a1,) ) + a1_db_datas = str(cr.fetchall()[0][1]) + self.assertEqual(a1_db_datas, blob1_b64) + + # define a location for filestore + registry('ir.config_parameter').set_param(cr, uid, 'ir_attachment.location', 'file:///filestore') + + # Test file storage + a2 = ira.create(cr, uid, {'name': 'a2', 'datas': blob1_b64}) + a2_read = ira.read(cr, uid, [a2], ['datas']) + self.assertEqual(a2_read[0]['datas'], blob1_b64) + + cr.execute("select id,store_fname from ir_attachment where id = %s", (a2,) ) + a2_store_fname = cr.fetchall()[0][1] + self.assertEqual(a2_store_fname, blob1_fname) + + a2_fn = os.path.join(root_path, 'filestore', cr.dbname, blob1_hash[:3], blob1_hash) + fc = file(a2_fn).read() + self.assertEqual(fc, blob1) + + # create a3 with same blob + a3 = ira.create(cr, uid, {'name': 'a3', 'datas': blob1_b64}) + a3_read = ira.read(cr, uid, [a3], ['datas']) + self.assertEqual(a3_read[0]['datas'], blob1_b64) + + cr.execute("select id,store_fname from ir_attachment where id = %s", (a3,) ) + a3_store_fname = cr.fetchall()[0][1] + self.assertEqual(a3_store_fname, a2_store_fname) + + # create a4 blob2 + a4 = ira.create(cr, uid, {'name': 'a4', 'datas': blob2_b64}) + a4_read = ira.read(cr, uid, [a4], ['datas']) + self.assertEqual(a4_read[0]['datas'], blob2_b64) + + a4_fn = os.path.join(root_path, 'filestore', cr.dbname, blob2_hash[:3], blob2_hash) + self.assertTrue(os.path.isfile(a4_fn)) + + # delete a3 but file stays + ira.unlink(cr, uid, [a3]) + self.assertTrue(os.path.isfile(a2_fn)) + + # delete a2 it is unlinked + ira.unlink(cr, uid, [a2]) + self.assertFalse(os.path.isfile(a2_fn)) + + # update a4 blob2 by blob1 + ira.write(cr, uid, [a4], {'datas': blob1_b64}) + a4_read = ira.read(cr, uid, [a4], ['datas']) + self.assertEqual(a4_read[0]['datas'], blob1_b64) + + # file of a4 disapear and a2 reappear + self.assertFalse(os.path.isfile(a4_fn)) + self.assertTrue(os.path.isfile(a2_fn)) + + # everybody applause + diff --git a/openerp/tests/__init__.py b/openerp/tests/__init__.py index 38569464bbe..327b8715125 100644 --- a/openerp/tests/__init__.py +++ b/openerp/tests/__init__.py @@ -8,18 +8,18 @@ Tests can be explicitely added to the `fast_suite` or `checks` lists or not. See the :ref:`test-framework` section in the :ref:`features` list. """ -#import test_basecase -#import test_db_cursor -#import test_expression -#import test_fields -#import test_ir_filters -#import test_ir_sequence -#import test_mail -#import test_misc -#import test_orm -#import test_osv -#import test_translate -#import test_uninstall -#import test_view_validation +import test_basecase +import test_db_cursor +import test_expression +import test_fields +import test_ir_filters +import test_ir_sequence +import test_mail +import test_misc +import test_orm +import test_osv +import test_translate +import test_uninstall +import test_view_validation # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 9568552636d866b2c558cfc800e9ede902482001 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sun, 16 Dec 2012 20:39:32 +0100 Subject: [PATCH 08/36] revert test change will be moved to an other branch bzr revid: al@openerp.com-20121216193932-foluon7b5bqqvrib --- openerp/addons/base/tests/__init__.py | 8 +++ openerp/modules/module.py | 97 ++++++++++++++++++++++----- openerp/tests/__init__.py | 18 +++++ 3 files changed, 105 insertions(+), 18 deletions(-) diff --git a/openerp/addons/base/tests/__init__.py b/openerp/addons/base/tests/__init__.py index 4a586a8a971..d891bc06fda 100644 --- a/openerp/addons/base/tests/__init__.py +++ b/openerp/addons/base/tests/__init__.py @@ -5,3 +5,11 @@ import test_ir_values import test_menu import test_search +checks = [ + test_base, + test_expression, + test_ir_attachment, + test_ir_values, + test_menu, + test_search, +] diff --git a/openerp/modules/module.py b/openerp/modules/module.py index aefab86796e..bb4ff481fb9 100644 --- a/openerp/modules/module.py +++ b/openerp/modules/module.py @@ -456,9 +456,15 @@ def get_modules_with_version(): continue return res -def get_test_modules(module): - """ Return a list of module for the addons potentialy containing tests to - feed unittest2.TestLoader.loadTestsFromModule() """ +def get_test_modules(module, submodule, explode): + """ + Return a list of submodules containing tests. + `submodule` can be: + - None + - the name of a submodule + - '__fast_suite__' + - '__sanity_checks__' + """ # Turn command-line module, submodule into importable names. if module is None: pass @@ -466,21 +472,74 @@ def get_test_modules(module): module = 'openerp.tests' else: module = 'openerp.addons.' + module + '.tests' + # Try to import the module try: __import__(module) except Exception, e: - # If module has no `tests` sub-module, no problem. - if str(e) != 'No module named tests': - _logger.exception('Can not `import %s`.', module) - return [] + if explode: + print 'Can not `import %s`.' % module + import logging + logging.exception('') + sys.exit(1) + else: + if str(e) == 'No module named tests': + # It seems the module has no `tests` sub-module, no problem. + pass + else: + _logger.exception('Can not `import %s`.', module) + return [] - # include submodules too - result = [] - for name in sys.modules: - if name.startswith(module): - result.append(sys.modules[name]) - return result + # Discover available test sub-modules. + m = sys.modules[module] + submodule_names = sorted([x for x in dir(m) \ + if x.startswith('test_') and \ + isinstance(getattr(m, x), types.ModuleType)]) + submodules = [getattr(m, x) for x in submodule_names] + + def show_submodules_and_exit(): + if submodule_names: + print 'Available submodules are:' + for x in submodule_names: + print ' ', x + sys.exit(1) + + if submodule is None: + # Use auto-discovered sub-modules. + ms = submodules + elif submodule == '__fast_suite__': + # Obtain the explicit test sub-modules list. + ms = getattr(sys.modules[module], 'fast_suite', None) + # `suite` was used before the 6.1 release instead of `fast_suite`. + ms = ms if ms else getattr(sys.modules[module], 'suite', None) + if ms is None: + if explode: + print 'The module `%s` has no defined test suite.' % (module,) + show_submodules_and_exit() + else: + ms = [] + elif submodule == '__sanity_checks__': + ms = getattr(sys.modules[module], 'checks', None) + if ms is None: + if explode: + print 'The module `%s` has no defined sanity checks.' % (module,) + show_submodules_and_exit() + else: + ms = [] + else: + # Pick the command-line-specified test sub-module. + m = getattr(sys.modules[module], submodule, None) + ms = [m] + + if m is None: + if explode: + print 'The module `%s` has no submodule named `%s`.' % \ + (module, submodule) + show_submodules_and_exit() + else: + ms = [] + + return ms def run_unit_tests(module_name): """ @@ -488,9 +547,14 @@ def run_unit_tests(module_name): Return None if no test was found. """ import unittest2 - ms = get_test_modules(module_name) + ms = get_test_modules(module_name, '__fast_suite__', explode=False) + # TODO: No need to try again if the above call failed because of e.g. a syntax error. + ms.extend(get_test_modules(module_name, '__sanity_checks__', explode=False)) + suite = unittest2.TestSuite() + for m in ms: + suite.addTests(unittest2.TestLoader().loadTestsFromModule(m)) if ms: - _logger.log(logging.TEST, 'module %s: running test.', module_name) + _logger.log(logging.TEST, 'module %s: executing %s `fast_suite` and/or `checks` sub-modules', module_name, len(ms)) # Use a custom stream object to log the test executions. class MyStream(object): def __init__(self): @@ -506,9 +570,6 @@ def run_unit_tests(module_name): c = '` ' + c first = False _logger.log(logging.TEST, c) - suite = unittest2.TestSuite() - for m in ms: - suite.addTests(unittest2.TestLoader().loadTestsFromModule(m)) result = unittest2.TextTestRunner(verbosity=2, stream=MyStream()).run(suite) if result.wasSuccessful(): return True diff --git a/openerp/tests/__init__.py b/openerp/tests/__init__.py index 327b8715125..07232bff5dc 100644 --- a/openerp/tests/__init__.py +++ b/openerp/tests/__init__.py @@ -22,4 +22,22 @@ import test_translate import test_uninstall import test_view_validation +fast_suite = [ + test_ir_sequence, + test_ir_filters +] + +checks = [ + test_expression, + test_mail, + test_db_cursor, + test_orm, + test_fields, + test_basecase, + test_view_validation, + test_misc, + test_osv, + test_translate, +] + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 893f34555fe084b42c9f4223263f84fb6f85640d Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sun, 16 Dec 2012 21:47:37 +0100 Subject: [PATCH 09/36] remove more cruft bzr revid: al@openerp.com-20121216204737-4mfsbp0v6s0g799j --- addons/document/__openerp__.py | 2 +- addons/document/document.py | 87 +--------------------------------- 2 files changed, 2 insertions(+), 87 deletions(-) diff --git a/addons/document/__openerp__.py b/addons/document/__openerp__.py index e3354efff0c..7e46ece47b5 100644 --- a/addons/document/__openerp__.py +++ b/addons/document/__openerp__.py @@ -55,7 +55,7 @@ ATTENTION: 'report/document_report_view.xml', 'board_document_view.xml', ], - 'demo': [ 'document_demo.xml','board_document_demo.xml'], + 'demo': [ 'document_demo.xml' ], 'test': ['test/document_test2.yml'], 'js': ['static/src/js/document.js'], 'installable': True, diff --git a/addons/document/document.py b/addons/document/document.py index 37a0219d143..aeb5f97754a 100644 --- a/addons/document/document.py +++ b/addons/document/document.py @@ -62,9 +62,7 @@ class document_file(osv.osv): if ids is not None: raise NotImplementedError("Ids are just there by convention, please do not use it.") - cr.execute("UPDATE ir_attachment " \ - "SET parent_id = %s, db_datas = decode(encode(db_datas,'escape'), 'base64') " \ - "WHERE parent_id IS NULL", (parent_id,)) + cr.execute("UPDATE ir_attachment SET parent_id = %s WHERE parent_id IS NULL", (parent_id,)) cr.execute("UPDATE ir_attachment SET file_size=length(db_datas) WHERE file_size = 0 and type = 'binary'") @@ -72,67 +70,17 @@ class document_file(osv.osv): return True - def _get_filestore(self, cr): - return os.path.join(DMS_ROOT_PATH, cr.dbname) - - def _data_get(self, cr, uid, ids, name, arg, context=None): - if context is None: - context = {} - fbrl = self.browse(cr, uid, ids, context=context) - nctx = nodes.get_node_context(cr, uid, context={}) - # nctx will /not/ inherit the caller's context. Most of - # it would be useless, anyway (like active_id, active_model, - # bin_size etc.) - result = {} - bin_size = context.get('bin_size', False) - for fbro in fbrl: - fnode = nodes.node_file(None, None, nctx, fbro) - if not bin_size: - data = fnode.get_data(cr, fbro) - result[fbro.id] = base64.encodestring(data or '') - else: - result[fbro.id] = fnode.get_data_len(cr, fbro) - - return result - - # - # This code can be improved - # - def _data_set(self, cr, uid, id, name, value, arg, context=None): - if not value: - return True - fbro = self.browse(cr, uid, id, context=context) - nctx = nodes.get_node_context(cr, uid, context={}) - fnode = nodes.node_file(None, None, nctx, fbro) - res = fnode.set_data(cr, base64.decodestring(value), fbro) - return res - _columns = { # Columns from ir.attachment: - 'create_date': fields.datetime('Date Created', readonly=True), - 'create_uid': fields.many2one('res.users', 'Creator', readonly=True), 'write_date': fields.datetime('Date Modified', readonly=True), 'write_uid': fields.many2one('res.users', 'Last Modification User', readonly=True), - 'res_model': fields.char('Attached Model', size=64, readonly=True, change_default=True), - 'res_id': fields.integer('Attached ID', readonly=True), - - # If ir.attachment contained any data before document is installed, preserve - # the data, don't drop the column! - 'db_datas': fields.binary('Data', oldname='datas'), - 'datas': fields.function(_data_get, fnct_inv=_data_set, string='File Content', type="binary", nodrop=True), - # Fields of document: 'user_id': fields.many2one('res.users', 'Owner', select=1), - # 'group_ids': fields.many2many('res.groups', 'document_group_rel', 'item_id', 'group_id', 'Groups'), - # the directory id now is mandatory. It can still be computed automatically. 'parent_id': fields.many2one('document.directory', 'Directory', select=1, required=True, change_default=True), 'index_content': fields.text('Indexed Content'), 'partner_id':fields.many2one('res.partner', 'Partner', select=1), 'file_size': fields.integer('File Size', required=True), 'file_type': fields.char('Content Type', size=128), - - # fields used for file storage - 'store_fname': fields.char('Stored Filename', size=200), } _order = "id desc" @@ -185,7 +133,6 @@ class document_file(osv.osv): ids.remove(doc_id) return len(ids) if count else ids - def copy(self, cr, uid, id, default=None, context=None): if not default: default = {} @@ -282,36 +229,4 @@ class document_file(osv.osv): return bro.partner_id.id return False - def unlink(self, cr, uid, ids, context=None): - stor = self.pool.get('document.storage') - unres = [] - # We have to do the unlink in 2 stages: prepare a list of actual - # files to be unlinked, update the db (safer to do first, can be - # rolled back) and then unlink the files. The list wouldn't exist - # after we discard the objects - ids = self.search(cr, uid, [('id','in',ids)]) - for f in self.browse(cr, uid, ids, context=context): - # TODO: update the node cache - par = f.parent_id - storage_id = None - while par: - if par.storage_id: - storage_id = par.storage_id - break - par = par.parent_id - #assert storage_id, "Strange, found file #%s w/o storage!" % f.id #TOCHECK: after run yml, it's fail - if storage_id: - r = stor.prepare_unlink(cr, uid, storage_id, f) - if r: - unres.append(r) - else: - self.loggerdoc.warning("Unlinking attachment #%s %s that has no storage.", - f.id, f.name) - res = super(document_file, self).unlink(cr, uid, ids, context) - stor.do_unlink(cr, uid, unres) - return res - -document_file() - - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 0adc138bdc95de0f5d1e6e41d7ce5281fe5c1f33 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sun, 16 Dec 2012 23:50:00 +0100 Subject: [PATCH 10/36] remove more cruft, really ugly storage engine code bzr revid: al@openerp.com-20121216225000-44oitkilkkx8u29u --- addons/document/__openerp__.py | 8 - addons/document/board_document_view.xml | 41 -- addons/document/document_storage.py | 540 +----------------------- addons/document/nodes.py | 1 - 4 files changed, 16 insertions(+), 574 deletions(-) delete mode 100644 addons/document/board_document_view.xml diff --git a/addons/document/__openerp__.py b/addons/document/__openerp__.py index 7e46ece47b5..3e75c7d15e3 100644 --- a/addons/document/__openerp__.py +++ b/addons/document/__openerp__.py @@ -27,7 +27,6 @@ 'description': """ This is a complete document management system. ============================================== - * User Authentication * Document Indexation:- .pptx and .docx files are not supported in Windows platform. * Dashboard for Document that includes: @@ -35,13 +34,6 @@ This is a complete document management system. * Files by Resource Type (graph) * Files by Partner (graph) * Files Size by Month (graph) - -ATTENTION: ----------- - - When you install this module in a running company that have already PDF - files stored into the database, you will lose them all. - - After installing this module PDF's are no longer stored into the database, - but in the servers rootpad like /server/bin/filestore. """, 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', diff --git a/addons/document/board_document_view.xml b/addons/document/board_document_view.xml deleted file mode 100644 index 986b054383f..00000000000 --- a/addons/document/board_document_view.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - board.document.manager.form - board.board - -
- - - - - - - - -
-
-
- - - - Knowledge - board.board - form - form - - - - - -
-
diff --git a/addons/document/document_storage.py b/addons/document/document_storage.py index a4b37b126b2..9ad70497b2b 100644 --- a/addons/document/document_storage.py +++ b/addons/document/document_storage.py @@ -38,8 +38,6 @@ import pooler import nodes from content_index import cntIndex _logger = logging.getLogger(__name__) -DMS_ROOT_PATH = tools.config.get('document_path', os.path.join(tools.config.get('root_path'), 'filestore')) - """ The algorithm of data storage @@ -68,103 +66,8 @@ but directly jump to the end node (like node[/dir1/dir2]) whenever possible. We also contain all the parenting loop code in one function. This is intentional, because one day this will be optimized in the db (Pg 8.4). - """ -def random_name(): - random.seed() - d = [random.choice(string.ascii_letters) for x in xrange(10) ] - name = "".join(d) - return name - -INVALID_CHARS = {'*':str(hash('*')), '|':str(hash('|')) , "\\":str(hash("\\")), '/':'__', ':':str(hash(':')), '"':str(hash('"')), '<':str(hash('<')) , '>':str(hash('>')) , '?':str(hash('?'))} - - -def create_directory(path): - dir_name = random_name() - path = os.path.join(path, dir_name) - os.makedirs(path) - return dir_name - -class nodefd_file(nodes.node_descriptor): - """ A descriptor to a real file - - Inheriting directly from file doesn't work, since file exports - some read-only attributes (like 'name') that we don't like. - """ - def __init__(self, parent, path, mode): - nodes.node_descriptor.__init__(self, parent) - self.__file = open(path, mode) - if mode.endswith('b'): - mode = mode[:-1] - self.mode = mode - self._size = os.stat(path).st_size - - for attr in ('closed', 'read', 'write', 'seek', 'tell', 'next'): - setattr(self,attr, getattr(self.__file, attr)) - - def size(self): - return self._size - - def __iter__(self): - return self - - def close(self): - # TODO: locking in init, close() - fname = self.__file.name - self.__file.close() - - if self.mode in ('w', 'w+', 'r+'): - par = self._get_parent() - cr = pooler.get_db(par.context.dbname).cursor() - icont = '' - mime = '' - filename = par.path - if isinstance(filename, (tuple, list)): - filename = '/'.join(filename) - - try: - mime, icont = cntIndex.doIndex(None, filename=filename, - content_type=None, realfname=fname) - except Exception: - _logger.debug('Cannot index file:', exc_info=True) - pass - - try: - icont_u = ustr(icont) - except UnicodeError: - icont_u = '' - - try: - fsize = os.stat(fname).st_size - cr.execute("UPDATE ir_attachment " \ - " SET index_content = %s, file_type = %s, " \ - " file_size = %s " \ - " WHERE id = %s", - (icont_u, mime, fsize, par.file_id)) - par.content_length = fsize - par.content_type = mime - cr.commit() - cr.close() - except Exception: - _logger.warning('Cannot save file indexed content:', exc_info=True) - - elif self.mode in ('a', 'a+' ): - try: - par = self._get_parent() - cr = pooler.get_db(par.context.dbname).cursor() - fsize = os.stat(fname).st_size - cr.execute("UPDATE ir_attachment SET file_size = %s " \ - " WHERE id = %s", - (fsize, par.file_id)) - par.content_length = fsize - cr.commit() - cr.close() - except Exception: - _logger.warning('Cannot save file appended content:', exc_info=True) - - - class nodefd_db(StringIO, nodes.node_descriptor): """ A descriptor to db data """ @@ -175,9 +78,7 @@ class nodefd_db(StringIO, nodes.node_descriptor): mode = mode[:-1] if mode in ('r', 'r+'): - cr = ira_browse._cr # reuse the cursor of the browse object, just now - cr.execute('SELECT db_datas FROM ir_attachment WHERE id = %s',(ira_browse.id,)) - data = cr.fetchone()[0] + data = ira_browse.datas if data: self._size = len(data) StringIO.__init__(self, data) @@ -244,85 +145,6 @@ class nodefd_db(StringIO, nodes.node_descriptor): cr.close() StringIO.close(self) -class nodefd_db64(StringIO, nodes.node_descriptor): - """ A descriptor to db data, base64 (the old way) - - It stores the data in base64 encoding at the db. Not optimal, but - the transparent compression of Postgres will save the day. - """ - def __init__(self, parent, ira_browse, mode): - nodes.node_descriptor.__init__(self, parent) - self._size = 0L - if mode.endswith('b'): - mode = mode[:-1] - - if mode in ('r', 'r+'): - data = base64.decodestring(ira_browse.db_datas) - if data: - self._size = len(data) - StringIO.__init__(self, data) - elif mode in ('w', 'w+'): - StringIO.__init__(self, None) - # at write, we start at 0 (= overwrite), but have the original - # data available, in case of a seek() - elif mode == 'a': - StringIO.__init__(self, None) - else: - _logger.error("Incorrect mode %s is specified.", mode) - raise IOError(errno.EINVAL, "Invalid file mode.") - self.mode = mode - - def size(self): - return self._size - - def close(self): - # we now open a *separate* cursor, to update the data. - # FIXME: this may be improved, for concurrency handling - par = self._get_parent() - # uid = par.context.uid - cr = pooler.get_db(par.context.dbname).cursor() - try: - if self.mode in ('w', 'w+', 'r+'): - data = self.getvalue() - icont = '' - mime = '' - filename = par.path - if isinstance(filename, (tuple, list)): - filename = '/'.join(filename) - - try: - mime, icont = cntIndex.doIndex(data, filename=filename, - content_type=None, realfname=None) - except Exception: - self.logger.debug('Cannot index file:', exc_info=True) - pass - - try: - icont_u = ustr(icont) - except UnicodeError: - icont_u = '' - - cr.execute('UPDATE ir_attachment SET db_datas = %s::bytea, file_size=%s, ' \ - 'index_content = %s, file_type = %s ' \ - 'WHERE id = %s', - (base64.encodestring(data), len(data), icont_u, mime, par.file_id)) - elif self.mode == 'a': - data = self.getvalue() - # Yes, we're obviously using the wrong representation for storing our - # data as base64-in-bytea - cr.execute("UPDATE ir_attachment " \ - "SET db_datas = encode( (COALESCE(decode(encode(db_datas,'escape'),'base64'),'') || decode(%s, 'base64')),'base64')::bytea , " \ - " file_size = COALESCE(file_size, 0) + %s " \ - " WHERE id = %s", - (base64.encodestring(data), len(data), par.file_id)) - cr.commit() - except Exception: - _logger.exception('Cannot update db file #%d for close.', par.file_id) - raise - finally: - cr.close() - StringIO.close(self) - class document_storage(osv.osv): """ The primary object for data storage. Each instance of this object is a storage media, in which our application @@ -346,72 +168,12 @@ class document_storage(osv.osv): 'user_id': fields.many2one('res.users', 'Owner'), 'group_ids': fields.many2many('res.groups', 'document_storage_group_rel', 'item_id', 'group_id', 'Groups'), 'dir_ids': fields.one2many('document.directory', 'parent_id', 'Directories'), - 'type': fields.selection([('db', 'Database'), ('filestore', 'Internal File storage'), - ('realstore','External file storage'),], 'Type', required=True), - 'path': fields.char('Path', size=250, select=1, help="For file storage, the root path of the storage"), - 'online': fields.boolean('Online', help="If not checked, media is currently offline and its contents not available"), 'readonly': fields.boolean('Read Only', help="If set, media is for reading only"), } - def _get_rootpath(self, cr, uid, context=None): - return os.path.join(DMS_ROOT_PATH, cr.dbname) - _defaults = { 'user_id': lambda self, cr, uid, ctx: uid, - 'online': lambda *args: True, - 'readonly': lambda *args: False, - # Note: the defaults below should only be used ONCE for the default - # storage media. All other times, we should create different paths at least. - 'type': lambda *args: 'filestore', - 'path': _get_rootpath, } - _sql_constraints = [ - # SQL note: a path = NULL doesn't have to be unique. - ('path_uniq', 'UNIQUE(type,path)', "The storage path must be unique!") - ] - - def __get_random_fname(self, path): - flag = None - # This can be improved - if os.path.isdir(path): - for dirs in os.listdir(path): - if os.path.isdir(os.path.join(path, dirs)) and len(os.listdir(os.path.join(path, dirs))) < 4000: - flag = dirs - break - flag = flag or create_directory(path) - filename = random_name() - return os.path.join(flag, filename) - - def __prepare_realpath(self, cr, file_node, ira, store_path, do_create=True): - """ Cleanup path for realstore, create dirs if needed - - @param file_node the node - @param ira ir.attachment browse of the file_node - @param store_path the path of the parent storage object, list - @param do_create create the directories, if needed - - @return tuple(path "/var/filestore/real/dir/", npath ['dir','fname.ext'] ) - """ - file_node.fix_ppath(cr, ira) - npath = file_node.full_path() or [] - # npath may contain empty elements, for root directory etc. - npath = filter(lambda x: x is not None, npath) - - # if self._debug: - # self._logger.debug('Npath: %s', npath) - for n in npath: - if n == '..': - raise ValueError("Invalid '..' element in path.") - for ch in ('*', '|', "\\", '/', ':', '"', '<', '>', '?',): - if ch in n: - raise ValueError("Invalid char %s in path %s." %(ch, n)) - dpath = [store_path,] - dpath += npath[:-1] - path = os.path.join(*dpath) - if not os.path.isdir(path): - _logger.debug("Create dirs: %s", path) - os.makedirs(path) - return path, npath def get_data(self, cr, uid, id, file_node, context=None, fil_obj=None): """ retrieve the contents of some file_node having storage_id = id @@ -419,14 +181,16 @@ class document_storage(osv.osv): (ir.attachment) """ boo = self.browse(cr, uid, id, context=context) - if not boo.online: - raise IOError(errno.EREMOTE, 'Medium offline.') - if fil_obj: ira = fil_obj else: ira = self.pool.get('ir.attachment').browse(cr, uid, file_node.file_id, context=context) - return self.__get_data_3(cr, uid, boo, ira, context) + data = ira.datas + if data: + out = data.decode('base64') + else: + out = '' + return out def get_file(self, cr, uid, id, file_node, mode, context=None): """ Return a file-like object for the contents of some node @@ -434,100 +198,9 @@ class document_storage(osv.osv): if context is None: context = {} boo = self.browse(cr, uid, id, context=context) - if not boo.online: - raise IOError(errno.EREMOTE, 'Medium offline.') - - if boo.readonly and mode not in ('r', 'rb'): - raise IOError(errno.EPERM, "Readonly medium.") ira = self.pool.get('ir.attachment').browse(cr, uid, file_node.file_id, context=context) - if boo.type == 'filestore': - if not ira.store_fname: - # On a migrated db, some files may have the wrong storage type - # try to fix their directory. - if mode in ('r','r+'): - if ira.file_size: - _logger.warning( "ir.attachment #%d does not have a filename, but is at filestore. This should get fixed." % ira.id) - raise IOError(errno.ENOENT, 'No file can be located.') - else: - store_fname = self.__get_random_fname(boo.path) - cr.execute('UPDATE ir_attachment SET store_fname = %s WHERE id = %s', - (store_fname, ira.id)) - fpath = os.path.join(boo.path, store_fname) - else: - fpath = os.path.join(boo.path, ira.store_fname) - return nodefd_file(file_node, path=fpath, mode=mode) - - elif boo.type == 'db': - # TODO: we need a better api for large files - return nodefd_db(file_node, ira_browse=ira, mode=mode) - - elif boo.type == 'db64': - return nodefd_db64(file_node, ira_browse=ira, mode=mode) - - elif boo.type == 'realstore': - path, npath = self.__prepare_realpath(cr, file_node, ira, boo.path, - do_create = (mode[0] in ('w','a')) ) - fpath = os.path.join(path, npath[-1]) - if (not os.path.exists(fpath)) and mode[0] == 'r': - raise IOError("File not found: %s." % fpath) - elif mode[0] in ('w', 'a') and not ira.store_fname: - store_fname = os.path.join(*npath) - cr.execute('UPDATE ir_attachment SET store_fname = %s WHERE id = %s', - (store_fname, ira.id)) - return nodefd_file(file_node, path=fpath, mode=mode) - - elif boo.type == 'virtual': - raise ValueError('Virtual storage does not support static file(s).') - - else: - raise TypeError("No %s storage." % boo.type) - - def __get_data_3(self, cr, uid, boo, ira, context): - if boo.type == 'filestore': - if not ira.store_fname: - # On a migrated db, some files may have the wrong storage type - # try to fix their directory. - if ira.file_size: - _logger.warning( "ir.attachment #%d does not have a filename, but is at filestore. This should get fixed." % ira.id) - return None - fpath = os.path.join(boo.path, ira.store_fname) - return file(fpath, 'rb').read() - elif boo.type == 'db64': - # TODO: we need a better api for large files - if ira.db_datas: - out = base64.decodestring(ira.db_datas) - else: - out = '' - return out - elif boo.type == 'db': - # We do an explicit query, to avoid type transformations. - cr.execute('SELECT db_datas FROM ir_attachment WHERE id = %s', (ira.id,)) - res = cr.fetchone() - if res: - return res[0] - else: - return '' - elif boo.type == 'realstore': - if not ira.store_fname: - # On a migrated db, some files may have the wrong storage type - # try to fix their directory. - if ira.file_size: - _logger.warning("ir.attachment #%d does not have a filename, trying the name." %ira.id) - # sfname = ira.name - fpath = os.path.join(boo.path,ira.store_fname or ira.name) - if os.path.exists(fpath): - return file(fpath,'rb').read() - elif not ira.store_fname: - return None - else: - raise IOError(errno.ENOENT, "File not found: %s." % fpath) - - elif boo.type == 'virtual': - raise ValueError('Virtual storage does not support static file(s).') - - else: - raise TypeError("No %s storage!" % boo.type) + return nodefd_db(file_node, ira_browse=ira, mode=mode) def set_data(self, cr, uid, id, file_node, data, context=None, fil_obj=None): """ store the data. @@ -540,68 +213,11 @@ class document_storage(osv.osv): else: ira = self.pool.get('ir.attachment').browse(cr, uid, file_node.file_id, context=context) - if not boo.online: - raise IOError(errno.EREMOTE, 'Medium offline.') - - if boo.readonly: - raise IOError(errno.EPERM, "Readonly medium.") - _logger.debug( "Store data for ir.attachment #%d." % ira.id) store_fname = None fname = None - if boo.type == 'filestore': - path = boo.path - try: - store_fname = self.__get_random_fname(path) - fname = os.path.join(path, store_fname) - fp = open(fname, 'wb') - try: - fp.write(data) - finally: - fp.close() - _logger.debug( "Saved data to %s." % fname) - filesize = len(data) # os.stat(fname).st_size - - # TODO Here, an old file would be left hanging. - - except Exception, e: - _logger.warning( "Cannot save data to %s.", path, exc_info=True) - raise except_orm(_('Error!'), str(e)) - elif boo.type == 'db': - filesize = len(data) - # will that work for huge data? - out = psycopg2.Binary(data) - cr.execute('UPDATE ir_attachment SET db_datas = %s WHERE id = %s', - (out, file_node.file_id)) - elif boo.type == 'db64': - filesize = len(data) - # will that work for huge data? - out = base64.encodestring(data) - cr.execute('UPDATE ir_attachment SET db_datas = %s WHERE id = %s', - (out, file_node.file_id)) - elif boo.type == 'realstore': - try: - path, npath = self.__prepare_realpath(cr, file_node, ira, boo.path, do_create=True) - fname = os.path.join(path, npath[-1]) - fp = open(fname,'wb') - try: - fp.write(data) - finally: - fp.close() - _logger.debug("Saved data to %s.", fname) - filesize = len(data) # os.stat(fname).st_size - store_fname = os.path.join(*npath) - # TODO Here, an old file would be left hanging. - except Exception,e : - _logger.warning("Cannot save data.", exc_info=True) - raise except_orm(_('Error!'), str(e)) - - elif boo.type == 'virtual': - raise ValueError('Virtual storage does not support static file(s).') - - else: - raise TypeError("No %s storage!" % boo.type) - + filesize = len(data) + self.pool.get('ir.attachment').write(cr, uid, [file_node.file_id], {'datas': data.encode('base64')}, context=context) # 2nd phase: store the metadata try: icont = '' @@ -609,22 +225,18 @@ class document_storage(osv.osv): if not mime: mime = "" try: - mime, icont = cntIndex.doIndex(data, ira.datas_fname, - ira.file_type or None, fname) + mime, icont = cntIndex.doIndex(data, ira.datas_fname, ira.file_type or None, fname) except Exception: _logger.debug('Cannot index file.', exc_info=True) pass - try: icont_u = ustr(icont) except UnicodeError: icont_u = '' - # a hack: /assume/ that the calling write operation will not try # to write the fname and size, and update them in the db concurrently. # We cannot use a write() here, because we are already in one. - cr.execute('UPDATE ir_attachment SET store_fname = %s, file_size = %s, index_content = %s, file_type = %s WHERE id = %s', - (store_fname, filesize, icont_u, mime, file_node.file_id)) + cr.execute('UPDATE ir_attachment SET file_size = %s, index_content = %s, file_type = %s WHERE id = %s', (filesize, icont_u, mime, file_node.file_id)) file_node.content_length = filesize file_node.content_type = mime return True @@ -637,40 +249,9 @@ class document_storage(osv.osv): def prepare_unlink(self, cr, uid, storage_bo, fil_bo): """ Before we unlink a file (fil_boo), prepare the list of real files that have to be removed, too. """ - - if not storage_bo.online: - raise IOError(errno.EREMOTE, 'Medium offline.') - - if storage_bo.readonly: - raise IOError(errno.EPERM, "Readonly medium.") - - if storage_bo.type == 'filestore': - fname = fil_bo.store_fname - if not fname: - return None - path = storage_bo.path - return (storage_bo.id, 'file', os.path.join(path, fname)) - elif storage_bo.type in ('db', 'db64'): - return None - elif storage_bo.type == 'realstore': - fname = fil_bo.store_fname - if not fname: - return None - path = storage_bo.path - return ( storage_bo.id, 'file', os.path.join(path, fname)) - else: - raise TypeError("No %s storage!" % storage_bo.type) + pass def do_unlink(self, cr, uid, unres): - for id, ktype, fname in unres: - if ktype == 'file': - try: - os.unlink(fname) - except Exception: - _logger.warning("Cannot remove file %s, please remove it manually.", fname, exc_info=True) - else: - _logger.warning("Unlink unknown key %s." % ktype) - return True def simple_rename(self, cr, uid, file_node, new_name, context=None): @@ -680,38 +261,8 @@ class document_storage(osv.osv): @return the dict of values that can safely be be stored in the db. """ - sbro = self.browse(cr, uid, file_node.storage_id, context=context) - assert sbro, "The file #%d didn't provide storage" % file_node.file_id - - if not sbro.online: - raise IOError(errno.EREMOTE, 'Medium offline.') - - if sbro.readonly: - raise IOError(errno.EPERM, "Readonly medium.") - - if sbro.type in ('filestore', 'db', 'db64'): - # nothing to do for a rename, allow to change the db field - return { 'name': new_name, 'datas_fname': new_name } - elif sbro.type == 'realstore': - ira = self.pool.get('ir.attachment').browse(cr, uid, file_node.file_id, context=context) - - path, npath = self.__prepare_realpath(cr, file_node, ira, sbro.path, do_create=False) - fname = ira.store_fname - - if not fname: - _logger.warning("Trying to rename a non-stored file.") - if fname != os.path.join(*npath): - _logger.warning("Inconsistency to realstore: %s != %s." , fname, repr(npath)) - - oldpath = os.path.join(path, npath[-1]) - newpath = os.path.join(path, new_name) - os.rename(oldpath, newpath) - store_path = npath[:-1] - store_path.append(new_name) - store_fname = os.path.join(*store_path) - return { 'name': new_name, 'datas_fname': new_name, 'store_fname': store_fname } - else: - raise TypeError("No %s storage!" % sbro.type) + # nothing to do for a rename, allow to change the db field + return { 'name': new_name, 'datas_fname': new_name } def simple_move(self, cr, uid, file_node, ndir_bro, context=None): """ A preparation for a file move. @@ -722,65 +273,6 @@ class document_storage(osv.osv): file should move to. @return the dict of values that can safely be be stored in the db. """ - sbro = self.browse(cr, uid, file_node.storage_id, context=context) - assert sbro, "The file #%d didn't provide storage" % file_node.file_id - - if not sbro.online: - raise IOError(errno.EREMOTE, 'Medium offline.') - - if sbro.readonly: - raise IOError(errno.EPERM, "Readonly medium.") - - par = ndir_bro - psto = None - while par: - if par.storage_id: - psto = par.storage_id.id - break - par = par.parent_id - if file_node.storage_id != psto: - _logger.debug('Cannot move file %r from %r to %r.', file_node, file_node.parent, ndir_bro.name) - raise NotImplementedError('Cannot move file(s) between storage media.') - - if sbro.type in ('filestore', 'db', 'db64'): - # nothing to do for a rename, allow to change the db field - return { 'parent_id': ndir_bro.id } - elif sbro.type == 'realstore': - ira = self.pool.get('ir.attachment').browse(cr, uid, file_node.file_id, context=context) - - path, opath = self.__prepare_realpath(cr, file_node, ira, sbro.path, do_create=False) - fname = ira.store_fname - - if not fname: - _logger.warning("Trying to rename a non-stored file.") - if fname != os.path.join(*opath): - _logger.warning("Inconsistency to realstore: %s != %s." , fname, repr(opath)) - - oldpath = os.path.join(path, opath[-1]) - - npath = [sbro.path,] + (ndir_bro.get_full_path() or []) - npath = filter(lambda x: x is not None, npath) - newdir = os.path.join(*npath) - if not os.path.isdir(newdir): - _logger.debug("Must create dir %s.", newdir) - os.makedirs(newdir) - npath.append(opath[-1]) - newpath = os.path.join(*npath) - - _logger.debug("Going to move %s from %s to %s.", opath[-1], oldpath, newpath) - shutil.move(oldpath, newpath) - - store_path = npath[1:] + [opath[-1],] - store_fname = os.path.join(*store_path) - - return { 'store_fname': store_fname } - else: - raise TypeError("No %s storage." % sbro.type) - - -document_storage() - - -#eof + return { 'parent_id': ndir_bro.id } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/nodes.py b/addons/document/nodes.py index aeb2e64fc97..1b4afd31a65 100644 --- a/addons/document/nodes.py +++ b/addons/document/nodes.py @@ -134,7 +134,6 @@ class node_context(object): return self.node_file_class(fbro.name, parent, self, fbro) - class node_descriptor(object): """A file-like interface to the data contents of a node. From fde832955ab4155087893db31aeb9ac3aa7c4466 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Mon, 17 Dec 2012 02:16:01 +0100 Subject: [PATCH 11/36] add file_size bzr revid: al@openerp.com-20121217011601-utt2a0zweaq2c0bt --- openerp/addons/base/ir/ir_attachment.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/openerp/addons/base/ir/ir_attachment.py b/openerp/addons/base/ir/ir_attachment.py index f9502b7a288..014a56380bc 100644 --- a/openerp/addons/base/ir/ir_attachment.py +++ b/openerp/addons/base/ir/ir_attachment.py @@ -132,14 +132,15 @@ class ir_attachment(osv.osv): if context is None: context = {} location = self.pool.get('ir.config_parameter').get_param(cr, uid, 'ir_attachment.location') + file_size = len(value.decode('base64')) if location: attach = self.browse(cr, uid, id, context=context) if attach.store_fname: self._file_delete(cr, uid, location, attach.store_fname) fname = self._file_write(cr, uid, location, value) - self.write(cr, uid, [id], {'store_fname': fname}, context=context) + super(ir_attachment, self).write(cr, uid, [id], {'store_fname': fname, 'file_size': file_size}, context=context) else: - self.write(cr, uid, [id], {'db_datas': value}, context=context) + super(ir_attachment, self).write(cr, uid, [id], {'db_datas': value, 'file_size': file_size}, context=context) return True _name = 'ir.attachment' @@ -156,14 +157,16 @@ class ir_attachment(osv.osv): 'type': fields.selection( [ ('url','URL'), ('binary','Binary'), ], 'Type', help="Binary File or URL", required=True, change_default=True), 'url': fields.char('Url', size=1024), - # al: For the moment I keepi those shitty field names for backward compatibility with document + # al: We keep shitty field names for backward compatibility with document 'datas': fields.function(_data_get, fnct_inv=_data_set, string='File Content', type="binary", nodrop=True), 'store_fname': fields.char('Stored Filename', size=256), 'db_datas': fields.binary('Database Data'), + 'file_size': fields.integer('File Size'), } _defaults = { 'type': 'binary', + 'file_size': 0, 'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'ir.attachment', context=c), } @@ -259,6 +262,8 @@ class ir_attachment(osv.osv): def write(self, cr, uid, ids, vals, context=None): self.check(cr, uid, ids, 'write', context=context, values=vals) + if 'file_size' in vals: + del vals['file_size'] return super(ir_attachment, self).write(cr, uid, ids, vals, context) def copy(self, cr, uid, id, default=None, context=None): @@ -276,14 +281,13 @@ class ir_attachment(osv.osv): def create(self, cr, uid, values, context=None): self.check(cr, uid, [], mode='create', context=context, values=values) + if 'file_size' in values: + del values['file_size'] return super(ir_attachment, self).create(cr, uid, values, context) def action_get(self, cr, uid, context=None): return self.pool.get('ir.actions.act_window').for_xml_id( cr, uid, 'base', 'action_attachment', context=context) -ir_attachment() - - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 76ce1a297275718ce16044bad6d04a9d3f051e76 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Mon, 17 Dec 2012 02:19:58 +0100 Subject: [PATCH 12/36] document partial refactoring and cleanups bzr revid: al@openerp.com-20121217011958-70esu8d6q54fu0zd --- addons/document/__init__.py | 4 - addons/document/__openerp__.py | 3 +- addons/document/directory_content.py | 124 - addons/document/directory_report.py | 64 - addons/document/document.py | 2133 +++++++++++++++-- addons/document/document_data.xml | 12 - addons/document/document_directory.py | 308 --- addons/document/document_storage.py | 278 --- addons/document/document_view.xml | 125 +- addons/document/nodes.py | 1560 ------------ .../document_ftp/ftpserver/abstracted_fs.py | 2 +- 11 files changed, 2015 insertions(+), 2598 deletions(-) delete mode 100644 addons/document/directory_content.py delete mode 100644 addons/document/directory_report.py delete mode 100644 addons/document/document_directory.py delete mode 100644 addons/document/document_storage.py delete mode 100644 addons/document/nodes.py diff --git a/addons/document/__init__.py b/addons/document/__init__.py index 12306b0499b..ab14f808182 100644 --- a/addons/document/__init__.py +++ b/addons/document/__init__.py @@ -21,10 +21,6 @@ import content_index import std_index -import document_storage -import document_directory -import directory_content -import directory_report import document import report import wizard diff --git a/addons/document/__openerp__.py b/addons/document/__openerp__.py index 3e75c7d15e3..501e5566e60 100644 --- a/addons/document/__openerp__.py +++ b/addons/document/__openerp__.py @@ -37,7 +37,7 @@ This is a complete document management system. """, 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', - 'depends': ['process','board', 'knowledge'], + 'depends': ['knowledge'], 'data': [ 'security/document_security.xml', 'document_view.xml', @@ -45,7 +45,6 @@ This is a complete document management system. 'wizard/document_configuration_view.xml', 'security/ir.model.access.csv', 'report/document_report_view.xml', - 'board_document_view.xml', ], 'demo': [ 'document_demo.xml' ], 'test': ['test/document_test2.yml'], diff --git a/addons/document/directory_content.py b/addons/document/directory_content.py deleted file mode 100644 index 5b8ec3ddd93..00000000000 --- a/addons/document/directory_content.py +++ /dev/null @@ -1,124 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 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 . -# -############################################################################## - -from osv import osv, fields - -import netsvc -# import os -import nodes -# import StringIO - -class document_directory_content_type(osv.osv): - _name = 'document.directory.content.type' - _description = 'Directory Content Type' - _columns = { - 'name': fields.char('Content Type', size=64, required=True), - 'code': fields.char('Extension', size=4), - 'active': fields.boolean('Active'), - 'mimetype': fields.char('Mime Type',size=32) - } - _defaults = { - 'active': lambda *args: 1 - } -document_directory_content_type() - -class document_directory_content(osv.osv): - _name = 'document.directory.content' - _description = 'Directory Content' - _order = "sequence" - def _extension_get(self, cr, uid, context=None): - cr.execute('select code,name from document_directory_content_type where active') - res = cr.fetchall() - return res - _columns = { - 'name': fields.char('Content Name', size=64, required=True), - 'sequence': fields.integer('Sequence', size=16), - 'prefix': fields.char('Prefix', size=16), - 'suffix': fields.char('Suffix', size=16), - 'report_id': fields.many2one('ir.actions.report.xml', 'Report'), - 'extension': fields.selection(_extension_get, 'Document Type', required=True, size=4), - 'include_name': fields.boolean('Include Record Name', - help="Check this field if you want that the name of the file to contain the record name." \ - "\nIf set, the directory will have to be a resource one."), - 'directory_id': fields.many2one('document.directory', 'Directory'), - } - _defaults = { - 'extension': lambda *args: '.pdf', - 'sequence': lambda *args: 1, - 'include_name': lambda *args: 1, - } - - def _file_get(self, cr, node, nodename, content, context=None): - """ return the nodes of a parent having a content - The return value MUST be false or a list of node_class objects. - """ - - # TODO: respect the context! - model = node.res_model - if content.include_name and not model: - return False - - res2 = [] - tname = '' - if content.include_name: - content_name = node.displayname or '' - # obj = node.context._dirobj.pool.get(model) - if content_name: - tname = (content.prefix or '') + content_name + (content.suffix or '') + (content.extension or '') - else: - tname = (content.prefix or '') + (content.suffix or '') + (content.extension or '') - if tname.find('/'): - tname=tname.replace('/', '_') - act_id = False - if 'dctx_res_id' in node.dctx: - act_id = node.dctx['dctx_res_id'] - elif hasattr(node, 'res_id'): - act_id = node.res_id - else: - act_id = node.context.context.get('res_id',False) - if not nodename: - n = nodes.node_content(tname, node, node.context,content, act_id=act_id) - res2.append( n) - else: - if nodename == tname: - n = nodes.node_content(tname, node, node.context,content, act_id=act_id) - n.fill_fields(cr) - res2.append(n) - return res2 - - def process_write(self, cr, uid, node, data, context=None): - if node.extension != '.pdf': - raise Exception("Invalid content: %s" % node.extension) - return True - - def process_read(self, cr, uid, node, context=None): - if node.extension != '.pdf': - raise Exception("Invalid content: %s" % node.extension) - report = self.pool.get('ir.actions.report.xml').browse(cr, uid, node.report_id, context=context) - srv = netsvc.Service._services['report.'+report.report_name] - ctx = node.context.context.copy() - ctx.update(node.dctx) - pdf,pdftype = srv.create(cr, uid, [node.act_id,], {}, context=ctx) - return pdf -document_directory_content() - -#eof -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/directory_report.py b/addons/document/directory_report.py deleted file mode 100644 index 202725a1d3f..00000000000 --- a/addons/document/directory_report.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). All Rights Reserved -# $Id$ -# -# 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 . -# -############################################################################## - -from osv import osv, fields - -class ir_action_report_xml(osv.osv): - _name="ir.actions.report.xml" - _inherit ="ir.actions.report.xml" - - def _model_get(self, cr, uid, ids, name, arg, context=None): - res = {} - model_pool = self.pool.get('ir.model') - for data in self.read(cr, uid, ids, ['model']): - model = data.get('model',False) - if model: - model_id =model_pool.search(cr, uid, [('model','=',model)]) - if model_id: - res[data.get('id')] = model_id[0] - else: - res[data.get('id')] = False - return res - - def _model_search(self, cr, uid, obj, name, args, context=None): - if not len(args): - return [] - assert len(args) == 1 and args[0][1] == '=', 'expression is not what we expect: %r' % args - model_id= args[0][2] - if not model_id: - # a deviation from standard behavior: when searching model_id = False - # we return *all* reports, not just ones with empty model. - # One reason is that 'model' is a required field so far - return [] - model = self.pool.get('ir.model').read(cr, uid, [model_id])[0]['model'] - report_id = self.search(cr, uid, [('model','=',model)]) - if not report_id: - return [('id','=','0')] - return [('id','in',report_id)] - - _columns={ - 'model_id' : fields.function(_model_get, fnct_search=_model_search, string='Model Id'), - } - -ir_action_report_xml() - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/document.py b/addons/document/document.py index aeb5f97754a..2ae5d55b7ad 100644 --- a/addons/document/document.py +++ b/addons/document/document.py @@ -18,57 +18,33 @@ # along with this program. If not, see . # ############################################################################## - import base64 -from osv import osv, fields -import os - -#from psycopg2 import Binary -#from tools import config -import tools -from tools.translate import _ -import nodes +import errno import logging +import os +import random +import shutil +import string +import time +from StringIO import StringIO + +import openerp +import netsvc +import pooler +import psycopg2 +import tools +import pooler +from content_index import cntIndex +from osv import osv, fields +from osv.orm import except_orm +from tools.misc import ustr +from tools.translate import _ +from tools.safe_eval import safe_eval _logger = logging.getLogger(__name__) -DMS_ROOT_PATH = tools.config.get('document_path', os.path.join(tools.config['root_path'], 'filestore')) - class document_file(osv.osv): _inherit = 'ir.attachment' - _rec_name = 'name' - - def _attach_parent_id(self, cr, uid, ids=None, context=None): - """Migrate ir.attachments to the document module. - - When the 'document' module is loaded on a db that has had plain attachments, - they will need to be attached to some parent folder, and be converted from - base64-in-bytea to raw-in-bytea format. - This function performs the internal migration, once and forever, for these - attachments. It cannot be done through the nominal ORM maintenance code, - because the root folder is only created after the document_data.xml file - is loaded. - It also establishes the parent_id NOT NULL constraint that ir.attachment - should have had (but would have failed if plain attachments contained null - values). - It also updates the File Size for the previously created attachments. - """ - - parent_id = self.pool.get('document.directory')._get_root_directory(cr,uid) - if not parent_id: - _logger.warning("at _attach_parent_id(), still not able to set the parent!") - return False - - if ids is not None: - raise NotImplementedError("Ids are just there by convention, please do not use it.") - - cr.execute("UPDATE ir_attachment SET parent_id = %s WHERE parent_id IS NULL", (parent_id,)) - - cr.execute("UPDATE ir_attachment SET file_size=length(db_datas) WHERE file_size = 0 and type = 'binary'") - - cr.execute("ALTER TABLE ir_attachment ALTER parent_id SET NOT NULL") - - return True _columns = { # Columns from ir.attachment: @@ -76,50 +52,33 @@ class document_file(osv.osv): 'write_uid': fields.many2one('res.users', 'Last Modification User', readonly=True), # Fields of document: 'user_id': fields.many2one('res.users', 'Owner', select=1), - 'parent_id': fields.many2one('document.directory', 'Directory', select=1, required=True, change_default=True), + 'parent_id': fields.many2one('document.directory', 'Directory', select=1, change_default=True), 'index_content': fields.text('Indexed Content'), 'partner_id':fields.many2one('res.partner', 'Partner', select=1), - 'file_size': fields.integer('File Size', required=True), - 'file_type': fields.char('Content Type', size=128), + 'file_type': fields.char('Content Type'), } _order = "id desc" - def __get_def_directory(self, cr, uid, context=None): - dirobj = self.pool.get('document.directory') - return dirobj._get_root_directory(cr, uid, context) - _defaults = { 'user_id': lambda self, cr, uid, ctx:uid, - 'parent_id': __get_def_directory, - 'file_size': lambda self, cr, uid, ctx:0, } - _sql_constraints = [ - # filename_uniq is not possible in pure SQL - ] - def onchange_file(self, cr, uid, ids, datas_fname=False, context=None): - res = {'value':{}} - if datas_fname: - res['value'].update({'name': datas_fname}) - return res + _sql_constraints = [ + ('filename_unique', 'unique (name,parent_id)', 'The filename must be unique in a directory !'), + ] def check(self, cr, uid, ids, mode, context=None, values=None): """Check access wrt. res_model, relax the rule of ir.attachment parent - With 'document' installed, everybody will have access to attachments of any resources they can *read*. """ - return super(document_file, self).check(cr, uid, ids, mode='read', - context=context, values=values) + return super(document_file, self).check(cr, uid, ids, mode='read', context=context, values=values) def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False): # Grab ids, bypassing 'count' - ids = super(document_file, self).search(cr, uid, args, offset=offset, - limit=limit, order=order, - context=context, count=False) + ids = super(document_file, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=False) if not ids: return 0 if count else [] - # Filter out documents that are in directories that the user is not allowed to read. # Must use pure SQL to avoid access rules exceptions (we want to remove the records, # not fail), and the records have been filtered in parent's search() anyway. @@ -141,79 +100,13 @@ class document_file(osv.osv): default.update(name=_("%s (copy)") % (name)) return super(document_file, self).copy(cr, uid, id, default, context=context) - def write(self, cr, uid, ids, vals, context=None): - result = False - if not isinstance(ids, list): - ids = [ids] - res = self.search(cr, uid, [('id', 'in', ids)]) - if not len(res): - return False - - # if nodes call this write(), they must skip the code below - from_node = context and context.get('__from_node', False) - if (('parent_id' in vals) or ('name' in vals)) and not from_node: - # perhaps this file is renaming or changing directory - nctx = nodes.get_node_context(cr,uid,context={}) - dirobj = self.pool.get('document.directory') - if 'parent_id' in vals: - dbro = dirobj.browse(cr, uid, vals['parent_id'], context=context) - dnode = nctx.get_dir_node(cr, dbro) - else: - dbro = None - dnode = None - ids2 = [] - for fbro in self.browse(cr, uid, ids, context=context): - if ('parent_id' not in vals or fbro.parent_id.id == vals['parent_id']) \ - and ('name' not in vals or fbro.name == vals['name']): - ids2.append(fbro.id) - continue - fnode = nctx.get_file_node(cr, fbro) - res = fnode.move_to(cr, dnode or fnode.parent, vals.get('name', fbro.name), fbro, dbro, True) - if isinstance(res, dict): - vals2 = vals.copy() - vals2.update(res) - wid = res.get('id', fbro.id) - result = super(document_file,self).write(cr,uid,wid,vals2,context=context) - # TODO: how to handle/merge several results? - elif res == True: - ids2.append(fbro.id) - elif res == False: - pass - ids = ids2 - if 'file_size' in vals: # only write that field using direct SQL calls - del vals['file_size'] - if ids and vals: - result = super(document_file,self).write(cr, uid, ids, vals, context=context) - return result - def create(self, cr, uid, vals, context=None): if context is None: context = {} vals['parent_id'] = context.get('parent_id', False) or vals.get('parent_id', False) - if not vals['parent_id']: - vals['parent_id'] = self.pool.get('document.directory')._get_root_directory(cr,uid, context) - if not vals.get('res_id', False) and context.get('default_res_id', False): - vals['res_id'] = context.get('default_res_id', False) - if not vals.get('res_model', False) and context.get('default_res_model', False): - vals['res_model'] = context.get('default_res_model', False) - if vals.get('res_id', False) and vals.get('res_model', False) \ - and not vals.get('partner_id', False): - vals['partner_id'] = self.__get_partner_id(cr, uid, \ - vals['res_model'], vals['res_id'], context) - - datas = None - if vals.get('link', False) : - import urllib - datas = base64.encodestring(urllib.urlopen(vals['link']).read()) - else: - datas = vals.get('datas', False) - - if datas: - vals['file_size'] = len(datas) - else: - if vals.get('file_size'): - del vals['file_size'] - + # take partner from uid + if vals.get('res_id', False) and vals.get('res_model', False) and not vals.get('partner_id', False): + vals['partner_id'] = self.__get_partner_id(cr, uid, vals['res_model'], vals['res_id'], context) return super(document_file, self).create(cr, uid, vals, context) def __get_partner_id(self, cr, uid, res_model, res_id, context=None): @@ -229,4 +122,1970 @@ class document_file(osv.osv): return bro.partner_id.id return False +class document_directory(osv.osv): + _name = 'document.directory' + _description = 'Directory' + _order = 'name' + _columns = { + 'name': fields.char('Name', size=64, required=True, select=1), + 'write_date': fields.datetime('Date Modified', readonly=True), + 'write_uid': fields.many2one('res.users', 'Last Modification User', readonly=True), + 'create_date': fields.datetime('Date Created', readonly=True), + 'create_uid': fields.many2one('res.users', 'Creator', readonly=True), + 'user_id': fields.many2one('res.users', 'Owner'), + 'group_ids': fields.many2many('res.groups', 'document_directory_group_rel', 'item_id', 'group_id', 'Groups'), + 'parent_id': fields.many2one('document.directory', 'Parent Directory', select=1, change_default=True), + 'child_ids': fields.one2many('document.directory', 'parent_id', 'Children'), + 'file_ids': fields.one2many('ir.attachment', 'parent_id', 'Files'), + 'content_ids': fields.one2many('document.directory.content', 'directory_id', 'Virtual Files'), + 'type': fields.selection([ ('directory','Static Directory'), ('ressource','Folders per resource'), ], + 'Type', required=True, select=1, change_default=True, + help="Each directory can either have the type Static or be linked to another resource. A static directory, as with Operating Systems, is the classic directory that can contain a set of files. The directories linked to systems resources automatically possess sub-directories for each of resource types defined in the parent directory."), + 'domain': fields.char('Domain', size=128, help="Use a domain if you want to apply an automatic filter on visible resources."), + 'ressource_type_id': fields.many2one('ir.model', 'Resource model', change_default=True, + help="Select an object here and there will be one folder per record of that resource."), + 'resource_field': fields.many2one('ir.model.fields', 'Name field', help='Field to be used as name on resource directories. If empty, the "name" will be used.'), + 'resource_find_all': fields.boolean('Find all resources', + help="If true, all attachments that match this resource will " \ + " be located. If false, only ones that have this as parent." ), + 'ressource_parent_type_id': fields.many2one('ir.model', 'Parent Model', change_default=True, + help="If you put an object here, this directory template will appear bellow all of these objects. " \ + "Such directories are \"attached\" to the specific model or record, just like attachments. " \ + "Don't put a parent directory if you select a parent model."), + 'ressource_id': fields.integer('Resource ID', + help="Along with Parent Model, this ID attaches this folder to a specific record of Parent Model."), + 'ressource_tree': fields.boolean('Tree Structure', + help="Check this if you want to use the same tree structure as the object selected in the system."), + 'dctx_ids': fields.one2many('document.directory.dctx', 'dir_id', 'Context fields'), + 'company_id': fields.many2one('res.company', 'Company', change_default=True), + } + + _defaults = { + 'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'document.directory', context=c), + 'user_id': lambda self,cr,uid,ctx: uid, + 'domain': '[]', + 'type': 'directory', + 'ressource_id': 0, + 'resource_find_all': True, + } + _sql_constraints = [ + ('dirname_uniq', 'unique (name,parent_id,ressource_id,ressource_parent_type_id)', 'The directory name must be unique !'), + ('no_selfparent', 'check(parent_id <> id)', 'Directory cannot be parent of itself!'), + ] + def name_get(self, cr, uid, ids, context=None): + res = [] + if not self.search(cr,uid,[('id','in',ids)]): + ids = [] + for d in self.browse(cr, uid, ids, context=context): + s = '' + d2 = d + while d2 and d2.parent_id: + s = d2.name + (s and ('/' + s) or '') + d2 = d2.parent_id + res.append((d.id, s or d.name)) + return res + + def get_full_path(self, cr, uid, dir_id, context=None): + """ Return the full path to this directory, in a list, root first + """ + if isinstance(dir_id, (tuple, list)): + assert len(dir_id) == 1 + dir_id = dir_id[0] + + def _parent(dir_id, path): + parent=self.browse(cr, uid, dir_id) + if parent.parent_id and not parent.ressource_parent_type_id: + _parent(parent.parent_id.id,path) + path.append(parent.name) + else: + path.append(parent.name) + return path + path = [] + _parent(dir_id, path) + return path + + def _check_recursion(self, cr, uid, ids, context=None): + level = 100 + while len(ids): + cr.execute('select distinct parent_id from document_directory where id in ('+','.join(map(str,ids))+')') + ids = filter(None, map(lambda x:x[0], cr.fetchall())) + if not level: + return False + level -= 1 + return True + + _constraints = [ + (_check_recursion, 'Error! You cannot create recursive directories.', ['parent_id']) + ] + + def onchange_content_id(self, cr, uid, ids, ressource_type_id): + return {} + + def get_object(self, cr, uid, uri, context=None): + """ Return a node object for the given uri. + This fn merely passes the call to node_context + """ + return get_node_context(cr, uid, context).get_uri(cr, uri) + + def get_node_class(self, cr, uid, ids, dbro=None, dynamic=False, context=None): + """Retrieve the class of nodes for this directory + + This function can be overriden by inherited classes ;) + @param dbro The browse object, if caller already has it + """ + if dbro is None: + dbro = self.browse(cr, uid, ids, context=context) + + if dynamic: + return node_res_obj + elif dbro.type == 'directory': + return node_dir + elif dbro.type == 'ressource': + return node_res_dir + else: + raise ValueError("dir node for %s type.", dbro.type) + + def _prepare_context(self, cr, uid, nctx, context=None): + """ Fill nctx with properties for this database + @param nctx instance of nodes.node_context, to be filled + @param context ORM context (dict) for us + + Note that this function is called *without* a list of ids, + it should behave the same for the whole database (based on the + ORM instance of document.directory). + + Some databases may override this and attach properties to the + node_context. See WebDAV, CalDAV. + """ + return + + def get_dir_permissions(self, cr, uid, ids, context=None): + """Check what permission user 'uid' has on directory 'id' + """ + assert len(ids) == 1 + + res = 0 + for pperms in [('read', 5), ('write', 2), ('unlink', 8)]: + try: + self.check_access_rule(cr, uid, ids, pperms[0], context=context) + res |= pperms[1] + except except_orm: + pass + return res + + def _locate_child(self, cr, uid, root_id, uri, nparent, ncontext): + """ try to locate the node in uri, + Return a tuple (node_dir, remaining_path) + """ + return (node_database(context=ncontext), uri) + + def copy(self, cr, uid, id, default=None, context=None): + if not default: + default ={} + name = self.read(cr, uid, [id])[0]['name'] + default.update(name=_("%s (copy)") % (name)) + return super(document_directory,self).copy(cr, uid, id, default, context=context) + + def _check_duplication(self, cr, uid, vals, ids=None, op='create'): + name=vals.get('name',False) + parent_id=vals.get('parent_id',False) + ressource_parent_type_id=vals.get('ressource_parent_type_id',False) + ressource_id=vals.get('ressource_id',0) + if op=='write': + for directory in self.browse(cr, uid, ids): + if not name: + name=directory.name + if not parent_id: + parent_id=directory.parent_id and directory.parent_id.id or False + # TODO fix algo + if not ressource_parent_type_id: + ressource_parent_type_id=directory.ressource_parent_type_id and directory.ressource_parent_type_id.id or False + if not ressource_id: + ressource_id=directory.ressource_id and directory.ressource_id or 0 + res=self.search(cr,uid,[('id','<>',directory.id),('name','=',name),('parent_id','=',parent_id),('ressource_parent_type_id','=',ressource_parent_type_id),('ressource_id','=',ressource_id)]) + if len(res): + return False + if op=='create': + res=self.search(cr,uid,[('name','=',name),('parent_id','=',parent_id),('ressource_parent_type_id','=',ressource_parent_type_id),('ressource_id','=',ressource_id)]) + if len(res): + return False + return True + + def write(self, cr, uid, ids, vals, context=None): + if not self._check_duplication(cr, uid, vals, ids, op='write'): + raise osv.except_osv(_('ValidateError'), _('Directory name must be unique!')) + return super(document_directory,self).write(cr, uid, ids, vals, context=context) + + def create(self, cr, uid, vals, context=None): + if not self._check_duplication(cr, uid, vals): + raise osv.except_osv(_('ValidateError'), _('Directory name must be unique!')) + newname = vals.get('name',False) + if newname: + for illeg in ('/', '@', '$', '#'): + if illeg in newname: + raise osv.except_osv(_('ValidateError'), _('Directory name contains special characters!')) + return super(document_directory,self).create(cr, uid, vals, context) + +class document_directory_dctx(osv.osv): + """ In order to evaluate dynamic folders, child items could have a limiting + domain expression. For that, their parents will export a context where useful + information will be passed on. + If you define sth like "s_id" = "this.id" at a folder iterating over sales, its + children could have a domain like [('sale_id', = ,dctx_s_id )] + This system should be used recursively, that is, parent dynamic context will be + appended to all children down the tree. + """ + _name = 'document.directory.dctx' + _description = 'Directory Dynamic Context' + _columns = { + 'dir_id': fields.many2one('document.directory', 'Directory', required=True, ondelete="cascade"), + 'field': fields.char('Field', size=20, required=True, select=1, help="The name of the field. Note that the prefix \"dctx_\" will be prepended to what is typed here."), + 'expr': fields.char('Expression', size=64, required=True, help="A python expression used to evaluate the field.\n" + \ + "You can use 'dir_id' for current dir, 'res_id', 'res_model' as a reference to the current record, in dynamic folders"), + } + +class document_directory_content_type(osv.osv): + _name = 'document.directory.content.type' + _description = 'Directory Content Type' + _columns = { + 'name': fields.char('Content Type', size=64, required=True), + 'code': fields.char('Extension', size=4), + 'active': fields.boolean('Active'), + 'mimetype': fields.char('Mime Type',size=32) + } + _defaults = { + 'active': lambda *args: 1 + } + +class document_directory_content(osv.osv): + _name = 'document.directory.content' + _description = 'Directory Content' + _order = "sequence" + + def _extension_get(self, cr, uid, context=None): + cr.execute('select code,name from document_directory_content_type where active') + res = cr.fetchall() + return res + + _columns = { + 'name': fields.char('Content Name', size=64, required=True), + 'sequence': fields.integer('Sequence', size=16), + 'prefix': fields.char('Prefix', size=16), + 'suffix': fields.char('Suffix', size=16), + 'report_id': fields.many2one('ir.actions.report.xml', 'Report'), + 'extension': fields.selection(_extension_get, 'Document Type', required=True, size=4), + 'include_name': fields.boolean('Include Record Name', + help="Check this field if you want that the name of the file to contain the record name." \ + "\nIf set, the directory will have to be a resource one."), + 'directory_id': fields.many2one('document.directory', 'Directory'), + } + _defaults = { + 'extension': lambda *args: '.pdf', + 'sequence': lambda *args: 1, + 'include_name': lambda *args: 1, + } + + def _file_get(self, cr, node, nodename, content, context=None): + """ return the nodes of a parent having a content + The return value MUST be false or a list of node_class objects. + """ + + # TODO: respect the context! + model = node.res_model + if content.include_name and not model: + return False + + res2 = [] + tname = '' + if content.include_name: + content_name = node.displayname or '' + # obj = node.context._dirobj.pool.get(model) + if content_name: + tname = (content.prefix or '') + content_name + (content.suffix or '') + (content.extension or '') + else: + tname = (content.prefix or '') + (content.suffix or '') + (content.extension or '') + if tname.find('/'): + tname=tname.replace('/', '_') + act_id = False + if 'dctx_res_id' in node.dctx: + act_id = node.dctx['dctx_res_id'] + elif hasattr(node, 'res_id'): + act_id = node.res_id + else: + act_id = node.context.context.get('res_id',False) + if not nodename: + n = node_content(tname, node, node.context,content, act_id=act_id) + res2.append( n) + else: + if nodename == tname: + n = node_content(tname, node, node.context,content, act_id=act_id) + n.fill_fields(cr) + res2.append(n) + return res2 + + def process_write(self, cr, uid, node, data, context=None): + if node.extension != '.pdf': + raise Exception("Invalid content: %s" % node.extension) + return True + + def process_read(self, cr, uid, node, context=None): + if node.extension != '.pdf': + raise Exception("Invalid content: %s" % node.extension) + report = self.pool.get('ir.actions.report.xml').browse(cr, uid, node.report_id, context=context) + srv = netsvc.Service._services['report.'+report.report_name] + ctx = node.context.context.copy() + ctx.update(node.dctx) + pdf,pdftype = srv.create(cr, uid, [node.act_id,], {}, context=ctx) + return pdf + +class ir_action_report_xml(osv.osv): + _name="ir.actions.report.xml" + _inherit ="ir.actions.report.xml" + + def _model_get(self, cr, uid, ids, name, arg, context=None): + res = {} + model_pool = self.pool.get('ir.model') + for data in self.read(cr, uid, ids, ['model']): + model = data.get('model',False) + if model: + model_id =model_pool.search(cr, uid, [('model','=',model)]) + if model_id: + res[data.get('id')] = model_id[0] + else: + res[data.get('id')] = False + return res + + def _model_search(self, cr, uid, obj, name, args, context=None): + if not len(args): + return [] + assert len(args) == 1 and args[0][1] == '=', 'expression is not what we expect: %r' % args + model_id= args[0][2] + if not model_id: + # a deviation from standard behavior: when searching model_id = False + # we return *all* reports, not just ones with empty model. + # One reason is that 'model' is a required field so far + return [] + model = self.pool.get('ir.model').read(cr, uid, [model_id])[0]['model'] + report_id = self.search(cr, uid, [('model','=',model)]) + if not report_id: + return [('id','=','0')] + return [('id','in',report_id)] + + _columns={ + 'model_id' : fields.function(_model_get, fnct_search=_model_search, string='Model Id'), + } + +class document_storage(osv.osv): + """ The primary object for data storage. Deprecated. """ + _name = 'document.storage' + _description = 'Storage Media' + + def get_data(self, cr, uid, id, file_node, context=None, fil_obj=None): + """ retrieve the contents of some file_node having storage_id = id + optionally, fil_obj could point to the browse object of the file + (ir.attachment) + """ + boo = self.browse(cr, uid, id, context=context) + if fil_obj: + ira = fil_obj + else: + ira = self.pool.get('ir.attachment').browse(cr, uid, file_node.file_id, context=context) + data = ira.datas + if data: + out = data.decode('base64') + else: + out = '' + return out + + def get_file(self, cr, uid, id, file_node, mode, context=None): + """ Return a file-like object for the contents of some node + """ + if context is None: + context = {} + boo = self.browse(cr, uid, id, context=context) + + ira = self.pool.get('ir.attachment').browse(cr, uid, file_node.file_id, context=context) + return nodefd_db(file_node, ira_browse=ira, mode=mode) + + def set_data(self, cr, uid, id, file_node, data, context=None, fil_obj=None): + """ store the data. + This function MUST be used from an ir.attachment. It wouldn't make sense + to store things persistently for other types (dynamic). + """ + boo = self.browse(cr, uid, id, context=context) + if fil_obj: + ira = fil_obj + else: + ira = self.pool.get('ir.attachment').browse(cr, uid, file_node.file_id, context=context) + + _logger.debug( "Store data for ir.attachment #%d." % ira.id) + store_fname = None + fname = None + filesize = len(data) + self.pool.get('ir.attachment').write(cr, uid, [file_node.file_id], {'datas': data.encode('base64')}, context=context) + # 2nd phase: store the metadata + try: + icont = '' + mime = ira.file_type + if not mime: + mime = "" + try: + mime, icont = cntIndex.doIndex(data, ira.datas_fname, ira.file_type or None, fname) + except Exception: + _logger.debug('Cannot index file.', exc_info=True) + pass + try: + icont_u = ustr(icont) + except UnicodeError: + icont_u = '' + # a hack: /assume/ that the calling write operation will not try + # to write the fname and size, and update them in the db concurrently. + # We cannot use a write() here, because we are already in one. + cr.execute('UPDATE ir_attachment SET index_content = %s, file_type = %s WHERE id = %s', (filesize, icont_u, mime, file_node.file_id)) + file_node.content_length = filesize + file_node.content_type = mime + return True + except Exception, e : + self._logger.warning("Cannot save data.", exc_info=True) + # should we really rollback once we have written the actual data? + # at the db case (only), that rollback would be safe + raise except_orm(_('Error at doc write!'), str(e)) + +def _str2time(cre): + """ Convert a string with time representation (from db) into time (float) + + Note: a place to fix if datetime is used in db. + """ + if not cre: + return time.time() + frac = 0.0 + if isinstance(cre, basestring) and '.' in cre: + fdot = cre.find('.') + frac = float(cre[fdot:]) + cre = cre[:fdot] + return time.mktime(time.strptime(cre,'%Y-%m-%d %H:%M:%S')) + frac + +def get_node_context(cr, uid, context): + return node_context(cr, uid, context) + +# +# An object that represent an uri +# path: the uri of the object +# content: the Content it belongs to (_print.pdf) +# type: content or collection +# content: objct = res.partner +# collection: object = directory, object2 = res.partner +# file: objct = ir.attachement +# root: if we are at the first directory of a ressource +# + +class node_context(object): + """ This is the root node, representing access to some particular context + + A context is a set of persistent data, which may influence the structure + of the nodes. All other transient information during a data query should + be passed down with function arguments. + """ + cached_roots = {} + node_file_class = None + + def __init__(self, cr, uid, context=None): + self.dbname = cr.dbname + self.uid = uid + self.context = context + if context is None: + context = {} + context['uid'] = uid + self._dirobj = pooler.get_pool(cr.dbname).get('document.directory') + self.node_file_class = node_file + self.extra_ctx = {} # Extra keys for context, that do _not_ trigger inequality + assert self._dirobj + self._dirobj._prepare_context(cr, uid, self, context=context) + self.rootdir = False #self._dirobj._get_root_directory(cr,uid,context) + + def __eq__(self, other): + if not type(other) == node_context: + return False + if self.dbname != other.dbname: + return False + if self.uid != other.uid: + return False + if self.context != other.context: + return False + if self.rootdir != other.rootdir: + return False + return True + + def __ne__(self, other): + return not self.__eq__(other) + + def get(self, name, default=None): + return self.context.get(name, default) + + def get_uri(self, cr, uri): + """ Although this fn passes back to doc.dir, it is needed since + it is a potential caching point. + """ + (ndir, duri) = self._dirobj._locate_child(cr, self.uid, self.rootdir, uri, None, self) + while duri: + ndir = ndir.child(cr, duri[0]) + if not ndir: + return False + duri = duri[1:] + return ndir + + def get_dir_node(self, cr, dbro): + """Create (or locate) a node for a directory + @param dbro a browse object of document.directory + """ + + fullpath = dbro.get_full_path(context=self.context) + klass = dbro.get_node_class(dbro, context=self.context) + return klass(fullpath, None ,self, dbro) + + def get_file_node(self, cr, fbro): + """ Create or locate a node for a static file + @param fbro a browse object of an ir.attachment + """ + parent = None + if fbro.parent_id: + parent = self.get_dir_node(cr, fbro.parent_id) + + return self.node_file_class(fbro.name, parent, self, fbro) + +class node_class(object): + """ this is a superclass for our inodes + It is an API for all code that wants to access the document files. + Nodes have attributes which contain usual file properties + """ + our_type = 'baseclass' + DAV_PROPS = None + DAV_M_NS = None + + def __init__(self, path, parent, context): + assert isinstance(context,node_context) + assert (not parent ) or isinstance(parent,node_class) + self.path = path + self.context = context + self.type=self.our_type + self.parent = parent + self.uidperms = 5 # computed permissions for our uid, in unix bits + self.mimetype = 'application/octet-stream' + self.create_date = None + self.write_date = None + self.unixperms = 0660 + self.uuser = 'user' + self.ugroup = 'group' + self.content_length = 0 + # dynamic context: + self.dctx = {} + if parent: + self.dctx = parent.dctx.copy() + self.displayname = 'Object' + + def __eq__(self, other): + return NotImplemented + + def __ne__(self, other): + return not self.__eq__(other) + + def full_path(self): + """ Return the components of the full path for some + node. + The returned list only contains the names of nodes. + """ + if self.parent: + s = self.parent.full_path() + else: + s = [] + if isinstance(self.path,list): + s+=self.path + elif self.path is None: + s.append('') + else: + s.append(self.path) + return s #map(lambda x: '/' +x, s) + + def __repr__(self): + return "%s@/%s" % (self.our_type, '/'.join(self.full_path())) + + def children(self, cr, domain=None): + print "node_class.children()" + return [] #stub + + def child(self, cr, name, domain=None): + print "node_class.child()" + return None + + def get_uri(self, cr, uri): + duri = uri + ndir = self + while duri: + ndir = ndir.child(cr, duri[0]) + if not ndir: + return False + duri = duri[1:] + return ndir + + def path_get(self): + print "node_class.path_get()" + return False + + def get_data(self, cr): + raise TypeError('No data for %s.'% self.type) + + def open_data(self, cr, mode): + """ Open a node_descriptor object for this node. + + @param the mode of open, eg 'r', 'w', 'a', like file.open() + + This operation may lock the data for this node (and accross + other node hierarchies), until the descriptor is close()d. If + the node is locked, subsequent opens (depending on mode) may + immediately fail with an exception (which?). + For this class, there is no data, so no implementation. Each + child class that has data should override this. + """ + raise TypeError('No data for %s.' % self.type) + + def get_etag(self, cr): + """ Get a tag, unique per object + modification. + + see. http://tools.ietf.org/html/rfc2616#section-13.3.3 """ + return '"%s-%s"' % (self._get_ttag(cr), self._get_wtag(cr)) + + def _get_wtag(self, cr): + """ Return the modification time as a unique, compact string """ + return str(_str2time(self.write_date)).replace('.','') + + def _get_ttag(self, cr): + """ Get a unique tag for this type/id of object. + Must be overriden, so that each node is uniquely identified. + """ + print "node_class.get_ttag()",self + raise NotImplementedError("get_ttag stub()") + + def get_dav_props(self, cr): + """ If this class has special behaviour for GroupDAV etc, export + its capabilities """ + # This fn is placed here rather than WebDAV, because we want the + # baseclass methods to apply to all node subclasses + return self.DAV_PROPS or {} + + def match_dav_eprop(self, cr, match, ns, prop): + res = self.get_dav_eprop(cr, ns, prop) + if res == match: + return True + return False + + def get_dav_eprop(self, cr, ns, prop): + if not self.DAV_M_NS: + return None + + if self.DAV_M_NS.has_key(ns): + prefix = self.DAV_M_NS[ns] + else: + _logger.debug('No namespace: %s ("%s").',ns, prop) + return None + + mname = prefix + "_" + prop.replace('-','_') + + if not hasattr(self, mname): + return None + + try: + m = getattr(self, mname) + r = m(cr) + return r + except AttributeError: + _logger.debug('The property %s is not supported.' % prop, exc_info=True) + return None + + def get_dav_resourcetype(self, cr): + """ Get the DAV resource type. + + Is here because some nodes may exhibit special behaviour, like + CalDAV/GroupDAV collections + """ + raise NotImplementedError + + def move_to(self, cr, ndir_node, new_name=False, fil_obj=None, ndir_obj=None, in_write=False): + """ Move this node to a new parent directory. + @param ndir_node the collection that this node should be moved under + @param new_name a name to rename this node to. If omitted, the old + name is preserved + @param fil_obj, can be None, is the browse object for the file, + if already available. + @param ndir_obj must be the browse object to the new doc.directory + location, where this node should be moved to. + in_write: When called by write(), we shouldn't attempt to write the + object, but instead return the dict of vals (avoid re-entrance). + If false, we should write all data to the object, here, as if the + caller won't do anything after calling move_to() + + Return value: + True: the node is moved, the caller can update other values, too. + False: the node is either removed or fully updated, the caller + must discard the fil_obj, not attempt to write any more to it. + dict: values to write back to the object. *May* contain a new id! + + Depending on src and target storage, implementations of this function + could do various things. + Should also consider node<->content, dir<->dir moves etc. + + Move operations, as instructed from APIs (e.g. request from DAV) could + use this function. + """ + raise NotImplementedError(repr(self)) + + def create_child(self, cr, path, data=None): + """ Create a regular file under this node + """ + _logger.warning("Attempted to create a file under %r, not possible.", self) + raise IOError(errno.EPERM, "Not allowed to create file(s) here.") + + def create_child_collection(self, cr, objname): + """ Create a child collection (directory) under self + """ + _logger.warning("Attempted to create a collection under %r, not possible.", self) + raise IOError(errno.EPERM, "Not allowed to create folder(s) here.") + + def rm(self, cr): + raise NotImplementedError(repr(self)) + + def rmcol(self, cr): + raise NotImplementedError(repr(self)) + + def get_domain(self, cr, filters): + # TODO Document + return [] + + def check_perms(self, perms): + """ Check the permissions of the current node. + + @param perms either an integers of the bits to check, or + a string with the permission letters + + Permissions of nodes are (in a unix way): + 1, x : allow descend into dir + 2, w : allow write into file, or modification to dir + 4, r : allow read of file, or listing of dir contents + 8, u : allow remove (unlink) + """ + + if isinstance(perms, str): + pe2 = 0 + chars = { 'x': 1, 'w': 2, 'r': 4, 'u': 8 } + for c in perms: + pe2 = pe2 | chars[c] + perms = pe2 + elif isinstance(perms, int): + if perms < 0 or perms > 15: + raise ValueError("Invalid permission bits.") + else: + raise ValueError("Invalid permission attribute.") + + return ((self.uidperms & perms) == perms) + +class node_database(node_class): + """ A node representing the database directory + + """ + our_type = 'database' + def __init__(self, path=None, parent=False, context=None): + if path is None: + path = [] + super(node_database,self).__init__(path, parent, context) + self.unixperms = 040750 + self.uidperms = 5 + + def children(self, cr, domain=None): + res = self._child_get(cr, domain=domain) + self._file_get(cr) + return res + + def child(self, cr, name, domain=None): + res = self._child_get(cr, name, domain=None) + if res: + return res[0] + res = self._file_get(cr,name) + if res: + return res[0] + return None + + def _child_get(self, cr, name=False, domain=None): + dirobj = self.context._dirobj + uid = self.context.uid + ctx = self.context.context.copy() + ctx.update(self.dctx) + where = [('parent_id','=', False), ('ressource_parent_type_id','=',False)] + if name: + where.append(('name','=',name)) + is_allowed = self.check_perms(1) + else: + is_allowed = self.check_perms(5) + + if not is_allowed: + raise IOError(errno.EPERM, "Permission into directory denied.") + + if domain: + where = where + domain + ids = dirobj.search(cr, uid, where, context=ctx) + res = [] + for dirr in dirobj.browse(cr, uid, ids, context=ctx): + klass = dirr.get_node_class(dirr, context=ctx) + res.append(klass(dirr.name, self, self.context,dirr)) + + return res + + def _file_get(self, cr, nodename=False): + res = [] + return res + + def _get_ttag(self, cr): + return 'db-%s' % cr.dbname + +def mkdosname(company_name, default='noname'): + """ convert a string to a dos-like name""" + if not company_name: + return default + badchars = ' !@#$%^`~*()+={}[];:\'"/?.<>' + n = '' + for c in company_name[:8]: + n += (c in badchars and '_') or c + return n + +def _uid2unixperms(perms, has_owner): + """ Convert the uidperms and the owner flag to full unix bits + """ + res = 0 + if has_owner: + res |= (perms & 0x07) << 6 + res |= (perms & 0x05) << 3 + elif perms & 0x02: + res |= (perms & 0x07) << 6 + res |= (perms & 0x07) << 3 + else: + res |= (perms & 0x07) << 6 + res |= (perms & 0x05) << 3 + res |= 0x05 + return res + +class node_dir(node_database): + our_type = 'collection' + def __init__(self, path, parent, context, dirr, dctx=None): + super(node_dir,self).__init__(path, parent,context) + self.dir_id = dirr and dirr.id or False + #todo: more info from dirr + self.mimetype = 'application/x-directory' + # 'httpd/unix-directory' + self.create_date = dirr and dirr.create_date or False + self.domain = dirr and dirr.domain or [] + self.res_model = dirr and dirr.ressource_type_id and dirr.ressource_type_id.model or False + # TODO: the write date should be MAX(file.write).. + self.write_date = dirr and (dirr.write_date or dirr.create_date) or False + self.content_length = 0 + try: + self.uuser = (dirr.user_id and dirr.user_id.login) or 'nobody' + except Exception: + self.uuser = 'nobody' + self.ugroup = mkdosname(dirr.company_id and dirr.company_id.name, default='nogroup') + self.uidperms = dirr.get_dir_permissions() + self.unixperms = 040000 | _uid2unixperms(self.uidperms, dirr and dirr.user_id) + if dctx: + self.dctx.update(dctx) + dc2 = self.context.context + dc2.update(self.dctx) + dc2['dir_id'] = self.dir_id + self.displayname = dirr and dirr.name or False + if dirr and dirr.dctx_ids: + for dfld in dirr.dctx_ids: + try: + self.dctx['dctx_' + dfld.field] = safe_eval(dfld.expr,dc2) + except Exception,e: + print "Cannot eval %s." % dfld.expr + print e + pass + + def __eq__(self, other): + if type(self) != type(other): + return False + if not self.context == other.context: + return False + # Two directory nodes, for the same document.directory, may have a + # different context! (dynamic folders) + if self.dctx != other.dctx: + return False + return self.dir_id == other.dir_id + + def get_data(self, cr): + #res = '' + #for child in self.children(cr): + # res += child.get_data(cr) + return None + + def _file_get(self, cr, nodename=False): + res = super(node_dir,self)._file_get(cr, nodename) + + is_allowed = self.check_perms(nodename and 1 or 5) + if not is_allowed: + raise IOError(errno.EPERM, "Permission into directory denied.") + + cntobj = self.context._dirobj.pool.get('document.directory.content') + uid = self.context.uid + ctx = self.context.context.copy() + ctx.update(self.dctx) + where = [('directory_id','=',self.dir_id) ] + ids = cntobj.search(cr, uid, where, context=ctx) + for content in cntobj.browse(cr, uid, ids, context=ctx): + res3 = cntobj._file_get(cr, self, nodename, content) + if res3: + res.extend(res3) + + return res + + def _child_get(self, cr, name=None, domain=None): + dirobj = self.context._dirobj + uid = self.context.uid + ctx = self.context.context.copy() + ctx.update(self.dctx) + where = [('parent_id','=',self.dir_id)] + if name: + where.append(('name','=',name)) + is_allowed = self.check_perms(1) + else: + is_allowed = self.check_perms(5) + + if not is_allowed: + raise IOError(errno.EPERM, "Permission into directory denied.") + + if not domain: + domain = [] + + where2 = where + domain + [('ressource_parent_type_id','=',False)] + ids = dirobj.search(cr, uid, where2, context=ctx) + res = [] + for dirr in dirobj.browse(cr, uid, ids, context=ctx): + klass = dirr.get_node_class(dirr, context=ctx) + res.append(klass(dirr.name, self, self.context,dirr)) + + # Static directories should never return files with res_model/res_id + # because static dirs are /never/ related to a record. + # In fact, files related to some model and parented by the root dir + # (the default), will NOT be accessible in the node system unless + # a resource folder for that model exists (with resource_find_all=True). + # Having resource attachments in a common folder is bad practice, + # because they would be visible to all users, and their names may be + # the same, conflicting. + where += [('res_model', '=', False)] + fil_obj = dirobj.pool.get('ir.attachment') + ids = fil_obj.search(cr, uid, where, context=ctx) + if ids: + for fil in fil_obj.browse(cr, uid, ids, context=ctx): + klass = self.context.node_file_class + res.append(klass(fil.name, self, self.context, fil)) + return res + + def rmcol(self, cr): + uid = self.context.uid + directory = self.context._dirobj.browse(cr, uid, self.dir_id) + res = False + if not directory: + raise OSError(2, 'Not such file or directory.') + if not self.check_perms('u'): + raise IOError(errno.EPERM,"Permission denied.") + + if directory._table_name=='document.directory': + if self.children(cr): + raise OSError(39, 'Directory not empty.') + res = self.context._dirobj.unlink(cr, uid, [directory.id]) + else: + raise OSError(1, 'Operation is not permitted.') + return res + + def create_child_collection(self, cr, objname): + object2 = False + if not self.check_perms(2): + raise IOError(errno.EPERM,"Permission denied.") + + dirobj = self.context._dirobj + uid = self.context.uid + ctx = self.context.context.copy() + ctx.update(self.dctx) + obj = dirobj.browse(cr, uid, self.dir_id) + if obj and (obj.type == 'ressource') and not object2: + raise OSError(1, 'Operation is not permitted.') + + #objname = uri2[-1] + val = { + 'name': objname, + 'ressource_parent_type_id': obj and obj.ressource_type_id.id or False, + 'ressource_id': object2 and object2.id or False, + 'parent_id' : obj and obj.id or False + } + + return dirobj.create(cr, uid, val) + + def create_child(self, cr, path, data=None): + """ API function to create a child file object and node + Return the node_* created + """ + if not self.check_perms(2): + raise IOError(errno.EPERM,"Permission denied.") + + dirobj = self.context._dirobj + uid = self.context.uid + ctx = self.context.context.copy() + ctx.update(self.dctx) + fil_obj=dirobj.pool.get('ir.attachment') + val = { + 'name': path, + 'datas_fname': path, + 'parent_id': self.dir_id, + # Datas are not set here + } + + fil_id = fil_obj.create(cr, uid, val, context=ctx) + fil = fil_obj.browse(cr, uid, fil_id, context=ctx) + fnode = node_file(path, self, self.context, fil) + if data is not None: + fnode.set_data(cr, data, fil) + return fnode + + def _get_ttag(self, cr): + return 'dir-%d' % self.dir_id + + def move_to(self, cr, ndir_node, new_name=False, fil_obj=None, ndir_obj=None, in_write=False): + """ Move directory. This operation is simple, since the present node is + only used for static, simple directories. + Note /may/ be called with ndir_node = None, to rename the document root. + """ + if ndir_node and (ndir_node.context != self.context): + raise NotImplementedError("Cannot move directories between contexts.") + + if (not self.check_perms('u')) or (not ndir_node.check_perms('w')): + raise IOError(errno.EPERM,"Permission denied.") + + dir_obj = self.context._dirobj + if not fil_obj: + dbro = dir_obj.browse(cr, self.context.uid, self.dir_id, context=self.context.context) + else: + dbro = dir_obj + assert dbro.id == self.dir_id + + if not dbro: + raise IndexError("Cannot locate dir %d", self.dir_id) + + if (not self.parent) and ndir_node: + if not dbro.parent_id: + raise IOError(errno.EPERM, "Cannot move the root directory!") + self.parent = self.context.get_dir_node(cr, dbro.parent_id) + assert self.parent + + if self.parent != ndir_node: + _logger.debug('Cannot move dir %r from %r to %r.', self, self.parent, ndir_node) + raise NotImplementedError('Cannot move dir to another dir.') + + ret = {} + if new_name and (new_name != dbro.name): + if ndir_node.child(cr, new_name): + raise IOError(errno.EEXIST, "Destination path already exists.") + ret['name'] = new_name + + del dbro + + if not in_write: + # We have to update the data ourselves + if ret: + ctx = self.context.context.copy() + ctx['__from_node'] = True + dir_obj.write(cr, self.context.uid, [self.dir_id,], ret, ctx) + ret = True + + return ret + +class node_res_dir(node_class): + """ A folder containing dynamic folders + A special sibling to node_dir, which does only contain dynamically + created folders foreach resource in the foreign model. + All folders should be of type node_res_obj and merely behave like + node_dirs (with limited domain). + """ + our_type = 'collection' + res_obj_class = None + def __init__(self, path, parent, context, dirr, dctx=None ): + super(node_res_dir,self).__init__(path, parent, context) + self.dir_id = dirr.id + #todo: more info from dirr + self.mimetype = 'application/x-directory' + # 'httpd/unix-directory' + self.create_date = dirr.create_date + # TODO: the write date should be MAX(file.write).. + self.write_date = dirr.write_date or dirr.create_date + self.content_length = 0 + try: + self.uuser = (dirr.user_id and dirr.user_id.login) or 'nobody' + except Exception: + self.uuser = 'nobody' + self.ugroup = mkdosname(dirr.company_id and dirr.company_id.name, default='nogroup') + self.uidperms = dirr.get_dir_permissions() + self.unixperms = 040000 | _uid2unixperms(self.uidperms, dirr and dirr.user_id) + self.res_model = dirr.ressource_type_id and dirr.ressource_type_id.model or False + self.resm_id = dirr.ressource_id + self.res_find_all = dirr.resource_find_all + self.namefield = dirr.resource_field.name or 'name' + self.displayname = dirr.name + # Important: the domain is evaluated using the *parent* dctx! + self.domain = dirr.domain + self.ressource_tree = dirr.ressource_tree + # and then, we add our own vars in the dctx: + if dctx: + self.dctx.update(dctx) + + # and then, we prepare a dctx dict, for deferred evaluation: + self.dctx_dict = {} + for dfld in dirr.dctx_ids: + self.dctx_dict['dctx_' + dfld.field] = dfld.expr + + def __eq__(self, other): + if type(self) != type(other): + return False + if not self.context == other.context: + return False + # Two nodes, for the same document.directory, may have a + # different context! (dynamic folders) + if self.dctx != other.dctx: + return False + return self.dir_id == other.dir_id + + def children(self, cr, domain=None): + return self._child_get(cr, domain=domain) + + def child(self, cr, name, domain=None): + res = self._child_get(cr, name, domain=domain) + if res: + return res[0] + return None + + def _child_get(self, cr, name=None, domain=None): + """ return virtual children of resource, based on the + foreign object. + + Note that many objects use NULL for a name, so we should + better call the name_search(),name_get() set of methods + """ + obj = self.context._dirobj.pool.get(self.res_model) + if not obj: + return [] + dirobj = self.context._dirobj + uid = self.context.uid + ctx = self.context.context.copy() + ctx.update(self.dctx) + ctx.update(self.context.extra_ctx) + where = [] + if self.domain: + app = safe_eval(self.domain, ctx) + if not app: + pass + elif isinstance(app, list): + where.extend(app) + elif isinstance(app, tuple): + where.append(app) + else: + raise RuntimeError("Incorrect domain expr: %s." % self.domain) + if self.resm_id: + where.append(('id','=',self.resm_id)) + + if name: + # The =like character will match underscores against any characters + # including the special ones that couldn't exist in a FTP/DAV request + where.append((self.namefield,'=like',name.replace('\\','\\\\'))) + is_allowed = self.check_perms(1) + else: + is_allowed = self.check_perms(5) + + if not is_allowed: + raise IOError(errno.EPERM,"Permission denied.") + + # print "Where clause for %s" % self.res_model, where + if self.ressource_tree: + object2 = False + if self.resm_id: + object2 = dirobj.pool.get(self.res_model).browse(cr, uid, self.resm_id) or False + if obj._parent_name in obj.fields_get(cr, uid): + where.append((obj._parent_name,'=',object2 and object2.id or False)) + + resids = obj.search(cr, uid, where, context=ctx) + res = [] + for bo in obj.browse(cr, uid, resids, context=ctx): + if not bo: + continue + res_name = getattr(bo, self.namefield) + if not res_name: + continue + # Yes! we can't do better but skip nameless records. + + # Escape the name for characters not supported in filenames + res_name = res_name.replace('/','_') # any other weird char? + + if name and (res_name != ustr(name)): + # we have matched _ to any character, but we only meant to match + # the special ones. + # Eg. 'a_c' will find 'abc', 'a/c', 'a_c', may only + # return 'a/c' and 'a_c' + continue + + res.append(self.res_obj_class(res_name, self.dir_id, self, self.context, self.res_model, bo)) + return res + + def _get_ttag(self, cr): + return 'rdir-%d' % self.dir_id + +class node_res_obj(node_class): + """ A dynamically created folder. + A special sibling to node_dir, which does only contain dynamically + created folders foreach resource in the foreign model. + All folders should be of type node_res_obj and merely behave like + node_dirs (with limited domain). + """ + our_type = 'collection' + def __init__(self, path, dir_id, parent, context, res_model, res_bo, res_id=None): + super(node_res_obj,self).__init__(path, parent,context) + assert parent + #todo: more info from dirr + self.dir_id = dir_id + self.mimetype = 'application/x-directory' + # 'httpd/unix-directory' + self.create_date = parent.create_date + # TODO: the write date should be MAX(file.write).. + self.write_date = parent.write_date + self.content_length = 0 + self.uidperms = parent.uidperms & 15 + self.unixperms = 040000 | _uid2unixperms(self.uidperms, True) + self.uuser = parent.uuser + self.ugroup = parent.ugroup + self.res_model = res_model + self.domain = parent.domain + self.displayname = path + self.dctx_dict = parent.dctx_dict + if isinstance(parent, node_res_dir): + self.res_find_all = parent.res_find_all + else: + self.res_find_all = False + if res_bo: + self.res_id = res_bo.id + dc2 = self.context.context.copy() + dc2.update(self.dctx) + dc2['res_model'] = res_model + dc2['res_id'] = res_bo.id + dc2['this'] = res_bo + for fld,expr in self.dctx_dict.items(): + try: + self.dctx[fld] = safe_eval(expr, dc2) + except Exception,e: + print "Cannot eval %s for %s." % (expr, fld) + print e + pass + else: + self.res_id = res_id + + def __eq__(self, other): + if type(self) != type(other): + return False + if not self.context == other.context: + return False + if not self.res_model == other.res_model: + return False + if not self.res_id == other.res_id: + return False + if self.domain != other.domain: + return False + if self.res_find_all != other.res_find_all: + return False + if self.dctx != other.dctx: + return False + return self.dir_id == other.dir_id + + def children(self, cr, domain=None): + return self._child_get(cr, domain=domain) + self._file_get(cr) + + def child(self, cr, name, domain=None): + res = self._child_get(cr, name, domain=domain) + if res: + return res[0] + res = self._file_get(cr, name) + if res: + return res[0] + return None + + def _file_get(self, cr, nodename=False): + res = [] + is_allowed = self.check_perms((nodename and 1) or 5) + if not is_allowed: + raise IOError(errno.EPERM,"Permission denied.") + + cntobj = self.context._dirobj.pool.get('document.directory.content') + uid = self.context.uid + ctx = self.context.context.copy() + ctx.update(self.dctx) + where = [('directory_id','=',self.dir_id) ] + #if self.domain: + # where.extend(self.domain) + # print "res_obj file_get clause", where + ids = cntobj.search(cr, uid, where, context=ctx) + for content in cntobj.browse(cr, uid, ids, context=ctx): + res3 = cntobj._file_get(cr, self, nodename, content, context=ctx) + if res3: + res.extend(res3) + + return res + + def get_dav_props_DEPR(self, cr): + # Deprecated! (but document_ics must be cleaned, first) + res = {} + cntobj = self.context._dirobj.pool.get('document.directory.content') + uid = self.context.uid + ctx = self.context.context.copy() + ctx.update(self.dctx) + where = [('directory_id','=',self.dir_id) ] + ids = cntobj.search(cr, uid, where, context=ctx) + for content in cntobj.browse(cr, uid, ids, context=ctx): + if content.extension == '.ics': # FIXME: call the content class! + res['http://groupdav.org/'] = ('resourcetype',) + return res + + def get_dav_eprop_DEPR(self, cr, ns, prop): + # Deprecated! + if ns != 'http://groupdav.org/' or prop != 'resourcetype': + _logger.warning("Who asks for %s:%s?" % (ns, prop)) + return None + cntobj = self.context._dirobj.pool.get('document.directory.content') + uid = self.context.uid + ctx = self.context.context.copy() + ctx.update(self.dctx) + where = [('directory_id','=',self.dir_id) ] + ids = cntobj.search(cr,uid,where,context=ctx) + for content in cntobj.browse(cr, uid, ids, context=ctx): + # TODO: remove relic of GroupDAV + if content.extension == '.ics': # FIXME: call the content class! + return ('vevent-collection','http://groupdav.org/') + return None + + def _child_get(self, cr, name=None, domain=None): + dirobj = self.context._dirobj + + is_allowed = self.check_perms((name and 1) or 5) + if not is_allowed: + raise IOError(errno.EPERM,"Permission denied.") + + uid = self.context.uid + ctx = self.context.context.copy() + ctx.update(self.dctx) + directory = dirobj.browse(cr, uid, self.dir_id) + obj = dirobj.pool.get(self.res_model) + where = [] + res = [] + if name: + where.append(('name','=',name)) + + # Directory Structure display in tree structure + if self.res_id and directory.ressource_tree: + where1 = [] + if name: + where1.append(('name','=like',name.replace('\\','\\\\'))) + if obj._parent_name in obj.fields_get(cr, uid): + where1.append((obj._parent_name, '=', self.res_id)) + namefield = directory.resource_field.name or 'name' + resids = obj.search(cr, uid, where1, context=ctx) + for bo in obj.browse(cr, uid, resids, context=ctx): + if not bo: + continue + res_name = getattr(bo, namefield) + if not res_name: + continue + res_name = res_name.replace('/', '_') + if name and (res_name != ustr(name)): + continue + # TODO Revise + klass = directory.get_node_class(directory, dynamic=True, context=ctx) + rnode = klass(res_name, dir_id=self.dir_id, parent=self, context=self.context, + res_model=self.res_model, res_bo=bo) + rnode.res_find_all = self.res_find_all + res.append(rnode) + + + where2 = where + [('parent_id','=',self.dir_id) ] + ids = dirobj.search(cr, uid, where2, context=ctx) + bo = obj.browse(cr, uid, self.res_id, context=ctx) + + for dirr in dirobj.browse(cr, uid, ids, context=ctx): + if name and (name != dirr.name): + continue + if dirr.type == 'directory': + klass = dirr.get_node_class(dirr, dynamic=True, context=ctx) + res.append(klass(dirr.name, dirr.id, self, self.context, self.res_model, res_bo = bo, res_id = self.res_id)) + elif dirr.type == 'ressource': + # child resources can be controlled by properly set dctx + klass = dirr.get_node_class(dirr, context=ctx) + res.append(klass(dirr.name,self,self.context, dirr, {'active_id': self.res_id})) # bo? + + fil_obj = dirobj.pool.get('ir.attachment') + if self.res_find_all: + where2 = where + where3 = where2 + [('res_model', '=', self.res_model), ('res_id','=',self.res_id)] + # print "where clause for dir_obj", where3 + ids = fil_obj.search(cr, uid, where3, context=ctx) + if ids: + for fil in fil_obj.browse(cr, uid, ids, context=ctx): + klass = self.context.node_file_class + res.append(klass(fil.name, self, self.context, fil)) + + + # Get Child Ressource Directories + if directory.ressource_type_id and directory.ressource_type_id.id: + where4 = where + [('ressource_parent_type_id','=',directory.ressource_type_id.id)] + where5 = where4 + ['|', ('ressource_id','=',0), ('ressource_id','=',self.res_id)] + dirids = dirobj.search(cr,uid, where5) + for dirr in dirobj.browse(cr, uid, dirids, context=ctx): + if dirr.type == 'directory' and not dirr.parent_id: + klass = dirr.get_node_class(dirr, dynamic=True, context=ctx) + rnode = klass(dirr.name, dirr.id, self, self.context, self.res_model, res_bo = bo, res_id = self.res_id) + rnode.res_find_all = dirr.resource_find_all + res.append(rnode) + if dirr.type == 'ressource': + klass = dirr.get_node_class(dirr, context=ctx) + rnode = klass(dirr.name, self, self.context, dirr, {'active_id': self.res_id}) + rnode.res_find_all = dirr.resource_find_all + res.append(rnode) + return res + + def create_child_collection(self, cr, objname): + dirobj = self.context._dirobj + is_allowed = self.check_perms(2) + if not is_allowed: + raise IOError(errno.EPERM,"Permission denied.") + + uid = self.context.uid + ctx = self.context.context.copy() + ctx.update(self.dctx) + res_obj = dirobj.pool.get(self.res_model) + + object2 = res_obj.browse(cr, uid, self.res_id) or False + + obj = dirobj.browse(cr, uid, self.dir_id) + if obj and (obj.type == 'ressource') and not object2: + raise OSError(1, 'Operation is not permitted.') + + + val = { + 'name': objname, + 'ressource_parent_type_id': obj and obj.ressource_type_id.id or False, + 'ressource_id': object2 and object2.id or False, + 'parent_id' : False, + 'resource_find_all': False, + } + if (obj and (obj.type in ('directory'))) or not object2: + val['parent_id'] = obj and obj.id or False + + return dirobj.create(cr, uid, val) + + def create_child(self, cr, path, data=None): + """ API function to create a child file object and node + Return the node_* created + """ + is_allowed = self.check_perms(2) + if not is_allowed: + raise IOError(errno.EPERM,"Permission denied.") + + dirobj = self.context._dirobj + uid = self.context.uid + ctx = self.context.context.copy() + ctx.update(self.dctx) + fil_obj=dirobj.pool.get('ir.attachment') + val = { + 'name': path, + 'datas_fname': path, + 'res_model': self.res_model, + 'res_id': self.res_id, + # Datas are not set here + } + if not self.res_find_all: + val['parent_id'] = self.dir_id + + fil_id = fil_obj.create(cr, uid, val, context=ctx) + fil = fil_obj.browse(cr, uid, fil_id, context=ctx) + klass = self.context.node_file_class + fnode = klass(path, self, self.context, fil) + if data is not None: + fnode.set_data(cr, data, fil) + return fnode + + def _get_ttag(self, cr): + return 'rodir-%d-%d' % (self.dir_id, self.res_id) + +node_res_dir.res_obj_class = node_res_obj + +class node_file(node_class): + our_type = 'file' + def __init__(self, path, parent, context, fil): + super(node_file,self).__init__(path, parent,context) + self.file_id = fil.id + #todo: more info from ir_attachment + if fil.file_type and '/' in fil.file_type: + self.mimetype = str(fil.file_type) + self.create_date = fil.create_date + self.write_date = fil.write_date or fil.create_date + self.content_length = fil.file_size + self.displayname = fil.name + + self.uidperms = 14 + if parent: + if not parent.check_perms('x'): + self.uidperms = 0 + elif not parent.check_perms('w'): + self.uidperms = 4 + + try: + self.uuser = (fil.user_id and fil.user_id.login) or 'nobody' + except Exception: + self.uuser = 'nobody' + self.ugroup = mkdosname(fil.company_id and fil.company_id.name, default='nogroup') + + def __eq__(self, other): + if type(self) != type(other): + return False + if not self.context == other.context: + return False + if self.dctx != other.dctx: + return False + return self.file_id == other.file_id + + def open_data(self, cr, mode): + if not self.check_perms(4): + raise IOError(errno.EPERM, "Permission denied.") + + stobj = self.context._dirobj.pool.get('document.storage') + return stobj.get_file(cr, self.context.uid, None, self, mode=mode, context=self.context.context) + + def rm(self, cr): + uid = self.context.uid + if not self.check_perms(8): + raise IOError(errno.EPERM, "Permission denied.") + document_obj = self.context._dirobj.pool.get('ir.attachment') + if self.type in ('collection','database'): + return False + document = document_obj.browse(cr, uid, self.file_id, context=self.context.context) + res = False + if document and document._table_name == 'ir.attachment': + res = document_obj.unlink(cr, uid, [document.id]) + return res + + def fix_ppath(self, cr, fbro): + """Sometimes we may init this w/o path, parent. + This function fills the missing path from the file browse object + + Note: this may be an expensive operation, do on demand. However, + once caching is in, we might want to do that at init time and keep + this object anyway + """ + if self.path or self.parent: + return + assert fbro + uid = self.context.uid + + dirpath = [] + if fbro.parent_id: + dirobj = self.context._dirobj.pool.get('document.directory') + dirpath = dirobj.get_full_path(cr, uid, fbro.parent_id.id, context=self.context.context) + if fbro.datas_fname: + dirpath.append(fbro.datas_fname) + else: + dirpath.append(fbro.name) + + if len(dirpath)>1: + self.path = dirpath + else: + self.path = dirpath[0] + + def get_data(self, cr, fil_obj=None): + """ Retrieve the data for some file. + fil_obj may optionally be specified, and should be a browse object + for the file. This is useful when the caller has already initiated + the browse object. """ + if not self.check_perms(4): + raise IOError(errno.EPERM, "Permission denied.") + + stobj = self.context._dirobj.pool.get('document.storage') + return stobj.get_data(cr, self.context.uid, None, self,self.context.context, fil_obj) + + def get_data_len(self, cr, fil_obj=None): + bin_size = self.context.context.get('bin_size', False) + if bin_size and not self.content_length: + self.content_length = fil_obj.db_datas + return self.content_length + + def set_data(self, cr, data, fil_obj=None): + """ Store data at some file. + fil_obj may optionally be specified, and should be a browse object + for the file. This is useful when the caller has already initiated + the browse object. """ + if not self.check_perms(2): + raise IOError(errno.EPERM, "Permission denied.") + + stobj = self.context._dirobj.pool.get('document.storage') + return stobj.set_data(cr, self.context.uid, None, self, data, self.context.context, fil_obj) + + def _get_ttag(self, cr): + return 'file-%d' % self.file_id + + def move_to(self, cr, ndir_node, new_name=False, fil_obj=None, ndir_obj=None, in_write=False): + if ndir_node and ndir_node.context != self.context: + raise NotImplementedError("Cannot move files between contexts.") + + if (not self.check_perms(8)) and ndir_node.check_perms(2): + raise IOError(errno.EPERM, "Permission denied.") + + doc_obj = self.context._dirobj.pool.get('ir.attachment') + if not fil_obj: + dbro = doc_obj.browse(cr, self.context.uid, self.file_id, context=self.context.context) + else: + dbro = fil_obj + assert dbro.id == self.file_id, "%s != %s for %r." % (dbro.id, self.file_id, self) + + if not dbro: + raise IndexError("Cannot locate doc %d.", self.file_id) + + if (not self.parent): + # there *must* be a parent node for this one + self.parent = self.context.get_dir_node(cr, dbro.parent_id) + assert self.parent + + ret = {} + if ndir_node and self.parent != ndir_node: + if not (isinstance(self.parent, node_dir) and isinstance(ndir_node, node_dir)): + _logger.debug('Cannot move file %r from %r to %r.', self, self.parent, ndir_node) + raise NotImplementedError('Cannot move files between dynamic folders.') + + if not ndir_obj: + ndir_obj = self.context._dirobj.browse(cr, self.context.uid, \ + ndir_node.dir_id, context=self.context.context) + + assert ndir_obj.id == ndir_node.dir_id + + r2 = { 'parent_id': ndir_obj.id } + ret.update(r2) + + if new_name and (new_name != dbro.name): + if len(ret): + raise NotImplementedError("Cannot rename and move.") # TODO + r2 = { 'name': new_name, 'datas_fname': new_name } + ret.update(r2) + + del dbro + + if not in_write: + # We have to update the data ourselves + if ret: + ctx = self.context.context.copy() + ctx['__from_node'] = True + doc_obj.write(cr, self.context.uid, [self.file_id,], ret, ctx ) + ret = True + + return ret + +class node_content(node_class): + our_type = 'content' + def __init__(self, path, parent, context, cnt, dctx=None, act_id=None): + super(node_content,self).__init__(path, parent,context) + self.cnt_id = cnt.id + self.create_date = False + self.write_date = False + self.content_length = False + self.unixperms = 0640 + if parent: + self.uidperms = parent.uidperms & 14 + self.uuser = parent.uuser + self.ugroup = parent.ugroup + + self.extension = cnt.extension + self.report_id = cnt.report_id and cnt.report_id.id + #self.mimetype = cnt.extension. + self.displayname = path + if dctx: + self.dctx.update(dctx) + self.act_id = act_id + + def fill_fields(self, cr, dctx=None): + """ Try to read the object and fill missing fields, like mimetype, + dates etc. + This function must be different from the constructor, because + it uses the db cursor. + """ + + cr.execute('SELECT DISTINCT mimetype FROM document_directory_content_type WHERE active AND code = %s;', + (self.extension,)) + res = cr.fetchall() + if res and res[0][0]: + self.mimetype = str(res[0][0]) + + def get_data(self, cr, fil_obj=None): + cntobj = self.context._dirobj.pool.get('document.directory.content') + if not self.check_perms(4): + raise IOError(errno.EPERM, "Permission denied.") + + ctx = self.context.context.copy() + ctx.update(self.dctx) + data = cntobj.process_read(cr, self.context.uid, self, ctx) + if data: + self.content_length = len(data) + return data + + def open_data(self, cr, mode): + if mode.endswith('b'): + mode = mode[:-1] + if mode in ('r', 'w'): + cperms = mode[:1] + elif mode in ('r+', 'w+'): + cperms = 'rw' + else: + raise IOError(errno.EINVAL, "Cannot open at mode %s." % mode) + + if not self.check_perms(cperms): + raise IOError(errno.EPERM, "Permission denied.") + + ctx = self.context.context.copy() + ctx.update(self.dctx) + + return nodefd_content(self, cr, mode, ctx) + + def get_data_len(self, cr, fil_obj=None): + # FIXME : here, we actually generate the content twice!! + # we should have cached the generated content, but it is + # not advisable to do keep it in memory, until we have a cache + # expiration logic. + if not self.content_length: + self.get_data(cr,fil_obj) + return self.content_length + + def set_data(self, cr, data, fil_obj=None): + cntobj = self.context._dirobj.pool.get('document.directory.content') + if not self.check_perms(2): + raise IOError(errno.EPERM, "Permission denied.") + + ctx = self.context.context.copy() + ctx.update(self.dctx) + return cntobj.process_write(cr, self.context.uid, self, data, ctx) + + def _get_ttag(self, cr): + return 'cnt-%d%s' % (self.cnt_id,(self.act_id and ('-' + str(self.act_id))) or '') + + def get_dav_resourcetype(self, cr): + return '' + +class node_descriptor(object): + """A file-like interface to the data contents of a node. + + This class is NOT a node, but an /open descriptor/ for some + node. It can hold references to a cursor or a file object, + because the life of a node_descriptor will be the open period + of the data. + It should also take care of locking, with any native mechanism + or using the db. + For the implementation, it would be OK just to wrap around file, + StringIO or similar class. The node_descriptor is only needed to + provide the link to the parent /node/ object. + """ + + def __init__(self, parent): + assert isinstance(parent, node_class) + self.name = parent.displayname + self.__parent = parent + + def _get_parent(self): + return self.__parent + + def open(self, **kwargs): + raise NotImplementedError + + def close(self): + raise NotImplementedError + + def read(self, size=None): + raise NotImplementedError + + def seek(self, offset, whence=None): + raise NotImplementedError + + def tell(self): + raise NotImplementedError + + def write(self, str): + raise NotImplementedError + + def size(self): + raise NotImplementedError + + def __len__(self): + return self.size() + + def __nonzero__(self): + """ Ensure that a node_descriptor will never equal False + + Since we do define __len__ and __iter__ for us, we must avoid + being regarded as non-true objects. + """ + return True + + def next(self, str): + raise NotImplementedError + +class nodefd_content(StringIO, node_descriptor): + """ A descriptor to content nodes + """ + def __init__(self, parent, cr, mode, ctx): + node_descriptor.__init__(self, parent) + self._context=ctx + self._size = 0L + + if mode in ('r', 'r+'): + cntobj = parent.context._dirobj.pool.get('document.directory.content') + data = cntobj.process_read(cr, parent.context.uid, parent, ctx) + if data: + self._size = len(data) + parent.content_length = len(data) + StringIO.__init__(self, data) + elif mode in ('w', 'w+'): + StringIO.__init__(self, None) + # at write, we start at 0 (= overwrite), but have the original + # data available, in case of a seek() + elif mode == 'a': + StringIO.__init__(self, None) + else: + _logger.error("Incorrect mode %s is specified.", mode) + raise IOError(errno.EINVAL, "Invalid file mode.") + self.mode = mode + + def size(self): + return self._size + + def close(self): + # we now open a *separate* cursor, to update the data. + # FIXME: this may be improved, for concurrency handling + if self.mode == 'r': + StringIO.close(self) + return + + par = self._get_parent() + uid = par.context.uid + cr = pooler.get_db(par.context.dbname).cursor() + try: + if self.mode in ('w', 'w+', 'r+'): + data = self.getvalue() + cntobj = par.context._dirobj.pool.get('document.directory.content') + cntobj.process_write(cr, uid, par, data, par.context.context) + elif self.mode == 'a': + raise NotImplementedError + cr.commit() + except Exception: + _logger.exception('Cannot update db content #%d for close.', par.cnt_id) + raise + finally: + cr.close() + StringIO.close(self) + +class nodefd_static(StringIO, node_descriptor): + """ A descriptor to nodes with static data. + """ + def __init__(self, parent, cr, mode, ctx=None): + node_descriptor.__init__(self, parent) + self._context=ctx + self._size = 0L + + if mode in ('r', 'r+'): + data = parent.get_data(cr) + if data: + self._size = len(data) + parent.content_length = len(data) + StringIO.__init__(self, data) + elif mode in ('w', 'w+'): + StringIO.__init__(self, None) + # at write, we start at 0 (= overwrite), but have the original + # data available, in case of a seek() + elif mode == 'a': + StringIO.__init__(self, None) + else: + _logger.error("Incorrect mode %s is specified.", mode) + raise IOError(errno.EINVAL, "Invalid file mode.") + self.mode = mode + + def size(self): + return self._size + + def close(self): + # we now open a *separate* cursor, to update the data. + # FIXME: this may be improved, for concurrency handling + if self.mode == 'r': + StringIO.close(self) + return + + par = self._get_parent() + # uid = par.context.uid + cr = pooler.get_db(par.context.dbname).cursor() + try: + if self.mode in ('w', 'w+', 'r+'): + data = self.getvalue() + par.set_data(cr, data) + elif self.mode == 'a': + raise NotImplementedError + cr.commit() + except Exception: + _logger.exception('Cannot update db content #%d for close.', par.cnt_id) + raise + finally: + cr.close() + StringIO.close(self) + +class nodefd_db(StringIO, node_descriptor): + """ A descriptor to db data + """ + def __init__(self, parent, ira_browse, mode): + node_descriptor.__init__(self, parent) + self._size = 0L + if mode.endswith('b'): + mode = mode[:-1] + + if mode in ('r', 'r+'): + data = ira_browse.datas + print "READ64",data + if data: + data = data.decode('base64') + print "READ",data + self._size = len(data) + StringIO.__init__(self, data) + elif mode in ('w', 'w+'): + StringIO.__init__(self, None) + # at write, we start at 0 (= overwrite), but have the original + # data available, in case of a seek() + elif mode == 'a': + StringIO.__init__(self, None) + else: + _logger.error("Incorrect mode %s is specified.", mode) + raise IOError(errno.EINVAL, "Invalid file mode.") + self.mode = mode + + def size(self): + return self._size + + def close(self): + # we now open a *separate* cursor, to update the data. + # FIXME: this may be improved, for concurrency handling + par = self._get_parent() + # uid = par.context.uid + registry = openerp.modules.registry.RegistryManager.get(par.context.dbname) + with registry.cursor() as cr: + data = self.getvalue().encode('base64') + if self.mode in ('w', 'w+', 'r+'): + registry.get('ir.attachment').write(cr, 1, par.file_id, {'datas': data}) + cr.commit() + StringIO.close(self) + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/document_data.xml b/addons/document/document_data.xml index a7bc98de6f3..ca3a2ed7144 100644 --- a/addons/document/document_data.xml +++ b/addons/document/document_data.xml @@ -1,17 +1,9 @@ - - - Database storage - db - - - Documents - 0 @@ -20,7 +12,6 @@ 0 - @@ -101,8 +92,5 @@ 0 - - diff --git a/addons/document/document_directory.py b/addons/document/document_directory.py deleted file mode 100644 index 58492b87222..00000000000 --- a/addons/document/document_directory.py +++ /dev/null @@ -1,308 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 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 . -# -############################################################################## - - -from osv import osv, fields -from osv.orm import except_orm -import logging -import nodes -from tools.translate import _ -_logger = logging.getLogger(__name__) -class document_directory(osv.osv): - _name = 'document.directory' - _description = 'Directory' - _order = 'name' - _columns = { - 'name': fields.char('Name', size=64, required=True, select=1), - 'write_date': fields.datetime('Date Modified', readonly=True), - 'write_uid': fields.many2one('res.users', 'Last Modification User', readonly=True), - 'create_date': fields.datetime('Date Created', readonly=True), - 'create_uid': fields.many2one('res.users', 'Creator', readonly=True), - 'domain': fields.char('Domain', size=128, help="Use a domain if you want to apply an automatic filter on visible resources."), - 'user_id': fields.many2one('res.users', 'Owner'), - 'storage_id': fields.many2one('document.storage', 'Storage', change_default=True), - 'group_ids': fields.many2many('res.groups', 'document_directory_group_rel', 'item_id', 'group_id', 'Groups'), - 'parent_id': fields.many2one('document.directory', 'Parent Directory', select=1, change_default=True), - 'child_ids': fields.one2many('document.directory', 'parent_id', 'Children'), - 'file_ids': fields.one2many('ir.attachment', 'parent_id', 'Files'), - 'content_ids': fields.one2many('document.directory.content', 'directory_id', 'Virtual Files'), - 'type': fields.selection([ - ('directory','Static Directory'), - ('ressource','Folders per resource'), - ], - 'Type', required=True, select=1, change_default=True, - help="Each directory can either have the type Static or be linked to another resource. A static directory, as with Operating Systems, is the classic directory that can contain a set of files. The directories linked to systems resources automatically possess sub-directories for each of resource types defined in the parent directory."), - 'ressource_type_id': fields.many2one('ir.model', 'Resource model', change_default=True, - help="Select an object here and there will be one folder per record of that resource."), - 'resource_field': fields.many2one('ir.model.fields', 'Name field', help='Field to be used as name on resource directories. If empty, the "name" will be used.'), - 'resource_find_all': fields.boolean('Find all resources', - help="If true, all attachments that match this resource will " \ - " be located. If false, only ones that have this as parent." ), - 'ressource_parent_type_id': fields.many2one('ir.model', 'Parent Model', change_default=True, - help="If you put an object here, this directory template will appear bellow all of these objects. " \ - "Such directories are \"attached\" to the specific model or record, just like attachments. " \ - "Don't put a parent directory if you select a parent model."), - 'ressource_id': fields.integer('Resource ID', - help="Along with Parent Model, this ID attaches this folder to a specific record of Parent Model."), - 'ressource_tree': fields.boolean('Tree Structure', - help="Check this if you want to use the same tree structure as the object selected in the system."), - 'dctx_ids': fields.one2many('document.directory.dctx', 'dir_id', 'Context fields'), - 'company_id': fields.many2one('res.company', 'Company', change_default=True), - } - - - def _get_root_directory(self, cr, uid, context=None): - objid=self.pool.get('ir.model.data') - try: - mid = objid._get_id(cr, uid, 'document', 'dir_root') - if not mid: - return False - root_id = objid.read(cr, uid, mid, ['res_id'])['res_id'] - return root_id - except Exception: - return False - return objid.browse(cr, uid, mid, context=context).res_id - - def _get_def_storage(self, cr, uid, context=None): - if context and context.has_key('default_parent_id'): - # Use the same storage as the parent.. - diro = self.browse(cr, uid, context['default_parent_id']) - if diro.storage_id: - return diro.storage_id.id - objid=self.pool.get('ir.model.data') - try: - mid = objid._get_id(cr, uid, 'document', 'storage_default') - return objid.browse(cr, uid, mid, context=context).res_id - except Exception: - return None - - _defaults = { - 'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'document.directory', context=c), - 'user_id': lambda self,cr,uid,ctx: uid, - 'domain': '[]', - 'type': 'directory', - 'ressource_id': 0, - 'storage_id': _get_def_storage, # Still, it is bad practice to set it everywhere. - 'resource_find_all': True, - } - _sql_constraints = [ - ('dirname_uniq', 'unique (name,parent_id,ressource_id,ressource_parent_type_id)', 'The directory name must be unique !'), - ('no_selfparent', 'check(parent_id <> id)', 'Directory cannot be parent of itself!'), - ('dir_parented', 'check(parent_id IS NOT NULL OR storage_id IS NOT NULL)', 'Directory must have a parent or a storage.') - ] - def name_get(self, cr, uid, ids, context=None): - res = [] - if not self.search(cr,uid,[('id','in',ids)]): - ids = [] - for d in self.browse(cr, uid, ids, context=context): - s = '' - d2 = d - while d2 and d2.parent_id: - s = d2.name + (s and ('/' + s) or '') - d2 = d2.parent_id - res.append((d.id, s or d.name)) - return res - - def get_full_path(self, cr, uid, dir_id, context=None): - """ Return the full path to this directory, in a list, root first - """ - if isinstance(dir_id, (tuple, list)): - assert len(dir_id) == 1 - dir_id = dir_id[0] - - def _parent(dir_id, path): - parent=self.browse(cr, uid, dir_id) - if parent.parent_id and not parent.ressource_parent_type_id: - _parent(parent.parent_id.id,path) - path.append(parent.name) - else: - path.append(parent.name) - return path - path = [] - _parent(dir_id, path) - return path - - def _check_recursion(self, cr, uid, ids, context=None): - level = 100 - while len(ids): - cr.execute('select distinct parent_id from document_directory where id in ('+','.join(map(str,ids))+')') - ids = filter(None, map(lambda x:x[0], cr.fetchall())) - if not level: - return False - level -= 1 - return True - - _constraints = [ - (_check_recursion, 'Error! You cannot create recursive directories.', ['parent_id']) - ] - - def __init__(self, *args, **kwargs): - super(document_directory, self).__init__(*args, **kwargs) - - def onchange_content_id(self, cr, uid, ids, ressource_type_id): - return {} - - """ - PRE: - uri: of the form "Sales Order/SO001" - PORT: - uri - object: the object.directory or object.directory.content - object2: the other object linked (if object.directory.content) - """ - def get_object(self, cr, uid, uri, context=None): - """ Return a node object for the given uri. - This fn merely passes the call to node_context - """ - - return nodes.get_node_context(cr, uid, context).get_uri(cr, uri) - - def get_node_class(self, cr, uid, ids, dbro=None, dynamic=False, context=None): - """Retrieve the class of nodes for this directory - - This function can be overriden by inherited classes ;) - @param dbro The browse object, if caller already has it - """ - if dbro is None: - dbro = self.browse(cr, uid, ids, context=context) - - if dynamic: - return nodes.node_res_obj - elif dbro.type == 'directory': - return nodes.node_dir - elif dbro.type == 'ressource': - return nodes.node_res_dir - else: - raise ValueError("dir node for %s type.", dbro.type) - - def _prepare_context(self, cr, uid, nctx, context=None): - """ Fill nctx with properties for this database - @param nctx instance of nodes.node_context, to be filled - @param context ORM context (dict) for us - - Note that this function is called *without* a list of ids, - it should behave the same for the whole database (based on the - ORM instance of document.directory). - - Some databases may override this and attach properties to the - node_context. See WebDAV, CalDAV. - """ - return - - def get_dir_permissions(self, cr, uid, ids, context=None): - """Check what permission user 'uid' has on directory 'id' - """ - assert len(ids) == 1 - - res = 0 - for pperms in [('read', 5), ('write', 2), ('unlink', 8)]: - try: - self.check_access_rule(cr, uid, ids, pperms[0], context=context) - res |= pperms[1] - except except_orm: - pass - return res - - def _locate_child(self, cr, uid, root_id, uri, nparent, ncontext): - """ try to locate the node in uri, - Return a tuple (node_dir, remaining_path) - """ - return (nodes.node_database(context=ncontext), uri) - - def copy(self, cr, uid, id, default=None, context=None): - if not default: - default ={} - name = self.read(cr, uid, [id])[0]['name'] - default.update(name=_("%s (copy)") % (name)) - return super(document_directory,self).copy(cr, uid, id, default, context=context) - - def _check_duplication(self, cr, uid, vals, ids=None, op='create'): - name=vals.get('name',False) - parent_id=vals.get('parent_id',False) - ressource_parent_type_id=vals.get('ressource_parent_type_id',False) - ressource_id=vals.get('ressource_id',0) - if op=='write': - for directory in self.browse(cr, uid, ids): - if not name: - name=directory.name - if not parent_id: - parent_id=directory.parent_id and directory.parent_id.id or False - # TODO fix algo - if not ressource_parent_type_id: - ressource_parent_type_id=directory.ressource_parent_type_id and directory.ressource_parent_type_id.id or False - if not ressource_id: - ressource_id=directory.ressource_id and directory.ressource_id or 0 - res=self.search(cr,uid,[('id','<>',directory.id),('name','=',name),('parent_id','=',parent_id),('ressource_parent_type_id','=',ressource_parent_type_id),('ressource_id','=',ressource_id)]) - if len(res): - return False - if op=='create': - res=self.search(cr,uid,[('name','=',name),('parent_id','=',parent_id),('ressource_parent_type_id','=',ressource_parent_type_id),('ressource_id','=',ressource_id)]) - if len(res): - return False - return True - def write(self, cr, uid, ids, vals, context=None): - if not self._check_duplication(cr, uid, vals, ids, op='write'): - raise osv.except_osv(_('ValidateError'), _('Directory name must be unique!')) - return super(document_directory,self).write(cr, uid, ids, vals, context=context) - - def create(self, cr, uid, vals, context=None): - if not self._check_duplication(cr, uid, vals): - raise osv.except_osv(_('ValidateError'), _('Directory name must be unique!')) - newname = vals.get('name',False) - if newname: - for illeg in ('/', '@', '$', '#'): - if illeg in newname: - raise osv.except_osv(_('ValidateError'), _('Directory name contains special characters!')) - return super(document_directory,self).create(cr, uid, vals, context) - - # TODO def unlink(... - -document_directory() - -class document_directory_dctx(osv.osv): - """ In order to evaluate dynamic folders, child items could have a limiting - domain expression. For that, their parents will export a context where useful - information will be passed on. - If you define sth like "s_id" = "this.id" at a folder iterating over sales, its - children could have a domain like [('sale_id', = ,dctx_s_id )] - This system should be used recursively, that is, parent dynamic context will be - appended to all children down the tree. - """ - _name = 'document.directory.dctx' - _description = 'Directory Dynamic Context' - _columns = { - 'dir_id': fields.many2one('document.directory', 'Directory', required=True, ondelete="cascade"), - 'field': fields.char('Field', size=20, required=True, select=1, help="The name of the field. Note that the prefix \"dctx_\" will be prepended to what is typed here."), - 'expr': fields.char('Expression', size=64, required=True, help="A python expression used to evaluate the field.\n" + \ - "You can use 'dir_id' for current dir, 'res_id', 'res_model' as a reference to the current record, in dynamic folders"), - } - -document_directory_dctx() - - -class document_directory_node(osv.osv): - _inherit = 'process.node' - _columns = { - 'directory_id': fields.many2one('document.directory', 'Document directory', ondelete="set null"), - } -document_directory_node() - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/document_storage.py b/addons/document/document_storage.py deleted file mode 100644 index 9ad70497b2b..00000000000 --- a/addons/document/document_storage.py +++ /dev/null @@ -1,278 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# -# Copyright (C) P. Christeas, 2009, all rights reserved -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -############################################################################## - -from osv import osv, fields -import os -import tools -import base64 -import errno -import logging -import shutil -from StringIO import StringIO -import psycopg2 -from tools.misc import ustr -from tools.translate import _ -from osv.orm import except_orm -import random -import string -import pooler -import nodes -from content_index import cntIndex -_logger = logging.getLogger(__name__) - -""" The algorithm of data storage - -We have to consider 3 cases of data /retrieval/: - Given (context,path) we need to access the file (aka. node). - given (directory, context), we need one of its children (for listings, views) - given (ir.attachment, context), we need its data and metadata (node). - -For data /storage/ we have the cases: - Have (ir.attachment, context), we modify the file (save, update, rename etc). - Have (directory, context), we create a file. - Have (path, context), we create or modify a file. - -Note that in all above cases, we don't explicitly choose the storage media, -but always require a context to be present. - -Note that a node will not always have a corresponding ir.attachment. Dynamic -nodes, for once, won't. Their metadata will be computed by the parent storage -media + directory. - -The algorithm says that in any of the above cases, our first goal is to locate -the node for any combination of search criteria. It would be wise NOT to -represent each node in the path (like node[/] + node[/dir1] + node[/dir1/dir2]) -but directly jump to the end node (like node[/dir1/dir2]) whenever possible. - -We also contain all the parenting loop code in one function. This is intentional, -because one day this will be optimized in the db (Pg 8.4). - -""" - -class nodefd_db(StringIO, nodes.node_descriptor): - """ A descriptor to db data - """ - def __init__(self, parent, ira_browse, mode): - nodes.node_descriptor.__init__(self, parent) - self._size = 0L - if mode.endswith('b'): - mode = mode[:-1] - - if mode in ('r', 'r+'): - data = ira_browse.datas - if data: - self._size = len(data) - StringIO.__init__(self, data) - elif mode in ('w', 'w+'): - StringIO.__init__(self, None) - # at write, we start at 0 (= overwrite), but have the original - # data available, in case of a seek() - elif mode == 'a': - StringIO.__init__(self, None) - else: - _logger.error("Incorrect mode %s is specified.", mode) - raise IOError(errno.EINVAL, "Invalid file mode.") - self.mode = mode - - def size(self): - return self._size - - def close(self): - # we now open a *separate* cursor, to update the data. - # FIXME: this may be improved, for concurrency handling - par = self._get_parent() - # uid = par.context.uid - cr = pooler.get_db(par.context.dbname).cursor() - try: - if self.mode in ('w', 'w+', 'r+'): - data = self.getvalue() - icont = '' - mime = '' - filename = par.path - if isinstance(filename, (tuple, list)): - filename = '/'.join(filename) - - try: - mime, icont = cntIndex.doIndex(data, filename=filename, - content_type=None, realfname=None) - except Exception: - _logger.debug('Cannot index file:', exc_info=True) - pass - - try: - icont_u = ustr(icont) - except UnicodeError: - icont_u = '' - - out = psycopg2.Binary(data) - cr.execute("UPDATE ir_attachment " \ - "SET db_datas = %s, file_size=%s, " \ - " index_content= %s, file_type=%s " \ - " WHERE id = %s", - (out, len(data), icont_u, mime, par.file_id)) - elif self.mode == 'a': - data = self.getvalue() - out = psycopg2.Binary(data) - cr.execute("UPDATE ir_attachment " \ - "SET db_datas = COALESCE(db_datas,'') || %s, " \ - " file_size = COALESCE(file_size, 0) + %s " \ - " WHERE id = %s", - (out, len(data), par.file_id)) - cr.commit() - except Exception: - _logger.exception('Cannot update db file #%d for close.', par.file_id) - raise - finally: - cr.close() - StringIO.close(self) - -class document_storage(osv.osv): - """ The primary object for data storage. - Each instance of this object is a storage media, in which our application - can store contents. The object here controls the behaviour of the storage - media. - The referring document.directory-ies will control the placement of data - into the storage. - - It is a bad idea to have multiple document.storage objects pointing to - the same tree of filesystem storage. - """ - _name = 'document.storage' - _description = 'Storage Media' - - _columns = { - 'name': fields.char('Name', size=64, required=True, select=1), - 'write_date': fields.datetime('Date Modified', readonly=True), - 'write_uid': fields.many2one('res.users', 'Last Modification User', readonly=True), - 'create_date': fields.datetime('Date Created', readonly=True), - 'create_uid': fields.many2one('res.users', 'Creator', readonly=True), - 'user_id': fields.many2one('res.users', 'Owner'), - 'group_ids': fields.many2many('res.groups', 'document_storage_group_rel', 'item_id', 'group_id', 'Groups'), - 'dir_ids': fields.one2many('document.directory', 'parent_id', 'Directories'), - 'readonly': fields.boolean('Read Only', help="If set, media is for reading only"), - } - - _defaults = { - 'user_id': lambda self, cr, uid, ctx: uid, - } - - def get_data(self, cr, uid, id, file_node, context=None, fil_obj=None): - """ retrieve the contents of some file_node having storage_id = id - optionally, fil_obj could point to the browse object of the file - (ir.attachment) - """ - boo = self.browse(cr, uid, id, context=context) - if fil_obj: - ira = fil_obj - else: - ira = self.pool.get('ir.attachment').browse(cr, uid, file_node.file_id, context=context) - data = ira.datas - if data: - out = data.decode('base64') - else: - out = '' - return out - - def get_file(self, cr, uid, id, file_node, mode, context=None): - """ Return a file-like object for the contents of some node - """ - if context is None: - context = {} - boo = self.browse(cr, uid, id, context=context) - - ira = self.pool.get('ir.attachment').browse(cr, uid, file_node.file_id, context=context) - return nodefd_db(file_node, ira_browse=ira, mode=mode) - - def set_data(self, cr, uid, id, file_node, data, context=None, fil_obj=None): - """ store the data. - This function MUST be used from an ir.attachment. It wouldn't make sense - to store things persistently for other types (dynamic). - """ - boo = self.browse(cr, uid, id, context=context) - if fil_obj: - ira = fil_obj - else: - ira = self.pool.get('ir.attachment').browse(cr, uid, file_node.file_id, context=context) - - _logger.debug( "Store data for ir.attachment #%d." % ira.id) - store_fname = None - fname = None - filesize = len(data) - self.pool.get('ir.attachment').write(cr, uid, [file_node.file_id], {'datas': data.encode('base64')}, context=context) - # 2nd phase: store the metadata - try: - icont = '' - mime = ira.file_type - if not mime: - mime = "" - try: - mime, icont = cntIndex.doIndex(data, ira.datas_fname, ira.file_type or None, fname) - except Exception: - _logger.debug('Cannot index file.', exc_info=True) - pass - try: - icont_u = ustr(icont) - except UnicodeError: - icont_u = '' - # a hack: /assume/ that the calling write operation will not try - # to write the fname and size, and update them in the db concurrently. - # We cannot use a write() here, because we are already in one. - cr.execute('UPDATE ir_attachment SET file_size = %s, index_content = %s, file_type = %s WHERE id = %s', (filesize, icont_u, mime, file_node.file_id)) - file_node.content_length = filesize - file_node.content_type = mime - return True - except Exception, e : - self._logger.warning("Cannot save data.", exc_info=True) - # should we really rollback once we have written the actual data? - # at the db case (only), that rollback would be safe - raise except_orm(_('Error at doc write!'), str(e)) - - def prepare_unlink(self, cr, uid, storage_bo, fil_bo): - """ Before we unlink a file (fil_boo), prepare the list of real - files that have to be removed, too. """ - pass - - def do_unlink(self, cr, uid, unres): - return True - - def simple_rename(self, cr, uid, file_node, new_name, context=None): - """ A preparation for a file rename. - It will not affect the database, but merely check and perhaps - rename the realstore file. - - @return the dict of values that can safely be be stored in the db. - """ - # nothing to do for a rename, allow to change the db field - return { 'name': new_name, 'datas_fname': new_name } - - def simple_move(self, cr, uid, file_node, ndir_bro, context=None): - """ A preparation for a file move. - It will not affect the database, but merely check and perhaps - move the realstore file. - - @param ndir_bro a browse object of document.directory, where this - file should move to. - @return the dict of values that can safely be be stored in the db. - """ - return { 'parent_id': ndir_bro.id } - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/document_view.xml b/addons/document/document_view.xml index 54776c4d36e..4c2456de827 100644 --- a/addons/document/document_view.xml +++ b/addons/document/document_view.xml @@ -3,64 +3,6 @@ - - document.storage - document.storage - -
- - - - - - - - - - -
-
-
- - - document.storage - document.storage - - - - - - - - - - Search View: Document Storage - document.storage - - - - - - - - - - - - Storage Media - ir.actions.act_window - document.storage - form - tree,form - - - - document.directory document.directory @@ -69,7 +11,6 @@ - @@ -153,7 +94,6 @@ - @@ -161,25 +101,23 @@ - Search View: Document Directory - document.directory - - - - - - - - - - - - - - - - - + Search View: Document Directory + document.directory + + + + + + + + + + + + + + + Directories @@ -268,10 +206,7 @@
- - - IR Attachment2 ir.attachment @@ -342,32 +277,6 @@ - - process.node.form - process.node - - - - - - - - - - - - process.process.form - process.process - - - - - - - - - - ). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -# import urlparse -import pooler -from tools.safe_eval import safe_eval - -from tools.misc import ustr -import errno -# import os -import time -import logging - -from StringIO import StringIO - -# -# An object that represent an uri -# path: the uri of the object -# content: the Content it belongs to (_print.pdf) -# type: content or collection -# content: objct = res.partner -# collection: object = directory, object2 = res.partner -# file: objct = ir.attachement -# root: if we are at the first directory of a ressource -# -_logger = logging.getLogger(__name__) - -def _str2time(cre): - """ Convert a string with time representation (from db) into time (float) - - Note: a place to fix if datetime is used in db. - """ - if not cre: - return time.time() - frac = 0.0 - if isinstance(cre, basestring) and '.' in cre: - fdot = cre.find('.') - frac = float(cre[fdot:]) - cre = cre[:fdot] - return time.mktime(time.strptime(cre,'%Y-%m-%d %H:%M:%S')) + frac - -def get_node_context(cr, uid, context): - return node_context(cr, uid, context) - -class node_context(object): - """ This is the root node, representing access to some particular context - - A context is a set of persistent data, which may influence the structure - of the nodes. All other transient information during a data query should - be passed down with function arguments. - """ - cached_roots = {} - node_file_class = None - - def __init__(self, cr, uid, context=None): - self.dbname = cr.dbname - self.uid = uid - self.context = context - if context is None: - context = {} - context['uid'] = uid - self._dirobj = pooler.get_pool(cr.dbname).get('document.directory') - self.node_file_class = node_file - self.extra_ctx = {} # Extra keys for context, that do _not_ trigger inequality - assert self._dirobj - self._dirobj._prepare_context(cr, uid, self, context=context) - self.rootdir = False #self._dirobj._get_root_directory(cr,uid,context) - - def __eq__(self, other): - if not type(other) == node_context: - return False - if self.dbname != other.dbname: - return False - if self.uid != other.uid: - return False - if self.context != other.context: - return False - if self.rootdir != other.rootdir: - return False - return True - - def __ne__(self, other): - return not self.__eq__(other) - - def get(self, name, default=None): - return self.context.get(name, default) - - def get_uri(self, cr, uri): - """ Although this fn passes back to doc.dir, it is needed since - it is a potential caching point. - """ - (ndir, duri) = self._dirobj._locate_child(cr, self.uid, self.rootdir, uri, None, self) - while duri: - ndir = ndir.child(cr, duri[0]) - if not ndir: - return False - duri = duri[1:] - return ndir - - def get_dir_node(self, cr, dbro): - """Create (or locate) a node for a directory - @param dbro a browse object of document.directory - """ - - fullpath = dbro.get_full_path(context=self.context) - klass = dbro.get_node_class(dbro, context=self.context) - return klass(fullpath, None ,self, dbro) - - def get_file_node(self, cr, fbro): - """ Create or locate a node for a static file - @param fbro a browse object of an ir.attachment - """ - parent = None - if fbro.parent_id: - parent = self.get_dir_node(cr, fbro.parent_id) - - return self.node_file_class(fbro.name, parent, self, fbro) - -class node_descriptor(object): - """A file-like interface to the data contents of a node. - - This class is NOT a node, but an /open descriptor/ for some - node. It can hold references to a cursor or a file object, - because the life of a node_descriptor will be the open period - of the data. - It should also take care of locking, with any native mechanism - or using the db. - For the implementation, it would be OK just to wrap around file, - StringIO or similar class. The node_descriptor is only needed to - provide the link to the parent /node/ object. - """ - - def __init__(self, parent): - assert isinstance(parent, node_class) - self.name = parent.displayname - self.__parent = parent - - def _get_parent(self): - return self.__parent - - def open(self, **kwargs): - raise NotImplementedError - - def close(self): - raise NotImplementedError - - def read(self, size=None): - raise NotImplementedError - - def seek(self, offset, whence=None): - raise NotImplementedError - - def tell(self): - raise NotImplementedError - - def write(self, str): - raise NotImplementedError - - def size(self): - raise NotImplementedError - - def __len__(self): - return self.size() - - def __nonzero__(self): - """ Ensure that a node_descriptor will never equal False - - Since we do define __len__ and __iter__ for us, we must avoid - being regarded as non-true objects. - """ - return True - - def next(self, str): - raise NotImplementedError - -class node_class(object): - """ this is a superclass for our inodes - It is an API for all code that wants to access the document files. - Nodes have attributes which contain usual file properties - """ - our_type = 'baseclass' - DAV_PROPS = None - DAV_M_NS = None - - def __init__(self, path, parent, context): - assert isinstance(context,node_context) - assert (not parent ) or isinstance(parent,node_class) - self.path = path - self.context = context - self.type=self.our_type - self.parent = parent - self.uidperms = 5 # computed permissions for our uid, in unix bits - self.mimetype = 'application/octet-stream' - self.create_date = None - self.write_date = None - self.unixperms = 0660 - self.uuser = 'user' - self.ugroup = 'group' - self.content_length = 0 - # dynamic context: - self.dctx = {} - if parent: - self.dctx = parent.dctx.copy() - self.displayname = 'Object' - - def __eq__(self, other): - return NotImplemented - - def __ne__(self, other): - return not self.__eq__(other) - - def full_path(self): - """ Return the components of the full path for some - node. - The returned list only contains the names of nodes. - """ - if self.parent: - s = self.parent.full_path() - else: - s = [] - if isinstance(self.path,list): - s+=self.path - elif self.path is None: - s.append('') - else: - s.append(self.path) - return s #map(lambda x: '/' +x, s) - - def __repr__(self): - return "%s@/%s" % (self.our_type, '/'.join(self.full_path())) - - def children(self, cr, domain=None): - print "node_class.children()" - return [] #stub - - def child(self, cr, name, domain=None): - print "node_class.child()" - return None - - def get_uri(self, cr, uri): - duri = uri - ndir = self - while duri: - ndir = ndir.child(cr, duri[0]) - if not ndir: - return False - duri = duri[1:] - return ndir - - def path_get(self): - print "node_class.path_get()" - return False - - def get_data(self, cr): - raise TypeError('No data for %s.'% self.type) - - def open_data(self, cr, mode): - """ Open a node_descriptor object for this node. - - @param the mode of open, eg 'r', 'w', 'a', like file.open() - - This operation may lock the data for this node (and accross - other node hierarchies), until the descriptor is close()d. If - the node is locked, subsequent opens (depending on mode) may - immediately fail with an exception (which?). - For this class, there is no data, so no implementation. Each - child class that has data should override this. - """ - raise TypeError('No data for %s.' % self.type) - - def _get_storage(self, cr): - raise RuntimeError("No storage for base class.") - - def get_etag(self, cr): - """ Get a tag, unique per object + modification. - - see. http://tools.ietf.org/html/rfc2616#section-13.3.3 """ - return '"%s-%s"' % (self._get_ttag(cr), self._get_wtag(cr)) - - def _get_wtag(self, cr): - """ Return the modification time as a unique, compact string """ - return str(_str2time(self.write_date)).replace('.','') - - def _get_ttag(self, cr): - """ Get a unique tag for this type/id of object. - Must be overriden, so that each node is uniquely identified. - """ - print "node_class.get_ttag()",self - raise NotImplementedError("get_ttag stub()") - - def get_dav_props(self, cr): - """ If this class has special behaviour for GroupDAV etc, export - its capabilities """ - # This fn is placed here rather than WebDAV, because we want the - # baseclass methods to apply to all node subclasses - return self.DAV_PROPS or {} - - def match_dav_eprop(self, cr, match, ns, prop): - res = self.get_dav_eprop(cr, ns, prop) - if res == match: - return True - return False - - def get_dav_eprop(self, cr, ns, prop): - if not self.DAV_M_NS: - return None - - if self.DAV_M_NS.has_key(ns): - prefix = self.DAV_M_NS[ns] - else: - _logger.debug('No namespace: %s ("%s").',ns, prop) - return None - - mname = prefix + "_" + prop.replace('-','_') - - if not hasattr(self, mname): - return None - - try: - m = getattr(self, mname) - r = m(cr) - return r - except AttributeError: - _logger.debug('The property %s is not supported.' % prop, exc_info=True) - return None - - def get_dav_resourcetype(self, cr): - """ Get the DAV resource type. - - Is here because some nodes may exhibit special behaviour, like - CalDAV/GroupDAV collections - """ - raise NotImplementedError - - def move_to(self, cr, ndir_node, new_name=False, fil_obj=None, ndir_obj=None, in_write=False): - """ Move this node to a new parent directory. - @param ndir_node the collection that this node should be moved under - @param new_name a name to rename this node to. If omitted, the old - name is preserved - @param fil_obj, can be None, is the browse object for the file, - if already available. - @param ndir_obj must be the browse object to the new doc.directory - location, where this node should be moved to. - in_write: When called by write(), we shouldn't attempt to write the - object, but instead return the dict of vals (avoid re-entrance). - If false, we should write all data to the object, here, as if the - caller won't do anything after calling move_to() - - Return value: - True: the node is moved, the caller can update other values, too. - False: the node is either removed or fully updated, the caller - must discard the fil_obj, not attempt to write any more to it. - dict: values to write back to the object. *May* contain a new id! - - Depending on src and target storage, implementations of this function - could do various things. - Should also consider node<->content, dir<->dir moves etc. - - Move operations, as instructed from APIs (e.g. request from DAV) could - use this function. - """ - raise NotImplementedError(repr(self)) - - def create_child(self, cr, path, data=None): - """ Create a regular file under this node - """ - _logger.warning("Attempted to create a file under %r, not possible.", self) - raise IOError(errno.EPERM, "Not allowed to create file(s) here.") - - def create_child_collection(self, cr, objname): - """ Create a child collection (directory) under self - """ - _logger.warning("Attempted to create a collection under %r, not possible.", self) - raise IOError(errno.EPERM, "Not allowed to create folder(s) here.") - - def rm(self, cr): - raise NotImplementedError(repr(self)) - - def rmcol(self, cr): - raise NotImplementedError(repr(self)) - - def get_domain(self, cr, filters): - # TODO Document - return [] - - def check_perms(self, perms): - """ Check the permissions of the current node. - - @param perms either an integers of the bits to check, or - a string with the permission letters - - Permissions of nodes are (in a unix way): - 1, x : allow descend into dir - 2, w : allow write into file, or modification to dir - 4, r : allow read of file, or listing of dir contents - 8, u : allow remove (unlink) - """ - - if isinstance(perms, str): - pe2 = 0 - chars = { 'x': 1, 'w': 2, 'r': 4, 'u': 8 } - for c in perms: - pe2 = pe2 | chars[c] - perms = pe2 - elif isinstance(perms, int): - if perms < 0 or perms > 15: - raise ValueError("Invalid permission bits.") - else: - raise ValueError("Invalid permission attribute.") - - return ((self.uidperms & perms) == perms) - -class node_database(node_class): - """ A node representing the database directory - - """ - our_type = 'database' - def __init__(self, path=None, parent=False, context=None): - if path is None: - path = [] - super(node_database,self).__init__(path, parent, context) - self.unixperms = 040750 - self.uidperms = 5 - - def children(self, cr, domain=None): - res = self._child_get(cr, domain=domain) + self._file_get(cr) - return res - - def child(self, cr, name, domain=None): - res = self._child_get(cr, name, domain=None) - if res: - return res[0] - res = self._file_get(cr,name) - if res: - return res[0] - return None - - def _child_get(self, cr, name=False, domain=None): - dirobj = self.context._dirobj - uid = self.context.uid - ctx = self.context.context.copy() - ctx.update(self.dctx) - where = [('parent_id','=', False), ('ressource_parent_type_id','=',False)] - if name: - where.append(('name','=',name)) - is_allowed = self.check_perms(1) - else: - is_allowed = self.check_perms(5) - - if not is_allowed: - raise IOError(errno.EPERM, "Permission into directory denied.") - - if domain: - where = where + domain - ids = dirobj.search(cr, uid, where, context=ctx) - res = [] - for dirr in dirobj.browse(cr, uid, ids, context=ctx): - klass = dirr.get_node_class(dirr, context=ctx) - res.append(klass(dirr.name, self, self.context,dirr)) - - return res - - def _file_get(self, cr, nodename=False): - res = [] - return res - - def _get_ttag(self, cr): - return 'db-%s' % cr.dbname - -def mkdosname(company_name, default='noname'): - """ convert a string to a dos-like name""" - if not company_name: - return default - badchars = ' !@#$%^`~*()+={}[];:\'"/?.<>' - n = '' - for c in company_name[:8]: - n += (c in badchars and '_') or c - return n - - -def _uid2unixperms(perms, has_owner): - """ Convert the uidperms and the owner flag to full unix bits - """ - res = 0 - if has_owner: - res |= (perms & 0x07) << 6 - res |= (perms & 0x05) << 3 - elif perms & 0x02: - res |= (perms & 0x07) << 6 - res |= (perms & 0x07) << 3 - else: - res |= (perms & 0x07) << 6 - res |= (perms & 0x05) << 3 - res |= 0x05 - return res - -class node_dir(node_database): - our_type = 'collection' - def __init__(self, path, parent, context, dirr, dctx=None): - super(node_dir,self).__init__(path, parent,context) - self.dir_id = dirr and dirr.id or False - #todo: more info from dirr - self.mimetype = 'application/x-directory' - # 'httpd/unix-directory' - self.create_date = dirr and dirr.create_date or False - self.domain = dirr and dirr.domain or [] - self.res_model = dirr and dirr.ressource_type_id and dirr.ressource_type_id.model or False - # TODO: the write date should be MAX(file.write).. - self.write_date = dirr and (dirr.write_date or dirr.create_date) or False - self.content_length = 0 - try: - self.uuser = (dirr.user_id and dirr.user_id.login) or 'nobody' - except Exception: - self.uuser = 'nobody' - self.ugroup = mkdosname(dirr.company_id and dirr.company_id.name, default='nogroup') - self.uidperms = dirr.get_dir_permissions() - self.unixperms = 040000 | _uid2unixperms(self.uidperms, dirr and dirr.user_id) - if dctx: - self.dctx.update(dctx) - dc2 = self.context.context - dc2.update(self.dctx) - dc2['dir_id'] = self.dir_id - self.displayname = dirr and dirr.name or False - if dirr and dirr.dctx_ids: - for dfld in dirr.dctx_ids: - try: - self.dctx['dctx_' + dfld.field] = safe_eval(dfld.expr,dc2) - except Exception,e: - print "Cannot eval %s." % dfld.expr - print e - pass - - def __eq__(self, other): - if type(self) != type(other): - return False - if not self.context == other.context: - return False - # Two directory nodes, for the same document.directory, may have a - # different context! (dynamic folders) - if self.dctx != other.dctx: - return False - return self.dir_id == other.dir_id - - def get_data(self, cr): - #res = '' - #for child in self.children(cr): - # res += child.get_data(cr) - return None - - def _file_get(self, cr, nodename=False): - res = super(node_dir,self)._file_get(cr, nodename) - - is_allowed = self.check_perms(nodename and 1 or 5) - if not is_allowed: - raise IOError(errno.EPERM, "Permission into directory denied.") - - cntobj = self.context._dirobj.pool.get('document.directory.content') - uid = self.context.uid - ctx = self.context.context.copy() - ctx.update(self.dctx) - where = [('directory_id','=',self.dir_id) ] - ids = cntobj.search(cr, uid, where, context=ctx) - for content in cntobj.browse(cr, uid, ids, context=ctx): - res3 = cntobj._file_get(cr, self, nodename, content) - if res3: - res.extend(res3) - - return res - - def _child_get(self, cr, name=None, domain=None): - dirobj = self.context._dirobj - uid = self.context.uid - ctx = self.context.context.copy() - ctx.update(self.dctx) - where = [('parent_id','=',self.dir_id)] - if name: - where.append(('name','=',name)) - is_allowed = self.check_perms(1) - else: - is_allowed = self.check_perms(5) - - if not is_allowed: - raise IOError(errno.EPERM, "Permission into directory denied.") - - if not domain: - domain = [] - - where2 = where + domain + [('ressource_parent_type_id','=',False)] - ids = dirobj.search(cr, uid, where2, context=ctx) - res = [] - for dirr in dirobj.browse(cr, uid, ids, context=ctx): - klass = dirr.get_node_class(dirr, context=ctx) - res.append(klass(dirr.name, self, self.context,dirr)) - - # Static directories should never return files with res_model/res_id - # because static dirs are /never/ related to a record. - # In fact, files related to some model and parented by the root dir - # (the default), will NOT be accessible in the node system unless - # a resource folder for that model exists (with resource_find_all=True). - # Having resource attachments in a common folder is bad practice, - # because they would be visible to all users, and their names may be - # the same, conflicting. - where += [('res_model', '=', False)] - fil_obj = dirobj.pool.get('ir.attachment') - ids = fil_obj.search(cr, uid, where, context=ctx) - if ids: - for fil in fil_obj.browse(cr, uid, ids, context=ctx): - klass = self.context.node_file_class - res.append(klass(fil.name, self, self.context, fil)) - return res - - def rmcol(self, cr): - uid = self.context.uid - directory = self.context._dirobj.browse(cr, uid, self.dir_id) - res = False - if not directory: - raise OSError(2, 'Not such file or directory.') - if not self.check_perms('u'): - raise IOError(errno.EPERM,"Permission denied.") - - if directory._table_name=='document.directory': - if self.children(cr): - raise OSError(39, 'Directory not empty.') - res = self.context._dirobj.unlink(cr, uid, [directory.id]) - else: - raise OSError(1, 'Operation is not permitted.') - return res - - def create_child_collection(self, cr, objname): - object2 = False - if not self.check_perms(2): - raise IOError(errno.EPERM,"Permission denied.") - - dirobj = self.context._dirobj - uid = self.context.uid - ctx = self.context.context.copy() - ctx.update(self.dctx) - obj = dirobj.browse(cr, uid, self.dir_id) - if obj and (obj.type == 'ressource') and not object2: - raise OSError(1, 'Operation is not permitted.') - - #objname = uri2[-1] - val = { - 'name': objname, - 'ressource_parent_type_id': obj and obj.ressource_type_id.id or False, - 'ressource_id': object2 and object2.id or False, - 'parent_id' : obj and obj.id or False - } - - return dirobj.create(cr, uid, val) - - def create_child(self, cr, path, data=None): - """ API function to create a child file object and node - Return the node_* created - """ - if not self.check_perms(2): - raise IOError(errno.EPERM,"Permission denied.") - - dirobj = self.context._dirobj - uid = self.context.uid - ctx = self.context.context.copy() - ctx.update(self.dctx) - fil_obj=dirobj.pool.get('ir.attachment') - val = { - 'name': path, - 'datas_fname': path, - 'parent_id': self.dir_id, - # Datas are not set here - } - - fil_id = fil_obj.create(cr, uid, val, context=ctx) - fil = fil_obj.browse(cr, uid, fil_id, context=ctx) - fnode = node_file(path, self, self.context, fil) - if data is not None: - fnode.set_data(cr, data, fil) - return fnode - - def _get_ttag(self, cr): - return 'dir-%d' % self.dir_id - - def move_to(self, cr, ndir_node, new_name=False, fil_obj=None, ndir_obj=None, in_write=False): - """ Move directory. This operation is simple, since the present node is - only used for static, simple directories. - Note /may/ be called with ndir_node = None, to rename the document root. - """ - if ndir_node and (ndir_node.context != self.context): - raise NotImplementedError("Cannot move directories between contexts.") - - if (not self.check_perms('u')) or (not ndir_node.check_perms('w')): - raise IOError(errno.EPERM,"Permission denied.") - - dir_obj = self.context._dirobj - if not fil_obj: - dbro = dir_obj.browse(cr, self.context.uid, self.dir_id, context=self.context.context) - else: - dbro = dir_obj - assert dbro.id == self.dir_id - - if not dbro: - raise IndexError("Cannot locate dir %d", self.dir_id) - - if (not self.parent) and ndir_node: - if not dbro.parent_id: - raise IOError(errno.EPERM, "Cannot move the root directory!") - self.parent = self.context.get_dir_node(cr, dbro.parent_id) - assert self.parent - - if self.parent != ndir_node: - _logger.debug('Cannot move dir %r from %r to %r.', self, self.parent, ndir_node) - raise NotImplementedError('Cannot move dir to another dir.') - - ret = {} - if new_name and (new_name != dbro.name): - if ndir_node.child(cr, new_name): - raise IOError(errno.EEXIST, "Destination path already exists.") - ret['name'] = new_name - - del dbro - - if not in_write: - # We have to update the data ourselves - if ret: - ctx = self.context.context.copy() - ctx['__from_node'] = True - dir_obj.write(cr, self.context.uid, [self.dir_id,], ret, ctx) - ret = True - - return ret - -class node_res_dir(node_class): - """ A folder containing dynamic folders - A special sibling to node_dir, which does only contain dynamically - created folders foreach resource in the foreign model. - All folders should be of type node_res_obj and merely behave like - node_dirs (with limited domain). - """ - our_type = 'collection' - res_obj_class = None - def __init__(self, path, parent, context, dirr, dctx=None ): - super(node_res_dir,self).__init__(path, parent, context) - self.dir_id = dirr.id - #todo: more info from dirr - self.mimetype = 'application/x-directory' - # 'httpd/unix-directory' - self.create_date = dirr.create_date - # TODO: the write date should be MAX(file.write).. - self.write_date = dirr.write_date or dirr.create_date - self.content_length = 0 - try: - self.uuser = (dirr.user_id and dirr.user_id.login) or 'nobody' - except Exception: - self.uuser = 'nobody' - self.ugroup = mkdosname(dirr.company_id and dirr.company_id.name, default='nogroup') - self.uidperms = dirr.get_dir_permissions() - self.unixperms = 040000 | _uid2unixperms(self.uidperms, dirr and dirr.user_id) - self.res_model = dirr.ressource_type_id and dirr.ressource_type_id.model or False - self.resm_id = dirr.ressource_id - self.res_find_all = dirr.resource_find_all - self.namefield = dirr.resource_field.name or 'name' - self.displayname = dirr.name - # Important: the domain is evaluated using the *parent* dctx! - self.domain = dirr.domain - self.ressource_tree = dirr.ressource_tree - # and then, we add our own vars in the dctx: - if dctx: - self.dctx.update(dctx) - - # and then, we prepare a dctx dict, for deferred evaluation: - self.dctx_dict = {} - for dfld in dirr.dctx_ids: - self.dctx_dict['dctx_' + dfld.field] = dfld.expr - - def __eq__(self, other): - if type(self) != type(other): - return False - if not self.context == other.context: - return False - # Two nodes, for the same document.directory, may have a - # different context! (dynamic folders) - if self.dctx != other.dctx: - return False - return self.dir_id == other.dir_id - - def children(self, cr, domain=None): - return self._child_get(cr, domain=domain) - - def child(self, cr, name, domain=None): - res = self._child_get(cr, name, domain=domain) - if res: - return res[0] - return None - - def _child_get(self, cr, name=None, domain=None): - """ return virtual children of resource, based on the - foreign object. - - Note that many objects use NULL for a name, so we should - better call the name_search(),name_get() set of methods - """ - obj = self.context._dirobj.pool.get(self.res_model) - if not obj: - return [] - dirobj = self.context._dirobj - uid = self.context.uid - ctx = self.context.context.copy() - ctx.update(self.dctx) - ctx.update(self.context.extra_ctx) - where = [] - if self.domain: - app = safe_eval(self.domain, ctx) - if not app: - pass - elif isinstance(app, list): - where.extend(app) - elif isinstance(app, tuple): - where.append(app) - else: - raise RuntimeError("Incorrect domain expr: %s." % self.domain) - if self.resm_id: - where.append(('id','=',self.resm_id)) - - if name: - # The =like character will match underscores against any characters - # including the special ones that couldn't exist in a FTP/DAV request - where.append((self.namefield,'=like',name.replace('\\','\\\\'))) - is_allowed = self.check_perms(1) - else: - is_allowed = self.check_perms(5) - - if not is_allowed: - raise IOError(errno.EPERM,"Permission denied.") - - # print "Where clause for %s" % self.res_model, where - if self.ressource_tree: - object2 = False - if self.resm_id: - object2 = dirobj.pool.get(self.res_model).browse(cr, uid, self.resm_id) or False - if obj._parent_name in obj.fields_get(cr, uid): - where.append((obj._parent_name,'=',object2 and object2.id or False)) - - resids = obj.search(cr, uid, where, context=ctx) - res = [] - for bo in obj.browse(cr, uid, resids, context=ctx): - if not bo: - continue - res_name = getattr(bo, self.namefield) - if not res_name: - continue - # Yes! we can't do better but skip nameless records. - - # Escape the name for characters not supported in filenames - res_name = res_name.replace('/','_') # any other weird char? - - if name and (res_name != ustr(name)): - # we have matched _ to any character, but we only meant to match - # the special ones. - # Eg. 'a_c' will find 'abc', 'a/c', 'a_c', may only - # return 'a/c' and 'a_c' - continue - - res.append(self.res_obj_class(res_name, self.dir_id, self, self.context, self.res_model, bo)) - return res - - def _get_ttag(self, cr): - return 'rdir-%d' % self.dir_id - -class node_res_obj(node_class): - """ A dynamically created folder. - A special sibling to node_dir, which does only contain dynamically - created folders foreach resource in the foreign model. - All folders should be of type node_res_obj and merely behave like - node_dirs (with limited domain). - """ - our_type = 'collection' - def __init__(self, path, dir_id, parent, context, res_model, res_bo, res_id=None): - super(node_res_obj,self).__init__(path, parent,context) - assert parent - #todo: more info from dirr - self.dir_id = dir_id - self.mimetype = 'application/x-directory' - # 'httpd/unix-directory' - self.create_date = parent.create_date - # TODO: the write date should be MAX(file.write).. - self.write_date = parent.write_date - self.content_length = 0 - self.uidperms = parent.uidperms & 15 - self.unixperms = 040000 | _uid2unixperms(self.uidperms, True) - self.uuser = parent.uuser - self.ugroup = parent.ugroup - self.res_model = res_model - self.domain = parent.domain - self.displayname = path - self.dctx_dict = parent.dctx_dict - if isinstance(parent, node_res_dir): - self.res_find_all = parent.res_find_all - else: - self.res_find_all = False - if res_bo: - self.res_id = res_bo.id - dc2 = self.context.context.copy() - dc2.update(self.dctx) - dc2['res_model'] = res_model - dc2['res_id'] = res_bo.id - dc2['this'] = res_bo - for fld,expr in self.dctx_dict.items(): - try: - self.dctx[fld] = safe_eval(expr, dc2) - except Exception,e: - print "Cannot eval %s for %s." % (expr, fld) - print e - pass - else: - self.res_id = res_id - - def __eq__(self, other): - if type(self) != type(other): - return False - if not self.context == other.context: - return False - if not self.res_model == other.res_model: - return False - if not self.res_id == other.res_id: - return False - if self.domain != other.domain: - return False - if self.res_find_all != other.res_find_all: - return False - if self.dctx != other.dctx: - return False - return self.dir_id == other.dir_id - - def children(self, cr, domain=None): - return self._child_get(cr, domain=domain) + self._file_get(cr) - - def child(self, cr, name, domain=None): - res = self._child_get(cr, name, domain=domain) - if res: - return res[0] - res = self._file_get(cr, name) - if res: - return res[0] - return None - - def _file_get(self, cr, nodename=False): - res = [] - is_allowed = self.check_perms((nodename and 1) or 5) - if not is_allowed: - raise IOError(errno.EPERM,"Permission denied.") - - cntobj = self.context._dirobj.pool.get('document.directory.content') - uid = self.context.uid - ctx = self.context.context.copy() - ctx.update(self.dctx) - where = [('directory_id','=',self.dir_id) ] - #if self.domain: - # where.extend(self.domain) - # print "res_obj file_get clause", where - ids = cntobj.search(cr, uid, where, context=ctx) - for content in cntobj.browse(cr, uid, ids, context=ctx): - res3 = cntobj._file_get(cr, self, nodename, content, context=ctx) - if res3: - res.extend(res3) - - return res - - def get_dav_props_DEPR(self, cr): - # Deprecated! (but document_ics must be cleaned, first) - res = {} - cntobj = self.context._dirobj.pool.get('document.directory.content') - uid = self.context.uid - ctx = self.context.context.copy() - ctx.update(self.dctx) - where = [('directory_id','=',self.dir_id) ] - ids = cntobj.search(cr, uid, where, context=ctx) - for content in cntobj.browse(cr, uid, ids, context=ctx): - if content.extension == '.ics': # FIXME: call the content class! - res['http://groupdav.org/'] = ('resourcetype',) - return res - - def get_dav_eprop_DEPR(self, cr, ns, prop): - # Deprecated! - if ns != 'http://groupdav.org/' or prop != 'resourcetype': - _logger.warning("Who asks for %s:%s?" % (ns, prop)) - return None - cntobj = self.context._dirobj.pool.get('document.directory.content') - uid = self.context.uid - ctx = self.context.context.copy() - ctx.update(self.dctx) - where = [('directory_id','=',self.dir_id) ] - ids = cntobj.search(cr,uid,where,context=ctx) - for content in cntobj.browse(cr, uid, ids, context=ctx): - # TODO: remove relic of GroupDAV - if content.extension == '.ics': # FIXME: call the content class! - return ('vevent-collection','http://groupdav.org/') - return None - - def _child_get(self, cr, name=None, domain=None): - dirobj = self.context._dirobj - - is_allowed = self.check_perms((name and 1) or 5) - if not is_allowed: - raise IOError(errno.EPERM,"Permission denied.") - - uid = self.context.uid - ctx = self.context.context.copy() - ctx.update(self.dctx) - directory = dirobj.browse(cr, uid, self.dir_id) - obj = dirobj.pool.get(self.res_model) - where = [] - res = [] - if name: - where.append(('name','=',name)) - - # Directory Structure display in tree structure - if self.res_id and directory.ressource_tree: - where1 = [] - if name: - where1.append(('name','=like',name.replace('\\','\\\\'))) - if obj._parent_name in obj.fields_get(cr, uid): - where1.append((obj._parent_name, '=', self.res_id)) - namefield = directory.resource_field.name or 'name' - resids = obj.search(cr, uid, where1, context=ctx) - for bo in obj.browse(cr, uid, resids, context=ctx): - if not bo: - continue - res_name = getattr(bo, namefield) - if not res_name: - continue - res_name = res_name.replace('/', '_') - if name and (res_name != ustr(name)): - continue - # TODO Revise - klass = directory.get_node_class(directory, dynamic=True, context=ctx) - rnode = klass(res_name, dir_id=self.dir_id, parent=self, context=self.context, - res_model=self.res_model, res_bo=bo) - rnode.res_find_all = self.res_find_all - res.append(rnode) - - - where2 = where + [('parent_id','=',self.dir_id) ] - ids = dirobj.search(cr, uid, where2, context=ctx) - bo = obj.browse(cr, uid, self.res_id, context=ctx) - - for dirr in dirobj.browse(cr, uid, ids, context=ctx): - if name and (name != dirr.name): - continue - if dirr.type == 'directory': - klass = dirr.get_node_class(dirr, dynamic=True, context=ctx) - res.append(klass(dirr.name, dirr.id, self, self.context, self.res_model, res_bo = bo, res_id = self.res_id)) - elif dirr.type == 'ressource': - # child resources can be controlled by properly set dctx - klass = dirr.get_node_class(dirr, context=ctx) - res.append(klass(dirr.name,self,self.context, dirr, {'active_id': self.res_id})) # bo? - - fil_obj = dirobj.pool.get('ir.attachment') - if self.res_find_all: - where2 = where - where3 = where2 + [('res_model', '=', self.res_model), ('res_id','=',self.res_id)] - # print "where clause for dir_obj", where3 - ids = fil_obj.search(cr, uid, where3, context=ctx) - if ids: - for fil in fil_obj.browse(cr, uid, ids, context=ctx): - klass = self.context.node_file_class - res.append(klass(fil.name, self, self.context, fil)) - - - # Get Child Ressource Directories - if directory.ressource_type_id and directory.ressource_type_id.id: - where4 = where + [('ressource_parent_type_id','=',directory.ressource_type_id.id)] - where5 = where4 + ['|', ('ressource_id','=',0), ('ressource_id','=',self.res_id)] - dirids = dirobj.search(cr,uid, where5) - for dirr in dirobj.browse(cr, uid, dirids, context=ctx): - if dirr.type == 'directory' and not dirr.parent_id: - klass = dirr.get_node_class(dirr, dynamic=True, context=ctx) - rnode = klass(dirr.name, dirr.id, self, self.context, self.res_model, res_bo = bo, res_id = self.res_id) - rnode.res_find_all = dirr.resource_find_all - res.append(rnode) - if dirr.type == 'ressource': - klass = dirr.get_node_class(dirr, context=ctx) - rnode = klass(dirr.name, self, self.context, dirr, {'active_id': self.res_id}) - rnode.res_find_all = dirr.resource_find_all - res.append(rnode) - return res - - def create_child_collection(self, cr, objname): - dirobj = self.context._dirobj - is_allowed = self.check_perms(2) - if not is_allowed: - raise IOError(errno.EPERM,"Permission denied.") - - uid = self.context.uid - ctx = self.context.context.copy() - ctx.update(self.dctx) - res_obj = dirobj.pool.get(self.res_model) - - object2 = res_obj.browse(cr, uid, self.res_id) or False - - obj = dirobj.browse(cr, uid, self.dir_id) - if obj and (obj.type == 'ressource') and not object2: - raise OSError(1, 'Operation is not permitted.') - - - val = { - 'name': objname, - 'ressource_parent_type_id': obj and obj.ressource_type_id.id or False, - 'ressource_id': object2 and object2.id or False, - 'parent_id' : False, - 'resource_find_all': False, - } - if (obj and (obj.type in ('directory'))) or not object2: - val['parent_id'] = obj and obj.id or False - - return dirobj.create(cr, uid, val) - - def create_child(self, cr, path, data=None): - """ API function to create a child file object and node - Return the node_* created - """ - is_allowed = self.check_perms(2) - if not is_allowed: - raise IOError(errno.EPERM,"Permission denied.") - - dirobj = self.context._dirobj - uid = self.context.uid - ctx = self.context.context.copy() - ctx.update(self.dctx) - fil_obj=dirobj.pool.get('ir.attachment') - val = { - 'name': path, - 'datas_fname': path, - 'res_model': self.res_model, - 'res_id': self.res_id, - # Datas are not set here - } - if not self.res_find_all: - val['parent_id'] = self.dir_id - - fil_id = fil_obj.create(cr, uid, val, context=ctx) - fil = fil_obj.browse(cr, uid, fil_id, context=ctx) - klass = self.context.node_file_class - fnode = klass(path, self, self.context, fil) - if data is not None: - fnode.set_data(cr, data, fil) - return fnode - - def _get_ttag(self, cr): - return 'rodir-%d-%d' % (self.dir_id, self.res_id) - -node_res_dir.res_obj_class = node_res_obj - -class node_file(node_class): - our_type = 'file' - def __init__(self, path, parent, context, fil): - super(node_file,self).__init__(path, parent,context) - self.file_id = fil.id - #todo: more info from ir_attachment - if fil.file_type and '/' in fil.file_type: - self.mimetype = str(fil.file_type) - self.create_date = fil.create_date - self.write_date = fil.write_date or fil.create_date - self.content_length = fil.file_size - self.displayname = fil.name - - self.uidperms = 14 - if parent: - if not parent.check_perms('x'): - self.uidperms = 0 - elif not parent.check_perms('w'): - self.uidperms = 4 - - try: - self.uuser = (fil.user_id and fil.user_id.login) or 'nobody' - except Exception: - self.uuser = 'nobody' - self.ugroup = mkdosname(fil.company_id and fil.company_id.name, default='nogroup') - - # This only propagates the problem to get_data. Better - # fix those files to point to the root dir. - self.storage_id = None - par = fil.parent_id - while par: - if par.storage_id and par.storage_id.id: - self.storage_id = par.storage_id.id - break - par = par.parent_id - - def __eq__(self, other): - if type(self) != type(other): - return False - if not self.context == other.context: - return False - if self.dctx != other.dctx: - return False - return self.file_id == other.file_id - - def open_data(self, cr, mode): - stor = self.storage_id - assert stor, "No storage for file #%s." % self.file_id - if not self.check_perms(4): - raise IOError(errno.EPERM, "Permission denied.") - - # If storage is not set properly, we are just screwed here, don't - # try to get it from default. - stobj = self.context._dirobj.pool.get('document.storage') - return stobj.get_file(cr, self.context.uid, stor, self, mode=mode, context=self.context.context) - - def rm(self, cr): - uid = self.context.uid - if not self.check_perms(8): - raise IOError(errno.EPERM, "Permission denied.") - document_obj = self.context._dirobj.pool.get('ir.attachment') - if self.type in ('collection','database'): - return False - document = document_obj.browse(cr, uid, self.file_id, context=self.context.context) - res = False - if document and document._table_name == 'ir.attachment': - res = document_obj.unlink(cr, uid, [document.id]) - return res - - def fix_ppath(self, cr, fbro): - """Sometimes we may init this w/o path, parent. - This function fills the missing path from the file browse object - - Note: this may be an expensive operation, do on demand. However, - once caching is in, we might want to do that at init time and keep - this object anyway - """ - if self.path or self.parent: - return - assert fbro - uid = self.context.uid - - dirpath = [] - if fbro.parent_id: - dirobj = self.context._dirobj.pool.get('document.directory') - dirpath = dirobj.get_full_path(cr, uid, fbro.parent_id.id, context=self.context.context) - if fbro.datas_fname: - dirpath.append(fbro.datas_fname) - else: - dirpath.append(fbro.name) - - if len(dirpath)>1: - self.path = dirpath - else: - self.path = dirpath[0] - - def get_data(self, cr, fil_obj=None): - """ Retrieve the data for some file. - fil_obj may optionally be specified, and should be a browse object - for the file. This is useful when the caller has already initiated - the browse object. """ - # this is where storage kicks in.. - stor = self.storage_id - assert stor, "No storage for file #%s" % self.file_id - if not self.check_perms(4): - raise IOError(errno.EPERM, "Permission denied.") - - # If storage is not set properly, we are just screwed here, don't - # try to get it from default. - stobj = self.context._dirobj.pool.get('document.storage') - return stobj.get_data(cr, self.context.uid,stor, self,self.context.context, fil_obj) - - def get_data_len(self, cr, fil_obj=None): - # TODO: verify with the storage object! - bin_size = self.context.context.get('bin_size', False) - if bin_size and not self.content_length: - self.content_length = fil_obj.db_datas - return self.content_length - - def set_data(self, cr, data, fil_obj=None): - """ Store data at some file. - fil_obj may optionally be specified, and should be a browse object - for the file. This is useful when the caller has already initiated - the browse object. """ - # this is where storage kicks in.. - stor = self.storage_id - assert stor, "No storage for file #%s" % self.file_id - if not self.check_perms(2): - raise IOError(errno.EPERM, "Permission denied.") - - stobj = self.context._dirobj.pool.get('document.storage') - return stobj.set_data(cr, self.context.uid,stor, self, data, self.context.context, fil_obj) - - def _get_ttag(self, cr): - return 'file-%d' % self.file_id - - def move_to(self, cr, ndir_node, new_name=False, fil_obj=None, ndir_obj=None, in_write=False): - if ndir_node and ndir_node.context != self.context: - raise NotImplementedError("Cannot move files between contexts.") - - if (not self.check_perms(8)) and ndir_node.check_perms(2): - raise IOError(errno.EPERM, "Permission denied.") - - doc_obj = self.context._dirobj.pool.get('ir.attachment') - if not fil_obj: - dbro = doc_obj.browse(cr, self.context.uid, self.file_id, context=self.context.context) - else: - dbro = fil_obj - assert dbro.id == self.file_id, "%s != %s for %r." % (dbro.id, self.file_id, self) - - if not dbro: - raise IndexError("Cannot locate doc %d.", self.file_id) - - if (not self.parent): - # there *must* be a parent node for this one - self.parent = self.context.get_dir_node(cr, dbro.parent_id) - assert self.parent - - ret = {} - if ndir_node and self.parent != ndir_node: - if not (isinstance(self.parent, node_dir) and isinstance(ndir_node, node_dir)): - _logger.debug('Cannot move file %r from %r to %r.', self, self.parent, ndir_node) - raise NotImplementedError('Cannot move files between dynamic folders.') - - if not ndir_obj: - ndir_obj = self.context._dirobj.browse(cr, self.context.uid, \ - ndir_node.dir_id, context=self.context.context) - - assert ndir_obj.id == ndir_node.dir_id - - stobj = self.context._dirobj.pool.get('document.storage') - r2 = stobj.simple_move(cr, self.context.uid, self, ndir_obj, \ - context=self.context.context) - ret.update(r2) - - if new_name and (new_name != dbro.name): - if len(ret): - raise NotImplementedError("Cannot rename and move.") # TODO - stobj = self.context._dirobj.pool.get('document.storage') - r2 = stobj.simple_rename(cr, self.context.uid, self, new_name, self.context.context) - ret.update(r2) - - del dbro - - if not in_write: - # We have to update the data ourselves - if ret: - ctx = self.context.context.copy() - ctx['__from_node'] = True - doc_obj.write(cr, self.context.uid, [self.file_id,], ret, ctx ) - ret = True - - return ret - -class node_content(node_class): - our_type = 'content' - def __init__(self, path, parent, context, cnt, dctx=None, act_id=None): - super(node_content,self).__init__(path, parent,context) - self.cnt_id = cnt.id - self.create_date = False - self.write_date = False - self.content_length = False - self.unixperms = 0640 - if parent: - self.uidperms = parent.uidperms & 14 - self.uuser = parent.uuser - self.ugroup = parent.ugroup - - self.extension = cnt.extension - self.report_id = cnt.report_id and cnt.report_id.id - #self.mimetype = cnt.extension. - self.displayname = path - if dctx: - self.dctx.update(dctx) - self.act_id = act_id - - def fill_fields(self, cr, dctx=None): - """ Try to read the object and fill missing fields, like mimetype, - dates etc. - This function must be different from the constructor, because - it uses the db cursor. - """ - - cr.execute('SELECT DISTINCT mimetype FROM document_directory_content_type WHERE active AND code = %s;', - (self.extension,)) - res = cr.fetchall() - if res and res[0][0]: - self.mimetype = str(res[0][0]) - - def get_data(self, cr, fil_obj=None): - cntobj = self.context._dirobj.pool.get('document.directory.content') - if not self.check_perms(4): - raise IOError(errno.EPERM, "Permission denied.") - - ctx = self.context.context.copy() - ctx.update(self.dctx) - data = cntobj.process_read(cr, self.context.uid, self, ctx) - if data: - self.content_length = len(data) - return data - - def open_data(self, cr, mode): - if mode.endswith('b'): - mode = mode[:-1] - if mode in ('r', 'w'): - cperms = mode[:1] - elif mode in ('r+', 'w+'): - cperms = 'rw' - else: - raise IOError(errno.EINVAL, "Cannot open at mode %s." % mode) - - if not self.check_perms(cperms): - raise IOError(errno.EPERM, "Permission denied.") - - ctx = self.context.context.copy() - ctx.update(self.dctx) - - return nodefd_content(self, cr, mode, ctx) - - def get_data_len(self, cr, fil_obj=None): - # FIXME : here, we actually generate the content twice!! - # we should have cached the generated content, but it is - # not advisable to do keep it in memory, until we have a cache - # expiration logic. - if not self.content_length: - self.get_data(cr,fil_obj) - return self.content_length - - def set_data(self, cr, data, fil_obj=None): - cntobj = self.context._dirobj.pool.get('document.directory.content') - if not self.check_perms(2): - raise IOError(errno.EPERM, "Permission denied.") - - ctx = self.context.context.copy() - ctx.update(self.dctx) - return cntobj.process_write(cr, self.context.uid, self, data, ctx) - - def _get_ttag(self, cr): - return 'cnt-%d%s' % (self.cnt_id,(self.act_id and ('-' + str(self.act_id))) or '') - - def get_dav_resourcetype(self, cr): - return '' - -class nodefd_content(StringIO, node_descriptor): - - """ A descriptor to content nodes - """ - def __init__(self, parent, cr, mode, ctx): - node_descriptor.__init__(self, parent) - self._context=ctx - self._size = 0L - - if mode in ('r', 'r+'): - cntobj = parent.context._dirobj.pool.get('document.directory.content') - data = cntobj.process_read(cr, parent.context.uid, parent, ctx) - if data: - self._size = len(data) - parent.content_length = len(data) - StringIO.__init__(self, data) - elif mode in ('w', 'w+'): - StringIO.__init__(self, None) - # at write, we start at 0 (= overwrite), but have the original - # data available, in case of a seek() - elif mode == 'a': - StringIO.__init__(self, None) - else: - _logger.error("Incorrect mode %s is specified.", mode) - raise IOError(errno.EINVAL, "Invalid file mode.") - self.mode = mode - - def size(self): - return self._size - - def close(self): - # we now open a *separate* cursor, to update the data. - # FIXME: this may be improved, for concurrency handling - if self.mode == 'r': - StringIO.close(self) - return - - par = self._get_parent() - uid = par.context.uid - cr = pooler.get_db(par.context.dbname).cursor() - try: - if self.mode in ('w', 'w+', 'r+'): - data = self.getvalue() - cntobj = par.context._dirobj.pool.get('document.directory.content') - cntobj.process_write(cr, uid, par, data, par.context.context) - elif self.mode == 'a': - raise NotImplementedError - cr.commit() - except Exception: - _logger.exception('Cannot update db content #%d for close.', par.cnt_id) - raise - finally: - cr.close() - StringIO.close(self) - -class nodefd_static(StringIO, node_descriptor): - - """ A descriptor to nodes with static data. - """ - def __init__(self, parent, cr, mode, ctx=None): - node_descriptor.__init__(self, parent) - self._context=ctx - self._size = 0L - - if mode in ('r', 'r+'): - data = parent.get_data(cr) - if data: - self._size = len(data) - parent.content_length = len(data) - StringIO.__init__(self, data) - elif mode in ('w', 'w+'): - StringIO.__init__(self, None) - # at write, we start at 0 (= overwrite), but have the original - # data available, in case of a seek() - elif mode == 'a': - StringIO.__init__(self, None) - else: - _logger.error("Incorrect mode %s is specified.", mode) - raise IOError(errno.EINVAL, "Invalid file mode.") - self.mode = mode - - def size(self): - return self._size - - def close(self): - # we now open a *separate* cursor, to update the data. - # FIXME: this may be improved, for concurrency handling - if self.mode == 'r': - StringIO.close(self) - return - - par = self._get_parent() - # uid = par.context.uid - cr = pooler.get_db(par.context.dbname).cursor() - try: - if self.mode in ('w', 'w+', 'r+'): - data = self.getvalue() - par.set_data(cr, data) - elif self.mode == 'a': - raise NotImplementedError - cr.commit() - except Exception: - _logger.exception('Cannot update db content #%d for close.', par.cnt_id) - raise - finally: - cr.close() - StringIO.close(self) - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_ftp/ftpserver/abstracted_fs.py b/addons/document_ftp/ftpserver/abstracted_fs.py index 326c62f7a92..dd393f1b1e9 100644 --- a/addons/document_ftp/ftpserver/abstracted_fs.py +++ b/addons/document_ftp/ftpserver/abstracted_fs.py @@ -15,7 +15,7 @@ import sql_db from service import security from osv import osv -from document.nodes import get_node_context +from document.document import get_node_context def _get_month_name(month): month=int(month) From 92e8304acb06acf44bccded929bf8d9c2b7c0c81 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Mon, 17 Dec 2012 02:45:19 +0100 Subject: [PATCH 13/36] cleanup tests bzr revid: al@openerp.com-20121217014519-fwr5otel8qwlevaz --- addons/document/test/document_test.yml | 3 --- addons/document/test/document_test2.yml | 10 ---------- 2 files changed, 13 deletions(-) diff --git a/addons/document/test/document_test.yml b/addons/document/test/document_test.yml index 5864a223033..a6b938f0e69 100644 --- a/addons/document/test/document_test.yml +++ b/addons/document/test/document_test.yml @@ -5,7 +5,6 @@ - !record {model: 'document.directory', id: dir_partner_label}: name : "Partner Labels" - storage_id : storage_default type : ressource content_ids: - name: "Label" @@ -22,7 +21,6 @@ - !record {model: 'document.directory', id: directory_1}: name : "Directory 1" - storage_id : storage_default type : directory - In order to make a directory hierarchy in OpenERP I will make other static directory "Directory 2" and I put its Parent Item as "Directory 1", @@ -30,7 +28,6 @@ - !record {model: 'document.directory', id: directory_2}: name : "Directory 2" - storage_id : storage_default type : directory parent_id : directory_1 - diff --git a/addons/document/test/document_test2.yml b/addons/document/test/document_test2.yml index be91bfb3644..2ee3cda76a0 100644 --- a/addons/document/test/document_test2.yml +++ b/addons/document/test/document_test2.yml @@ -1,13 +1,3 @@ -- - In order to test the document management I make sure the default installation has some storage. -- - !assert {model: document.storage, id: storage_default }: - - id != False -- - I make sure the default installation has some root directory. -- - !assert {model: document.directory, id: dir_root}: - - storage_id != False - I create a "Testing" folder where all the test data will go. - From 45ce2234577fc5df16c25ebe45a9e4f5597f3213 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Mon, 17 Dec 2012 02:56:51 +0100 Subject: [PATCH 14/36] cleanup tests bzr revid: al@openerp.com-20121217015651-qdw4iugzh9ghwv19 --- addons/document/document.py | 2 -- addons/document/test/document_test2.yml | 1 - .../document_ftp/test/document_ftp_test2.yml | 26 +++++++------------ 3 files changed, 9 insertions(+), 20 deletions(-) diff --git a/addons/document/document.py b/addons/document/document.py index 2ae5d55b7ad..6c75b60fcfe 100644 --- a/addons/document/document.py +++ b/addons/document/document.py @@ -2055,10 +2055,8 @@ class nodefd_db(StringIO, node_descriptor): if mode in ('r', 'r+'): data = ira_browse.datas - print "READ64",data if data: data = data.decode('base64') - print "READ",data self._size = len(data) StringIO.__init__(self, data) elif mode in ('w', 'w+'): diff --git a/addons/document/test/document_test2.yml b/addons/document/test/document_test2.yml index 2ee3cda76a0..beff61d4d0f 100644 --- a/addons/document/test/document_test2.yml +++ b/addons/document/test/document_test2.yml @@ -32,7 +32,6 @@ !assert {model: ir.attachment, id: file_test2 }: - datas == "YWJjZA==\n" - file_size == 4 - - file_type == 'text/plain' - I rename the attachment. - diff --git a/addons/document_ftp/test/document_ftp_test2.yml b/addons/document_ftp/test/document_ftp_test2.yml index eb86a99407d..ce8e25906d2 100644 --- a/addons/document_ftp/test/document_ftp_test2.yml +++ b/addons/document_ftp/test/document_ftp_test2.yml @@ -235,43 +235,37 @@ - I check that test3.txt is removed. - - I create 200 files through FTP + I create 5 files through FTP - !python {model: ir.attachment}: | from document_ftp import test_easyftp as te from cStringIO import StringIO ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2') fdata = StringIO('abcd') - # TODO speed - for i in range(0, 200): + for i in range(0, 5): fdata.seek(0) ftp.storbinary('STOR test-name%s.txt' %i, fdata) ftp.close() - - I list the 200 files, check speed + I list the 5 files, check speed - !python {model: ir.attachment}: | from document_ftp import test_easyftp as te ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2') - # TODO speed - assert len(ftp.nlst()) >= 200, "We haven't managed to store 200 files!" + assert len(ftp.nlst()) >= 5, "We haven't managed to store 5 files!" - - I read the 200 files, check speed - # TODO + I read the 5 files, check speed - - I move the 200 files to 'Test-Folder2' - # TODO - + I move the 5 files to 'Test-Folder2' - - I delete the 200 files + I delete the 5 files - !python {model: ir.attachment}: | from document_ftp import test_easyftp as te from cStringIO import StringIO ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2') - # TODO speed ftp.delete('test3.txt') - for i in range(0, 200): + for i in range(0, 5): ftp.delete('test-name%s.txt' %i) ftp.close() @@ -282,11 +276,9 @@ from document_ftp import test_easyftp as te from cStringIO import StringIO ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - # TODO speed ftp.delete('test.txt') ftp.delete('test-renamed.txt') - ftp.close() - + ftp.close() - I remove the 'Test-Folder2' - From 25acb93277f1f38fa7d8db4493e42bc48bfde861 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Mon, 17 Dec 2012 03:00:13 +0100 Subject: [PATCH 15/36] more fixes bzr revid: al@openerp.com-20121217020013-b0buz0ilza9ole0a --- addons/document/security/ir.model.access.csv | 3 --- addons/document/test/document_test.yml | 2 +- addons/document_webdav/nodes.py | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/addons/document/security/ir.model.access.csv b/addons/document/security/ir.model.access.csv index a82b9acd838..e0513a0640c 100644 --- a/addons/document/security/ir.model.access.csv +++ b/addons/document/security/ir.model.access.csv @@ -6,9 +6,6 @@ access_document_directory_content_all,document.directory.content all,model_docum access_document_directory_content_group_document_manager,document.directory.content document manager,model_document_directory_content,base.group_system,1,1,1,1 access_document_directory_content_type_group_document_manager,document.directory.content.type document manager,model_document_directory_content_type,base.group_system,1,1,1,1 access_document_directory_content_type_group_system,document.directory.content.type group system,model_document_directory_content_type,base.group_user,1,0,0,0 -access_document_storage_group_document_manager,document.storage document manager,model_document_storage,base.group_system,1,1,1,1 -access_document_storage_group_system,document.storage group system,model_document_storage,base.group_user,1,0,0,0 -access_document_storage_group_user,document.storage group user,model_document_storage,base.group_document_user,1,1,1,1 access_ir_attachment_group_user,ir.attachment user,base.model_ir_attachment,base.group_document_user,1,1,1,1 access_ir_attachment_group_system,ir.attachment system,base.model_ir_attachment,base.group_system,1,0,0,0 access_res_partner_group_user,res.partner user,base.model_res_partner,base.group_document_user,1,1,1,0 diff --git a/addons/document/test/document_test.yml b/addons/document/test/document_test.yml index a6b938f0e69..75fa74548d0 100644 --- a/addons/document/test/document_test.yml +++ b/addons/document/test/document_test.yml @@ -17,7 +17,7 @@ id = self.write(cr, uid, [ref("dir_partner_label")], {'ressource_type_id' : ids[0]}, context) - In order to check static directory in OpenERP which is the real directory just like system's local folders, - First I create a directory in OpenERP named "Directory 1" with storage as "Default File storage" and type as "Static Directory" + First I create a directory in OpenERP named "Directory 1" with type as "Static Directory" - !record {model: 'document.directory', id: directory_1}: name : "Directory 1" diff --git a/addons/document_webdav/nodes.py b/addons/document_webdav/nodes.py index a8fedee4fe3..babe10a519e 100644 --- a/addons/document_webdav/nodes.py +++ b/addons/document_webdav/nodes.py @@ -20,7 +20,7 @@ ############################################################################## -from document import nodes +from document import document as nodes from tools.safe_eval import safe_eval as eval import time import urllib From d01868ed74127061c04ffca0f79f72f5e7beb250 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Mon, 17 Dec 2012 03:13:23 +0100 Subject: [PATCH 16/36] webdav fixes bzr revid: al@openerp.com-20121217021323-0u771l13oo3hqu7m --- addons/document_webdav/document_webdav.py | 9 ++------- addons/document_webdav/nodes.py | 16 ++++++++++++---- addons/document_webdav/webdav_setup.xml | 6 ------ 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/addons/document_webdav/document_webdav.py b/addons/document_webdav/document_webdav.py index cb1315140a3..e096c2b509c 100644 --- a/addons/document_webdav/document_webdav.py +++ b/addons/document_webdav/document_webdav.py @@ -20,9 +20,10 @@ ############################################################################## from osv import osv, fields -import nodes from tools import config +import nodes + class document_davdir(osv.osv): _inherit = 'document.directory' @@ -64,8 +65,6 @@ class document_davdir(osv.osv): """ return (nodes.node_database(context=ncontext), uri) -document_davdir() - class dav_dir_property(osv.osv): """ Arbitrary WebDAV properties, attached to document.directories. @@ -96,8 +95,6 @@ class dav_dir_property(osv.osv): 'do_subst': False, } -dav_dir_property() - class dav_file_property(osv.osv): """ Arbitrary WebDAV properties, attached to ir.attachments. @@ -126,7 +123,5 @@ class dav_file_property(osv.osv): 'do_subst': False, } -dav_file_property() - #eof # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/nodes.py b/addons/document_webdav/nodes.py index babe10a519e..aab83766514 100644 --- a/addons/document_webdav/nodes.py +++ b/addons/document_webdav/nodes.py @@ -27,10 +27,18 @@ import urllib import uuid from openerp import SUPERUSER_ID -try: - from tools.dict_tools import dict_filter -except ImportError: - from document.dict_tools import dict_filter +def dict_filter(srcdic, keys, res=None): + ''' Return a copy of srcdic that has only keys set. + If any of keys are missing from srcdic, the result won't have them, + either. + @param res If given, result will be updated there, instead of a new dict. + ''' + if res is None: + res = {} + for k in keys: + if k in srcdic: + res[k] = srcdic[k] + return res class node_acl_mixin(object): def _get_dav_owner(self, cr): diff --git a/addons/document_webdav/webdav_setup.xml b/addons/document_webdav/webdav_setup.xml index 6ea894b6a22..d75c416a93e 100644 --- a/addons/document_webdav/webdav_setup.xml +++ b/addons/document_webdav/webdav_setup.xml @@ -14,7 +14,6 @@ - directory principals @@ -27,7 +26,6 @@ - directory groups @@ -39,7 +37,6 @@ - directory resources @@ -52,7 +49,6 @@ - ressource @@ -66,7 +62,6 @@ - ressource @@ -78,7 +73,6 @@ - directory locations From f60cc9ea2cf213bafad8f94571acc2a9dffd4f48 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Mon, 17 Dec 2012 03:24:49 +0100 Subject: [PATCH 17/36] webdav fixes for runbot bzr revid: al@openerp.com-20121217022449-veh0s2i5m8bc6bt7 --- addons/document_webdav/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/document_webdav/__init__.py b/addons/document_webdav/__init__.py index 11bbd35f7c3..c62339bdb7b 100644 --- a/addons/document_webdav/__init__.py +++ b/addons/document_webdav/__init__.py @@ -22,10 +22,10 @@ import logging _logger = logging.getLogger(__name__) +import document_webdav try: import webdav import webdav_server - import document_webdav except ImportError: _logger.info('document_webdav disabled please install PyWebDAV from http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-0.9.4.tar.gz&can=2&q=/') From ff7626229a2687ed85271c510ecc017e35634056 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Mon, 17 Dec 2012 04:09:13 +0100 Subject: [PATCH 18/36] document fix filtering when parents are nullt bzr revid: al@openerp.com-20121217030913-x50nlq5qf7kuffe3 --- addons/document/document.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/addons/document/document.py b/addons/document/document.py index 6c75b60fcfe..444ddd74781 100644 --- a/addons/document/document.py +++ b/addons/document/document.py @@ -79,17 +79,26 @@ class document_file(osv.osv): ids = super(document_file, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=False) if not ids: return 0 if count else [] + # Filter out documents that are in directories that the user is not allowed to read. # Must use pure SQL to avoid access rules exceptions (we want to remove the records, # not fail), and the records have been filtered in parent's search() anyway. - cr.execute('SELECT id, parent_id from "%s" WHERE id in %%s' % self._table, (tuple(ids),)) - doc_pairs = cr.fetchall() - parent_ids = set(zip(*doc_pairs)[1]) + cr.execute('SELECT id, parent_id from ir_attachment WHERE id in %s', (tuple(ids),)) + + # cont a dict of parent -> attach + parents = {} + for attach_id, attach_parent in cr.fetchall(): + parents.setdefault(attach_parent, []).append(attach_id) + parent_ids = parents.keys() + + # filter parents visible_parent_ids = self.pool.get('document.directory').search(cr, uid, [('id', 'in', list(parent_ids))]) - disallowed_parents = parent_ids.difference(visible_parent_ids) - for doc_id, parent_id in doc_pairs: - if parent_id in disallowed_parents: - ids.remove(doc_id) + + # null parents means allowed + ids = parents.get(None,[]) + for parent_id in visible_parent_ids: + ids.extend(parents[parent_id]) + return len(ids) if count else ids def copy(self, cr, uid, id, default=None, context=None): From e7a3b2638ba9fd768b52ce5289c335556098c4ad Mon Sep 17 00:00:00 2001 From: Date: Mon, 17 Dec 2012 11:55:52 +0100 Subject: [PATCH 19/36] [FIX] select the current fiscal year in the financial reports wizards lp bug: https://launchpad.net/bugs/1091171 fixed bzr revid: guewen.baconnier@camptocamp.com-20121217105552-s82nf3t5ttlrvkr0 --- addons/account/wizard/account_report_common.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/account/wizard/account_report_common.py b/addons/account/wizard/account_report_common.py index 2c1448b5e6f..bf579532eab 100644 --- a/addons/account/wizard/account_report_common.py +++ b/addons/account/wizard/account_report_common.py @@ -122,9 +122,11 @@ class account_common_report(osv.osv_memory): now = time.strftime('%Y-%m-%d') company_id = False ids = context.get('active_ids', []) + domain = [('date_start', '<', now), ('date_stop', '>', now)] if ids and context.get('active_model') == 'account.account': company_id = self.pool.get('account.account').browse(cr, uid, ids[0], context=context).company_id.id - fiscalyears = self.pool.get('account.fiscalyear').search(cr, uid, [('date_start', '<', now), ('date_stop', '>', now), ('company_id', '=', company_id)], limit=1) + domain += ('company_id', '=', company_id) + fiscalyears = self.pool.get('account.fiscalyear').search(cr, uid, domain, limit=1) return fiscalyears and fiscalyears[0] or False def _get_all_journal(self, cr, uid, context=None): From 68097047e7de56f1cabd953c262d126165849c42 Mon Sep 17 00:00:00 2001 From: "dle@openerp.com" <> Date: Tue, 18 Dec 2012 17:37:24 +0100 Subject: [PATCH 20/36] [FIX]_logger instead of self._logger, fix report name bzr revid: dle@openerp.com-20121218163724-08wry3f8tdwz8g23 --- addons/document/document.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/document/document.py b/addons/document/document.py index 437fb9ff28d..99bc4137e62 100644 --- a/addons/document/document.py +++ b/addons/document/document.py @@ -408,12 +408,12 @@ class document_directory_content(osv.osv): res2 = [] tname = '' if content.include_name: - content_name = node.displayname or '' + record_name = node.displayname or '' # obj = node.context._dirobj.pool.get(model) - if content_name: - tname = (content.prefix or '') + content_name + (content.suffix or '') + (content.extension or '') + if record_name: + tname = (content.prefix or '') + record_name + (content.suffix or '') + (content.extension or '') else: - tname = (content.prefix or '') + (content.suffix or '') + (content.extension or '') + tname = (content.prefix or '') + (content.name or '') + (content.suffix or '') + (content.extension or '') if tname.find('/'): tname=tname.replace('/', '_') act_id = False @@ -556,7 +556,7 @@ class document_storage(osv.osv): file_node.content_type = mime return True except Exception, e : - self._logger.warning("Cannot save data.", exc_info=True) + _logger.warning("Cannot save data.", exc_info=True) # should we really rollback once we have written the actual data? # at the db case (only), that rollback would be safe raise except_orm(_('Error at doc write!'), str(e)) From a68e84387c67f3909c841e9596717440a5ab0a68 Mon Sep 17 00:00:00 2001 From: "dle@openerp.com" <> Date: Tue, 18 Dec 2012 17:53:25 +0100 Subject: [PATCH 21/36] [FIX]Data xml bzr revid: dle@openerp.com-20121218165325-75pq1jxc3vsdwtu2 --- addons/document/document_data.xml | 54 +------------------------------ 1 file changed, 1 insertion(+), 53 deletions(-) diff --git a/addons/document/document_data.xml b/addons/document/document_data.xml index ca3a2ed7144..ee4521bfc46 100644 --- a/addons/document/document_data.xml +++ b/addons/document/document_data.xml @@ -22,26 +22,13 @@ application/pdf - - Partners by Category - - ressource - 1 - 0 - - - - - Partners ressource - [('category_id','in',[active_id])] - + 0 - @@ -53,44 +40,5 @@ 0 - - Products - - - 0 - - - - - Sales Order - - - 0 - - - - - All Sales Order - - - 0 - - - - - Quotations - - - 0 - - - - - Projects - - - 0 - - From 6fa12e9458b0caa72b12ce1a5153ce206d905e62 Mon Sep 17 00:00:00 2001 From: "dle@openerp.com" <> Date: Tue, 18 Dec 2012 17:58:39 +0100 Subject: [PATCH 22/36] [FIX]remove dctx, from merge https://code.launchpad.net/~numerigraphe/openobject-addons/trunk-document-dctx-noprefix/+merge/92431 bzr revid: dle@openerp.com-20121218165839-mwgb8jl5tgcn9eam --- addons/document/document.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/document/document.py b/addons/document/document.py index 99bc4137e62..52c4984a299 100644 --- a/addons/document/document.py +++ b/addons/document/document.py @@ -341,7 +341,7 @@ class document_directory_dctx(osv.osv): domain expression. For that, their parents will export a context where useful information will be passed on. If you define sth like "s_id" = "this.id" at a folder iterating over sales, its - children could have a domain like [('sale_id', = ,dctx_s_id )] + children could have a domain like [('sale_id', = ,s_id )] This system should be used recursively, that is, parent dynamic context will be appended to all children down the tree. """ @@ -349,7 +349,7 @@ class document_directory_dctx(osv.osv): _description = 'Directory Dynamic Context' _columns = { 'dir_id': fields.many2one('document.directory', 'Directory', required=True, ondelete="cascade"), - 'field': fields.char('Field', size=20, required=True, select=1, help="The name of the field. Note that the prefix \"dctx_\" will be prepended to what is typed here."), + 'field': fields.char('Field', size=20, required=True, select=1, help="The name of the field."), 'expr': fields.char('Expression', size=64, required=True, help="A python expression used to evaluate the field.\n" + \ "You can use 'dir_id' for current dir, 'res_id', 'res_model' as a reference to the current record, in dynamic folders"), } @@ -418,7 +418,7 @@ class document_directory_content(osv.osv): tname=tname.replace('/', '_') act_id = False if 'dctx_res_id' in node.dctx: - act_id = node.dctx['dctx_res_id'] + act_id = node.dctx['res_id'] elif hasattr(node, 'res_id'): act_id = node.res_id else: @@ -1010,7 +1010,7 @@ class node_dir(node_database): if dirr and dirr.dctx_ids: for dfld in dirr.dctx_ids: try: - self.dctx['dctx_' + dfld.field] = safe_eval(dfld.expr,dc2) + self.dctx[dfld.field] = safe_eval(dfld.expr,dc2) except Exception,e: print "Cannot eval %s." % dfld.expr print e @@ -1254,7 +1254,7 @@ class node_res_dir(node_class): # and then, we prepare a dctx dict, for deferred evaluation: self.dctx_dict = {} for dfld in dirr.dctx_ids: - self.dctx_dict['dctx_' + dfld.field] = dfld.expr + self.dctx_dict[dfld.field] = dfld.expr def __eq__(self, other): if type(self) != type(other): From 319908f1f69908a8a4670760e9c9c86f753818cb Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Wed, 19 Dec 2012 14:43:53 +0100 Subject: [PATCH 23/36] [FIX] project: modifying the type of an analytic account wasn't working bzr revid: qdp-launchpad@openerp.com-20121219134353-bsq71cu1ayvyn2tk --- addons/project/project.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/project/project.py b/addons/project/project.py index c19e7814170..3d2af3c9a92 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -1388,7 +1388,8 @@ class account_analytic_account(osv.osv): for account in self.browse(cr, uid, ids, context=context): if not name: vals['name'] = account.name - vals['type'] = account.type + if not vals.get('type'): + vals['type'] = account.type self.project_create(cr, uid, account.id, vals, context=context) return super(account_analytic_account, self).write(cr, uid, ids, vals, context=context) From 6d49547fb6aafa5c9b5417177dd518b21d7b3f46 Mon Sep 17 00:00:00 2001 From: "dle@openerp.com" <> Date: Wed, 19 Dec 2012 17:18:40 +0100 Subject: [PATCH 24/36] [FIX]Remove exception bzr revid: dle@openerp.com-20121219161840-t5jrxrtly1jzm8lh --- addons/document_webdav/webdav_server.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/addons/document_webdav/webdav_server.py b/addons/document_webdav/webdav_server.py index f801a56ee97..2c008abe02f 100644 --- a/addons/document_webdav/webdav_server.py +++ b/addons/document_webdav/webdav_server.py @@ -57,6 +57,7 @@ import re import time from string import atoi import addons +import socket # from DAV.constants import DAV_VERSION_1, DAV_VERSION_2 from xml.dom import minidom from redirect import RedirectHTTPHandler @@ -87,6 +88,12 @@ class DAVHandler(DAVRequestHandler, HttpOptions, FixSendError): 'DELETE', 'TRACE', 'REPORT', ] } + def __init__(self, request, client_address, server): + self.request = request + self.client_address = client_address + self.server = server + self.setup() + def get_userinfo(self, user, pw): return False @@ -118,15 +125,9 @@ class DAVHandler(DAVRequestHandler, HttpOptions, FixSendError): return res def setup(self): - DAVRequestHandler.setup(self) self.davpath = '/'+config.get_misc('webdav','vdir','webdav') addr, port = self.server.server_name, self.server.server_port server_proto = getattr(self.server,'proto', 'http').lower() - try: - if hasattr(self.request, 'getsockname'): - addr, port = self.request.getsockname() - except Exception, e: - self.log_error("Cannot calculate own address: %s" , e) # Too early here to use self.headers self.baseuri = "%s://%s:%d/"% (server_proto, addr, port) self.IFACE_CLASS = openerp_dav_handler(self, self.verbose) From 068e93a887cb5dbb008e47252fda82450fbb36e8 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 19 Dec 2012 17:39:39 +0100 Subject: [PATCH 25/36] [ADD] Added 'instance' in kanban box qweb redering context bzr revid: fme@openerp.com-20121219163939-5l0pdjphzeaog9ko --- addons/web_kanban/static/src/js/kanban.js | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index 71e8336d0eb..0e90cd5c9ad 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -793,6 +793,7 @@ instance.web_kanban.KanbanRecord = instance.web.Widget.extend({ }, renderElement: function() { this.qweb_context = { + instance: instance, record: this.record, widget: this, read_only_mode: this.view.options.read_only_mode, From 7a627b581062ea55178448480d7ed9f7ee36a6e0 Mon Sep 17 00:00:00 2001 From: "dle@openerp.com" <> Date: Wed, 19 Dec 2012 18:00:05 +0100 Subject: [PATCH 26/36] [FIX]Update request missing one argument bzr revid: dle@openerp.com-20121219170005-swdzzhvm2nifye5f --- addons/document/document.py | 3 +-- addons/document_webdav/dav_fs.py | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/addons/document/document.py b/addons/document/document.py index 52c4984a299..6cb2cabbf38 100644 --- a/addons/document/document.py +++ b/addons/document/document.py @@ -551,7 +551,7 @@ class document_storage(osv.osv): # a hack: /assume/ that the calling write operation will not try # to write the fname and size, and update them in the db concurrently. # We cannot use a write() here, because we are already in one. - cr.execute('UPDATE ir_attachment SET index_content = %s, file_type = %s WHERE id = %s', (filesize, icont_u, mime, file_node.file_id)) + cr.execute('UPDATE ir_attachment SET file_size = %s, index_content = %s, file_type = %s WHERE id = %s', (filesize, icont_u, mime, file_node.file_id)) file_node.content_length = filesize file_node.content_type = mime return True @@ -1620,7 +1620,6 @@ class node_res_obj(node_class): } if not self.res_find_all: val['parent_id'] = self.dir_id - fil_id = fil_obj.create(cr, uid, val, context=ctx) fil = fil_obj.browse(cr, uid, fil_id, context=ctx) klass = self.context.node_file_class diff --git a/addons/document_webdav/dav_fs.py b/addons/document_webdav/dav_fs.py index 59e93fa3722..9f677400dd8 100644 --- a/addons/document_webdav/dav_fs.py +++ b/addons/document_webdav/dav_fs.py @@ -709,7 +709,6 @@ class openerp_dav_handler(dav_interface): if not dir_node: cr.close() raise DAV_NotFound('Parent folder not found.') - newchild = self._try_function(dir_node.create_child, (cr, objname, data), "create %s" % objname, cr=cr) if not newchild: From eabc5b0dde75d176e7abae4be40b68479d9ba294 Mon Sep 17 00:00:00 2001 From: "dle@openerp.com" <> Date: Wed, 19 Dec 2012 18:13:08 +0100 Subject: [PATCH 27/36] [FIX]Import failed bzr revid: dle@openerp.com-20121219171308-5sdy52hpyn9gxpv7 --- addons/document_webdav/dav_fs.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/document_webdav/dav_fs.py b/addons/document_webdav/dav_fs.py index 9f677400dd8..759d6764b47 100644 --- a/addons/document_webdav/dav_fs.py +++ b/addons/document_webdav/dav_fs.py @@ -39,7 +39,10 @@ except ImportError: import openerp from openerp import pooler, sql_db, netsvc from openerp.tools import misc -from openerp.addons.document.dict_tools import dict_merge2 +try: + from tools.dict_tools import dict_merge2 +except ImportError: + from document.dict_tools import dict_merge2 from cache import memoize from webdav import mk_lock_response From f2e50cc6a739eccf1986bdcde53bbd29f36ac253 Mon Sep 17 00:00:00 2001 From: "dle@openerp.com" <> Date: Wed, 19 Dec 2012 18:18:35 +0100 Subject: [PATCH 28/36] [FIX]paste dict_merge2 instead of import bzr revid: dle@openerp.com-20121219171835-p6jsfd3zgq5t41ug --- addons/document_webdav/dav_fs.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/addons/document_webdav/dav_fs.py b/addons/document_webdav/dav_fs.py index 759d6764b47..e5756f5df91 100644 --- a/addons/document_webdav/dav_fs.py +++ b/addons/document_webdav/dav_fs.py @@ -39,10 +39,6 @@ except ImportError: import openerp from openerp import pooler, sql_db, netsvc from openerp.tools import misc -try: - from tools.dict_tools import dict_merge2 -except ImportError: - from document.dict_tools import dict_merge2 from cache import memoize from webdav import mk_lock_response @@ -57,6 +53,22 @@ day_names = { 0: 'Mon', 1: 'Tue' , 2: 'Wed', 3: 'Thu', 4: 'Fri', 5: 'Sat', 6: 'S month_names = { 1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun', 7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec' } +def dict_merge2(*dicts): + """ Return a dict with all values of dicts. + If some key appears twice and contains iterable objects, the values + are merged (instead of overwritten). + """ + res = {} + for d in dicts: + for k in d.keys(): + if k in res and isinstance(res[k], (list, tuple)): + res[k] = res[k] + d[k] + elif k in res and isinstance(res[k], dict): + res[k].update(d[k]) + else: + res[k] = d[k] + return res + class DAV_NotFound2(DAV_NotFound): """404 exception, that accepts our list uris """ From e5a244eea3fe9bf188b5d1b4501d178609ddbfb9 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 19 Dec 2012 18:40:09 +0100 Subject: [PATCH 29/36] [FIX] account move reconciliation: Properly evaluate action context (since evalpocalypse) bzr revid: fme@openerp.com-20121219174009-se5fvfizxh2wmh4x --- addons/account/static/src/js/account_move_reconciliation.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account/static/src/js/account_move_reconciliation.js b/addons/account/static/src/js/account_move_reconciliation.js index 19c194166e2..dbbfe3cc069 100644 --- a/addons/account/static/src/js/account_move_reconciliation.js +++ b/addons/account/static/src/js/account_move_reconciliation.js @@ -103,7 +103,7 @@ openerp.account = function (instance) { action_id: result[1], context: additional_context }).done(function (result) { - result.context = _.extend(result.context || {}, additional_context); + result.context = instance.web.pyeval.eval('contexts', [result.context, additional_context]); result.flags = result.flags || {}; result.flags.new_window = true; return self.do_action(result, { From 833fcbd7a209066a39e3dfe0dbb12cde856b2a98 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 19 Dec 2012 19:10:03 +0100 Subject: [PATCH 30/36] [FIX] mail: avoid duplicate notifications when receiving inbound mails - disable auto-follow of system user used by mail gateway, when message_process calls message_new (otherwise this user would be a follower of all new records) - avoid matching multiple partners with the same email when looking up partner_id for inbound emails - just 1 partner per email is enough (avoids more duplicates) - delay setting partner_ids on mail_messages posted by the mail gateway, in order to avoid notifying again people who were direct recipient of the message in the first place (should perhaps be improved to only do that for external emails, i.e. emails that are not present in the mail.alias table) bzr revid: odo@openerp.com-20121219181003-xvw5q0dd3t2jtjw9 --- addons/mail/mail_thread.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index e8bfdc1a8fe..ef616c44218 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -268,7 +268,7 @@ class mail_thread(osv.AbstractModel): """ Find partners related to some header fields of the message. """ s = ', '.join([decode(message.get(h)) for h in header_fields if message.get(h)]) return [partner_id for email in tools.email_split(s) - for partner_id in self.pool.get('res.partner').search(cr, uid, [('email', 'ilike', email)], context=context)] + for partner_id in self.pool.get('res.partner').search(cr, uid, [('email', 'ilike', email)], limit=1, context=context)] def _message_find_user_id(self, cr, uid, message, context=None): from_local_part = tools.email_split(decode(message.get('From')))[0] @@ -431,6 +431,10 @@ class mail_thread(osv.AbstractModel): msg = self.message_parse(cr, uid, msg_txt, save_original=save_original, context=context) if strip_attachments: msg.pop('attachments', None) + + # postpone setting msg.partner_ids after message_post, to avoid double notifications + partner_ids = msg.pop('partner_ids', []) + thread_id = False for model, thread_id, custom_values, user_id in routes: if self._name != model: @@ -440,14 +444,24 @@ class mail_thread(osv.AbstractModel): assert thread_id and hasattr(model_pool, 'message_update') or hasattr(model_pool, 'message_new'), \ "Undeliverable mail with Message-Id %s, model %s does not accept incoming emails" % \ (msg['message_id'], model) + + # disabled subscriptions during message_new/update to avoid having the system user running the + # email gateway become a follower of all inbound messages + nosub_ctx = dict(context, mail_nosubscribe=True) if thread_id and hasattr(model_pool, 'message_update'): - model_pool.message_update(cr, user_id, [thread_id], msg, context=context) + model_pool.message_update(cr, user_id, [thread_id], msg, context=nosub_ctx) else: - thread_id = model_pool.message_new(cr, user_id, msg, custom_values, context=context) + thread_id = model_pool.message_new(cr, user_id, msg, custom_values, context=nosub_ctx) else: assert thread_id == 0, "Posting a message without model should be with a null res_id, to create a private message." model_pool = self.pool.get('mail.thread') - model_pool.message_post_user_api(cr, uid, [thread_id], context=context, content_subtype='html', **msg) + new_msg_id = model_pool.message_post_user_api(cr, uid, [thread_id], context=context, content_subtype='html', **msg) + + if partner_ids: + # postponed after message_post, because this is an external message and we don't want to create + # duplicate emails due to notifications + self.pool.get('mail.message').write(cr, uid, [new_msg_id], {'partner_ids': partner_ids}, context=context) + return thread_id def message_new(self, cr, uid, msg_dict, custom_values=None, context=None): From b0cb29dea2d14eb65abbc3117168709fc2599dcf Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Wed, 19 Dec 2012 19:18:35 +0100 Subject: [PATCH 31/36] [IMP] Adding an extra_email argument to message_post_user_api bzr revid: fp@tinyerp.com-20121219181835-twsoxzlu9x7y3mqr --- addons/mail/mail_thread.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index ef616c44218..48bdef508d0 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -749,7 +749,8 @@ class mail_thread(osv.AbstractModel): return mail_message.create(cr, uid, values, context=context) def message_post_user_api(self, cr, uid, thread_id, body='', subject=False, parent_id=False, - attachment_ids=None, context=None, content_subtype='plaintext', **kwargs): + attachment_ids=None, context=None, content_subtype='plaintext', + extra_email=[], **kwargs): """ Wrapper on message_post, used for user input : - mail gateway - quick reply in Chatter (refer to mail.js), not @@ -761,6 +762,7 @@ class mail_thread(osv.AbstractModel): - type and subtype: comment and mail.mt_comment by default - attachment_ids: supposed not attached to any document; attach them to the related document. Should only be set by Chatter. + - extra_email: [ 'Fabien ', 'al@openerp.com' ] """ ir_attachment = self.pool.get('ir.attachment') mail_message = self.pool.get('mail.message') @@ -769,6 +771,12 @@ class mail_thread(osv.AbstractModel): if content_subtype == 'plaintext': body = tools.plaintext2html(body) + for partner in extra_email: + part_ids = self.pool.get('res.partner').search(cr, uid, [('email', '=', partner)], context=context) + if not part_ids: + part_ids = [self.pool.get('res.partner').name_create(cr, uid, partner, context=context)[0]] + self.message_subscribe(cr, uid, [thread_id], part_ids, context=context) + partner_ids = kwargs.pop('partner_ids', []) if parent_id: parent_message = self.pool.get('mail.message').browse(cr, uid, parent_id, context=context) From adb16fd77918f186941ef634917f2185c01aff8b Mon Sep 17 00:00:00 2001 From: "vta vta@openerp.com" <> Date: Wed, 19 Dec 2012 21:03:39 +0100 Subject: [PATCH 32/36] [FIX] Anonymous group allowed to create mail.message, so anonymous users can submit contact forms which creates a lead bzr revid: vta@openerp.com-20121219200339-42fx8vxw7pzfclxl --- addons/portal_anonymous/security/ir.model.access.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/portal_anonymous/security/ir.model.access.csv b/addons/portal_anonymous/security/ir.model.access.csv index a26b600288d..24c29200230 100644 --- a/addons/portal_anonymous/security/ir.model.access.csv +++ b/addons/portal_anonymous/security/ir.model.access.csv @@ -1,3 +1,3 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_mail_message_portal,mail.message.portal,mail.model_mail_message,portal.group_anonymous,1,0,0,0 +access_mail_message_portal,mail.message.portal,mail.model_mail_message,portal.group_anonymous,1,0,1,0 access_res_partner,res.partner,base.model_res_partner,portal.group_anonymous,1,0,0,0 From 0ed151708ab3a4423e1d6a1ddcfed7e107113a33 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Thu, 20 Dec 2012 03:37:21 +0100 Subject: [PATCH 33/36] last fix bzr revid: al@openerp.com-20121220023721-oy7y4czmf3tvmyzl --- openerp/addons/base/ir/ir_attachment.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openerp/addons/base/ir/ir_attachment.py b/openerp/addons/base/ir/ir_attachment.py index b73d8362c58..5f54b4aca8e 100644 --- a/openerp/addons/base/ir/ir_attachment.py +++ b/openerp/addons/base/ir/ir_attachment.py @@ -24,6 +24,7 @@ import itertools import os import re +from openerp import tools from openerp.osv import fields,osv class ir_attachment(osv.osv): @@ -77,7 +78,7 @@ class ir_attachment(osv.osv): r = '' try: if bin_size: - r = os.path.filesize(full_path) + r = os.path.getsize(full_path) else: r = open(full_path).read().encode('base64') except IOError: From 2a1ca8fba20debf2eb771c9bc615a1d85987bdf3 Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Thu, 20 Dec 2012 04:43:23 +0000 Subject: [PATCH 34/36] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20121220044323-lda479xp4patic59 --- openerp/addons/base/i18n/en_GB.po | 13 +- openerp/addons/base/i18n/es.po | 1155 ++++++++++++++++++++++++----- openerp/addons/base/i18n/es_EC.po | 45 +- openerp/addons/base/i18n/et.po | 54 +- openerp/addons/base/i18n/hr.po | 10 +- openerp/addons/base/i18n/hu.po | 296 +++++++- openerp/addons/base/i18n/it.po | 2 +- openerp/addons/base/i18n/ro.po | 98 ++- openerp/addons/base/i18n/zh_CN.po | 32 +- 9 files changed, 1429 insertions(+), 276 deletions(-) diff --git a/openerp/addons/base/i18n/en_GB.po b/openerp/addons/base/i18n/en_GB.po index e6f7fcdf2a7..5be4080d6a6 100644 --- a/openerp/addons/base/i18n/en_GB.po +++ b/openerp/addons/base/i18n/en_GB.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-server\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-17 20:41+0000\n" +"PO-Revision-Date: 2012-12-19 19:54+0000\n" "Last-Translator: David Bowers \n" "Language-Team: English (United Kingdom) \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-18 04:58+0000\n" -"X-Generator: Launchpad (build 16372)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:42+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -4199,6 +4199,13 @@ msgid "" "invite.\n" "\n" msgstr "" +"\n" +"This module updates memos inside OpenERP when using an external pad\n" +"=====================================================================\n" +"\n" +"Use to update your text memo in real time with a user following that you " +"invite.\n" +"\n" #. module: base #: code:addons/base/module/module.py:609 diff --git a/openerp/addons/base/i18n/es.po b/openerp/addons/base/i18n/es.po index 0b0474e092f..9730848f44d 100644 --- a/openerp/addons/base/i18n/es.po +++ b/openerp/addons/base/i18n/es.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-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-13 16:14+0000\n" -"Last-Translator: Roberto Lizana (trey.es) \n" +"PO-Revision-Date: 2012-12-19 23:24+0000\n" +"Last-Translator: Pedro Manuel Baeza \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-14 05:35+0000\n" -"X-Generator: Launchpad (build 16369)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:42+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -127,6 +127,17 @@ msgid "" " * Product Attributes\n" " " msgstr "" +"\n" +"Módulo que añade fabricantes y atributos en el formulario de producto.\n" +"===========================================================\n" +"\n" +"Puede definir los siguientes campos para un producto:\n" +"-------------------------------------------------\n" +"* Fabricante\n" +"* Nombre del producto del fabricante\n" +"* Código del producto del fabricante\n" +"* Atributos del producto\n" +" " #. module: base #: field:ir.actions.client,params:0 @@ -140,6 +151,9 @@ msgid "" "The module adds google user in res user.\n" "========================================\n" msgstr "" +"\n" +"El módulo añade usuarios Google res.user.\n" +"========================================\n" #. module: base #: help:res.partner,employee:0 @@ -196,6 +210,15 @@ msgid "" "revenue\n" "reports." msgstr "" +"\n" +"Genere facturas desde los gastos y partes de horas.\n" +"========================================================\n" +"\n" +"Módulo para generar facturas basadas en los costes (recursos humanos, " +"gastos, ...).\n" +"\n" +"Puede definir tarifas en la contabilidad analítica, realizando algún informe " +"teórico de beneficios." #. module: base #: model:ir.module.module,description:base.module_crm @@ -311,6 +334,12 @@ msgid "" "\n" " " msgstr "" +"\n" +"Plan de cuentas y localización de impuestos chilenos.\n" +"==============================================\n" +"Plan contable chileno e impuestos de acuerdo a disposiciones vigentes\n" +"\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_sale @@ -358,6 +387,15 @@ msgid "" " * Commitment Date\n" " * Effective Date\n" msgstr "" +"\n" +"Añade información adicional al pedido de venta.\n" +"===================================================\n" +"\n" +"Puede añadir las siguientes fechas adicionales a un pedido de venta:\n" +"-----------------------------------------------------------\n" +" * Fecha solicitada\n" +" * Fecha de confirmación\n" +" * Fecha efectiva\n" #. module: base #: help:ir.actions.act_window,res_id:0 @@ -416,6 +454,13 @@ msgid "" "document and Wiki based Hidden.\n" " " msgstr "" +"\n" +"Instalador oculto para la gestión del conocimiento.\n" +"==========================================\n" +"\n" +"Hace disponible la configuración de la aplicación de conocimiento disponible " +"desde la que se puede instalar el módulo 'document' y el módulo 'wiki'.\n" +" " #. module: base #: model:ir.module.category,name:base.module_category_customer_relationship_management @@ -434,6 +479,13 @@ msgid "" "invoices from picking, OpenERP is able to add and compute the shipping " "line.\n" msgstr "" +"\n" +"Permite añadir métodos de envío en los pedidos de venta y en los albaranes.\n" +"==============================================================\n" +"\n" +"Puede definir su propio transportista y sus tarifas de envío. Cuando se " +"creen facturas desde el albarán, OpenERP podrá añadir y calcular la línea de " +"envío.\n" #. module: base #: code:addons/base/ir/ir_filters.py:83 @@ -863,6 +915,14 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para añadir un contacto en la libreta de direcciones.\n" +"

\n" +"OpenERP le ayuda a gestionar todas las actividades relacionadas con los " +"clientes: discusiones, historial de oportunidades de negocio, documentos, " +"etc.\n" +"

\n" +" " #. module: base #: model:ir.module.module,description:base.module_web_linkedin @@ -934,6 +994,9 @@ msgid "" "image, with aspect ratio preserved. Use this field anywhere a small image is " "required." msgstr "" +"Imagen de tamaño pequeño de este contacto. Se redimensiona automáticamente a " +"64x64 px, con el ratio de aspecto preservado. Use este campo donde se " +"requiera una imagen pequeña." #. module: base #: help:ir.actions.server,mobile:0 @@ -1121,6 +1184,13 @@ msgid "" " * the Tax Code Chart for Luxembourg\n" " * the main taxes used in Luxembourg" msgstr "" +"\n" +"Éste es el módulo base para gestionar el plan de cuentas para Luxemburgo.\n" +"======================================================================\n" +"\n" +" * El plan de cuentas KLUWER\n" +" * Los códigos de impuestos para Luxemburgo\n" +" * Los impuestos principales usados en Luxembourg" #. module: base #: model:res.country,name:base.om @@ -1362,7 +1432,7 @@ msgstr "Contribuyentes" #. module: base #: field:ir.rule,perm_unlink:0 msgid "Apply for Delete" -msgstr "" +msgstr "Aplicar para eliminación" #. module: base #: selection:ir.property,type:0 @@ -1377,7 +1447,7 @@ msgstr "Visible" #. module: base #: model:ir.actions.client,name:base.action_client_base_menu msgid "Open Settings Menu" -msgstr "" +msgstr "Abrir menú 'Configuración'" #. module: base #: selection:base.language.install,lang:0 @@ -1437,6 +1507,8 @@ msgid "" " for uploading to OpenERP's translation " "platform," msgstr "" +"Formato TGZ: archivo comprimido que contiene un archivo PO, adecuado para " +"subirlo directamente a la plataforma de traducción de OpenERP." #. module: base #: view:res.lang:0 @@ -1601,6 +1673,15 @@ msgid "" "with a single statement.\n" " " msgstr "" +"\n" +"Este módulo instala la base para las cuentas bancarias IBAN (International " +"Bank Account Number) y comprueba su validez.\n" +"=============================================================================" +"======================\n" +"\n" +"Incluye la habilidad de extraer correctamente las cuentas locales " +"representadas por una cuenta IBAN con un sólo extracto.\n" +" " #. module: base #: view:ir.module.module:0 @@ -1622,6 +1703,12 @@ msgid "" "=============\n" " " msgstr "" +"\n" +"Este módulo añade el menú y características de reclamaciones al portal si " +"los módulos 'claim' y 'portal' están instalados.\n" +"=============================================================================" +"====================\n" +" " #. module: base #: model:ir.actions.act_window,help:base.action_res_partner_bank_account_form @@ -1654,7 +1741,7 @@ msgstr "" #. module: base #: model:res.country,name:base.mf msgid "Saint Martin (French part)" -msgstr "" +msgstr "San Martín (zona francesa)" #. module: base #: model:ir.model,name:base.model_ir_exports @@ -1817,7 +1904,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_project_issue msgid "Portal Issue" -msgstr "" +msgstr "Incidencia de portal" #. module: base #: model:ir.ui.menu,name:base.menu_tools @@ -1837,11 +1924,15 @@ msgid "" "Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" +"Manual: Lanzado manualmente.\n" +"Automático: Se ejecuta siempre que se reconfigura el sistema.\n" +"Lanzado manualmente una vez: después de que se lanza manualmente, se " +"establece automáticamente a 'Realizado'." #. module: base #: field:res.partner,image_small:0 msgid "Small-sized image" -msgstr "" +msgstr "Imagen pequeña" #. module: base #: model:ir.module.module,shortdesc:base.module_stock @@ -1904,6 +1995,14 @@ msgid "" "Please keep in mind that you should review and adapt it with your " "Accountant, before using it in a live Environment.\n" msgstr "" +"\n" +"Este módulo provee el plan de cuentas estándar para Austria, que está basado " +"en la plantilla de BMF.gv.at.\n" +"=============================================================================" +"=========\n" +"\n" +"Tenga en mente que debe revisar y adaptarlo con sus contables, antes de " +"usarlo en un entorno en producción.\n" #. module: base #: model:res.country,name:base.kg @@ -1922,6 +2021,15 @@ msgid "" "It assigns manager and user access rights to the Administrator and only user " "rights to the Demo user. \n" msgstr "" +"\n" +"Permisos de acceso contables\n" +"========================\n" +"\n" +"Da al usuario administrador acceso a todas las características de " +"contabilidad, tales como asientos o el plan de cuentas.\n" +"\n" +"Asinga derechos de gestor y de usuario al administrador y sólo permisos de " +"usuario al usuario demo. \n" #. module: base #: field:ir.attachment,res_id:0 @@ -1959,7 +2067,7 @@ msgstr "Países Bajos-Holanda" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_event msgid "Portal Event" -msgstr "" +msgstr "Evento del portal" #. module: base #: selection:ir.translation,state:0 @@ -2093,6 +2201,14 @@ msgid "" "with the effect of creating, editing and deleting either ways.\n" " " msgstr "" +"\n" +"Sincronización de las tareas con el parte de horas.\n" +"====================================================================\n" +"\n" +"Este módulo permite transferir las entradas de las tareas definidas para la " +"gestión de proyectos a las líneas del parte de horas para una fecha y un " +"usuario concretos, con el efecto de crear, editar y borrar en ambas vías.\n" +" " #. module: base #: model:ir.model,name:base.model_ir_model_access @@ -2112,6 +2228,15 @@ msgid "" " templates to target objects.\n" " " msgstr "" +"\n" +" * Soporte multiidioma para los planes de cuentas, impuestos, códigos de " +"impuesto, diarios, plantillas de contabilidad, planes de cuentas analíticos " +"y diarios analíticos.\n" +"* Cambios en el asistente de configuración\n" +" - Copiar traducciones para el plan de cuentas, los impuestos, los " +"códigos de impuesto, las posiciones fiscales de las plantillas a los " +"objetos.\n" +" " #. module: base #: field:workflow.transition,act_from:0 @@ -2234,7 +2359,7 @@ msgstr "" #. module: base #: view:base.language.export:0 msgid "PO(T) format: you should edit it with a PO editor such as" -msgstr "" +msgstr "Formato PO(T): debería editarlo con un editor PO como" #. module: base #: model:ir.ui.menu,name:base.menu_administration @@ -2287,7 +2412,7 @@ msgstr "Coreano (KP) / 한국어 (KP)" #. module: base #: model:res.country,name:base.ax msgid "Åland Islands" -msgstr "" +msgstr "Islas Åland" #. module: base #: field:res.company,logo:0 @@ -2323,7 +2448,7 @@ msgstr "Bahamas" #. module: base #: field:ir.rule,perm_create:0 msgid "Apply for Create" -msgstr "" +msgstr "Aplicar para creación" #. module: base #: model:ir.module.category,name:base.module_category_tools @@ -2346,6 +2471,8 @@ msgid "" "Appears by default on the top right corner of your printed documents (report " "header)." msgstr "" +"Aparece por defecto en la esquina superior derecho de los documentos " +"impresos (encabezado del informe)." #. module: base #: field:base.module.update,update:0 @@ -2395,6 +2522,8 @@ msgstr "" msgid "" "No matching record found for %(field_type)s '%(value)s' in field '%%(field)s'" msgstr "" +"No se han encontrado registros coincidentes para %(field_type)s '%(value)s' " +"en el campo '%%(field)s'" #. module: base #: model:ir.actions.act_window,help:base.action_ui_view @@ -2444,7 +2573,7 @@ msgstr "Belize" #. module: base #: help:ir.actions.report.xml,header:0 msgid "Add or not the corporate RML header" -msgstr "Añadir o no la cabecera corporativa en el informe RML" +msgstr "Añadir o no el encabezado corporativo en el informe RML" #. module: base #: model:res.country,name:base.ge @@ -2572,6 +2701,9 @@ msgid "" "View type: Tree type to use for the tree view, set to 'tree' for a " "hierarchical tree view, or 'form' for a regular list view" msgstr "" +"Tipo de vista: Tipo de árbol a usar para la vista de árbol. Establezca " +"'árbol' para una vista jerárquica de árbol, o 'formulario' para un vista de " +"lista regular" #. module: base #: sql_constraint:ir.ui.view_sc:0 @@ -2730,6 +2862,10 @@ msgid "" "==================================\n" " " msgstr "" +"\n" +"Estados Unidos - Plan de cuentas.\n" +"==================================\n" +" " #. module: base #: field:ir.actions.act_url,target:0 @@ -2850,12 +2986,17 @@ msgid "" "Module to attach a google document to any model.\n" "================================================\n" msgstr "" +"\n" +"Módulo para adjuntar un documento de Google a cualquier modelo.\n" +"========================================================\n" #. module: base #: code:addons/base/ir/ir_fields.py:334 #, python-format msgid "Found multiple matches for field '%%(field)s' (%d matches)" msgstr "" +"Se han encontrado múltiples coincidencias para el campo '%%(field)s' (%d " +"resultados)" #. module: base #: selection:base.language.install,lang:0 @@ -2874,6 +3015,14 @@ msgid "" "\n" " " msgstr "" +"\n" +"Plan de cuentas y localización de impuestos peruano. De acuerdo al 2010.\n" +"========================================================================\n" +"\n" +"Plan contable peruano e impuestos de acuerdo a disposiciones vigentes de la " +"SUNAT 2011 (PCGE 2010).\n" +"\n" +" " #. module: base #: view:ir.actions.server:0 @@ -2889,7 +3038,7 @@ msgstr "Argumentos enviados al cliente junto con la etiqueta de vista" #. module: base #: model:ir.module.module,summary:base.module_contacts msgid "Contacts, People and Companies" -msgstr "" +msgstr "Contactos, personas y compañías" #. module: base #: model:res.country,name:base.tt @@ -2998,6 +3147,19 @@ msgid "" " * Unlimited \"Group By\" levels (not stacked), two cross level analysis " "(stacked)\n" msgstr "" +"\n" +"Vistas de gráficos para el cliente web.\n" +"================================\n" +"\n" +" * Interpreta una vista , pero permite cambiar dinámicamente la " +"presentación\n" +" * Tipos de gráficos: de tarta, líneas, áreas, barras, radar\n" +" * Apilados/No apilados para las áreas y las barras\n" +" * Leyendas: arriba, dentro (arriba/izquierda), ocultas\n" +" * Características: descargables como PNG o CSV, examinar tabla de datos, " +"cambiar orientación\n" +" * Niveles de agrupación ilimitados (no apilados), análisis de dos " +"niveles de cruce (apilados)\n" #. module: base #: view:res.groups:0 @@ -3038,7 +3200,7 @@ msgstr "" #: code:addons/base/ir/ir_fields.py:175 #, python-format msgid "'%s' does not seem to be an integer for field '%%(field)s'" -msgstr "" +msgstr "'%s' no parece ser un entero para el campo '%%(field)s'" #. module: base #: model:ir.module.category,description:base.module_category_report_designer @@ -3095,6 +3257,15 @@ msgid "" " * ``base_stage``: stage management\n" " " msgstr "" +"\n" +"Este módulo gestiona estados y etapas. Se deriva de las clases crm_base y " +"crm_case del crm.\n" +"=============================================================================" +"======================\n" +"\n" +" * \"base_state\": gestión de estados\n" +" * \"base_stage\": gestión de etapas\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_web_linkedin @@ -3279,7 +3450,7 @@ msgstr "Tipo de informe desconocido: %s" #. module: base #: model:ir.module.module,summary:base.module_hr_expense msgid "Expenses Validation, Invoicing" -msgstr "" +msgstr "Validación de gastos, facturación" #. module: base #: model:ir.module.module,description:base.module_l10n_be_hr_payroll_account @@ -3289,6 +3460,10 @@ msgid "" "==========================================\n" " " msgstr "" +"\n" +"Datos de contabilidad para las reglas de nóminas belgas.\n" +"==============================================\n" +" " #. module: base #: model:res.country,name:base.am @@ -3298,7 +3473,7 @@ msgstr "Armenia" #. module: base #: model:ir.module.module,summary:base.module_hr_evaluation msgid "Periodical Evaluations, Appraisals, Surveys" -msgstr "" +msgstr "Evaluaciones periódicas, encuestas" #. module: base #: model:ir.actions.act_window,name:base.ir_property_form @@ -3665,7 +3840,7 @@ msgstr "Seleccione el paquete del módulo que quiere importar (archivo .zip):" #. module: base #: view:ir.filters:0 msgid "Personal" -msgstr "" +msgstr "Personal" #. module: base #: field:base.language.export,modules:0 @@ -3760,6 +3935,13 @@ msgid "" "easily\n" "keep track and order all your purchase orders.\n" msgstr "" +"\n" +"Este módulo permite gestionar las solicitudes de compra.\n" +"===========================================================\n" +"\n" +"Cuando se crea un pedido de compra, tiene la oportunidad de guardar la " +"solicitud relacionada. Este nuevo objeto se reagrupará y permitirá rastrear " +"y ordenar fácilmente todos sus pedidos de compra.\n" #. module: base #: help:ir.mail_server,smtp_host:0 @@ -3844,7 +4026,7 @@ msgstr "Derecha-a-izquierda" #. module: base #: model:res.country,name:base.sx msgid "Sint Maarten (Dutch part)" -msgstr "" +msgstr "San Martín (parte holandesa)" #. module: base #: view:ir.actions.act_window:0 @@ -3930,7 +4112,7 @@ msgstr "Togo" #: field:ir.actions.act_window,res_model:0 #: field:ir.actions.client,res_model:0 msgid "Destination Model" -msgstr "" +msgstr "Modelo destino" #. module: base #: selection:ir.sequence,implementation:0 @@ -4013,11 +4195,22 @@ msgid "" "If you need to manage your meetings, you should install the CRM module.\n" " " msgstr "" +"\n" +"Esto es un sistema completo de calendario.\n" +"========================================\n" +"\n" +"Soporta:\n" +"------------\n" +" - Calendario de eventos\n" +" - Eventos recurrentes\n" +"\n" +"Si necesita gestionar sus reuniones, debería instalar el módulo 'crm'.\n" +" " #. module: base #: model:res.country,name:base.je msgid "Jersey" -msgstr "" +msgstr "Jersey" #. module: base #: model:ir.module.module,description:base.module_auth_anonymous @@ -4027,6 +4220,10 @@ msgid "" "==================================\n" " " msgstr "" +"\n" +"Permite el acceso anónimo a OpenERP.\n" +"==================================\n" +" " #. module: base #: view:res.lang:0 @@ -4084,6 +4281,14 @@ msgid "" "invite.\n" "\n" msgstr "" +"\n" +"Este módulo actualiza los memorándum dentro de OpenERP para usar un pad " +"externo.\n" +"=======================================================================\n" +"\n" +"Úselo para actualizar los textos de los memorándum en tiempo real con los " +"usuarios a los que invite.\n" +"\n" #. module: base #: code:addons/base/module/module.py:609 @@ -4109,7 +4314,7 @@ msgstr "Nauru" #: code:addons/base/res/res_company.py:152 #, python-format msgid "Reg" -msgstr "" +msgstr "Reg" #. module: base #: model:ir.model,name:base.model_ir_property @@ -4258,7 +4463,7 @@ msgstr "Compartir cualquier documento" #. module: base #: model:ir.module.module,summary:base.module_crm msgid "Leads, Opportunities, Phone Calls" -msgstr "" +msgstr "Iniciativas, oportunidades, llamadas telefónicas" #. module: base #: view:res.lang:0 @@ -4438,7 +4643,7 @@ msgstr "Por defecto" #. module: base #: model:ir.module.module,summary:base.module_lunch msgid "Lunch Order, Meal, Food" -msgstr "" +msgstr "Pedidos de comida" #. module: base #: view:ir.model.fields:0 @@ -4494,7 +4699,7 @@ msgstr "Expresión" #. module: base #: view:res.company:0 msgid "Header/Footer" -msgstr "Cabecera / Pie de página" +msgstr "Encabezado / Pie de página" #. module: base #: help:ir.mail_server,sequence:0 @@ -4555,7 +4760,7 @@ msgstr "'código' debe ser único." #. module: base #: model:ir.module.module,shortdesc:base.module_knowledge msgid "Knowledge Management System" -msgstr "" +msgstr "Sistema de gestión del conocimiento" #. module: base #: view:workflow.activity:0 @@ -4618,6 +4823,10 @@ msgid "" "==========================\n" "\n" msgstr "" +"\n" +"Vista web del calendario de OpenERP.\n" +"===============================\n" +"\n" #. module: base #: selection:base.language.install,lang:0 @@ -4632,7 +4841,7 @@ msgstr "Tipo de secuencia" #. module: base #: view:base.language.export:0 msgid "Unicode/UTF-8" -msgstr "" +msgstr "Unicode/UTF-8" #. module: base #: selection:base.language.install,lang:0 @@ -4738,7 +4947,7 @@ msgstr "Guinea ecuatorial" #. module: base #: model:ir.module.module,shortdesc:base.module_web_api msgid "OpenERP Web API" -msgstr "" +msgstr "API de la web de OpenERP" #. module: base #: model:ir.module.module,description:base.module_l10n_fr_rib @@ -4792,7 +5001,7 @@ msgstr "ir.acciones.informe.xml" #. module: base #: model:res.country,name:base.ps msgid "Palestinian Territory, Occupied" -msgstr "" +msgstr "Palestina, Territorio ocupado de" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_ch @@ -4950,22 +5159,22 @@ msgstr "Compra" #. module: base #: selection:base.language.install,lang:0 msgid "Portuguese (BR) / Português (BR)" -msgstr "" +msgstr "Portugués (BR) / Português (BR)" #. module: base #: model:ir.model,name:base.model_ir_needaction_mixin msgid "ir.needaction_mixin" -msgstr "" +msgstr "Mezcla de acción necesaria" #. module: base #: view:base.language.export:0 msgid "This file was generated using the universal" -msgstr "" +msgstr "Este archivo se ha generado usando el universal" #. module: base #: model:res.partner.category,name:base.res_partner_category_7 msgid "IT Services" -msgstr "" +msgstr "Servicios TI" #. module: base #: model:ir.module.category,name:base.module_category_specific_industry_applications @@ -4981,7 +5190,7 @@ msgstr "Integración con Google Docs" #: code:addons/base/ir/ir_fields.py:328 #, python-format msgid "name" -msgstr "" +msgstr "nombre" #. module: base #: model:ir.module.module,description:base.module_mrp_operations @@ -5027,7 +5236,7 @@ msgstr "Saltar" #. module: base #: model:ir.module.module,shortdesc:base.module_event_sale msgid "Events Sales" -msgstr "" +msgstr "Ventas de eventos" #. module: base #: model:res.country,name:base.ls @@ -5109,7 +5318,7 @@ msgstr "Guardar" #. module: base #: field:ir.actions.report.xml,report_xml:0 msgid "XML Path" -msgstr "" +msgstr "Ruta XML" #. module: base #: model:res.country,name:base.bj @@ -5151,7 +5360,7 @@ msgstr "Clave" #. module: base #: field:res.company,rml_header:0 msgid "RML Header" -msgstr "Cabecera RML" +msgstr "Encabezado RML" #. module: base #: help:res.country,address_format:0 @@ -5205,7 +5414,7 @@ msgstr "Seguridad" #. module: base #: selection:base.language.install,lang:0 msgid "Portuguese / Português" -msgstr "" +msgstr "Portugués / Português" #. module: base #: code:addons/base/ir/ir_model.py:364 @@ -5223,7 +5432,7 @@ msgstr "Sólo si esta cuenta bancaria pertenece a su compañía" #: code:addons/base/ir/ir_fields.py:338 #, python-format msgid "Unknown sub-field '%s'" -msgstr "" +msgstr "Sub-campo '%s' desconocido" #. module: base #: model:res.country,name:base.za @@ -5329,6 +5538,10 @@ msgid "" "================\n" "\n" msgstr "" +"\n" +"API de la web de OpenERP.\n" +"======================\n" +"\n" #. module: base #: selection:res.request,state:0 @@ -5347,7 +5560,7 @@ msgstr "Fecha" #. module: base #: model:ir.module.module,shortdesc:base.module_event_moodle msgid "Event Moodle" -msgstr "" +msgstr "Evento Moodle" #. module: base #: model:ir.module.module,description:base.module_email_template @@ -5398,12 +5611,12 @@ msgstr "" #. module: base #: model:ir.ui.menu,name:base.menu_partner_category_form msgid "Partner Tags" -msgstr "" +msgstr "Etiquetas de empresa" #. module: base #: view:res.company:0 msgid "Preview Header/Footer" -msgstr "" +msgstr "Previsualizar encabezado/pie de página" #. module: base #: field:ir.ui.menu,parent_id:0 @@ -5437,12 +5650,12 @@ msgstr "Separador de decimales" #: code:addons/orm.py:5245 #, python-format msgid "Missing required value for the field '%s'." -msgstr "" +msgstr "Falta el valor requerido para el campo '%s'." #. module: base #: model:ir.model,name:base.model_res_partner_address msgid "res.partner.address" -msgstr "" +msgstr "Dirección de empresa" #. module: base #: view:ir.rule:0 @@ -5487,7 +5700,7 @@ msgstr "Isla de Man" #. module: base #: help:ir.actions.client,res_model:0 msgid "Optional model, mostly used for needactions." -msgstr "" +msgstr "Modelo opcional, usado en su mayoría para acciones requeridas." #. module: base #: field:ir.attachment,create_uid:0 @@ -5502,7 +5715,7 @@ msgstr "Isla Bouvet" #. module: base #: field:ir.model.constraint,type:0 msgid "Constraint Type" -msgstr "" +msgstr "Tipo de restricción" #. module: base #: field:res.company,child_ids:0 @@ -5563,6 +5776,10 @@ msgid "" "=======================\n" " " msgstr "" +"\n" +"Permite a los usuarios acceder.\n" +"==========================\n" +" " #. module: base #: model:res.country,name:base.zm @@ -5577,7 +5794,7 @@ msgstr "Iniciar asistente de configuración" #. module: base #: model:ir.module.module,summary:base.module_mrp msgid "Manufacturing Orders, Bill of Materials, Routing" -msgstr "" +msgstr "Órdenes de fabricación, lista de materiales, rutas de producción" #. module: base #: view:ir.module.module:0 @@ -5722,7 +5939,7 @@ msgstr "Configuración de la precisión decimal" #: model:ir.model,name:base.model_ir_actions_act_url #: selection:ir.ui.menu,action:0 msgid "ir.actions.act_url" -msgstr "" +msgstr "URL de acción" #. module: base #: model:ir.ui.menu,name:base.menu_translation_app @@ -5736,6 +5953,9 @@ msgid "" "

You should try others search criteria.

\n" " " msgstr "" +"

¡No se ha encontrado ningún módulo!

\n" +"

Debería intentar otros criterios de búsqueda.

\n" +" " #. module: base #: model:ir.model,name:base.model_ir_module_module @@ -5875,7 +6095,7 @@ msgstr "" #. module: base #: view:ir.translation:0 msgid "Comments" -msgstr "" +msgstr "Comentarios" #. module: base #: model:res.country,name:base.et @@ -5996,6 +6216,13 @@ msgid "" "membership products (schemes).\n" " " msgstr "" +"\n" +"Este módulo configura los módulos relacionados con una asociación.\n" +"==============================================================\n" +"\n" +"Instala el perfil para asociaciones para gestionar eventos, registros, " +"asociados y productos de asociados (esquemas).\n" +" " #. module: base #: model:ir.ui.menu,name:base.menu_base_config @@ -6033,7 +6260,7 @@ msgstr "" #: code:addons/base/ir/workflow/workflow.py:99 #, python-format msgid "Operation forbidden" -msgstr "" +msgstr "Operación prohibida" #. module: base #: view:ir.actions.server:0 @@ -6047,6 +6274,9 @@ msgid "" "deleting it (if you delete a native record rule, it may be re-created when " "you reload the module." msgstr "" +"Si desmarca el campo activo, se deshabilitará la regla de registro sin " +"eliminarla (si elimina una regla de registro nativa, se recreará cuando " +"recargue el módulo)." #. module: base #: selection:base.language.install,lang:0 @@ -6063,6 +6293,12 @@ msgid "" "Allows users to create custom dashboard.\n" " " msgstr "" +"\n" +"Deja al usuario crear un tablero personalizado.\n" +"========================================\n" +"\n" +"Permite al usuario crear un tablero personalizado.\n" +" " #. module: base #: model:ir.actions.act_window,name:base.ir_access_act @@ -6198,12 +6434,16 @@ msgid "" "========================\n" "\n" msgstr "" +"\n" +"Vista kanban de OpenERP web.\n" +"==========================\n" +"\n" #. module: base #: code:addons/base/ir/ir_fields.py:183 #, python-format msgid "'%s' does not seem to be a number for field '%%(field)s'" -msgstr "" +msgstr "'%s' no parece ser un número para el campo '%%(field)s'" #. module: base #: help:res.country.state,name:0 @@ -6251,7 +6491,7 @@ msgstr "Objeto afectado por esta regla" #. module: base #: selection:ir.actions.act_window,target:0 msgid "Inline View" -msgstr "" +msgstr "Vista incorporada" #. module: base #: field:ir.filters,is_default:0 @@ -6390,7 +6630,7 @@ msgstr "Malasia" #: code:addons/base/ir/ir_sequence.py:131 #, python-format msgid "Increment number must not be zero." -msgstr "" +msgstr "El número de incremento no debe ser cero." #. module: base #: model:ir.module.module,shortdesc:base.module_account_cancel @@ -6400,7 +6640,7 @@ msgstr "Cancelar asientos" #. module: base #: field:res.partner,tz_offset:0 msgid "Timezone offset" -msgstr "" +msgstr "Zona horaria" #. module: base #: model:ir.module.module,description:base.module_marketing_campaign @@ -6461,6 +6701,13 @@ msgid "" "Price and Cost Price.\n" " " msgstr "" +"\n" +"Este módulo añadir el campo 'Margen' en los pedidos de venta.\n" +"===================================================\n" +"\n" +"Da la rentabilidad calculando la diferencia entre el precio unitario y el " +"precio de coste.\n" +" " #. module: base #: selection:ir.actions.todo,type:0 @@ -6498,6 +6745,8 @@ 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 "" +"el usuario podrá gestionar su propio material de recursos humanos (petición " +"de ausencia, partes de horas, ...), si se enlaza a un empleado en el sistema." #. module: base #: code:addons/orm.py:2247 @@ -6594,7 +6843,7 @@ msgstr "ir.cron" #. module: base #: model:res.country,name:base.cw msgid "Curaçao" -msgstr "" +msgstr "Curaçao" #. module: base #: view:ir.sequence:0 @@ -6657,6 +6906,7 @@ msgstr "Rastro de auditoría" #, python-format msgid "Value '%s' not found in selection field '%%(field)s'" msgstr "" +"El valor '%s' no se ha encontrado en el campo de selección '%%(field)s'" #. module: base #: model:res.country,name:base.sd @@ -6763,7 +7013,7 @@ msgstr "Algunas veces llamado BIC o Swift" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_in msgid "Indian - Accounting" -msgstr "" +msgstr "India - Contabilidad" #. module: base #: field:res.partner,mobile:0 @@ -6796,12 +7046,12 @@ msgstr "Formato de hora" #. module: base #: field:res.company,rml_header3:0 msgid "RML Internal Header for Landscape Reports" -msgstr "" +msgstr "Encabezado interno RML para informes apaisados" #. module: base #: model:res.groups,name:base.group_partner_manager msgid "Contact Creation" -msgstr "" +msgstr "Creación de contactos" #. module: base #: view:ir.module.module:0 @@ -6853,6 +7103,12 @@ msgid "" "This module provides the core of the OpenERP Web Client.\n" " " msgstr "" +"\n" +"Módulo principal de OpenERP web.\n" +"=============================\n" +"\n" +"Este módulo provee el núcleo del cliente web de OpenERP.\n" +" " #. module: base #: view:ir.sequence:0 @@ -6959,12 +7215,12 @@ msgstr "Elementos de trabajo" #: code:addons/base/res/res_bank.py:195 #, python-format msgid "Invalid Bank Account Type Name format." -msgstr "" +msgstr "Formato de nombre de tipo de banco no válido." #. module: base #: view:ir.filters:0 msgid "Filters visible only for one user" -msgstr "" +msgstr "Filtros visibles sólo para un usuario" #. module: base #: model:ir.model,name:base.model_ir_attachment @@ -7035,12 +7291,12 @@ msgstr "" #. module: base #: model:res.groups,comment:base.group_hr_user msgid "the user will be able to approve document created by employees." -msgstr "" +msgstr "el usuario podrá aprobar documentos creados por los empleados." #. module: base #: field:ir.ui.menu,needaction_enabled:0 msgid "Target model uses the need action mechanism" -msgstr "" +msgstr "El modelo objetivo usa el mecanismo de acción requerida" #. module: base #: help:ir.model.fields,relation:0 @@ -7094,7 +7350,7 @@ msgstr "¡Archivo de módulo importado con éxito!" #: view:ir.model.constraint:0 #: model:ir.ui.menu,name:base.ir_model_constraint_menu msgid "Model Constraints" -msgstr "" +msgstr "Restricciones del modelo" #. module: base #: model:ir.module.module,shortdesc:base.module_hr_timesheet @@ -7116,6 +7372,10 @@ msgid "" "============================================================\n" " " msgstr "" +"\n" +"Contabilidad china\n" +"============================================================\n" +" " #. module: base #: model:res.country,name:base.lc @@ -7141,7 +7401,7 @@ msgstr "Somalia" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_doctor msgid "Dr." -msgstr "" +msgstr "Dr." #. module: base #: model:res.groups,name:base.group_user @@ -7206,7 +7466,7 @@ msgstr "Copia de" #. module: base #: field:ir.model.data,display_name:0 msgid "Record Name" -msgstr "" +msgstr "Nombre del registro" #. module: base #: model:ir.model,name:base.model_ir_actions_client @@ -7217,12 +7477,12 @@ msgstr "ir.actions.client" #. module: base #: model:res.country,name:base.io msgid "British Indian Ocean Territory" -msgstr "Territorio Británico del Océano Índico" +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 "" +msgstr "Módulo de instalación inmediata" #. module: base #: view:ir.actions.server:0 @@ -7256,6 +7516,12 @@ msgid "" "includes\n" "taxes and the Quetzal currency." msgstr "" +"\n" +"Éste es el módulo base para gestionar el plan de cuentas para Guatemala.\n" +"=====================================================================\n" +"\n" +"Agrega una nomenclatura contable para Guatemala. También incluye impuestos y " +"la moneda del Quetzal." #. module: base #: selection:res.lang,direction:0 @@ -7292,7 +7558,7 @@ msgstr "Nombre completo" #. module: base #: view:ir.attachment:0 msgid "on" -msgstr "" +msgstr "en" #. module: base #: code:addons/base/module/module.py:284 @@ -7349,7 +7615,7 @@ msgstr "En múltiples doc." #: view:res.users:0 #: view:wizard.ir.model.menu.create:0 msgid "or" -msgstr "" +msgstr "o" #. module: base #: model:ir.module.module,shortdesc:base.module_account_accountant @@ -7574,6 +7840,10 @@ msgid "" "use the same timezone that is otherwise used to pick and render date and " "time values: your computer's timezone." msgstr "" +"Zona horaria de la empresa, usada para mostrar la fecha y hora adecuadas en " +"los informes impresos. Es importante establecer un valor para este campo. " +"Debería usar la misma zona horaria que se coge en caso contrario para " +"mostrar los valores de fecha y hora: la zona horaria de su ordenador." #. module: base #: model:ir.module.module,shortdesc:base.module_account_analytic_default @@ -7588,7 +7858,7 @@ msgstr "mdx" #. module: base #: view:ir.cron:0 msgid "Scheduled Action" -msgstr "" +msgstr "Acción planificada" #. module: base #: model:res.country,name:base.bi @@ -7628,6 +7898,12 @@ msgid "" "=============\n" " " msgstr "" +"\n" +"Este módulo añade el menú y características de eventos a su portal si " +"'event' y 'portal' están instalados.\n" +"=============================================================================" +"=============\n" +" " #. module: base #: help:ir.sequence,number_next:0 @@ -7637,12 +7913,12 @@ msgstr "Número siguiente de esta secuencia." #. module: base #: view:res.partner:0 msgid "at" -msgstr "" +msgstr "en" #. module: base #: view:ir.rule:0 msgid "Rule Definition (Domain Filter)" -msgstr "" +msgstr "Definición de regla (filtro de dominio)" #. module: base #: selection:ir.actions.act_url,target:0 @@ -7704,12 +7980,12 @@ msgstr "Contraseña" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_claim msgid "Portal Claim" -msgstr "" +msgstr "Reclamaciones en el portal" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_pe msgid "Peru Localization Chart Account" -msgstr "" +msgstr "Plan de cuentas peruano" #. module: base #: model:ir.module.module,description:base.module_auth_oauth @@ -7718,6 +7994,9 @@ msgid "" "Allow users to login through OAuth2 Provider.\n" "=============================================\n" msgstr "" +"\n" +"Permite a los usuarios iniciar sesión a través de un proveedor OAuth2.\n" +"==========================================================\n" #. module: base #: model:ir.actions.act_window,name:base.action_model_fields @@ -7737,7 +8016,7 @@ msgstr "Empleados" #. module: base #: field:res.company,rml_header2:0 msgid "RML Internal Header" -msgstr "Cabecera interna RML" +msgstr "Encabezado interno RML" #. module: base #: field:ir.actions.act_window,search_view_id:0 @@ -7747,7 +8026,7 @@ msgstr "Ref. vista búsqueda" #. module: base #: help:res.users,partner_id:0 msgid "Partner-related data of the user" -msgstr "" +msgstr "Datos del usuario relativos a la empresa" #. module: base #: model:ir.module.module,description:base.module_crm_todo @@ -7757,6 +8036,10 @@ msgid "" "==========================================\n" " " msgstr "" +"\n" +"Lista de cosas por hacer para las iniciativas y oportunidades del CRM.\n" +"========================================================\n" +" " #. module: base #: view:ir.mail_server:0 @@ -7863,7 +8146,7 @@ msgstr "Canadá" #. module: base #: view:base.language.export:0 msgid "Launchpad" -msgstr "" +msgstr "Launchpad" #. module: base #: help:res.currency.rate,currency_rate_type_id:0 @@ -7930,12 +8213,12 @@ msgstr "Campo personalizado" #. module: base #: model:ir.module.module,summary:base.module_account_accountant msgid "Financial and Analytic Accounting" -msgstr "" +msgstr "Contabilidad financiera y analítica" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_project msgid "Portal Project" -msgstr "" +msgstr "Proyectos en el portal" #. module: base #: model:res.country,name:base.cc @@ -7968,7 +8251,7 @@ msgstr "Campos tipo de banco" #. module: base #: constraint:ir.rule:0 msgid "Rules can not be applied on Transient models." -msgstr "" +msgstr "Las reglas no se pueden aplicar en modelos transitorios." #. module: base #: selection:base.language.install,lang:0 @@ -8051,12 +8334,12 @@ msgstr "Asistente" #: code:addons/base/ir/ir_fields.py:304 #, python-format msgid "database id" -msgstr "" +msgstr "id de la base de datos" #. module: base #: model:ir.module.module,shortdesc:base.module_base_import msgid "Base import" -msgstr "" +msgstr "Importación base" #. module: base #: report:ir.module.reference:0 @@ -8089,6 +8372,8 @@ msgid "" "Select this if you want to set company's address information for this " "contact" msgstr "" +"Seleccione esto si quiere establecer la información de la dirección de la " +"compañía para este contacto" #. module: base #: field:ir.default,field_name:0 @@ -8127,6 +8412,8 @@ msgid "" "This field holds the image used as avatar for this contact, limited to " "1024x1024px" msgstr "" +"Este campo contiene la imagen utilizada como avatar para este contacto, " +"limitada a 1024x1024 px" #. module: base #: model:res.country,name:base.to @@ -8209,7 +8496,7 @@ msgstr "Numeración de la secuencia de asientos" #. module: base #: view:base.language.export:0 msgid "POEdit" -msgstr "" +msgstr "POEdit" #. module: base #: view:ir.values:0 @@ -8219,12 +8506,12 @@ msgstr "Acciones cliente" #. module: base #: field:res.partner.bank.type,field_ids:0 msgid "Type Fields" -msgstr "" +msgstr "Campos de tipo" #. module: base #: model:ir.module.module,summary:base.module_hr_recruitment msgid "Jobs, Recruitment, Applications, Job Interviews" -msgstr "" +msgstr "Trabajos, reclutamiento, solicitudes, entrevista de trabajo" #. module: base #: code:addons/base/module/module.py:513 @@ -8253,7 +8540,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_pad_project msgid "Pad on tasks" -msgstr "" +msgstr "Pad en las tareas" #. module: base #: model:ir.model,name:base.model_base_update_translations @@ -8271,7 +8558,7 @@ msgstr "¡Aviso!" #. module: base #: view:ir.rule:0 msgid "Full Access Right" -msgstr "" +msgstr "Derecho de acceso total" #. module: base #: field:res.partner.category,parent_id:0 @@ -8286,7 +8573,7 @@ msgstr "Finlandia" #. module: base #: model:ir.module.module,shortdesc:base.module_web_shortcuts msgid "Web Shortcuts" -msgstr "" +msgstr "Accesos rápidos para web" #. module: base #: view:res.partner:0 @@ -8330,17 +8617,17 @@ msgstr "Contabilidad analítica" #. module: base #: model:ir.model,name:base.model_ir_model_constraint msgid "ir.model.constraint" -msgstr "" +msgstr "Restricción de modelo" #. module: base #: model:ir.module.module,shortdesc:base.module_web_graph msgid "Graph Views" -msgstr "" +msgstr "Vistas de gráfico" #. module: base #: help:ir.model.relation,name:0 msgid "PostgreSQL table name implementing a many2many relation." -msgstr "" +msgstr "Nombre de la tabla PostgreSQL que implementa una relación many2many." #. module: base #: model:ir.module.module,description:base.module_base @@ -8349,6 +8636,9 @@ msgid "" "The kernel of OpenERP, needed for all installation.\n" "===================================================\n" msgstr "" +"\n" +"El núcleo de OpenERP, necesario para todas las instalaciones.\n" +"===================================================\n" #. module: base #: model:ir.model,name:base.model_ir_server_object_lines @@ -8373,7 +8663,7 @@ msgstr "Kuwait" #. module: base #: model:ir.module.module,shortdesc:base.module_account_followup msgid "Payment Follow-up Management" -msgstr "" +msgstr "Gestión de seguimientos de pago" #. module: base #: field:workflow.workitem,inst_id:0 @@ -8444,7 +8734,7 @@ msgstr "Siempre puede ser buscado" #. module: base #: help:res.country.state,code:0 msgid "The state code in max. three chars." -msgstr "" +msgstr "El código de provincia en tres caracteres como máximo." #. module: base #: model:res.country,name:base.hk @@ -8454,7 +8744,7 @@ msgstr "Hong Kong" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_sale msgid "Portal Sale" -msgstr "" +msgstr "Ventas en el portal" #. module: base #: field:ir.default,ref_id:0 @@ -8469,7 +8759,7 @@ msgstr "Filipinas" #. module: base #: model:ir.module.module,summary:base.module_hr_timesheet_sheet msgid "Timesheets, Attendances, Activities" -msgstr "" +msgstr "Partes de horas, asistencias, actividades" #. module: base #: model:res.country,name:base.ma @@ -8497,6 +8787,8 @@ msgid "" "Translation features are unavailable until you install an extra OpenERP " "translation." msgstr "" +"Las características de traducción no están disponibles hasta que no instale " +"una traducción extra de OpenERP." #. module: base #: model:ir.module.module,description:base.module_l10n_nl @@ -8585,7 +8877,7 @@ msgstr "Informe detallado de objetos" #. module: base #: model:ir.module.module,shortdesc:base.module_web_analytics msgid "Google Analytics" -msgstr "" +msgstr "Google Analytics" #. module: base #: model:ir.module.module,description:base.module_note @@ -8613,7 +8905,7 @@ msgstr "Dominica" #. module: base #: field:ir.translation,name:0 msgid "Translated field" -msgstr "" +msgstr "Campo traducible" #. module: base #: model:ir.module.module,shortdesc:base.module_stock_location @@ -8633,17 +8925,17 @@ msgstr "Nepal" #. module: base #: model:ir.module.module,shortdesc:base.module_document_page msgid "Document Page" -msgstr "" +msgstr "Página de documento" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_ar msgid "Argentina Localization Chart Account" -msgstr "" +msgstr "Plan de cuentas argentino" #. module: base #: field:ir.module.module,description_html:0 msgid "Description HTML" -msgstr "" +msgstr "Descripción HTML" #. module: base #: help:res.groups,implied_ids:0 @@ -8654,7 +8946,7 @@ msgstr "" #. module: base #: model:ir.module.module,summary:base.module_note msgid "Sticky notes, Collaborative, Memos" -msgstr "" +msgstr "Notas fijadas, colaborativos, memorándums" #. module: base #: model:ir.module.module,shortdesc:base.module_hr_attendance @@ -8693,6 +8985,9 @@ msgid "" "If the selected language is loaded in the system, all documents related to " "this contact will be printed in this language. If not, it will be English." msgstr "" +"Si el idioma seleccionado está cargado en el sistema, todos los documentos " +"relacionados con el contacto se imprimirán en este idioma. Si no, se " +"imprimirán en inglés." #. module: base #: model:ir.module.module,description:base.module_hr_evaluation @@ -8789,7 +9084,7 @@ msgstr "Esloveno / slovenščina" #. module: base #: field:res.currency,position:0 msgid "Symbol Position" -msgstr "" +msgstr "Posición del símbolo" #. module: base #: model:ir.module.module,description:base.module_l10n_de @@ -8827,6 +9122,10 @@ msgid "" "\n" "(Document type: %s)" msgstr "" +"Para este tipo de documento, puede acceder sólo a los registros creados por " +"uno mismo.\n" +"\n" +"(Tipo de documento: %s)" #. module: base #: view:base.language.export:0 @@ -8839,6 +9138,8 @@ msgid "" "This field specifies whether the model is transient or not (i.e. if records " "are automatically deleted from the database or not)" msgstr "" +"Este campo especifica si el modelo es transitorio o no (por ejemplo si los " +"registros se eliminan automáticamente de la base de datos o no)" #. module: base #: code:addons/base/ir/ir_mail_server.py:441 @@ -8882,6 +9183,7 @@ msgstr "Lo siento, no está autorizado a eliminar este documento." #: constraint:ir.rule:0 msgid "Rules can not be applied on the Record Rules model." msgstr "" +"Las reglas no se han podido aplicar en el modelo de reglas de registro." #. module: base #: field:res.partner,supplier:0 @@ -8899,7 +9201,7 @@ msgstr "Multi acciones" #. module: base #: model:ir.module.module,summary:base.module_mail msgid "Discussions, Mailing Lists, News" -msgstr "" +msgstr "Discusiones, listas de correo, noticias" #. module: base #: model:ir.module.module,description:base.module_fleet @@ -8950,7 +9252,7 @@ msgstr "Samoa Americana" #. module: base #: view:ir.attachment:0 msgid "My Document(s)" -msgstr "" +msgstr "Mis documentos" #. module: base #: help:ir.actions.act_window,res_model:0 @@ -9000,7 +9302,7 @@ msgstr "Error de usuario" #. module: base #: model:ir.module.module,summary:base.module_project_issue msgid "Support, Bug Tracker, Helpdesk" -msgstr "" +msgstr "Soporte, gestión de errores, mesa de ayuda" #. module: base #: model:res.country,name:base.ae @@ -9014,6 +9316,8 @@ msgid "" "related to a model that uses the need_action mechanism, this field is set to " "true. Otherwise, it is false." msgstr "" +"Si la acción de menú es act_window, y si esta acción está relacionado con un " +"modelo que usa el mecanismo de acción requerida, este campo estará marcado." #. module: base #: code:addons/orm.py:3929 @@ -9226,11 +9530,15 @@ msgid "" "=============================\n" "\n" msgstr "" +"\n" +"Vista Gantt de OpenERP web.\n" +"=============================\n" +"\n" #. module: base #: model:ir.module.module,shortdesc:base.module_base_status msgid "State/Stage Management" -msgstr "" +msgstr "Gestión de estados/etapas" #. module: base #: model:ir.module.category,name:base.module_category_warehouse_management @@ -9259,6 +9567,18 @@ msgid "" "\n" " " msgstr "" +"\n" +"Este módulo muestra los procesos básicos involucrados en los módulos " +"seleccionados y en la secuencia en los que ocurren.\n" +"=============================================================================" +"=========================\n" +"\n" +"**Nota:** Esto aplica a todos los módulos conteniendo " +"modulename_process.xml.\n" +"\n" +"**e.g.** product/process/product_process.xml.\n" +"\n" +" " #. module: base #: view:res.lang:0 @@ -9284,7 +9604,7 @@ msgstr "Informe" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_prof msgid "Prof." -msgstr "" +msgstr "Prof." #. module: base #: code:addons/base/ir/ir_mail_server.py:239 @@ -9320,7 +9640,7 @@ msgstr "Ninguno" #. module: base #: model:ir.module.module,shortdesc:base.module_hr_holidays msgid "Leave Management" -msgstr "" +msgstr "Gestión de ausencias" #. module: base #: model:res.company,overdue_msg:base.main_company @@ -9336,6 +9656,16 @@ msgid "" "Thank you in advance for your cooperation.\n" "Best Regards," msgstr "" +"Estimado/a señor/señora,\n" +"\n" +"Nuestros registros indican que algunos pagos en nuestra cuenta están aún " +"pendientes. Puede encontrar los detalles a continuación.\n" +"Si la cantidad ha sido ya pagada, por favor, descarte esta notificación. En " +"otro caso, por favor remítanos el importe total abajo indicado.\n" +"Si tiene alguna pregunta con respecto a su cuenta, por favor contáctenos.\n" +"\n" +"Gracias de antemano por su colaboración.\n" +"Saludos cordiales," #. module: base #: view:ir.module.category:0 @@ -9360,7 +9690,7 @@ msgstr "Mali" #. module: base #: model:ir.ui.menu,name:base.menu_project_config_project msgid "Stages" -msgstr "" +msgstr "Etapas" #. module: base #: selection:base.language.install,lang:0 @@ -9387,6 +9717,12 @@ msgid "" "==========================================================\n" " " msgstr "" +"\n" +"Este módulo añade una lista de empleados a su página de contacto del portal " +"si 'hr' y 'portal_crm' (que crea la página de contacto) están instalados.\n" +"=============================================================================" +"============================================\n" +" " #. module: base #: model:res.country,name:base.bn @@ -9409,7 +9745,7 @@ msgstr "Interfaz de usuario" #. module: base #: model:ir.module.module,shortdesc:base.module_mrp_byproduct msgid "MRP Byproducts" -msgstr "" +msgstr "Subproductos MRP" #. module: base #: field:res.request,ref_partner_id:0 @@ -9419,7 +9755,7 @@ msgstr "Ref. empresa" #. module: base #: model:ir.module.module,shortdesc:base.module_hr_expense msgid "Expense Management" -msgstr "" +msgstr "Gestión de gastos" #. module: base #: field:ir.attachment,create_date:0 @@ -9453,6 +9789,12 @@ msgid "" "Indian accounting chart and localization.\n" " " msgstr "" +"\n" +"Plan de cuentas indio.\n" +"====================================\n" +"\n" +"Plan de cuentas y localización indios.\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_uy @@ -9481,6 +9823,14 @@ msgid "" "If set to true it allows user to cancel entries & invoices.\n" " " msgstr "" +"\n" +"Permite cancelar asientos contables.\n" +"===============================\n" +"\n" +"Este módulo añade el campo 'Permitir cancelar asientos' en la vista de " +"formulario de los diarios contables.\n" +"Si está establecido a True, permitirá cancelar asientos y facturas.\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_plugin @@ -9567,7 +9917,7 @@ msgstr "%H - Hora (reloj 24-horas) [00,23]." #. module: base #: field:ir.model.fields,on_delete:0 msgid "On Delete" -msgstr "" +msgstr "Al eliminar" #. module: base #: code:addons/base/ir/ir_model.py:340 @@ -9602,6 +9952,13 @@ msgid "" "=======================================================\n" " " msgstr "" +"\n" +"Este módulo añade una página de contacto (con un formulario de contacto " +"creando una iniciativa cuando se envía) al portal si 'crm' y 'portal' están " +"instalados.\n" +"=============================================================================" +"=======================================================\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_us @@ -9627,7 +9984,7 @@ msgstr "Cancelar" #: code:addons/orm.py:1509 #, python-format msgid "Unknown database identifier '%s'" -msgstr "" +msgstr "Identificador de base de datos '%s' desconocido" #. module: base #: selection:base.language.export,format:0 @@ -9642,6 +9999,10 @@ msgid "" "=========================\n" "\n" msgstr "" +"\n" +"Vista de diagrama de Openerp web.\n" +"==============================\n" +"\n" #. module: base #: model:res.country,name:base.nt @@ -9681,7 +10042,7 @@ msgstr "" #: code:addons/base/ir/ir_fields.py:317 #, python-format msgid "external id" -msgstr "" +msgstr "id. externo" #. module: base #: view:ir.model:0 @@ -9724,6 +10085,12 @@ msgid "" "=====================\n" " " msgstr "" +"\n" +"Este módulo añade el menú y las características de las incidencias al portal " +"si 'project_issue' y 'portal' están instalados.\n" +"=============================================================================" +"=====================\n" +" " #. module: base #: view:res.lang:0 @@ -9738,7 +10105,7 @@ msgstr "Alemania" #. module: base #: model:ir.module.module,shortdesc:base.module_auth_oauth msgid "OAuth2 Authentication" -msgstr "" +msgstr "Autentificación OAuth2" #. module: base #: view:workflow:0 @@ -9749,6 +10116,12 @@ msgid "" "default value. If you don't do that, your customization will be overwrited " "at the next update or upgrade to a future version of OpenERP." msgstr "" +"Cuando se personaliza un flujo de trabajo, asegúrese de no modificar un nodo " +"o flecha existente, en lugar de añadir nuevos nodos o flechas. Si necesita " +"absolutamente modificar un nodo o flecha, sólo puede cambiar los campos que " +"están vacíos o establecidos a su valor por defecto. Si no hace eso, la " +"personalización será sobrescrita en la próxima actualización a una futura " +"versión de OpenERP." #. module: base #: report:ir.module.reference:0 @@ -9781,7 +10154,7 @@ msgstr "¡El código de moneda debe ser único por compañía!" #: code:addons/base/module/wizard/base_export_language.py:38 #, python-format msgid "New Language (Empty translation template)" -msgstr "" +msgstr "Nuevo idioma (Plantilla de traducción vacía)" #. module: base #: model:ir.module.module,description:base.module_auth_reset_password @@ -9794,6 +10167,14 @@ msgid "" "Allow administrator to click a button to send a \"Reset Password\" request " "to a user.\n" msgstr "" +"\n" +"Restablece la contraseña\n" +"=====================\n" +"\n" +"Permite a los usuarios restablecer su contraseña desde la página de inicio " +"de sesión.\n" +"Permite a los administradores pulsar un botón para enviar una petición de " +"restablecimiento de la contraseña a los usuarios.\n" #. module: base #: help:ir.actions.server,email:0 @@ -9863,7 +10244,7 @@ msgstr "Egipto" #. module: base #: view:ir.attachment:0 msgid "Creation" -msgstr "" +msgstr "Creación" #. module: base #: help:ir.actions.server,model_id:0 @@ -9907,7 +10288,7 @@ msgstr "Descripción de campos" #. module: base #: model:ir.module.module,shortdesc:base.module_analytic_contract_hr_expense msgid "Contracts Management: hr_expense link" -msgstr "" +msgstr "Gestión de contratos: enlace con hr_expense" #. module: base #: view:ir.attachment:0 @@ -9926,7 +10307,7 @@ msgstr "Agrupar por..." #. module: base #: view:base.module.update:0 msgid "Module Update Result" -msgstr "" +msgstr "Resultado de actualización de módulo" #. module: base #: model:ir.module.module,description:base.module_analytic_contract_hr_expense @@ -9937,6 +10318,11 @@ msgid "" "=============================================================================" "=========================\n" msgstr "" +"\n" +"Este módulo modifica la vista de cuenta analítica para mostrar algunos datos " +"relativos al módulo 'hr_expense'.\n" +"=============================================================================" +"=============\n" #. module: base #: field:res.partner,use_parent_address:0 @@ -9946,7 +10332,7 @@ msgstr "Utilizar la dirección de la empresa" #. module: base #: model:ir.module.module,summary:base.module_hr_holidays msgid "Holidays, Allocation and Leave Requests" -msgstr "" +msgstr "Vacaciones, asignaciones y peticiones de ausencia" #. module: base #: model:ir.module.module,description:base.module_web_hello @@ -9956,6 +10342,10 @@ msgid "" "===========================\n" "\n" msgstr "" +"\n" +"Módulo de ejemplo de OpenERP web.\n" +"===============================\n" +"\n" #. module: base #: selection:ir.module.module,state:0 @@ -9993,6 +10383,14 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para añadir un contacto en su libreta de direcciones.\n" +"

\n" +"OpenERP le ayuda a gestionar todas las actividades relacionadas con los " +"proveedores: discusiones, historial de oportunidades de negocio, documentos, " +"etc.\n" +"

\n" +" " #. module: base #: model:res.country,name:base.lr @@ -10007,6 +10405,10 @@ msgid "" "=======================\n" "\n" msgstr "" +"\n" +"Suite de prueba de OpenERP web.\n" +"=============================\n" +"\n" #. module: base #: view:ir.model:0 @@ -10151,6 +10553,8 @@ msgstr "Campaña de marketing - Demo" msgid "" "Can not create Many-To-One records indirectly, import the field separately" msgstr "" +"No se puede crear un registro many2one indirectamente. Importe el campo por " +"separado." #. module: base #: field:ir.cron,interval_type:0 @@ -10193,7 +10597,7 @@ msgstr "China - Contabilidad" #. module: base #: sql_constraint:ir.model.constraint:0 msgid "Constraints with the same name are unique per module." -msgstr "" +msgstr "Las restricciones con el mismo nombre son únicas por módulo." #. module: base #: model:ir.module.module,description:base.module_report_intrastat @@ -10205,6 +10609,12 @@ msgid "" "This module gives the details of the goods traded between the countries of\n" "European Union." msgstr "" +"\n" +"Un módulo que añade informes intrastat.\n" +"=====================================\n" +"\n" +"Este módulo ofrece detalles de los bienes comerciados entre países de la " +"Unión Europea." #. module: base #: help:ir.actions.server,loop_action:0 @@ -10238,7 +10648,7 @@ msgstr "res.solicitud" #. module: base #: field:res.partner,image_medium:0 msgid "Medium-sized image" -msgstr "" +msgstr "Imagen mediana" #. module: base #: view:ir.model:0 @@ -10265,7 +10675,7 @@ msgstr "Contenido del archivo" #: view:ir.model.relation:0 #: model:ir.ui.menu,name:base.ir_model_relation_menu msgid "ManyToMany Relations" -msgstr "" +msgstr "Relaciones many2many" #. module: base #: model:res.country,name:base.pa @@ -10336,7 +10746,7 @@ msgstr "Portal" #. module: base #: selection:ir.translation,state:0 msgid "To Translate" -msgstr "" +msgstr "A traducir" #. module: base #: code:addons/base/ir/ir_fields.py:295 @@ -10377,7 +10787,7 @@ msgstr "" #. module: base #: help:ir.model.constraint,name:0 msgid "PostgreSQL constraint or foreign key name." -msgstr "" +msgstr "Restricción PostgreSQL o nombre de la clave externa." #. module: base #: view:res.lang:0 @@ -10397,17 +10807,17 @@ msgstr "Guinea Bissau" #. module: base #: field:ir.actions.report.xml,header:0 msgid "Add RML Header" -msgstr "Añadir cabecera RML" +msgstr "Añadir encabezado RML" #. module: base #: help:res.company,rml_footer:0 msgid "Footer text displayed at the bottom of all reports." -msgstr "" +msgstr "Texto mostrado en el pie de página de todos los informes." #. module: base #: model:ir.module.module,shortdesc:base.module_note_pad msgid "Memos pad" -msgstr "" +msgstr "Pad de memorándums" #. module: base #: model:ir.module.module,description:base.module_pad @@ -10459,7 +10869,7 @@ msgstr "Otras acciones" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_be_coda msgid "Belgium - Import Bank CODA Statements" -msgstr "" +msgstr "Bélgica - Importar extractos bancarios CODA" #. module: base #: selection:ir.actions.todo,state:0 @@ -10513,7 +10923,7 @@ msgstr "Italia" #. module: base #: model:res.groups,name:base.group_sale_salesman msgid "See Own Leads" -msgstr "" +msgstr "Mostrar las iniciativas propias" #. module: base #: view:ir.actions.todo:0 @@ -10524,7 +10934,7 @@ msgstr "Para ejecutar" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_hr_employees msgid "Portal HR employees" -msgstr "" +msgstr "Empleados de RRHH en el portal" #. module: base #: selection:base.language.install,lang:0 @@ -10543,6 +10953,8 @@ msgid "" "Insufficient fields to generate a Calendar View for %s, missing a date_stop " "or a date_delay" msgstr "" +"Campos insuficientes para generar una vista de calendario para %s. Falta un " +"campo date_stop o date_delay." #. module: base #: field:workflow.activity,action:0 @@ -10597,6 +11009,15 @@ msgid "" "associated to every resource. It also manages the leaves of every resource.\n" " " msgstr "" +"\n" +"Módulo para la gestión de recursos.\n" +"===============================\n" +"\n" +"Un recurso representa algo que puede ser planificado (un desarrollador en " +"una tarea o un centro de trabajo en una orden de fabricación). Este módulo " +"gestiona un calendario asociado a cada recurso. También gestiona las " +"ausencias de cada recurso.\n" +" " #. module: base #: model:ir.model,name:base.model_ir_translation @@ -10618,7 +11039,7 @@ msgstr "" #: model:ir.actions.act_window,name:base.action_view_base_module_upgrade #, python-format msgid "Apply Schedule Upgrade" -msgstr "" +msgstr "Aplicar actualización programada" #. module: base #: view:workflow.activity:0 @@ -10651,6 +11072,8 @@ msgid "" "One of the documents you are trying to access has been deleted, please try " "again after refreshing." msgstr "" +"Uno de los documentos al que está intentado acceder ha sido eliminado. " +"Inténtelo por favor de nuevo tras actualizar." #. module: base #: model:ir.model,name:base.model_ir_mail_server @@ -10663,6 +11086,8 @@ msgid "" "If the target model uses the need action mechanism, this field gives the " "number of actions the current user has to perform." msgstr "" +"Si el modelo objetivo usa el mecanismo de acción requerida, este campo da el " +"número de acciones que el usuario tiene que realizar." #. module: base #: selection:base.language.install,lang:0 @@ -10759,7 +11184,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_stock msgid "Sales and Warehouse Management" -msgstr "" +msgstr "Gestión de ventas y almacén" #. module: base #: field:ir.model.fields,model:0 @@ -10829,6 +11254,8 @@ msgstr "Martinica (Francia)" #: help:res.partner,is_company:0 msgid "Check if the contact is a company, otherwise it is a person" msgstr "" +"Marque esta casilla si el contacto es una compañía. En caso contrario, será " +"una persona." #. module: base #: view:ir.sequence.type:0 @@ -10839,7 +11266,7 @@ msgstr "Tipo de secuencias" #: code:addons/base/res/res_bank.py:195 #, python-format msgid "Formating Error" -msgstr "" +msgstr "Error de formato" #. module: base #: model:res.country,name:base.ye @@ -10977,7 +11404,7 @@ msgstr "Email" #. module: base #: model:res.partner.category,name:base.res_partner_category_12 msgid "Office Supplies" -msgstr "" +msgstr "Material de oficina" #. module: base #: code:addons/custom.py:550 @@ -11051,6 +11478,32 @@ msgid "" " Reporting / Accounting / **Follow-ups Analysis\n" "\n" msgstr "" +"\n" +"Módulo para automatizar las cartas para facturas impagadas, con múltiples " +"niveles de aviso.\n" +"=============================================================================" +"====\n" +"\n" +"Puede configurar niveles múltiples de aviso a través del menú:\n" +"---------------------------------------------------------------\n" +" Configuración / Niveles de seguimiento\n" +" \n" +"Una vez se definan, puede imprimir automáticamente avisos cada día pulsando " +"simplemente en el menú:\n" +"-----------------------------------------------------------------------------" +"-------------------------\n" +" Seguimiento de pagos / Enviar cartas y correos electrónicos\n" +"\n" +"Generará un PDF / enviará correos electrónicos / establecerá acciones " +"manuales dependiendo de los diferentes niveles de aviso definidos. Puede " +"definir políticas diferentes para cada compañía.\n" +"\n" +"Tenga en cuenta que si quiere comprobar el nivel de seguimiento para una " +"empresa en concreto, puede hacerlo desde el menú:\n" +"-----------------------------------------------------------------------------" +"-------------------------------------\n" +" Informes / Contabilidad / **Análisis de seguimientos\n" +"\n" #. module: base #: view:ir.rule:0 @@ -11063,7 +11516,7 @@ msgstr "" #. module: base #: model:res.country,name:base.bl msgid "Saint Barthélémy" -msgstr "" +msgstr "San Bartolomé" #. module: base #: selection:ir.module.module,license:0 @@ -11078,7 +11531,7 @@ msgstr "Ecuador" #. module: base #: view:ir.rule:0 msgid "Read Access Right" -msgstr "" +msgstr "Permiso de lectura" #. module: base #: model:ir.module.module,shortdesc:base.module_analytic_user_function @@ -11150,12 +11603,12 @@ msgstr "Traducido" #: model:ir.actions.act_window,name:base.action_inventory_form #: model:ir.ui.menu,name:base.menu_action_inventory_form msgid "Default Company per Object" -msgstr "" +msgstr "Compañía por defecto por objeto" #. module: base #: field:ir.ui.menu,needaction_counter:0 msgid "Number of actions the user has to perform" -msgstr "" +msgstr "Número de acciones que el usuario tiene que realizar" #. module: base #: model:ir.module.module,shortdesc:base.module_web_hello @@ -11185,7 +11638,7 @@ msgstr "Dominio" #: code:addons/base/ir/ir_fields.py:167 #, python-format msgid "Use '1' for yes and '0' for no" -msgstr "" +msgstr "Use '1' para sí y '0' para no" #. module: base #: model:ir.module.module,shortdesc:base.module_marketing_campaign @@ -11200,13 +11653,13 @@ msgstr "Nombre provincia" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_be_hr_payroll_account msgid "Belgium - Payroll with Accounting" -msgstr "" +msgstr "Bélgica - Nóminas con contabilidad" #. module: base #: code:addons/base/ir/ir_fields.py:314 #, python-format msgid "Invalid database id '%s' for the field '%%(field)s'" -msgstr "" +msgstr "Id. de base de datos '%s' no válido para el campo '%%(field)s'" #. module: base #: view:res.lang:0 @@ -11367,12 +11820,12 @@ msgstr "Puerto Rico" #. module: base #: model:ir.module.module,shortdesc:base.module_web_tests_demo msgid "Demonstration of web/javascript tests" -msgstr "" +msgstr "Demostración de test JavaScript/Web" #. module: base #: field:workflow.transition,signal:0 msgid "Signal (Button Name)" -msgstr "" +msgstr "Señal (Nombre del botón)" #. module: base #: view:ir.actions.act_window:0 @@ -11466,13 +11919,13 @@ msgstr "Operaciones de fabricación" #. module: base #: view:base.language.export:0 msgid "Here is the exported translation file:" -msgstr "" +msgstr "Aquí está el archivo de traducción exportado:" #. module: base #: field:ir.actions.report.xml,report_rml_content:0 #: field:ir.actions.report.xml,report_rml_content_data:0 msgid "RML Content" -msgstr "" +msgstr "Contenido RML" #. module: base #: view:res.lang:0 @@ -11510,6 +11963,18 @@ msgid "" "automatically new claims based on incoming emails.\n" " " msgstr "" +"\n" +"\n" +"Gestionar reclamaciones de clientes.\n" +"=============================================================================" +"===\n" +"Esta aplicación permite gestionar las reclamaciones y quejas de sus " +"clientes/proveedores.\n" +"\n" +"Está totalmente integrado con la pasarela de correo electrónico, para que " +"puede crear automáticamente nuevas quejas basadas en los correos " +"electrónicos entrantes.\n" +" " #. module: base #: selection:ir.module.module,license:0 @@ -11630,6 +12095,13 @@ msgid "" "\n" "The decimal precision is configured per company.\n" msgstr "" +"\n" +"Configura la precisión del precio si necesita diversos tipos de uso: " +"contabilidad, ventas, compras...\n" +"=============================================================================" +"====================\n" +"\n" +"La precisión decimal se configura por compañía.\n" #. module: base #: selection:res.company,paper_format:0 @@ -11639,7 +12111,7 @@ msgstr "A4" #. module: base #: view:res.config.installer:0 msgid "Configuration Installer" -msgstr "" +msgstr "Instalador de la configuración" #. module: base #: field:res.partner,customer:0 @@ -11660,6 +12132,10 @@ msgid "" "===================================================\n" " " msgstr "" +"\n" +"Este módulo añade el PAD en todas las vistas kanban de proyecto.\n" +"======================================================\n" +" " #. module: base #: field:ir.actions.act_window,context:0 @@ -11726,17 +12202,19 @@ msgid "" "(if you delete a native ACL, it will be re-created when you reload the " "module." msgstr "" +"Si desmarca el campo activo, deshabilitará el ACL sin borrarlo (si borra un " +"ACL nativo, será recreado cuando recargue el módulo)." #. module: base #: model:ir.model,name:base.model_ir_fields_converter msgid "ir.fields.converter" -msgstr "" +msgstr "Convertidor de campos" #. module: base #: code:addons/base/res/res_partner.py:436 #, python-format msgid "Couldn't create contact without email address !" -msgstr "" +msgstr "¡No se puede crear el contacto sin correo electrónico!" #. module: base #: model:ir.module.category,name:base.module_category_manufacturing @@ -11758,12 +12236,12 @@ msgstr "Cancelar instalación" #. module: base #: model:ir.model,name:base.model_ir_model_relation msgid "ir.model.relation" -msgstr "" +msgstr "Relación" #. module: base #: model:ir.module.module,shortdesc:base.module_account_check_writing msgid "Check Writing" -msgstr "" +msgstr "Escritura de cheques" #. module: base #: model:ir.module.module,description:base.module_plugin_outlook @@ -11999,7 +12477,7 @@ msgstr "Reino Unido - Contabilidad" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam msgid "Mrs." -msgstr "" +msgstr "Sra." #. module: base #: code:addons/base/ir/ir_model.py:424 @@ -12035,7 +12513,7 @@ msgstr "Expresión del bucle" #. module: base #: model:res.partner.category,name:base.res_partner_category_16 msgid "Retailer" -msgstr "" +msgstr "Minorista" #. module: base #: view:ir.model.fields:0 @@ -12086,6 +12564,8 @@ msgstr "" msgid "" "Please make sure no workitems refer to an activity before deleting it!" msgstr "" +"¡Asegúrese de que ningún elemento de trabajo se refiera a la actividad antes " +"de borrarla!" #. module: base #: model:res.country,name:base.tr @@ -12138,7 +12618,7 @@ msgstr "4. %b, %B ==> Dic, Diciembre" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_cl msgid "Chile Localization Chart Account" -msgstr "" +msgstr "Plan de cuentas chileno" #. module: base #: selection:base.language.install,lang:0 @@ -12239,6 +12719,20 @@ msgid "" "yearly\n" " account reporting (balance, profit & losses).\n" msgstr "" +"\n" +"Plan de cuentas español (PGCE 2008).\n" +"=======================================\n" +"\n" +" * Define las siguientes plantillas de plan de cuentas:\n" +" * Plan de cuentas general español 2008\n" +" * Plan de cuentas general español 2008 para pequeñas y medianas " +"empresas.\n" +" * Define plantillas para los impuestos de ventas y compras\n" +" * Define plantillas de códigos de impuestos\n" +"\n" +"**Nota:** Debe instalar el módulo 'l10n_es_account_balance_report' para los " +"informes de cuentas anuales (balance de situación, cuenta de pérdidas y " +"ganancias).\n" #. module: base #: field:ir.actions.act_url,type:0 @@ -12309,7 +12803,7 @@ msgstr "" #. module: base #: model:res.country,name:base.cd msgid "Congo, Democratic Republic of the" -msgstr "" +msgstr "Congo, República Democrática del" #. module: base #: model:res.country,name:base.cr @@ -12366,7 +12860,7 @@ msgstr "Valor por defecto o referencia a una acción" #. module: base #: field:ir.actions.report.xml,auto:0 msgid "Custom Python Parser" -msgstr "" +msgstr "Analizador Python personalizado" #. module: base #: sql_constraint:res.groups:0 @@ -12376,7 +12870,7 @@ msgstr "¡El nombre del grupo debe ser único!" #. module: base #: help:ir.translation,module:0 msgid "Module this term belongs to" -msgstr "" +msgstr "Módulo al que pertenece este término" #. module: base #: model:ir.module.module,description:base.module_web_view_editor @@ -12387,6 +12881,11 @@ msgid "" "\n" " " msgstr "" +"\n" +"Editor de vistas de OpenERP web.\n" +"============================\n" +"\n" +" " #. module: base #: view:ir.sequence:0 @@ -12435,6 +12934,13 @@ msgid "" "\n" " " msgstr "" +"\n" +"Plan de cuentas y localización de impuesto argentino.\n" +"==================================================\n" +"\n" +"Plan contable argentino e impuestos de acuerdo a disposiciones vigentes.\n" +"\n" +" " #. module: base #: code:addons/fields.py:126 @@ -12516,7 +13022,7 @@ msgstr "Maldivas" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_crm msgid "Portal CRM" -msgstr "" +msgstr "Portal CRM" #. module: base #: model:ir.ui.menu,name:base.next_id_4 @@ -12661,7 +13167,7 @@ msgstr "" #. module: base #: field:ir.actions.report.xml,report_sxw:0 msgid "SXW Path" -msgstr "" +msgstr "Ruta del archivo SXW" #. module: base #: model:ir.module.module,description:base.module_account_asset @@ -12678,6 +13184,15 @@ msgid "" "\n" " " msgstr "" +"\n" +"Gestión financiera y contable de activos.\n" +"==========================================\n" +"\n" +"Este módulo gestiona los activos que posee una compañía o un individuo. " +"Permite seguir las depreciaciones que ocurren en dichos activos, y permite " +"crear los asientos de las líneas de depreciación.\n" +"\n" +" " #. module: base #: field:ir.cron,numbercall:0 @@ -12770,6 +13285,12 @@ msgid "" "Provide Templates for Chart of Accounts, Taxes for Uruguay.\n" "\n" msgstr "" +"\n" +"Plan general de cuentas.\n" +"====================\n" +"\n" +"Provee plantillas para el plan de cuentas y los impuestos para Uruguay.\n" +"\n" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_gr @@ -12890,7 +13411,7 @@ msgstr "Filtros en mis documentos" #. module: base #: model:ir.module.module,summary:base.module_project_gtd msgid "Personal Tasks, Contexts, Timeboxes" -msgstr "" +msgstr "Tareas personales, contextos, tiempos asignados" #. module: base #: model:ir.module.module,description:base.module_l10n_cr @@ -12912,6 +13433,22 @@ msgid "" "please go to http://translations.launchpad.net/openerp-costa-rica.\n" " " msgstr "" +"\n" +"Plan de cuentas para Costa Rica.\n" +"=================================\n" +"\n" +"Incluye:\n" +"---------\n" +" * account.type\n" +" * account.account.template\n" +" * account.tax.template\n" +" * account.tax.code.template\n" +" * account.chart.template\n" +"\n" +"Todo está en inglés con traducción a español. Más traducciones son " +"bienvenidas, por favor vayan a http://translations.launchpad.net/openerp-" +"costa-rica.\n" +" " #. module: base #: model:ir.actions.act_window,name:base.action_partner_supplier_form @@ -12938,7 +13475,7 @@ msgstr "Gabón" #. module: base #: model:ir.module.module,summary:base.module_stock msgid "Inventory, Logistic, Storage" -msgstr "" +msgstr "Inventario, logística, almacenamiento" #. module: base #: view:ir.actions.act_window:0 @@ -12992,7 +13529,7 @@ msgstr "Nueva Caledonia (Francesa)" #. module: base #: field:ir.model,osv_memory:0 msgid "Transient Model" -msgstr "" +msgstr "Model transitorio" #. module: base #: model:res.country,name:base.cy @@ -13050,7 +13587,7 @@ msgstr "Preferencias" #. module: base #: model:res.partner.category,name:base.res_partner_category_9 msgid "Components Buyer" -msgstr "" +msgstr "Comprador de componentes" #. module: base #: view:ir.module.module:0 @@ -13058,6 +13595,8 @@ msgid "" "Do you confirm the uninstallation of this module? This will permanently " "erase all data currently stored by the module!" msgstr "" +"¿Confirma la desinstalación de este módulo? ¡Esto eliminará permanentemente " +"todos los datos almacenados actualmente por el módulo!" #. module: base #: help:ir.cron,function:0 @@ -13131,7 +13670,7 @@ msgstr "Servidores de correo saliente" #. module: base #: model:ir.ui.menu,name:base.menu_custom msgid "Technical" -msgstr "" +msgstr "Técnico" #. module: base #: model:res.country,name:base.cn @@ -13220,6 +13759,18 @@ msgid "" "routing of the assembly operation.\n" " " msgstr "" +"\n" +"Este módulo permite un proceso de acopio intermedio para proveer de materias " +"primas a las órdenes de fabricación.\n" +"=============================================================================" +"=======================\n" +"\n" +"Un ejemplo de uso de este módulo es para gestionar la fabricación realizada " +"por subcontratistas. Para que se puede hacer de este modo, esteblezca el " +"producto ensamblado que es subcontratado a 'No auto\n" +"sub-contracted to 'Sin auto-acopio' y ponga la ubicación del proveedor en la " +"ruta de producción de la operación de ensamblado.\n" +" " #. module: base #: help:multi_company.default,expression:0 @@ -13255,6 +13806,21 @@ msgid "" " A + B + C -> D + E\n" " " msgstr "" +"\n" +"Este módulo permite fabricar varios productos de una orden de fabricación.\n" +"=============================================================================" +"\n" +"\n" +"Puede configurar subproductos en la lista de materiales.\n" +"\n" +"Sin este módulo:\n" +"--------------------\n" +" A + B + C -> D\n" +"\n" +"Con este módulo:\n" +"-----------------\n" +" A + B + C -> D + E\n" +" " #. module: base #: model:res.country,name:base.tf @@ -13334,6 +13900,9 @@ msgid "" "128x128px image, with aspect ratio preserved. Use this field in form views " "or some kanban views." msgstr "" +"Imagen mediana de este contacto. Se redimensiona automáticamente a 128x128 " +"px, con el ratio de aspecto preservado. Se usa este campo en las vistas los " +"formularios y en algunas vistas de kanban." #. module: base #: view:base.update.translations:0 @@ -13372,7 +13941,7 @@ msgstr "Acción a ejecutar" #: field:ir.model,modules:0 #: field:ir.model.fields,modules:0 msgid "In Modules" -msgstr "" +msgstr "En los módulos" #. module: base #: model:ir.module.module,shortdesc:base.module_contacts @@ -13414,6 +13983,15 @@ msgid "" " - InfoLogic UK counties listing\n" " - a few other adaptations" msgstr "" +"\n" +"Ésta es la última localización de OpenERP para Reino Uinido, necesaria la " +"contabilidad de PYMEs de RU con:\n" +"=============================================================================" +"====================\n" +" - un plan de cuentas preparado para CT600\n" +" - una estructura de impuesto preparada para VAT100\n" +" - listado de condados de RU de InfoLogic\n" +" - otras cuantas adaptaciones" #. module: base #: selection:ir.model,state:0 @@ -13441,7 +14019,7 @@ msgstr "ID de impuesto" #. module: base #: model:ir.module.module,shortdesc:base.module_account_bank_statement_extensions msgid "Bank Statement Extensions to Support e-banking" -msgstr "" +msgstr "Extensiones de extracto bancario para soportar e-banking" #. module: base #: field:ir.model.fields,field_description:0 @@ -13503,6 +14081,15 @@ msgid "" "Adds menu to show relevant information to each manager.You can also view the " "report of account analytic summary user-wise as well as month-wise.\n" msgstr "" +"\n" +"Este módulo modifica la vista de contabilidad analítica para mostrar datos " +"importantes para un gestor de proyectos de una compañía de servicios.\n" +"=============================================================================" +"=================================================\n" +"\n" +"Añade un menú para mostrar información relevante a cada gestor. Puede " +"también ver el informe del resumen de contabilidad analítica por usuario y " +"por mes.\n" #. module: base #: model:ir.module.module,description:base.module_hr_payroll_account @@ -13516,6 +14103,14 @@ msgid "" " * Company Contribution Management\n" " " msgstr "" +"\n" +"Sistema de pago genérico de nóminas integrado con contabilidad.\n" +"======================================================\n" +"\n" +" * Codificación de gastos\n" +" * Codificación de pagos\n" +" * Gestión de participación de las empresas\n" +" " #. module: base #: view:base.module.update:0 @@ -13555,6 +14150,8 @@ msgid "" "The user this filter is private to. When left empty the filter is public and " "available to all users." msgstr "" +"El usuario para el que el filtro es privado. Cuando está vacío, el filtro es " +"público y está disponible para todos los usuarios." #. module: base #: field:ir.actions.act_window,auto_refresh:0 @@ -13577,6 +14174,18 @@ msgid "" "\n" "Used, for example, in food industries." msgstr "" +"\n" +"Gestiona diferentes fechas en los productos y en los lotes de producción.\n" +"============================================================\n" +"\n" +"Se gestionan las siguientes fechas:\n" +"-----------------------------------------\n" +" - fecha de caducidad\n" +" - fecha de consumo seguro\n" +" - fecha de eliminación\n" +" - fecha de alerta\n" +"\n" +"Usado, por ejemplo, en la industria de la comida." #. module: base #: help:ir.translation,state:0 @@ -13584,6 +14193,8 @@ msgid "" "Automatically set to let administators find new terms that might need to be " "translated" msgstr "" +"Establecido automáticamente para dejar que los administradores encuentren " +"nuevos términos que necesiten ser traducidos" #. module: base #: code:addons/base/ir/ir_model.py:84 @@ -13610,7 +14221,7 @@ msgstr "Selección antes de fabricación" #. module: base #: model:ir.module.module,summary:base.module_note_pad msgid "Sticky memos, Collaborative" -msgstr "" +msgstr "Memorándums fijados, colaborativos" #. module: base #: model:res.country,name:base.wf @@ -13641,6 +14252,20 @@ msgid "" "* HR Jobs\n" " " msgstr "" +"\n" +"Gestión de recursos humanos.\n" +"==========================\n" +"\n" +"Esta aplicación habilita la gestión de importantes aspectos del personal de " +"su compañía y otros detalles como sus habilidades, contactos, horario...\n" +"\n" +"Puede gestionar:\n" +"----------------------\n" +"* Empleados y jerarquías: Puede definir sus empleados con usuarios y definir " +"jerarquías.\n" +"* Departamentos\n" +"* Puestos\n" +" " #. module: base #: model:ir.module.module,description:base.module_hr_contract @@ -13657,6 +14282,18 @@ msgid "" "You can assign several contracts per employee.\n" " " msgstr "" +"\n" +"Añade toda la información en el formulario de empleado para gestionar " +"contratos.\n" +"====================================================================\n" +"\n" +" * Contrato\n" +" * Lugar de nacimiento\n" +" * Fecha del examen médico\n" +" * Vehículo de empresa\n" +"\n" +"Puede asignar varios contratos por empleado.\n" +" " #. module: base #: view:ir.model.data:0 @@ -13714,6 +14351,8 @@ msgid "" "the user will have access to all records of everyone in the sales " "application." msgstr "" +"el usuario tendrá acceso a todos los registros de todos en la aplicación de " +"ventas." #. module: base #: model:ir.module.module,shortdesc:base.module_event @@ -13768,6 +14407,8 @@ msgid "" " the rightmost column (value) contains the " "translations" msgstr "" +"Formato CSV: puede editarla directamente en su programa de hoja de cálculo " +"favorito, la columna de más a la derecha contiene las traducciones" #. module: base #: model:ir.module.module,description:base.module_account_chart @@ -13813,6 +14454,9 @@ msgid "" "The common interface for plug-in.\n" "=================================\n" msgstr "" +"\n" +"Interfaz común para los conectores.\n" +"=================================\n" #. module: base #: model:ir.module.module,description:base.module_sale_crm @@ -13831,11 +14475,24 @@ msgid "" "modules.\n" " " msgstr "" +"\n" +"Este módulo añade un acceso directo a uno o varios casos de oportunidad en " +"el CRM.\n" +"===========================================================================\n" +"\n" +"Este acceso directo permite generar pedidos de venta basados en el caso " +"seleccionado.\n" +"Si hay diferentes casos abiertos (una lista), genera un pedido de venta por " +"caso.\n" +"El caso se cierra entonces y se enlaza con el pedido de venta generado.\n" +"\n" +"Le recomendamos instalar este módulo si instala los módulos 'sale' y 'crm'.\n" +" " #. module: base #: model:res.country,name:base.bq msgid "Bonaire, Sint Eustatius and Saba" -msgstr "" +msgstr "Bonaire, San Eustaquio y Saba" #. module: base #: model:ir.actions.report.xml,name:base.ir_module_reference_print @@ -13870,6 +14527,10 @@ msgid "" "your home page.\n" "You can track your suppliers, customers and other contacts.\n" msgstr "" +"\n" +"Este módulo da una vista rápida de su libreta de direcciones, accesible " +"desde su página de inicio.\n" +"Puede seguir a los proveedores, clientes y otros contactos.\n" #. module: base #: help:res.company,custom_footer:0 @@ -13893,7 +14554,7 @@ msgstr "Instalar módulos" #. module: base #: model:ir.ui.menu,name:base.menu_import_crm msgid "Import & Synchronize" -msgstr "" +msgstr "Importar y sincronizar" #. module: base #: view:res.partner:0 @@ -13924,7 +14585,7 @@ msgstr "Texto original" #: field:ir.model.constraint,date_init:0 #: field:ir.model.relation,date_init:0 msgid "Initialization Date" -msgstr "" +msgstr "Fecha de inicialización" #. module: base #: model:res.country,name:base.vu @@ -13972,6 +14633,15 @@ msgid "" "OpenOffice. \n" "Once you have modified it you can upload the report using the same wizard.\n" msgstr "" +"\n" +"Este módulo se usa junto con el conector de OpenERP para " +"LibreOffice/OpenOffice.\n" +"====================================================================\n" +"\n" +"Este módulo añade un asistente para importar/exportar informes .sxw que " +"puede modificar en LibreOffice/OpenOffice\n" +"Una vez modificado, puede volver a subir el informe utilizando el mismo " +"asistente.\n" #. module: base #: view:base.module.upgrade:0 @@ -14033,12 +14703,22 @@ msgid "" "order.\n" " " msgstr "" +"\n" +"Este módulo provee facilidades para el usuario para instalar los módulos " +"'mrp' y 'sale' al mismo tiempo.\n" +"=============================================================================" +"=======\n" +"\n" +"Se usa básicamente para gestionar las órdenes de fabricación generadas desde " +"los pedidos de venta. Añade el nombre y la referencia de ventas en la orden " +"de fabricación.\n" +" " #. module: base #: code:addons/base/ir/ir_fields.py:147 #, python-format msgid "no" -msgstr "" +msgstr "no" #. module: base #: field:ir.actions.server,trigger_obj_id:0 @@ -14056,6 +14736,12 @@ msgid "" "=========================\n" " " msgstr "" +"\n" +"Este módulo añade el menú y las características (tareas) de los proyectos al " +"portal si los módulos 'project' y 'portal' están instalados.\n" +"=============================================================================" +"==============================\n" +" " #. module: base #: code:addons/base/module/wizard/base_module_configuration.py:38 @@ -14171,6 +14857,12 @@ msgid "" "Collects web application usage with Google Analytics.\n" " " msgstr "" +"\n" +"Google Analytics.\n" +"==============================\n" +"\n" +"Recopila información de uso de la aplicación con Google Analytics.\n" +" " #. module: base #: help:ir.sequence,implementation:0 @@ -14201,7 +14893,7 @@ msgstr "Luxemburgo" #. module: base #: model:ir.module.module,summary:base.module_base_calendar msgid "Personal & Shared Calendar" -msgstr "" +msgstr "Calendario personal y compartido" #. module: base #: selection:res.request,priority:0 @@ -14217,7 +14909,7 @@ msgstr "Error ! No puede crear menús recursivos" #. module: base #: view:ir.translation:0 msgid "Web-only translations" -msgstr "" +msgstr "Traducciones sólo para web" #. module: base #: view:ir.rule:0 @@ -14313,7 +15005,7 @@ msgstr "Tailandia" #. module: base #: model:ir.module.module,summary:base.module_account_voucher msgid "Send Invoices and Track Payments" -msgstr "" +msgstr "Enviar factura y gestionar pagos" #. module: base #: model:ir.ui.menu,name:base.menu_crm_config_lead @@ -14323,7 +15015,7 @@ msgstr "Iniciativas y Oportunidades" #. module: base #: model:res.country,name:base.gg msgid "Guernsey" -msgstr "" +msgstr "Guernsey" #. module: base #: selection:base.language.install,lang:0 @@ -14460,7 +15152,7 @@ msgstr "Asistencia/Ayuda" #. module: base #: field:ir.rule,perm_write:0 msgid "Apply for Write" -msgstr "" +msgstr "Aplicar para escritura" #. module: base #: model:ir.module.module,description:base.module_stock @@ -14508,6 +15200,12 @@ msgid "" "Web pages\n" " " msgstr "" +"\n" +"Páginas\n" +"=======\n" +"\n" +"Páginas web\n" +" " #. module: base #: help:ir.actions.server,code:0 @@ -14633,6 +15331,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 este campo está vacío, la vista se aplica a todos los usuarios. En caso " +"contrario, la vista se aplica sólo a los usuarios de estos grupos." #. module: base #: selection:base.language.install,lang:0 @@ -14670,17 +15370,17 @@ msgstr "" #. module: base #: view:base.language.export:0 msgid "Export Settings" -msgstr "" +msgstr "Preferencias de exportación" #. module: base #: field:ir.actions.act_window,src_model:0 msgid "Source Model" -msgstr "" +msgstr "Modelo origen" #. module: base #: view:ir.sequence:0 msgid "Day of the Week (0:Monday): %(weekday)s" -msgstr "" +msgstr "Día de la semana (0: lunes): %(weekday)s" #. module: base #: code:addons/base/module/wizard/base_module_upgrade.py:84 @@ -14694,7 +15394,7 @@ msgstr "¡Dependencia no resuelta!" #: code:addons/base/ir/ir_model.py:1023 #, python-format msgid "Administrator access is required to uninstall a module" -msgstr "" +msgstr "Se requiere acceso como administrador para desinstalar un módulo" #. module: base #: model:ir.model,name:base.model_base_module_configuration @@ -14710,6 +15410,10 @@ msgid "" "\n" "(Document type: %s, Operation: %s)" msgstr "" +"No se ha podido completar la operación por restricciones de seguridad. " +"Contacte por favor con su administrador de sistema.\n" +"\n" +"(Tipo de documento: %s, Operación: %s)" #. module: base #: model:ir.module.module,description:base.module_idea @@ -14734,6 +15438,8 @@ msgid "" "%s This might be '%s' in the current model, or a field of the same name in " "an o2m." msgstr "" +"%s Esto debe ser '%s' en el modelo actual, o un campo del mismo nombre en " +"una relación one2many." #. module: base #: model:ir.module.module,description:base.module_account_payment @@ -14777,7 +15483,7 @@ msgstr "Acceso" #: field:res.partner,vat:0 #, python-format msgid "TIN" -msgstr "" +msgstr "NIF" #. module: base #: model:res.country,name:base.aw @@ -14842,7 +15548,7 @@ msgstr "Informes avanzados" #. module: base #: model:ir.module.module,summary:base.module_purchase msgid "Purchase Orders, Receptions, Supplier Invoices" -msgstr "" +msgstr "Pedidos de compra, recepciones, facturas de proveedor" #. module: base #: model:ir.module.module,description:base.module_hr_payroll @@ -14861,6 +15567,19 @@ msgid "" " * Integrated with Holiday Management\n" " " msgstr "" +"\n" +"Sistema genérico de sueldos.\n" +"=========================\n" +"\n" +" * Detalles del empleado\n" +" * Contratos del empleado\n" +" * Contrato basado en el pasaporte\n" +" * Provisiones/deducciones\n" +" * Permite configurar salario base/bruto/neto\n" +" * Nómina del empleado\n" +" * Registro mensual de sueldos\n" +" * Integrado con el gestor de vacaciones\n" +" " #. module: base #: model:ir.model,name:base.model_ir_model_data @@ -14939,7 +15658,7 @@ msgstr "Límite" #. module: base #: model:res.groups,name:base.group_hr_user msgid "Officer" -msgstr "" +msgstr "Directivo" #. module: base #: code:addons/orm.py:789 @@ -14990,12 +15709,24 @@ msgid "" "user name and password for the invitation of the survey.\n" " " msgstr "" +"\n" +"Este módulo se usa para encuestas.\n" +"==================================\n" +"\n" +"Depende de las respuestas o revisiones de varias preguntas por diferentes " +"usuarios. Una encuesta tiene múltiples páginas. Cada página puede contener " +"múltiples preguntas y cada pregunta puede tener múltiples respuestas. " +"Diferentes usuarios pueden dar diferentes respuestas a la preguntar y " +"dependiendo de ello la encuesta se realizará. Las empresas también pueden " +"enviar correos con el nombre de usuario y la contraseña para la invitación a " +"la encuesta.\n" +" " #. module: base #: code:addons/base/ir/ir_model.py:163 #, python-format msgid "Model '%s' contains module data and cannot be removed!" -msgstr "" +msgstr "¡El modelo '%s' contiene datos del módulo y no puede ser eliminado!" #. module: base #: model:res.country,name:base.az @@ -15048,7 +15779,7 @@ msgstr "Módulos genéricos" #. module: base #: model:res.country,name:base.mk msgid "Macedonia, the former Yugoslav Republic of" -msgstr "" +msgstr "Macedonia, Antigua república yugoslava de" #. module: base #: model:res.country,name:base.rw @@ -15062,6 +15793,9 @@ msgid "" "Allow users to login through OpenID.\n" "====================================\n" msgstr "" +"\n" +"Permite a los usuarios iniciar sesión a través de OpenID.\n" +"=============================================\n" #. module: base #: help:ir.mail_server,smtp_port:0 @@ -15098,7 +15832,7 @@ msgstr "Ventana actual" #: model:ir.module.category,name:base.module_category_hidden #: view:res.users:0 msgid "Technical Settings" -msgstr "" +msgstr "Configuración técnica" #. module: base #: model:ir.module.category,description:base.module_category_accounting_and_finance @@ -15117,7 +15851,7 @@ msgstr "Conector Thunderbird" #. module: base #: model:ir.module.module,summary:base.module_event msgid "Trainings, Conferences, Meetings, Exhibitions, Registrations" -msgstr "" +msgstr "Formaciones, conferencias, reuniones, exhibiciones, inscripciones" #. module: base #: model:ir.model,name:base.model_res_country @@ -15135,7 +15869,7 @@ msgstr "País" #. module: base #: model:res.partner.category,name:base.res_partner_category_15 msgid "Wholesaler" -msgstr "" +msgstr "Mayorista" #. module: base #: model:ir.module.module,shortdesc:base.module_base_vat @@ -15167,6 +15901,8 @@ msgid "" "file encoding, please be sure to view and edit\n" " using the same encoding." msgstr "" +"codificación de archivo. Asegúrese de que ve y edita usando la misma " +"codificación." #. module: base #: view:ir.rule:0 @@ -15185,7 +15921,7 @@ msgstr "Holanda - Contabilidad" #. module: base #: model:res.country,name:base.gs msgid "South Georgia and the South Sandwich Islands" -msgstr "" +msgstr "Islas Georgia del sur y Sandwich del sur" #. module: base #: view:res.lang:0 @@ -15200,7 +15936,7 @@ msgstr "Español (SV) / Español (SV)" #. module: base #: model:ir.actions.act_window,name:base.open_module_tree msgid "Install a Module" -msgstr "" +msgstr "Instalar un módulo" #. module: base #: field:ir.module.module,auto_install:0 @@ -15220,6 +15956,12 @@ msgid "" "taxes\n" "and the Lempira currency." msgstr "" +"\n" +"Éste es el módulo base para gestionar el plan de cuentas para Honduras.\n" +"====================================================================\n" +" \n" +"Agrega una nomenclatura contable para Honduras. También incluye impuestos y " +"la moneda Lempira." #. module: base #: model:res.country,name:base.jp @@ -15318,6 +16060,8 @@ msgid "" "Ambiguous specification for field '%(field)s', only provide one of name, " "external id or database id" msgstr "" +"Especificación ambigua para el campo '%(field)s'. Especifique sólo uno de " +"estos: nombre, id. externo o id. de la base de datos." #. module: base #: field:ir.sequence,implementation:0 @@ -15337,7 +16081,7 @@ msgstr "Chile" #. module: base #: model:ir.module.module,shortdesc:base.module_web_view_editor msgid "View Editor" -msgstr "" +msgstr "Editor de vistas" #. module: base #: view:ir.cron:0 @@ -15427,7 +16171,7 @@ msgstr "Actualización del sistema" #: field:ir.actions.report.xml,report_sxw_content:0 #: field:ir.actions.report.xml,report_sxw_content_data:0 msgid "SXW Content" -msgstr "" +msgstr "Contenido del SXW" #. module: base #: help:ir.sequence,prefix:0 @@ -15469,7 +16213,7 @@ msgstr "Información general" #. module: base #: field:ir.model.data,complete_name:0 msgid "Complete ID" -msgstr "" +msgstr "Id. completo" #. module: base #: model:res.country,name:base.tc @@ -15482,6 +16226,8 @@ msgid "" "Tax Identification Number. Check the box if this contact is subjected to " "taxes. Used by the some of the legal statements." msgstr "" +"Número de identificación fiscal. Marque la casilla si el contacto está " +"sujeto a impuestos. Usado por algunos documentos legales." #. module: base #: field:res.partner.bank,partner_id:0 @@ -15592,7 +16338,7 @@ msgstr "Solicitudes de compra" #. module: base #: selection:ir.actions.act_window,target:0 msgid "Inline Edit" -msgstr "" +msgstr "Editor incorporado" #. module: base #: selection:ir.cron,interval_type:0 @@ -15659,6 +16405,14 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para añadir un contacto en la libreta de direcciones.\n" +"

\n" +"OpenERP le ayuda a gestionar todas las actividades relacionadas con los " +"clientes: discusiones, historial de oportunidades de negocio, documentos, " +"etc.\n" +"

\n" +" " #. module: base #: model:res.partner.category,name:base.res_partner_category_2 @@ -15702,6 +16456,15 @@ msgid "" "on a supplier purchase order into several accounts and analytic plans.\n" " " msgstr "" +"\n" +"El módulo base para gestionar las distribuciones analíticas y los pedidos de " +"compra.\n" +"====================================================================\n" +"\n" +"Permite al usuario mantener varios planes analíticos. Esto deja dividir una " +"línea en un pedido de compra de proveedor en varias cuentas y planes " +"analíticos.\n" +" " #. module: base #: model:res.country,name:base.lk @@ -15721,7 +16484,7 @@ msgstr "Ruso / русский язык" #. module: base #: model:ir.module.module,shortdesc:base.module_auth_signup msgid "Signup" -msgstr "" +msgstr "Registro" #~ msgid "SMS - Gateway: clickatell" #~ msgstr "Puerta de enlace SMS vía clickatell" diff --git a/openerp/addons/base/i18n/es_EC.po b/openerp/addons/base/i18n/es_EC.po index a81b7b5d8e9..2d08fbd47ef 100644 --- a/openerp/addons/base/i18n/es_EC.po +++ b/openerp/addons/base/i18n/es_EC.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0.0-rc1\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:01+0000\n" -"PO-Revision-Date: 2012-11-05 00:42+0000\n" +"PO-Revision-Date: 2012-12-20 02:14+0000\n" "Last-Translator: Cristian Salamea (Gnuthink) \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-04 05:03+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:43+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -24,6 +24,10 @@ msgid "" "================================================\n" " " msgstr "" +"\n" +"Módulo para la emisión e impresión de cheques\n" +"================================================\n" +" " #. module: base #: model:res.country,name:base.sh @@ -59,7 +63,7 @@ msgstr "Código vista" #. module: base #: model:ir.module.module,summary:base.module_sale_stock msgid "Quotation, Sale Orders, Delivery & Invoicing Control" -msgstr "" +msgstr "Presupuesto, órdenes de venta, entrega y control de facturación" #. module: base #: selection:ir.sequence,implementation:0 @@ -88,12 +92,12 @@ msgstr "" #. module: base #: model:ir.module.module,summary:base.module_point_of_sale msgid "Touchscreen Interface for Shops" -msgstr "" +msgstr "Interfaz de pantalla táctil para tiendas" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_in_hr_payroll msgid "Indian Payroll" -msgstr "" +msgstr "Nomina de la India" #. module: base #: help:ir.cron,model:0 @@ -123,6 +127,17 @@ msgid "" " * Product Attributes\n" " " msgstr "" +"\n" +"Módulo que añade fabricantes y atributos en el formulario de producto.\n" +"===========================================================\n" +"\n" +"Puede definir los siguientes campos para un producto:\n" +"-------------------------------------------------\n" +"* Fabricante\n" +"* Nombre del producto del fabricante\n" +"* Código del producto del fabricante\n" +"* Atributos del producto\n" +" " #. module: base #: field:ir.actions.client,params:0 @@ -136,11 +151,14 @@ msgid "" "The module adds google user in res user.\n" "========================================\n" msgstr "" +"\n" +"El módulo añade usuarios Google al registro de usuarios\n" +"============================================\n" #. module: base #: help:res.partner,employee:0 msgid "Check this box if this contact is an Employee." -msgstr "" +msgstr "Marque si el contacto es un empleado" #. module: base #: help:ir.model.fields,domain:0 @@ -171,7 +189,7 @@ msgstr "Ventana destino" #. module: base #: field:ir.actions.report.xml,report_rml:0 msgid "Main Report File Path" -msgstr "" +msgstr "Ruta de archivo del informe principal" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_analytic_plans @@ -269,7 +287,7 @@ msgstr "creado." #. module: base #: field:ir.actions.report.xml,report_xsl:0 msgid "XSL Path" -msgstr "" +msgstr "Ruta XSL" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_tr @@ -295,7 +313,7 @@ msgstr "Inuktitut / ᐃᓄᒃᑎᑐᑦ" #. module: base #: model:res.groups,name:base.group_multi_currency msgid "Multi Currencies" -msgstr "" +msgstr "Multimoneda" #. module: base #: model:ir.module.module,description:base.module_l10n_cl @@ -307,6 +325,12 @@ msgid "" "\n" " " msgstr "" +"\n" +"Plan de cuentas y localización de impuestos chilenos.\n" +"==============================================\n" +"Plan contable chileno e impuestos de acuerdo a disposiciones vigentes\n" +"\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_sale @@ -319,6 +343,7 @@ msgid "" "The internal user that is in charge of communicating with this contact if " "any." msgstr "" +"El usuario interno encargado de comunicarse con este contacto si lo hubiese." #. module: base #: view:res.partner:0 diff --git a/openerp/addons/base/i18n/et.po b/openerp/addons/base/i18n/et.po index 915dc7a15c8..a722c4c7e65 100644 --- a/openerp/addons/base/i18n/et.po +++ b/openerp/addons/base/i18n/et.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.4\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-18 22:00+0000\n" +"PO-Revision-Date: 2012-12-19 19:49+0000\n" "Last-Translator: Ahti Hinnov \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-19 05:13+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:41+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: base @@ -531,7 +531,7 @@ msgstr "Kuupäeva vorming" #. module: base #: model:ir.module.module,shortdesc:base.module_base_report_designer msgid "OpenOffice Report Designer" -msgstr "" +msgstr "OpenOffice aruande kujundaja" #. module: base #: model:res.country,name:base.an @@ -980,7 +980,7 @@ msgstr "" #. module: base #: view:res.users:0 msgid "Email Preferences" -msgstr "" +msgstr "E-posti seadistused" #. module: base #: code:addons/base/ir/ir_fields.py:196 @@ -1571,7 +1571,7 @@ msgstr "" #. module: base #: view:res.company:0 msgid "Report Footer Configuration" -msgstr "" +msgstr "Aruande jaluse seadistamine" #. module: base #: field:ir.translation,comments:0 @@ -1951,7 +1951,7 @@ msgstr "Lisatud mudel" #. module: base #: field:res.partner.bank,footer:0 msgid "Display on Reports" -msgstr "" +msgstr "Kuva aruannetes" #. module: base #: model:ir.module.module,description:base.module_project_timesheet @@ -2144,7 +2144,7 @@ msgstr "Hispaania / Español" #. module: base #: selection:base.language.install,lang:0 msgid "Korean (KP) / 한국어 (KP)" -msgstr "" +msgstr "Korea (KP) / 한국어 (KP)" #. module: base #: model:res.country,name:base.ax @@ -2487,7 +2487,7 @@ msgstr "" #. module: base #: field:res.company,rml_header1:0 msgid "Company Slogan" -msgstr "" +msgstr "Ettevõtte loosung" #. module: base #: model:res.country,name:base.bb @@ -2537,7 +2537,7 @@ msgstr "Kreeka / Ελληνικά" #. module: base #: field:res.company,custom_footer:0 msgid "Custom Footer" -msgstr "" +msgstr "Kohandatud jalus" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_crm @@ -2593,7 +2593,7 @@ msgstr "Arveldus" #. module: base #: field:ir.ui.view_sc,name:0 msgid "Shortcut Name" -msgstr "Kiirkorralduse nimi" +msgstr "Otsetee nimi" #. module: base #: field:res.partner,contact_address:0 @@ -3009,7 +3009,7 @@ msgstr "Norfolki saar" #. module: base #: selection:base.language.install,lang:0 msgid "Korean (KR) / 한국어 (KR)" -msgstr "" +msgstr "Korea (KR) / 한국어 (KR)" #. module: base #: help:ir.model.fields,model:0 @@ -3636,7 +3636,7 @@ msgstr "" #: field:res.company,rml_footer:0 #: field:res.company,rml_footer_readonly:0 msgid "Report Footer" -msgstr "" +msgstr "Aruande jalus" #. module: base #: selection:res.lang,direction:0 @@ -3868,7 +3868,7 @@ msgstr "Peata kõik" #. module: base #: field:res.company,paper_format:0 msgid "Paper Format" -msgstr "" +msgstr "Paberi formaat" #. module: base #: model:ir.module.module,description:base.module_note_pad @@ -4714,7 +4714,7 @@ msgstr "" #. module: base #: selection:base.language.install,lang:0 msgid "Portuguese (BR) / Português (BR)" -msgstr "" +msgstr "Portugali (BR) / Português (BR)" #. module: base #: model:ir.model,name:base.model_ir_needaction_mixin @@ -5154,7 +5154,7 @@ msgstr "" #. module: base #: view:res.company:0 msgid "Preview Header/Footer" -msgstr "" +msgstr "Päise/jaluse eelvaade" #. module: base #: field:ir.ui.menu,parent_id:0 @@ -5841,7 +5841,7 @@ msgstr "" #. module: base #: view:ir.ui.view_sc:0 msgid "Shortcut" -msgstr "Lühend" +msgstr "Otsetee" #. module: base #: field:ir.model.data,date_init:0 @@ -6718,7 +6718,7 @@ msgstr "" #. module: base #: selection:res.currency,position:0 msgid "After Amount" -msgstr "" +msgstr "Peale summat" #. module: base #: selection:base.language.install,lang:0 @@ -7044,7 +7044,7 @@ msgstr "Mitmel dokumendil" #: view:res.users:0 #: view:wizard.ir.model.menu.create:0 msgid "or" -msgstr "" +msgstr "või" #. module: base #: model:ir.module.module,shortdesc:base.module_account_accountant @@ -7608,7 +7608,7 @@ msgstr "Kohandatud väli" #. module: base #: model:ir.module.module,summary:base.module_account_accountant msgid "Financial and Analytic Accounting" -msgstr "" +msgstr "Finants- ja analüütiline raamatupidamine" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_project @@ -7708,7 +7708,7 @@ msgstr "" #. module: base #: model:res.partner.bank.type,name:base.bank_normal msgid "Normal Bank Account" -msgstr "" +msgstr "Tavaline pangakonto" #. module: base #: view:ir.actions.wizard:0 @@ -7980,7 +7980,7 @@ msgstr "Tühista eemaldus" #. module: base #: view:res.bank:0 msgid "Communication" -msgstr "Suhtlemine" +msgstr "Kontakt" #. module: base #: model:ir.module.module,shortdesc:base.module_analytic @@ -9571,7 +9571,7 @@ msgstr "Paigaldamise ootel" #: model:ir.module.module,shortdesc:base.module_base #: field:res.currency,base:0 msgid "Base" -msgstr "Baas" +msgstr "Alus" #. module: base #: field:ir.model.data,model:0 @@ -9660,7 +9660,7 @@ msgstr "Minutid" #. module: base #: view:res.currency:0 msgid "Display" -msgstr "" +msgstr "Kuvamine" #. module: base #: model:res.groups,name:base.group_multi_company @@ -12471,7 +12471,7 @@ msgstr "Küpros" #. module: base #: field:res.users,new_password:0 msgid "Set Password" -msgstr "" +msgstr "Määra salasõna" #. module: base #: field:ir.actions.server,subject:0 @@ -12503,7 +12503,7 @@ msgstr "" #. module: base #: selection:res.currency,position:0 msgid "Before Amount" -msgstr "" +msgstr "Enne summat" #. module: base #: field:res.request,act_from:0 @@ -12572,7 +12572,7 @@ msgstr "" #. module: base #: field:res.company,company_registry:0 msgid "Company Registry" -msgstr "Ettevõtte register" +msgstr "Ettevõtte registrikood" #. module: base #: view:ir.actions.report.xml:0 @@ -12917,7 +12917,7 @@ msgstr "Zaire" #. module: base #: model:ir.module.module,summary:base.module_project msgid "Projects, Tasks" -msgstr "" +msgstr "Projektid, ülesanded" #. module: base #: field:workflow.instance,res_id:0 diff --git a/openerp/addons/base/i18n/hr.po b/openerp/addons/base/i18n/hr.po index c18682614bf..0dacf6c6adb 100644 --- a/openerp/addons/base/i18n/hr.po +++ b/openerp/addons/base/i18n/hr.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-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-17 20:19+0000\n" +"PO-Revision-Date: 2012-12-19 20:48+0000\n" "Last-Translator: Goran Kliska \n" "Language-Team: openerp-translators\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-18 04:58+0000\n" -"X-Generator: Launchpad (build 16372)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:42+0000\n" +"X-Generator: Launchpad (build 16378)\n" "Language: hr\n" #. module: base @@ -714,7 +714,7 @@ msgstr "Palau" #. module: base #: view:res.partner:0 msgid "Sales & Purchases" -msgstr "Prodaja i naručivanje" +msgstr "Prodaja i nabava" #. module: base #: view:ir.translation:0 @@ -1511,7 +1511,7 @@ msgstr "" #: model:ir.module.category,name:base.module_category_purchase_management #: model:ir.ui.menu,name:base.menu_purchase_root msgid "Purchases" -msgstr "Nabave" +msgstr "Nabava" #. module: base #: model:res.country,name:base.md diff --git a/openerp/addons/base/i18n/hu.po b/openerp/addons/base/i18n/hu.po index 8948d23c89e..514bc4d3a8a 100644 --- a/openerp/addons/base/i18n/hu.po +++ b/openerp/addons/base/i18n/hu.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-18 17:37+0000\n" +"PO-Revision-Date: 2012-12-19 16:59+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-19 05:14+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:41+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: base @@ -251,6 +251,35 @@ msgid "" "* Planned Revenue by Stage and User (graph)\n" "* Opportunities by Stage (graph)\n" msgstr "" +"\n" +"Az alapértelemezett OpenERP CRM Ügyfélkapcsolat-kezelés\n" +"=====================================================\n" +"\n" +"Ez az alkalmazás lehetővé teszi egy csoportnak, hogy inteligensen és " +"hatékonyan kezelje a vezetői gyűléseket, lehetőségeket, találkozókat és " +"telefonokat.\n" +"\n" +"Kezeli a kulcsfontosságú munkákat mint kommunikáció, azonosítás, kiosztás, " +"felosztás és értesítés.\n" +"\n" +"OpenERP biztosítja, hogy minden esetben nyomon követhetőek legyenek a " +"felhasználók, vásárlók és beszállítók. Autómatikusan küldhető emlékeztető, " +"kiterjezti az igényt, bekapcsol speciális eszközt és még több cselekvésen " +"alapuló módot, melyet a vállalkozása szabályaira szabhat.\n" +"\n" +"A legnayobb dolog ebben a rendszerben, hgoy a felhasználónak nem kell semmi " +"speciálisat véghezvinnie. A CRM modulnak van egy e-amil átjárója ami " +"szinkronizálja az e-maileket az OpenERP által. Így, a felhasználók e-" +"maileket küldhetnek az igénylés helyére.\n" +"\n" +"OpenERP törődni fog az üzenetek megköszönésével, automatikusan átirányítva a " +"megfelelő osztályhoz, biztosítva a jövőbeni munkafolyamat megfelő helyét.\n" +"\n" +"\n" +"Dashboard / irányítópult a CRM-ben, ezt is beleértve:\n" +"-------------------------------\n" +"* Tervezett bevétel szintek és felhasználók szerint (grafikon)\n" +"* Lehetőségek szintenként (grafikon)\n" #. module: base #: code:addons/base/ir/ir_model.py:397 @@ -5753,6 +5782,23 @@ msgid "" "since it's the same which has been renamed.\n" " " msgstr "" +"\n" +"Ez a modul lehetővé teszi a felhasználók részére a partnerek leválogatását.\n" +"=================================================================\n" +"\n" +"A profil kritériumokat használja az előző leválogató modulból ami fel lett " +"javítva. \n" +"Köszönhető az új felfogású kikérdezőnek. Újra tudja csoportosítani a " +"kérdéseket\n" +"egy kikérdezőbe és direkt használhatja azokat a partnerekhez.\n" +"\n" +"Össze lett kapcsolva az előző CRM & SRM leválogatás eszközzel mivel ezek át " +"lettek fedve.\n" +"\n" +" **Megjegyzés** ez a modul nem kompatibilis a leválogató modullal, mivel " +"ez ugyanaz, csak más \n" +"másként lett elnevezve.\n" +" " #. module: base #: model:res.country,name:base.gt @@ -6358,7 +6404,7 @@ msgstr "Man Sziget" #. module: base #: help:ir.actions.client,res_model:0 msgid "Optional model, mostly used for needactions." -msgstr "" +msgstr "Választható modell, főként szükséges műveletekhez használják." #. module: base #: field:ir.attachment,create_uid:0 @@ -6523,6 +6569,58 @@ msgid "" " * Zip return for separated PDF\n" " * Web client WYSIWYG\n" msgstr "" +"\n" +"Ez a modul hozzáad egy Kimutatás motort WebKit könyvtárt alapul véve " +"(wkhtmltopdf) a HTML +CCS megalkotott kimutatások támogatásához.\n" +"=============================================================================" +"========================================\n" +"\n" +"A modul felépítését és egy pár kódolást a report_openoffice modul " +"ösztönözte.\n" +"\n" +"A modul lehetővé teszi:\n" +"------------------\n" +" - HTML kimutatás meghatározását\n" +" - Többszörös fejléc támogatása\n" +" - Többszörös logó használat\n" +" - Többszörös vállalat támogatás\n" +" - HTML és CSS-3 támogatás (az aktuális WebKIT verzió határain belül)\n" +" - JavaScript támogatás\n" +" - Nyers HTML debugger\n" +" - Könyv nyomtatási lehetőség\n" +" - Margó meghatározás\n" +" - Papír méret meghatározás\n" +"\n" +"Többszörös fejléc és logó meghatározható vállalatonként. CCS stílus, fejléc " +"és\n" +"lábjegyzet meghatározható vállalatonként.\n" +"\n" +"Például kimutatást megtekinthet webkit_report_sample modulban, és ebben a " +"videóban:\n" +" http://files.me.com/nbessi/06n92k.mov\n" +"\n" +"Követelmények és telepítés:\n" +"------------------------------\n" +"Ehhez a modulhoz kell a ``wkthtmltopdf`` könyvtár a HTML dokumentumok PDF " +"ábrázolásához.\n" +"Verzió 0.9.9 vagy későbbi szükséges, és megtalálható a \n" +"http://code.google.com/p/wkhtmltopdf/ a Linux, Mac OS X (i386) és Windows " +"(32bits) rendszerekhez.\n" +"\n" +"A könyvtár OpenERP szerveren való telepítése után, be kell állítani az " +"elérési utat a ``wkthtmltopdf`` futtatójához minden vállalathoz.\n" +"\n" +"Ha nem talál fejlécet/lábjegyzetet vagy egyéb probléma merül fel a Linuxon, " +"akkor győződjön meg, hogy telepíti a könyvtár 'static' verzióját. UBUNTU " +"alatt ez ey ismert ``wkhtmltopdf`` probléma.\n" +"\n" +"\n" +"Tennivaló:\n" +"-----\n" +" * JavaScript támogatás aktiválás deaktiválás\n" +" * Gyűjtő és könyv formátum támogatás\n" +" * Zip visszaadás egy külön PDF-hez\n" +" * Web kliens WYSIWYG\n" #. module: base #: model:res.groups,name:base.group_sale_salesman_all_leads @@ -8175,6 +8273,30 @@ msgid "" "* In a module, so that administrators and users of OpenERP who do not\n" " need or want an online import can avoid it being available to users.\n" msgstr "" +"\n" +"Új fájl import kiterjesztések az OpenERP rendszerhez\n" +"======================================\n" +"\n" +"Az OpenERP fájl rendszerének újra-implementálása:\n" +"\n" +"* Szerver oldal, az előző rendszer a legtöbb végrehalytást a kliensre " +"kényszerítette\n" +" amely megduplázta az energiát (kliensek közt), az importálási rendszert \n" +" nehézkessé teszi a kliens nélkül(direkt RPC vagy\n" +" más automata formátumnál) és az export/import rendszer érthetőségét\n" +" is nehézkessé teszi amint 3 + különböző projekten hajtódik végre.\n" +"\n" +"* Érthetőbben a felhasználók és partnerek a saját import kivitelezést tudnak " +"\n" +" készíteni más fájl formátumokból (pl. OpenDocument fájlok)\n" +" ami leegyszerűsítheti a munka folyamatuk kezelését az adat forrásból " +"való\n" +" előállítását.\n" +"\n" +"* A modulban, azok az OpenERP adminisztrátorok és felhasználók akik nem\n" +" igénylik az online importot biztosíthatják, hogy azok nem lesznek " +"elérhetők \n" +" a felhasználók részére.\n" #. module: base #: selection:res.currency,position:0 @@ -12740,7 +12862,7 @@ msgstr "Olvasási hozzáférési jog" #. module: base #: model:ir.module.module,shortdesc:base.module_analytic_user_function msgid "Jobs on Contracts" -msgstr "" +msgstr "Feladatok a szerződésekben" #. module: base #: code:addons/base/res/res_lang.py:187 @@ -14646,6 +14768,8 @@ msgid "" "Helps you manage your inventory and main stock operations: delivery orders, " "receptions, etc." msgstr "" +"Segít Önnek a készletek és a fő készletműveletek kezelésében: " +"szállítólevelek, áruátvételek, stb." #. module: base #: model:ir.model,name:base.model_base_module_update @@ -16029,6 +16153,7 @@ msgstr "" #: help:ir.actions.act_window,usage:0 msgid "Used to filter menu and home actions from the user form." msgstr "" +"A menű és főoldal műveletek szűrésére használták a felhasználói űrlapból." #. module: base #: model:res.country,name:base.sa @@ -16050,6 +16175,15 @@ msgid "" "order.\n" " " msgstr "" +"\n" +"Ez a modul lehetőséget ad MRP és eladási modul egyszeri telepítésére.\n" +"=============================================================================" +"=======\n" +"\n" +"Alapvetően akkor használt, ha nyomon szeretnénk követni a megrendelésekből " +"generált termelési megrendeléseket. A gyártási megrendeléshez ad hozzá " +"eladás nevet és eladási hivatkozást.\n" +" " #. module: base #: code:addons/base/ir/ir_fields.py:147 @@ -16073,6 +16207,12 @@ msgid "" "=========================\n" " " msgstr "" +"\n" +"Ez a modul hozzáadja a portáljához a project/terv menűt és annak " +"tulajdonságait (feladatait) ha a projekt/terv és portál telepítve vannak.\n" +"=============================================================================" +"=========================\n" +" " #. module: base #: code:addons/base/module/wizard/base_module_configuration.py:38 @@ -16085,7 +16225,7 @@ msgstr "Rendszer konfigurálása kész" #: view:ir.config_parameter:0 #: model:ir.ui.menu,name:base.ir_config_menu msgid "System Parameters" -msgstr "" +msgstr "Rendszer paraméterek" #. module: base #: model:ir.module.module,description:base.module_l10n_ch @@ -16203,7 +16343,7 @@ msgstr "Művelet több dokumentumon" #: model:ir.actions.act_window,name:base.action_partner_title_partner #: model:ir.ui.menu,name:base.menu_partner_title_partner msgid "Titles" -msgstr "" +msgstr "Címek" #. module: base #: model:ir.module.module,description:base.module_anonymization @@ -16226,6 +16366,22 @@ msgid "" "anonymization process to recover your previous data.\n" " " msgstr "" +"\n" +"Ez a modul lehetővé teszi az adatbázis titkosítását.\n" +"===============================================\n" +"\n" +"Ezzel a modullal a bizalmas adatait biztonságban tarthatja egy megadott " +"adatbázisban.\n" +"Ez az eljárás hasznos, ha költöztetéskor megakarja védeni a saját ügyfelei " +"bizalmas adatait. \n" +"Az alapelv az, hogy egy titkosító eszközt futtat amely elrejti a bizalmas " +"adatokat (ki lesznek \n" +"cserélve ‘XXX’ karakterekkel). Ekkor elküldheti a titkosított adatokat a " +"költözési csoporhoz.\n" +"Amikor visszatértek a költöztetni kívánt adatok, akkor vissza lehet állítani " +"azokat\n" +"a titkosító eljárással az adatok visszanyeréssel.\n" +" " #. module: base #: model:ir.module.module,description:base.module_web_analytics @@ -16237,6 +16393,12 @@ msgid "" "Collects web application usage with Google Analytics.\n" " " msgstr "" +"\n" +"Google Analytics.\n" +"==============================\n" +"\n" +"Összegyűjti a web alkalmazás használaát a Google Analytics rendszerrel.\n" +" " #. module: base #: help:ir.sequence,implementation:0 @@ -16245,6 +16407,9 @@ msgid "" "later is slower than the former but forbids any gap in the sequence (while " "they are possible in the former)." msgstr "" +"Két sorrendet ajánl a tárgy beillesztésthez: Alapértelmezett és 'Nincs rés'. " +"A későbbi lasúbb mint a mostani, de megtilt minden rést ami ebben a " +"sorrendben van (mivel ezek az előzőben lehettek)." #. module: base #: model:res.country,name:base.gn @@ -16280,7 +16445,7 @@ msgstr "Hiba ! Nem hozhat létre rekurzív menüket." #. module: base #: view:ir.translation:0 msgid "Web-only translations" -msgstr "" +msgstr "Kizárólag-web fordítások" #. module: base #: view:ir.rule:0 @@ -16337,16 +16502,60 @@ msgid "" "\n" " " msgstr "" +"\n" +"Belga számlatükör és lokalizáció \n" +"\n" +"This is the base module to manage the accounting chart for Belgium in " +"OpenERP.\n" +"=============================================================================" +"=\n" +"\n" +"After installing this module, the Configuration wizard for accounting is " +"launched.\n" +" * We have the account templates which can be helpful to generate Charts " +"of Accounts.\n" +" * On that particular wizard, you will be asked to pass the name of the " +"company,\n" +" the chart template to follow, the no. of digits to generate, the code " +"for your\n" +" account and bank account, currency to create journals.\n" +"\n" +"Thus, the pure copy of Chart Template is generated.\n" +"\n" +"Wizards provided by this module:\n" +"--------------------------------\n" +" * Partner VAT Intra: Enlist the partners with their related VAT and " +"invoiced\n" +" amounts. Prepares an XML file format.\n" +" \n" +" **Path to access :** Invoicing/Reporting/Legal Reports/Belgium " +"Statements/Partner VAT Intra\n" +" * Periodical VAT Declaration: Prepares an XML file for Vat Declaration " +"of\n" +" the Main company of the User currently Logged in.\n" +" \n" +" **Path to access :** Invoicing/Reporting/Legal Reports/Belgium " +"Statements/Periodical VAT Declaration\n" +" * Annual Listing Of VAT-Subjected Customers: Prepares an XML file for " +"Vat\n" +" Declaration of the Main company of the User currently Logged in Based " +"on\n" +" Fiscal year.\n" +" \n" +" **Path to access :** Invoicing/Reporting/Legal Reports/Belgium " +"Statements/Annual Listing Of VAT-Subjected Customers\n" +"\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_base_gengo msgid "Automated Translations through Gengo API" -msgstr "" +msgstr "Automatikus fordítás a Gengo API keresztül" #. module: base #: model:ir.module.module,shortdesc:base.module_account_payment msgid "Suppliers Payment Management" -msgstr "" +msgstr "Szállítói kifizetések kezelése" #. module: base #: model:res.country,name:base.sv @@ -16376,7 +16585,7 @@ msgstr "Thaiföld" #. module: base #: model:ir.module.module,summary:base.module_account_voucher msgid "Send Invoices and Track Payments" -msgstr "" +msgstr "Számlák küldése és fizetések nyomonkövetése" #. module: base #: model:ir.ui.menu,name:base.menu_crm_config_lead @@ -16387,6 +16596,7 @@ msgstr "Lehetőségek" #: model:res.country,name:base.gg msgid "Guernsey" msgstr "" +"Guernsey-sziget - Guernsey valutaunióban van az Egyesült Királysággal" #. module: base #: selection:base.language.install,lang:0 @@ -16406,6 +16616,17 @@ msgid "" " bilgileriniz, ilgili para birimi gibi bilgiler isteyecek.\n" " " msgstr "" +"\n" +"Török számlatükör és lokalizáció\n" +"\n" +"Türkiye için Tek düzen hesap planı şablonu OpenERP Modülü.\n" +"==========================================================\n" +"\n" +"Bu modül kurulduktan sonra, Muhasebe yapılandırma sihirbazı çalışır\n" +" * Sihirbaz sizden hesap planı şablonu, planın kurulacağı şirket, banka " +"hesap\n" +" bilgileriniz, ilgili para birimi gibi bilgiler isteyecek.\n" +" " #. module: base #: selection:workflow.activity,join_mode:0 @@ -16418,6 +16639,8 @@ msgstr "És" msgid "" "Database identifier of the record to which this applies. 0 = for all records" msgstr "" +"Adatbázis azonosító arra a rekordra amelyre ez vonatkozik. 0 = összes " +"rekordra" #. module: base #: field:ir.model.fields,relation:0 @@ -16427,7 +16650,7 @@ msgstr "Objektum kapcsolat" #. module: base #: model:ir.module.module,shortdesc:base.module_account_voucher msgid "eInvoicing & Payments" -msgstr "" +msgstr "Számlázás & Kifizetések" #. module: base #: model:ir.module.module,description:base.module_base_crypt @@ -16463,6 +16686,42 @@ msgid "" "This module is currently not compatible with the ``user_ldap`` module and\n" "will disable LDAP authentication completely if installed at the same time.\n" msgstr "" +"\n" +"Rendesszövegű jelszó kiváltása biztonsági hasító függvénnyel az " +"adatbázisban.\n" +"================================================================\n" +"\n" +"A meglévő felhasználói adatbázisban, a rendesszövegű jelszavak azonnal el " +"lesznek távolítva\n" +"amint telepítésre kerül a base_crypt.\n" +"\n" +"Minden jelszó ki lesz cserélve egy biztonságos, konzervált, kriptográfiai " +"hasító függvénnyel, \n" +"ezzel megakadályozva az eredeti jelszó kiolvasását az adatbázisból.\n" +"\n" +"Miután telepítette ezt a modult, nem lesz lehetősége az elfelejtett jelszó " +"visszafejtésére \n" +"a felhasználók részéről, az adminisztátor egyedüli lehetősége lesz egy új " +"jelszó megadása.\n" +"\n" +"Biztonsági figyelmeztetés:\n" +"-----------------\n" +"Ennek a modulnak a telepítésével nem hagyhatja figyelmen kívül a többi " +"biztonsági intézkedést,\n" +"mivel a jelszó a hálózaton keresztül kódolatlanul halad keresztül, kivéve, " +"ha \n" +"biztonsági protokolt használ mint a XML-RPCS vagy HTTPS.\n" +"\n" +"Ez nem védi meg az adatbázis többi részét, mely bizalmas\n" +"adatokat is tartalmazhat. Pontos biztonsági intézkedést kell beileszteni\n" +"a rendszer adminisztrátornak minden területen, mint: adatbázis védelmi " +"mentések,\n" +"rendszer fájlok, távoli héj hozzáférések, fizikai szerver hozzáférések.\n" +"\n" +"Kölcsönhatás az LDAP azonosítással:\n" +"-------------------------------------\n" +"Ez a modul most még nem kompatibilis a ``user_ldap`` modullal és\n" +"ki fogja iktatni a LDAP azonosítást teljesen ha ugyanakkor telepítettek.\n" #. module: base #: view:ir.rule:0 @@ -16499,12 +16758,12 @@ msgstr "Valuta árfolyam" #: view:base.module.upgrade:0 #: field:base.module.upgrade,module_info:0 msgid "Modules to Update" -msgstr "" +msgstr "Frissítendő modulok" #. module: base #: model:ir.ui.menu,name:base.menu_custom_multicompany msgid "Multi-Companies" -msgstr "" +msgstr "Többszörös-vállalatok" #. module: base #: field:workflow,osv:0 @@ -16516,12 +16775,12 @@ msgstr "Erőforrás objektum" #. module: base #: model:ir.module.module,shortdesc:base.module_crm_helpdesk msgid "Helpdesk" -msgstr "" +msgstr "Ügyfélszolgálat" #. module: base #: field:ir.rule,perm_write:0 msgid "Apply for Write" -msgstr "" +msgstr "Íráshoz alkamaz" #. module: base #: model:ir.module.module,description:base.module_stock @@ -16569,6 +16828,11 @@ msgid "" "Web pages\n" " " msgstr "" +"\n" +"Oldalak\n" +"=====\n" +"Web oldalak\n" +" " #. module: base #: help:ir.actions.server,code:0 @@ -16576,6 +16840,8 @@ msgid "" "Python code to be executed if condition is met.\n" "It is a Python block that can use the same values as for the condition field" msgstr "" +"Python code to be executed if condition is met.\n" +"It is a Python block that can use the same values as for the condition field" #. module: base #: model:ir.actions.act_window,help:base.grant_menu_access diff --git a/openerp/addons/base/i18n/it.po b/openerp/addons/base/i18n/it.po index 9e891fe034f..69035022b92 100644 --- a/openerp/addons/base/i18n/it.po +++ b/openerp/addons/base/i18n/it.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-19 05:14+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:42+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: base diff --git a/openerp/addons/base/i18n/ro.po b/openerp/addons/base/i18n/ro.po index 00826fa3520..837d51ef1f6 100644 --- a/openerp/addons/base/i18n/ro.po +++ b/openerp/addons/base/i18n/ro.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.4\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-18 18:59+0000\n" +"PO-Revision-Date: 2012-12-19 19:34+0000\n" "Last-Translator: Fekete Mihai \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-19 05:14+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:42+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: base @@ -327,7 +327,7 @@ msgstr "creat(a)." #. module: base #: field:ir.actions.report.xml,report_xsl:0 msgid "XSL Path" -msgstr "" +msgstr "Ruta XSL" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_tr @@ -353,7 +353,7 @@ msgstr "Inuktitut / ᐃᓄᒃᑎᑐᑦ" #. module: base #: model:res.groups,name:base.group_multi_currency msgid "Multi Currencies" -msgstr "" +msgstr "Mzi multe valute" #. module: base #: model:ir.module.module,description:base.module_l10n_cl @@ -365,11 +365,17 @@ msgid "" "\n" " " msgstr "" +"\n" +"Localizarea planului contabil si fiscal chilian\n" +"==============================================\n" +"Plan contabil si fiscal chilian in conformitate cu dispozitiile in vigoare\n" +"\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_sale msgid "Sales Management" -msgstr "Gestiune vanzari" +msgstr "" #. module: base #: help:res.partner,user_id:0 @@ -377,6 +383,8 @@ msgid "" "The internal user that is in charge of communicating with this contact if " "any." msgstr "" +"Utilizatorul intern care este responsabil cu comunicarea cu acest contact, " +"daca exista." #. module: base #: view:res.partner:0 @@ -386,7 +394,7 @@ msgstr "Cauta Partener" #. module: base #: field:ir.module.category,module_nr:0 msgid "Number of Modules" -msgstr "Numar de module" +msgstr "Numar de Module" #. module: base #: help:multi_company.default,company_dest_id:0 @@ -411,6 +419,15 @@ msgid "" " * Commitment Date\n" " * Effective Date\n" msgstr "" +"\n" +"Adauga informatii suplimentare despre date la comanda de vanzare.\n" +"===================================================\n" +"\n" +"Puteti adauga urmatoarele date suplimentare la o comanda de vanzare:\n" +"-----------------------------------------------------------\n" +" * Data Solicitata\n" +" * Data Angajament\n" +" * Data Efectiva\n" #. module: base #: help:ir.actions.act_window,res_id:0 @@ -418,6 +435,8 @@ msgid "" "Database ID of record to open in form view, when ``view_mode`` is set to " "'form' only" msgstr "" +"ID baza de date a inregistrarii de deschis in vizualizare formular, atunci " +"cand ``modul_vizualizare`` este setat doar pe 'formular'" #. module: base #: field:res.partner.address,name:0 @@ -468,11 +487,18 @@ msgid "" "document and Wiki based Hidden.\n" " " msgstr "" +"\n" +"Programul de instalare Ascuns bazat pe cunostinte.\n" +"=====================================\n" +"\n" +"Face Configuratia Aplicatiei Cunostinte disponibila, de unde puteti instala\n" +"documente si Ascuns bazat pe Wiki.\n" +" " #. module: base #: model:ir.module.category,name:base.module_category_customer_relationship_management msgid "Customer Relationship Management" -msgstr "Gestionarea relatiilor cu clientii" +msgstr "Gestionarea Relatiilor cu Clientii" #. module: base #: model:ir.module.module,description:base.module_delivery @@ -486,6 +512,14 @@ msgid "" "invoices from picking, OpenERP is able to add and compute the shipping " "line.\n" msgstr "" +"\n" +"Va permite sa adaugati metode de livrare la comenzile de vanzare si " +"ridicare.\n" +"==============================================================\n" +"\n" +"Va puteti defini propriile grile de preturi pentru transport si livrare. " +"Atunci cand creati \n" +"facturi la ridicare, OpenERP poate adauga si calcula linia de transport.\n" #. module: base #: code:addons/base/ir/ir_filters.py:83 @@ -494,6 +528,8 @@ msgid "" "There is already a shared filter set as default for %(model)s, delete or " "change it before setting a new default" msgstr "" +"Exista deja un filtru comun setat ca default pentru %(model)s, stergeti-l " +"sau schimbati-l inainte de a seta unul nou." #. module: base #: code:addons/orm.py:2648 @@ -536,7 +572,7 @@ msgstr "Obiect Sursa" #. module: base #: model:res.partner.bank.type,format_layout:base.bank_normal msgid "%(bank_name)s: %(acc_number)s" -msgstr "%(bank_name)s: %(acc_number)s" +msgstr "%(nume_banca)s: %(numar_cont)s" #. module: base #: view:ir.actions.todo:0 @@ -591,12 +627,12 @@ msgstr "" #. module: base #: field:ir.model.relation,name:0 msgid "Relation Name" -msgstr "" +msgstr "Nume Relatie" #. module: base #: view:ir.rule:0 msgid "Create Access Right" -msgstr "" +msgstr "Creeaza Drept de acces" #. module: base #: model:res.country,name:base.tv @@ -636,7 +672,7 @@ msgstr "" #. module: base #: view:workflow.transition:0 msgid "Workflow Transition" -msgstr "" +msgstr "Tranzitie Flux de lucru" #. module: base #: model:res.country,name:base.gf @@ -646,7 +682,7 @@ msgstr "Guyana Franceza" #. module: base #: model:ir.module.module,summary:base.module_hr msgid "Jobs, Departments, Employees Details" -msgstr "" +msgstr "Posturi, Departamente, Detalii angajati" #. module: base #: model:ir.module.module,description:base.module_analytic @@ -662,6 +698,16 @@ msgid "" "that have no counterpart in the general financial accounts.\n" " " msgstr "" +"\n" +"Modul pentru definirea obiectului contabilitatii analitice.\n" +"===============================================\n" +"\n" +"In OpenERP, conturile analitice sunt legate de conturile generale, dar sunt " +"tratate\n" +"in mod total independent. Astfel, puteti introduce diverse operatiuni " +"analitice\n" +"care nu au niciun corespondent in conturile financiare generale.\n" +" " #. module: base #: field:ir.ui.view.custom,ref_id:0 @@ -685,6 +731,19 @@ msgid "" "* Use emails to automatically confirm and send acknowledgements for any " "event registration\n" msgstr "" +"\n" +"Organizarea si gestionarea Evenimentelor.\n" +"======================================\n" +"\n" +"Modulul eveniment va permite sa organizati eficient evenimente si toate " +"sarcinile asociate lor: planificare, urmarirea inregistrarii,\n" +"prezente, etc.\n" +"\n" +"Caracteristici cheie:\n" +"------------\n" +"* Gestioneaza Evenimentele si Inregistrarile dumneavoastra\n" +"* Foloseste email-urile pentru a confirma si trimite automat confirmarile " +"pentru inregistrarea oricarui eveniment\n" #. module: base #: selection:base.language.install,lang:0 @@ -710,6 +769,21 @@ msgid "" "requested it.\n" " " msgstr "" +"\n" +"Traduceri Automate prin Gengo API\n" +"----------------------------------------\n" +"\n" +"Acest modul va instala programatorul pasiv pentru traduceri automate \n" +"folosind Gengo API. Pentru a-l activa, trebuie sa\n" +"1) Va configurati parametrii de autentificare Gengo din `Setari > Companii > " +"Parametrii Gengo`\n" +"2) Lansati wizard-ul din `Setari > Termenii Aplicatiei > Gengo: Solicitare " +"Manuala a Traducerii` si sa urmeze wizard-ul.\n" +"\n" +"Acest wizard va activa CRON si Programatorul si va incepe traducerea " +"automata prin intermediul Serviciilor Gengo pentru toti termenii solicitati " +"de dumneavoastra.\n" +" " #. module: base #: help:ir.actions.report.xml,attachment_use:0 diff --git a/openerp/addons/base/i18n/zh_CN.po b/openerp/addons/base/i18n/zh_CN.po index b9890196ea5..755d9f27fb1 100644 --- a/openerp/addons/base/i18n/zh_CN.po +++ b/openerp/addons/base/i18n/zh_CN.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-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-06 18:17+0000\n" -"Last-Translator: ccdos \n" +"PO-Revision-Date: 2012-12-19 07:05+0000\n" +"Last-Translator: Wei \"oldrev\" Li \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-07 04:34+0000\n" -"X-Generator: Launchpad (build 16341)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:43+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -1517,7 +1517,7 @@ msgstr "海地" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_fr_hr_payroll msgid "French Payroll" -msgstr "" +msgstr "法国薪酬管理" #. module: base #: view:ir.ui.view:0 @@ -2871,6 +2871,9 @@ msgid "" "Module to attach a google document to any model.\n" "================================================\n" msgstr "" +"\n" +"用于附加 Google 文档到任意模型的模块。\n" +"================================================\n" #. module: base #: code:addons/base/ir/ir_fields.py:334 @@ -3118,7 +3121,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_web_linkedin msgid "LinkedIn Integration" -msgstr "" +msgstr "LinkedIn 集成" #. module: base #: code:addons/orm.py:2021 @@ -3301,6 +3304,10 @@ msgid "" "==========================================\n" " " msgstr "" +"\n" +"比利时薪酬规则的会计数据。\n" +"==========================================\n" +" " #. module: base #: model:res.country,name:base.am @@ -4002,6 +4009,17 @@ msgid "" "If you need to manage your meetings, you should install the CRM module.\n" " " msgstr "" +"\n" +"这是功能完整的日程表系统\n" +"========================================\n" +"\n" +"支持:\n" +"------------\n" +" - 约会排程\n" +" - 重复性事件\n" +"\n" +"如果您需要管理您的会议,您应该安装 CRM 模块。\n" +" " #. module: base #: model:res.country,name:base.je @@ -4039,7 +4057,7 @@ msgstr "%x - 使用日期表示" #. module: base #: view:res.partner:0 msgid "Tag" -msgstr "" +msgstr "标签" #. module: base #: view:res.lang:0 From 2315050bab19cd1ec7e087a6751c3ca96d6c34e6 Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Thu, 20 Dec 2012 04:59:47 +0000 Subject: [PATCH 35/36] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20121220044654-aygk0cmaxl26bs0f bzr revid: launchpad_translations_on_behalf_of_openerp-20121220045947-8j22pe4nm62kzq22 --- addons/account/i18n/de.po | 6 +- addons/account/i18n/es.po | 494 ++- addons/account/i18n/et.po | 34 +- addons/account/i18n/fr.po | 124 +- addons/account/i18n/nl_BE.po | 1020 +++-- addons/account/i18n/pl.po | 82 +- addons/account/i18n/zh_CN.po | 16 +- addons/account_analytic_analysis/i18n/fr.po | 42 +- .../account_analytic_analysis/i18n/pt_BR.po | 21 +- addons/account_analytic_plans/i18n/fr.po | 10 +- addons/account_asset/i18n/sl.po | 52 +- addons/account_budget/i18n/de.po | 25 +- addons/account_budget/i18n/fr.po | 28 +- addons/account_check_writing/i18n/fr.po | 21 +- addons/account_voucher/i18n/de.po | 23 +- addons/account_voucher/i18n/fr.po | 14 +- addons/account_voucher/i18n/nl_BE.po | 426 +- addons/anonymization/i18n/fr.po | 18 +- addons/anonymization/i18n/it.po | 9 +- addons/auth_oauth/i18n/de.po | 135 + addons/auth_signup/i18n/de.po | 268 ++ addons/base_action_rule/i18n/de.po | 24 +- addons/base_action_rule/i18n/it.po | 15 +- addons/base_gengo/i18n/de.po | 75 +- addons/base_import/i18n/de.po | 191 +- addons/base_import/i18n/es.po | 1311 ++++++ addons/base_import/i18n/fr.po | 2 +- addons/base_import/i18n/pl.po | 72 +- addons/base_import/i18n/zh_CN.po | 44 +- addons/base_report_designer/i18n/de.po | 31 +- addons/base_setup/i18n/de.po | 47 +- addons/base_setup/i18n/fr.po | 8 +- addons/base_vat/i18n/fr.po | 12 +- addons/board/i18n/de.po | 44 +- addons/claim_from_delivery/i18n/fr.po | 2 +- addons/contacts/i18n/fr.po | 2 +- addons/crm/i18n/de.po | 430 +- addons/crm/i18n/zh_CN.po | 206 +- addons/crm_claim/i18n/de.po | 95 +- addons/crm_claim/i18n/fr.po | 13 +- addons/crm_profiling/i18n/fr.po | 10 +- addons/crm_todo/i18n/fr.po | 12 +- addons/document/i18n/fr.po | 11 +- addons/document_page/i18n/fr.po | 2 +- addons/edi/i18n/fr.po | 2 +- addons/event/i18n/fr.po | 8 +- addons/event/i18n/it.po | 12 +- addons/event_sale/i18n/fr.po | 11 +- addons/fetchmail/i18n/fr.po | 6 +- addons/fleet/i18n/es.po | 648 +-- addons/fleet/i18n/fr.po | 15 +- addons/google_docs/i18n/fr.po | 230 + addons/hr/i18n/it.po | 18 +- addons/hr_evaluation/i18n/de.po | 8 +- addons/hr_expense/i18n/pl.po | 185 +- addons/hr_holidays/i18n/de.po | 8 +- addons/hr_holidays/i18n/it.po | 8 +- addons/hr_timesheet/i18n/zh_CN.po | 34 +- addons/hr_timesheet_invoice/i18n/fr.po | 15 +- addons/hr_timesheet_sheet/i18n/fr.po | 10 +- addons/l10n_be_invoice_bba/i18n/es.po | 8 +- addons/l10n_bo/i18n/es.po | 48 +- addons/l10n_in_hr_payroll/i18n/es.po | 14 +- addons/mail/i18n/et.po | 14 +- addons/membership/i18n/fr.po | 20 +- addons/mrp/i18n/sl.po | 64 +- addons/note_pad/i18n/pl.po | 28 + addons/pad/i18n/pl.po | 69 + addons/pad_project/i18n/pl.po | 38 + addons/plugin_outlook/i18n/de.po | 24 +- addons/point_of_sale/i18n/de.po | 58 +- addons/point_of_sale/i18n/es.po | 636 +-- addons/point_of_sale/i18n/pl.po | 251 +- addons/portal/i18n/it.po | 2 +- addons/procurement/i18n/et.po | 1069 +++++ addons/product/i18n/es.po | 22 +- addons/product/i18n/et.po | 32 +- addons/product/i18n/it.po | 124 +- addons/project/i18n/de.po | 96 +- addons/project/i18n/es_MX.po | 3776 ++++++++--------- addons/purchase/i18n/hr.po | 99 +- addons/sale/i18n/hr.po | 302 +- addons/sale_crm/i18n/hr.po | 34 +- addons/sale_crm/i18n/zh_CN.po | 16 +- addons/sale_journal/i18n/hr.po | 19 +- addons/sale_mrp/i18n/hr.po | 12 +- addons/sale_order_dates/i18n/hr.po | 12 +- addons/sale_stock/i18n/hr.po | 73 +- addons/stock/i18n/es.po | 8 +- addons/stock/i18n/et.po | 62 +- addons/survey/i18n/de.po | 137 +- addons/web/i18n/et.po | 29 +- addons/web/i18n/it.po | 8 +- addons/web_calendar/i18n/es_MX.po | 10 +- addons/web_graph/i18n/zh_CN.po | 12 +- 95 files changed, 9367 insertions(+), 4604 deletions(-) create mode 100644 addons/auth_oauth/i18n/de.po create mode 100644 addons/auth_signup/i18n/de.po create mode 100644 addons/base_import/i18n/es.po create mode 100644 addons/google_docs/i18n/fr.po create mode 100644 addons/note_pad/i18n/pl.po create mode 100644 addons/pad/i18n/pl.po create mode 100644 addons/pad_project/i18n/pl.po create mode 100644 addons/procurement/i18n/et.po diff --git a/addons/account/i18n/de.po b/addons/account/i18n/de.po index ea6e3db775a..70fd0b73bae 100644 --- a/addons/account/i18n/de.po +++ b/addons/account/i18n/de.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-03 16:02+0000\n" -"PO-Revision-Date: 2012-12-18 15:25+0000\n" +"PO-Revision-Date: 2012-12-19 23:16+0000\n" "Last-Translator: Thorsten Vocks (OpenBig.org) \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-19 05:16+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:45+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: account @@ -2524,7 +2524,7 @@ msgstr "Offene Rechnungen" #: model:ir.model,name:account.model_account_treasury_report #: model:ir.ui.menu,name:account.menu_action_account_treasury_report_all msgid "Treasury Analysis" -msgstr "Analyse Liquidität" +msgstr "Statistik Finanzmittel" #. module: account #: model:ir.actions.report.xml,name:account.account_journal_sale_purchase diff --git a/addons/account/i18n/es.po b/addons/account/i18n/es.po index eb59204e819..1dbeeb5b85f 100644 --- a/addons/account/i18n/es.po +++ b/addons/account/i18n/es.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-03 16:02+0000\n" -"PO-Revision-Date: 2012-12-18 18:34+0000\n" +"PO-Revision-Date: 2012-12-19 15:38+0000\n" "Last-Translator: Pedro Manuel Baeza \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-19 05:16+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:45+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 msgid "System payment" -msgstr "Sistema de pagos" +msgstr "Pago del sistema" #. module: account #: sql_constraint:account.fiscal.position.account:0 @@ -31,7 +31,7 @@ msgstr "" #. module: account #: view:account.unreconcile:0 msgid "Unreconciliate Transactions" -msgstr "Romper conciliación transacciones" +msgstr "Romper conciliación de transacciones" #. module: account #: help:account.tax.code,sequence:0 @@ -184,7 +184,7 @@ msgid "" "which is set after generating opening entries from 'Generate Opening " "Entries'." msgstr "" -"Tiene que establecer un diario para el asiento de cierre para este año " +"Tiene que establecer un diario para el asiento de cierre para este ejercicio " "fiscal, que se crea después de generar el asiento de apertura desde " "\"Generar asiento de apertura\"." @@ -290,13 +290,13 @@ msgid "" "entries." msgstr "" "El tipo de cuenta es usado con propósito informativo, para generar informes " -"legales específicos de cada país, y establecer las reglas para cerrar un año " -"fiscal y generar los apuntes de apertura." +"legales específicos de cada país, y establecer las reglas para cerrar un " +"ejercicio fiscal y generar los apuntes de apertura." #. module: account #: field:account.config.settings,sale_refund_sequence_next:0 msgid "Next credit note number" -msgstr "Número siguiente de nota de crédito" +msgstr "Número siguiente de factura rectificativa" #. module: account #: help:account.config.settings,module_account_voucher:0 @@ -780,7 +780,7 @@ msgstr "Rapport du compte commun partenaire" #. module: account #: field:account.fiscalyear.close,period_id:0 msgid "Opening Entries Period" -msgstr "Período asientos de apertura" +msgstr "Período para el asiento de apertura" #. module: account #: model:ir.model,name:account.model_account_journal_period @@ -1028,8 +1028,8 @@ msgid "" " opening/closing fiscal " "year process." msgstr "" -"No puede rompler conciliación de asientos si han sido generados por los " -"procesos de apertura/cierre del año." +"No puede romper la conciliación de los asientos si han sido generados por " +"los procesos de apertura/cierre del ejercicio fiscal." #. module: account #: model:ir.actions.act_window,name:account.action_subscription_form_new @@ -1238,7 +1238,7 @@ msgstr "Nombre cuenta." #. module: account #: field:account.journal,with_last_closing_balance:0 msgid "Opening With Last Closing Balance" -msgstr "Abriendo con el último balance de cierre" +msgstr "Apertura con el último saldo de cierre" #. module: account #: help:account.tax.code,notprintable:0 @@ -1592,7 +1592,7 @@ msgstr "Opciones del informe" #. module: account #: field:account.fiscalyear.close.state,fy_id:0 msgid "Fiscal Year to Close" -msgstr "Año fiscal a cerrar" +msgstr "Ejercicio fiscal a cerrar" #. module: account #: field:account.config.settings,sale_sequence_prefix:0 @@ -2203,7 +2203,7 @@ msgstr "Cuentas pendientes" #. module: account #: view:account.open.closed.fiscalyear:0 msgid "Cancel Fiscal Year Opening Entries" -msgstr "Cancelar asiento de apertura del año fiscal" +msgstr "Cancelar asiento de apertura del ejercicio fiscal" #. module: account #: report:account.journal.period.print.sale.purchase:0 @@ -2315,11 +2315,12 @@ msgid "" "the start and end of the month or quarter." msgstr "" "Este menú imprime una declaración de impuestos basadas en facturas o pagos. " -"Seleccione uno varios periodos del año fiscal. La información requerida para " -"una declaración de impuestos es generada automáticamente por OpenERP desde " -"las facturas (o pagos en algunos paises). Este dato se actualiza en tiempo " -"real. Esto es muy útil porque le permite previsualizar en cualquier comento " -"el impuesto que debe al principio o fin del mes o trimestre." +"Seleccione uno varios periodos del ejercicio fiscal. La información " +"requerida para una declaración de impuestos es generada automáticamente por " +"OpenERP desde las facturas (o pagos en algunos paises). Este dato se " +"actualiza en tiempo real. Esto es muy útil porque le permite previsualizar " +"en cualquier comento el impuesto que debe al principio o fin del mes o " +"trimestre." #. module: account #: code:addons/account/account.py:408 @@ -2459,6 +2460,17 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para registrar un extracto bancario.\n" +"

\n" +"Un extracto bancario es un resumen de todas las transacciones bancarias " +"ocurridas en un periodo de tiempo en una cuenta bancaria. Debería recibirlo " +"periódicamente de su banco.\n" +"

\n" +"OpenERP le permite conciliar una línea del extracto directamente con las " +"facturas de compra o venta relacionadas.\n" +"

\n" +" " #. module: account #: field:account.config.settings,currency_id:0 @@ -2647,8 +2659,8 @@ msgid "" "If you want the journal should be control at opening/closing, check this " "option" msgstr "" -"Si desea que el diario sea controlado en la apertura/cierre, haga click en " -"esta opción" +"Si desea que el diario sea controlado en la apertura/cierre, marque esta " +"opción" #. module: account #: view:account.bank.statement:0 @@ -2684,12 +2696,12 @@ msgstr "Codificación estándar" #: view:account.journal.select:0 #: view:project.account.analytic.line:0 msgid "Open Entries" -msgstr "Abrir asientos" +msgstr "Asiento de apertura" #. module: account #: field:account.config.settings,purchase_refund_sequence_next:0 msgid "Next supplier credit note number" -msgstr "Próximo número nota de crédito del proveedor" +msgstr "Próximo número de factura rectificativa del proveedor" #. module: account #: field:account.automatic.reconcile,account_ids:0 @@ -2999,7 +3011,7 @@ msgstr "Filtros" #: selection:account.period,state:0 #: selection:report.invoice.created,state:0 msgid "Open" -msgstr "Abierto" +msgstr "Abierto/a" #. module: account #: model:process.node,note:account.process_node_draftinvoices0 @@ -3099,7 +3111,7 @@ msgstr "COMPRA" #. module: account #: view:account.invoice.refund:0 msgid "Create Credit Note" -msgstr "Nuevo abono" +msgstr "Crear factura rectificativa" #. module: account #: field:product.template,supplier_taxes_id:0 @@ -3130,6 +3142,18 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para crear un asiento.\n" +"

\n" +"Un asiento consiste en varios apuntes, cada cual es una transacción de debe " +"o haber.\n" +"

\n" +"OpenERP crea automáticamente un asiento por cada documento contable: " +"factura, factura rectificativa, pago a proveedor, extractos bancarios, etc. " +"Por eso, sólo debería necesitar registrar manualmente asientos para " +"operaciones misceláneas.\n" +"

\n" +" " #. module: account #: help:account.invoice,date_due:0 @@ -3339,6 +3363,17 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para comenzar un nuevo ejercicio fiscal.\n" +"

\n" +"Defina el ejercicio fiscal para su compañía de acuerdo a sus necesidades. Un " +"ejercicio fiscal es un periodo al final del cual se realiza el balance " +"(normalmente 12 meses). Normalmente, el ejercicio fiscal se referencia por " +"la fecha en la que acaba. Por ejemplo, si el ejercicio fiscal de una empresa " +"acaba el 30 de noviembre de 2011, todo el periodo comprendido entre el 1 de " +"diciembre de 2010 y el 30 de noviembre de 2011 sería referido como EF 2011.\n" +"

\n" +" " #. module: account #: view:account.common.report:0 @@ -4011,7 +4046,7 @@ msgstr "Cerrar un periodo" #: view:account.bank.statement:0 #: field:account.cashbox.line,subtotal_opening:0 msgid "Opening Subtotal" -msgstr "Subtotal apertura" +msgstr "Subtotal de apertura" #. module: account #: constraint:account.move.line:0 @@ -4117,8 +4152,9 @@ msgid "" "by\n" " your supplier/customer." msgstr "" -"Podrá editar y validar esta nota de crédito directamente o mantenerla como " -"borrador, esperando a que el documento sea expedido por su cliente/proveedor." +"Podrá editar y validar esta factura rectificativa directamente o mantenerla " +"como borrador, esperando a que el documento sea expedido por su " +"cliente/proveedor." #. module: account #: view:validate.account.move.lines:0 @@ -4188,6 +4224,17 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para crear una factura a un cliente.\n" +"

\n" +"La facturación electrónica de OpenERP permite facilitar y acelerar el pago " +"de los clientes. Su cliente recibe la factura por correo electrónico y puede " +"pagarla en línea o importarla a su propio sistema.\n" +"

\n" +"Las discusiones con su cliente se muestran automáticamente al final de cada " +"factura.\n" +"

\n" +" " #. module: account #: field:account.tax.code,name:0 @@ -4303,7 +4350,7 @@ msgstr "Plan contable" #. module: account #: view:account.tax.chart:0 msgid "(If you do not select period it will take all open periods)" -msgstr "(si no selecciona periodo se usarán todos los periodos abiertos)" +msgstr "(Si no selecciona un periodo, se usarán todos los periodos abiertos)" #. module: account #: model:ir.model,name:account.model_account_journal_cashbox_line @@ -4319,7 +4366,7 @@ msgstr "Proceso conciliación empresa por empresa" #: view:account.chart:0 msgid "(If you do not select Fiscal year it will take all open fiscal years)" msgstr "" -"(Si no selecciona un ejercicio fiscal se tendrán en cuenta todos los " +"(Si no selecciona un ejercicio fiscal, se tendrán en cuenta todos los " "ejercicios fiscales)" #. module: account @@ -4492,7 +4539,7 @@ msgstr "Cuenta a pagar" #, python-format msgid "The periods to generate opening entries cannot be found." msgstr "" -"No se ha encontrado ningún periodo para generar los asientos de apertura." +"No se ha encontrado ningún periodo para generar el asiento de apertura." #. module: account #: model:process.node,name:account.process_node_supplierpaymentorder0 @@ -4586,8 +4633,8 @@ msgstr "Configurar sus cuentas bancarias" #: selection:account.invoice.refund,filter_refund:0 msgid "Modify: create credit note, reconcile and create a new draft invoice" msgstr "" -"Modicar: crear una nota de crédito, la concilia y crea un nueva factura en " -"borrador" +"Modificar: crea una factura rectificativa, la concilia y crea un nueva " +"factura en borrador" #. module: account #: xsl:account.transfer:0 @@ -4624,8 +4671,8 @@ msgid "" "The fiscalyear, periods or chart of account chosen have to belong to the " "same company." msgstr "" -"El año fiscal, periodos y árbol de cuentas escogido deben pertenecer a la " -"misma compañía." +"El ejercicio fiscal, periodos y árbol de cuentas escogido deben pertenecer a " +"la misma compañía." #. module: account #: help:account.tax.code.template,notprintable:0 @@ -4709,7 +4756,7 @@ msgstr "título" #. module: account #: selection:account.invoice.refund,filter_refund:0 msgid "Create a draft credit note" -msgstr "Crear una nota de crédito en borrador" +msgstr "Crear una factura rectificativa en borrador" #. module: account #: view:account.invoice:0 @@ -4888,6 +4935,16 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para configurar una nueva cuenta bancaria. \n" +"

\n" +"Configure las cuentas bancarias de su compañía y seleccione las que deben " +"aparecer al pie del informe. \n" +"

\n" +"Si usa la aplicación de contabilidad de OpenERP, los diarios y las cuentas " +"serán creadas automáticamente en base a esta información.\n" +"

\n" +" " #. module: account #: model:ir.model,name:account.model_account_invoice_cancel @@ -5174,7 +5231,7 @@ msgstr "Contabilidad. Seleccionar diario" #. module: account #: view:account.tax.template:0 msgid "Credit Notes" -msgstr "Abonos" +msgstr "Facturas rectificativas" #. module: account #: view:account.move.line:0 @@ -5804,7 +5861,7 @@ msgstr "" #: view:account.bank.statement:0 #: help:account.cashbox.line,number_opening:0 msgid "Opening Unit Numbers" -msgstr "" +msgstr "Números unitarios de apertura" #. module: account #: field:account.subscription,period_type:0 @@ -6561,7 +6618,7 @@ msgstr "Valoración" #: code:addons/account/report/account_partner_balance.py:301 #, python-format msgid "Receivable and Payable Accounts" -msgstr "Cuentas a cobrar y pagar" +msgstr "Cuentas a cobrar y a pagar" #. module: account #: field:account.fiscal.position.account.template,position_id:0 @@ -6635,6 +6692,16 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para añadir una cuenta.\n" +"

\n" +"Las cuentas son parte de un libro mayor que permiten a la empresa registrar " +"todos los tipos de transacciones de débito o crédito. Las compañías " +"presentan sus cuentas anuales en dos parte principales: el balance de " +"situación y la cuenta de pérdidas y ganancias. La ley exige presentar las " +"cuentas anuales de la compañía para revelar cierta cantidad de información.\n" +"

\n" +" " #. module: account #: view:account.invoice.report:0 @@ -6686,7 +6753,7 @@ msgstr "" #. module: account #: field:account.journal,loss_account_id:0 msgid "Loss Account" -msgstr "" +msgstr "Cuenta de pérdidas" #. module: account #: field:account.tax,account_collected_id:0 @@ -6709,6 +6776,11 @@ msgid "" "created by the system on document validation (invoices, bank statements...) " "and will be created in 'Posted' status." msgstr "" +"Todos los asientos creados manualmente suelen estar en el estado 'Sin " +"asentar', salvo cuando se establece la opción de saltar ese estado en el " +"diario relacionado. En ese caso, se comportarán como los asientos creados " +"automáticamente por el sistema en la validación de documentos (facturas, " +"extractos bancarios...) y serán creados en el estado 'Asentado'." #. module: account #: field:account.payment.term.line,days:0 @@ -6772,7 +6844,7 @@ msgstr "Compañía relacionada con este diario" #. module: account #: help:account.config.settings,group_multi_currency:0 msgid "Allows you multi currency environment" -msgstr "" +msgstr "Permite un entorno multi compañía" #. module: account #: view:account.subscription:0 @@ -6864,6 +6936,8 @@ msgid "" "You cannot cancel an invoice which is partially paid. You need to " "unreconcile related payment entries first." msgstr "" +"No puede cancelar una factura que está parcialmente pagada. Necesita romper " +"la conciliación del pago relacionado primero." #. module: account #: field:product.template,taxes_id:0 @@ -6898,6 +6972,14 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para registrar una factura rectificativa de proveedor.\n" +"

\n" +"En lugar de crear la factura rectificativa de proveedor manualmente, puede " +"generarla y conciliarla directamente desde la factura de proveedor " +"relacionada.\n" +"

\n" +" " #. module: account #: field:account.tax,type:0 @@ -7042,6 +7124,8 @@ msgstr "No puede crear asiento en una cuenta cerrada." #, python-format msgid "Invoice line account's company and invoice's compnay does not match." msgstr "" +"La compañía de la cuenta de la línea de factura no coincide con la compañía " +"de la factura." #. module: account #: view:account.invoice:0 @@ -7074,6 +7158,7 @@ msgstr "Actual" #, python-format msgid "Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining)." msgstr "" +"La factura '%s' se ha pago parcialmente: %s %s de %s %s (%s %s pendiente)." #. module: account #: field:account.journal,cashbox_line_ids:0 @@ -7096,6 +7181,8 @@ msgstr "Cuentas de transferencias internas" #, python-format msgid "Please check that the field 'Journal' is set on the Bank Statement" msgstr "" +"Compruebe por favor que el campo 'Diario' está establecido en el extracto " +"bancario" #. module: account #: selection:account.tax,type:0 @@ -7177,7 +7264,7 @@ msgid "" "There is no opening/closing period defined, please create one to set the " "initial balance." msgstr "" -"No hay periodo de apertura/cierra definido. Cree por uno para establecer el " +"No hay periodo de apertura/cierra definido. Cree uno para establecer el " "saldo inicial." #. module: account @@ -7378,6 +7465,8 @@ msgid "" "Percentages for Payment Term Line must be between 0 and 1, Example: 0.02 for " "2%." msgstr "" +"Los porcentajes para las líneas de plazo de pago deben estar entre 0 y 1. " +"Ejemplo: 0.02 para 2%." #. module: account #: report:account.invoice:0 @@ -7438,6 +7527,7 @@ msgid "" "You cannot provide a secondary currency if it is the same than the company " "one." msgstr "" +"No puede proveer una moneda secundaria si es la misma que la de principal." #. module: account #: code:addons/account/account_invoice.py:1321 @@ -7588,11 +7678,11 @@ msgid "" "reconcile in a series of accounts. It finds entries for each partner where " "the amounts correspond." msgstr "" -"Para que una factura se considere pagada, los apuntes contables de la " -"factura deben estar conciliados con sus contrapartidas, normalmente pagos. " -"Con la funcionalidad de reconciliación automática, OpenERP realiza su propia " -"búsqueda de apuntes a conciliar en una serie de cuentas. Encuentra los " -"apuntes, para cada empresa, cuando las cantidades se correspondan." +"Para que una factura se considere pagada, los apuntes contables de la mismas " +"deben estar conciliados con sus contrapartidas, normalmente pagos. Con la " +"funcionalidad de conciliación automática, OpenERP realiza su propia búsqueda " +"de apuntes a conciliar en una serie de cuentas. Encuentra los apuntes, para " +"cada empresa, cuando las cantidades se corresponden." #. module: account #: view:account.move:0 @@ -7731,6 +7821,7 @@ msgstr "Conjunto de impuestos completo" msgid "" "Selected Entry Lines does not have any account move enties in draft state." msgstr "" +"Los asientos seleccionados no tienen ningún apunte en estado borrador." #. module: account #: view:account.chart.template:0 @@ -7760,6 +7851,9 @@ msgid "" "Configuration error!\n" "The currency chosen should be shared by the default accounts too." msgstr "" +"¡Error de configuración!\n" +"La moneda escogida debería ser compartida también por las cuentas por " +"defecto." #. module: account #: code:addons/account/account.py:2251 @@ -7785,7 +7879,7 @@ msgstr "" #. module: account #: field:account.config.settings,module_account_voucher:0 msgid "Manage customer payments" -msgstr "" +msgstr "Gestionar pagos de cliente" #. module: account #: help:report.invoice.created,origin:0 @@ -7804,6 +7898,8 @@ msgid "" "Error!\n" "The start date of a fiscal year must precede its end date." msgstr "" +"¡Error!\n" +"La fecha de inicio de un ejercicio fiscal debe preceder a su fecha final." #. module: account #: view:account.tax.template:0 @@ -7819,7 +7915,7 @@ msgstr "Facturas de cliente" #. module: account #: view:account.tax:0 msgid "Misc" -msgstr "" +msgstr "Misc." #. module: account #: view:account.analytic.line:0 @@ -7842,6 +7938,9 @@ msgid "" "Make sure you have configured payment terms properly.\n" "The latest payment term line should be of the \"Balance\" type." msgstr "" +"No puede validar un asiento descuadrado.\n" +"Asegúrese que ha configurado los plazos de pago correctamente.\n" +"La última línea de plazo de pago debería ser del tipo \"Saldo\"." #. module: account #: model:process.transition,note:account.process_transition_invoicemanually0 @@ -7878,6 +7977,7 @@ msgstr "Documento origen" #, python-format msgid "There is no expense account defined for this product: \"%s\" (id:%d)." msgstr "" +"No hay cuenta de gastos definida para este producto: \"%s\" (id: %d)." #. module: account #: constraint:account.account:0 @@ -7886,6 +7986,8 @@ msgid "" "You cannot define children to an account with internal type different of " "\"View\"." msgstr "" +"¡Error de configuración!\n" +"No puede definir hijos de una cuenta con tipo interno diferente a \"Vista\"." #. module: account #: model:ir.model,name:account.model_accounting_report @@ -7895,7 +7997,7 @@ msgstr "Informe financiero" #. module: account #: field:account.analytic.line,currency_id:0 msgid "Account Currency" -msgstr "" +msgstr "Cuenta de la moneda" #. module: account #: report:account.invoice:0 @@ -7909,6 +8011,8 @@ msgid "" "You can not delete an invoice which is not cancelled. You should refund it " "instead." msgstr "" +"No puede eliminar una factura que no está cancelada. Debería abonarla " +"primero." #. module: account #: help:account.tax,amount:0 @@ -7945,12 +8049,12 @@ msgstr "Plantilla de impuestos" #. module: account #: view:account.journal.select:0 msgid "Are you sure you want to open Journal Entries?" -msgstr "¿Está seguro que quiere abrir los asientos?" +msgstr "¿Está seguro de que quiere abrir los asientos?" #. module: account #: view:account.state.open:0 msgid "Are you sure you want to open this invoice ?" -msgstr "¿Está seguro que desea abrir esta factura?" +msgstr "¿Está seguro de que desea abrir esta factura?" #. module: account #: field:account.chart.template,property_account_expense_opening:0 @@ -7960,7 +8064,7 @@ msgstr "Apuntes de apertura cuenta de gastos" #. module: account #: view:account.invoice:0 msgid "Customer Reference" -msgstr "" +msgstr "Referencia del cliente" #. module: account #: field:account.account.template,parent_id:0 @@ -7976,7 +8080,7 @@ msgstr "Precio" #: view:account.bank.statement:0 #: field:account.bank.statement,closing_details_ids:0 msgid "Closing Cashbox Lines" -msgstr "" +msgstr "Líneas de cierre de caja" #. module: account #: view:account.bank.statement:0 @@ -8017,7 +8121,7 @@ msgstr "Agrupado por año por fecha de factura" #. module: account #: field:account.config.settings,purchase_tax_rate:0 msgid "Purchase tax (%)" -msgstr "" +msgstr "Impuesto de compra (%)" #. module: account #: help:res.partner,credit:0 @@ -8032,7 +8136,7 @@ msgstr "Apuntes contables descuadrados" #. module: account #: model:ir.actions.act_window,name:account.open_account_charts_modules msgid "Chart Templates" -msgstr "" +msgstr "Plantillas de plan" #. module: account #: field:account.journal.period,icon:0 @@ -8078,12 +8182,12 @@ msgstr "Impuesto de compra por defecto" #. module: account #: field:account.chart.template,property_account_income_opening:0 msgid "Opening Entries Income Account" -msgstr "Apuntes de apertura cuenta de ingresos" +msgstr "Cuenta de ingresos del asiento de apertura" #. module: account #: field:account.config.settings,group_proforma_invoices:0 msgid "Allow pro-forma invoices" -msgstr "" +msgstr "Permitir facturas pro-forma" #. module: account #: view:account.bank.statement:0 @@ -8114,12 +8218,12 @@ msgstr "Crear asientos" #. module: account #: model:ir.model,name:account.model_cash_box_out msgid "cash.box.out" -msgstr "" +msgstr "Salida de caja" #. module: account #: help:account.config.settings,currency_id:0 msgid "Main currency of the company." -msgstr "" +msgstr "Moneda principal de la compañía." #. module: account #: model:ir.ui.menu,name:account.menu_finance_reports @@ -8147,7 +8251,7 @@ msgstr "Diario de contabilidad" #. module: account #: field:account.config.settings,tax_calculation_rounding_method:0 msgid "Tax calculation rounding method" -msgstr "" +msgstr "Método de redondeo del cálculo de impuestos" #. module: account #: model:process.node,name:account.process_node_paidinvoice0 @@ -8164,6 +8268,9 @@ msgid "" " with the invoice. You will not be able " "to modify the credit note." msgstr "" +"Use esta opción si quiere cancelar una factura que no debería haber emitido. " +"La factura rectificativa se creará, validará y conciliará con la factura. No " +"podrá modificar dicha factura rectificativa." #. module: account #: help:account.partner.reconcile.process,next_partner_id:0 @@ -8198,7 +8305,7 @@ msgstr "Usar modelo" msgid "" "There is no default credit account defined \n" "on journal \"%s\"." -msgstr "" +msgstr "No hay cuenta de ingresos por defecto definida en el diario \"%s\"." #. module: account #: view:account.invoice.line:0 @@ -8237,6 +8344,19 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para añadir una nueva cuenta analítica.\n" +"

\n" +"El plan de cuentas normal tiene una estructura definida por los requisitos " +"legales del país. La estructura del plan de cuentas analítico debería " +"reflejar sus propias necesidades de negocio en términos de informe de " +"gastos/ingresos.\n" +"

\n" +"Se estructuran habitualmente por contratos, proyectos, productos o " +"departamentos. La mayoría de operaciones de OpenERP (facturas, partes de " +"horas, gastos, etc) generan apuntes analíticos en la cuenta asociada.\n" +"

\n" +" " #. module: account #: model:account.account.type,name:account.data_account_type_view @@ -8361,6 +8481,8 @@ msgid "" "This date will be used as the invoice date for credit note and period will " "be chosen accordingly!" msgstr "" +"¡Se usará esta fecha como la fecha de factura para la factura rectificativa " +"y el periodo se escogerá de acuerdo a ella!" #. module: account #: view:product.template:0 @@ -8374,6 +8496,8 @@ msgid "" "You have to set a code for the bank account defined on the selected chart of " "accounts." msgstr "" +"Tiene que establecer un código para la cuenta bancaria definida en el plan " +"de cuentas seleccionado." #. module: account #: model:ir.ui.menu,name:account.menu_manual_reconcile @@ -8456,7 +8580,7 @@ msgstr "Código" #. module: account #: field:account.config.settings,sale_refund_sequence_prefix:0 msgid "Credit note sequence" -msgstr "" +msgstr "Secuena de las facturas rectificativas" #. module: account #: model:ir.actions.act_window,name:account.action_validate_account_move @@ -8470,7 +8594,7 @@ msgstr "Asentar asientos" #. module: account #: field:account.journal,centralisation:0 msgid "Centralised Counterpart" -msgstr "" +msgstr "Contrapartida centralizada" #. module: account #: selection:account.bank.statement.line,type:0 @@ -8526,7 +8650,7 @@ msgstr "Secuencia" #. module: account #: field:account.config.settings,paypal_account:0 msgid "Paypal account" -msgstr "" +msgstr "Cuenta de Paypal" #. module: account #: selection:account.print.journal,sort_selection:0 @@ -8545,11 +8669,13 @@ msgid "" "Error!\n" "You cannot create recursive accounts." msgstr "" +"¡Error!\n" +"No puede crear cuentas recursivas." #. module: account #: model:ir.model,name:account.model_cash_box_in msgid "cash.box.in" -msgstr "" +msgstr "Entrada de caja" #. module: account #: help:account.invoice,move_id:0 @@ -8559,7 +8685,7 @@ msgstr "Enlace a los asientos generados automáticamente." #. module: account #: model:ir.model,name:account.model_account_config_settings msgid "account.config.settings" -msgstr "" +msgstr "Parámetros de configuración contable" #. module: account #: selection:account.config.settings,period:0 @@ -8582,7 +8708,7 @@ msgstr "Balance calculado" #: code:addons/account/static/src/js/account_move_reconciliation.js:89 #, python-format msgid "You must choose at least one record." -msgstr "" +msgstr "Debe seleccionar al menos un registro." #. module: account #: field:account.account,parent_id:0 @@ -8594,7 +8720,7 @@ msgstr "Padre" #: code:addons/account/account_cash_statement.py:292 #, python-format msgid "Profit" -msgstr "" +msgstr "Beneficio" #. module: account #: help:account.payment.term.line,days2:0 @@ -8641,7 +8767,7 @@ msgstr "Línea de caja" #. module: account #: field:account.installer,charts:0 msgid "Accounting Package" -msgstr "" +msgstr "Paquete contable" #. module: account #: report:account.third_party_ledger:0 @@ -8656,7 +8782,7 @@ msgstr "Libro mayor de empresa" #: code:addons/account/account_invoice.py:1340 #, python-format msgid "%s cancelled." -msgstr "" +msgstr "%s cancelado." #. module: account #: code:addons/account/account.py:652 @@ -8670,12 +8796,12 @@ msgstr "¡Atención!" #: help:account.bank.statement,message_unread:0 #: help:account.invoice,message_unread:0 msgid "If checked new messages require your attention." -msgstr "" +msgstr "Si está marcado, hay nuevos mensajes que requieren su atención" #. module: account #: field:res.company,tax_calculation_rounding_method:0 msgid "Tax Calculation Rounding Method" -msgstr "" +msgstr "Método de redondeo del cálculo de impuestos" #. module: account #: field:account.entries.report,move_line_state:0 @@ -8796,6 +8922,8 @@ msgstr "Balance analítico invertido -" msgid "" "Is this reconciliation produced by the opening of a new fiscal year ?." msgstr "" +"¿Esta conciliación está producida por la apertura de un nuevo ejercicio " +"fiscal?" #. module: account #: view:account.analytic.line:0 @@ -8829,7 +8957,7 @@ msgstr "Total residual" #. module: account #: view:account.bank.statement:0 msgid "Opening Cash Control" -msgstr "" +msgstr "Control de apertura de caja" #. module: account #: model:process.node,note:account.process_node_invoiceinvoice0 @@ -8869,7 +8997,7 @@ msgstr "Costo contable" #. module: account #: view:account.config.settings:0 msgid "No Fiscal Year Defined for This Company" -msgstr "" +msgstr "No se ha definido ningún ejercicio fiscal para esta compañía" #. module: account #: view:account.invoice:0 @@ -8900,7 +9028,7 @@ msgstr "Diario de abono de compras" #: code:addons/account/account.py:1292 #, python-format msgid "Please define a sequence on the journal." -msgstr "" +msgstr "Defina por favor una secuencia en el diario." #. module: account #: help:account.tax.template,amount:0 @@ -8929,6 +9057,9 @@ msgid "" "recalls.\n" " This installs the module account_followup." msgstr "" +"Permite automatizar cartas para facturas impagadas, con recordatorios " +"multinivel.\n" +"Esto instala el módulo 'account_followup'." #. module: account #: field:account.automatic.reconcile,period_id:0 @@ -8973,12 +9104,12 @@ msgstr "Base:" #: code:addons/account/wizard/account_report_common.py:153 #, python-format msgid "Select a starting and an ending period." -msgstr "" +msgstr "Seleccione un periodo de inicio y de fin." #. module: account #: field:account.config.settings,sale_sequence_next:0 msgid "Next invoice number" -msgstr "" +msgstr "Próximo número de factura" #. module: account #: model:ir.ui.menu,name:account.menu_finance_generic_reporting @@ -9036,6 +9167,9 @@ msgid "" "This wizard will remove the end of year journal entries of selected fiscal " "year. Note that you can run this wizard many times for the same fiscal year." msgstr "" +"Este asistente eliminará los asientos de final de ejercicio del ejercicio " +"fiscal seleccionado. Tenga en cuenta que puede ejecutar este asistente " +"varias veces para el mismo ejercicio fiscal." #. module: account #: report:account.invoice:0 @@ -9118,6 +9252,9 @@ msgid "" "invoice will be created \n" " so that you can edit it." msgstr "" +"Use esta opción si desea cancelar esta factura y crear una nueva. Se creará " +"una factura rectificativa, se validará y se conciliará con la factura " +"actual. Se creará también una nueva factura borrador para que pueda editarla." #. module: account #: model:process.transition,name:account.process_transition_filestatement0 @@ -9128,7 +9265,7 @@ msgstr "Importación automática del extracto bancario" #: code:addons/account/account_invoice.py:370 #, python-format msgid "Unknown Error!" -msgstr "" +msgstr "¡Error desconocido!" #. module: account #: model:ir.model,name:account.model_account_move_bank_reconcile @@ -9138,7 +9275,7 @@ msgstr "Conciliar movimientos banco" #. module: account #: view:account.config.settings:0 msgid "Apply" -msgstr "" +msgstr "Aplicar" #. module: account #: field:account.financial.report,account_type_ids:0 @@ -9154,6 +9291,8 @@ msgid "" "You cannot use this general account in this journal, check the tab 'Entry " "Controls' on the related journal." msgstr "" +"No puede usar esta cuenta general en este diario. Compruebe la pestaña " +"'Controles de asiento' en el diario relacionado." #. module: account #: view:account.payment.term.line:0 @@ -9216,6 +9355,17 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para añadir un diario.\n" +"

\n" +"Los diarios son usados para registrar transacciones de todos los datos " +"contables relacionados con el negocio del día a día.\n" +"

\n" +"Una compañía típica puede usar un diario por método de pago (efectivo, " +"cuentas bancarias, cheques), un diario de compra, uno de ventas y uno para " +"información miscelánea.\n" +"

\n" +" " #. module: account #: model:ir.model,name:account.model_account_fiscalyear_close_state @@ -9347,6 +9497,9 @@ msgid "" "computed. Because it is space consuming, we do not allow to use it while " "doing a comparison." msgstr "" +"Esta opción permite obtener más detalles sobre la forma en la que se " +"calculan los saldos. Debido a que consume espacio, no se permite usarla " +"cuando se realiza una comparación." #. module: account #: model:ir.model,name:account.model_account_fiscalyear_close @@ -9363,6 +9516,7 @@ msgstr "¡El código de la cuenta debe ser único por compañía!" #: help:product.template,property_account_expense:0 msgid "This account will be used to value outgoing stock using cost price." msgstr "" +"Se usará esta cuenta para valorar el stock saliente usando precio de coste." #. module: account #: view:account.invoice:0 @@ -9400,7 +9554,7 @@ msgstr "Cuentas permitidas (vacío para ningún control)" #. module: account #: field:account.config.settings,sale_tax_rate:0 msgid "Sales tax (%)" -msgstr "" +msgstr "Impuesto de venta (%)" #. module: account #: model:ir.actions.act_window,name:account.action_account_analytic_account_tree2 @@ -9425,6 +9579,15 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para definir un asiento recurrente.\n" +"

\n" +"Un asiento recurrente ocurre en un plazo recurrente desde una fecha " +"específica, por ejemplo correspondiendo con la firma de un contrato con un " +"empleado, un cliente o un proveedor. Puede crear dichas entradas para " +"automatizar las entradas en el sistema.\n" +"

\n" +" " #. module: account #: view:account.journal:0 @@ -9466,6 +9629,8 @@ msgid "" "This allows you to check writing and printing.\n" " This installs the module account_check_writing." msgstr "" +"Permite escribir e imprimir cheques.\n" +"Esto instala el módulo 'account_check_writing'." #. module: account #: model:res.groups,name:account.group_account_invoice @@ -9505,7 +9670,7 @@ msgstr "" #: code:addons/account/account_move_line.py:996 #, python-format msgid "The account move (%s) for centralisation has been confirmed." -msgstr "" +msgstr "El apunte contable (%s) para centralización ha sido confirmado." #. module: account #: report:account.analytic.account.journal:0 @@ -9544,6 +9709,9 @@ msgid "" "created. If you leave that field empty, it will use the same journal as the " "current invoice." msgstr "" +"Puede seleccionar aquí el diario a usar para la factura rectificativa que " +"será creada. Si deja vacío este campo, se usará el mismo diario que el de la " +"moneda actual." #. module: account #: help:account.bank.statement.line,sequence:0 @@ -9575,7 +9743,7 @@ msgstr "¡Modelo erroneo!" #: view:account.tax.code.template:0 #: view:account.tax.template:0 msgid "Tax Template" -msgstr "" +msgstr "Plantilla de impuesto" #. module: account #: field:account.invoice.refund,period:0 @@ -9595,6 +9763,8 @@ msgid "" "some non legal fields or you must unreconcile first.\n" "%s." msgstr "" +"No puede realizar modificaciones en un asiento conciliado. Puede cambiar " +"algunos campos no legales o debe romper la conciliación primero. %s." #. module: account #: help:account.financial.report,sign:0 @@ -9641,7 +9811,7 @@ msgstr "Facturas borrador son comprobadas, validadas e impresas." #: field:account.bank.statement,message_is_follower:0 #: field:account.invoice,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "Es un seguidor" #. module: account #: view:account.move:0 @@ -9657,11 +9827,14 @@ msgid "" "You cannot select an account type with a deferral method different of " "\"Unreconciled\" for accounts with internal type \"Payable/Receivable\"." msgstr "" +"¡Error de configuración!\n" +"No puede seleccionar un tipo de cuenta con un método de cierre diferente de " +"\"No conciliado\" para cuentas con tipo interno \"A pagar/A cobrar\"." #. module: account #: field:account.config.settings,has_fiscal_year:0 msgid "Company has a fiscal year" -msgstr "" +msgstr "La compañía tiene un ejercicio fiscal" #. module: account #: help:account.tax,child_depend:0 @@ -9677,7 +9850,7 @@ msgstr "" #: code:addons/account/account.py:633 #, python-format msgid "You cannot deactivate an account that contains journal items." -msgstr "" +msgstr "No puede desactivar una cuenta que contiene apuntes." #. module: account #: selection:account.tax,applicable_type:0 @@ -9733,7 +9906,7 @@ msgstr "Período desde" #. module: account #: field:account.cashbox.line,pieces:0 msgid "Unit of Currency" -msgstr "" +msgstr "Unidad de moneda" #. module: account #: code:addons/account/account.py:3137 @@ -9756,6 +9929,9 @@ msgid "" "chart\n" " of accounts." msgstr "" +"Una vez que las facturas se confirman, no podrá modificarlas. Las facturas " +"reciben un número único y se crearán unos apuntes en el diario " +"correspondiente." #. module: account #: model:process.node,note:account.process_node_bankstatement0 @@ -9770,7 +9946,7 @@ msgstr "Cerrar estados de ejercicio fiscal y periodos" #. module: account #: field:account.config.settings,purchase_refund_journal_id:0 msgid "Purchase refund journal" -msgstr "" +msgstr "Diario de facturas rectificativas de compras" #. module: account #: view:account.analytic.line:0 @@ -9794,7 +9970,7 @@ msgstr "Crear factura" #. module: account #: model:ir.actions.act_window,name:account.action_account_configuration_installer msgid "Configure Accounting Data" -msgstr "" +msgstr "Configurar datos de contabilidad" #. module: account #: field:wizard.multi.charts.accounts,purchase_tax_rate:0 @@ -9814,6 +9990,8 @@ msgid "" "Please check that the field 'Internal Transfers Account' is set on the " "payment method '%s'." msgstr "" +"Compruebe por favor que el campo 'Cuenta de transferencias internas' está " +"establecido en el método de pago '%s'." #. module: account #: field:account.vat.declaration,display_detail:0 @@ -9854,6 +10032,16 @@ msgid "" "related journal entries may or may not be reconciled. \n" "* The 'Cancelled' status is used when user cancel invoice." msgstr "" +" * El estado 'Borrador' se usa cuando un usuario está introduciendo una " +"nueva factura no confirmada.\n" +"* El estado 'Pro-forma' ocurre cuando la factura se pasa a pro-forma. La " +"factura no tiene un número de factura.\n" +"* El estado 'Abierta' se usa cuando el usuario crea la factura y la " +"confirma. Se genera un número de factura y su estado permanecerá así hasta " +"que el usuario pague la factura.\n" +"* El estado 'Pagada' se establece automáticamente cuando se paga la factura. " +"Sus correspondientes asientos pueden o no estar conciliados.\n" +"* El estado 'Cancelada' se usa cuando el usuario cancela la factura." #. module: account #: field:account.period,date_stop:0 @@ -9873,7 +10061,7 @@ msgstr "Informes financieros" #. module: account #: model:account.account.type,name:account.account_type_liability_view1 msgid "Liability View" -msgstr "" +msgstr "Vista de pasivos" #. module: account #: report:account.account.balance:0 @@ -9921,7 +10109,7 @@ msgstr "Compañías que se refieren a la empresa" #. module: account #: view:account.invoice:0 msgid "Ask Refund" -msgstr "" +msgstr "Pedir reembolso" #. module: account #: view:account.move.line:0 @@ -9962,12 +10150,12 @@ msgstr "Cuentas a cobrar" #. module: account #: field:account.config.settings,purchase_refund_sequence_prefix:0 msgid "Supplier credit note sequence" -msgstr "" +msgstr "Secuencia de factura rectificativa de proveedor" #. module: account #: field:account.config.settings,purchase_sequence_next:0 msgid "Next supplier invoice number" -msgstr "" +msgstr "Siguiente número de factura de proveedor" #. module: account #: help:account.config.settings,module_account_payment:0 @@ -9979,6 +10167,11 @@ msgid "" "payments.\n" " This installs the module account_payment." msgstr "" +"Permite crear y gestionar sus órdenes de pago, con estos propósitos:\n" +"* servir como base para conectores de múltiples mecanismo de pagos " +"automáticos, y\n" +"* proveer una forma eficiente de gestionar los pagos de las facturas.\n" +"Esto instala el módulo 'account_payment'." #. module: account #: xsl:account.transfer:0 @@ -9997,6 +10190,8 @@ msgstr "Extractos bancarios" #, python-format msgid "To reconcile the entries company should be the same for all entries." msgstr "" +"Para conciliar los apuntes, la compañía debe ser la misma para todos los " +"apuntes." #. module: account #: field:account.account,balance:0 @@ -10074,7 +10269,7 @@ msgstr "Filtros por" #: field:account.cashbox.line,number_closing:0 #: field:account.cashbox.line,number_opening:0 msgid "Number of Units" -msgstr "" +msgstr "Número de unidades" #. module: account #: model:process.node,note:account.process_node_manually0 @@ -10099,12 +10294,12 @@ msgstr "Asiento" #: code:addons/account/wizard/account_period_close.py:51 #, python-format msgid "Invalid Action!" -msgstr "" +msgstr "¡Acción no válida!" #. module: account #: view:account.bank.statement:0 msgid "Date / Period" -msgstr "" +msgstr "Fecha / Periodo" #. module: account #: report:account.central.journal:0 @@ -10123,11 +10318,14 @@ msgid "" "The period is invalid. Either some periods are overlapping or the period's " "dates are not matching the scope of the fiscal year." msgstr "" +"¡Error!\n" +"El periodo no es válido. O bien algunos periodos se solapan o las fechas de " +"los periodos no entran dentro del alcance del ejercicio fiscal." #. module: account #: report:account.overdue:0 msgid "There is nothing due with this customer." -msgstr "" +msgstr "No haya nada pendiente con este cliente." #. module: account #: help:account.tax,account_paid_id:0 @@ -10135,6 +10333,8 @@ msgid "" "Set the account that will be set by default on invoice tax lines for " "refunds. Leave empty to use the expense account." msgstr "" +"Establece la cuenta por defecto en las líneas de impuesto para las facturas " +"rectificativas. Déjelo vacío para usar la cuenta de gastos." #. module: account #: help:account.addtmpl.wizard,cparent_id:0 @@ -10146,7 +10346,7 @@ msgstr "" #. module: account #: report:account.invoice:0 msgid "Source" -msgstr "" +msgstr "Origen" #. module: account #: selection:account.model.line,date_maturity:0 @@ -10169,11 +10369,13 @@ msgid "" "This field contains the information related to the numbering of the journal " "entries of this journal." msgstr "" +"Este campo contiene información relativa a la numeración de los asientos de " +"este diario." #. module: account #: field:account.invoice,sent:0 msgid "Sent" -msgstr "" +msgstr "Enviado" #. module: account #: view:account.unreconcile.reconcile:0 @@ -10189,7 +10391,7 @@ msgstr "Informe común" #: field:account.config.settings,default_sale_tax:0 #: field:account.config.settings,sale_tax:0 msgid "Default sale tax" -msgstr "" +msgstr "Impuesto de venta por defecto" #. module: account #: report:account.overdue:0 @@ -10200,7 +10402,7 @@ msgstr "Saldo :" #: code:addons/account/account.py:1542 #, python-format msgid "Cannot create moves for different companies." -msgstr "" +msgstr "No se pueden crear apuntes de compañías diferentes." #. module: account #: view:account.invoice.report:0 @@ -10244,6 +10446,8 @@ msgid "" "Credit note base on this type. You can not Modify and Cancel if the invoice " "is already reconciled" msgstr "" +"Factura rectificativa basada en este tipo. No puede realizar las operaciones " +"de modificar o cancelar si la factura ya ha sido conciliada." #. module: account #: report:account.account.balance:0 @@ -10276,7 +10480,7 @@ msgstr "Periodo final" #. module: account #: model:account.account.type,name:account.account_type_expense_view1 msgid "Expense View" -msgstr "" +msgstr "Vista de gastos" #. module: account #: field:account.move.line,date_maturity:0 @@ -10287,7 +10491,7 @@ msgstr "Fecha vencimiento" #: code:addons/account/account.py:1459 #, python-format msgid " Centralisation" -msgstr "" +msgstr " Centralización" #. module: account #: help:account.journal,type:0 @@ -10303,7 +10507,7 @@ msgstr "" "para diarios que se usan para pagos de clientes y proveedores. Seleccione " "'General' para diarios que contienen operaciones varias. Seleccione 'Balance " "apertura/cierre' para diarios que contendrán asientos creados en el nuevo " -"año fiscal." +"ejercicio fiscal." #. module: account #: view:account.subscription:0 @@ -10371,7 +10575,7 @@ msgstr "Facturas borrador" #: view:cash.box.in:0 #: model:ir.actions.act_window,name:account.action_cash_box_in msgid "Put Money In" -msgstr "" +msgstr "Poner dinero" #. module: account #: selection:account.account.type,close_method:0 @@ -10432,7 +10636,7 @@ msgstr "Desde cuentas analíticas" #. module: account #: view:account.installer:0 msgid "Configure your Fiscal Year" -msgstr "" +msgstr "Configurar su ejercicio fiscal" #. module: account #: field:account.period,name:0 @@ -10446,6 +10650,8 @@ msgid "" "Selected invoice(s) cannot be cancelled as they are already in 'Cancelled' " "or 'Done' state." msgstr "" +"No se pueden cancelar la(s) factura(s) seleccionada(s) puesto que ya están " +"en estado 'Cancelada' o 'Realizada'." #. module: account #: report:account.analytic.account.quantity_cost_ledger:0 @@ -10480,6 +10686,8 @@ msgid "" "some non legal fields or you must unconfirm the journal entry first.\n" "%s." msgstr "" +"No puede realizar esta modificación en un asiento confirmado. Sólo puede " +"cambiar algunos campos no legales o debe cancelar el asiento primero. %s." #. module: account #: help:account.config.settings,module_account_budget:0 @@ -10490,6 +10698,11 @@ msgid "" "analytic account.\n" " This installs the module account_budget." msgstr "" +"Permite a los contables administrar presupuestos analíticos y cruzados.\n" +"Una vez que se definen el presupuesto maestro y los presupuestos, los " +"gestores de proyecto pueden establecer una cantidad planeada en cada cuenta " +"analítica.\n" +"Esto instala el módulo 'account_budget'." #. module: account #: help:res.partner,property_account_payable:0 @@ -10544,12 +10757,12 @@ msgstr "Haber" #. module: account #: view:account.invoice:0 msgid "Draft Invoice " -msgstr "" +msgstr "Factura borrador " #. module: account #: selection:account.invoice.refund,filter_refund:0 msgid "Cancel: create credit note and reconcile" -msgstr "" +msgstr "Cancelar: crea un factura rectificativa y la concilia" #. module: account #: model:ir.ui.menu,name:account.menu_account_general_journal @@ -10565,7 +10778,7 @@ msgstr "Modelo de asiento" #: code:addons/account/account.py:1058 #, python-format msgid "Start period should precede then end period." -msgstr "" +msgstr "El periodo de inicio debe preceder al periodo final." #. module: account #: field:account.invoice,number:0 @@ -10650,7 +10863,7 @@ msgstr "Beneficio (pérdida) para informe" #: code:addons/account/account_invoice.py:368 #, python-format msgid "There is no Sale/Purchase Journal(s) defined." -msgstr "" +msgstr "No hay diario(s) de Ventas/Compras definido(s)." #. module: account #: view:account.move.line.reconcile.select:0 @@ -10728,7 +10941,7 @@ msgstr "Tipo interno" #. module: account #: field:account.subscription.generate,date:0 msgid "Generate Entries Before" -msgstr "" +msgstr "Generar asientos antes" #. module: account #: model:ir.actions.act_window,name:account.action_subscription_form_running @@ -10828,6 +11041,8 @@ msgstr "Estados" #: help:product.template,property_account_income:0 msgid "This account will be used to value outgoing stock using sale price." msgstr "" +"Se usará esta cuenta para valorar el stock saliente usando el precio de " +"venta." #. module: account #: field:account.invoice,check_total:0 @@ -10850,12 +11065,12 @@ msgstr "Total" #: code:addons/account/wizard/account_invoice_refund.py:109 #, python-format msgid "Cannot %s draft/proforma/cancel invoice." -msgstr "" +msgstr "No se puede %s una factura borrador/pro-forma/cancelada." #. module: account #: field:account.tax,account_analytic_paid_id:0 msgid "Refund Tax Analytic Account" -msgstr "" +msgstr "Cuenta analítica para impuestos reembolsados" #. module: account #: view:account.move.bank.reconcile:0 @@ -10922,7 +11137,7 @@ msgstr "Fecha vencimiento" #: field:cash.box.in,name:0 #: field:cash.box.out,name:0 msgid "Reason" -msgstr "" +msgstr "Motivo" #. module: account #: selection:account.partner.ledger,filter:0 @@ -10979,7 +11194,7 @@ msgstr "¿Cuentas vacías? " #: code:addons/account/account_move_line.py:1046 #, python-format msgid "Unable to change tax!" -msgstr "" +msgstr "¡No se ha podido cambiar el impuesto!" #. module: account #: constraint:account.bank.statement:0 @@ -11009,6 +11224,10 @@ msgid "" "customer. The tool search can also be used to personalise your Invoices " "reports and so, match this analysis to your needs." msgstr "" +"Desde este informa, puede tener una vista general de la cantidad facturada a " +"su cliente. La herramienta de búsqueda también puede ser usada para " +"personalizar los informes de facturas y, de esa forma, casar este análisis " +"con sus necesidades." #. module: account #: view:account.partner.reconcile.process:0 @@ -11029,7 +11248,7 @@ msgstr "El estado de la factura es Realizada" #. module: account #: field:account.config.settings,module_account_followup:0 msgid "Manage customer payment follow-ups" -msgstr "" +msgstr "Gestionar seguimientos de pagos de clientes" #. module: account #: model:ir.model,name:account.model_report_account_sales @@ -11105,7 +11324,7 @@ msgstr "Cuentas a cobrar" #: code:addons/account/account_move_line.py:776 #, python-format msgid "Already reconciled." -msgstr "" +msgstr "Ya conciliado." #. module: account #: selection:account.model.line,date_maturity:0 @@ -11181,6 +11400,7 @@ msgstr "Agrupar por mes en fecha factura" #, python-format msgid "There is no income account defined for this product: \"%s\" (id:%d)." msgstr "" +"No hay cuenta de ingresos definida para este producto: \"%s\" (id: %d)." #. module: account #: model:ir.actions.act_window,name:account.action_aged_receivable_graph @@ -11244,6 +11464,8 @@ msgid "" "The selected unit of measure is not compatible with the unit of measure of " "the product." msgstr "" +"La unidad de medida seleccionada no es compatible con la unidad de medida " +"del producto." #. module: account #: view:account.fiscal.position:0 @@ -11267,6 +11489,15 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para definir un nuevo código de impuesto.\n" +"

\n" +"Dependiendo del país, un código de impuesto es habitualmente una celda a " +"rellenar en la declaración de impuestos. OpenERP permite definir una " +"estructura jerárquica de impuestos y cada cálculo de impuesto será " +"registrado en un o más códigos de impuestos.\n" +"

\n" +" " #. module: account #: selection:account.entries.report,month:0 @@ -11293,6 +11524,16 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Seleccione el periodo y el diario que quiere rellenar.\n" +"

\n" +"Los contables pueden usar esta vista para registrar asientos rápidamente en " +"OpenERP. Si quiere registrar una factura de proveedor, comience grabando la " +"línea de la cuenta de gastos. OpenERP le propondrá automáticamente el " +"impuesto relacionado con esta cuenta y su contrapartida de cuenta \"a " +"pagar\".\n" +"

\n" +" " #. module: account #: help:account.invoice.line,account_id:0 @@ -11303,7 +11544,7 @@ msgstr "" #. module: account #: view:account.config.settings:0 msgid "Install more chart templates" -msgstr "" +msgstr "Instalar más plantillas de cuentas" #. module: account #: report:account.general.journal:0 @@ -11351,6 +11592,8 @@ msgid "" "You cannot remove/deactivate an account which is set on a customer or " "supplier." msgstr "" +"No puede eliminar/desactivar una cuenta que está establecida en un cliente o " +"proveedor." #. module: account #: model:ir.model,name:account.model_validate_account_move_lines @@ -11362,6 +11605,7 @@ msgstr "Contabilidad. Validar líneas movimiento" msgid "" "The fiscal position will determine taxes and accounts used for the partner." msgstr "" +"La posición fiscal determinará los impuestos y cuentas usados por la empresa." #. module: account #: model:process.node,note:account.process_node_supplierpaidinvoice0 @@ -11378,7 +11622,7 @@ msgstr "" #: code:addons/account/wizard/account_change_currency.py:59 #, python-format msgid "New currency is not configured properly." -msgstr "" +msgstr "La nueva moneda no está configurada correctamente." #. module: account #: view:account.account.template:0 @@ -11394,7 +11638,7 @@ msgstr "Impuestos factura manual" #: code:addons/account/account_invoice.py:538 #, python-format msgid "The payment term of supplier does not have a payment term line." -msgstr "" +msgstr "El plazo de pago del proveedor no tiene ninguna línea de plazo." #. module: account #: field:account.account,parent_right:0 @@ -11407,7 +11651,7 @@ msgstr "Padre derecho" #: code:addons/account/static/src/js/account_move_reconciliation.js:80 #, python-format msgid "Never" -msgstr "" +msgstr "Nunca" #. module: account #: model:ir.model,name:account.model_account_addtmpl_wizard @@ -11428,7 +11672,7 @@ msgstr "De empresas" #. module: account #: field:account.account,note:0 msgid "Internal Notes" -msgstr "" +msgstr "Notas internas" #. module: account #: model:ir.actions.act_window,name:account.action_account_fiscalyear @@ -11461,7 +11705,7 @@ msgstr "Modelo de asiento" #: code:addons/account/account_cash_statement.py:292 #, python-format msgid "Loss" -msgstr "" +msgstr "Pérdidas" #. module: account #: selection:account.entries.report,month:0 @@ -11487,7 +11731,7 @@ msgstr "" #: view:account.bank.statement:0 #: help:account.cashbox.line,number_closing:0 msgid "Closing Unit Numbers" -msgstr "" +msgstr "Números de unidades de cierre" #. module: account #: field:account.bank.accounts.wizard,bank_account_id:0 @@ -11553,7 +11797,7 @@ msgstr "" #. module: account #: selection:account.config.settings,tax_calculation_rounding_method:0 msgid "Round per line" -msgstr "" +msgstr "Redondear por línea" #. module: account #: help:account.move.line,amount_residual_currency:0 diff --git a/addons/account/i18n/et.po b/addons/account/i18n/et.po index 76677a38f0e..1bfe2ea27ec 100644 --- a/addons/account/i18n/et.po +++ b/addons/account/i18n/et.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-03 16:02+0000\n" -"PO-Revision-Date: 2012-05-10 17:33+0000\n" -"Last-Translator: Raphael Collet (OpenERP) \n" +"PO-Revision-Date: 2012-12-19 19:59+0000\n" +"Last-Translator: Ahti Hinnov \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-04 05:21+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:44+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -1775,7 +1775,7 @@ msgstr "" #. module: account #: field:account.config.settings,group_analytic_accounting:0 msgid "Analytic accounting" -msgstr "" +msgstr "Analüütiline raamatupidamine" #. module: account #: report:account.overdue:0 @@ -1946,6 +1946,8 @@ msgid "" "Select a configuration package to setup automatically your\n" " taxes and chart of accounts." msgstr "" +"Vali raamatupidamise pakett, et automaatselt seadistada\n" +" maksud ja kontoplaan." #. module: account #: view:account.analytic.account:0 @@ -2139,7 +2141,7 @@ msgstr "" #. module: account #: sql_constraint:account.move.line:0 msgid "Wrong credit or debit value in accounting entry !" -msgstr "Vale kreedit või deebeti raamatupidamise sisend !" +msgstr "" #. module: account #: view:account.invoice.report:0 @@ -2298,7 +2300,7 @@ msgstr "Maksu definitsioon" #: view:account.config.settings:0 #: model:ir.actions.act_window,name:account.action_account_config msgid "Configure Accounting" -msgstr "" +msgstr "Seadista raamatupidamine" #. module: account #: field:account.invoice.report,uom_name:0 @@ -2493,7 +2495,7 @@ msgstr "" #. module: account #: report:account.invoice:0 msgid "Customer Code" -msgstr "" +msgstr "Kliendi kood" #. module: account #: view:account.account.type:0 @@ -5850,7 +5852,7 @@ msgstr "Analüütilised kontod" #. module: account #: view:account.invoice.report:0 msgid "Customer Invoices And Refunds" -msgstr "" +msgstr "Müügiarved ja hüvitised" #. module: account #: field:account.analytic.line,amount_currency:0 @@ -6388,7 +6390,7 @@ msgstr "" #. module: account #: field:product.template,taxes_id:0 msgid "Customer Taxes" -msgstr "Kliendi maksud" +msgstr "Müügimaksud" #. module: account #: help:account.model,name:0 @@ -6577,7 +6579,7 @@ msgstr "" #: code:addons/account/installer.py:48 #, python-format msgid "Custom" -msgstr "" +msgstr "Kohandatud" #. module: account #: view:account.analytic.account:0 @@ -6939,7 +6941,7 @@ msgstr "" #: code:addons/account/account_invoice.py:1321 #, python-format msgid "Customer invoice" -msgstr "" +msgstr "Müügiarve" #. module: account #: selection:account.account.type,report_type:0 @@ -7289,7 +7291,7 @@ msgstr "" #: model:ir.actions.act_window,name:account.action_invoice_tree1 #: model:ir.ui.menu,name:account.menu_action_invoice_tree1 msgid "Customer Invoices" -msgstr "Kliendi arved" +msgstr "Müügiarved" #. module: account #: view:account.tax:0 @@ -7428,7 +7430,7 @@ msgstr "" #. module: account #: view:account.invoice:0 msgid "Customer Reference" -msgstr "" +msgstr "Kliendi viide" #. module: account #: field:account.account.template,parent_id:0 @@ -8085,7 +8087,7 @@ msgstr "" #. module: account #: field:account.installer,charts:0 msgid "Accounting Package" -msgstr "" +msgstr "Raamatupidamise pakett" #. module: account #: report:account.third_party_ledger:0 @@ -9199,7 +9201,7 @@ msgstr "Loo arve" #. module: account #: model:ir.actions.act_window,name:account.action_account_configuration_installer msgid "Configure Accounting Data" -msgstr "" +msgstr "Seadista raamatupidamise andmed" #. module: account #: field:wizard.multi.charts.accounts,purchase_tax_rate:0 diff --git a/addons/account/i18n/fr.po b/addons/account/i18n/fr.po index 828bcaeaa92..7642fa1a8ad 100644 --- a/addons/account/i18n/fr.po +++ b/addons/account/i18n/fr.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-03 16:02+0000\n" -"PO-Revision-Date: 2012-12-18 18:03+0000\n" -"Last-Translator: Pierre Lamarche (www.savoirfairelinux.com) " -"\n" +"PO-Revision-Date: 2012-12-19 15:40+0000\n" +"Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) " +"\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-19 05:16+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:44+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: account @@ -152,7 +152,7 @@ msgstr "Importer depuis une facture ou un règlement" #: code:addons/account/account_move_line.py:1198 #, python-format msgid "Bad Account!" -msgstr "" +msgstr "Mauvais compte!" #. module: account #: view:account.move:0 @@ -175,6 +175,8 @@ msgid "" "Error!\n" "You cannot create recursive account templates." msgstr "" +"Erreur!\n" +"Vous ne pouvez pas créer de modèles de compte récursifs." #. module: account #. openerp-web @@ -265,6 +267,14 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Cliquez pour ajouter une période fiscale.\n" +"

\n" +" Une période comptable couvre habituellement un mois,\n" +" ou un trimestre. Elle coïncide souvent avec les échéances\n" +" des déclarations de taxes.\n" +"

\n" +" " #. module: account #: model:ir.actions.act_window,name:account.action_view_created_invoice_dashboard @@ -279,7 +289,7 @@ msgstr "Titre de colonne" #. module: account #: help:account.config.settings,code_digits:0 msgid "No. of digits to use for account code" -msgstr "" +msgstr "Nombre de chiffres à utiliser pour le code des comptes" #. module: account #: help:account.analytic.journal,type:0 @@ -332,7 +342,7 @@ msgstr "Rapports belges" #. module: account #: model:account.account.type,name:account.account_type_income_view1 msgid "Income View" -msgstr "" +msgstr "Vue des revenus" #. module: account #: help:account.account,user_type:0 @@ -349,7 +359,7 @@ msgstr "" #. module: account #: field:account.config.settings,sale_refund_sequence_next:0 msgid "Next credit note number" -msgstr "" +msgstr "Prochain numéro d'avoir" #. module: account #: help:account.config.settings,module_account_voucher:0 @@ -389,6 +399,17 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Cliquez pour ajouter un remboursement à un client.\n" +"

\n" +" Un remboursement est un document qui crédite une facture\n" +" complètement ou partiellement.\n" +"

\n" +" Au lieu de créer manuellement un remboursement client, vous\n" +" pouvez le générer directement depuis la facture client\n" +" correspondante.\n" +"

\n" +" " #. module: account #: help:account.installer,charts:0 @@ -408,7 +429,7 @@ msgstr "Annuler le lettrage" #. module: account #: field:account.config.settings,module_account_budget:0 msgid "Budget management" -msgstr "" +msgstr "Gestion du budget" #. module: account #: view:product.template:0 @@ -429,7 +450,7 @@ msgstr "" #. module: account #: field:account.config.settings,group_multi_currency:0 msgid "Allow multi currencies" -msgstr "" +msgstr "Autoriser devises multiples" #. module: account #: code:addons/account/account_invoice.py:73 @@ -450,12 +471,12 @@ msgstr "Juin" #: code:addons/account/wizard/account_automatic_reconcile.py:148 #, python-format msgid "You must select accounts to reconcile." -msgstr "" +msgstr "Vous devez sélectionner les comptes à réconcilier." #. module: account #: help:account.config.settings,group_analytic_accounting:0 msgid "Allows you to use the analytic accounting." -msgstr "" +msgstr "Vous permet d'utiliser la comptabilité analytique" #. module: account #: view:account.invoice:0 @@ -529,7 +550,7 @@ msgstr "" #: code:addons/account/static/src/xml/account_move_line_quickadd.xml:8 #, python-format msgid "Period :" -msgstr "" +msgstr "Période:" #. module: account #: field:account.account.template,chart_template_id:0 @@ -565,7 +586,7 @@ msgstr "Le montant exprimé dans une autre devise optionelle." #. module: account #: view:account.journal:0 msgid "Available Coins" -msgstr "" +msgstr "Monnaie disponible" #. module: account #: field:accounting.report,enable_filter:0 @@ -618,7 +639,7 @@ msgstr "Cible parent" #. module: account #: help:account.invoice.line,sequence:0 msgid "Gives the sequence of this line when displaying the invoice." -msgstr "" +msgstr "Donne la séquence de cette ligne lors de l'affichage de la facture" #. module: account #: field:account.bank.statement,account_id:0 @@ -687,12 +708,12 @@ msgstr "Le comptable confirme le relevé." #: code:addons/account/static/src/xml/account_move_reconciliation.xml:31 #, python-format msgid "Nothing to reconcile" -msgstr "" +msgstr "Rien à réconcilier" #. module: account #: field:account.config.settings,decimal_precision:0 msgid "Decimal precision on journal entries" -msgstr "" +msgstr "Précision décimale pour les entrées de journal" #. module: account #: selection:account.config.settings,period:0 @@ -750,12 +771,12 @@ msgstr "" #: code:addons/account/wizard/account_change_currency.py:70 #, python-format msgid "Current currency is not configured properly." -msgstr "" +msgstr "La devise actuelle n'est pas configurée correctement" #. module: account #: field:account.journal,profit_account_id:0 msgid "Profit Account" -msgstr "" +msgstr "Compte de résultat" #. module: account #: code:addons/account/account_move_line.py:1144 @@ -1339,7 +1360,7 @@ msgstr "Début de période" #. module: account #: view:account.tax:0 msgid "Refunds" -msgstr "" +msgstr "Remboursements" #. module: account #: model:process.transition,name:account.process_transition_confirmstatementfromdraft0 @@ -1629,7 +1650,7 @@ msgstr "Compte client" #: code:addons/account/account.py:767 #, python-format msgid "%s (copy)" -msgstr "" +msgstr "%s (copie)" #. module: account #: selection:account.balance.report,display_account:0 @@ -6621,7 +6642,7 @@ msgstr "" #. module: account #: field:product.template,taxes_id:0 msgid "Customer Taxes" -msgstr "Taxes a la vente" +msgstr "Taxes à la vente" #. module: account #: help:account.model,name:0 @@ -9720,7 +9741,7 @@ msgstr "" #. module: account #: field:account.config.settings,purchase_sequence_next:0 msgid "Next supplier invoice number" -msgstr "" +msgstr "Prochain numéro de facture fournisseur" #. module: account #: help:account.config.settings,module_account_payment:0 @@ -9828,7 +9849,7 @@ msgstr "Filtrés par" #: field:account.cashbox.line,number_closing:0 #: field:account.cashbox.line,number_opening:0 msgid "Number of Units" -msgstr "" +msgstr "Nombre d'unités" #. module: account #: model:process.node,note:account.process_node_manually0 @@ -9853,12 +9874,12 @@ msgstr "N° d'écriture" #: code:addons/account/wizard/account_period_close.py:51 #, python-format msgid "Invalid Action!" -msgstr "" +msgstr "Action invalide!" #. module: account #: view:account.bank.statement:0 msgid "Date / Period" -msgstr "" +msgstr "Date / Période" #. module: account #: report:account.central.journal:0 @@ -9899,7 +9920,7 @@ msgstr "Crée un compte avec le modèle sélectionné sous le parent existant." #. module: account #: report:account.invoice:0 msgid "Source" -msgstr "" +msgstr "Origine" #. module: account #: selection:account.model.line,date_maturity:0 @@ -9916,7 +9937,7 @@ msgstr "" #. module: account #: field:account.invoice,sent:0 msgid "Sent" -msgstr "" +msgstr "Envoyé" #. module: account #: view:account.unreconcile.reconcile:0 @@ -9932,7 +9953,7 @@ msgstr "Rapport" #: field:account.config.settings,default_sale_tax:0 #: field:account.config.settings,sale_tax:0 msgid "Default sale tax" -msgstr "" +msgstr "Taxe de vente par défaut" #. module: account #: report:account.overdue:0 @@ -10019,7 +10040,7 @@ msgstr "Période de fin" #. module: account #: model:account.account.type,name:account.account_type_expense_view1 msgid "Expense View" -msgstr "" +msgstr "Vue des dépenses" #. module: account #: field:account.move.line,date_maturity:0 @@ -10114,7 +10135,7 @@ msgstr "Factures en brouillon" #: view:cash.box.in:0 #: model:ir.actions.act_window,name:account.action_cash_box_in msgid "Put Money In" -msgstr "" +msgstr "Faire une entrée de liquidité" #. module: account #: selection:account.account.type,close_method:0 @@ -10175,7 +10196,7 @@ msgstr "Depuis les comptes analytiques" #. module: account #: view:account.installer:0 msgid "Configure your Fiscal Year" -msgstr "" +msgstr "Paramétrer votre année fiscale" #. module: account #: field:account.period,name:0 @@ -10189,6 +10210,8 @@ msgid "" "Selected invoice(s) cannot be cancelled as they are already in 'Cancelled' " "or 'Done' state." msgstr "" +"La/Les facture(s) sélectionnée(s) ne peuvent être annulée(s) car elle sont " +"déjà dans un état 'Annulée' ou 'Terminée'." #. module: account #: report:account.analytic.account.quantity_cost_ledger:0 @@ -10223,6 +10246,10 @@ msgid "" "some non legal fields or you must unconfirm the journal entry first.\n" "%s." msgstr "" +"Vous ne pouvez pas appliquer cette modification sur un élément confirmé. " +"Vous pouvez uniquement changer les champs non légaux, ou alors vous devez " +"préalablement annuler la confirmation de cette entrée de journal.\n" +"%s" #. module: account #: help:account.config.settings,module_account_budget:0 @@ -10285,7 +10312,7 @@ msgstr "Crédit" #. module: account #: view:account.invoice:0 msgid "Draft Invoice " -msgstr "" +msgstr "Facture brouillon " #. module: account #: selection:account.invoice.refund,filter_refund:0 @@ -10306,7 +10333,7 @@ msgstr "Modèle de pièce comptable" #: code:addons/account/account.py:1058 #, python-format msgid "Start period should precede then end period." -msgstr "" +msgstr "La période de début doit précéder la période de fin." #. module: account #: field:account.invoice,number:0 @@ -10391,7 +10418,7 @@ msgstr "Bénéfice (perte) à reporter" #: code:addons/account/account_invoice.py:368 #, python-format msgid "There is no Sale/Purchase Journal(s) defined." -msgstr "" +msgstr "Il n'y a pas de journal(s) de vente ou d'achat de défini." #. module: account #: view:account.move.line.reconcile.select:0 @@ -10592,7 +10619,7 @@ msgstr "Total" #: code:addons/account/wizard/account_invoice_refund.py:109 #, python-format msgid "Cannot %s draft/proforma/cancel invoice." -msgstr "" +msgstr "Impossible de %s une facture brouillon/proforma/annulée" #. module: account #: field:account.tax,account_analytic_paid_id:0 @@ -10664,7 +10691,7 @@ msgstr "Date d'échéance" #: field:cash.box.in,name:0 #: field:cash.box.out,name:0 msgid "Reason" -msgstr "" +msgstr "Motif" #. module: account #: selection:account.partner.ledger,filter:0 @@ -10722,7 +10749,7 @@ msgstr "Comptes vides ? " #: code:addons/account/account_move_line.py:1046 #, python-format msgid "Unable to change tax!" -msgstr "" +msgstr "Impossible de changer la taxe!" #. module: account #: constraint:account.bank.statement:0 @@ -10751,6 +10778,9 @@ msgid "" "customer. The tool search can also be used to personalise your Invoices " "reports and so, match this analysis to your needs." msgstr "" +"À partir de ce rapport, vous avez un aperçu du montant facturé à votre " +"client. L'outil de recherche peut aussi être utilisé pour personnaliser " +"l'analyse des factures, et ainsi mieux correspondre à votre besoin." #. module: account #: view:account.partner.reconcile.process:0 @@ -10847,7 +10877,7 @@ msgstr "Compte client" #: code:addons/account/account_move_line.py:776 #, python-format msgid "Already reconciled." -msgstr "" +msgstr "Déjà lettré." #. module: account #: selection:account.model.line,date_maturity:0 @@ -11047,7 +11077,7 @@ msgstr "Le compte de revenu ou de dépense associé à l'article sélectionné." #. module: account #: view:account.config.settings:0 msgid "Install more chart templates" -msgstr "" +msgstr "Ajouter plus de modèles de plan comptable" #. module: account #: report:account.general.journal:0 @@ -11095,6 +11125,8 @@ msgid "" "You cannot remove/deactivate an account which is set on a customer or " "supplier." msgstr "" +"Vous ne pouvez pas supprimer/désactiver un compte qui est associé à un " +"client ou à un fournisseur." #. module: account #: model:ir.model,name:account.model_validate_account_move_lines @@ -11106,6 +11138,8 @@ msgstr "Valider les lignes d'écriture" msgid "" "The fiscal position will determine taxes and accounts used for the partner." msgstr "" +"La position fiscale déterminera les taxes et les comptes comptables utilisés " +"par le partneraire" #. module: account #: model:process.node,note:account.process_node_supplierpaidinvoice0 @@ -11121,7 +11155,7 @@ msgstr "Dés que le rapprochement est réalisé, la facture peut être payée." #: code:addons/account/wizard/account_change_currency.py:59 #, python-format msgid "New currency is not configured properly." -msgstr "" +msgstr "La nouvelle devise n'est pas configurée correctement." #. module: account #: view:account.account.template:0 @@ -11150,7 +11184,7 @@ msgstr "Parent Droit" #: code:addons/account/static/src/js/account_move_reconciliation.js:80 #, python-format msgid "Never" -msgstr "" +msgstr "Jamais" #. module: account #: model:ir.model,name:account.model_account_addtmpl_wizard @@ -11171,7 +11205,7 @@ msgstr "Du partenaire" #. module: account #: field:account.account,note:0 msgid "Internal Notes" -msgstr "" +msgstr "Notes internes" #. module: account #: model:ir.actions.act_window,name:account.action_account_fiscalyear @@ -11204,7 +11238,7 @@ msgstr "Modèle de Compte" #: code:addons/account/account_cash_statement.py:292 #, python-format msgid "Loss" -msgstr "" +msgstr "Pertes" #. module: account #: selection:account.entries.report,month:0 @@ -11295,7 +11329,7 @@ msgstr "" #. module: account #: selection:account.config.settings,tax_calculation_rounding_method:0 msgid "Round per line" -msgstr "" +msgstr "Arrondir par ligne" #. module: account #: help:account.move.line,amount_residual_currency:0 diff --git a/addons/account/i18n/nl_BE.po b/addons/account/i18n/nl_BE.po index ba34f6600ea..4daebc9fb17 100644 --- a/addons/account/i18n/nl_BE.po +++ b/addons/account/i18n/nl_BE.po @@ -1,20 +1,21 @@ # Translation of OpenERP Server. # This file contains the translation of the following modules: -# * account -# +# * account +# Els Van Vossel , 2012. msgid "" msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:02+0000\n" -"PO-Revision-Date: 2012-07-27 12:48+0000\n" +"PO-Revision-Date: 2012-12-19 18:03+0000\n" "Last-Translator: Els Van Vossel (Agaplan) \n" -"Language-Team: \n" +"Language-Team: Els Van Vossel\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-04 05:28+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:45+0000\n" +"X-Generator: Launchpad (build 16378)\n" +"Language: nl\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -26,6 +27,8 @@ msgstr "Betalingen" msgid "" "An account fiscal position could be defined only once time on same accounts." msgstr "" +"Een fiscale positie voor rekening kan maar een keer voor dezelfde rekeningen " +"worden ingesteld." #. module: account #: view:account.unreconcile:0 @@ -85,7 +88,7 @@ msgstr "Importeren van factuur of betaling" #: code:addons/account/account_move_line.py:1198 #, python-format msgid "Bad Account!" -msgstr "" +msgstr "Verkeerde rekening" #. module: account #: view:account.move:0 @@ -107,7 +110,7 @@ msgstr "" msgid "" "Error!\n" "You cannot create recursive account templates." -msgstr "" +msgstr "U kunt niet dezelfde rekeningsjablonen maken." #. module: account #. openerp-web @@ -180,6 +183,8 @@ msgid "" "which is set after generating opening entries from 'Generate Opening " "Entries'." msgstr "" +"U moet het journaal voor afsluitingsboekingen maken voor dit boekjaar, dat " +"wordt ingesteld via 'Openingsboekingen genereren'." #. module: account #: field:account.fiscal.position.account,account_src_id:0 @@ -198,6 +203,15 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klik om een boekingsperiode toe te voegen.\n" +"

\n" +" Een boekingsperiode beslaat typisch gezien een maand of een " +"kwartaal.\n" +" Doorgaans is de periode gelijk aan de frequentie van de btw-" +"aangifte.\n" +"

\n" +" " #. module: account #: model:ir.actions.act_window,name:account.action_view_created_invoice_dashboard @@ -212,7 +226,7 @@ msgstr "Kolomkop" #. module: account #: help:account.config.settings,code_digits:0 msgid "No. of digits to use for account code" -msgstr "" +msgstr "Aantal cijfers voor de rekeningcode" #. module: account #: help:account.analytic.journal,type:0 @@ -232,6 +246,9 @@ msgid "" "lines for invoices. Leave empty if you don't want to use an analytic account " "on the invoice tax lines by default." msgstr "" +"Kies de analytische rekening die standaard wordt gebruikt voor de btw-lijnen " +"op factuur. Laat dit veld leeg als u geen standaard analytische rekening " +"wilt op de btw-lijnen van facturen." #. module: account #: model:ir.actions.act_window,name:account.action_account_tax_template_form @@ -262,7 +279,7 @@ msgstr "Belgische rapporten" #. module: account #: model:account.account.type,name:account.account_type_income_view1 msgid "Income View" -msgstr "" +msgstr "Opbrengstenweergave" #. module: account #: help:account.account,user_type:0 @@ -278,7 +295,7 @@ msgstr "" #. module: account #: field:account.config.settings,sale_refund_sequence_next:0 msgid "Next credit note number" -msgstr "" +msgstr "Volgende creditnotanummer" #. module: account #: help:account.config.settings,module_account_voucher:0 @@ -287,6 +304,9 @@ msgid "" "sales, purchase, expense, contra, etc.\n" " This installs the module account_voucher." msgstr "" +"Dit bevat alle basiseisen voor boekingen op bank, kassa, verkoop, aankoop, " +"onkosten, tegenboekingen, enz.\n" +" Hiermee wordt de module account_voucher geïnstalleerd." #. module: account #: model:ir.actions.act_window,name:account.action_account_use_model_create_entry @@ -318,6 +338,18 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klik als u een verkoopcreditnota wilt maken. \n" +"

\n" +" Een creditnota is een document dat een factuur geheel of " +"gedeeltelijk\n" +" crediteert.\n" +"

\n" +" Naast een manuele creditnota, kunt u een creditnota " +"automatisch\n" +" laten maken van de verkoopfactuur.\n" +"

\n" +" " #. module: account #: help:account.installer,charts:0 @@ -336,7 +368,7 @@ msgstr "Afpuntingen ongedaan maken" #. module: account #: field:account.config.settings,module_account_budget:0 msgid "Budget management" -msgstr "" +msgstr "Budgetbeheer" #. module: account #: view:product.template:0 @@ -357,7 +389,7 @@ msgstr "" #. module: account #: field:account.config.settings,group_multi_currency:0 msgid "Allow multi currencies" -msgstr "" +msgstr "Werken met meerdere munten" #. module: account #: code:addons/account/account_invoice.py:73 @@ -378,12 +410,12 @@ msgstr "Juni" #: code:addons/account/wizard/account_automatic_reconcile.py:148 #, python-format msgid "You must select accounts to reconcile." -msgstr "" +msgstr "U moet af te punten rekeningen kiezen." #. module: account #: help:account.config.settings,group_analytic_accounting:0 msgid "Allows you to use the analytic accounting." -msgstr "" +msgstr "Hiermee kunt u analytisch boeken." #. module: account #: view:account.invoice:0 @@ -391,7 +423,7 @@ msgstr "" #: view:account.invoice.report:0 #: field:account.invoice.report,user_id:0 msgid "Salesperson" -msgstr "" +msgstr "Verkoper" #. module: account #: model:ir.model,name:account.model_account_tax_template @@ -451,6 +483,13 @@ msgid "" "this box, you will be able to do invoicing & payments,\n" " but not accounting (Journal Items, Chart of Accounts, ...)" msgstr "" +"Hiermee kunt u de investeringen van een bedrijf of een persoon opvolgen.\n" +" De afschrijvingen worden bijgehouden en de overeenkomende " +"boekingen worden gemaakt.\n" +" Hiermee wordt de module account_asset geïnstalleerd. Als u " +"dit vakje niet inschakelt, kunt u facturen maken en betalingen uitvoeren,\n" +" maar geen effectieve boekhouding voeren (boekingen, " +"boekhoudplan, ...)" #. module: account #. openerp-web @@ -479,6 +518,14 @@ msgid "" "should choose 'Round per line' because you certainly want the sum of your " "tax-included line subtotals to be equal to the total amount with taxes." msgstr "" +"Als u kiest voor 'Afronden per lijn': voor elke btw-lijn wordt eerst de btw " +"berekend en vervolgens afgerond per AO/VO/factuurlijn. Dan worden de " +"afgeronde bedragen opgeteld om tot het totaalbedrag voor de btw te komen. " +"Als u 'Globaal afronden' kiest: voor elke btw-lijn wordt eerst de btw " +"berekend. De bedragen worden opgeteld en vervolgens wordt het totale btw-" +"bedrag afgerond. Als u btw-inclusief verkoopt, kiest u voor 'Afronden per " +"lijn', omdat u wilt dat de som van uw subtotalen inclusief btw gelijk is aan " +"het totaalbedrag inclusief btw." #. module: account #: model:ir.model,name:account.model_wizard_multi_charts_accounts @@ -493,7 +540,7 @@ msgstr "Het bedrag uitgedrukt in een optionele andere munt." #. module: account #: view:account.journal:0 msgid "Available Coins" -msgstr "" +msgstr "Beschikbare muntjes" #. module: account #: field:accounting.report,enable_filter:0 @@ -546,7 +593,7 @@ msgstr "Hoofddoel" #. module: account #: help:account.invoice.line,sequence:0 msgid "Gives the sequence of this line when displaying the invoice." -msgstr "" +msgstr "Toont het volgnummer van deze lijn bij het weergeven van de factuur." #. module: account #: field:account.bank.statement,account_id:0 @@ -615,12 +662,12 @@ msgstr "De boekhouder bevestigt het uittreksel." #: code:addons/account/static/src/xml/account_move_reconciliation.xml:31 #, python-format msgid "Nothing to reconcile" -msgstr "" +msgstr "Niets af te punten" #. module: account #: field:account.config.settings,decimal_precision:0 msgid "Decimal precision on journal entries" -msgstr "" +msgstr "Decimale precisie voor boekingen" #. module: account #: selection:account.config.settings,period:0 @@ -640,7 +687,7 @@ msgstr "" #. module: account #: field:ir.sequence,fiscal_ids:0 msgid "Sequences" -msgstr "Volgorden" +msgstr "Reeksen" #. module: account #: field:account.financial.report,account_report_id:0 @@ -654,7 +701,7 @@ msgstr "Rapportwaarde" msgid "" "Specified journal does not have any account move entries in draft state for " "this period." -msgstr "" +msgstr "Dit journaal heeft geen voorlopige boekingen in deze periode." #. module: account #: view:account.fiscal.position:0 @@ -677,12 +724,12 @@ msgstr "Hoofdvolgorde mag niet gelijk zijn aan de huidige volgorde." #: code:addons/account/wizard/account_change_currency.py:70 #, python-format msgid "Current currency is not configured properly." -msgstr "" +msgstr "Huidige munt is niet juist ingesteld" #. module: account #: field:account.journal,profit_account_id:0 msgid "Profit Account" -msgstr "" +msgstr "Opbrengstenrekening" #. module: account #: code:addons/account/account_move_line.py:1144 @@ -706,7 +753,7 @@ msgstr "VK" #: code:addons/account/account.py:1546 #, python-format msgid "Cannot create move with currency different from .." -msgstr "" +msgstr "Kan geen boeking maken met een munt verschillend van .." #. module: account #: model:email.template,report_name:account.email_template_edi_invoice @@ -714,6 +761,8 @@ msgid "" "Invoice_${(object.number or '').replace('/','_')}_${object.state == 'draft' " "and 'draft' or ''}" msgstr "" +"Factuur_${(object.number or '').replace('/','_')}_${object.state == 'draft' " +"and 'draft' or ''}" #. module: account #: view:account.period:0 @@ -741,6 +790,8 @@ msgstr "Journaalperiode" msgid "" "You cannot create more than one move per period on a centralized journal." msgstr "" +"U kunt niet meer dan een beweging maken per periode in een " +"centralisatiedagboek." #. module: account #: help:account.tax,account_analytic_paid_id:0 @@ -749,6 +800,9 @@ msgid "" "lines for refunds. Leave empty if you don't want to use an analytic account " "on the invoice tax lines by default." msgstr "" +"Kies de analytische rekening die standaard wordt gebruikt voor de btw-lijnen " +"op creditnota's. Laat dit veld leeg als u geen standaard analytische " +"rekening wilt op de btw-lijnen van creditnota's." #. module: account #: view:account.account:0 @@ -764,7 +818,7 @@ msgstr "Klanten" #. module: account #: view:account.config.settings:0 msgid "Configure your company bank accounts" -msgstr "" +msgstr "Stel de bankrekeningen van uw bedrijf in" #. module: account #: constraint:account.move.line:0 @@ -802,6 +856,8 @@ msgid "" "Cannot %s invoice which is already reconciled, invoice should be " "unreconciled first. You can only refund this invoice." msgstr "" +"Kan afgepunte factuur niet %s. De afpunting moet eerst worden ongedaan " +"gemaakt. U kunt deze factuur enkel crediteren." #. module: account #: selection:account.financial.report,display_detail:0 @@ -880,7 +936,7 @@ msgstr "Aankoopfacturen en -creditnota's" #: code:addons/account/account_move_line.py:847 #, python-format msgid "Entry is already reconciled." -msgstr "" +msgstr "De boeking is al afgepunt." #. module: account #: view:account.move.line.unreconcile.select:0 @@ -904,7 +960,7 @@ msgstr "Analytische journalen" #. module: account #: view:account.invoice:0 msgid "Send by Email" -msgstr "" +msgstr "Verzenden via e-mail" #. module: account #: help:account.central.journal,amount_currency:0 @@ -914,7 +970,7 @@ msgstr "" msgid "" "Print Report with the currency column if the currency differs from the " "company currency." -msgstr "" +msgstr "Rapport met munt afdrukken als de munt verschilt van de firmamunt." #. module: account #: report:account.analytic.account.quantity_cost_ledger:0 @@ -924,12 +980,12 @@ msgstr "J.C. / Naam beweging" #. module: account #: view:account.account:0 msgid "Account Code and Name" -msgstr "" +msgstr "Rekeningcode en -naam" #. module: account #: model:mail.message.subtype,name:account.mt_invoice_new msgid "created" -msgstr "" +msgstr "gemaakt" #. module: account #: selection:account.entries.report,month:0 @@ -960,6 +1016,10 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Geen boekingen gevonden.\n" +"

\n" +" " #. module: account #: code:addons/account/account.py:1632 @@ -1005,7 +1065,7 @@ msgstr "Vervallen" #. module: account #: field:account.config.settings,purchase_journal_id:0 msgid "Purchase journal" -msgstr "" +msgstr "Aankoopjournaal" #. module: account #: code:addons/account/account.py:1316 @@ -1014,6 +1074,8 @@ msgid "" "You cannot validate this journal entry because account \"%s\" does not " "belong to chart of accounts \"%s\"." msgstr "" +"U kunt deze boeking niet valideren omdat \"%s\" niet tot het boekhoudplan " +"\"%s\" behoort." #. module: account #: view:validate.account.move:0 @@ -1032,6 +1094,7 @@ msgstr "Totaalbedrag" #: help:account.invoice,supplier_invoice_number:0 msgid "The reference of this invoice as provided by the supplier." msgstr "" +"De referentie van deze factuur zoals doorgegeven door de leverancier." #. module: account #: selection:account.account,type:0 @@ -1119,7 +1182,7 @@ msgstr "Code" #. module: account #: view:account.config.settings:0 msgid "Features" -msgstr "" +msgstr "Mogelijkheden" #. module: account #: code:addons/account/account.py:2293 @@ -1155,6 +1218,17 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klik om een rekening toe te voegen.\n" +"

\n" +" Bij transacties in verschillende munten, kan er verlies of " +"winst optreden\n" +" door koersverschillen. In dit menu krijgt u een\n" +" overzicht van Winst of Verlies als de transacties vandaag " +"zouden gebeuren.\n" +" Dit geldt enkel voor rekeningen met een secundaire munt.\n" +"

\n" +" " #. module: account #: field:account.bank.accounts.wizard,acc_name:0 @@ -1164,7 +1238,7 @@ msgstr "Rekeningnaam" #. module: account #: field:account.journal,with_last_closing_balance:0 msgid "Opening With Last Closing Balance" -msgstr "" +msgstr "Opening met laatste afsluitsaldo" #. module: account #: help:account.tax.code,notprintable:0 @@ -1172,6 +1246,8 @@ msgid "" "Check this box if you don't want any tax related to this tax code to appear " "on invoices" msgstr "" +"Schakel dit veld in als u voor deze btw-code geen btw-informatie wilt " +"afdrukken op facturen" #. module: account #: field:report.account.receivable,name:0 @@ -1200,12 +1276,12 @@ msgstr "" #. module: account #: view:account.invoice:0 msgid "Refund " -msgstr "" +msgstr "Creditnota " #. module: account #: help:account.config.settings,company_footer:0 msgid "Bank accounts as printed in the footer of each printed document" -msgstr "" +msgstr "Bankrekeningen afgedrukt in de voettekst van elk gedrukt document." #. module: account #: view:account.tax:0 @@ -1227,7 +1303,7 @@ msgstr "Kassa's" #. module: account #: field:account.config.settings,sale_refund_journal_id:0 msgid "Sale refund journal" -msgstr "" +msgstr "Verkoopcreditnotajournaal" #. module: account #: model:ir.actions.act_window,help:account.action_view_bank_statement_tree @@ -1246,6 +1322,19 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klik om een nieuwe kassa te maken.\n" +"

\n" +" Met een kassa kunt u boekingen in uw kasjournalen " +"bijhouden.\n" +" Dit is een eenvoudige manier om uw contante betalingen " +"dagelijks\n" +" op te volgen. U kunt de muntjes ingeven die in uw kassa " +"zitten\n" +" en dan de boekingen doen als er geld binnenkomt\n" +" of buitengaat.\n" +"

\n" +" " #. module: account #: model:account.account.type,name:account.data_account_type_bank @@ -1263,7 +1352,7 @@ msgstr "Begin van de periode" #. module: account #: view:account.tax:0 msgid "Refunds" -msgstr "" +msgstr "Creditnota's" #. module: account #: model:process.transition,name:account.process_transition_confirmstatementfromdraft0 @@ -1340,7 +1429,7 @@ msgstr "Uitgaande koers" #. module: account #: field:account.config.settings,chart_template_id:0 msgid "Template" -msgstr "" +msgstr "Sjabloon" #. module: account #: selection:account.analytic.journal,type:0 @@ -1433,7 +1522,7 @@ msgstr "Niveau" #: code:addons/account/wizard/account_change_currency.py:38 #, python-format msgid "You can only change currency for Draft Invoice." -msgstr "" +msgstr "U kunt alleen de munt van voorlopige facturen wijzigen." #. module: account #: report:account.invoice:0 @@ -1504,12 +1593,12 @@ msgstr "Rapportopties" #. module: account #: field:account.fiscalyear.close.state,fy_id:0 msgid "Fiscal Year to Close" -msgstr "" +msgstr "Af te sluiten boekjaar" #. module: account #: field:account.config.settings,sale_sequence_prefix:0 msgid "Invoice sequence" -msgstr "" +msgstr "Factuurnummering" #. module: account #: model:ir.model,name:account.model_account_entries_report @@ -1528,11 +1617,13 @@ msgid "" "And after getting confirmation from the bank it will be in 'Confirmed' " "status." msgstr "" +"Een nieuw uittreksel wordt gemaakt in voorlopige status.\n" +"Na bevestiging van de bank komt het in status Bevestigd." #. module: account #: field:account.invoice.report,state:0 msgid "Invoice Status" -msgstr "" +msgstr "Factuurstatus" #. module: account #: view:account.bank.statement:0 @@ -1546,7 +1637,7 @@ msgstr "Rekeninguittreksel" #. module: account #: field:res.partner,property_account_receivable:0 msgid "Account Receivable" -msgstr "Leveranciers" +msgstr "Te ontvangen" #. module: account #: code:addons/account/account.py:611 @@ -1554,7 +1645,7 @@ msgstr "Leveranciers" #: code:addons/account/account.py:767 #, python-format msgid "%s (copy)" -msgstr "" +msgstr "%s (kopie)" #. module: account #: selection:account.balance.report,display_account:0 @@ -1571,6 +1662,8 @@ msgid "" "There is no default debit account defined \n" "on journal \"%s\"." msgstr "" +"Er is geen standaard debetrekening gedefinieerd\n" +"voor het journaal \"%s\"" #. module: account #: view:account.tax:0 @@ -1605,6 +1698,8 @@ msgid "" "There is nothing to reconcile. All invoices and payments\n" " have been reconciled, your partner balance is clean." msgstr "" +"Er zijn geen afpuntingen. Alle facturen en betalingen\n" +" zijn afgepunt, uw relatiebalans is nul." #. module: account #: field:account.chart.template,code_digits:0 @@ -1623,17 +1718,17 @@ msgstr "Status 'Voorlopig' overslaan voor manuele boekingen" #: code:addons/account/wizard/account_report_common.py:159 #, python-format msgid "Not implemented." -msgstr "" +msgstr "Niet geïmplementeerd." #. module: account #: view:account.invoice.refund:0 msgid "Credit Note" -msgstr "" +msgstr "Creditnota" #. module: account #: view:account.config.settings:0 msgid "eInvoicing & Payments" -msgstr "" +msgstr "Elektronische facturen & betalingen" #. module: account #: view:account.analytic.cost.ledger.journal.report:0 @@ -1668,7 +1763,7 @@ msgstr "Aankoopcreditnota's" #. module: account #: field:account.config.settings,company_footer:0 msgid "Bank accounts footer preview" -msgstr "" +msgstr "Voorbeeld voettekst bankrekeningen" #. module: account #: selection:account.account,type:0 @@ -1710,7 +1805,7 @@ msgstr "Onbelast" #. module: account #: view:account.journal:0 msgid "Advanced Settings" -msgstr "" +msgstr "Geavanceerde instellingen" #. module: account #: view:account.bank.statement:0 @@ -1726,7 +1821,7 @@ msgstr "Ongeboekte lijnen" #: view:account.chart.template:0 #: field:account.chart.template,property_account_payable:0 msgid "Payable Account" -msgstr "Klanten" +msgstr "Te betalen" #. module: account #: field:account.tax,account_paid_id:0 @@ -1779,6 +1874,19 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klik om een nieuw rekeningtype te maken.\n" +"

\n" +" Een rekeningtype bepaalt hoe een rekening in een journaal " +"wordt\n" +" gebruikt. De overdrachtsmethode van een rekeningtype " +"bepaalt\n" +" de verwerking in de jaarafsluiting. Rapporten zoals balans " +"en winst-en-verliesrapport\n" +" werken met de categorie\n" +" (winst/verlies of balans).\n" +"

\n" +" " #. module: account #: report:account.invoice:0 @@ -1793,7 +1901,7 @@ msgstr "Factuur" #. module: account #: field:account.move,balance:0 msgid "balance" -msgstr "" +msgstr "Saldo" #. module: account #: model:process.node,note:account.process_node_analytic0 @@ -1809,7 +1917,7 @@ msgstr "Boekjaarreeks" #. module: account #: field:account.config.settings,group_analytic_accounting:0 msgid "Analytic accounting" -msgstr "" +msgstr "Analytische boekhouding" #. module: account #: report:account.overdue:0 @@ -1828,6 +1936,14 @@ msgid "" "should choose 'Round per line' because you certainly want the sum of your " "tax-included line subtotals to be equal to the total amount with taxes." msgstr "" +"Als u kiest voor 'Afronden per lijn': voor elke btw-lijn wordt eerst de btw " +"berekend en vervolgens afgerond per AO/VO/factuurlijn. Dan worden de " +"afgeronde bedragen opgeteld om tot het totaalbedrag voor de btw te komen. " +"Als u 'Globaal afronden' kiest: voor elke btw-lijn wordt eerst de btw " +"berekend. De bedragen worden opgeteld en vervolgens wordt het totale btw-" +"bedrag afgerond. Als u btw-inclusief verkoopt, kiest u voor 'Afronden per " +"lijn', omdat u wilt dat de som van uw subtotalen inclusief btw gelijk is aan " +"het totaalbedrag inclusief btw." #. module: account #: model:ir.actions.act_window,name:account.action_report_account_type_sales_tree_all @@ -1853,12 +1969,14 @@ msgid "" "The journal must have centralized counterpart without the Skipping draft " "state option checked." msgstr "" +"Voor dit journaal moet Gecentraliseerde tegenboeking zijn aangevinkt en de " +"optie Status 'Voorlopig' overslaan mag niet zijn ingeschakeld." #. module: account #: code:addons/account/account_move_line.py:850 #, python-format msgid "Some entries are already reconciled." -msgstr "" +msgstr "Bepaalde boekingen zijn al afgepunt." #. module: account #: model:email.template,body_html:account.email_template_edi_invoice @@ -1963,6 +2081,106 @@ msgid "" "\n" " " msgstr "" +"\n" +"
\n" +"\n" +"

Hallo${object.partner_id.name and ' ' or ''}${object.partner_id.name " +"or ''},

\n" +"\n" +"

Er is een nieuwe factuur voor u:

\n" +" \n" +"

\n" +"   REFERENTIES
\n" +"   Factuurnummer: ${object.number}
\n" +"   Factuurtotaal: ${object.amount_total} " +"${object.currency_id.name}
\n" +"   Factuurdatum: ${object.date_invoice}
\n" +" % if object.origin:\n" +"   Orderreferentie: ${object.origin}
\n" +" % endif\n" +" % if object.user_id:\n" +"   Uw contactpersoon: ${object.user_id.name}\n" +" % endif\n" +"

\n" +" \n" +" % if object.company_id.paypal_account and object.type in ('out_invoice', " +"'in_refund'):\n" +" <% \n" +" comp_name = quote(object.company_id.name)\n" +" inv_number = quote(object.number)\n" +" paypal_account = quote(object.company_id.paypal_account)\n" +" inv_amount = quote(str(object.residual))\n" +" cur_name = quote(object.currency_id.name)\n" +" paypal_url = \"https://www.paypal.com/cgi-" +"bin/webscr?cmd=_xclick&business=%s&item_name=%s%%20Factuur%%20%s&" +"\" \\\n" +" " +"\"invoice=%s&amount=%s&currency_code=%s&button_subtype=services&a" +"mp;no_note=1&bn=OpenERP_Invoice_PayNow_%s\" % \\\n" +" " +"(paypal_account,comp_name,inv_number,inv_number,inv_amount,cur_name,cur_name)" +"\n" +" %>\n" +"
\n" +"

U kunt ook rechtstreeks betalen via Paypal:

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

Neem gerust contact met ons op als u vragen heeft.

\n" +"

Bedankt dat u kiest voor ${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" +" Tel.:  ${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" +" " #. module: account #: field:account.tax.code,sum:0 @@ -1980,6 +2198,8 @@ msgid "" "Select a configuration package to setup automatically your\n" " taxes and chart of accounts." msgstr "" +"Kies een bestaande configuratie om automatisch uw\n" +" btw en rekeningen in te stellen." #. module: account #: view:account.analytic.account:0 @@ -1989,7 +2209,7 @@ msgstr "Wachtende rekeningen" #. module: account #: view:account.open.closed.fiscalyear:0 msgid "Cancel Fiscal Year Opening Entries" -msgstr "" +msgstr "Openingsboekingen annuleren" #. module: account #: report:account.journal.period.print.sale.purchase:0 @@ -2019,23 +2239,23 @@ msgstr "Te ontvangen & te betalen" #. module: account #: field:account.config.settings,module_account_payment:0 msgid "Manage payment orders" -msgstr "" +msgstr "Beheer betalingsvoorstellen" #. module: account #: view:account.period:0 msgid "Duration" -msgstr "" +msgstr "Duur" #. module: account #: view:account.bank.statement:0 #: field:account.bank.statement,last_closing_balance:0 msgid "Last Closing Balance" -msgstr "" +msgstr "Laatste eindsaldo" #. module: account #: model:ir.model,name:account.model_account_common_journal_report msgid "Account Common Journal Report" -msgstr "Rekening Gemeenschappelijk Journaal" +msgstr "Gemeenschappelijk Journaal" #. module: account #: selection:account.partner.balance,display_partner:0 @@ -2062,7 +2282,7 @@ msgstr "Klantenref." #: help:account.tax.template,ref_tax_code_id:0 #: help:account.tax.template,tax_code_id:0 msgid "Use this code for the tax declaration." -msgstr "" +msgstr "Gebruik deze code voor de btw-aangifte" #. module: account #: help:account.period,special:0 @@ -2077,7 +2297,7 @@ msgstr "Voorlopig rekeninguittreksel" #. module: account #: field:account.config.settings,module_account_check_writing:0 msgid "Pay your suppliers by check" -msgstr "" +msgstr "Uw leveranciers per cheque betalen" #. module: account #: field:account.move.line.reconcile,credit:0 @@ -2088,7 +2308,7 @@ msgstr "Creditbedrag" #: field:account.bank.statement,message_ids:0 #: field:account.invoice,message_ids:0 msgid "Messages" -msgstr "" +msgstr "Berichten" #. module: account #: view:account.vat.declaration:0 @@ -2100,6 +2320,12 @@ msgid "" "useful because it enables you to preview at any time the tax that you owe at " "the start and end of the month or quarter." msgstr "" +"Via dit menu kunt u een btw-aangifte afdrukken op basis van facturen of " +"betalingen. Kies een of meer perioden. De informatie die nodig is voor een " +"btw-aangifte wordt door OpenERP automatisch gemaakt op basis van facturen " +"(of betalingen in sommige landen). De gegevens worden onmiddellijk " +"bijgewerkt. Dat is handig omdat u zo makkelijk kunt opvolgen hoeveel btw u " +"moet betalen aan het begin en einde van een maand of kwartaal." #. module: account #: code:addons/account/account.py:408 @@ -2171,6 +2397,16 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klik om een nieuwe aankoopfactuur te maken.\n" +"

\n" +" U kunt de factuur van uw leverancier controleren ten " +"opzichte van\n" +" uw aankopen of ontvangsten. OpenERP kan ook automatisch " +"voorlopige\n" +" facturen maken volgens aankooporder of ontvangst.\n" +"

\n" +" " #. module: account #: sql_constraint:account.move.line:0 @@ -2187,7 +2423,7 @@ msgstr "Factuuranalyse" #. module: account #: model:ir.model,name:account.model_mail_compose_message msgid "Email composition wizard" -msgstr "" +msgstr "Assistent voor het maken van e-mails" #. module: account #: model:ir.model,name:account.model_account_period_close @@ -2201,6 +2437,8 @@ msgid "" "This journal already contains items for this period, therefore you cannot " "modify its company field." msgstr "" +"Dit journaal bevat al boekingen voor deze periode. U kunt de firma dus niet " +"wijzigen." #. module: account #: model:ir.actions.act_window,name:account.action_project_account_analytic_line_form @@ -2229,11 +2467,23 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klik om een rekeninguittreksel in te geven.\n" +"

\n" +" Een rekeninguittreksel is een samenvatting van alle " +"financiële verrichtingen op uw\n" +" bankrekening tijdens een bepaalde periode. U ontvangt deze\n" +" periodiek van uw bank.\n" +"

\n" +" Met OpenERP kunt een lijn afpunten tegenover de betrokken " +"aankoop- of verkoopfacturen.\n" +"

\n" +" " #. module: account #: field:account.config.settings,currency_id:0 msgid "Default company currency" -msgstr "" +msgstr "Standaard firmamunt" #. module: account #: field:account.invoice,move_id:0 @@ -2281,7 +2531,7 @@ msgstr "Geldig" #: field:account.bank.statement,message_follower_ids:0 #: field:account.invoice,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "Volgers" #. module: account #: model:ir.actions.act_window,name:account.action_account_print_journal @@ -2310,7 +2560,7 @@ msgstr "Ageingbalans" #. module: account #: view:account.fiscalyear.close.state:0 msgid "Close Fiscal Year" -msgstr "" +msgstr "Boekjaar afsluiten" #. module: account #. openerp-web @@ -2323,6 +2573,8 @@ msgstr "" #: sql_constraint:account.fiscal.position.tax:0 msgid "A tax fiscal position could be defined only once time on same taxes." msgstr "" +"Een fiscale positie voor btw kan maar een keer voor dezelfde btw-codes " +"worden ingesteld." #. module: account #: view:account.tax:0 @@ -2334,12 +2586,12 @@ msgstr "Btw-definitie" #: view:account.config.settings:0 #: model:ir.actions.act_window,name:account.action_account_config msgid "Configure Accounting" -msgstr "" +msgstr "Boekhouding instellen" #. module: account #: field:account.invoice.report,uom_name:0 msgid "Reference Unit of Measure" -msgstr "" +msgstr "Referentiemeeteenheid" #. module: account #: help:account.journal,allow_date:0 @@ -2355,12 +2607,12 @@ msgstr "" #: code:addons/account/static/src/xml/account_move_reconciliation.xml:8 #, python-format msgid "Good job!" -msgstr "" +msgstr "Prima!" #. module: account #: field:account.config.settings,module_account_asset:0 msgid "Assets management" -msgstr "" +msgstr "Afschrijvingen" #. module: account #: view:account.account:0 @@ -2416,6 +2668,8 @@ msgid "" "If you want the journal should be control at opening/closing, check this " "option" msgstr "" +"Schakel deze optie in als u het journaal voor opening/afsluiting wilt " +"gebruiken." #. module: account #: view:account.bank.statement:0 @@ -2456,7 +2710,7 @@ msgstr "Openstaande posten" #. module: account #: field:account.config.settings,purchase_refund_sequence_next:0 msgid "Next supplier credit note number" -msgstr "" +msgstr "Volgende aankoopcreditnotanummer" #. module: account #: field:account.automatic.reconcile,account_ids:0 @@ -2502,12 +2756,12 @@ msgstr "30 dagen netto" #: code:addons/account/account_cash_statement.py:256 #, python-format msgid "You do not have rights to open this %s journal !" -msgstr "" +msgstr "U kunt dit journaal %s niet openen." #. module: account #: model:res.groups,name:account.group_supplier_inv_check_total msgid "Check Total on supplier invoices" -msgstr "" +msgstr "Totaal op aankoopfacturen controleren" #. module: account #: selection:account.invoice,state:0 @@ -2583,7 +2837,7 @@ msgstr "Opbrengstenrekening" #. module: account #: help:account.config.settings,default_sale_tax:0 msgid "This sale tax will be assigned by default on new products." -msgstr "" +msgstr "Deze verkoopbtw wordt standaard aan nieuwe producten gekoppeld." #. module: account #: report:account.general.ledger_landscape:0 @@ -2693,6 +2947,11 @@ msgid "" "amount greater than the total invoiced amount. In order to avoid rounding " "issues, the latest line of your payment term must be of type 'balance'." msgstr "" +"Kan geen factuur maken.\n" +"De gekoppelde betalingstermijn is wellicht foutief ingesteld omdat het " +"berekende bedrag groter is dan het totale factuurbedrag. De laatste lijn van " +"uw betalingstermijn moet van het type 'Saldo' zijn, om afrondingsproblement " +"te vermijden." #. module: account #: view:account.move:0 @@ -2737,7 +2996,7 @@ msgstr "Fiscale posities" #: code:addons/account/account_move_line.py:578 #, python-format msgid "You cannot create journal items on a closed account %s %s." -msgstr "" +msgstr "U kunt niet boeken op een afgesloten rekening %s %s." #. module: account #: field:account.period.close,sure:0 @@ -2770,7 +3029,7 @@ msgstr "Voorlopige status van factuur" #. module: account #: view:product.category:0 msgid "Account Properties" -msgstr "" +msgstr "Rekeningeigenschappen" #. module: account #: view:account.partner.reconcile.process:0 @@ -2780,7 +3039,7 @@ msgstr "Relaties afpunten" #. module: account #: view:account.analytic.line:0 msgid "Fin. Account" -msgstr "" +msgstr "Bankrekening" #. module: account #: field:account.tax,tax_code_id:0 @@ -2797,7 +3056,7 @@ msgstr "30% voorschot einde 30 dagen" #. module: account #: view:account.entries.report:0 msgid "Unreconciled entries" -msgstr "Niet afgeletterde boekingen" +msgstr "Niet-afgepunte boekingen" #. module: account #: field:account.invoice.tax,base_code_id:0 @@ -2857,12 +3116,12 @@ msgstr "AK" #. module: account #: view:account.invoice.refund:0 msgid "Create Credit Note" -msgstr "" +msgstr "Creditnota maken" #. module: account #: field:product.template,supplier_taxes_id:0 msgid "Supplier Taxes" -msgstr "Leveranciers-btw" +msgstr "Leveranciersbtw" #. module: account #: view:account.entries.report:0 @@ -2888,6 +3147,20 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klik om een boeking in te voeren.\n" +"

\n" +" Een boeking bestaat uit meerdere lijnen; elke lijn is een " +"debet- of een\n" +" creditverrichting.\n" +"

\n" +" OpenERP maakt automatisch een boeking per document:\n" +" factuur, creditnota, leveranciersbetaling, " +"rekeninguittreksels,\n" +" enz. U moet dus in principe enkel zelf diverse boekingen " +"uitvoeren.\n" +"

\n" +" " #. module: account #: help:account.invoice,date_due:0 @@ -2908,7 +3181,7 @@ msgstr "" #: code:addons/account/wizard/account_state_open.py:37 #, python-format msgid "Invoice is already reconciled." -msgstr "" +msgstr "De factuur is al afgepunt" #. module: account #: view:account.analytic.cost.ledger.journal.report:0 @@ -2956,7 +3229,7 @@ msgstr "Analytische rekening" #: field:account.config.settings,default_purchase_tax:0 #: field:account.config.settings,purchase_tax:0 msgid "Default purchase tax" -msgstr "" +msgstr "Standaard aankoopbtw" #. module: account #: view:account.account:0 @@ -2989,7 +3262,7 @@ msgstr "Configuratiefout" #: code:addons/account/account_bank_statement.py:433 #, python-format msgid "Statement %s confirmed, journal items were created." -msgstr "" +msgstr "Uittreksel %s is bevestigd; de boekingen zijn gemaakt." #. module: account #: field:account.invoice.report,price_average:0 @@ -3042,7 +3315,7 @@ msgstr "Ref." #. module: account #: view:wizard.multi.charts.accounts:0 msgid "Purchase Tax" -msgstr "" +msgstr "Aankoopbtw" #. module: account #: help:account.move.line,tax_code_id:0 @@ -3095,6 +3368,21 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klik om een nieuw boekjaar te openen.\n" +"

\n" +" Definieer het boekjaar in functie van uw behoeften. Een\n" +" boekjaar is een periode aan het eind waarvan de rekeningen " +"van een bedrijf\n" +" worden opgemaakt (doorgaans 12 maanden). Het boekjaar wordt " +"meestal\n" +" aangeduid door de einddatum. Een voorbeeld:\n" +" als het boekjaar van een bedrijf eindigt op 30 november " +"2012, dan\n" +" wordt de periode tussen 1 december 2011 en 30 november 2012\n" +" aangeduid als boekjaar 2012.\n" +"

\n" +" " #. module: account #: view:account.common.report:0 @@ -3136,7 +3424,7 @@ msgstr "Communicatietype" #. module: account #: constraint:account.move.line:0 msgid "Account and Period must belong to the same company." -msgstr "" +msgstr "Rekening en periode moeten tot dezelfde firma behoren." #. module: account #: field:account.invoice.line,discount:0 @@ -3167,7 +3455,7 @@ msgstr "Afschrijvingsbedrag" #: field:account.bank.statement,message_unread:0 #: field:account.invoice,message_unread:0 msgid "Unread Messages" -msgstr "" +msgstr "Ongelezen berichten" #. module: account #: code:addons/account/wizard/account_invoice_state.py:44 @@ -3176,12 +3464,14 @@ msgid "" "Selected invoice(s) cannot be confirmed as they are not in 'Draft' or 'Pro-" "Forma' state." msgstr "" +"De gekozen factuur (facturen) kan niet worden bevestigd, omdat de status " +"niet Voorlopig of Pro forma is." #. module: account #: code:addons/account/account.py:1056 #, python-format msgid "You should choose the periods that belong to the same company." -msgstr "" +msgstr "U moet perioden van dezelfde firma kiezen." #. module: account #: model:ir.actions.act_window,name:account.action_report_account_sales_tree_all @@ -3194,17 +3484,17 @@ msgstr "Verkopen per rekening" #: code:addons/account/account.py:1406 #, python-format msgid "You cannot delete a posted journal entry \"%s\"." -msgstr "" +msgstr "U kunt de bevestigde boeking \"%s\" niet verwijderen." #. module: account #: view:account.invoice:0 msgid "Accounting Period" -msgstr "" +msgstr "Boekingsperiode" #. module: account #: field:account.config.settings,sale_journal_id:0 msgid "Sale journal" -msgstr "" +msgstr "Verkoopjournaal" #. module: account #: code:addons/account/account.py:2293 @@ -3220,7 +3510,7 @@ msgstr "U moet een analytisch journaal instellen voor journaal '%s'." msgid "" "This journal already contains items, therefore you cannot modify its company " "field." -msgstr "" +msgstr "Dit journaal bevat al boekingen. U kunt de firma dus niet wijzigen." #. module: account #: code:addons/account/account.py:408 @@ -3229,6 +3519,8 @@ msgid "" "You need an Opening journal with centralisation checked to set the initial " "balance." msgstr "" +"U moet een openingsjournaal maken met Centraliseren ingesteld om de " +"openingsbalans te boeken." #. module: account #: model:ir.actions.act_window,name:account.action_tax_code_list @@ -3266,7 +3558,7 @@ msgstr "Augustus" #. module: account #: field:accounting.report,debit_credit:0 msgid "Display Debit/Credit Columns" -msgstr "" +msgstr "Debet- en creditkolommen tonen" #. module: account #: selection:account.entries.report,month:0 @@ -3295,7 +3587,7 @@ msgstr "Lijn 2:" #. module: account #: field:wizard.multi.charts.accounts,only_one_chart_template:0 msgid "Only One Chart Template Available" -msgstr "" +msgstr "Er is maar een boekhoudplansjabloon beschikbaar" #. module: account #: view:account.chart.template:0 @@ -3308,7 +3600,7 @@ msgstr "Kostenrekening" #: field:account.bank.statement,message_summary:0 #: field:account.invoice,message_summary:0 msgid "Summary" -msgstr "" +msgstr "Overzicht" #. module: account #: help:account.invoice,period_id:0 @@ -3412,7 +3704,7 @@ msgstr "Proef– en saldibalans" #: code:addons/account/account.py:430 #, python-format msgid "Unable to adapt the initial balance (negative value)." -msgstr "" +msgstr "Kan het beginsaldo niet aanpassen (negatief)" #. module: account #: selection:account.invoice,type:0 @@ -3431,7 +3723,7 @@ msgstr "Boekjaar kiezen" #: view:account.config.settings:0 #: view:account.installer:0 msgid "Date Range" -msgstr "" +msgstr "Datumbereik" #. module: account #: view:account.period:0 @@ -3483,7 +3775,7 @@ msgstr "" #: code:addons/account/account.py:2620 #, python-format msgid "There is no parent code for the template account." -msgstr "" +msgstr "Er is geen hoofdcode voor de sjabloonrekening." #. module: account #: help:account.chart.template,code_digits:0 @@ -3511,6 +3803,8 @@ msgstr "Altijd" msgid "" "Full accounting features: journals, legal statements, chart of accounts, etc." msgstr "" +"Volledige boekhouding: journalen, wettelijke rapportering, boekhoudplannen, " +"enz." #. module: account #: view:account.analytic.line:0 @@ -3567,7 +3861,7 @@ msgstr "Elektronisch bestand" #. module: account #: field:account.config.settings,has_chart_of_accounts:0 msgid "Company has a chart of accounts" -msgstr "" +msgstr "De firma heeft een boekhoudplan" #. module: account #: view:account.payment.term.line:0 @@ -3583,12 +3877,12 @@ msgstr "Relatiehistoriek" #: code:addons/account/account_invoice.py:1330 #, python-format msgid "%s created." -msgstr "" +msgstr "%s gemaakt." #. module: account #: view:account.period:0 msgid "Account Period" -msgstr "" +msgstr "Boekingsperiode" #. module: account #: help:account.account,currency_id:0 @@ -3615,7 +3909,7 @@ msgstr "Sjablonen boekhoudplan" #. module: account #: view:account.bank.statement:0 msgid "Transactions" -msgstr "" +msgstr "Verrichtingen" #. module: account #: model:ir.model,name:account.model_account_unreconcile_reconcile @@ -3716,7 +4010,7 @@ msgstr "Boekhouding instellen" #. module: account #: model:ir.actions.act_window,name:account.action_account_vat_declaration msgid "Account Tax Declaration" -msgstr "" +msgstr "Btw-aangifte" #. module: account #: view:account.payment.term.line:0 @@ -3731,6 +4025,9 @@ msgid "" "centralized counterpart box in the related journal from the configuration " "menu." msgstr "" +"U kunt geen factuur boeken in een gecentraliseerd dagboek. Schakel het " +"veldje Gecentraliseerde tegenboeking uit in het betrokken journaal (via " +"Instellingen)." #. module: account #: field:account.bank.statement,balance_start:0 @@ -3755,7 +4052,7 @@ msgstr "Periode afsluiten" #: view:account.bank.statement:0 #: field:account.cashbox.line,subtotal_opening:0 msgid "Opening Subtotal" -msgstr "" +msgstr "Subtotaal heropening" #. module: account #: constraint:account.move.line:0 @@ -3791,6 +4088,10 @@ msgid "" "quotations with a button \"Pay with Paypal\" in automated emails or through " "the OpenERP portal." msgstr "" +"Paypal-rekening (e-mail) voor on line betalingen (kredietkaart, enz.). Als u " +"een Paypal-rekening toevoegt, kan de klant facturen of offertes betalen met " +"de knop \"Betalen met Paypal\" op basis van automatische mails of via de " +"portaal van OpenERP." #. module: account #: code:addons/account/account_move_line.py:535 @@ -3801,6 +4102,10 @@ msgid "" "You can create one in the menu: \n" "Configuration/Journals/Journals." msgstr "" +"Kan geen dagboek vinden van het type %s voor deze firma.\n" +"\n" +"U kunt een dagboek maken via het menu: \n" +"Instellingen/Journalen/Journalen." #. module: account #: model:ir.actions.act_window,name:account.action_account_unreconcile @@ -3851,6 +4156,10 @@ msgid "" "by\n" " your supplier/customer." msgstr "" +"U kunt deze creditnota bewerken en goedkeuren\n" +" of deze als voorlopig laten staan,\n" +" terwijl u wacht op het document van uw " +"leverancier." #. module: account #: view:validate.account.move.lines:0 @@ -3868,6 +4177,8 @@ msgid "" "You have not supplied enough arguments to compute the initial balance, " "please select a period and a journal in the context." msgstr "" +"U heeft onvoldoende argumenten gegeven om de beginbalans te berekenen. Kies " +"een periode en een journaal." #. module: account #: model:ir.actions.report.xml,name:account.account_transfers @@ -3877,7 +4188,7 @@ msgstr "Overdrachten" #. module: account #: field:account.config.settings,expects_chart_of_accounts:0 msgid "This company has its own chart of accounts" -msgstr "" +msgstr "Deze firma heeft een eigen boekhoudplan." #. module: account #: view:account.chart:0 @@ -3888,7 +4199,7 @@ msgstr "Boekhoudplannen" #: view:cash.box.out:0 #: model:ir.actions.act_window,name:account.action_cash_box_out msgid "Take Money Out" -msgstr "" +msgstr "Geld uit kas" #. module: account #: report:account.vat.declaration:0 @@ -3918,6 +4229,19 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klik om een verkoopfactuur te maken.\n" +"

\n" +" Met OpenERP's elektronische facturatie kunt u betalingen " +"door klanten\n" +" beter opvolging. Uw klant onvangt de factuur via e-mail\n" +" en kan deze on line betalen en/of importeren in zijn eigen " +"systeem.\n" +"

\n" +" Overleg met uw klant kan automatisch onderaan elke factuur " +"worden weergegeven.\n" +"

\n" +" " #. module: account #: field:account.tax.code,name:0 @@ -3949,6 +4273,9 @@ msgid "" "You cannot modify a posted entry of this journal.\n" "First you should set the journal to allow cancelling entries." msgstr "" +"Een bevestigde boeking voor dit journaal kan niet worden gewijzigd.\n" +"U moet instellen op het journaal of het annuleren van boekingen is " +"toegelaten." #. module: account #: model:ir.actions.act_window,name:account.action_account_print_sale_purchase_journal @@ -3973,6 +4300,8 @@ msgid "" "There is no fiscal year defined for this date.\n" "Please create one from the configuration of the accounting menu." msgstr "" +"Geen boekjaar gevonden voor deze datum.\n" +"Gelieve een boekjaar te maken via de instellingen in het menu Boekhouding." #. module: account #: view:account.addtmpl.wizard:0 @@ -3984,7 +4313,7 @@ msgstr "Rekening maken" #: code:addons/account/wizard/account_fiscalyear_close.py:62 #, python-format msgid "The entries to reconcile should belong to the same company." -msgstr "" +msgstr "De af te punten boekingen moeten tot dezelfde firma behoren." #. module: account #: field:account.invoice.tax,tax_amount:0 @@ -4004,7 +4333,7 @@ msgstr "Detail" #. module: account #: help:account.config.settings,default_purchase_tax:0 msgid "This purchase tax will be assigned by default on new products." -msgstr "" +msgstr "Deze aankoopbtw wordt standaard aan nieuwe producten gekoppeld." #. module: account #: report:account.invoice:0 @@ -4172,7 +4501,7 @@ msgstr "" #. module: account #: field:account.config.settings,group_check_supplier_invoice_total:0 msgid "Check the total of supplier invoices" -msgstr "" +msgstr "Totaal op aankoopfacturen controleren" #. module: account #: view:account.tax:0 @@ -4186,6 +4515,8 @@ msgid "" "When monthly periods are created. The status is 'Draft'. At the end of " "monthly period it is in 'Done' status." msgstr "" +"Bij maandelijkse perioden is de status 'Voorlopig'. Aan het einde van de " +"maandelijkse periode is de status 'Voltooid'." #. module: account #: view:account.invoice.report:0 @@ -4212,7 +4543,7 @@ msgstr "Te betalen" #: code:addons/account/wizard/account_fiscalyear_close.py:88 #, python-format msgid "The periods to generate opening entries cannot be found." -msgstr "" +msgstr "Geen perioden gevonden om openingsboekingen te maken" #. module: account #: model:process.node,name:account.process_node_supplierpaymentorder0 @@ -4254,7 +4585,7 @@ msgstr "Vermenigvuldigingsfactor btw-code" #. module: account #: field:account.config.settings,complete_tax_set:0 msgid "Complete set of taxes" -msgstr "" +msgstr "Volledige btw-instellingen" #. module: account #: field:account.account,name:0 @@ -4272,17 +4603,17 @@ msgstr "Naam" #: code:addons/account/installer.py:94 #, python-format msgid "No unconfigured company !" -msgstr "" +msgstr "Alle firma's zijn ingesteld." #. module: account #: field:res.company,expects_chart_of_accounts:0 msgid "Expects a Chart of Accounts" -msgstr "" +msgstr "Er is een boekhoudplan nodig." #. module: account #: model:mail.message.subtype,name:account.mt_invoice_paid msgid "paid" -msgstr "" +msgstr "Betaald" #. module: account #: field:account.move.line,date:0 @@ -4293,7 +4624,7 @@ msgstr "Boekingsdatum" #: code:addons/account/wizard/account_fiscalyear_close.py:100 #, python-format msgid "The journal must have default credit and debit account." -msgstr "" +msgstr "Het journaal moet een standaard debet– en creditrekening hebben." #. module: account #: model:ir.actions.act_window,name:account.action_bank_tree @@ -4305,6 +4636,7 @@ msgstr "Uw bankrekeningen instellen" #: selection:account.invoice.refund,filter_refund:0 msgid "Modify: create credit note, reconcile and create a new draft invoice" msgstr "" +"Wijzigen: factuur crediteren, afpunten en een nieuwe conceptfactuur maken" #. module: account #: xsl:account.transfer:0 @@ -4315,7 +4647,7 @@ msgstr "" #: help:account.bank.statement,message_ids:0 #: help:account.invoice,message_ids:0 msgid "Messages and communication history" -msgstr "" +msgstr "Berichten en communicatiehistoriek" #. module: account #: help:account.journal,analytic_journal_id:0 @@ -4349,13 +4681,15 @@ msgid "" "Check this box if you don't want any tax related to this tax Code to appear " "on invoices." msgstr "" +"Schakel dit veld in als u voor deze btw-code geen btw-informatie wilt " +"afdrukken op facturen" #. module: account #: code:addons/account/account_move_line.py:1048 #: code:addons/account/account_move_line.py:1131 #, python-format msgid "You cannot use an inactive account." -msgstr "" +msgstr "Een niet-actieve rekening kan niet worden gebruikt." #. module: account #: model:ir.actions.act_window,name:account.open_board_account @@ -4386,7 +4720,7 @@ msgstr "Afhankelijke consolidatierekeningen" #: code:addons/account/wizard/account_invoice_refund.py:146 #, python-format msgid "Insufficient Data!" -msgstr "" +msgstr "Onvoldoende gegevens" #. module: account #: help:account.account,unrealized_gain_loss:0 @@ -4422,7 +4756,7 @@ msgstr "titel" #. module: account #: selection:account.invoice.refund,filter_refund:0 msgid "Create a draft credit note" -msgstr "" +msgstr "Een voorlopige creditnota maken" #. module: account #: view:account.invoice:0 @@ -4454,7 +4788,7 @@ msgstr "Activa" #. module: account #: view:account.config.settings:0 msgid "Accounting & Finance" -msgstr "" +msgstr "Boekhouding & financiën" #. module: account #: view:account.invoice.confirm:0 @@ -4481,7 +4815,7 @@ msgstr "(De factuur mag niet afgepunt zijn als u ze wilt openen)" #. module: account #: field:account.tax,account_analytic_collected_id:0 msgid "Invoice Tax Analytic Account" -msgstr "" +msgstr "Analytische rekening btw op factuur" #. module: account #: field:account.chart,period_from:0 @@ -4519,6 +4853,8 @@ msgid "" "If you put \"%(year)s\" in the prefix, it will be replaced by the current " "year." msgstr "" +"Als u \"%(year)s\" in het voorvoegsel zet, wordt de variabele vervangen door " +"het lopende jaar." #. module: account #: help:account.account,active:0 @@ -4556,6 +4892,8 @@ msgid "" "9.99 EUR, whereas a decimal precision of 4 will allow journal entries like: " "0.0231 EUR." msgstr "" +"Een decimale precisie van 2 laat bijvoorbeeld boekingen toe in de vorm 9,99 " +"EUR. Met een decimale precisie van 4 boekt u 0,0231 EUR." #. module: account #: view:account.payment.term.line:0 @@ -4599,6 +4937,18 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klik om een nieuwe bankrekening te maken. \n" +"

\n" +" Stel de bankrekeningen van uw firma in en kies welke op " +"rapporten\n" +" moeten worden afgedrukt.\n" +"

\n" +" Als u de boekhouding in OpenERP voert, worden journalen en\n" +" grootboekrekeningen automatisch gemaakt op basis van deze " +"gegevens.\n" +"

\n" +" " #. module: account #: model:ir.model,name:account.model_account_invoice_cancel @@ -4630,14 +4980,14 @@ msgstr "Kas sluiten" msgid "" "Error!\n" "You cannot create recursive Tax Codes." -msgstr "" +msgstr "U kunt niet dezelfde btw-codes maken." #. module: account #: constraint:account.period:0 msgid "" "Error!\n" "The duration of the Period(s) is/are invalid." -msgstr "" +msgstr "De duur van de periode(n) is niet geldig." #. module: account #: field:account.entries.report,month:0 @@ -4659,7 +5009,7 @@ msgstr "" #. module: account #: field:account.config.settings,purchase_sequence_prefix:0 msgid "Supplier invoice sequence" -msgstr "" +msgstr "Nummering aankoopfacturen" #. module: account #: code:addons/account/account_invoice.py:571 @@ -4669,13 +5019,15 @@ msgid "" "Cannot find a chart of account, you should create one from Settings\\" "Configuration\\Accounting menu." msgstr "" +"Kan geen boekhoudplan vinden; maak een boekhoudplan via de instellingen van " +"het menu Instellingen\\Instellingen\\Boekhouding." #. module: account #: field:account.entries.report,product_uom_id:0 #: view:analytic.entries.report:0 #: field:analytic.entries.report,product_uom_id:0 msgid "Product Unit of Measure" -msgstr "" +msgstr "Maateenheid product" #. module: account #: field:res.company,paypal_account:0 @@ -4713,7 +5065,7 @@ msgstr "Leeg voor de huidige datum" #: view:account.bank.statement:0 #: field:account.cashbox.line,subtotal_closing:0 msgid "Closing Subtotal" -msgstr "" +msgstr "Subtotaal afsluiting" #. module: account #: field:account.tax,base_code_id:0 @@ -4725,7 +5077,7 @@ msgstr "Rekening basisvak" #, python-format msgid "" "You have to provide an account for the write off/exchange difference entry." -msgstr "" +msgstr "U moet een rekening opgeven voor de afschrijvingsboeking" #. module: account #: help:res.company,paypal_account:0 @@ -4774,7 +5126,7 @@ msgstr "" #: code:addons/account/static/src/xml/account_move_reconciliation.xml:24 #, python-format msgid "Last Reconciliation:" -msgstr "" +msgstr "Laatste afpunting:" #. module: account #: model:ir.ui.menu,name:account.menu_finance_periodical_processing @@ -4784,7 +5136,7 @@ msgstr "Periodieke verwerking" #. module: account #: selection:account.move.line,state:0 msgid "Balanced" -msgstr "" +msgstr "In evenwicht" #. module: account #: model:process.node,note:account.process_node_importinvoice0 @@ -4798,6 +5150,7 @@ msgid "" "There is currently no company without chart of account. The wizard will " "therefore not be executed." msgstr "" +"Er is geen firma zonder boekhoudplan. De assistent wordt niet uitgevoerd." #. module: account #: model:ir.actions.act_window,name:account.action_wizard_multi_chart @@ -4883,7 +5236,7 @@ msgstr "Creditnota's" #: model:ir.actions.act_window,name:account.action_account_manual_reconcile #: model:ir.ui.menu,name:account.menu_manual_reconcile_bank msgid "Journal Items to Reconcile" -msgstr "" +msgstr "Af te punten boekingen" #. module: account #: sql_constraint:account.period:0 @@ -4893,12 +5246,12 @@ msgstr "De code van de periode moet uniek zijn per firma." #. module: account #: help:wizard.multi.charts.accounts,currency_id:0 msgid "Currency as per company's country." -msgstr "" +msgstr "Munt volgens land van de firma." #. module: account #: view:account.tax:0 msgid "Tax Computation" -msgstr "" +msgstr "Btw-berekening" #. module: account #: view:wizard.multi.charts.accounts:0 @@ -4934,6 +5287,7 @@ msgid "" "Error!\n" "You cannot create an account which has parent account of different company." msgstr "" +"U kunt geen rekening maken met een hoofdrekening van een andere firma." #. module: account #: code:addons/account/account_invoice.py:615 @@ -4944,6 +5298,10 @@ msgid "" "You can create one in the menu: \n" "Configuration\\Journals\\Journals." msgstr "" +"Kan geen dagboek vinden van het type %s voor deze firma.\n" +"\n" +"U kunt een dagboek maken via het menu: \n" +"Instellingen/Journalen/Journalen." #. module: account #: report:account.vat.declaration:0 @@ -4969,7 +5327,7 @@ msgstr "Boekingsmodellen" #. module: account #: view:account.tax:0 msgid "Children/Sub Taxes" -msgstr "" +msgstr "Onderliggende btw" #. module: account #: xsl:account.transfer:0 @@ -4994,7 +5352,7 @@ msgstr "Dient als standaardrekening voor het creditbedrag" #. module: account #: view:cash.box.out:0 msgid "Describe why you take money from the cash register:" -msgstr "" +msgstr "Geef aan waarom u geld uit kas haalt:" #. module: account #: selection:account.invoice,state:0 @@ -5011,12 +5369,12 @@ msgstr "Voorbeeld" #. module: account #: help:account.config.settings,group_proforma_invoices:0 msgid "Allows you to put invoices in pro-forma state." -msgstr "" +msgstr "Hiermee kunt u pro-formafacturen maken." #. module: account #: view:account.journal:0 msgid "Unit Of Currency Definition" -msgstr "" +msgstr "Instellen munteenheid" #. module: account #: view:account.tax.template:0 @@ -5030,6 +5388,7 @@ msgid "" "It adds the currency column on report if the currency differs from the " "company currency." msgstr "" +"Voegt een kolom toe met de munt, indien deze verschilt van de firmamunt." #. module: account #: code:addons/account/account.py:3336 @@ -5069,7 +5428,7 @@ msgstr "Geannuleerde factuur" #. module: account #: view:account.invoice:0 msgid "My Invoices" -msgstr "" +msgstr "Mijn facturen" #. module: account #: selection:account.bank.statement,state:0 @@ -5079,7 +5438,7 @@ msgstr "Nieuw" #. module: account #: view:wizard.multi.charts.accounts:0 msgid "Sale Tax" -msgstr "" +msgstr "Verkoopbtw" #. module: account #: field:account.tax,ref_tax_code_id:0 @@ -5104,6 +5463,9 @@ msgid "" "printed it comes to 'Printed' status. When all transactions are done, it " "comes in 'Done' status." msgstr "" +"Als de journaalperiode wordt gemaakt, is de status 'Concept'. Als een " +"rapport wort afgedrukt, komt de status op 'Afgedrukt'. Als alle transacties " +"zijn voltooid, wordt de status 'Voltooid'." #. module: account #: code:addons/account/account.py:3147 @@ -5137,7 +5499,7 @@ msgstr "Facturen" #. module: account #: help:account.config.settings,expects_chart_of_accounts:0 msgid "Check this box if this company is a legal entity." -msgstr "" +msgstr "Schakel dit vakje in als de firma een wettelijke entiteit is." #. module: account #: model:account.account.type,name:account.conf_account_type_chk @@ -5183,7 +5545,7 @@ msgstr "Controleren" #: view:validate.account.move:0 #: view:validate.account.move.lines:0 msgid "or" -msgstr "" +msgstr "of" #. module: account #: view:account.invoice.report:0 @@ -5253,6 +5615,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 "" +"Stel de standaardrekening in voor btw-lijnen van facturen. Laat leeg als u " +"een kostenrekening wilt gebruiken." #. module: account #: code:addons/account/account.py:889 @@ -5268,7 +5632,7 @@ msgstr "Te bekijken boekingen" #. module: account #: selection:res.company,tax_calculation_rounding_method:0 msgid "Round Globally" -msgstr "" +msgstr "Globaal afronden" #. module: account #: field:account.bank.statement,message_comment_ids:0 @@ -5276,7 +5640,7 @@ msgstr "" #: field:account.invoice,message_comment_ids:0 #: help:account.invoice,message_comment_ids:0 msgid "Comments and emails" -msgstr "" +msgstr "Commentaar en e-mails" #. module: account #: view:account.bank.statement:0 @@ -5296,6 +5660,8 @@ msgid "" "Please verify the price of the invoice !\n" "The encoded total does not match the computed total." msgstr "" +"Kijk het totaalbedrag van de factuur na.\n" +"Het effectieve totaal stemt niet overeen met het berekende totaal." #. module: account #: field:account.account,active:0 @@ -5311,7 +5677,7 @@ msgstr "Actief" #: view:account.bank.statement:0 #: field:account.journal,cash_control:0 msgid "Cash Control" -msgstr "" +msgstr "Kascontrole" #. module: account #: field:account.analytic.balance,date2:0 @@ -5341,7 +5707,7 @@ msgstr "Balans per rekeningtype" #: code:addons/account/account_cash_statement.py:301 #, python-format msgid "There is no %s Account on the journal %s." -msgstr "" +msgstr "Er is geen %s rekening voor journaal %s." #. module: account #: model:res.groups,name:account.group_account_user @@ -5360,7 +5726,7 @@ msgstr "" #. module: account #: model:res.groups,name:account.group_account_manager msgid "Financial Manager" -msgstr "" +msgstr "Financieel directeur" #. module: account #: field:account.journal,group_invoice_lines:0 @@ -5381,7 +5747,7 @@ msgstr "Bewegingen" #: field:account.bank.statement,details_ids:0 #: view:account.journal:0 msgid "CashBox Lines" -msgstr "" +msgstr "Kaslijnen" #. module: account #: model:ir.model,name:account.model_account_vat_declaration @@ -5394,6 +5760,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 "" +"Als u dit vakje niet inschakelt, kunt u facturen maken en betalingen " +"uitvoeren, maar geen echte boekhouding voeren (boekingen, balansen, ...)" #. module: account #: view:account.period:0 @@ -5427,6 +5795,8 @@ msgid "" "There is no period defined for this date: %s.\n" "Please create one." msgstr "" +"Geen periode gedefinieerd voor deze datum: %s!\n" +"Gelieve er een te maken." #. module: account #: help:account.tax,price_include:0 @@ -5483,7 +5853,7 @@ msgstr "" #: view:account.bank.statement:0 #: help:account.cashbox.line,number_opening:0 msgid "Opening Unit Numbers" -msgstr "" +msgstr "Nummers openingseenheid" #. module: account #: field:account.subscription,period_type:0 @@ -5529,7 +5899,7 @@ msgstr "" #: code:addons/account/account_invoice.py:1335 #, python-format msgid "%s paid." -msgstr "" +msgstr "%s betaald." #. module: account #: view:account.financial.report:0 @@ -5554,7 +5924,7 @@ msgstr "Jaar" #. module: account #: help:account.invoice,sent:0 msgid "It indicates that the invoice has been sent." -msgstr "" +msgstr "Geeft aan dat de factuur is verstuurd." #. module: account #: view:account.payment.term.line:0 @@ -5574,11 +5944,14 @@ msgid "" "Put a sequence in the journal definition for automatic numbering or create a " "sequence manually for this piece." msgstr "" +"Kan geen volgnummer toekennen aan dit stuk.\n" +"Stel een boekingsreeks in voor het journaal of maak zelf een boekingsreeks " +"voor dit stuk." #. module: account #: view:account.invoice:0 msgid "Pro Forma Invoice " -msgstr "" +msgstr "Pro-formafactuur " #. module: account #: selection:account.subscription,period_type:0 @@ -5643,7 +6016,7 @@ msgstr "Berekende code (als type=code)" #, python-format msgid "" "Cannot find a chart of accounts for this company, you should create one." -msgstr "" +msgstr "Geen boekhoudplan voor deze firma; u dient er een te maken." #. module: account #: selection:account.analytic.journal,type:0 @@ -5703,6 +6076,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 "" +"Bevat de Chatsamenvatting (aantal berichten, ...). Deze samenvatting is in " +"html-formaat, zodat ze in de kanbanweergave kan worden gebruikt." #. module: account #: field:account.tax,child_depend:0 @@ -5720,6 +6095,12 @@ msgid "" "entry was reconciled, either the user pressed the button \"Fully " "Reconciled\" in the manual reconciliation process" msgstr "" +"Datum waarop de boekingen van de relatie de laatste keer volledig zijn " +"afgepunt. Deze verschilt van de datum van de laatste afpunting van deze " +"relatie, omdat we hiermee aangeven dat er op deze datum niks meer openstond. " +"Deze datum kan op 2 manieren worden ingesteld: de laatste " +"debet/creditboeking is afgepunt, of de gebruiker heeft op de knop \"Volledig " +"afgedrukt\" bij het manueel afpunten." #. module: account #: field:account.journal,update_posted:0 @@ -5766,13 +6147,14 @@ msgstr "account.installer" #. module: account #: view:account.invoice:0 msgid "Recompute taxes and total" -msgstr "" +msgstr "Btw en totaal herberekenen." #. module: account #: code:addons/account/account.py:1097 #, python-format msgid "You cannot modify/delete a journal with entries for this period." msgstr "" +"U kunt een journaal met boekingen in deze periode niet wijzigen/verwijderen." #. module: account #: field:account.tax.template,include_base_amount:0 @@ -5782,7 +6164,7 @@ msgstr "Opnemen in basisbedrag" #. module: account #: field:account.invoice,supplier_invoice_number:0 msgid "Supplier Invoice Number" -msgstr "" +msgstr "Aankoopfactuurnummer" #. module: account #: help:account.payment.term.line,days:0 @@ -5803,6 +6185,8 @@ msgstr "Berekend bedrag" #, python-format msgid "You can not add/modify entries in a closed period %s of journal %s." msgstr "" +"In een afgesloten periode %s of journaal %s kunt u geen boekingen " +"wijzigen/toevoegen." #. module: account #: view:account.journal:0 @@ -5827,7 +6211,7 @@ msgstr "Begin van de periode" #. module: account #: model:account.account.type,name:account.account_type_asset_view1 msgid "Asset View" -msgstr "" +msgstr "Afschrijvingsweergave" #. module: account #: model:ir.model,name:account.model_account_common_account_report @@ -5853,6 +6237,9 @@ msgid "" "that you should have your last line with the type 'Balance' to ensure that " "the whole amount will be treated." msgstr "" +"Kies hier de waardering die van toepassing is op de betalingslijn. U moet " +"minimaal een lijn van het type 'Saldo' hebben om er zeker van te zijn dat " +"het volledige bedrag wordt verwerkt." #. module: account #: field:account.partner.ledger,initial_balance:0 @@ -5900,12 +6287,12 @@ msgstr "Journaal afsluitingsboekingen" #. module: account #: view:account.invoice:0 msgid "Draft Refund " -msgstr "" +msgstr "Voorlopige creditnota " #. module: account #: view:cash.box.in:0 msgid "Fill in this form if you put money in the cash register:" -msgstr "" +msgstr "Vul dit formulier als u geld wilt overmaken naar het kasboek:" #. module: account #: field:account.payment.term.line,value_amount:0 @@ -5964,7 +6351,7 @@ msgstr "Betaaldatum" #: view:account.bank.statement:0 #: field:account.bank.statement,opening_details_ids:0 msgid "Opening Cashbox Lines" -msgstr "" +msgstr "Kas openen" #. module: account #: view:account.analytic.account:0 @@ -5989,7 +6376,7 @@ msgstr "Bedrag valuta" #. module: account #: selection:res.company,tax_calculation_rounding_method:0 msgid "Round per Line" -msgstr "" +msgstr "Afronding per lijn" #. module: account #: report:account.analytic.account.balance:0 @@ -6045,7 +6432,7 @@ msgstr "" #: code:addons/account/wizard/account_report_aged_partner_balance.py:56 #, python-format msgid "You must set a period length greater than 0." -msgstr "" +msgstr "De lengte van de periode moet groter zijn dan 0." #. module: account #: view:account.fiscal.position.template:0 @@ -6056,7 +6443,7 @@ msgstr "Sjabloon fiscale posities" #. module: account #: view:account.invoice:0 msgid "Draft Refund" -msgstr "" +msgstr "Voorlopige creditnota" #. module: account #: view:account.analytic.chart:0 @@ -6094,6 +6481,7 @@ msgstr "Afpunten met afschrijving" #: constraint:account.move.line:0 msgid "You cannot create journal items on an account of type view." msgstr "" +"U kunt geen boekingslijnen maken voor een rekening van het type Weergave." #. module: account #: selection:account.payment.term.line,value:0 @@ -6107,6 +6495,7 @@ msgstr "Vast bedrag" #, python-format msgid "You cannot change the tax, you should remove and recreate lines." msgstr "" +"U kunt de btw niet veranderen; verwijder eerst de lijnen en maak ze opnieuw." #. module: account #: model:ir.actions.act_window,name:account.action_account_automatic_reconcile @@ -6231,7 +6620,7 @@ msgstr "Fiscale koppeling" #. module: account #: view:account.config.settings:0 msgid "Select Company" -msgstr "" +msgstr "Kies een firma" #. module: account #: model:ir.actions.act_window,name:account.action_account_state_open @@ -6295,6 +6684,18 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klik om een rekening toe te voegen.\n" +"

\n" +" Een rekening is deel van een boekhoudplan waarop uw bedrijf\n" +" allerlei debet- en creditverrichtingen kan registreren.\n" +" Jaarrekeningen worden in twee hoofdblokken neergelegd: de\n" +" balans en de resultatenrekening.\n" +" De jaarrekening van een bedrijf is wettelijk vereist om " +"bepaalde info\n" +" openbaar te maken.\n" +"

\n" +" " #. module: account #: view:account.invoice.report:0 @@ -6305,7 +6706,7 @@ msgstr "# lijnen" #. module: account #: view:account.invoice:0 msgid "(update)" -msgstr "" +msgstr "(bijwerken)" #. module: account #: field:account.aged.trial.balance,filter:0 @@ -6345,7 +6746,7 @@ msgstr "Saldo zoals berekend volgens het beginsaldo en de transactielijnen." #. module: account #: field:account.journal,loss_account_id:0 msgid "Loss Account" -msgstr "" +msgstr "Verliesrekening" #. module: account #: field:account.tax,account_collected_id:0 @@ -6368,6 +6769,10 @@ msgid "" "created by the system on document validation (invoices, bank statements...) " "and will be created in 'Posted' status." msgstr "" +"Alle manuele boekingen zijn doorgaans 'Ongeboekt', maar u kunt per journaal " +"de optie instellen om deze status over te slaan. Manuele boekingen worden " +"dan onmiddellijk als Geboekt beschouwd, op dezelfde manier als door het " +"systeem gemaakte boekingen (facturen, uittreksels, ...)." #. module: account #: field:account.payment.term.line,days:0 @@ -6431,7 +6836,7 @@ msgstr "Firma voor dit journaal" #. module: account #: help:account.config.settings,group_multi_currency:0 msgid "Allows you multi currency environment" -msgstr "" +msgstr "Werken met meerdere\tmunten" #. module: account #: view:account.subscription:0 @@ -6523,6 +6928,8 @@ msgid "" "You cannot cancel an invoice which is partially paid. You need to " "unreconcile related payment entries first." msgstr "" +"U kunt een gedeeltelijk betaalde factuur niet annuleren. U moet eerst de " +"afpunting ongedaan maken." #. module: account #: field:product.template,taxes_id:0 @@ -6557,6 +6964,15 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klik om een creditnota te boeken die u van een leverancier " +"hebt ontvangen.\n" +"

\n" +" Naast manueel een creditnota boeken, kunt u ook creditnota's " +"laten maken\n" +" vanuit de betrokken aankoopfactuur.\n" +"

\n" +" " #. module: account #: field:account.tax,type:0 @@ -6606,7 +7022,7 @@ msgstr "Onderliggende plat tonen" #. module: account #: view:account.config.settings:0 msgid "Bank & Cash" -msgstr "" +msgstr "Bank en kas" #. module: account #: help:account.fiscalyear.close.state,fy_id:0 @@ -6692,13 +7108,15 @@ msgstr "Te ontvangen" #. module: account #: constraint:account.move.line:0 msgid "You cannot create journal items on closed account." -msgstr "" +msgstr "U kunt niet boeken op een afgesloten rekening." #. module: account #: code:addons/account/account_invoice.py:594 #, python-format msgid "Invoice line account's company and invoice's compnay does not match." msgstr "" +"De firma van de rekening op de factuur stemt niet overeen met de firma op de " +"factuur." #. module: account #: view:account.invoice:0 @@ -6719,7 +7137,7 @@ msgstr "De gekoppelde munt indien deze verschilt van de firmamunt." #: code:addons/account/installer.py:48 #, python-format msgid "Custom" -msgstr "" +msgstr "Aangepast" #. module: account #: view:account.analytic.account:0 @@ -6731,6 +7149,7 @@ msgstr "Huidig" #, python-format msgid "Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining)." msgstr "" +"Factuur '%s' is gedeeltelijk betaald: %s%s of %s%s (%s%s blijft open)" #. module: account #: field:account.journal,cashbox_line_ids:0 @@ -6746,13 +7165,14 @@ msgstr "Vermogen" #. module: account #: field:account.journal,internal_account_id:0 msgid "Internal Transfers Account" -msgstr "" +msgstr "Interne overboekingen" #. module: account #: code:addons/account/wizard/pos_box.py:33 #, python-format msgid "Please check that the field 'Journal' is set on the Bank Statement" msgstr "" +"Kijk na of het veld 'Journaal' is ingevuld op het rekeninguittreksel." #. module: account #: selection:account.tax,type:0 @@ -6763,7 +7183,7 @@ msgstr "Percentage" #. module: account #: selection:account.config.settings,tax_calculation_rounding_method:0 msgid "Round globally" -msgstr "" +msgstr "Globaal afronden" #. module: account #: selection:account.report.general.ledger,sortby:0 @@ -6795,7 +7215,7 @@ msgstr "Factuurnummer" #. module: account #: field:account.bank.statement,difference:0 msgid "Difference" -msgstr "" +msgstr "Verschil" #. module: account #: help:account.tax,include_base_amount:0 @@ -6834,6 +7254,8 @@ msgid "" "There is no opening/closing period defined, please create one to set the " "initial balance." msgstr "" +"Er is geen openings–/afsluitperiode ingesteld; maak er een voor de " +"openingsbalans." #. module: account #: help:account.tax.template,sequence:0 @@ -6860,12 +7282,12 @@ msgstr "" #: code:addons/account/wizard/account_report_aged_partner_balance.py:58 #, python-format msgid "User Error!" -msgstr "" +msgstr "Gebruikersfout" #. module: account #: view:account.open.closed.fiscalyear:0 msgid "Discard" -msgstr "" +msgstr "Verwerpen" #. module: account #: selection:account.account,type:0 @@ -6883,7 +7305,7 @@ msgstr "Analytische boekingslijnen" #. module: account #: field:account.config.settings,has_default_company:0 msgid "Has default company" -msgstr "" +msgstr "Heeft standaardfirma" #. module: account #: view:account.fiscalyear.close:0 @@ -7027,6 +7449,8 @@ msgid "" "Percentages for Payment Term Line must be between 0 and 1, Example: 0.02 for " "2%." msgstr "" +"Percentages voor betalingslijnen moeten tussen 0 en 1 liggen, bijvoorbeeld " +"0,02 voor 2%" #. module: account #: report:account.invoice:0 @@ -7047,7 +7471,7 @@ msgstr "Kostencategorierekening" #. module: account #: sql_constraint:account.tax:0 msgid "Tax Name must be unique per company!" -msgstr "" +msgstr "Het btw-nummer moet uniek zijn per bedrijf" #. module: account #: view:account.bank.statement:0 @@ -7092,7 +7516,7 @@ msgstr "" #: code:addons/account/account_invoice.py:1321 #, python-format msgid "Customer invoice" -msgstr "" +msgstr "Verkoopfactuur" #. module: account #: selection:account.account.type,report_type:0 @@ -7176,13 +7600,13 @@ msgstr "Winst en verlies (kostenrekening)" #. module: account #: field:account.bank.statement,total_entry_encoding:0 msgid "Total Transactions" -msgstr "" +msgstr "Totaal verrichtingen" #. module: account #: code:addons/account/account.py:635 #, python-format msgid "You cannot remove an account that contains journal items." -msgstr "" +msgstr "U kunt een rekening met boekingen niet verwijderen." #. module: account #: code:addons/account/account_move_line.py:1095 @@ -7226,7 +7650,7 @@ msgstr "Manueel" #: code:addons/account/wizard/account_report_aged_partner_balance.py:58 #, python-format msgid "You must set a start date." -msgstr "" +msgstr "U moet een begindatum invullen." #. module: account #: view:account.automatic.reconcile:0 @@ -7272,7 +7696,7 @@ msgstr "Boekingen" #: code:addons/account/wizard/account_invoice_refund.py:147 #, python-format msgid "No period found on the invoice." -msgstr "" +msgstr "Geen periode gedefinieerd voor de factuur" #. module: account #: help:account.partner.ledger,page_split:0 @@ -7377,7 +7801,7 @@ msgstr "Volledige btw-instellingen" #, python-format msgid "" "Selected Entry Lines does not have any account move enties in draft state." -msgstr "" +msgstr "De geselecteerde boekingslijnen hebben geen voorlopige status." #. module: account #: view:account.chart.template:0 @@ -7407,6 +7831,8 @@ msgid "" "Configuration error!\n" "The currency chosen should be shared by the default accounts too." msgstr "" +"Configuratiefout: de gekozen munt moet door de standaardrekeningen worden " +"gedeeld." #. module: account #: code:addons/account/account.py:2251 @@ -7433,7 +7859,7 @@ msgstr "" #. module: account #: field:account.config.settings,module_account_voucher:0 msgid "Manage customer payments" -msgstr "" +msgstr "Betalingen van klanten opvolgen" #. module: account #: help:report.invoice.created,origin:0 @@ -7452,7 +7878,7 @@ msgstr "Onderliggende codes" msgid "" "Error!\n" "The start date of a fiscal year must precede its end date." -msgstr "" +msgstr "De begindatum van het boekjaar moet voor de einddatum liggen." #. module: account #: view:account.tax.template:0 @@ -7468,7 +7894,7 @@ msgstr "Verkoopfacturen" #. module: account #: view:account.tax:0 msgid "Misc" -msgstr "" +msgstr "Diversen" #. module: account #: view:account.analytic.line:0 @@ -7491,6 +7917,9 @@ msgid "" "Make sure you have configured payment terms properly.\n" "The latest payment term line should be of the \"Balance\" type." msgstr "" +"Een boeking die niet in evenwicht is, kan niet worden gevalideerd.\n" +"Zorg ervoor dat u betalingsvoorwaarden hebt ingesteld.\n" +"Er moet ten minste een betalingslijn van het type 'Saldo' bestaan." #. module: account #: model:process.transition,note:account.process_transition_invoicemanually0 @@ -7526,6 +7955,7 @@ msgstr "Brondocument" #, python-format msgid "There is no expense account defined for this product: \"%s\" (id:%d)." msgstr "" +"Er is geen kostenrekening gedefinieerd voor dit product: \"%s\" (id:%d)" #. module: account #: constraint:account.account:0 @@ -7534,6 +7964,9 @@ msgid "" "You cannot define children to an account with internal type different of " "\"View\"." msgstr "" +"Configuratiefout \n" +"U kunt geen onderliggende rekeningen maken voor een rekening met een intern " +"type dat niet gelijk is aan \"Weergave\"." #. module: account #: model:ir.model,name:account.model_accounting_report @@ -7543,7 +7976,7 @@ msgstr "Boekhoudkundig rapport" #. module: account #: field:account.analytic.line,currency_id:0 msgid "Account Currency" -msgstr "" +msgstr "Rekeningvaluta" #. module: account #: report:account.invoice:0 @@ -7557,6 +7990,8 @@ msgid "" "You can not delete an invoice which is not cancelled. You should refund it " "instead." msgstr "" +"U kunt een openstaande of betaalde factuur niet verwijderen. U maakt het " +"best een creditnota." #. module: account #: help:account.tax,amount:0 @@ -7608,7 +8043,7 @@ msgstr "Kostenrekening openingsboekingen" #. module: account #: view:account.invoice:0 msgid "Customer Reference" -msgstr "" +msgstr "Referentie klant" #. module: account #: field:account.account.template,parent_id:0 @@ -7624,7 +8059,7 @@ msgstr "Prijs" #: view:account.bank.statement:0 #: field:account.bank.statement,closing_details_ids:0 msgid "Closing Cashbox Lines" -msgstr "" +msgstr "Kas sluiten" #. module: account #: view:account.bank.statement:0 @@ -7665,7 +8100,7 @@ msgstr "Groepering per jaar van factuurdatum" #. module: account #: field:account.config.settings,purchase_tax_rate:0 msgid "Purchase tax (%)" -msgstr "" +msgstr "Aankoopbtw (%)" #. module: account #: help:res.partner,credit:0 @@ -7680,7 +8115,7 @@ msgstr "Boekingen niet in evenwicht" #. module: account #: model:ir.actions.act_window,name:account.open_account_charts_modules msgid "Chart Templates" -msgstr "" +msgstr "Boekhoudplansjablonen" #. module: account #: field:account.journal.period,icon:0 @@ -7731,7 +8166,7 @@ msgstr "Opbrengstenrekening openingsboekingen" #. module: account #: field:account.config.settings,group_proforma_invoices:0 msgid "Allow pro-forma invoices" -msgstr "" +msgstr "Prof-formafacturen toelaten" #. module: account #: view:account.bank.statement:0 @@ -7761,12 +8196,12 @@ msgstr "Boekingen maken" #. module: account #: model:ir.model,name:account.model_cash_box_out msgid "cash.box.out" -msgstr "" +msgstr "cash.box.out" #. module: account #: help:account.config.settings,currency_id:0 msgid "Main currency of the company." -msgstr "" +msgstr "Hoofdmunt van de firma" #. module: account #: model:ir.ui.menu,name:account.menu_finance_reports @@ -7794,7 +8229,7 @@ msgstr "Journaal" #. module: account #: field:account.config.settings,tax_calculation_rounding_method:0 msgid "Tax calculation rounding method" -msgstr "" +msgstr "Afrondingsmethode voor btw-berekening" #. module: account #: model:process.node,name:account.process_node_paidinvoice0 @@ -7811,6 +8246,12 @@ msgid "" " with the invoice. You will not be able " "to modify the credit note." msgstr "" +"Gebruik deze optie als u een factuur wilt annuleren die u niet had mogen " +"boeken.\n" +" De creditnota wordt gemaakt, goedgekeurd " +"en afgepunt\n" +" met de factuur. U kunt de creditnota " +"niet wijzigen." #. module: account #: help:account.partner.reconcile.process,next_partner_id:0 @@ -7845,6 +8286,8 @@ msgid "" "There is no default credit account defined \n" "on journal \"%s\"." msgstr "" +"Er is geen standaard debetrekening gedefinieerd\n" +"voor het journaal \"%s\"" #. module: account #: view:account.invoice.line:0 @@ -7883,6 +8326,24 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klik om een nieuwe analytische rekening toe te voegen.\n" +"

\n" +" Het gewone boekhoudplan volgt de wettelijke structuur van uw " +"land.\n" +" Analytische rekeningen geven eerdere de behoeften van het " +"bedrijf weer\n" +" qua rapportering van kosten en opbrengsten.\n" +"

\n" +" Deze rekeningen zijn doorgaans contracten, projecten, " +"producten of\n" +" afdelingen. Het merendeel van de OpenERP-bewerkingen " +"(facturen,\n" +" uurroosters, onkosten, enz.) genereren analytische boekingen " +"op de\n" +" betrokken rekening.\n" +"

\n" +" " #. module: account #: model:account.account.type,name:account.data_account_type_view @@ -8007,6 +8468,8 @@ msgid "" "This date will be used as the invoice date for credit note and period will " "be chosen accordingly!" msgstr "" +"Deze datum wordt gebruikt als documentdatum voor de creditnota; de periode " +"wordt gekozen in functie van de datum." #. module: account #: view:product.template:0 @@ -8020,6 +8483,7 @@ msgid "" "You have to set a code for the bank account defined on the selected chart of " "accounts." msgstr "" +"U moet een code ingeven voor de bankrekening van het gekozen boekhoudplan." #. module: account #: model:ir.ui.menu,name:account.menu_manual_reconcile @@ -8099,7 +8563,7 @@ msgstr "Vak" #. module: account #: field:account.config.settings,sale_refund_sequence_prefix:0 msgid "Credit note sequence" -msgstr "" +msgstr "Creditnotanummering" #. module: account #: model:ir.actions.act_window,name:account.action_validate_account_move @@ -8113,7 +8577,7 @@ msgstr "Boekingen definitief maken" #. module: account #: field:account.journal,centralisation:0 msgid "Centralised Counterpart" -msgstr "" +msgstr "Gecentraliseerde tegenboeking" #. module: account #: selection:account.bank.statement.line,type:0 @@ -8187,12 +8651,12 @@ msgstr "Hoofdrapport" msgid "" "Error!\n" "You cannot create recursive accounts." -msgstr "" +msgstr "U kunt niet dezelfde rekeningen maken." #. module: account #: model:ir.model,name:account.model_cash_box_in msgid "cash.box.in" -msgstr "" +msgstr "cash.box.in" #. module: account #: help:account.invoice,move_id:0 @@ -8202,7 +8666,7 @@ msgstr "Koppeling naar automatisch gegenereerde boekingslijnen" #. module: account #: model:ir.model,name:account.model_account_config_settings msgid "account.config.settings" -msgstr "" +msgstr "account.config.settings" #. module: account #: selection:account.config.settings,period:0 @@ -8225,7 +8689,7 @@ msgstr "Berekend saldo" #: code:addons/account/static/src/js/account_move_reconciliation.js:89 #, python-format msgid "You must choose at least one record." -msgstr "" +msgstr "U dient ten minste een record te kiezen." #. module: account #: field:account.account,parent_id:0 @@ -8237,7 +8701,7 @@ msgstr "Hoofd" #: code:addons/account/account_cash_statement.py:292 #, python-format msgid "Profit" -msgstr "" +msgstr "Winst" #. module: account #: help:account.payment.term.line,days2:0 @@ -8283,7 +8747,7 @@ msgstr "Kaslijn" #. module: account #: field:account.installer,charts:0 msgid "Accounting Package" -msgstr "" +msgstr "Boekhoudpakket" #. module: account #: report:account.third_party_ledger:0 @@ -8298,7 +8762,7 @@ msgstr "Relatiehistoriek" #: code:addons/account/account_invoice.py:1340 #, python-format msgid "%s cancelled." -msgstr "" +msgstr "%s geannuleerd." #. module: account #: code:addons/account/account.py:652 @@ -8313,11 +8777,12 @@ msgstr "Waarschuwing" #: help:account.invoice,message_unread:0 msgid "If checked new messages require your attention." msgstr "" +"Als dit is ingeschakeld, zijn er nieuwe berichten die uw aandacht vragen." #. module: account #: field:res.company,tax_calculation_rounding_method:0 msgid "Tax Calculation Rounding Method" -msgstr "" +msgstr "Afrondingsmethode voor btw-berekening" #. module: account #: field:account.entries.report,move_line_state:0 @@ -8471,7 +8936,7 @@ msgstr "Totaal resterend" #. module: account #: view:account.bank.statement:0 msgid "Opening Cash Control" -msgstr "" +msgstr "Controle op openingssaldo kas" #. module: account #: model:process.node,note:account.process_node_invoiceinvoice0 @@ -8511,7 +8976,7 @@ msgstr "Kostenstaat" #. module: account #: view:account.config.settings:0 msgid "No Fiscal Year Defined for This Company" -msgstr "" +msgstr "Geen boekjaar ingesteld voor deze firma" #. module: account #: view:account.invoice:0 @@ -8542,7 +9007,7 @@ msgstr "Aankoopcreditnotajournaal" #: code:addons/account/account.py:1292 #, python-format msgid "Please define a sequence on the journal." -msgstr "" +msgstr "Gelieve een reeks in te stellen voor het journaal." #. module: account #: help:account.tax.template,amount:0 @@ -8571,6 +9036,9 @@ msgid "" "recalls.\n" " This installs the module account_followup." msgstr "" +"Hiermee kunnen brieven voor openstaande facturen worden gestuurd, op " +"meerdere niveaus.\n" +"\t\t\tHiermee wordt de module account_followup geïnstalleerd." #. module: account #: field:account.automatic.reconcile,period_id:0 @@ -8615,12 +9083,12 @@ msgstr "Nettototaal:" #: code:addons/account/wizard/account_report_common.py:153 #, python-format msgid "Select a starting and an ending period." -msgstr "" +msgstr "Begin- en eindperiode kiezen" #. module: account #: field:account.config.settings,sale_sequence_next:0 msgid "Next invoice number" -msgstr "" +msgstr "Volgende factuurnummer" #. module: account #: model:ir.ui.menu,name:account.menu_finance_generic_reporting @@ -8678,6 +9146,8 @@ msgid "" "This wizard will remove the end of year journal entries of selected fiscal " "year. Note that you can run this wizard many times for the same fiscal year." msgstr "" +"Deze assistent verwijdert de afsluitboekingen van het gekozen boekjaar. U " +"kunt deze assistent meermaals voor hetzelfde boekjaar opstarten." #. module: account #: report:account.invoice:0 @@ -8769,7 +9239,7 @@ msgstr "Automatische import van uittreksel" #: code:addons/account/account_invoice.py:370 #, python-format msgid "Unknown Error!" -msgstr "" +msgstr "Onbekende fout" #. module: account #: model:ir.model,name:account.model_account_move_bank_reconcile @@ -8779,7 +9249,7 @@ msgstr "Bankafpuntingsbeweging" #. module: account #: view:account.config.settings:0 msgid "Apply" -msgstr "" +msgstr "Toepassen" #. module: account #: field:account.financial.report,account_type_ids:0 @@ -8795,6 +9265,8 @@ msgid "" "You cannot use this general account in this journal, check the tab 'Entry " "Controls' on the related journal." msgstr "" +"U kunt deze grootboekrekening niet gebruiken in dit journaal. Kijk het " +"tabblad 'Boekingscontrole' na voor het journaal." #. module: account #: view:account.payment.term.line:0 @@ -9040,7 +9512,7 @@ msgstr "Toegelaten rekeningen (leeg indien geen controle)" #. module: account #: field:account.config.settings,sale_tax_rate:0 msgid "Sales tax (%)" -msgstr "" +msgstr "Verkoopbtw (%)" #. module: account #: model:ir.actions.act_window,name:account.action_account_analytic_account_tree2 @@ -9145,7 +9617,7 @@ msgstr "" #: code:addons/account/account_move_line.py:996 #, python-format msgid "The account move (%s) for centralisation has been confirmed." -msgstr "" +msgstr "De beweging (%s) voor de centralisering is bevestigd." #. module: account #: report:account.analytic.account.journal:0 @@ -9184,6 +9656,8 @@ msgid "" "created. If you leave that field empty, it will use the same journal as the " "current invoice." msgstr "" +"U kunt hier het journaal kiezen voor de creditnota. Als u dit veld leeglaat, " +"wordt het journaal van de factuur gebruikt." #. module: account #: help:account.bank.statement.line,sequence:0 @@ -9213,7 +9687,7 @@ msgstr "Verkeerde model" #: view:account.tax.code.template:0 #: view:account.tax.template:0 msgid "Tax Template" -msgstr "" +msgstr "Btw-sjabloon" #. module: account #: field:account.invoice.refund,period:0 @@ -9233,6 +9707,10 @@ msgid "" "some non legal fields or you must unreconcile first.\n" "%s." msgstr "" +"U kunt een afgepunte boeking niet wijzigen. U kunt alleen bepaalde niet-" +"wettelijke velden veranderen. Anders moet u de afpunting van de boeking " +"eerst ongedaan maken.\n" +"%s" #. module: account #: help:account.financial.report,sign:0 @@ -9279,7 +9757,7 @@ msgstr "Voorlopige facturen worden gecontroleerd, gevalideerd en afgedrukt." #: field:account.bank.statement,message_is_follower:0 #: field:account.invoice,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "Is een volger" #. module: account #: view:account.move:0 @@ -9295,11 +9773,14 @@ msgid "" "You cannot select an account type with a deferral method different of " "\"Unreconciled\" for accounts with internal type \"Payable/Receivable\"." msgstr "" +"Configuratiefout\n" +"U kunt geen rekeningtype kiezen met een andere methode dan \"Niet afgepunt\" " +"voor rekeningen van het type \"Te ontvangen/Te betalen\"." #. module: account #: field:account.config.settings,has_fiscal_year:0 msgid "Company has a fiscal year" -msgstr "" +msgstr "De firma heeft een boekjaar" #. module: account #: help:account.tax,child_depend:0 @@ -9315,7 +9796,7 @@ msgstr "" #: code:addons/account/account.py:633 #, python-format msgid "You cannot deactivate an account that contains journal items." -msgstr "" +msgstr "U kunt een rekening met boekingen niet op inactief zetten." #. module: account #: selection:account.tax,applicable_type:0 @@ -9371,7 +9852,7 @@ msgstr "Periode van" #. module: account #: field:account.cashbox.line,pieces:0 msgid "Unit of Currency" -msgstr "" +msgstr "Munteenheid" #. module: account #: code:addons/account/account.py:3137 @@ -9408,7 +9889,7 @@ msgstr "Status Gesloten voor boekjaar en perioden" #. module: account #: field:account.config.settings,purchase_refund_journal_id:0 msgid "Purchase refund journal" -msgstr "" +msgstr "Aankoopcreditnotajournaal" #. module: account #: view:account.analytic.line:0 @@ -9432,7 +9913,7 @@ msgstr "Factuur maken" #. module: account #: model:ir.actions.act_window,name:account.action_account_configuration_installer msgid "Configure Accounting Data" -msgstr "" +msgstr "Boekhouding instellen" #. module: account #: field:wizard.multi.charts.accounts,purchase_tax_rate:0 @@ -9452,6 +9933,8 @@ msgid "" "Please check that the field 'Internal Transfers Account' is set on the " "payment method '%s'." msgstr "" +"Kijk na of het veld 'Interne overdrachtsrekening' is ingesteld op " +"betalingsvoorwaarde '%s'." #. module: account #: field:account.vat.declaration,display_detail:0 @@ -9492,6 +9975,16 @@ msgid "" "related journal entries may or may not be reconciled. \n" "* The 'Cancelled' status is used when user cancel invoice." msgstr "" +" * 'Voorlopig' wordt gebruikt als een gebruiker een nieuwe, onbevestigde " +"factuur ingeeft. \n" +"* 'Pro forma' wordt gebruikt voor een pro-formafactuur; de factuur heeft " +"geen factuurnummer. \n" +"* 'Open' wordt gebruikt voor een openstaande factuur; er wordt een " +"factuurnummer toegekend. De factuur blijft in deze status tot de factuur " +"wordt betaald. \n" +"* 'Betaald' wordt automatisch toegekend zodra de factuur is betaald. De " +"gekoppelde boekingen kunnen al dan niet zijn afgepunt.\n" +"* 'Geannuleerd' betekent dat de gebruiker de factuur heeft geannuleerd." #. module: account #: field:account.period,date_stop:0 @@ -9511,7 +10004,7 @@ msgstr "Financiële rapporten" #. module: account #: model:account.account.type,name:account.account_type_liability_view1 msgid "Liability View" -msgstr "" +msgstr "Passivaweergave" #. module: account #: report:account.account.balance:0 @@ -9559,7 +10052,7 @@ msgstr "Bedrijven die verwijzen naar de relatie" #. module: account #: view:account.invoice:0 msgid "Ask Refund" -msgstr "" +msgstr "Creditnota vragen" #. module: account #: view:account.move.line:0 @@ -9599,12 +10092,12 @@ msgstr "Klanten" #. module: account #: field:account.config.settings,purchase_refund_sequence_prefix:0 msgid "Supplier credit note sequence" -msgstr "" +msgstr "Nummering aankoopcreditnota's" #. module: account #: field:account.config.settings,purchase_sequence_next:0 msgid "Next supplier invoice number" -msgstr "" +msgstr "Volgende aankoopfactuurnummer" #. module: account #: help:account.config.settings,module_account_payment:0 @@ -9634,6 +10127,8 @@ msgstr "Rekeninguittreksels" #, python-format msgid "To reconcile the entries company should be the same for all entries." msgstr "" +"Om de boekingen te kunnen afpunten, moeten alle boekingen tot hetzelfde " +"bedrijf behoren." #. module: account #: field:account.account,balance:0 @@ -9711,7 +10206,7 @@ msgstr "Filteren op" #: field:account.cashbox.line,number_closing:0 #: field:account.cashbox.line,number_opening:0 msgid "Number of Units" -msgstr "" +msgstr "Aantal eenheden" #. module: account #: model:process.node,note:account.process_node_manually0 @@ -9736,12 +10231,12 @@ msgstr "Beweging" #: code:addons/account/wizard/account_period_close.py:51 #, python-format msgid "Invalid Action!" -msgstr "" +msgstr "Ongeldige actie" #. module: account #: view:account.bank.statement:0 msgid "Date / Period" -msgstr "" +msgstr "Datum / periode" #. module: account #: report:account.central.journal:0 @@ -9760,11 +10255,13 @@ msgid "" "The period is invalid. Either some periods are overlapping or the period's " "dates are not matching the scope of the fiscal year." msgstr "" +"De periode is niet geldig. Er kan overlapping zijn of de periodedatums " +"vallen niet binnen het boekjaar." #. module: account #: report:account.overdue:0 msgid "There is nothing due with this customer." -msgstr "" +msgstr "Er zijn geen openstaande posten voor deze klant." #. module: account #: help:account.tax,account_paid_id:0 @@ -9772,6 +10269,8 @@ msgid "" "Set the account that will be set by default on invoice tax lines for " "refunds. Leave empty to use the expense account." msgstr "" +"Stel de standaardrekening in voor btw-lijnen van creditnota's. Laat leeg als " +"u een kostenrekening wilt gebruiken." #. module: account #: help:account.addtmpl.wizard,cparent_id:0 @@ -9784,7 +10283,7 @@ msgstr "" #. module: account #: report:account.invoice:0 msgid "Source" -msgstr "" +msgstr "Bron" #. module: account #: selection:account.model.line,date_maturity:0 @@ -9805,11 +10304,12 @@ msgid "" "This field contains the information related to the numbering of the journal " "entries of this journal." msgstr "" +"Dit veld bevat de informatie over de nummering van boekingen in dit journaal." #. module: account #: field:account.invoice,sent:0 msgid "Sent" -msgstr "" +msgstr "Verzonden" #. module: account #: view:account.unreconcile.reconcile:0 @@ -9825,7 +10325,7 @@ msgstr "Gemeenschappelijk rapport" #: field:account.config.settings,default_sale_tax:0 #: field:account.config.settings,sale_tax:0 msgid "Default sale tax" -msgstr "" +msgstr "Standaard verkoopbtw" #. module: account #: report:account.overdue:0 @@ -9836,7 +10336,7 @@ msgstr "Saldo:" #: code:addons/account/account.py:1542 #, python-format msgid "Cannot create moves for different companies." -msgstr "" +msgstr "Kan geen boekingen maken tussen verschillende firma's." #. module: account #: view:account.invoice.report:0 @@ -9880,6 +10380,8 @@ msgid "" "Credit note base on this type. You can not Modify and Cancel if the invoice " "is already reconciled" msgstr "" +"Creditnota voor dit type. U kunt niet wijzigen of annuleren als de factuur " +"al is afgepunt." #. module: account #: report:account.account.balance:0 @@ -9912,7 +10414,7 @@ msgstr "Eindperiode" #. module: account #: model:account.account.type,name:account.account_type_expense_view1 msgid "Expense View" -msgstr "" +msgstr "Kostenweergave" #. module: account #: field:account.move.line,date_maturity:0 @@ -9923,7 +10425,7 @@ msgstr "Vervaldatum" #: code:addons/account/account.py:1459 #, python-format msgid " Centralisation" -msgstr "" +msgstr " Centralisering" #. module: account #: help:account.journal,type:0 @@ -10005,7 +10507,7 @@ msgstr "Voorlopige facturen" #: view:cash.box.in:0 #: model:ir.actions.act_window,name:account.action_cash_box_in msgid "Put Money In" -msgstr "" +msgstr "Geld in kas" #. module: account #: selection:account.account.type,close_method:0 @@ -10063,7 +10565,7 @@ msgstr "Van analytische rekeningen" #. module: account #: view:account.installer:0 msgid "Configure your Fiscal Year" -msgstr "" +msgstr "Boekjaar configureren" #. module: account #: field:account.period,name:0 @@ -10077,6 +10579,8 @@ msgid "" "Selected invoice(s) cannot be cancelled as they are already in 'Cancelled' " "or 'Done' state." msgstr "" +"De geselecteerde factu(u)r(en) kunnen niet worden geannuleerd, omdat ze al " +"geannuleerd of voltooid zijn." #. module: account #: report:account.analytic.account.quantity_cost_ledger:0 @@ -10111,6 +10615,10 @@ msgid "" "some non legal fields or you must unconfirm the journal entry first.\n" "%s." msgstr "" +"U kunt een bevestigde boeking niet wijzigen. U kunt alleen bepaalde niet-" +"wettelijke velden veranderen. Anders moet u de bevestiging van de boeking " +"eerst ongedaan maken.\n" +"%s" #. module: account #: help:account.config.settings,module_account_budget:0 @@ -10175,12 +10683,12 @@ msgstr "Credit" #. module: account #: view:account.invoice:0 msgid "Draft Invoice " -msgstr "" +msgstr "Voorlopige factuur " #. module: account #: selection:account.invoice.refund,filter_refund:0 msgid "Cancel: create credit note and reconcile" -msgstr "" +msgstr "Annuleren: maak een creditnota en punt af" #. module: account #: model:ir.ui.menu,name:account.menu_account_general_journal @@ -10196,7 +10704,7 @@ msgstr "Boekingsmodel" #: code:addons/account/account.py:1058 #, python-format msgid "Start period should precede then end period." -msgstr "" +msgstr "De beginperiode moet voor de eindperiode liggen" #. module: account #: field:account.invoice,number:0 @@ -10281,7 +10789,7 @@ msgstr "Te rapporteren winst (verlies)" #: code:addons/account/account_invoice.py:368 #, python-format msgid "There is no Sale/Purchase Journal(s) defined." -msgstr "" +msgstr "Er is geen aankoop/verkoopdagboek ingesteld." #. module: account #: view:account.move.line.reconcile.select:0 @@ -10359,7 +10867,7 @@ msgstr "Intern type" #. module: account #: field:account.subscription.generate,date:0 msgid "Generate Entries Before" -msgstr "" +msgstr "Boekingen genereren voor" #. module: account #: model:ir.actions.act_window,name:account.action_subscription_form_running @@ -10459,6 +10967,8 @@ msgstr "Statussen" #: help:product.template,property_account_income:0 msgid "This account will be used to value outgoing stock using sale price." msgstr "" +"Deze rekening dient voor de voorraadwaardering van de uitgaande voorraad op " +"basis van de verkoopprijs." #. module: account #: field:account.invoice,check_total:0 @@ -10481,12 +10991,12 @@ msgstr "Totaal" #: code:addons/account/wizard/account_invoice_refund.py:109 #, python-format msgid "Cannot %s draft/proforma/cancel invoice." -msgstr "" +msgstr "Kan voorlopige/pro forma/geannuleerde factuur niet %s." #. module: account #: field:account.tax,account_analytic_paid_id:0 msgid "Refund Tax Analytic Account" -msgstr "" +msgstr "Analytische rekening btw op creditnota" #. module: account #: view:account.move.bank.reconcile:0 @@ -10553,7 +11063,7 @@ msgstr "Vervaldatum" #: field:cash.box.in,name:0 #: field:cash.box.out,name:0 msgid "Reason" -msgstr "" +msgstr "Reden" #. module: account #: selection:account.partner.ledger,filter:0 @@ -10609,7 +11119,7 @@ msgstr "Lege rekeningen? " #: code:addons/account/account_move_line.py:1046 #, python-format msgid "Unable to change tax!" -msgstr "" +msgstr "Kan btw niet veranderen" #. module: account #: constraint:account.bank.statement:0 @@ -10658,7 +11168,7 @@ msgstr "De factuur heeft status Voltooid." #. module: account #: field:account.config.settings,module_account_followup:0 msgid "Manage customer payment follow-ups" -msgstr "" +msgstr "Betalingen van klanten opvolgen via aanmaningen" #. module: account #: model:ir.model,name:account.model_report_account_sales @@ -10734,7 +11244,7 @@ msgstr "Klanten" #: code:addons/account/account_move_line.py:776 #, python-format msgid "Already reconciled." -msgstr "" +msgstr "Al afgepunt" #. module: account #: selection:account.model.line,date_maturity:0 @@ -10788,7 +11298,7 @@ msgstr "Manueel" #: help:account.move,balance:0 msgid "" "This is a field only used for internal purpose and shouldn't be displayed" -msgstr "" +msgstr "Dit is een veld voor intern gebruik dat niet moet worden getoond." #. module: account #: selection:account.entries.report,month:0 @@ -10809,6 +11319,7 @@ msgstr "Groepering per maand van factuurdatum" #, python-format msgid "There is no income account defined for this product: \"%s\" (id:%d)." msgstr "" +"Er is geen opbrengstenrekening gedefinieerd voor dit product: \"%s\" (id:%d)" #. module: account #: model:ir.actions.act_window,name:account.action_aged_receivable_graph @@ -10871,6 +11382,7 @@ msgid "" "The selected unit of measure is not compatible with the unit of measure of " "the product." msgstr "" +"De gekozen maateenheid is niet compatibel met de maateenheid van het product." #. module: account #: view:account.fiscal.position:0 @@ -10929,7 +11441,7 @@ msgstr "De opbrengsten– of kostenrekening van het geselecteerde product." #. module: account #: view:account.config.settings:0 msgid "Install more chart templates" -msgstr "" +msgstr "Installeer meer boekhoudplansjablonen." #. module: account #: report:account.general.journal:0 @@ -10977,6 +11489,8 @@ msgid "" "You cannot remove/deactivate an account which is set on a customer or " "supplier." msgstr "" +"U kunt een rekening ingesteld voor een klant of leverancier niet verwijderen " +"of op niet-actief zetten." #. module: account #: model:ir.model,name:account.model_validate_account_move_lines @@ -10988,6 +11502,8 @@ msgstr "Boekingslijnen valideren" msgid "" "The fiscal position will determine taxes and accounts used for the partner." msgstr "" +"De fiscale positie bepaalt de btw-codes en de rekeningen die voor een " +"relatie worden gebruikt." #. module: account #: model:process.node,note:account.process_node_supplierpaidinvoice0 @@ -11003,7 +11519,7 @@ msgstr "De factuur kan worden betaald nadat de afpunting is uitgevoerd." #: code:addons/account/wizard/account_change_currency.py:59 #, python-format msgid "New currency is not configured properly." -msgstr "" +msgstr "De nieuwe munt is niet juist ingesteld." #. module: account #: view:account.account.template:0 @@ -11019,7 +11535,7 @@ msgstr "Manuele factuur-btw" #: code:addons/account/account_invoice.py:538 #, python-format msgid "The payment term of supplier does not have a payment term line." -msgstr "" +msgstr "De betalingsvoorwaarde van de leverancier heeft geen betalingslijn." #. module: account #: field:account.account,parent_right:0 @@ -11032,7 +11548,7 @@ msgstr "Hoofd rechts" #: code:addons/account/static/src/js/account_move_reconciliation.js:80 #, python-format msgid "Never" -msgstr "" +msgstr "Nooit" #. module: account #: model:ir.model,name:account.model_account_addtmpl_wizard @@ -11053,7 +11569,7 @@ msgstr "Relatie" #. module: account #: field:account.account,note:0 msgid "Internal Notes" -msgstr "" +msgstr "Interne notities" #. module: account #: model:ir.actions.act_window,name:account.action_account_fiscalyear @@ -11112,7 +11628,7 @@ msgstr "" #: view:account.bank.statement:0 #: help:account.cashbox.line,number_closing:0 msgid "Closing Unit Numbers" -msgstr "" +msgstr "Nummering afsluiting" #. module: account #: field:account.bank.accounts.wizard,bank_account_id:0 @@ -11178,7 +11694,7 @@ msgstr "" #. module: account #: selection:account.config.settings,tax_calculation_rounding_method:0 msgid "Round per line" -msgstr "" +msgstr "Afronding per lijn" #. module: account #: help:account.move.line,amount_residual_currency:0 diff --git a/addons/account/i18n/pl.po b/addons/account/i18n/pl.po index 038183dbc8c..a8b967a3d1d 100644 --- a/addons/account/i18n/pl.po +++ b/addons/account/i18n/pl.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-03 16:02+0000\n" -"PO-Revision-Date: 2012-12-16 21:03+0000\n" +"PO-Revision-Date: 2012-12-19 17:42+0000\n" "Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) \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-17 04:46+0000\n" -"X-Generator: Launchpad (build 16372)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:45+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -1285,6 +1285,16 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kliknij, aby utworzyć nowy raport kasowy.\n" +"

\n" +" Raport kasowy pozwala rejestrować operacje kasowe.\n" +" Służy do obsługi codziennych płatności w gotówce.\n" +" Po utworzeniu raportu, na początku możesz wprowadzić\n" +" banknoty i monety, które posiadasz w kasetce. A następnie\n" +" rejestrować każdą operację wpłaty i wypłaty.\n" +"

\n" +" " #. module: account #: model:account.account.type,name:account.data_account_type_bank @@ -2964,6 +2974,21 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kliknij, aby utworzyć zapis księgowy.\n" +"

\n" +" Zapis księgowy zawiera kilka pozycji. Każda z nich jest " +"transakcją\n" +" po albo stronie Winien, albo po stronie Ma.\n" +"

\n" +" OpenERP tworzy automatycznie zapisy przy zatwierdzaniu " +"wielu\n" +" dokumentów: faktur, korekt, płatności, wyciągów bankowych, " +"itp.\n" +" Ręcznie powinieneś wprowadzać zapisy tylko dla nietypowych\n" +" operacji.\n" +"

\n" +" " #. module: account #: help:account.invoice,date_due:0 @@ -3860,6 +3885,10 @@ msgid "" "quotations with a button \"Pay with Paypal\" in automated emails or through " "the OpenERP portal." msgstr "" +"Konto paypal (adres email) do otrzymywania płatności online (kartami " +"kredytowymi, itp). Jeśli ustawisz konto paypal, to klient będzie mógł " +"zapłacić za fakturę lub wpłacić przedpłatę przyciskiem \"Płać przez PayPal\" " +"automatycznymi mailami lub w portalu OpenERP." #. module: account #: code:addons/account/account_move_line.py:535 @@ -3870,6 +3899,10 @@ msgid "" "You can create one in the menu: \n" "Configuration/Journals/Journals." msgstr "" +"Nie można znaleźć dziennika typu %s dla tej firmy.\n" +"\n" +"Utwórz go w menu: \n" +"Konfiguracja/Dzienniki/Dzienniki." #. module: account #: model:ir.actions.act_window,name:account.action_account_unreconcile @@ -3920,6 +3953,10 @@ msgid "" "by\n" " your supplier/customer." msgstr "" +"Będziesz mógł edytować i zatwierdzić\n" +" tę korektę od razu lub trzymac ją w \n" +" stanie Projekt do czasu otrzymania\n" +" dokumentu od partnera." #. module: account #: view:validate.account.move.lines:0 @@ -4486,6 +4523,8 @@ msgid "" "Value of Loss or Gain due to changes in exchange rate when doing multi-" "currency transactions." msgstr "" +"Wartości zysków i strat w zależności od zmian w kursie walut przy transakcja " +"wielowalutowych." #. module: account #: view:account.analytic.line:0 @@ -4568,7 +4607,7 @@ msgstr "(Faktura musi mieć skasowane uzgodnienia, jeśli chcesz ją otworzyć)" #. module: account #: field:account.tax,account_analytic_collected_id:0 msgid "Invoice Tax Analytic Account" -msgstr "" +msgstr "Konto analityczne podatku faktury" #. module: account #: field:account.chart,period_from:0 @@ -5282,7 +5321,7 @@ msgstr "Czek" #: view:validate.account.move:0 #: view:validate.account.move.lines:0 msgid "or" -msgstr "" +msgstr "lub" #. module: account #: view:account.invoice.report:0 @@ -6485,6 +6524,10 @@ msgid "" "created by the system on document validation (invoices, bank statements...) " "and will be created in 'Posted' status." msgstr "" +"Wszystkie ręcznie utworzone zapisy mają zwykle stan 'Niezaksięgowane', ale " +"możesz ustawić opcję w dzienniku, że zapisy będą automatycznie księgowane po " +"wprowadzeniu. Będą się w tedy zachowywały jak zapisy przy fakturach i " +"wyciągach bankowych i przechodziły w stan 'Zaksięgowano'." #. module: account #: field:account.payment.term.line,days:0 @@ -7034,6 +7077,8 @@ msgid "" "the tool search to analyse information about analytic entries generated in " "the system." msgstr "" +"W tym widoku masz analizę zapisów analitycznych na kontach analitycznych. " +"Konta odzwierciedlają twoje biznesowe potrzeby analityczne." #. module: account #: sql_constraint:account.journal:0 @@ -7043,7 +7088,7 @@ msgstr "Nazwa dziennika musi być unikalna w ramach firmy !" #. module: account #: field:account.account.template,nocreate:0 msgid "Optional create" -msgstr "" +msgstr "Opcjonalne tworzenie" #. module: account #: code:addons/account/account.py:685 @@ -7099,7 +7144,7 @@ msgstr "Grupuj wg..." #. module: account #: view:account.payment.term.line:0 msgid " Valuation: Balance" -msgstr "" +msgstr " Wartość: Saldo" #. module: account #: field:account.analytic.line,product_uom_id:0 @@ -7150,6 +7195,8 @@ msgid "" "Percentages for Payment Term Line must be between 0 and 1, Example: 0.02 for " "2%." msgstr "" +"Oprocentowanie w pozycji warunku płatności musi być jako liczba między 0 a " +"1, Na przykład: 0.02 oznacza 2%." #. module: account #: report:account.invoice:0 @@ -7601,6 +7648,9 @@ msgid "" "Make sure you have configured payment terms properly.\n" "The latest payment term line should be of the \"Balance\" type." msgstr "" +"Nie możesz zatwierdzić niezbilansowanego zapisu.\n" +"Upewnij się, że warunki płatności są poprawne.\n" +"Ostatnia pozycja warunków płatności powinna być typu 'Saldo'." #. module: account #: model:process.transition,note:account.process_transition_invoicemanually0 @@ -8165,7 +8215,7 @@ msgstr "Do" #: code:addons/account/account.py:1497 #, python-format msgid "Currency Adjustment" -msgstr "" +msgstr "Poprawka walutowa" #. module: account #: field:account.fiscalyear.close,fy_id:0 @@ -8894,7 +8944,7 @@ msgstr "Automatyczny import wyciągu bankowego" #: code:addons/account/account_invoice.py:370 #, python-format msgid "Unknown Error!" -msgstr "" +msgstr "Nieznany błąd!" #. module: account #: model:ir.model,name:account.model_account_move_bank_reconcile @@ -8920,11 +8970,13 @@ msgid "" "You cannot use this general account in this journal, check the tab 'Entry " "Controls' on the related journal." msgstr "" +"Nie możesz stosować tego konta w tym dzienniku. Sprawdź zakładkę 'Kontrola " +"zapisów' w dzienniku." #. module: account #: view:account.payment.term.line:0 msgid " Value amount: n.a" -msgstr "" +msgstr " Wartość: nd." #. module: account #: view:account.automatic.reconcile:0 @@ -9304,6 +9356,9 @@ msgid "" "created. If you leave that field empty, it will use the same journal as the " "current invoice." msgstr "" +"Możesz wybrać dziennik dla tworzonej korekty. Jeśli pozostawisz to pole " +"puste, to do korekty będzie stosowany ten sam dzinnik co do oryginalnej " +"faktury." #. module: account #: help:account.bank.statement.line,sequence:0 @@ -9352,6 +9407,9 @@ msgid "" "some non legal fields or you must unreconcile first.\n" "%s." msgstr "" +"Nie możesz modyfikować uzgodnionego zapisu. Możesz zmieniać jedynie pola " +"nieistotne księgowo lub najpierw musisz skasować uzgodnienie.\n" +"%s." #. module: account #: help:account.financial.report,sign:0 @@ -9511,6 +9569,10 @@ msgid "" "chart\n" " of accounts." msgstr "" +"Kiedy projekt faktury zostanie zatwierdzony, to nie\n" +" będziesz mógł go modyfikować. Faktura otrzyma\n" +" unikalny numer i zostanie utworzony zapis\n" +" księgowy." #. module: account #: model:process.node,note:account.process_node_bankstatement0 diff --git a/addons/account/i18n/zh_CN.po b/addons/account/i18n/zh_CN.po index 171cffaaeb7..86f1cc0dd22 100644 --- a/addons/account/i18n/zh_CN.po +++ b/addons/account/i18n/zh_CN.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-03 16:02+0000\n" -"PO-Revision-Date: 2012-12-14 15:57+0000\n" -"Last-Translator: digitalsatori \n" +"PO-Revision-Date: 2012-12-19 06:55+0000\n" +"Last-Translator: Wei \"oldrev\" Li \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-15 05:05+0000\n" -"X-Generator: Launchpad (build 16372)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:45+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -1551,7 +1551,7 @@ msgstr "应收科目" #: code:addons/account/account.py:767 #, python-format msgid "%s (copy)" -msgstr "" +msgstr "%s (副本)" #. module: account #: selection:account.balance.report,display_account:0 @@ -2169,6 +2169,12 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 单击以便一张新的供应商发票。\n" +"

\n" +" 你可以根据从供应商处所采购或收到的货物来管理发票。OpenERP也可以根据采购订单或者收货自动生成一张草稿状态的发票。\n" +"

\n" +" " #. module: account #: sql_constraint:account.move.line:0 diff --git a/addons/account_analytic_analysis/i18n/fr.po b/addons/account_analytic_analysis/i18n/fr.po index 90ebf605ed3..2822f8d3561 100644 --- a/addons/account_analytic_analysis/i18n/fr.po +++ b/addons/account_analytic_analysis/i18n/fr.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev_rc3\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:02+0000\n" -"PO-Revision-Date: 2012-02-18 23:15+0000\n" -"Last-Translator: Pierre Burnier \n" +"PO-Revision-Date: 2012-12-19 15:53+0000\n" +"Last-Translator: Nicolas JEUDY \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-04 05:34+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: account_analytic_analysis #: view:account.analytic.account:0 @@ -29,12 +29,12 @@ msgstr "Regrouper par..." #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "To Invoice" -msgstr "" +msgstr "À facturer" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Remaining" -msgstr "" +msgstr "Restant" #. module: account_analytic_analysis #: view:account.analytic.account:0 @@ -73,7 +73,7 @@ msgstr "" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "⇒ Invoice" -msgstr "" +msgstr "⇒ Facturer" #. module: account_analytic_analysis #: field:account.analytic.account,ca_invoiced:0 @@ -88,7 +88,7 @@ msgstr "Date du dernier coût facturé" #. module: account_analytic_analysis #: help:account.analytic.account,fix_price_to_invoice:0 msgid "Sum of quotations for this contract." -msgstr "" +msgstr "Total des devis pour ce contrat." #. module: account_analytic_analysis #: help:account.analytic.account,ca_invoiced:0 @@ -113,7 +113,7 @@ msgstr "" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Partner" -msgstr "" +msgstr "Partenaire" #. module: account_analytic_analysis #: view:account.analytic.account:0 @@ -158,11 +158,12 @@ msgstr "" #: help:account.analytic.account,remaining_hours_to_invoice:0 msgid "Computed using the formula: Maximum Time - Total Invoiced Time" msgstr "" +"Calculé en utilisant cette formule: Temps maximum - Total du temps facturé" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Expected" -msgstr "" +msgstr "Attendu" #. module: account_analytic_analysis #: view:account.analytic.account:0 @@ -176,6 +177,7 @@ msgstr "Compte analytique" #: help:account.analytic.account,theorical_margin:0 msgid "Computed using the formula: Theoretical Revenue - Total Costs" msgstr "" +"Calculé en appliquant la formule: Revenus Théorique - Total des dépenses" #. module: account_analytic_analysis #: field:account.analytic.account,hours_qtt_invoiced:0 @@ -196,6 +198,8 @@ msgid "" "{'required': [('type','=','contract')], 'invisible': [('type','in',['view', " "'normal','template'])]}" msgstr "" +"{'required': [('type','=','contract')], 'invisible': [('type','in',['view', " +"'normal','template'])]}" #. module: account_analytic_analysis #: field:account.analytic.account,real_margin_rate:0 @@ -226,7 +230,7 @@ msgstr "" #: 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 "Template of Contract" -msgstr "" +msgstr "Modèle de contrat" #. module: account_analytic_analysis #: model:res.groups,name:account_analytic_analysis.group_template_required @@ -236,7 +240,7 @@ msgstr "" #. module: account_analytic_analysis #: field:account.analytic.account,hours_quantity:0 msgid "Total Worked Time" -msgstr "" +msgstr "Total du temps passé" #. module: account_analytic_analysis #: field:account.analytic.account,real_margin:0 @@ -256,7 +260,7 @@ msgstr "Calculé selon la formule : (Marge réelle / Coûts totaux) * 100" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "or view" -msgstr "" +msgstr "ou afficher" #. module: account_analytic_analysis #: view:account.analytic.account:0 @@ -273,7 +277,7 @@ msgstr "Mois" #: 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 "Temps & Matériel à facturer" #. module: account_analytic_analysis #: model:ir.actions.act_window,name:account_analytic_analysis.action_account_analytic_overdue_all @@ -284,12 +288,12 @@ msgstr "Contrats" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Start Date" -msgstr "" +msgstr "Date de début" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Invoiced" -msgstr "" +msgstr "Facturé" #. module: account_analytic_analysis #: view:account.analytic.account:0 @@ -308,7 +312,7 @@ msgstr "Contrats en attente de renouvellement avec votre client" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Timesheets" -msgstr "" +msgstr "Feuilles de temps" #. module: account_analytic_analysis #: code:addons/account_analytic_analysis/account_analytic_analysis.py:461 @@ -329,7 +333,7 @@ msgstr "Nombre d'arriérés" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Status" -msgstr "" +msgstr "Statut" #. module: account_analytic_analysis #: field:account.analytic.account,ca_theorical:0 @@ -351,7 +355,7 @@ msgstr "" #. module: account_analytic_analysis #: model:ir.actions.act_window,name:account_analytic_analysis.action_sales_order msgid "Sales Orders" -msgstr "" +msgstr "Commandes" #. module: account_analytic_analysis #: help:account.analytic.account,last_invoice_date:0 diff --git a/addons/account_analytic_analysis/i18n/pt_BR.po b/addons/account_analytic_analysis/i18n/pt_BR.po index f947ae261a4..6a5fc3da78b 100644 --- a/addons/account_analytic_analysis/i18n/pt_BR.po +++ b/addons/account_analytic_analysis/i18n/pt_BR.po @@ -7,19 +7,20 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev_rc3\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:02+0000\n" -"PO-Revision-Date: 2012-12-10 14:08+0000\n" -"Last-Translator: Projetaty Soluções OpenSource \n" +"PO-Revision-Date: 2012-12-19 20:08+0000\n" +"Last-Translator: Fábio Martinelli - http://zupy.com.br " +"\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-11 04:48+0000\n" -"X-Generator: Launchpad (build 16356)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "No order to invoice, create" -msgstr "Não existe pedido para faturar, crie." +msgstr "Não existe pedido para faturar, crie um" #. module: account_analytic_analysis #: view:account.analytic.account:0 @@ -39,7 +40,7 @@ msgstr "Restante" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Contracts in progress" -msgstr "Contratos em progresso" +msgstr "Contratos em andamento" #. module: account_analytic_analysis #: help:account.analytic.account,last_worked_invoiced_date:0 @@ -47,18 +48,18 @@ msgid "" "If invoice from the costs, this is the date of the latest work or cost that " "have been invoiced." msgstr "" -"Se for uma fatura a partir dos custos, esta é a data do último trabalho ou " -"custo que foi faturado." +"Se faturar a partir dos custos, esta é a data do último trabalho ou custo " +"que foi faturado." #. module: account_analytic_analysis #: field:account.analytic.account,last_worked_date:0 msgid "Date of Last Cost/Work" -msgstr "Data da Ultima Despesa/Atividade" +msgstr "Data da Última Despesa/Atividade" #. module: account_analytic_analysis #: field:account.analytic.account,ca_to_invoice:0 msgid "Uninvoiced Amount" -msgstr "Valor não faturado" +msgstr "Valor não Faturado" #. module: account_analytic_analysis #: view:account.analytic.account:0 diff --git a/addons/account_analytic_plans/i18n/fr.po b/addons/account_analytic_plans/i18n/fr.po index 633a0547097..860ddb0d050 100644 --- a/addons/account_analytic_plans/i18n/fr.po +++ b/addons/account_analytic_plans/i18n/fr.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-03 16:02+0000\n" -"PO-Revision-Date: 2012-12-05 09:24+0000\n" +"PO-Revision-Date: 2012-12-19 15:41+0000\n" "Last-Translator: WANTELLET Sylvain \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-06 04:40+0000\n" -"X-Generator: Launchpad (build 16341)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: account_analytic_plans #: field:account.analytic.plan.instance,account4_ids:0 @@ -133,7 +133,7 @@ msgstr "Ne pas afficher les lignes vides" #: code:addons/account_analytic_plans/wizard/account_crossovered_analytic.py:61 #, python-format msgid "There are no analytic lines related to account %s." -msgstr "" +msgstr "Il n'y a pas de lignes analytiques relatives au compte %s." #. module: account_analytic_plans #: field:account.analytic.plan.instance,account3_ids:0 @@ -349,7 +349,7 @@ msgstr "Journal" #: code:addons/account_analytic_plans/account_analytic_plans.py:486 #, python-format msgid "You have to define an analytic journal on the '%s' journal." -msgstr "" +msgstr "Vous devez définir un journal analytique pour le journal '%s'." #. module: account_analytic_plans #: code:addons/account_analytic_plans/account_analytic_plans.py:342 diff --git a/addons/account_asset/i18n/sl.po b/addons/account_asset/i18n/sl.po index 522cb01e184..9eb177d61eb 100644 --- a/addons/account_asset/i18n/sl.po +++ b/addons/account_asset/i18n/sl.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-03 16:02+0000\n" -"PO-Revision-Date: 2012-12-18 20:57+0000\n" -"Last-Translator: Dusan Laznik \n" +"PO-Revision-Date: 2012-12-19 14:20+0000\n" +"Last-Translator: Stanko Zvonar \n" "Language-Team: Slovenian \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-19 05:17+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: account_asset @@ -58,7 +58,7 @@ msgstr "Bruto vrednost" #: field:asset.asset.report,asset_id:0 #: model:ir.model,name:account_asset.model_account_asset_asset msgid "Asset" -msgstr "Premoženje" +msgstr "Osnovna sredstva" #. module: account_asset #: help:account.asset.asset,prorata:0 @@ -141,19 +141,19 @@ msgstr "Amortizacijske vrstice" #. module: account_asset #: help:account.asset.asset,salvage_value:0 msgid "It is the amount you plan to have that you cannot depreciate." -msgstr "" +msgstr "Planirana vrednost,ki se ne amortizira" #. module: account_asset #: field:account.asset.depreciation.line,depreciation_date:0 #: view:asset.asset.report:0 #: field:asset.asset.report,depreciation_date:0 msgid "Depreciation Date" -msgstr "" +msgstr "Datum amortizacije" #. module: account_asset #: constraint:account.asset.asset:0 msgid "Error ! You cannot create recursive assets." -msgstr "" +msgstr "Napaka! Ne moreš kreirati rekurzivnega osnovnega sredstva" #. module: account_asset #: field:asset.asset.report,posted_value:0 @@ -193,12 +193,12 @@ msgstr "" #: view:asset.asset.report:0 #: field:asset.asset.report,nbr:0 msgid "# of Depreciation Lines" -msgstr "" +msgstr "Amortizacijska vrsta" #. module: account_asset #: field:account.asset.asset,method_period:0 msgid "Number of Months in a Period" -msgstr "" +msgstr "Število mesecev v obdobju" #. module: account_asset #: view:asset.asset.report:0 @@ -246,12 +246,12 @@ msgstr "Osnutek" #. module: account_asset #: view:asset.asset.report:0 msgid "Date of asset purchase" -msgstr "" +msgstr "Datum nabave osnovnega sredstva" #. module: account_asset #: help:account.asset.asset,method_number:0 msgid "Calculates Depreciation within specified interval" -msgstr "" +msgstr "Izračun amortizacije v določenem intervalu" #. module: account_asset #: field:account.asset.asset,active:0 @@ -261,12 +261,12 @@ msgstr "Aktivno" #. module: account_asset #: view:account.asset.asset:0 msgid "Change Duration" -msgstr "" +msgstr "Spremeni trajanje" #. module: account_asset #: view:account.asset.category:0 msgid "Analytic Information" -msgstr "" +msgstr "Analitika" #. module: account_asset #: field:account.asset.category,account_analytic_id:0 @@ -277,12 +277,12 @@ msgstr "Analitični konto" #: field:account.asset.asset,method:0 #: field:account.asset.category,method:0 msgid "Computation Method" -msgstr "" +msgstr "Metoda izračuna" #. module: account_asset #: help:account.asset.asset,method_period:0 msgid "State here the time during 2 depreciations, in months" -msgstr "" +msgstr "Čas med dvema amortizacijama( v mesecih)" #. module: account_asset #: constraint:account.asset.asset:0 @@ -304,19 +304,19 @@ msgstr "" #. module: account_asset #: help:account.asset.history,method_period:0 msgid "Time in month between two depreciations" -msgstr "" +msgstr "Čas v mesecih med dvema amortizacijama" #. module: account_asset #: view:asset.modify:0 #: model:ir.actions.act_window,name:account_asset.action_asset_modify #: model:ir.model,name:account_asset.model_asset_modify msgid "Modify Asset" -msgstr "" +msgstr "Spremeni Osnovno sredstvo" #. module: account_asset #: field:account.asset.asset,salvage_value:0 msgid "Salvage Value" -msgstr "" +msgstr "Ostanek vrednosti" #. module: account_asset #: field:account.asset.asset,category_id:0 @@ -324,7 +324,7 @@ msgstr "" #: field:account.invoice.line,asset_category_id:0 #: view:asset.asset.report:0 msgid "Asset Category" -msgstr "" +msgstr "Kategorija Osnovnega sredstva" #. module: account_asset #: view:account.asset.asset:0 @@ -334,18 +334,18 @@ msgstr "" #. module: account_asset #: field:account.asset.asset,parent_id:0 msgid "Parent Asset" -msgstr "" +msgstr "Nadrejeno osnovno sredstvo" #. module: account_asset #: view:account.asset.history:0 #: model:ir.model,name:account_asset.model_account_asset_history msgid "Asset history" -msgstr "" +msgstr "Zgodovina osnovnega sredstva" #. module: account_asset #: view:account.asset.category:0 msgid "Search Asset Category" -msgstr "" +msgstr "Iskanje po kategoriji osnovnega sredstva" #. module: account_asset #: model:ir.model,name:account_asset.model_account_invoice_line @@ -372,13 +372,13 @@ msgstr "" #: field:account.asset.category,method_time:0 #: field:account.asset.history,method_time:0 msgid "Time Method" -msgstr "" +msgstr "Časovna metoda" #. module: account_asset #: view:asset.depreciation.confirmation.wizard:0 #: view:asset.modify:0 msgid "or" -msgstr "" +msgstr "ali" #. module: account_asset #: field:account.asset.asset,note:0 @@ -432,7 +432,7 @@ msgstr "" #: field:account.asset.asset,state:0 #: field:asset.asset.report,state:0 msgid "Status" -msgstr "" +msgstr "Status" #. module: account_asset #: field:account.asset.asset,partner_id:0 @@ -515,7 +515,7 @@ msgstr "Zgodovina" #. module: account_asset #: view:asset.depreciation.confirmation.wizard:0 msgid "Compute Asset" -msgstr "" +msgstr "Izračunaj amortizacijo" #. module: account_asset #: field:asset.depreciation.confirmation.wizard,period_id:0 diff --git a/addons/account_budget/i18n/de.po b/addons/account_budget/i18n/de.po index 47d67284dd2..92e42756c3b 100644 --- a/addons/account_budget/i18n/de.po +++ b/addons/account_budget/i18n/de.po @@ -7,14 +7,15 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:02+0000\n" -"PO-Revision-Date: 2012-12-04 07:23+0000\n" -"Last-Translator: Ferdinand @ Camptocamp \n" +"PO-Revision-Date: 2012-12-19 19:08+0000\n" +"Last-Translator: Thorsten Vocks (OpenBig.org) \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-05 05:20+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: account_budget #: view:account.budget.analytic:0 @@ -367,6 +368,22 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Ein Budget ist eine Planung der Erlöse und Aufwendungen " +"einer\n" +" zukünftigen Periode. Ein Budget wird definiert für eine " +"beliebige \n" +" Auswahl Konten und/oder Kostenstellen (die Projekte, \n" +" Abteilungen,Produktkategorien entsprechen)\n" +"

\n" +" Durch Verfolgen der Finanztransaktionen, reduzieren Sie das\n" +" Risiko einer Zahlungsunfähigkeit. Prognostizieren Sie Ihre " +"Umsätze\n" +" nach Kostenstellen und verfolgen Sie dabei die Entwicklung " +"im \n" +" Zeit- oder Plan-Istvergleich.\n" +"

\n" +" " #. module: account_budget #: report:account.budget:0 diff --git a/addons/account_budget/i18n/fr.po b/addons/account_budget/i18n/fr.po index ebcee6a798e..332c88c9797 100644 --- a/addons/account_budget/i18n/fr.po +++ b/addons/account_budget/i18n/fr.po @@ -7,14 +7,15 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:02+0000\n" -"PO-Revision-Date: 2012-11-29 16:58+0000\n" -"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n" +"PO-Revision-Date: 2012-12-19 15:42+0000\n" +"Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) " +"\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-04 05:42+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: account_budget #: view:account.budget.analytic:0 @@ -367,6 +368,25 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Un budget est une prévision des revenus et dépenses de votre " +"société\n" +" attendus dans une période à venir. Un budget est défini sur\n" +" certains comptes comptables ou analytiques (qui peuvent " +"représenter\n" +" des projets, des filiales, des catégories d'articles, etc.)\n" +"

\n" +" En surveillant où va votre argent, vous pourrez éviter\n" +" certaines dépenses superflues, et vous aurez plus de chances " +"d'atteindre vos\n" +" objectifs financiers. Prévoyez votre budget en détaillant " +"les chiffres d'affaires attendus\n" +" pour chaque compte analytique : vous pourrez ensuite " +"surveiller son évolution en\n" +" fonction des chiffres effectivement réalisées pendant la " +"période.\n" +"

\n" +" " #. module: account_budget #: report:account.budget:0 diff --git a/addons/account_check_writing/i18n/fr.po b/addons/account_check_writing/i18n/fr.po index 626a9c13755..cab409b8f7d 100644 --- a/addons/account_check_writing/i18n/fr.po +++ b/addons/account_check_writing/i18n/fr.po @@ -8,15 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-03 16:02+0000\n" -"PO-Revision-Date: 2012-12-03 20:39+0000\n" -"Last-Translator: Frederic Clementi - Camptocamp.com " -"\n" +"PO-Revision-Date: 2012-12-19 15:43+0000\n" +"Last-Translator: Numérigraphe \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: 2012-12-04 05:54+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: account_check_writing #: selection:res.company,check_layout:0 @@ -108,6 +107,18 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Cliquez pour créer un nouveau chèque. \n" +"

\n" +" Le formulaire de paiement par chèque vous permet de suivre " +"les paiements que\n" +" vous faites à vos fournisseurs par chèque. Lorsque vous " +"sélectionnez un fournisseur, la\n" +" méthode de paiement et le montant payé, OpenERP propose\n" +" de rapprocher votre paiement et les factures fournisseur " +"ouvertes.\n" +"

\n" +" " #. module: account_check_writing #: field:account.voucher,allow_check:0 diff --git a/addons/account_voucher/i18n/de.po b/addons/account_voucher/i18n/de.po index 769536fd4a2..8b5f7898867 100644 --- a/addons/account_voucher/i18n/de.po +++ b/addons/account_voucher/i18n/de.po @@ -7,25 +7,25 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-07 20:51+0000\n" +"PO-Revision-Date: 2012-12-19 15:01+0000\n" "Last-Translator: Thorsten Vocks (OpenBig.org) \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-08 04:59+0000\n" -"X-Generator: Launchpad (build 16341)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: account_voucher #: field:account.bank.statement.line,voucher_id:0 msgid "Reconciliation" -msgstr "" +msgstr "Ausgleichen" #. module: account_voucher #: model:ir.model,name:account_voucher.model_account_config_settings msgid "account.config.settings" -msgstr "" +msgstr "account.config.settings" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:348 @@ -73,6 +73,8 @@ msgid "" "You have to delete the bank statement line which the payment was reconciled " "to manually. Please check the payment of the partner %s by the amount of %s." msgstr "" +"Sie müssen Bankauszug Positionen für manuell abgeglichen Positionen löschen. " +"Bitte überprüfen Sie die Zahlung des Partners % s in Höhe des Betrag % s." #. module: account_voucher #: view:account.voucher:0 @@ -409,7 +411,7 @@ msgstr "Buchen von Ausgaben" #. module: account_voucher #: field:account.voucher,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "Followers" #. module: account_voucher #: selection:account.voucher.line,type:0 @@ -501,6 +503,13 @@ msgid "" "\n" "* The 'Cancelled' status is used when user cancel voucher." msgstr "" +" * Ein Zahlungsbeleg befindet sich unmittelbar nach der Erstellung im " +"\"Entwurf\" Zustand.\n" +"* Durch Änderung auf den Status \"Pro-Forma\" wird der Status geändert, aber " +"keine Belegnummer vergeben.\n" +"* Der Status \"Gebucht\" wird angewendet, wenn ein Benutzer einen " +"Zahlungsbeleg mitsamt Belegnummer vollständig gebucht hat.\n" +"* Der Zustand \"Abgebrochen\" kennzeichnet den Abbruch eines Zahlungsbelegs." #. module: account_voucher #: field:account.voucher,writeoff_amount:0 @@ -777,7 +786,7 @@ msgstr "Bezahlt" #. module: account_voucher #: field:account.voucher,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "Ist ein Follower" #. module: account_voucher #: field:account.voucher,analytic_id:0 diff --git a/addons/account_voucher/i18n/fr.po b/addons/account_voucher/i18n/fr.po index 2fc3c38da2f..07fb2f675f0 100644 --- a/addons/account_voucher/i18n/fr.po +++ b/addons/account_voucher/i18n/fr.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-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-05 09:22+0000\n" +"PO-Revision-Date: 2012-12-19 15:43+0000\n" "Last-Translator: Numérigraphe \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-06 04:40+0000\n" -"X-Generator: Launchpad (build 16341)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: account_voucher #: field:account.bank.statement.line,voucher_id:0 @@ -166,6 +166,14 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Cliquez pour enregistrer un reçu d'achat. \n" +"

\n" +" Quand le reçu d'achat sera confirmé, vous pourrez " +"enregistrer\n" +" les paiements fournisseur en rapport avec ce reçu d'achat.\n" +"

\n" +" " #. module: account_voucher #: view:account.voucher:0 diff --git a/addons/account_voucher/i18n/nl_BE.po b/addons/account_voucher/i18n/nl_BE.po index 043e7c1231d..ac8a8dfd99f 100644 --- a/addons/account_voucher/i18n/nl_BE.po +++ b/addons/account_voucher/i18n/nl_BE.po @@ -1,20 +1,21 @@ # Translation of OpenERP Server. # This file contains the translation of the following modules: -# * account_voucher -# +# * account_voucher +# Els Van Vossel , 2012. msgid "" msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:01+0000\n" -"PO-Revision-Date: 2012-11-27 13:39+0000\n" +"PO-Revision-Date: 2012-12-19 18:04+0000\n" "Last-Translator: Els Van Vossel (Agaplan) \n" -"Language-Team: \n" +"Language-Team: Els Van Vossel\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-04 05:41+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" +"Language: nl\n" #. module: account_voucher #: field:account.bank.statement.line,voucher_id:0 @@ -59,11 +60,13 @@ msgid "" "Computed as the difference between the amount stated in the voucher and the " "sum of allocation on the voucher lines." msgstr "" +"Berekend als het verschil tussen het aangegeven bedrag van de boeking en de " +"som van de toewijzing aan de boekingslijnen." #. module: account_voucher #: view:account.voucher:0 msgid "(Update)" -msgstr "" +msgstr "(bijwerken)" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:1093 @@ -72,69 +75,71 @@ msgid "" "You have to delete the bank statement line which the payment was reconciled " "to manually. Please check the payment of the partner %s by the amount of %s." msgstr "" +"U moet manueel de uittreksellijn verwijderen waarmee de betaling is " +"afgepunt. Kijk de betaling van relatie %s na voor een bedrag van %s." #. module: account_voucher #: view:account.voucher:0 #: model:ir.actions.act_window,name:account_voucher.act_pay_bills msgid "Bill Payment" -msgstr "" +msgstr "Betaling" #. module: account_voucher #: view:account.statement.from.invoice.lines:0 #: model:ir.actions.act_window,name:account_voucher.action_view_account_statement_from_invoice_lines msgid "Import Entries" -msgstr "" +msgstr "Boekingen importeren" #. module: account_voucher #: view:account.voucher:0 msgid "Voucher Entry" -msgstr "" +msgstr "Boeking reçu" #. module: account_voucher #: selection:sale.receipt.report,month:0 msgid "March" -msgstr "" +msgstr "Maart" #. module: account_voucher #: field:account.voucher,message_unread:0 msgid "Unread Messages" -msgstr "" +msgstr "Ongelezen berichten" #. module: account_voucher #: view:account.voucher:0 msgid "Pay Bill" -msgstr "" +msgstr "Factuur betalen" #. module: account_voucher #: view:account.voucher:0 msgid "Are you sure you want to cancel this receipt?" -msgstr "" +msgstr "Weet u zeker dat u dit reçu wilt annuleren?" #. module: account_voucher #: view:account.voucher:0 msgid "Set to Draft" -msgstr "" +msgstr "Terugzetten naar Voorlopig" #. module: account_voucher #: help:account.voucher,reference:0 msgid "Transaction reference number." -msgstr "" +msgstr "Referentienummer verrichting." #. module: account_voucher #: view:sale.receipt.report:0 msgid "Group by year of Invoice Date" -msgstr "" +msgstr "Groepering per jaar van factuurdatum" #. module: account_voucher #: view:sale.receipt.report:0 #: field:sale.receipt.report,user_id:0 msgid "Salesperson" -msgstr "" +msgstr "Verkoper" #. module: account_voucher #: view:account.voucher:0 msgid "Voucher Statistics" -msgstr "" +msgstr "Boekingsstatistieken" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:1558 @@ -147,7 +152,7 @@ msgstr "" #. module: account_voucher #: view:account.voucher:0 msgid "Validate" -msgstr "" +msgstr "Goedkeuren" #. module: account_voucher #: model:ir.actions.act_window,help:account_voucher.action_purchase_receipt @@ -160,38 +165,45 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klik om een aankoopreçu in te geven. \n" +"

\n" +" Als het aankoopreçu is bevestigd, kunt u de " +"leveranciersbetaling koppelen.\n" +"

\n" +" " #. module: account_voucher #: view:account.voucher:0 msgid "Search Vouchers" -msgstr "" +msgstr "Reçu's zoeken" #. module: account_voucher #: field:account.voucher,writeoff_acc_id:0 msgid "Counterpart Account" -msgstr "" +msgstr "Tegenboekingsrekening" #. module: account_voucher #: field:account.voucher,account_id:0 #: field:account.voucher.line,account_id:0 #: field:sale.receipt.report,account_id:0 msgid "Account" -msgstr "" +msgstr "Rekening" #. module: account_voucher #: field:account.voucher,line_dr_ids:0 msgid "Debits" -msgstr "" +msgstr "Debiteringen" #. module: account_voucher #: view:account.statement.from.invoice.lines:0 msgid "Ok" -msgstr "" +msgstr "OK" #. module: account_voucher #: field:account.voucher.line,reconcile:0 msgid "Full Reconcile" -msgstr "" +msgstr "Volledig afpunten" #. module: account_voucher #: field:account.voucher,date_due:0 @@ -199,56 +211,56 @@ msgstr "" #: view:sale.receipt.report:0 #: field:sale.receipt.report,date_due:0 msgid "Due Date" -msgstr "" +msgstr "Vervaldatum" #. module: account_voucher #: field:account.voucher,narration:0 msgid "Notes" -msgstr "" +msgstr "Opmerkingen" #. module: account_voucher #: field:account.voucher,message_ids:0 msgid "Messages" -msgstr "" +msgstr "Berichten" #. module: account_voucher #: selection:account.voucher,type:0 #: selection:sale.receipt.report,type:0 msgid "Sale" -msgstr "" +msgstr "Verkoop" #. module: account_voucher #: field:account.voucher.line,move_line_id:0 msgid "Journal Item" -msgstr "" +msgstr "Boekingslijn" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:492 #: code:addons/account_voucher/account_voucher.py:964 #, python-format msgid "Error!" -msgstr "" +msgstr "Fout" #. module: account_voucher #: field:account.voucher.line,amount:0 msgid "Amount" -msgstr "" +msgstr "Bedrag" #. module: account_voucher #: view:account.voucher:0 msgid "Payment Options" -msgstr "" +msgstr "Betaalopties" #. module: account_voucher #: view:account.voucher:0 msgid "Other Information" -msgstr "" +msgstr "Overige informatie" #. module: account_voucher #: selection:account.voucher,state:0 #: selection:sale.receipt.report,state:0 msgid "Cancelled" -msgstr "" +msgstr "Geannuleerd" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:1134 @@ -256,6 +268,8 @@ msgstr "" msgid "" "You have to configure account base code and account tax code on the '%s' tax!" msgstr "" +"U dient de rekeningen voor het basisvak en het btw-vak in te geven voor btw " +"'%s'." #. module: account_voucher #: model:ir.actions.act_window,help:account_voucher.action_sale_receipt @@ -269,43 +283,51 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klik om een verkoopreçu in te geven. \n" +"

\n" +" Als het verkoopreçu is bevestigd, kunt u de klantenbetaling " +"koppelen.\n" +"

\n" +" " #. module: account_voucher #: help:account.voucher,message_unread:0 msgid "If checked new messages require your attention." msgstr "" +"Als dit is ingeschakeld, zijn er nieuwe berichten die uw aandacht vragen." #. module: account_voucher #: model:ir.model,name:account_voucher.model_account_bank_statement_line msgid "Bank Statement Line" -msgstr "" +msgstr "Rekeninguittreksellijn" #. module: account_voucher #: view:sale.receipt.report:0 #: field:sale.receipt.report,day:0 msgid "Day" -msgstr "" +msgstr "Dag" #. module: account_voucher #: field:account.voucher,tax_id:0 msgid "Tax" -msgstr "" +msgstr "Btw" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:864 #, python-format msgid "Invalid Action!" -msgstr "" +msgstr "Ongeldige actie" #. module: account_voucher #: field:account.voucher,comment:0 msgid "Counterpart Comment" -msgstr "" +msgstr "Tegenboekingsopmerking" #. module: account_voucher #: field:account.voucher.line,account_analytic_id:0 msgid "Analytic Account" -msgstr "" +msgstr "Analytische rekening" #. module: account_voucher #: help:account.voucher,message_summary:0 @@ -313,16 +335,18 @@ msgid "" "Holds the Chatter summary (number of messages, ...). This summary is " "directly in html format in order to be inserted in kanban views." msgstr "" +"Bevat de Chatsamenvatting (aantal berichten, ...). Deze samenvatting is in " +"html-formaat, zodat ze in de kanbanweergave kan worden gebruikt." #. module: account_voucher #: view:account.voucher:0 msgid "Payment Information" -msgstr "" +msgstr "Betaalinformatie" #. module: account_voucher #: view:account.voucher:0 msgid "(update)" -msgstr "" +msgstr "(bijwerken)" #. module: account_voucher #: view:account.voucher:0 @@ -330,25 +354,25 @@ msgstr "" #: view:sale.receipt.report:0 #: selection:sale.receipt.report,state:0 msgid "Draft" -msgstr "" +msgstr "Voorlopig" #. module: account_voucher #: view:account.bank.statement:0 msgid "Import Invoices" -msgstr "" +msgstr "Facturen importeren" #. module: account_voucher #: selection:account.voucher,pay_now:0 #: selection:sale.receipt.report,pay_now:0 msgid "Pay Later or Group Funds" -msgstr "" +msgstr "Later betalen of betalingen groeperen" #. module: account_voucher #: view:account.voucher:0 #: selection:account.voucher,type:0 #: selection:sale.receipt.report,type:0 msgid "Receipt" -msgstr "" +msgstr "Reçu" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:1001 @@ -358,37 +382,40 @@ msgid "" "settings, to manage automatically the booking of accounting entries related " "to differences between exchange rates." msgstr "" +"U moet de 'Rekening voordelige koersverschillen' ingeven in de instellingen " +"van de boekhouding. Zo kan de boeking voor koersverschillen automatisch " +"gebeuren." #. module: account_voucher #: view:account.voucher:0 msgid "Sales Lines" -msgstr "" +msgstr "Verkooplijnen" #. module: account_voucher #: view:account.voucher:0 #: field:account.voucher,period_id:0 msgid "Period" -msgstr "" +msgstr "Periode" #. module: account_voucher #: view:account.voucher:0 msgid "Supplier" -msgstr "" +msgstr "Leverancier" #. module: account_voucher #: view:account.voucher:0 msgid "Supplier Voucher" -msgstr "" +msgstr "Leveranciersreçu" #. module: account_voucher #: field:account.voucher,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "Volgers" #. module: account_voucher #: selection:account.voucher.line,type:0 msgid "Debit" -msgstr "" +msgstr "Debet" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:1558 @@ -400,66 +427,66 @@ msgstr "" #: view:sale.receipt.report:0 #: field:sale.receipt.report,nbr:0 msgid "# of Voucher Lines" -msgstr "" +msgstr "# boekingslijnen reçu's" #. module: account_voucher #: view:sale.receipt.report:0 #: field:sale.receipt.report,type:0 msgid "Type" -msgstr "" +msgstr "Type" #. module: account_voucher #: view:sale.receipt.report:0 msgid "Pro-forma Vouchers" -msgstr "" +msgstr "Pro-formareçu's" #. module: account_voucher #: view:account.voucher:0 #: model:ir.actions.act_window,name:account_voucher.act_journal_voucher_open msgid "Voucher Entries" -msgstr "" +msgstr "Reçuboekingen" #. module: account_voucher #: view:account.voucher:0 msgid "Open Supplier Journal Entries" -msgstr "" +msgstr "Openstaande boekingen leveranciers" #. module: account_voucher #: model:ir.actions.act_window,name:account_voucher.action_review_voucher_list msgid "Vouchers Entries" -msgstr "" +msgstr "Reçuboekingen" #. module: account_voucher #: field:account.voucher,name:0 msgid "Memo" -msgstr "" +msgstr "Memo" #. module: account_voucher #: view:account.voucher:0 msgid "Are you sure to unreconcile and cancel this record ?" -msgstr "" +msgstr "Wilt u de afpunting van dit record ongedaan maken en het annuleren?" #. module: account_voucher #: view:account.voucher:0 #: model:ir.actions.act_window,name:account_voucher.action_sale_receipt #: model:ir.ui.menu,name:account_voucher.menu_action_sale_receipt msgid "Sales Receipt" -msgstr "" +msgstr "Verkoopreçu" #. module: account_voucher #: field:account.voucher,is_multi_currency:0 msgid "Multi Currency Voucher" -msgstr "" +msgstr "Reçu in meerdere munten" #. module: account_voucher #: view:account.voucher:0 msgid "Bill Information" -msgstr "" +msgstr "Factuurgegevens" #. module: account_voucher #: selection:sale.receipt.report,month:0 msgid "July" -msgstr "" +msgstr "Juli" #. module: account_voucher #: help:account.voucher,state:0 @@ -477,35 +504,35 @@ msgstr "" #. module: account_voucher #: field:account.voucher,writeoff_amount:0 msgid "Difference Amount" -msgstr "" +msgstr "Bedrag verschil" #. module: account_voucher #: view:sale.receipt.report:0 #: field:sale.receipt.report,due_delay:0 msgid "Avg. Due Delay" -msgstr "" +msgstr "Gem. aant. dagen vervallen" #. module: account_voucher #: code:addons/account_voucher/invoice.py:33 #, python-format msgid "Pay Invoice" -msgstr "" +msgstr "Factuur betalen" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:1134 #, python-format msgid "No Account Base Code and Account Tax Code!" -msgstr "" +msgstr "Geen rekening voor basisvak en btw-vak" #. module: account_voucher #: field:account.voucher,tax_amount:0 msgid "Tax Amount" -msgstr "" +msgstr "Btw-bedrag" #. module: account_voucher #: view:sale.receipt.report:0 msgid "Validated Vouchers" -msgstr "" +msgstr "Goedgekeurde reçu's" #. module: account_voucher #: model:ir.actions.act_window,help:account_voucher.action_vendor_receipt @@ -527,23 +554,23 @@ msgstr "" #: field:account.config.settings,expense_currency_exchange_account_id:0 #: field:res.company,expense_currency_exchange_account_id:0 msgid "Loss Exchange Rate Account" -msgstr "" +msgstr "Rekening nadelige koersverschillen" #. module: account_voucher #: view:account.voucher:0 msgid "Paid Amount" -msgstr "" +msgstr "Betaald bedrag" #. module: account_voucher #: field:account.voucher,payment_option:0 msgid "Payment Difference" -msgstr "" +msgstr "Betalingsverschil" #. module: account_voucher #: view:account.voucher:0 #: field:account.voucher,audit:0 msgid "To Review" -msgstr "" +msgstr "Te controleren" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:1008 @@ -551,7 +578,7 @@ msgstr "" #: code:addons/account_voucher/account_voucher.py:1175 #, python-format msgid "change" -msgstr "" +msgstr "wijzigen" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:997 @@ -561,16 +588,19 @@ msgid "" "settings, to manage automatically the booking of accounting entries related " "to differences between exchange rates." msgstr "" +"U moet de 'Rekening nadelige koersverschillen' ingeven in de instellingen " +"van de boekhouding. Zo kan de boeking voor koersverschillen automatisch " +"gebeuren." #. module: account_voucher #: view:account.voucher:0 msgid "Expense Lines" -msgstr "" +msgstr "Kostenlijnen" #. module: account_voucher #: view:account.voucher:0 msgid "Sale voucher" -msgstr "" +msgstr "Verkoopreçu" #. module: account_voucher #: help:account.voucher,is_multi_currency:0 @@ -578,59 +608,60 @@ msgid "" "Fields with internal purpose only that depicts if the voucher is a multi " "currency one or not" msgstr "" +"Velden voor intern gebruik die aangeven of het reçu in vreemde valuta is." #. module: account_voucher #: view:account.invoice:0 msgid "Register Payment" -msgstr "" +msgstr "Betaling invoeren" #. module: account_voucher #: field:account.statement.from.invoice.lines,line_ids:0 msgid "Invoices" -msgstr "" +msgstr "Facturen" #. module: account_voucher #: selection:sale.receipt.report,month:0 msgid "December" -msgstr "" +msgstr "December" #. module: account_voucher #: view:sale.receipt.report:0 msgid "Group by month of Invoice Date" -msgstr "" +msgstr "Groepering per maand van factuurdatum" #. module: account_voucher #: view:sale.receipt.report:0 #: field:sale.receipt.report,month:0 msgid "Month" -msgstr "" +msgstr "Maand" #. module: account_voucher #: field:account.voucher,currency_id:0 #: field:account.voucher.line,currency_id:0 #: field:sale.receipt.report,currency_id:0 msgid "Currency" -msgstr "" +msgstr "Munt" #. module: account_voucher #: view:account.statement.from.invoice.lines:0 msgid "Payable and Receivables" -msgstr "" +msgstr "Te ontvangen en te betalen" #. module: account_voucher #: view:account.voucher:0 msgid "Voucher Payment" -msgstr "" +msgstr "Betaling reçu" #. module: account_voucher #: field:sale.receipt.report,state:0 msgid "Voucher Status" -msgstr "" +msgstr "Status reçu" #. module: account_voucher #: view:account.voucher:0 msgid "Are you sure to unreconcile this record?" -msgstr "" +msgstr "Wilt u de afpunting van dit record ongedaan maken?" #. module: account_voucher #: field:account.voucher,company_id:0 @@ -638,63 +669,63 @@ msgstr "" #: view:sale.receipt.report:0 #: field:sale.receipt.report,company_id:0 msgid "Company" -msgstr "" +msgstr "Bedrijf" #. module: account_voucher #: help:account.voucher,paid:0 msgid "The Voucher has been totally paid." -msgstr "" +msgstr "Het reçu is volledig betaald." #. module: account_voucher #: selection:account.voucher,payment_option:0 msgid "Reconcile Payment Balance" -msgstr "" +msgstr "Betalingssaldo afpunten" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:960 #, python-format msgid "Configuration Error !" -msgstr "" +msgstr "Configuratiefout" #. module: account_voucher #: view:account.voucher:0 #: view:sale.receipt.report:0 msgid "Draft Vouchers" -msgstr "" +msgstr "Voorlopige reçu's" #. module: account_voucher #: view:sale.receipt.report:0 #: field:sale.receipt.report,price_total_tax:0 msgid "Total With Tax" -msgstr "" +msgstr "Totaal incl. btw" #. module: account_voucher #: view:account.voucher:0 msgid "Purchase Voucher" -msgstr "" +msgstr "Aankoopreçu" #. module: account_voucher #: view:account.voucher:0 #: field:account.voucher,state:0 #: view:sale.receipt.report:0 msgid "Status" -msgstr "" +msgstr "Status" #. module: account_voucher #: view:account.voucher:0 msgid "Allocation" -msgstr "" +msgstr "Toewijzing" #. module: account_voucher #: view:account.statement.from.invoice.lines:0 #: view:account.voucher:0 msgid "or" -msgstr "" +msgstr "of" #. module: account_voucher #: selection:sale.receipt.report,month:0 msgid "August" -msgstr "" +msgstr "Augustus" #. module: account_voucher #: help:account.voucher,audit:0 @@ -702,75 +733,77 @@ msgid "" "Check this box if you are unsure of that journal entry and if you want to " "note it as 'to be reviewed' by an accounting expert." msgstr "" +"Schakel dit vakje in als u niet zeker bent van de boeking en deze wilt laten " +"controleren door de boekhouder." #. module: account_voucher #: selection:sale.receipt.report,month:0 msgid "October" -msgstr "" +msgstr "Oktober" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:961 #, python-format msgid "Please activate the sequence of selected journal !" -msgstr "" +msgstr "Gelieve de nummering van het gekozen journaal te activeren." #. module: account_voucher #: selection:sale.receipt.report,month:0 msgid "June" -msgstr "" +msgstr "Juni" #. module: account_voucher #: field:account.voucher,payment_rate_currency_id:0 msgid "Payment Rate Currency" -msgstr "" +msgstr "Koers betaling" #. module: account_voucher #: field:account.voucher,paid:0 msgid "Paid" -msgstr "" +msgstr "Betaald" #. module: account_voucher #: field:account.voucher,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "Is een volger" #. module: account_voucher #: field:account.voucher,analytic_id:0 msgid "Write-Off Analytic Account" -msgstr "" +msgstr "Analytische rekening afschrijving" #. module: account_voucher #: field:account.voucher,date:0 #: field:account.voucher.line,date_original:0 #: field:sale.receipt.report,date:0 msgid "Date" -msgstr "" +msgstr "Datum" #. module: account_voucher #: selection:sale.receipt.report,month:0 msgid "November" -msgstr "" +msgstr "November" #. module: account_voucher #: view:sale.receipt.report:0 msgid "Extended Filters..." -msgstr "" +msgstr "Uitgebreide filters..." #. module: account_voucher #: field:account.voucher,paid_amount_in_company_currency:0 msgid "Paid Amount in Company Currency" -msgstr "" +msgstr "Betaald bedrag in munt van de firma" #. module: account_voucher #: field:account.bank.statement.line,amount_reconciled:0 msgid "Amount reconciled" -msgstr "" +msgstr "Afgepunt bedrag" #. module: account_voucher #: field:account.voucher,message_comment_ids:0 #: help:account.voucher,message_comment_ids:0 msgid "Comments and emails" -msgstr "" +msgstr "Commentaar en e-mails" #. module: account_voucher #: model:ir.actions.act_window,help:account_voucher.action_vendor_payment @@ -788,7 +821,7 @@ msgstr "" #: selection:account.voucher,pay_now:0 #: selection:sale.receipt.report,pay_now:0 msgid "Pay Directly" -msgstr "" +msgstr "Onmiddellijk betalen" #. module: account_voucher #: field:account.voucher.line,type:0 @@ -798,92 +831,92 @@ msgstr "" #. module: account_voucher #: field:account.voucher,pre_line:0 msgid "Previous Payments ?" -msgstr "" +msgstr "Vorige betalingen?" #. module: account_voucher #: selection:sale.receipt.report,month:0 msgid "January" -msgstr "" +msgstr "Januari" #. module: account_voucher #: model:ir.actions.act_window,name:account_voucher.action_voucher_list #: model:ir.ui.menu,name:account_voucher.menu_encode_entries_by_voucher msgid "Journal Vouchers" -msgstr "" +msgstr "Boekingen" #. module: account_voucher #: model:ir.model,name:account_voucher.model_res_company msgid "Companies" -msgstr "" +msgstr "Bedrijven" #. module: account_voucher #: field:account.voucher,message_summary:0 msgid "Summary" -msgstr "" +msgstr "Overzicht" #. module: account_voucher #: field:account.voucher,active:0 msgid "Active" -msgstr "" +msgstr "Actief" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:965 #, python-format msgid "Please define a sequence on the journal." -msgstr "" +msgstr "Gelieve een reeks in te stellen voor het journaal." #. module: account_voucher #: view:account.voucher:0 msgid "Total Allocation" -msgstr "" +msgstr "Totale toewijzing" #. module: account_voucher #: view:sale.receipt.report:0 msgid "Group by Invoice Date" -msgstr "" +msgstr "Groepering per factuurdatum" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:1093 #, python-format msgid "Wrong bank statement line" -msgstr "" +msgstr "Verkeerde uittreksellijn" #. module: account_voucher #: view:account.voucher:0 msgid "Post" -msgstr "" +msgstr "Boeken" #. module: account_voucher #: view:account.voucher:0 msgid "Invoices and outstanding transactions" -msgstr "" +msgstr "Facturen en openstaande verrichtingen" #. module: account_voucher #: view:sale.receipt.report:0 #: field:sale.receipt.report,price_total:0 msgid "Total Without Tax" -msgstr "" +msgstr "Totaal exclusief btw" #. module: account_voucher #: view:account.voucher:0 msgid "Bill Date" -msgstr "" +msgstr "Factuurdatum" #. module: account_voucher #: view:account.voucher:0 msgid "Unreconcile" -msgstr "" +msgstr "Afpunten ongedaan maken" #. module: account_voucher #: view:account.voucher:0 #: model:ir.model,name:account_voucher.model_account_voucher msgid "Accounting Voucher" -msgstr "" +msgstr "Boekstuk" #. module: account_voucher #: field:account.voucher,number:0 msgid "Number" -msgstr "" +msgstr "Nummer" #. module: account_voucher #: selection:account.voucher.line,type:0 @@ -893,100 +926,100 @@ msgstr "" #. module: account_voucher #: model:ir.model,name:account_voucher.model_account_bank_statement msgid "Bank Statement" -msgstr "" +msgstr "Rekeninguittreksel" #. module: account_voucher #: view:account.bank.statement:0 msgid "onchange_amount(amount)" -msgstr "" +msgstr "onchange_amount(bedrag)" #. module: account_voucher #: selection:sale.receipt.report,month:0 msgid "September" -msgstr "" +msgstr "September" #. module: account_voucher #: view:account.voucher:0 msgid "Sales Information" -msgstr "" +msgstr "Verkoopinfo" #. module: account_voucher #: model:ir.actions.act_window,name:account_voucher.action_sale_receipt_report_all #: model:ir.ui.menu,name:account_voucher.menu_action_sale_receipt_report_all #: view:sale.receipt.report:0 msgid "Sales Receipt Analysis" -msgstr "" +msgstr "Analyse verkoopreçu's" #. module: account_voucher #: view:account.voucher:0 #: field:account.voucher.line,voucher_id:0 #: model:res.request.link,name:account_voucher.req_link_voucher msgid "Voucher" -msgstr "" +msgstr "Reçu" #. module: account_voucher #: model:ir.model,name:account_voucher.model_account_invoice msgid "Invoice" -msgstr "" +msgstr "Factuur" #. module: account_voucher #: view:account.voucher:0 msgid "Voucher Items" -msgstr "" +msgstr "Reçulijnen" #. module: account_voucher #: view:account.statement.from.invoice.lines:0 #: view:account.voucher:0 msgid "Cancel" -msgstr "" +msgstr "Annuleren" #. module: account_voucher #: model:ir.actions.client,name:account_voucher.action_client_invoice_menu msgid "Open Invoicing Menu" -msgstr "" +msgstr "Factuurmenu openen" #. module: account_voucher #: selection:account.voucher,state:0 #: view:sale.receipt.report:0 #: selection:sale.receipt.report,state:0 msgid "Pro-forma" -msgstr "" +msgstr "Pro forma" #. module: account_voucher #: view:account.voucher:0 #: field:account.voucher,move_ids:0 msgid "Journal Items" -msgstr "" +msgstr "Boekingslijnen" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:492 #, python-format msgid "Please define default credit/debit accounts on the journal \"%s\"." -msgstr "" +msgstr "Stel een standaard debet-/creditrekening in voor journaal \"%s\"." #. module: account_voucher #: model:ir.actions.act_window,name:account_voucher.act_pay_voucher #: model:ir.actions.act_window,name:account_voucher.action_vendor_receipt #: model:ir.ui.menu,name:account_voucher.menu_action_vendor_receipt msgid "Customer Payment" -msgstr "" +msgstr "Klantenbetaling" #. module: account_voucher #: selection:account.voucher,type:0 #: selection:sale.receipt.report,type:0 msgid "Purchase" -msgstr "" +msgstr "Aankoop" #. module: account_voucher #: view:account.invoice:0 #: view:account.voucher:0 msgid "Pay" -msgstr "" +msgstr "Betalen" #. module: account_voucher #: view:account.voucher:0 msgid "Currency Options" -msgstr "" +msgstr "Muntopties" #. module: account_voucher #: help:account.voucher,payment_option:0 @@ -1009,36 +1042,43 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"\t\t\tDit rapport biedt een overzicht van het bedrag gefactureerd aan uw " +"klant met de betalingstermijnen. De zoekfunctie kan worden aangepast om het " +"overzicht van uw facturen te personaliseren, zodat u de gewenste analyse " +"krijgt.\n" +"

\n" +" " #. module: account_voucher #: view:account.voucher:0 msgid "Posted Vouchers" -msgstr "" +msgstr "Geboekte reçu's" #. module: account_voucher #: field:account.voucher,payment_rate:0 msgid "Exchange Rate" -msgstr "" +msgstr "Wisselkoers" #. module: account_voucher #: view:account.voucher:0 msgid "Payment Method" -msgstr "" +msgstr "Betalingsmethode" #. module: account_voucher #: field:account.voucher.line,name:0 msgid "Description" -msgstr "" +msgstr "Omschrijving" #. module: account_voucher #: selection:sale.receipt.report,month:0 msgid "May" -msgstr "" +msgstr "Mei" #. module: account_voucher #: view:account.voucher:0 msgid "Sale Receipt" -msgstr "" +msgstr "Verkoopreçu" #. module: account_voucher #: view:account.voucher:0 @@ -1046,36 +1086,36 @@ msgstr "" #: view:sale.receipt.report:0 #: field:sale.receipt.report,journal_id:0 msgid "Journal" -msgstr "" +msgstr "Journaal" #. module: account_voucher #: model:ir.actions.act_window,name:account_voucher.action_vendor_payment #: model:ir.ui.menu,name:account_voucher.menu_action_vendor_payment msgid "Supplier Payment" -msgstr "" +msgstr "Leveranciersbetaling" #. module: account_voucher #: view:account.voucher:0 msgid "Internal Notes" -msgstr "" +msgstr "Interne notities" #. module: account_voucher #: view:account.voucher:0 #: field:account.voucher,line_cr_ids:0 msgid "Credits" -msgstr "" +msgstr "Crediteringen" #. module: account_voucher #: field:account.voucher.line,amount_original:0 msgid "Original Amount" -msgstr "" +msgstr "Oorspronkelijk bedrag" #. module: account_voucher #: view:account.voucher:0 #: model:ir.actions.act_window,name:account_voucher.action_purchase_receipt #: model:ir.ui.menu,name:account_voucher.menu_action_purchase_receipt msgid "Purchase Receipt" -msgstr "" +msgstr "Aankoopreçu" #. module: account_voucher #: help:account.voucher,payment_rate:0 @@ -1091,7 +1131,7 @@ msgstr "" #: field:sale.receipt.report,pay_now:0 #: selection:sale.receipt.report,type:0 msgid "Payment" -msgstr "" +msgstr "Betaling" #. module: account_voucher #: view:account.voucher:0 @@ -1099,70 +1139,70 @@ msgstr "" #: view:sale.receipt.report:0 #: selection:sale.receipt.report,state:0 msgid "Posted" -msgstr "" +msgstr "Geboekt" #. module: account_voucher #: view:account.voucher:0 msgid "Customer" -msgstr "" +msgstr "Klant" #. module: account_voucher #: selection:sale.receipt.report,month:0 msgid "February" -msgstr "" +msgstr "Februari" #. module: account_voucher #: view:account.voucher:0 msgid "Supplier Invoices and Outstanding transactions" -msgstr "" +msgstr "Aankoopfacturen en openstaande verrichtingen" #. module: account_voucher #: field:account.voucher,reference:0 msgid "Ref #" -msgstr "" +msgstr "Ref. #" #. module: account_voucher #: view:sale.receipt.report:0 #: field:sale.receipt.report,year:0 msgid "Year" -msgstr "" +msgstr "Jaar" #. module: account_voucher #: field:account.config.settings,income_currency_exchange_account_id:0 #: field:res.company,income_currency_exchange_account_id:0 msgid "Gain Exchange Rate Account" -msgstr "" +msgstr "Rekening voordelige koersverschillen" #. module: account_voucher #: selection:sale.receipt.report,month:0 msgid "April" -msgstr "" +msgstr "April" #. module: account_voucher #: help:account.voucher,tax_id:0 msgid "Only for tax excluded from price" -msgstr "" +msgstr "Enkel indien prijs exclusief btw" #. module: account_voucher #: field:account.voucher,type:0 msgid "Default Type" -msgstr "" +msgstr "Standaardtype" #. module: account_voucher #: help:account.voucher,message_ids:0 msgid "Messages and communication history" -msgstr "" +msgstr "Berichten en communicatiehistoriek" #. module: account_voucher #: model:ir.model,name:account_voucher.model_account_statement_from_invoice_lines msgid "Entries by Statement from Invoices" -msgstr "" +msgstr "Boekingen per uittreksel voor facturen" #. module: account_voucher #: view:account.voucher:0 #: field:account.voucher,amount:0 msgid "Total" -msgstr "" +msgstr "Totaal" #. module: account_voucher #: field:account.voucher,move_id:0 @@ -1175,50 +1215,51 @@ msgid "" "The amount of the voucher must be the same amount as the one on the " "statement line." msgstr "" +"Het bedrag van het reçu moet gelijk zijn aan het bedrag op de uittreksellijn." #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:864 #, python-format msgid "Cannot delete voucher(s) which are already opened or paid." -msgstr "" +msgstr "Een openstaand of betaald reçu kan niet meer worden verwijderd." #. module: account_voucher #: help:account.voucher,date:0 msgid "Effective date for accounting entries" -msgstr "" +msgstr "Effectieve datum voor boekingen" #. module: account_voucher #: model:mail.message.subtype,name:account_voucher.mt_voucher msgid "Status Change" -msgstr "" +msgstr "Statuswijziging" #. module: account_voucher #: selection:account.voucher,payment_option:0 msgid "Keep Open" -msgstr "" +msgstr "Open houden" #. module: account_voucher #: field:account.voucher,line_ids:0 #: view:account.voucher.line:0 #: model:ir.model,name:account_voucher.model_account_voucher_line msgid "Voucher Lines" -msgstr "" +msgstr "Boekingslijnen reçu's" #. module: account_voucher #: view:sale.receipt.report:0 #: field:sale.receipt.report,delay_to_pay:0 msgid "Avg. Delay To Pay" -msgstr "" +msgstr "Gem. betalingstermijn" #. module: account_voucher #: field:account.voucher.line,untax_amount:0 msgid "Untax Amount" -msgstr "" +msgstr "Bedrag excl. btw" #. module: account_voucher #: model:ir.model,name:account_voucher.model_sale_receipt_report msgid "Sales Receipt Statistics" -msgstr "" +msgstr "Statistieken verkoopreçu's" #. module: account_voucher #: view:account.voucher:0 @@ -1227,19 +1268,19 @@ msgstr "" #: view:sale.receipt.report:0 #: field:sale.receipt.report,partner_id:0 msgid "Partner" -msgstr "" +msgstr "Relatie" #. module: account_voucher #: field:account.voucher.line,amount_unreconciled:0 msgid "Open Balance" -msgstr "" +msgstr "Openstaand saldo" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:997 #: code:addons/account_voucher/account_voucher.py:1001 #, python-format msgid "Insufficient Configuration!" -msgstr "" +msgstr "Niet volledig geconfigureerd" #. module: account_voucher #: help:account.voucher,active:0 @@ -1253,3 +1294,18 @@ msgstr "" #~ "The Object name must start with x_ and not contain any special character !" #~ msgstr "" #~ "De objectnaam moet beginnen met x_ en mag geen speciale karakters bevatten !" + +#~ msgid "Invalid BBA Structured Communication !" +#~ msgstr "Ongeldige gestructureerde mededeling" + +#~ msgid "The journal and period chosen have to belong to the same company." +#~ msgstr "Journaal en periode moeten tot dezelfde firma behoren." + +#~ msgid "Error! You can not create recursive companies." +#~ msgstr "U kunt niet dezelfde bedrijven maken." + +#~ msgid "The company name must be unique !" +#~ msgstr "De firmanaam moet uniek zijn" + +#~ msgid "Invoice Number must be unique per Company!" +#~ msgstr "Factuurnummer moet uniek zijn per bedrijf" diff --git a/addons/anonymization/i18n/fr.po b/addons/anonymization/i18n/fr.po index be734cee849..f46ebbe6e11 100644 --- a/addons/anonymization/i18n/fr.po +++ b/addons/anonymization/i18n/fr.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0.0-rc1\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-11-24 02:52+0000\n" -"PO-Revision-Date: 2011-02-15 15:37+0000\n" -"Last-Translator: \n" +"PO-Revision-Date: 2012-12-19 15:44+0000\n" +"Last-Translator: Florian Hatat \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-11-25 06:31+0000\n" -"X-Generator: Launchpad (build 16293)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: anonymization #: model:ir.model,name:anonymization.model_ir_model_fields_anonymize_wizard @@ -24,7 +24,7 @@ msgstr "ir.model.fields.anonymize.wizard" #. module: anonymization #: model:ir.model,name:anonymization.model_ir_model_fields_anonymization_migration_fix msgid "ir.model.fields.anonymization.migration.fix" -msgstr "" +msgstr "ir.model.fields.anonymization.migration.fix" #. module: anonymization #: field:ir.model.fields.anonymization.migration.fix,target_version:0 @@ -61,7 +61,7 @@ msgstr "ir.model.fields.anonymization" #: field:ir.model.fields.anonymization.history,state:0 #: field:ir.model.fields.anonymize.wizard,state:0 msgid "Status" -msgstr "" +msgstr "Statut" #. module: anonymization #: field:ir.model.fields.anonymization.history,direction:0 @@ -134,7 +134,7 @@ msgstr "Masquer la base" #. module: anonymization #: selection:ir.model.fields.anonymization.migration.fix,query_type:0 msgid "python" -msgstr "" +msgstr "python" #. module: anonymization #: view:ir.model.fields.anonymization.history:0 @@ -188,7 +188,7 @@ msgstr "Historique du masquage" #. module: anonymization #: field:ir.model.fields.anonymization.migration.fix,model_name:0 msgid "Model" -msgstr "" +msgstr "Modèle" #. module: anonymization #: model:ir.model,name:anonymization.model_ir_model_fields_anonymization_history @@ -216,7 +216,7 @@ msgstr "Nom du fichier" #. module: anonymization #: field:ir.model.fields.anonymization.migration.fix,sequence:0 msgid "Sequence" -msgstr "" +msgstr "Séquence" #. module: anonymization #: selection:ir.model.fields.anonymization.history,direction:0 diff --git a/addons/anonymization/i18n/it.po b/addons/anonymization/i18n/it.po index 5ca704f620d..0526ac03249 100644 --- a/addons/anonymization/i18n/it.po +++ b/addons/anonymization/i18n/it.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-24 02:52+0000\n" -"PO-Revision-Date: 2011-02-15 15:37+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2012-12-19 21:10+0000\n" +"Last-Translator: Andrea Cometa \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-11-25 06:31+0000\n" -"X-Generator: Launchpad (build 16293)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: anonymization #: model:ir.model,name:anonymization.model_ir_model_fields_anonymize_wizard @@ -253,6 +253,7 @@ msgstr "Messaggio" #, python-format msgid "You cannot have two fields with the same name on the same object!" msgstr "" +"Non è possibile avere due campi con lo stesso nome nello stesso oggetto!" #~ msgid "Database anonymization module" #~ msgstr "Modulo anonimizza database" diff --git a/addons/auth_oauth/i18n/de.po b/addons/auth_oauth/i18n/de.po new file mode 100644 index 00000000000..628056489ea --- /dev/null +++ b/addons/auth_oauth/i18n/de.po @@ -0,0 +1,135 @@ +# German translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-03 16:02+0000\n" +"PO-Revision-Date: 2012-12-19 14:45+0000\n" +"Last-Translator: Ferdinand @ Camptocamp \n" +"Language-Team: German \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-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" + +#. module: auth_oauth +#: field:auth.oauth.provider,validation_endpoint:0 +msgid "Validation URL" +msgstr "Validierungs URL" + +#. module: auth_oauth +#: field:auth.oauth.provider,auth_endpoint:0 +msgid "Authentication URL" +msgstr "Authorisierungs URL" + +#. module: auth_oauth +#: model:ir.model,name:auth_oauth.model_base_config_settings +msgid "base.config.settings" +msgstr "base.config.settings" + +#. module: auth_oauth +#: field:auth.oauth.provider,name:0 +msgid "Provider name" +msgstr "Provider Name" + +#. module: auth_oauth +#: field:auth.oauth.provider,scope:0 +msgid "Scope" +msgstr "Gültigkeitsbereich" + +#. module: auth_oauth +#: field:res.users,oauth_provider_id:0 +msgid "OAuth Provider" +msgstr "OAuth Provider" + +#. module: auth_oauth +#: field:auth.oauth.provider,css_class:0 +msgid "CSS class" +msgstr "CSS Klasse" + +#. module: auth_oauth +#: field:auth.oauth.provider,body:0 +msgid "Body" +msgstr "Nachricht" + +#. module: auth_oauth +#: model:ir.model,name:auth_oauth.model_res_users +msgid "Users" +msgstr "Benutzer" + +#. module: auth_oauth +#: field:auth.oauth.provider,sequence:0 +msgid "unknown" +msgstr "unbekannt" + +#. module: auth_oauth +#: field:res.users,oauth_access_token:0 +msgid "OAuth Access Token" +msgstr "OAuth Zugangs Token" + +#. module: auth_oauth +#: field:auth.oauth.provider,client_id:0 +#: field:base.config.settings,auth_oauth_facebook_client_id:0 +#: field:base.config.settings,auth_oauth_google_client_id:0 +msgid "Client ID" +msgstr "Client ID" + +#. module: auth_oauth +#: model:ir.ui.menu,name:auth_oauth.menu_oauth_providers +msgid "OAuth Providers" +msgstr "OAuth Providers" + +#. module: auth_oauth +#: model:ir.model,name:auth_oauth.model_auth_oauth_provider +msgid "OAuth2 provider" +msgstr "OAuth2 provider" + +#. module: auth_oauth +#: field:res.users,oauth_uid:0 +msgid "OAuth User ID" +msgstr "OAuth User ID" + +#. module: auth_oauth +#: field:base.config.settings,auth_oauth_facebook_enabled:0 +msgid "Allow users to sign in with Facebook" +msgstr "Erlaube Benutzer mit Facebook Konto einzuloggen" + +#. module: auth_oauth +#: sql_constraint:res.users:0 +msgid "OAuth UID must be unique per provider" +msgstr "OAuth UID muss je Provider eindeutig sein" + +#. module: auth_oauth +#: help:res.users,oauth_uid:0 +msgid "Oauth Provider user_id" +msgstr "Oauth Provider user_id" + +#. module: auth_oauth +#: field:auth.oauth.provider,data_endpoint:0 +msgid "Data URL" +msgstr "Daten URL" + +#. module: auth_oauth +#: view:auth.oauth.provider:0 +msgid "arch" +msgstr "Arch" + +#. module: auth_oauth +#: model:ir.actions.act_window,name:auth_oauth.action_oauth_provider +msgid "Providers" +msgstr "Provider" + +#. module: auth_oauth +#: field:base.config.settings,auth_oauth_google_enabled:0 +msgid "Allow users to sign in with Google" +msgstr "Erlaube Benutzer mit Google Konto einzuloggen" + +#. module: auth_oauth +#: field:auth.oauth.provider,enabled:0 +msgid "Allowed" +msgstr "Erlaubt" diff --git a/addons/auth_signup/i18n/de.po b/addons/auth_signup/i18n/de.po new file mode 100644 index 00000000000..43fe51b8d1f --- /dev/null +++ b/addons/auth_signup/i18n/de.po @@ -0,0 +1,268 @@ +# German translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-04 14:41+0000\n" +"PO-Revision-Date: 2012-12-19 14:58+0000\n" +"Last-Translator: Ferdinand @ Camptocamp \n" +"Language-Team: German \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-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" + +#. module: auth_signup +#: field:base.config.settings,auth_signup_uninvited:0 +msgid "Allow external users to sign up" +msgstr "Erlaube Login von externen Benutzern" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16 +#, python-format +msgid "Confirm Password" +msgstr "Passwort bestätigen" + +#. module: auth_signup +#: help:base.config.settings,auth_signup_uninvited:0 +msgid "If unchecked, only invited users may sign up." +msgstr "Falls leer, dürfen nur eingeladene Benutzer einloggen" + +#. module: auth_signup +#: model:ir.model,name:auth_signup.model_base_config_settings +msgid "base.config.settings" +msgstr "base.config.settings" + +#. module: auth_signup +#: code:addons/auth_signup/res_users.py:248 +#, python-format +msgid "Cannot send email: user has no email address." +msgstr "Kann keine EMail senden, weil der Benutzer keine EMail Adresse hat" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25 +#, python-format +msgid "Reset password" +msgstr "Passwort zurücksetzen" + +#. module: auth_signup +#: field:base.config.settings,auth_signup_template_user_id:0 +msgid "Template user for new users created through signup" +msgstr "Vorlage Benutzer für neu Benutzer" + +#. module: auth_signup +#: model:email.template,subject:auth_signup.reset_password_email +msgid "Password reset" +msgstr "Passwort zurücksetzen" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/js/auth_signup.js:120 +#, python-format +msgid "Please enter a password and confirm it." +msgstr "Bitte ein Passwort eintragen und bestätigen" + +#. module: auth_signup +#: view:res.users:0 +msgid "Send an email to the user to (re)set their password." +msgstr "" +"Sende eine Mail an den Benutzer um das Passwort zu setzen oder zurückzusetzen" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23 +#, python-format +msgid "Sign Up" +msgstr "Anmelden" + +#. module: auth_signup +#: selection:res.users,state:0 +msgid "New" +msgstr "Neu" + +#. module: auth_signup +#: field:res.users,state:0 +msgid "Status" +msgstr "Status" + +#. module: auth_signup +#: model:email.template,body_html:auth_signup.reset_password_email +msgid "" +"\n" +"

A password reset was requested for the OpenERP account linked to this " +"email.

\n" +"\n" +"

You may change your password by following this link.

\n" +"\n" +"

Note: If you do not expect this, you can safely ignore this email.

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

Ein Zurücksetzen des Passwortes für diese EMail-Adresse wurde verlangt " +".

\n" +"\n" +"

Sie können das Passwort mit diesem Link zurücksetzen.

\n" +"\n" +"

Anmerkung: Wenn Sie dieses Mail nicht erwartet/beantragt habe, könne Sie " +"es einfach ignorieren

" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/js/auth_signup.js:114 +#, python-format +msgid "Please enter a name." +msgstr "Bitte geben Sie einen Namen ein." + +#. module: auth_signup +#: model:ir.model,name:auth_signup.model_res_users +msgid "Users" +msgstr "Benutzer" + +#. module: auth_signup +#: field:res.partner,signup_url:0 +msgid "Signup URL" +msgstr "Registrierungs URL" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/js/auth_signup.js:117 +#, python-format +msgid "Please enter a username." +msgstr "Bitte Benutzernamen eingeben." + +#. module: auth_signup +#: selection:res.users,state:0 +msgid "Active" +msgstr "Aktiv" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12 +#, python-format +msgid "Username" +msgstr "Benutzername" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8 +#, python-format +msgid "Name" +msgstr "Name" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/js/auth_signup.js:160 +#, python-format +msgid "Please enter a username or email address." +msgstr "Bitte Benutzername oder EMail Adresse eingeben" + +#. module: auth_signup +#: selection:res.users,state:0 +msgid "Resetting Password" +msgstr "Passwort zurücksetzen" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13 +#, python-format +msgid "Username (Email)" +msgstr "Benutzername (EMail)" + +#. module: auth_signup +#: field:res.partner,signup_expiration:0 +msgid "Signup Expiration" +msgstr "Ablauf der Registritung" + +#. module: auth_signup +#: help:base.config.settings,auth_signup_reset_password:0 +msgid "This allows users to trigger a password reset from the Login page." +msgstr "Dies erlaubt Benutzern ein Zurücksetzen des Passwortes zu verlangen." + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21 +#, python-format +msgid "Log in" +msgstr "Login" + +#. module: auth_signup +#: field:res.partner,signup_valid:0 +msgid "Signup Token is Valid" +msgstr "Anmeldungs Token ist gültig" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/js/auth_signup.js:111 +#: code:addons/auth_signup/static/src/js/auth_signup.js:114 +#: code:addons/auth_signup/static/src/js/auth_signup.js:117 +#: code:addons/auth_signup/static/src/js/auth_signup.js:120 +#: code:addons/auth_signup/static/src/js/auth_signup.js:123 +#: code:addons/auth_signup/static/src/js/auth_signup.js:157 +#: code:addons/auth_signup/static/src/js/auth_signup.js:160 +#, python-format +msgid "Login" +msgstr "Login" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/js/auth_signup.js:94 +#, python-format +msgid "Invalid signup token" +msgstr "Anmeldungs Token ist ungültig" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/js/auth_signup.js:123 +#, python-format +msgid "Passwords do not match; please retype them." +msgstr "Passworte stimmen nicht überein, bitte neu eingeben" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/js/auth_signup.js:111 +#: code:addons/auth_signup/static/src/js/auth_signup.js:157 +#, python-format +msgid "No database selected !" +msgstr "Keine Datenbank ausgewählt-" + +#. module: auth_signup +#: view:res.users:0 +msgid "Reset Password" +msgstr "Passwort zurücksetzen" + +#. module: auth_signup +#: field:base.config.settings,auth_signup_reset_password:0 +msgid "Enable password reset from Login page" +msgstr "Erlaube Passwort zurücksetzen von der Login-Seite" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24 +#, python-format +msgid "Back to Login" +msgstr "Zurück zur Anmeldung" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22 +#, python-format +msgid "Sign up" +msgstr "Registrieren" + +#. module: auth_signup +#: model:ir.model,name:auth_signup.model_res_partner +msgid "Partner" +msgstr "Partner" + +#. module: auth_signup +#: field:res.partner,signup_token:0 +msgid "Signup Token" +msgstr "Anmelde Token" diff --git a/addons/base_action_rule/i18n/de.po b/addons/base_action_rule/i18n/de.po index a48c2ac39ee..65d5d6658e8 100644 --- a/addons/base_action_rule/i18n/de.po +++ b/addons/base_action_rule/i18n/de.po @@ -7,20 +7,20 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:03+0000\n" -"PO-Revision-Date: 2012-12-17 21:56+0000\n" +"PO-Revision-Date: 2012-12-19 20:29+0000\n" "Last-Translator: Thorsten Vocks (OpenBig.org) \n" "Language-Team: German \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-18 05:02+0000\n" -"X-Generator: Launchpad (build 16372)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: base_action_rule #: field:base.action.rule,act_followers:0 msgid "Set Followers" -msgstr "" +msgstr "Setze Followers" #. module: base_action_rule #: view:base.action.rule:0 @@ -45,7 +45,7 @@ msgstr "Verantwortlicher" #. module: base_action_rule #: model:ir.model,name:base_action_rule.model_ir_actions_server msgid "ir.actions.server" -msgstr "" +msgstr "ir.actions.server" #. module: base_action_rule #: view:base.action.rule:0 @@ -301,6 +301,18 @@ msgid "" "

\n" " " msgstr "" +"Klicken Sie zur Erstellung einer neuen automatischen Abfolge Regel.\n" +"\n" +"Benutzen Sie automatische Abfolge Regeln um diverse Voränge verschiedener " +"Formulare \n" +"für verschiedene Ansichten auszulösen. Zum Beispiel: Ein Interessent, der " +"durch einen\n" +"speziellen Benutzer angelegt wurde, wird einem bestimmten Team zugewiesen, " +"oder ein Vorgang\n" +"der nach 14 Tagen immer noch den Status Wiedervorlage ausweist, löst eine " +"automatisch E-Mail \n" +"Erinnerung aus.\n" +" " #. module: base_action_rule #: selection:base.action.rule,trg_date_type:0 @@ -330,7 +342,7 @@ msgstr "Auslösetermin" #. module: base_action_rule #: view:base.action.rule:0 msgid "Server Actions" -msgstr "" +msgstr "Server-Aktion" #~ msgid "" #~ "Check this if you want the rule to send an email to the responsible person." diff --git a/addons/base_action_rule/i18n/it.po b/addons/base_action_rule/i18n/it.po index c43eaf67bca..ea4eed02f32 100644 --- a/addons/base_action_rule/i18n/it.po +++ b/addons/base_action_rule/i18n/it.po @@ -8,14 +8,14 @@ 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-11 12:28+0000\n" -"Last-Translator: Nicola Riolini - Micronaet \n" +"PO-Revision-Date: 2012-12-19 21:06+0000\n" +"Last-Translator: Sergio Corato \n" "Language-Team: Italian \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-12 04:41+0000\n" -"X-Generator: Launchpad (build 16361)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: base_action_rule #: field:base.action.rule,act_followers:0 @@ -28,6 +28,9 @@ msgid "" "The rule uses the AND operator. The model must match all non-empty fields so " "that the rule executes the action described in the 'Actions' tab." msgstr "" +"La regola usa l'operatore AND. Nel modello devono corrispondere tutti i " +"campi non vuoti cosicché la regola esegua l'azione descritta nella scheda " +"'Azioni'." #. module: base_action_rule #: model:ir.model,name:base_action_rule.model_base_action_rule @@ -60,6 +63,8 @@ msgid "" "Server Actions to be Triggered (eg. Email Reminder, Call Object Method, " "etc...)" msgstr "" +"Azioni Server da Eseguire Automaticamente (es. Email di Promemoria, Chiamata " +"a Metodo di un Oggetto, ecc...)" #. module: base_action_rule #: field:base.action.rule,trg_date_range:0 @@ -219,7 +224,7 @@ msgstr "Attivo" #. module: base_action_rule #: field:base.action.rule,regex_name:0 msgid "Regex on Resource Name" -msgstr "" +msgstr "Regex sul nome risorsa" #. module: base_action_rule #: selection:base.action.rule,trg_date_type:0 diff --git a/addons/base_gengo/i18n/de.po b/addons/base_gengo/i18n/de.po index 06c9060a90c..4fa8bc497f7 100644 --- a/addons/base_gengo/i18n/de.po +++ b/addons/base_gengo/i18n/de.po @@ -8,14 +8,15 @@ 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-16 11:41+0000\n" -"Last-Translator: Felix Schubert \n" +"PO-Revision-Date: 2012-12-19 19:47+0000\n" +"Last-Translator: Thorsten Vocks (OpenBig.org) \n" "Language-Team: German \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-17 04:47+0000\n" -"X-Generator: Launchpad (build 16372)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: base_gengo #: view:res.company:0 @@ -51,7 +52,7 @@ msgstr "base.gengo.translations" #. module: base_gengo #: help:res.company,gengo_auto_approve:0 msgid "Jobs are Automatically Approved by Gengo." -msgstr "" +msgstr "Jobs werden automatisch durch Gengo geprüft." #. module: base_gengo #: field:base.gengo.translations,lang_id:0 @@ -61,13 +62,13 @@ msgstr "Sprache" #. module: base_gengo #: field:ir.translation,gengo_comment:0 msgid "Comments & Activity Linked to Gengo" -msgstr "" +msgstr "Kommentare & Gengo Aktivitäten" #. module: base_gengo #: code:addons/base_gengo/wizard/base_gengo_translations.py:124 #, python-format msgid "Gengo Sync Translation (Response)" -msgstr "" +msgstr "Gengo Synch Übersetzung (Antwort)" #. module: base_gengo #: code:addons/base_gengo/wizard/base_gengo_translations.py:72 @@ -76,11 +77,14 @@ msgid "" "Gengo `Public Key` or `Private Key` are missing. Enter your Gengo " "authentication parameters under `Settings > Companies > Gengo Parameters`." msgstr "" +"Es fehlen der Gengo `Public Key` oder `Private Key' zur Anmeldung. Geben " +"Sie Ihre Gengko Parameter unter Konfiguration / Unternehmens " +"Authentifizierung an unter" #. module: base_gengo #: selection:ir.translation,gengo_translation:0 msgid "Translation By Machine" -msgstr "" +msgstr "Maschinelle Vorhersage" #. module: base_gengo #: code:addons/base_gengo/wizard/base_gengo_translations.py:155 @@ -91,11 +95,15 @@ msgid "" "--\n" " Commented on %s by %s." msgstr "" +"%s\n" +"\n" +"--\n" +" Kommentar zu Schritt %s by %s." #. module: base_gengo #: field:ir.translation,gengo_translation:0 msgid "Gengo Translation Service Level" -msgstr "" +msgstr "Gengo Übersetzungssergvice" #. module: base_gengo #: constraint:ir.translation:0 @@ -106,7 +114,7 @@ msgstr "" #. module: base_gengo #: selection:ir.translation,gengo_translation:0 msgid "Standard" -msgstr "" +msgstr "Standard" #. module: base_gengo #: help:ir.translation,gengo_translation:0 @@ -114,65 +122,67 @@ msgid "" "You can select here the service level you want for an automatic translation " "using Gengo." msgstr "" +"Sie können die Dienstleistungen für eine automatische Übersetzung dieser " +"Gruppe einfach beauftragen." #. module: base_gengo #: field:base.gengo.translations,restart_send_job:0 msgid "Restart Sending Job" -msgstr "" +msgstr "Erneut senden" #. module: base_gengo #: view:ir.translation:0 msgid "To Approve In Gengo" -msgstr "" +msgstr "In Gengo genehmigen" #. module: base_gengo #: view:res.company:0 msgid "Private Key" -msgstr "" +msgstr "Privater Schlüssel" #. module: base_gengo #: view:res.company:0 msgid "Public Key" -msgstr "" +msgstr "Öffentlicher Schlüssel" #. module: base_gengo #: field:res.company,gengo_public_key:0 msgid "Gengo Public Key" -msgstr "" +msgstr "Öffentlicher Schlüssel in Gengo" #. module: base_gengo #: code:addons/base_gengo/wizard/base_gengo_translations.py:123 #, python-format msgid "Gengo Sync Translation (Request)" -msgstr "" +msgstr "Gengomit mit Übersetzungen (Anfragen)" #. module: base_gengo #: view:ir.translation:0 msgid "Translations" -msgstr "" +msgstr "Übersetzungen" #. module: base_gengo #: field:res.company,gengo_auto_approve:0 msgid "Auto Approve Translation ?" -msgstr "" +msgstr "Übersetzung automatisch genehmigen ?" #. module: base_gengo #: model:ir.actions.act_window,name:base_gengo.action_wizard_base_gengo_translations #: model:ir.ui.menu,name:base_gengo.menu_action_wizard_base_gengo_translations msgid "Gengo: Manual Request of Translation" -msgstr "" +msgstr "Gengo: Manuelle Erstellung einer Anfrage" #. module: base_gengo #: code:addons/base_gengo/ir_translation.py:62 #: code:addons/base_gengo/wizard/base_gengo_translations.py:109 #, python-format msgid "Gengo Authentication Error" -msgstr "" +msgstr "Gengo Authentifizierung Fehler" #. module: base_gengo #: model:ir.model,name:base_gengo.model_res_company msgid "Companies" -msgstr "" +msgstr "Unternehmen" #. module: base_gengo #: view:ir.translation:0 @@ -181,6 +191,9 @@ msgid "" "translation has to be approved to be uploaded in this system. You are " "supposed to do that directly by using your Gengo Account" msgstr "" +"Hinweis: Insoweit der Status 'in Bearbeitung' ist, bedeutet dieses, daß " +"diese Dienstleistung zuerst für einen Upload genehmigt werden muss. Sie " +"können dies mit Ihrem Gengo Konto direkt vornehmen." #. module: base_gengo #: code:addons/base_gengo/wizard/base_gengo_translations.py:82 @@ -189,16 +202,18 @@ msgid "" "Gengo connection failed with this message:\n" "``%s``" msgstr "" +"Die Verbindung scheitert mit dieser Gengo Nachricht: '\n" +"''%s''" #. module: base_gengo #: view:res.company:0 msgid "Gengo Parameters" -msgstr "" +msgstr "Gengo Parameter" #. module: base_gengo #: view:base.gengo.translations:0 msgid "Send" -msgstr "" +msgstr "Senden" #. module: base_gengo #: selection:ir.translation,gengo_translation:0 @@ -213,37 +228,37 @@ msgstr "" #. module: base_gengo #: view:ir.translation:0 msgid "Gengo Translation Service" -msgstr "" +msgstr "Gengo Übersetzungsservice" #. module: base_gengo #: selection:ir.translation,gengo_translation:0 msgid "Pro" -msgstr "" +msgstr "Pro" #. module: base_gengo #: view:base.gengo.translations:0 msgid "Gengo Request Form" -msgstr "" +msgstr "Gengo Formular für Angebote" #. module: base_gengo #: code:addons/base_gengo/wizard/base_gengo_translations.py:114 #, python-format msgid "Warning" -msgstr "" +msgstr "Warnung" #. module: base_gengo #: help:res.company,gengo_comment:0 msgid "" "This comment will be automatically be enclosed in each an every request sent " "to Gengo" -msgstr "" +msgstr "Dieser Kommentar wurde automatisch mitgesendet werden" #. module: base_gengo #: view:base.gengo.translations:0 msgid "Cancel" -msgstr "" +msgstr "Abbrechen" #. module: base_gengo #: view:base.gengo.translations:0 msgid "or" -msgstr "" +msgstr "oder" diff --git a/addons/base_import/i18n/de.po b/addons/base_import/i18n/de.po index 360cfcf353e..6085dc44877 100644 --- a/addons/base_import/i18n/de.po +++ b/addons/base_import/i18n/de.po @@ -8,13 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-24 02:52+0000\n" -"PO-Revision-Date: 2012-12-18 15:45+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2012-12-19 21:57+0000\n" +"Last-Translator: Thorsten Vocks (OpenBig.org) \n" "Language-Team: German \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-19 05:17+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: base_import @@ -22,14 +23,14 @@ msgstr "" #: code:addons/base_import/static/src/js/import.js:420 #, python-format msgid "Get all possible values" -msgstr "" +msgstr "Alle möglichen Werte holen" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:71 #, python-format msgid "Need to import data from an other application?" -msgstr "" +msgstr "Müssen Daten aus einer anderen Anwendung importiert werden?" #. module: base_import #. openerp-web @@ -47,6 +48,13 @@ msgid "" "give \n" " you an example for Products and their Categories." msgstr "" +"Wenn Sie externe Schlüssel verwenden, können sie CSV Dateien einlesen\n" +" mittels der Spalte \"Externer Schlüssel\", um den externen " +"Schlüssel eines jeden Datensatzes festzulegen.\n" +" Dann können Sie sich mit Spalten wie \"Feld/Externer " +"Schlüssel\" auf diesen Satz auf diesen Satz beziehen.\n" +" Die folgenden beiden CSV-Dateien dienen Ihnen hierzu als " +"Beispiel für Produkte und deren Kategorien." #. module: base_import #. openerp-web @@ -56,13 +64,15 @@ msgid "" "How to export/import different tables from an SQL \n" " application to OpenERP?" msgstr "" +"Wie können verschiedene Tabellen mit einer SQL-Anwendung ausgetauscht werden " +"(Im-/Export)?" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/js/import.js:310 #, python-format msgid "Relation Fields" -msgstr "" +msgstr "Beziehungsfelder" #. module: base_import #. openerp-web @@ -72,6 +82,9 @@ msgid "" "Country/Database ID: the unique OpenERP ID for a \n" " record, defined by the ID postgresql column" msgstr "" +"Land/Datenbankschlüssel: Der eindeutige OpenERP-Schlüssel eines " +"Datensatzes,\n" +" wie er ineiner postgresql-Spalte festgelegt wurde" #. module: base_import #. openerp-web @@ -95,7 +108,7 @@ msgstr "" msgid "" "For the country \n" " Belgium, you can use one of these 3 ways to import:" -msgstr "" +msgstr "Für das Land" #. module: base_import #. openerp-web @@ -121,13 +134,17 @@ msgid "" "companies) TO \n" " '/tmp/company.csv' with CSV HEADER;" msgstr "" +"kopiere\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-Datei für Hersteller, Wiederverkäufer" #. module: base_import #. openerp-web @@ -139,6 +156,9 @@ msgid "" "\n" " data from a third party application." msgstr "" +"Verwenden Sie\n" +" Land/Externer Schlüssel: Externer Schlüssel verwenden, wenn Daten einer " +"Drittanwendung importiert werden sollen." #. module: base_import #. openerp-web @@ -159,14 +179,14 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:351 #, python-format msgid "Don't Import" -msgstr "" +msgstr "Nicht importieren" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:24 #, python-format msgid "Select the" -msgstr "" +msgstr "Auswahl von" #. module: base_import #. openerp-web @@ -187,7 +207,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:141 #, python-format msgid "Country: the name or code of the country" -msgstr "" +msgstr "Land: Die Bezeichnung oder das Kürzel für das Land" #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_o2m_child @@ -199,21 +219,21 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:239 #, python-format msgid "Can I import several times the same record?" -msgstr "" +msgstr "Kann ich mehrfach den selben Artikel einlesen ?" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:15 #, python-format msgid "Validate" -msgstr "" +msgstr "Bestätigen" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:55 #, python-format msgid "Map your data to OpenERP" -msgstr "" +msgstr "Zuordnung Ihrer Daten zu OpenERP" #. module: base_import #. openerp-web @@ -224,6 +244,10 @@ msgid "" " the easiest way when your data come from CSV files \n" " that have been created manually." msgstr "" +"Benutze das Land: Es ist\n" +" der einfachste Weg, wenn Ihre Daten aus externen . " +"csv Dateien bestehen, die\n" +" per Hand eingegeben wurden." #. module: base_import #. openerp-web @@ -233,6 +257,8 @@ msgid "" "What's the difference between Database ID and \n" " External ID?" msgstr "" +"Was ist der Unterschied zwischen einer 'Database ID' und einer 'External ID' " +"?" #. module: base_import #. openerp-web @@ -244,13 +270,16 @@ msgid "" "\n" " you 3 different fields to import:" msgstr "" +"Um sich für einen Import auf das Land \n" +" für einen Kontakt zu beziehen, schlägt\n" +" OpenERP drei verschiedene Möglichkeiten vor:" #. 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 "Was kann getan werden, wenn mehrere identische Treffer passend sind." #. module: base_import #. openerp-web @@ -262,7 +291,7 @@ msgstr "" #. module: base_import #: field:base_import.tests.models.preview,somevalue:0 msgid "Some Value" -msgstr "" +msgstr "Irgendein Wert" #. module: base_import #. openerp-web @@ -272,6 +301,9 @@ msgid "" "The following CSV file shows how to import \n" " suppliers and their respective contacts" msgstr "" +"Die folgende .csv Datei soll exemplarisch zeigen, wie Sie Lieferanten und " +"deren Ansprechpartner\n" +"importieren können." #. module: base_import #. openerp-web @@ -281,6 +313,9 @@ msgid "" "How can I change the CSV file format options when \n" " saving in my spreadsheet application?" msgstr "" +"Wie kann ich mein .csv Datei Format passend auswählen, wenn ich die Daten in " +"einer Tabellenkalkulation\n" +" bearbeiten möchte und die Änderungen speichern möchte ?" #. module: base_import #. openerp-web @@ -301,6 +336,14 @@ msgid "" "orignial \n" " database)." msgstr "" +"Wie Sie in dieser Datei sehen können, arbeiten Fabien und Laurence\n" +"für die Bigees Firma (company_1), während Eric für die Firma Organi tätig\n" +"ist. Die Beziehung zwischen Personen und Unternehmen erfolgt über die\n" +"Externe ID der Unternehmen. Wir haben als eindeutiges Präfix \n" +"vor der \"Externen ID\" den Namen der Tabelle ergänzt, um über diesen Weg \n" +"einen Konflikt der ID zwischen Personen und Unternehmen zu vermeiden.\n" +"(person_1 und company_1, die sich gemeinsam die ID 1 in der Datenbank " +"teilen)." #. module: base_import #. openerp-web @@ -321,7 +364,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:148 #, python-format msgid "Country: Belgium" -msgstr "" +msgstr "Land: Belgien" #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_char_stillreadonly @@ -336,13 +379,15 @@ msgid "" "External ID,Name,Is a \n" " Company,Related Company/External ID" msgstr "" +"External ID,Name ... ist \n" +" Company,Related Company/External ID" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:233 #, python-format msgid "Suppliers and their respective contacts" -msgstr "" +msgstr "Lieferanten und seine korrespondierenden Ansprechpartner" #. module: base_import #. openerp-web @@ -375,6 +420,10 @@ msgid "" "\n" " PSQL:" msgstr "" +"Zur Erstellung einer .csv Datei für Ansprechpartner, die eine Verknüpfung zu " +"einem Unternehmen haben,\n" +" können wir folgendes PSQL Kommando zu dessen " +"Erstellung verwenden." #. module: base_import #. openerp-web @@ -386,11 +435,14 @@ msgid "" " (in 'Save As' dialog box > click 'Tools' dropdown \n" " list > Encoding tab)." msgstr "" +"Excel ermöglicht Ihnen die Daten zu bearbeiten, die Sie vorher abgespeichert " +"haben. \n" +"(unter 'Speichern Unter' > Extra > Werkzeuge > Daten bearbeiten Aktenreiter)." #. module: base_import #: field:base_import.tests.models.preview,othervalue:0 msgid "Other Variable" -msgstr "" +msgstr "Andere Variable" #. module: base_import #. openerp-web @@ -402,6 +454,8 @@ msgid "" " later, it's thus good practice to specify it\n" " whenever possible" msgstr "" +"wird außerdem benötigt, um bestehende Daten zu einem späteren Zeitpunkt zu " +"aktualisieren." #. module: base_import #. openerp-web @@ -411,6 +465,10 @@ msgid "" "file to import. If you need a sample importable file, you\n" " can use the export tool to generate one." msgstr "" +"zu importierende Datei. Sollten Sie eine Beispieldatei benötigen, können " +"Sie\n" +"eine Tabellenkalkulation dazu benutzen, einfach eine .csv Datei zu " +"erstellen." #. module: base_import #. openerp-web @@ -429,14 +487,14 @@ msgstr "" #. module: base_import #: help:base_import.import,file:0 msgid "File to check and/or import, raw binary (not base64)" -msgstr "" +msgstr "Zu prüfende Datei und/oder Import, raw binary (not 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 "Bestellungen mit seinen einzelnen Positionen" #. module: base_import #. openerp-web @@ -448,13 +506,19 @@ msgid "" " field corresponding to the column. This makes imports\n" " simpler especially when the file has many columns." msgstr "" +"Für eine Datei\n" +" mit existierenden Spaltenbeschriftungen, kann OpenERP " +"eine automatische\n" +" Datenerkennung über die Spalten vonehmen. Dadurch wird " +"ein Dateinmport mit zahlreichen\n" +" Spalten vereinfacht." #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:26 #, python-format msgid ".CSV" -msgstr "" +msgstr ".csv" #. module: base_import #. openerp-web @@ -464,6 +528,8 @@ msgid "" ". The issue is\n" " usually an incorrect file encoding." msgstr "" +"Das Problem sollte\n" +" im Normallfall ein korrektes Dateiformat abgespeichert werden." #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_m2o_required @@ -478,6 +544,9 @@ msgid "" "How can I import a one2many relationship (e.g. several \n" " Order Lines of a Sale Order)?" msgstr "" +"Wie kann ich eine one2many Beziehung importieren (z.B. verschiedene " +"Auftragspositionen\n" +" zu einem Auftrag) ?" #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_char_noreadonly @@ -505,7 +574,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:30 #, python-format msgid "CSV File:" -msgstr "" +msgstr ".csv Datei:" #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_preview @@ -528,19 +597,19 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:313 #, python-format msgid "It will produce the following CSV file:" -msgstr "" +msgstr "hierdurch wird folgende .csv Datei erzeugt:" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:362 #, python-format msgid "Here is the start of the file we could not import:" -msgstr "" +msgstr "Hier ist der Beginn der Zeile, die nicht gelesen werden konnte." #. module: base_import #: field:base_import.import,file_type:0 msgid "File Type" -msgstr "" +msgstr "Datei Format" #. module: base_import #: model:ir.model,name:base_import.model_base_import_import @@ -557,7 +626,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:360 #, python-format msgid "Import preview failed due to:" -msgstr "" +msgstr "Importiere Voransicht mit Fehler" #. module: base_import #. openerp-web @@ -569,13 +638,16 @@ msgid "" "\n" " that imported it)" msgstr "" +"Country/External ID: Die ID für diesen Ansatz wird in einer anderen " +"Anwendung referenziert sein (oder zu .xml die\n" +"importiert wurde)." #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:35 #, python-format msgid "Reload data to check changes." -msgstr "" +msgstr "Erneut Ansicht laden, um Änderungen anzuwenden." #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_char_readonly @@ -615,7 +687,7 @@ msgstr "" #: code:addons/base_import/models.py:264 #, python-format msgid "You must configure at least one field to import" -msgstr "" +msgstr "Sie müssen mindestens ein Feld für einen Import konfigurieren." #. module: base_import #. openerp-web @@ -631,7 +703,7 @@ msgstr "" msgid "" "The first row of the\n" " file contains the label of the column" -msgstr "" +msgstr "Die erste Zeile, der Datei beinhaltet immer eine Zeile." #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_char_states @@ -643,14 +715,14 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:7 #, python-format msgid "Import a CSV File" -msgstr "" +msgstr "Importiere .csv Datei" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/js/import.js:74 #, python-format msgid "Quoting:" -msgstr "" +msgstr "Angebot:" #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_m2o_required_related @@ -670,21 +742,21 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:396 #, python-format msgid "Import" -msgstr "" +msgstr "Importieren" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/js/import.js:407 #, python-format msgid "Here are the possible values:" -msgstr "" +msgstr "Hier sind die möglichen Werte" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:82 #, python-format msgid "The" -msgstr "" +msgstr "Der" #. module: base_import #. openerp-web @@ -700,14 +772,14 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:293 #, python-format msgid "dump of such a PostgreSQL database" -msgstr "" +msgstr "dump einer Postgres-Datenbank" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:301 #, python-format msgid "This SQL command will create the following CSV file:" -msgstr "" +msgstr "Ein SQL Kommando, könnte folgendes .csv erstellen." #. module: base_import #. openerp-web @@ -717,6 +789,9 @@ msgid "" "The following CSV file shows how to import purchase \n" " orders with their respective purchase order lines:" msgstr "" +"Die folgende .csv Datei zeigt exemplarisch, wie eine Bestellung im Einkauf " +"mit seinen Einzelposition\n" +"importiert wird." #. module: base_import #. openerp-web @@ -726,6 +801,8 @@ msgid "" "What can I do when the Import preview table isn't \n" " displayed correctly?" msgstr "" +"Was sollte ich tun, wenn die Voransicht beim Import nicht wie gewünscht " +"angezeigt wird." #. module: base_import #: field:base_import.tests.models.char,value:0 @@ -742,7 +819,7 @@ msgstr "" #: field:base_import.tests.models.o2m.child,parent_id:0 #: field:base_import.tests.models.o2m.child,value:0 msgid "unknown" -msgstr "" +msgstr "unbekannt" #. module: base_import #. openerp-web @@ -784,14 +861,14 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:227 #, python-format msgid "File for some Quotations" -msgstr "" +msgstr "Datei für einige Angebote" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/js/import.js:72 #, python-format msgid "Encoding:" -msgstr "" +msgstr "Eingabe" #. module: base_import #. openerp-web @@ -821,13 +898,15 @@ msgid "" " \"External ID\". In PSQL, write the following " "command:" msgstr "" +"Zuerst exportieren wir alle Unternehmen mit seiner \"Externen ID\".\n" +"In PSQL erfolgt das durch das aktive Kommando:" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/js/import.js:373 #, python-format msgid "Everything seems valid." -msgstr "" +msgstr "Alles scheint o.k. zu sein." #. module: base_import #. openerp-web @@ -840,13 +919,18 @@ msgid "" " use make use of the external ID for this field \n" " 'Category'." msgstr "" +"Inwsoweit Sie keine Änderung bei der\n" +" Konfiguration der Produkt Kategorien " +"wünschen,empfehlen wir\n" +" Ihnen die Externe ID für das Feld 'Kategorie' " +"einzusetzen." #. module: base_import #. openerp-web #: code:addons/base_import/static/src/js/import.js:390 #, python-format msgid "at row %d" -msgstr "" +msgstr "in Zeile %d" #. module: base_import #. openerp-web @@ -856,6 +940,8 @@ msgid "" "How can I import a many2many relationship field \n" " (e.g. a customer that has multiple tags)?" msgstr "" +"Wie kann eine many2many Relation importiert werden ?\n" +" (z.B. ein Kunde mit mehreren Kennzeichen)" #. module: base_import #. openerp-web @@ -918,7 +1004,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:20 #, python-format msgid "Cancel" -msgstr "" +msgstr "Abbrechen" #. module: base_import #. openerp-web @@ -928,13 +1014,14 @@ msgid "" "What happens if I do not provide a value for a \n" " specific field?" msgstr "" +"Was passiert wenn Sie in bestimmten Feldern keinen Eintrag vornehmen ?" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:68 #, python-format msgid "Frequently Asked Questions" -msgstr "" +msgstr "Häufig gestellte Fragen" #. module: base_import #. openerp-web @@ -991,7 +1078,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:169 #, python-format msgid "CSV file for categories" -msgstr "" +msgstr ".csv Dateien für Kategorien" #. module: base_import #. openerp-web @@ -1016,7 +1103,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:170 #, python-format msgid "CSV file for Products" -msgstr "" +msgstr ".csv Datei für Produkte" #. module: base_import #. openerp-web @@ -1107,12 +1194,12 @@ msgstr "" #: code:addons/base_import/static/src/js/import.js:73 #, python-format msgid "Separator:" -msgstr "" +msgstr "Trennzeichen" #. module: base_import #: field:base_import.import,file_name:0 msgid "File Name" -msgstr "" +msgstr "Dateiname" #. module: base_import #. openerp-web @@ -1129,21 +1216,21 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:39 #, python-format msgid "File Format Options…" -msgstr "" +msgstr "Datei Format Optionen" #. 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 "zwischen Zeilen %d und %d" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:19 #, python-format msgid "or" -msgstr "" +msgstr "oder" #. module: base_import #. openerp-web @@ -1161,4 +1248,4 @@ msgstr "" #. module: base_import #: field:base_import.import,file:0 msgid "File" -msgstr "" +msgstr "Datei" diff --git a/addons/base_import/i18n/es.po b/addons/base_import/i18n/es.po new file mode 100644 index 00000000000..c80dd35794d --- /dev/null +++ b/addons/base_import/i18n/es.po @@ -0,0 +1,1311 @@ +# Spanish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-11-24 02:52+0000\n" +"PO-Revision-Date: 2012-12-19 16:36+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: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/js/import.js:420 +#, python-format +msgid "Get all possible values" +msgstr "Obtener todos los valores posibles" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:71 +#, python-format +msgid "Need to import data from an other application?" +msgstr "¿Se necesita importar datos desde otra aplicación?" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:163 +#, python-format +msgid "" +"When you use External IDs, you can import CSV files \n" +" with the \"External ID\" column to define the " +"External \n" +" ID of each record you import. Then, you will be able " +"\n" +" to make a reference to that record with columns like " +"\n" +" \"Field/External ID\". The following two CSV files " +"give \n" +" you an example for Products and their Categories." +msgstr "" +"Cuando se usan identificadores externos, puede importar archivos CSV con la " +"columna \"Id. externo\" para definir el id. externo de cada registro a " +"importar. Entonces, podrá hacer referencia a ese registro con columnas del " +"tipo \"Id. de campo/externo\". Los siguientes dos archivos son un ejemplo " +"para los productos y sus categorías." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:271 +#, python-format +msgid "" +"How to export/import different tables from an SQL \n" +" application to OpenERP?" +msgstr "" +"¿Cómo exportar/importar diversas tablas desde una aplicación SQL a OpenERP?" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/js/import.js:310 +#, python-format +msgid "Relation Fields" +msgstr "Campos relación" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:142 +#, python-format +msgid "" +"Country/Database ID: the unique OpenERP ID for a \n" +" record, defined by the ID postgresql column" +msgstr "" +"País/Id. de la BD: El id. único de OpenERP para un registro, definido por la " +"columna ID de Postgresql" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:155 +#, python-format +msgid "" +"Use \n" +" Country/Database ID: You should rarely use this \n" +" notation. It's mostly used by developers as it's " +"main \n" +" advantage is to never have conflicts (you may have \n" +" several records with the same name, but they always " +"\n" +" have a unique Database ID)" +msgstr "" +"Usar País/Id. de la BD: Raramente debería usar esta notación. Se usa más a " +"menudo por los desarrolladores puesto que su principal ventaja es la de no " +"tener nunca conflictos (puede que tenga varios registros con el mismo " +"nombre, pero sólo tendrán un único id. de base de datos)" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:146 +#, python-format +msgid "" +"For the country \n" +" Belgium, you can use one of these 3 ways to import:" +msgstr "" +"Para el país Bélgica, puede usar uno de estos tres métodos de importación:" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:303 +#, python-format +msgid "company_1,Bigees,True" +msgstr "company_1,Bigees,True" + +#. module: base_import +#: model:ir.model,name:base_import.model_base_import_tests_models_m2o +msgid "base_import.tests.models.m2o" +msgstr "Relación many2one de los test de importación" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:297 +#, python-format +msgid "" +"copy \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;" +msgstr "" +"copiar (seleccione 'company_'||id como \"Id. externo\", company_name como " +"\"Nombre\", 'True' como \"Es una compañía\" de companies) a " +"'/tmp/company.csv' con la cabecera CSV;" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:206 +#, python-format +msgid "CSV file for Manufacturer, Retailer" +msgstr "Archivo CSV para fabricante, comerciante al por menor" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:160 +#, python-format +msgid "" +"Use \n" +" Country/External ID: Use External ID when you import " +"\n" +" data from a third party application." +msgstr "" +"Usar País/Id. externo: Use id. externo cuando importa datos de una " +"aplicación externa." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:316 +#, python-format +msgid "person_1,Fabien,False,company_1" +msgstr "person_1,Fabien,False,company_1" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:80 +#, python-format +msgid "XXX/External ID" +msgstr "XXX/Id. externo" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:351 +#, python-format +msgid "Don't Import" +msgstr "No Importar" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:24 +#, python-format +msgid "Select the" +msgstr "Seleccione el" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:100 +#, python-format +msgid "" +"Note that if your CSV file \n" +" has a tabulation as separator, OpenERP will not \n" +" detect the separations. You will need to change the " +"\n" +" file format options in your spreadsheet application. " +"\n" +" See the following question." +msgstr "" +"Tenga en cuenta que si su archivos CSV tiene una tabulación como separador, " +"OpenERP no detectará las separaciones. Debe cambiar las opciones de formato " +"en su aplicación de hoja de cálculo. Vea la siguiente pregunta." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:141 +#, python-format +msgid "Country: the name or code of the country" +msgstr "País: el nombre o código del país" + +#. module: base_import +#: model:ir.model,name:base_import.model_base_import_tests_models_o2m_child +msgid "base_import.tests.models.o2m.child" +msgstr "Hijos de la relación many2one de los test de importación" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:239 +#, python-format +msgid "Can I import several times the same record?" +msgstr "¿Se puede importar varias veces el mismo registro?" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:15 +#, python-format +msgid "Validate" +msgstr "Validar" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:55 +#, python-format +msgid "Map your data to OpenERP" +msgstr "Mapear sus datos a OpenERP" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:153 +#, python-format +msgid "" +"Use Country: This is \n" +" the easiest way when your data come from CSV files \n" +" that have been created manually." +msgstr "" +"Usar País: Ésta es lo forma más sencilla cuando los datos provienen de " +"archivos CSV que se han creado manualmente." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:127 +#, python-format +msgid "" +"What's the difference between Database ID and \n" +" External ID?" +msgstr "¿Cuál es la diferencia entre id. de la BD e id. externo?" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:138 +#, python-format +msgid "" +"For example, to \n" +" reference the country of a contact, OpenERP proposes " +"\n" +" you 3 different fields to import:" +msgstr "" +"Por ejemplo, para referenciar el país de un contacto, OpenERP propone 3 " +"campos diferentes a importar:" + +#. 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 "¿Qué puedo hacer si tengo múltiples coincidencias para un campo?" + +#. 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 "Id. externo, nombre, es una compañía" + +#. module: base_import +#: field:base_import.tests.models.preview,somevalue:0 +msgid "Some Value" +msgstr "Algún valor" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:231 +#, python-format +msgid "" +"The following CSV file shows how to import \n" +" suppliers and their respective contacts" +msgstr "" +"El siguiente archivo CSV muestra cómo importar proveedores y sus respectivos " +"contactos" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:109 +#, python-format +msgid "" +"How can I change the CSV file format options when \n" +" saving in my spreadsheet application?" +msgstr "" +"¿Cómo puede cambiar el formato del archivo CSV cuando se guarda en mi " +"aplicación de hoja de cálculo?" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:320 +#, python-format +msgid "" +"As you can see in this file, Fabien and Laurence \n" +" are working for the Bigees company (company_1) and \n" +" Eric is working for the Organi company. The relation " +"\n" +" between persons and companies is done using the \n" +" External ID of the companies. We had to prefix the \n" +" \"External ID\" by the name of the table to avoid a " +"\n" +" conflict of ID between persons and companies " +"(person_1 \n" +" and company_1 who shared the same ID 1 in the " +"orignial \n" +" database)." +msgstr "" +"Como puede ver en este archivo, Fabien y Laurence están trabajando para la " +"compañía Bigees (company_1) y Eric está trabajando para la compañía Organi. " +"La relación entre las personas y las compañías se hace usando el id. externo " +"de las compañías. Hemos tenido que prefijar el id. externo con el nombre de " +"la tabla para evitar un conflicto de id. entre las personas y las compañías " +"(person_1 y company_1 comparten el mismo id (1) en la base de datos " +"original)." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:308 +#, python-format +msgid "" +"copy (select \n" +" '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" +msgstr "" +"copiar (seleccione 'person_'||id como \"Id. externo\", person_name como " +"\"Nombre\", 'False' como \"Es una compañía\", 'company_'||company_id como " +"\"Compañía relacionada/Id. externo\" de persons) a '/tmp/person.csv' con la " +"cabecera CSV;" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:148 +#, python-format +msgid "Country: Belgium" +msgstr "País: Bélgica" + +#. module: base_import +#: model:ir.model,name:base_import.model_base_import_tests_models_char_stillreadonly +msgid "base_import.tests.models.char.stillreadonly" +msgstr "Cadena de sólo lectura de los modelos de test de importación" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:314 +#, python-format +msgid "" +"External ID,Name,Is a \n" +" Company,Related Company/External ID" +msgstr "" +"Id. externo, nombre, es una compañía. relacionada con Compañía/Id. externo" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:233 +#, python-format +msgid "Suppliers and their respective contacts" +msgstr "Proveedores y sus respectivos contactos" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:179 +#, python-format +msgid "" +"If for example you have two product categories \n" +" with the child name \"Sellable\" (ie. \"Misc. \n" +" Products/Sellable\" & \"Other Products/Sellable\"),\n" +" your validation is halted but you may still import \n" +" your data. However, we recommend you do not import " +"the \n" +" data because they will all be linked to the first \n" +" 'Sellable' category found in the Product Category " +"list \n" +" (\"Misc. Products/Sellable\"). We recommend you " +"modify \n" +" one of the duplicates' values or your product " +"category \n" +" hierarchy." +msgstr "" +"Si por ejemplo tiene dos categorías de producto con el nombre hijo de " +"\"Vendibles\" (por ejemplo \"Productos miscelánea/Vendibles\" y \"Otros " +"productos/Vendibles\", la validación se para, pero aún podrá importar los " +"datos. Sin embargo, recomendamos no importar los datos porque estarán " +"vinculados todos a la primera categoría \"Vendibles\" encontrada en la lista " +"de categorías de producto. Recomendamos modificar uno de los valores " +"duplicados o la jerarquía de categorías." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:306 +#, python-format +msgid "" +"To create the CSV file for persons, linked to \n" +" companies, we will use the following SQL command in " +"\n" +" PSQL:" +msgstr "" +"Para crear un archivo CSV para personas, enlazadas a compañías, usaremos el " +"siguiente comando SQL en PSQL:" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:119 +#, python-format +msgid "" +"Microsoft Excel will allow \n" +" you to modify only the encoding when saving \n" +" (in 'Save As' dialog box > click 'Tools' dropdown \n" +" list > Encoding tab)." +msgstr "" +"Microsoft Excel permite modificar solamente la codificación cuando guarda un " +"archivo CSV (en el cuadro de diálogo 'Guardar como' > pulsar la lista " +"desplegable 'Herramientas' > pestaña 'Codificación')." + +#. module: base_import +#: field:base_import.tests.models.preview,othervalue:0 +msgid "Other Variable" +msgstr "Otra variable" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:82 +#, python-format +msgid "" +"will also be used to update the original\n" +" import if you need to re-import modified data\n" +" later, it's thus good practice to specify it\n" +" whenever possible" +msgstr "" +"será usado para actualizar la importación original si necesita reimportar " +"datos modificados más tarde, por lo que es una buena práctica especificarlo " +"cuando sea posible" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:26 +#, python-format +msgid "" +"file to import. If you need a sample importable file, you\n" +" can use the export tool to generate one." +msgstr "" +"archivo a importar. Si necesita una muestra de un archivo importable, puede " +"usar la herramienta de exportación para generarla." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:148 +#, python-format +msgid "" +"Country/Database \n" +" ID: 21" +msgstr "País/Id. de la BD: 21" + +#. module: base_import +#: model:ir.model,name:base_import.model_base_import_tests_models_char +msgid "base_import.tests.models.char" +msgstr "Cadena de los modelos de test de importación" + +#. module: base_import +#: help:base_import.import,file:0 +msgid "File to check and/or import, raw binary (not base64)" +msgstr "Archivo a comprobar y/o importar, binario en bruto (no 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 "Pedidos de compra con sus respectivas líneas de pedido de compra" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:60 +#, python-format +msgid "" +"If the file contains\n" +" the column names, OpenERP can try auto-detecting the\n" +" field corresponding to the column. This makes imports\n" +" simpler especially when the file has many columns." +msgstr "" +"Si el archivo contiene los nombres de columna, OpenERP intentará auto-" +"detectar el campo correspondiente a la columna. Esto hace la importación más " +"sencilla, especialmente cuando el archivo tiene muchas columnas." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:26 +#, python-format +msgid ".CSV" +msgstr ".CSV" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:360 +#, python-format +msgid "" +". The issue is\n" +" usually an incorrect file encoding." +msgstr ". La problemática suele ser una codificación de archivo incorrecta." + +#. module: base_import +#: model:ir.model,name:base_import.model_base_import_tests_models_m2o_required +msgid "base_import.tests.models.m2o.required" +msgstr "Campos many2one requeridos de los modelos de test de importación" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:212 +#, python-format +msgid "" +"How can I import a one2many relationship (e.g. several \n" +" Order Lines of a Sale Order)?" +msgstr "" +"¿Cómo puede importar una relación one2many (uno a muchos; por ejemplo, " +"varias líneas de pedido de un pedido de venta)?" + +#. module: base_import +#: model:ir.model,name:base_import.model_base_import_tests_models_char_noreadonly +msgid "base_import.tests.models.char.noreadonly" +msgstr "Campos de cadena escribibles de los modelos de test de importación" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:113 +#, python-format +msgid "" +"If you edit and save CSV files in speadsheet \n" +" applications, your computer's regional settings will " +"\n" +" be applied for the separator and delimiter. \n" +" We suggest you use OpenOffice or LibreOffice Calc \n" +" as they will allow you to modify all three options \n" +" (in 'Save As' dialog box > Check the box 'Edit " +"filter \n" +" settings' > Save)." +msgstr "" +"Si edita y guarda archivos en las aplicaciones de hoja de cálculo, se " +"aplicará la configuración regional del ordenador para el separador y el " +"delimitador. Le sugerimos usar OpenOffice o LibreOffice Calc, que permiten " +"modificar dichas opciones (en 'Guardar como...' > Marcar casilla 'Editar " +"filtro' > Gurdar)." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:30 +#, python-format +msgid "CSV File:" +msgstr "Archivo CSV:" + +#. module: base_import +#: model:ir.model,name:base_import.model_base_import_tests_models_preview +msgid "base_import.tests.models.preview" +msgstr "Previsualización de los modelos de test de importación" + +#. module: base_import +#: model:ir.model,name:base_import.model_base_import_tests_models_char_required +msgid "base_import.tests.models.char.required" +msgstr "Cadena requerida de los modelos de test de importación" + +#. module: base_import +#: code:addons/base_import/models.py:112 +#, python-format +msgid "Database ID" +msgstr "Id. de la BD" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:313 +#, python-format +msgid "It will produce the following CSV file:" +msgstr "Se creará el siguiente archivo CSV:" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:362 +#, python-format +msgid "Here is the start of the file we could not import:" +msgstr "Éste es el comienzo del archivo que no se ha podido importar:" + +#. module: base_import +#: field:base_import.import,file_type:0 +msgid "File Type" +msgstr "Tipo de archivo" + +#. module: base_import +#: model:ir.model,name:base_import.model_base_import_import +msgid "base_import.import" +msgstr "Importación" + +#. module: base_import +#: model:ir.model,name:base_import.model_base_import_tests_models_o2m +msgid "base_import.tests.models.o2m" +msgstr "Modelo one2may de test de importación" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:360 +#, python-format +msgid "Import preview failed due to:" +msgstr "La previsualización de la importación ha fallado debido a:" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:144 +#, python-format +msgid "" +"Country/External ID: the ID of this record \n" +" referenced in another application (or the .XML file " +"\n" +" that imported it)" +msgstr "" +"País/Id. externo: el id. de este registro referenciado en otra aplicación (o " +"del archivo .XML que lo importó)" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:35 +#, python-format +msgid "Reload data to check changes." +msgstr "Recargar datos para comprobar cambios." + +#. module: base_import +#: model:ir.model,name:base_import.model_base_import_tests_models_char_readonly +msgid "base_import.tests.models.char.readonly" +msgstr "Cadena de sólo lectura de los modelos de test de importación" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:131 +#, python-format +msgid "" +"Some fields define a relationship with another \n" +" object. For example, the country of a contact is a \n" +" link to a record of the 'Country' object. When you \n" +" want to import such fields, OpenERP will have to \n" +" recreate links between the different records. \n" +" To help you import such fields, OpenERP provides 3 \n" +" mechanisms. You must use one and only one mechanism " +"\n" +" per field you want to import." +msgstr "" +"Algunos campos definen una relación con otro objeto. Por ejemplo, el país de " +"un contacto es un enlace a un registro del objeto 'País'. Cuando quiere " +"importar dichos campos, OpenERP tendrá que recrear los enlaces entre los " +"diferentes registros. Para ayudar a importar tales campos, OpenERP provee " +"tres mecanismos. Debe usar uno y sólo uno de esos mecanismo por campo que " +"quiera importar." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:201 +#, python-format +msgid "" +"The tags should be separated by a comma without any \n" +" spacing. For example, if you want you customer to be " +"\n" +" lined to both tags 'Manufacturer' and 'Retailer' \n" +" then you will encode it as follow \"Manufacturer,\n" +" Retailer\" in the same column of your CSV file." +msgstr "" +"Las etiquetas deben separarse por una coma sin ningún espacio. Por ejemplo, " +"si quiere que su cliente esté asignado tanto a la etiqueta 'Fabricante' como " +"a la 'Comerciante al por menor', entonces debe codificarlo como sigue " +"\"Fabricante,Comerciante al por menor\", en la misma columna en su archivo " +"CSV." + +#. module: base_import +#: code:addons/base_import/models.py:264 +#, python-format +msgid "You must configure at least one field to import" +msgstr "Debe configurar al menos un campo a importar" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:304 +#, python-format +msgid "company_2,Organi,True" +msgstr "company_2,Organi,True" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:58 +#, python-format +msgid "" +"The first row of the\n" +" file contains the label of the column" +msgstr "La primera fila del archivo contiene las etiquetas de la columnas" + +#. module: base_import +#: model:ir.model,name:base_import.model_base_import_tests_models_char_states +msgid "base_import.tests.models.char.states" +msgstr "Estados de los modelos de test de importación" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:7 +#, python-format +msgid "Import a CSV File" +msgstr "Importar un archivo CSV" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/js/import.js:74 +#, python-format +msgid "Quoting:" +msgstr "Citando:" + +#. module: base_import +#: model:ir.model,name:base_import.model_base_import_tests_models_m2o_required_related +msgid "base_import.tests.models.m2o.required.related" +msgstr "" +"Relaciones de los campos many2one requeridos de los modelos de test de " +"importación" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:293 +#, python-format +msgid ")." +msgstr ")." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:18 +#: code:addons/base_import/static/src/xml/import.xml:396 +#, python-format +msgid "Import" +msgstr "Importar" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/js/import.js:407 +#, python-format +msgid "Here are the possible values:" +msgstr "Éstos son los posibles valores:" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:82 +#, python-format +msgid "The" +msgstr "El" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/js/import.js:227 +#, python-format +msgid "" +"A single column was found in the file, this often means the file separator " +"is incorrect" +msgstr "" +"Sólo se ha encontrado una columna en el archivo. Esto suele significar que " +"el separador de archivo es incorrecto." + +#. 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 "volcado de la base de datos de PostgreSQL" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:301 +#, python-format +msgid "This SQL command will create the following CSV file:" +msgstr "Este comando SQL creará el siguiente archivo CSV:" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:228 +#, python-format +msgid "" +"The following CSV file shows how to import purchase \n" +" orders with their respective purchase order lines:" +msgstr "" +"El siguiente archivo CSV muestra como importar pedidos de compra con sus " +"respectivas líneas de pedido de compra:" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:91 +#, python-format +msgid "" +"What can I do when the Import preview table isn't \n" +" displayed correctly?" +msgstr "" +"¿Qué puedo hacer cuando la tabla de previsualización de importación no se " +"está mostrando correctamente?" + +#. module: base_import +#: field:base_import.tests.models.char,value:0 +#: field:base_import.tests.models.char.noreadonly,value:0 +#: field:base_import.tests.models.char.readonly,value:0 +#: field:base_import.tests.models.char.required,value:0 +#: field:base_import.tests.models.char.states,value:0 +#: field:base_import.tests.models.char.stillreadonly,value:0 +#: field:base_import.tests.models.m2o,value:0 +#: field:base_import.tests.models.m2o.related,value:0 +#: field:base_import.tests.models.m2o.required,value:0 +#: field:base_import.tests.models.m2o.required.related,value:0 +#: field:base_import.tests.models.o2m,value:0 +#: field:base_import.tests.models.o2m.child,parent_id:0 +#: field:base_import.tests.models.o2m.child,value:0 +msgid "unknown" +msgstr "desconocido" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:317 +#, python-format +msgid "person_2,Laurence,False,company_1" +msgstr "person_2,Laurence,False,company_1" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:149 +#, python-format +msgid "Country/External ID: base.be" +msgstr "País/Id. externo: base.be" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:288 +#, python-format +msgid "" +"As an example, suppose you have a SQL database \n" +" with two tables you want to import: companies and \n" +" persons. Each person belong to one company, so you \n" +" will have to recreate the link between a person and " +"\n" +" the company he work for. (If you want to test this \n" +" example, here is a" +msgstr "" +"Como ejemplo, supongo que tiene una base de datos SQL con dos tablas que " +"quiere importar: compañías y personas. Cada persona pertenece a una " +"compañía, por lo que tendrá que recrear el enlace entre la persona y la " +"compañía en la que trabaja. (Si quiere comprobar este ejemplo, aquí hay un" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/js/import.js:396 +#, python-format +msgid "(%d more)" +msgstr "(%d más)" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:227 +#, python-format +msgid "File for some Quotations" +msgstr "Archivo para las citas" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/js/import.js:72 +#, python-format +msgid "Encoding:" +msgstr "Codificación:" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:280 +#, python-format +msgid "" +"To manage relations between tables, \n" +" you can use the \"External ID\" facilities of " +"OpenERP. \n" +" The \"External ID\" of a record is the unique " +"identifier \n" +" of this record in another application. This " +"\"External \n" +" ID\" must be unique accoss all the records of all \n" +" objects, so it's a good practice to prefix this \n" +" \"External ID\" with the name of the application or " +"\n" +" table. (like 'company_1', 'person_1' instead of '1')" +msgstr "" +"Para gestionar relaciones entre tablas, puede usar las facilidades del campo " +"\"Id. externo\" de OpenERP. El id. externo de un registro es un " +"identificador único de este registro en otra aplicación. Este id. debe ser " +"único a lo largo de todos los registros de todos los objetos. por lo que es " +"una buena práctica poner como prefijo al mismo el nombre de la aplicación o " +"de la tabla (como por ejemplo 'company_1' o 'person_1', en lugar de '1')" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:295 +#, python-format +msgid "" +"We will first export all companies and their \n" +" \"External ID\". In PSQL, write the following " +"command:" +msgstr "" +"Se exportará primero todas las compañías y sus id. externos. En PSQL, " +"escriba el siguiente comando:" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/js/import.js:373 +#, python-format +msgid "Everything seems valid." +msgstr "Todo parece correcto." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:188 +#, python-format +msgid "" +"However if you do not wish to change your \n" +" configuration of product categories, we recommend " +"you \n" +" use make use of the external ID for this field \n" +" 'Category'." +msgstr "" +"Sin embargo, si no desea cambiar la configuración de las categorías de " +"producto, le recomendamos que haga uso de id. externo para este campo " +"'Categoría'." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/js/import.js:390 +#, python-format +msgid "at row %d" +msgstr "en la fila %d" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:197 +#, python-format +msgid "" +"How can I import a many2many relationship field \n" +" (e.g. a customer that has multiple tags)?" +msgstr "" +"¿Cómo puedo importar un campo de relación many2many (muchos a muchos; por " +"ejemplo: un cliente que tiene múltiples etiquetas)?" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:80 +#, python-format +msgid "XXX/ID" +msgstr "XXX/ID" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:275 +#, python-format +msgid "" +"If you need to import data from different tables, \n" +" you will have to recreate relations between records " +"\n" +" belonging to different tables. (e.g. if you import \n" +" companies and persons, you will have to recreate the " +"\n" +" link between each person and the company they work \n" +" for)." +msgstr "" +"Si necesita importar datos de diversas tablas, puede recrear relaciones " +"entre los registros pertenecientes a diferentes tablas (por ejemplo, si " +"importa compañías y personas, tendrá que recrear el enlace entre cada " +"persona y la compañía para la que trabaja)." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:150 +#, python-format +msgid "" +"According to your need, you should use \n" +" one of these 3 ways to reference records in " +"relations. \n" +" Here is when you should use one or the other, \n" +" according to your need:" +msgstr "" +"De acuerdo a sus necesidades, puede usar una de estas tres formas de " +"referenciar registros en las relaciones.\n" +"Aquí es donde debe usar una u otra, conforme a sus necesidades:" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:319 +#, python-format +msgid "person_4,Ramsy,False,company_3" +msgstr "person_4,Ramsy,False,company_3" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:261 +#, python-format +msgid "" +"If you do not set all fields in your CSV file, \n" +" OpenERP will assign the default value for every non " +"\n" +" defined fields. But if you\n" +" set fields with empty values in your CSV file, " +"OpenERP \n" +" will set the EMPTY value in the field, instead of \n" +" assigning the default value." +msgstr "" +"Si no establece todos los campos en su archivo CSV, OpenERP asignará los " +"valores por defecto para cada campo no definido. Pero si dejar los campos " +"con valor vacío en el archivo CSV, OpenERP establecer el valor EMPTY en el " +"campo, en lugar del valor por defecto." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:20 +#, python-format +msgid "Cancel" +msgstr "Cancelar" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:257 +#, python-format +msgid "" +"What happens if I do not provide a value for a \n" +" specific field?" +msgstr "¿Qué pasa si no proveo de un valor para un campo específico?" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:68 +#, python-format +msgid "Frequently Asked Questions" +msgstr "Preguntas más frecuentes" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:305 +#, python-format +msgid "company_3,Boum,True" +msgstr "company_3,Boum,True" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:249 +#, python-format +msgid "" +"This feature \n" +" allows you to use the Import/Export tool of OpenERP " +"to \n" +" modify a batch of records in your favorite " +"spreadsheet \n" +" application." +msgstr "" +"Esta característica permite usar la herramienta de importación/exportación " +"de OpenERP para modificar un lote de registros en su aplicación de hoja de " +"cálculo favorita." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:77 +#, python-format +msgid "" +"column in OpenERP. When you\n" +" import an other record that links to the first\n" +" one, use" +msgstr "" +"columna en OpenERP. Cuando importe otro registro que enlace con el primero, " +"use" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:242 +#, python-format +msgid "" +"If you import a file that contains one of the \n" +" column \"External ID\" or \"Database ID\", records " +"that \n" +" have already been imported will be modified instead " +"of \n" +" being created. This is very usefull as it allows you " +"\n" +" to import several times the same CSV file while " +"having \n" +" made some changes in between two imports. OpenERP " +"will \n" +" take care of creating or modifying each record \n" +" depending if it's new or not." +msgstr "" +"Si importar un archivo que contiene la columna \"Id. externo\" o \"Id. de la " +"BD\", los registros que ya han sido importados se modificarán en lugar de " +"ser creados. Esto es útil, ya que permite importar varias veces el mismo " +"archivo CSV si se han realizado algunos cambios entre dos importaciones. " +"OpenERP tendrá cuidado de crear o modificar cada registro dependiendo de si " +"es nuevo o no." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:169 +#, python-format +msgid "CSV file for categories" +msgstr "Archivo CSV para las categorías" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/js/import.js:309 +#, python-format +msgid "Normal Fields" +msgstr "Campos normales" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:74 +#, python-format +msgid "" +"In order to re-create relationships between\n" +" different records, you should use the unique\n" +" identifier from the original application and\n" +" map it to the" +msgstr "" +"Para recrear las relaciones entre los diferentes registros, debe usar el " +"identificador único de la aplicación original y mapearlo a" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:170 +#, python-format +msgid "CSV file for Products" +msgstr "Archivo CSV para los productos" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:216 +#, python-format +msgid "" +"If you want to import sales order having several \n" +" order lines; for each order line, you need to " +"reserve \n" +" a specific row in the CSV file. The first order line " +"\n" +" will be imported on the same row as the information " +"\n" +" relative to order. Any additional lines will need an " +"\n" +" addtional row that does not have any information in " +"\n" +" the fields relative to the order." +msgstr "" +"Si quiere importar los pedidos de venta teniendo varias líneas de pedido; " +"para cada línea de pedido, necesita reservar una fila específica en el " +"archivo CSV. La primera línea de pedido será importada en la misma fila que " +"la información relativa al pedido. Cualquier línea adicional necesitará una " +"fila adicional que no tenga información en los campos relativos al pedido." + +#. module: base_import +#: model:ir.model,name:base_import.model_base_import_tests_models_m2o_related +msgid "base_import.tests.models.m2o.related" +msgstr "Relaciones many2one de los modelos de test de importación" + +#. module: base_import +#: field:base_import.tests.models.preview,name:0 +msgid "Name" +msgstr "Nombre" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:80 +#, python-format +msgid "to the original unique identifier." +msgstr "al identificador único original." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:318 +#, python-format +msgid "person_3,Eric,False,company_2" +msgstr "person_3,Eric,False,company_2" + +#. module: base_import +#: field:base_import.import,res_model:0 +msgid "Model" +msgstr "Modelo" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:77 +#: code:addons/base_import/static/src/xml/import.xml:82 +#, python-format +msgid "ID" +msgstr "Id." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:329 +#, python-format +msgid "" +"The two files produced are ready to be imported in \n" +" OpenERP without any modifications. After having \n" +" imported these two CSV files, you will have 4 " +"contacts \n" +" and 3 companies. (the firsts two contacts are linked " +"\n" +" to the first company). You must first import the \n" +" companies and then the persons." +msgstr "" +"Los dos archivos producidos están listos para ser importados en OpenERP sin " +"ninguna modificación. Después de importar estos dos archivos, tendrá 4 " +"contactos y 3 compañías (los dos primeros contactos están enlazados a la " +"primera compañía). Debe importar primero las compañías y luego las personas." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:95 +#, python-format +msgid "" +"By default the Import preview is set on commas as \n" +" field separators and quotation marks as text \n" +" delimiters. If your csv file does not have these \n" +" settings, you can modify the File Format Options \n" +" (displayed under the Browse CSV file bar after you \n" +" select your file)." +msgstr "" +"Por defecto, la previsualización de la importación se establece con comas " +"como separadores de campo y comillas como delimitadores de texto. Si su " +"archivo CSV no tiene estos parámetros, puede modificar las opciones de " +"formato de archivo (mostradas bajo la barra de 'Seleccionar archivo CSV' " +"después de seleccionar el archivo)." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/js/import.js:73 +#, python-format +msgid "Separator:" +msgstr "Separador:" + +#. module: base_import +#: field:base_import.import,file_name:0 +msgid "File Name" +msgstr "Nombre de archivo" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/models.py:80 +#: code:addons/base_import/models.py:111 +#: code:addons/base_import/static/src/xml/import.xml:77 +#: code:addons/base_import/static/src/xml/import.xml:82 +#, python-format +msgid "External ID" +msgstr "Id. externo" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:39 +#, python-format +msgid "File Format Options…" +msgstr "Opciones de formato de archivo..." + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/js/import.js:392 +#, python-format +msgid "between rows %d and %d" +msgstr "entre las filas %d y %d" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:19 +#, python-format +msgid "or" +msgstr "o" + +#. module: base_import +#. openerp-web +#: code:addons/base_import/static/src/xml/import.xml:223 +#, python-format +msgid "" +"As an example, here is \n" +" purchase.order_functional_error_line_cant_adpat.CSV " +"\n" +" file of some quotations you can import, based on " +"demo \n" +" data." +msgstr "" +"Como ejemplo, aquí tiene el archivo " +"'purchase.order_functional_error_line_cant_adapt.csv' que puede importar, " +"basado en los datos de demostración." + +#. module: base_import +#: field:base_import.import,file:0 +msgid "File" +msgstr "Archivo" diff --git a/addons/base_import/i18n/fr.po b/addons/base_import/i18n/fr.po index e3a5bcfd675..edebd707f3a 100644 --- a/addons/base_import/i18n/fr.po +++ b/addons/base_import/i18n/fr.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: 2012-12-19 05:17+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: base_import diff --git a/addons/base_import/i18n/pl.po b/addons/base_import/i18n/pl.po index 52477d3ed50..ad7b2cf6d9b 100644 --- a/addons/base_import/i18n/pl.po +++ b/addons/base_import/i18n/pl.po @@ -8,28 +8,28 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-24 02:52+0000\n" -"PO-Revision-Date: 2012-12-12 18:03+0000\n" +"PO-Revision-Date: 2012-12-19 17:54+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: 2012-12-13 04:44+0000\n" -"X-Generator: Launchpad (build 16361)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/js/import.js:420 #, python-format msgid "Get all possible values" -msgstr "" +msgstr "Pobierz wszystkie możliwe wartości" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:71 #, python-format msgid "Need to import data from an other application?" -msgstr "" +msgstr "Chcesz importować dane z innej aplikacji?" #. module: base_import #. openerp-web @@ -62,7 +62,7 @@ msgstr "" #: code:addons/base_import/static/src/js/import.js:310 #, python-format msgid "Relation Fields" -msgstr "" +msgstr "Pola relacyjne" #. module: base_import #. openerp-web @@ -166,7 +166,7 @@ msgstr "Nie importuj" #: code:addons/base_import/static/src/xml/import.xml:24 #, python-format msgid "Select the" -msgstr "" +msgstr "Wybierz" #. module: base_import #. openerp-web @@ -199,21 +199,21 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:239 #, python-format msgid "Can I import several times the same record?" -msgstr "" +msgstr "Mogę importować kilka razy ten sam rekord?" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:15 #, python-format msgid "Validate" -msgstr "" +msgstr "Zatwierdź" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:55 #, python-format msgid "Map your data to OpenERP" -msgstr "" +msgstr "Mapuj swoje dane do OpenERP" #. module: base_import #. openerp-web @@ -250,7 +250,7 @@ msgstr "" #: 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 "Co mogę zrobić w przypadku wielokrotnych zgodności dla pola?" #. module: base_import #. openerp-web @@ -262,7 +262,7 @@ msgstr "" #. module: base_import #: field:base_import.tests.models.preview,somevalue:0 msgid "Some Value" -msgstr "" +msgstr "Jakaś wartość" #. module: base_import #. openerp-web @@ -390,7 +390,7 @@ msgstr "" #. module: base_import #: field:base_import.tests.models.preview,othervalue:0 msgid "Other Variable" -msgstr "" +msgstr "Inna zmienna" #. module: base_import #. openerp-web @@ -505,7 +505,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:30 #, python-format msgid "CSV File:" -msgstr "" +msgstr "Plik CSV:" #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_preview @@ -521,7 +521,7 @@ msgstr "" #: code:addons/base_import/models.py:112 #, python-format msgid "Database ID" -msgstr "" +msgstr "ID bazy danych" #. module: base_import #. openerp-web @@ -540,7 +540,7 @@ msgstr "" #. module: base_import #: field:base_import.import,file_type:0 msgid "File Type" -msgstr "" +msgstr "Typ pliku" #. module: base_import #: model:ir.model,name:base_import.model_base_import_import @@ -557,7 +557,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:360 #, python-format msgid "Import preview failed due to:" -msgstr "" +msgstr "Podgląd niemożliwy ponieważ:" #. module: base_import #. openerp-web @@ -575,7 +575,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:35 #, python-format msgid "Reload data to check changes." -msgstr "" +msgstr "Przełąduj dane, aby sprawdzić zmiany." #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_char_readonly @@ -615,7 +615,7 @@ msgstr "" #: code:addons/base_import/models.py:264 #, python-format msgid "You must configure at least one field to import" -msgstr "" +msgstr "Musisz skonfigurować co najmniej jedno pole do importu" #. module: base_import #. openerp-web @@ -670,7 +670,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:396 #, python-format msgid "Import" -msgstr "" +msgstr "Importuj" #. module: base_import #. openerp-web @@ -742,7 +742,7 @@ msgstr "" #: field:base_import.tests.models.o2m.child,parent_id:0 #: field:base_import.tests.models.o2m.child,value:0 msgid "unknown" -msgstr "" +msgstr "nieznane" #. module: base_import #. openerp-web @@ -777,7 +777,7 @@ msgstr "" #: code:addons/base_import/static/src/js/import.js:396 #, python-format msgid "(%d more)" -msgstr "" +msgstr "(%d więcej)" #. module: base_import #. openerp-web @@ -791,7 +791,7 @@ msgstr "" #: code:addons/base_import/static/src/js/import.js:72 #, python-format msgid "Encoding:" -msgstr "" +msgstr "Kodowanie:" #. module: base_import #. openerp-web @@ -827,7 +827,7 @@ msgstr "" #: code:addons/base_import/static/src/js/import.js:373 #, python-format msgid "Everything seems valid." -msgstr "" +msgstr "Wszystko wygląda poprawnie." #. module: base_import #. openerp-web @@ -846,7 +846,7 @@ msgstr "" #: code:addons/base_import/static/src/js/import.js:390 #, python-format msgid "at row %d" -msgstr "" +msgstr "w wierszu %d" #. module: base_import #. openerp-web @@ -918,7 +918,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:20 #, python-format msgid "Cancel" -msgstr "" +msgstr "Anuluj" #. module: base_import #. openerp-web @@ -934,7 +934,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:68 #, python-format msgid "Frequently Asked Questions" -msgstr "" +msgstr "Najczęściej zadawane pytania" #. module: base_import #. openerp-web @@ -1045,7 +1045,7 @@ msgstr "" #. module: base_import #: field:base_import.tests.models.preview,name:0 msgid "Name" -msgstr "" +msgstr "Nazwa" #. module: base_import #. openerp-web @@ -1064,7 +1064,7 @@ msgstr "" #. module: base_import #: field:base_import.import,res_model:0 msgid "Model" -msgstr "" +msgstr "Model" #. module: base_import #. openerp-web @@ -1072,7 +1072,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:82 #, python-format msgid "ID" -msgstr "" +msgstr "ID" #. module: base_import #. openerp-web @@ -1107,12 +1107,12 @@ msgstr "" #: code:addons/base_import/static/src/js/import.js:73 #, python-format msgid "Separator:" -msgstr "" +msgstr "Separator:" #. module: base_import #: field:base_import.import,file_name:0 msgid "File Name" -msgstr "" +msgstr "Nazwa pliku" #. module: base_import #. openerp-web @@ -1122,7 +1122,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:82 #, python-format msgid "External ID" -msgstr "" +msgstr "Identyfikator zewnętrzny" #. module: base_import #. openerp-web @@ -1136,14 +1136,14 @@ msgstr "" #: code:addons/base_import/static/src/js/import.js:392 #, python-format msgid "between rows %d and %d" -msgstr "" +msgstr "pomiędzy wierszami %d a %d" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:19 #, python-format msgid "or" -msgstr "" +msgstr "lub" #. module: base_import #. openerp-web @@ -1161,4 +1161,4 @@ msgstr "" #. module: base_import #: field:base_import.import,file:0 msgid "File" -msgstr "" +msgstr "Plik" diff --git a/addons/base_import/i18n/zh_CN.po b/addons/base_import/i18n/zh_CN.po index 1a2b7ea93d8..2a97f2682f6 100644 --- a/addons/base_import/i18n/zh_CN.po +++ b/addons/base_import/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-24 02:52+0000\n" -"PO-Revision-Date: 2012-12-14 14:17+0000\n" -"Last-Translator: nmglyy \n" +"PO-Revision-Date: 2012-12-20 03:03+0000\n" +"Last-Translator: ccdos \n" "Language-Team: Chinese (Simplified) \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-15 05:06+0000\n" -"X-Generator: Launchpad (build 16372)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: base_import #. openerp-web @@ -47,6 +47,12 @@ msgid "" "give \n" " you an example for Products and their Categories." msgstr "" +"当你使用External IDs,导入CSV文件\n" +"你导入的每一条记录得External\n" +"ID 用 \"External ID\" 列来定义 . 然后, \n" +"你将用一个列为\"Field/External ID\" 的\n" +"数据记录做参考. 下面的两个 CSV 文件\n" +"给你一个产品和产品类别的例子。" #. module: base_import #. openerp-web @@ -87,6 +93,11 @@ msgid "" "\n" " have a unique Database ID)" msgstr "" +"使用\n" +"Country/Database ID: 你将很少用这中\n" +"标记法. 这种标记法对开发者用来不产生\n" +"冲突有好处 (可能有些记录有相同的名\n" +"但它们有不同的Database ID)" #. module: base_import #. openerp-web @@ -121,6 +132,10 @@ msgid "" "companies) TO \n" " '/tmp/company.csv' with CSV HEADER;" msgstr "" +"复制\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 @@ -181,6 +196,11 @@ msgid "" "\n" " See the following question." msgstr "" +"注意 如果你的CSV文件\n" +"一个制表符作为分隔符,OpenERP的将不\n" +"检测隔开。您需要通过你的电子表格应用\n" +"程序的文件格式选项来修改。\n" +"请参阅下面的问题" #. module: base_import #. openerp-web @@ -224,6 +244,9 @@ msgid "" " the easiest way when your data come from CSV files \n" " that have been created manually." msgstr "" +"使用国家: \n" +"当你数据从CSV文件手动创建,这是\n" +"最简单的方法." #. module: base_import #. openerp-web @@ -232,7 +255,7 @@ msgstr "" msgid "" "What's the difference between Database ID and \n" " External ID?" -msgstr "" +msgstr "数据库ID和外部ID之间的区别是什么?" #. module: base_import #. openerp-web @@ -244,13 +267,16 @@ msgid "" "\n" " you 3 different fields to import:" msgstr "" +"例如,要\n" +"引用国家的关系,OpenERP给\n" +"你3个不同字段的导入" #. 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 "如果我有多对一的字段怎么做?" #. module: base_import #. openerp-web @@ -262,7 +288,7 @@ msgstr "" #. module: base_import #: field:base_import.tests.models.preview,somevalue:0 msgid "Some Value" -msgstr "" +msgstr "一些值" #. module: base_import #. openerp-web @@ -342,7 +368,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:233 #, python-format msgid "Suppliers and their respective contacts" -msgstr "" +msgstr "供应商和他们各自的联系人" #. module: base_import #. openerp-web @@ -390,7 +416,7 @@ msgstr "" #. module: base_import #: field:base_import.tests.models.preview,othervalue:0 msgid "Other Variable" -msgstr "" +msgstr "其它变量" #. module: base_import #. openerp-web diff --git a/addons/base_report_designer/i18n/de.po b/addons/base_report_designer/i18n/de.po index 601dddfd1ff..32bc2b76822 100644 --- a/addons/base_report_designer/i18n/de.po +++ b/addons/base_report_designer/i18n/de.po @@ -7,13 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-11-24 02:52+0000\n" -"PO-Revision-Date: 2012-12-18 07:09+0000\n" -"Last-Translator: Ferdinand @ Camptocamp \n" +"PO-Revision-Date: 2012-12-19 19:54+0000\n" +"Last-Translator: Thorsten Vocks (OpenBig.org) \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-19 05:17+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: base_report_designer @@ -24,7 +25,7 @@ msgstr "base.report.sxw" #. module: base_report_designer #: view:base_report_designer.installer:0 msgid "OpenERP Report Designer Configuration" -msgstr "Konfiguration Report Designer" +msgstr "Konfiguration Designer" #. module: base_report_designer #: view:base_report_designer.installer:0 @@ -38,7 +39,7 @@ msgstr "" #. module: base_report_designer #: view:base.report.sxw:0 msgid "Upload the modified report" -msgstr "Upload Reportmodifikation" +msgstr "Upload Report Modifikation" #. module: base_report_designer #: view:base.report.file.sxw:0 @@ -69,7 +70,7 @@ msgstr "Titel" #: field:base.report.file.sxw,report_id:0 #: field:base.report.sxw,report_id:0 msgid "Report" -msgstr "Bericht" +msgstr "Report" #. module: base_report_designer #: view:base.report.rml.save:0 @@ -84,13 +85,13 @@ msgstr "Berichte Report Designer" #. module: base_report_designer #: field:base_report_designer.installer,name:0 msgid "File name" -msgstr "Datei Name" +msgstr "Dateiname" #. module: base_report_designer #: view:base.report.file.sxw:0 #: view:base.report.sxw:0 msgid "Get a report" -msgstr "Generiere Report" +msgstr "Generiere einen Bericht" #. module: base_report_designer #: view:base_report_designer.installer:0 @@ -114,13 +115,13 @@ msgid "" "OpenObject Report Designer plug-in file. Save as this file and install this " "plug-in in OpenOffice." msgstr "" -"OpenObject Report Designer Plug In Datei. Speichern Sie die Datei und " -"installieren Sie dann als OpenOffice Plug In." +"Report Designer Erweiterung. Speichern Sie die Datei und installieren Sie " +"diese bitte in OpenOffice." #. module: base_report_designer #: view:base.report.rml.save:0 msgid "Save RML FIle" -msgstr "Speichern .RML Datei" +msgstr "Speichern .rml Datei" #. module: base_report_designer #: field:base.report.file.sxw,file_sxw:0 @@ -131,7 +132,7 @@ msgstr "Ihre .SXW Datei" #. module: base_report_designer #: view:base_report_designer.installer:0 msgid "Installation and Configuration Steps" -msgstr "Installation und Konfiguration Abfolge" +msgstr "Abfolge Installation und Konfiguration" #. module: base_report_designer #: field:base_report_designer.installer,description:0 @@ -146,7 +147,7 @@ msgid "" "Don't forget to install the OpenERP SA OpenOffice package to modify it.\n" "Once it is modified, re-upload it in OpenERP using this wizard." msgstr "" -"Dieses ist die Vorlage des von Ihnen angefragten Reports.\n" +"Dies ist die Vorlage des von Ihnen angefragten Reports.\n" "Speichern Sie die .SXW Datei und öffnen Sie diese mit OpenOffice.\n" "Vergessen Sie nicht die Installation von OpenERP SA OpenOffice Paket um die " "Vorlage zu modifizieren.\n" @@ -156,7 +157,7 @@ msgstr "" #. module: base_report_designer #: model:ir.actions.act_window,name:base_report_designer.action_view_base_report_sxw msgid "Base Report sxw" -msgstr "Basis Report sxw" +msgstr "Base Report sxw" #. module: base_report_designer #: model:ir.model,name:base_report_designer.model_base_report_file_sxw @@ -176,7 +177,7 @@ msgstr "OpenERP Report Designer Installation" #. module: base_report_designer #: view:base.report.sxw:0 msgid "Cancel" -msgstr "Abbruch" +msgstr "Abbrechen" #. module: base_report_designer #: view:base.report.sxw:0 diff --git a/addons/base_setup/i18n/de.po b/addons/base_setup/i18n/de.po index a9469c2bdea..f7d43180c34 100644 --- a/addons/base_setup/i18n/de.po +++ b/addons/base_setup/i18n/de.po @@ -7,14 +7,15 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-11-24 02:52+0000\n" -"PO-Revision-Date: 2012-12-16 12:02+0000\n" -"Last-Translator: Felix Schubert \n" +"PO-Revision-Date: 2012-12-19 22:09+0000\n" +"Last-Translator: Thorsten Vocks (OpenBig.org) \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-17 04:45+0000\n" -"X-Generator: Launchpad (build 16372)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:44+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: base_setup #: view:sale.config.settings:0 @@ -40,9 +41,7 @@ msgstr "base.config.settings" #: field:base.config.settings,module_auth_oauth:0 msgid "" "Use external authentication providers, sign in with google, facebook, ..." -msgstr "" -"Benutzen Sie eine externe Authentifizierung, z.B. von Anbietern wie Google, " -"Facebook, ..." +msgstr "Externe Benutzer Authentifizierung, z.B. mit google Konto" #. module: base_setup #: view:sale.config.settings:0 @@ -56,16 +55,16 @@ msgid "" "OpenERP using specific\n" " plugins for your preferred email application." msgstr "" -"OpenERP ermöglicht die automatische Erstellung von Leads (und anderen " -"Belegen)\n" -" aus eingehenden E-Mails. Sie können " -"Ihren E-Mail Posteingang regelmässig synchronisieren, indem\n" +"OpenERP ermöglicht die automatische Erstellung von Interessenten (und " +"anderen Belegen)\n" +" aus eingehenden EMails. Sie können Ihren " +"EMail Posteingang regelmässig synchronisieren, indem\n" " Sie hierzu Ihre POP/IMAP Konten anbinden " -"und dann ein Script zur E-Mail Integration \n" -" aktivieren oder indem Sie selektiv mit " -"Hilfe eines Plugins für Ihre E-Mail Anwendung\n" -" bestimmte E-Mails nach OpenERP " -"transferieren." +"und dann ein Script zur direkten EMail Integration \n" +" regelmässig anwenden, oder indem Sie " +"selektiv mit Hilfe eines Plugins für Ihre persönliche Arbeitsplatz \n" +" Mailanwendung bestimmte EMails nach " +"OpenERP transferieren." #. module: base_setup #: selection:base.setup.terminology,partner:0 @@ -92,7 +91,7 @@ msgstr "Angebote und Aufträge" #: model:ir.actions.act_window,name:base_setup.action_general_configuration #: model:ir.ui.menu,name:base_setup.menu_general_configuration msgid "General Settings" -msgstr "Grundeinstellungen" +msgstr "Allgemeine Einstellungen" #. module: base_setup #: selection:base.setup.terminology,partner:0 @@ -102,7 +101,7 @@ msgstr "Spender" #. module: base_setup #: view:base.config.settings:0 msgid "Email" -msgstr "E-Mail:" +msgstr "E-Mail" #. module: base_setup #: field:sale.config.settings,module_crm:0 @@ -137,7 +136,7 @@ msgstr "Anbindung E-Mail Anwendung" #. module: base_setup #: field:sale.config.settings,module_web_linkedin:0 msgid "Get contacts automatically from linkedIn" -msgstr "Kontakte von Linkdin importieren" +msgstr "Kontakte aus linkedin importieren" #. module: base_setup #: field:sale.config.settings,module_plugin_thunderbird:0 @@ -152,7 +151,7 @@ msgstr "res_config_contents" #. module: base_setup #: view:sale.config.settings:0 msgid "Customer Features" -msgstr "Kunden Features" +msgstr "Kunden Anwendungen" #. module: base_setup #: view:base.config.settings:0 @@ -162,7 +161,7 @@ msgstr "Import / Export" #. module: base_setup #: view:sale.config.settings:0 msgid "Sale Features" -msgstr "Verkauf Features" +msgstr "Verkauf Anwendungen" #. module: base_setup #: field:sale.config.settings,module_plugin_outlook:0 @@ -175,8 +174,6 @@ msgid "" "You can use this wizard to change the terminologies for customers in the " "whole application." msgstr "" -"Mit diesem Assistenten können Sie die verwendete Terminologie des gesamten " -"Systems im Sinne der Kunden verändern." #. module: base_setup #: selection:base.setup.terminology,partner:0 @@ -186,7 +183,7 @@ msgstr "Mieter" #. module: base_setup #: help:base.config.settings,module_share:0 msgid "Share or embbed any screen of openerp." -msgstr "Teilen oder einbetten von OpenERP Ansichten" +msgstr "Teilen oder einbetten von Bildschirmansichten" #. module: base_setup #: selection:base.setup.terminology,partner:0 @@ -311,7 +308,7 @@ msgstr "" #. module: base_setup #: view:base.config.settings:0 msgid "Options" -msgstr "Optionen" +msgstr "Einstellungen" #. module: base_setup #: field:base.config.settings,module_portal:0 diff --git a/addons/base_setup/i18n/fr.po b/addons/base_setup/i18n/fr.po index 23520b8dc12..2d67d41ff37 100644 --- a/addons/base_setup/i18n/fr.po +++ b/addons/base_setup/i18n/fr.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-11-24 02:52+0000\n" -"PO-Revision-Date: 2012-12-07 10:32+0000\n" +"PO-Revision-Date: 2012-12-19 15:45+0000\n" "Last-Translator: WANTELLET Sylvain \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-08 04:58+0000\n" -"X-Generator: Launchpad (build 16341)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:44+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: base_setup #: view:sale.config.settings:0 @@ -90,7 +90,7 @@ msgstr "Donateur" #. module: base_setup #: view:base.config.settings:0 msgid "Email" -msgstr "" +msgstr "Courriel" #. module: base_setup #: field:sale.config.settings,module_crm:0 diff --git a/addons/base_vat/i18n/fr.po b/addons/base_vat/i18n/fr.po index 53bbc5f5027..8f68fe96206 100644 --- a/addons/base_vat/i18n/fr.po +++ b/addons/base_vat/i18n/fr.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-03 16:03+0000\n" -"PO-Revision-Date: 2012-02-27 10:27+0000\n" -"Last-Translator: GaCriv \n" +"PO-Revision-Date: 2012-12-19 15:48+0000\n" +"Last-Translator: WANTELLET Sylvain \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-04 05:19+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:44+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: base_vat #: view:res.partner:0 msgid "Check Validity" -msgstr "" +msgstr "Vérifier la validité" #. module: base_vat #: code:addons/base_vat/base_vat.py:147 @@ -45,7 +45,7 @@ msgstr "Sociétés" #: code:addons/base_vat/base_vat.py:111 #, python-format msgid "Error!" -msgstr "" +msgstr "Erreur!" #. module: base_vat #: help:res.partner,vat_subjected:0 diff --git a/addons/board/i18n/de.po b/addons/board/i18n/de.po index 332d367133e..41ad21d9509 100644 --- a/addons/board/i18n/de.po +++ b/addons/board/i18n/de.po @@ -7,20 +7,21 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-11-24 02:52+0000\n" -"PO-Revision-Date: 2012-12-16 12:23+0000\n" -"Last-Translator: Felix Schubert \n" +"PO-Revision-Date: 2012-12-19 22:20+0000\n" +"Last-Translator: Thorsten Vocks (OpenBig.org) \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-17 04:46+0000\n" -"X-Generator: Launchpad (build 16372)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: board #: model:ir.actions.act_window,name:board.action_board_create #: model:ir.ui.menu,name:board.menu_board_create msgid "Create Board" -msgstr "" +msgstr "Erzeuge Tafel" #. module: board #: view:board.create:0 @@ -37,14 +38,14 @@ msgstr "Layout zurücksetzen" #. module: board #: view:board.create:0 msgid "Create New Dashboard" -msgstr "Neues Dashboard anlegen" +msgstr "Neue Anzeigetafel anlegen" #. module: board #. openerp-web #: code:addons/board/static/src/xml/board.xml:40 #, python-format msgid "Choose dashboard layout" -msgstr "Wählen Sie das Dashboard Layout" +msgstr "Wählen Sie das Anzeigetafel Layout" #. module: board #. openerp-web @@ -63,31 +64,31 @@ msgstr "Wollen Sie dieses Element wirklich löschen?" #. module: board #: model:ir.model,name:board.model_board_board msgid "Board" -msgstr "Pinnwand" +msgstr "Anzeigetafel" #. module: board #: view:board.board:0 #: model:ir.actions.act_window,name:board.open_board_my_dash_action #: model:ir.ui.menu,name:board.menu_board_my_dash msgid "My Dashboard" -msgstr "Mein Dashboard" +msgstr "Eigene Anzeigetafel" #. module: board #: field:board.create,name:0 msgid "Board Name" -msgstr "" +msgstr "Name der Tafel" #. module: board #: model:ir.model,name:board.model_board_create msgid "Board Creation" -msgstr "" +msgstr "Tafel Erzeugen" #. module: board #. openerp-web #: code:addons/board/static/src/xml/board.xml:67 #, python-format msgid "Add to Dashboard" -msgstr "Zu Dashboard hinzufügen" +msgstr "Zur Anzeigetafel hinzufügen" #. module: board #. openerp-web @@ -114,6 +115,21 @@ msgid "" " \n" " " msgstr "" +"
\n" +"

\n" +" Ihre eigene Anzeigetafel ist noch frei,\n" +"

\n" +" Um Ihren ersten Bericht auf Ihrer Anzeigetafel zu " +"ergänzen \n" +" klicken Sie 'Tafel erstellen' in den erweiterten " +"Suchoptionen.\n" +"

\n" +" Sie können dann die Daten noch filtern und gruppieren, " +"bevor Sie\n" +" die Auswertung zur Tafel hinzufügen.\n" +"

\n" +"
\n" +" " #. module: board #. openerp-web @@ -132,7 +148,7 @@ msgstr "Übergeordnetes Menü" #: code:addons/board/static/src/xml/board.xml:8 #, python-format msgid "Change Layout.." -msgstr "Layout ändern" +msgstr "" #. module: board #. openerp-web @@ -163,7 +179,7 @@ msgstr "oder" #: code:addons/board/static/src/xml/board.xml:69 #, python-format msgid "Title of new dashboard item" -msgstr "Titel des neuen Dashboard Elements" +msgstr "Titel der neuen Anzeigetafel" #~ msgid "" #~ "The Object name must start with x_ and not contain any special character !" diff --git a/addons/claim_from_delivery/i18n/fr.po b/addons/claim_from_delivery/i18n/fr.po index 057c74100e4..78870b04a3c 100644 --- a/addons/claim_from_delivery/i18n/fr.po +++ b/addons/claim_from_delivery/i18n/fr.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: 2012-12-19 05:17+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: claim_from_delivery diff --git a/addons/contacts/i18n/fr.po b/addons/contacts/i18n/fr.po index 002d0f7f608..cca9a57847e 100644 --- a/addons/contacts/i18n/fr.po +++ b/addons/contacts/i18n/fr.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: 2012-12-19 05:17+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: contacts diff --git a/addons/crm/i18n/de.po b/addons/crm/i18n/de.po index 8209725505a..8d8bb747a07 100644 --- a/addons/crm/i18n/de.po +++ b/addons/crm/i18n/de.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-16 16:07+0000\n" +"PO-Revision-Date: 2012-12-19 19:13+0000\n" "Last-Translator: Thorsten Vocks (OpenBig.org) \n" "Language-Team: German \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-17 04:45+0000\n" -"X-Generator: Launchpad (build 16372)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:44+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: crm #: view:crm.lead.report:0 @@ -43,7 +43,7 @@ msgstr "Interessent" #. module: crm #: field:crm.lead,title:0 msgid "Title" -msgstr "Bezeichnung" +msgstr "Anrede" #. module: crm #: field:crm.lead2partner,action:0 @@ -72,7 +72,7 @@ msgstr "Fund Raising Management" #. module: crm #: view:crm.lead2opportunity.partner.mass:0 msgid "Convert to Opportunities" -msgstr "" +msgstr "Umwandeln in Chance" #. module: crm #: view:crm.lead.report:0 @@ -97,7 +97,7 @@ msgstr "Verkäufer" #. module: crm #: model:ir.model,name:crm.model_crm_lead_report msgid "CRM Lead Analysis" -msgstr "CRM Verkaufskontakte Analyse" +msgstr "CRM Interessenten Statistik" #. module: crm #: model:ir.actions.server,subject:crm.action_email_reminder_customer_lead @@ -114,7 +114,7 @@ msgstr "Tag" #. module: crm #: view:crm.lead:0 msgid "Company Name" -msgstr "" +msgstr "Unternehmensname" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor6 @@ -125,7 +125,7 @@ msgstr "Training" #: model:ir.actions.act_window,name:crm.crm_lead_categ_action #: model:ir.ui.menu,name:crm.menu_crm_lead_categ msgid "Sales Tags" -msgstr "" +msgstr "Verkauf Kennzeichen" #. module: crm #: view:crm.lead.report:0 @@ -137,7 +137,7 @@ msgstr "Erw. Abschluß" #: help:crm.lead,message_unread:0 #: help:crm.phonecall,message_unread:0 msgid "If checked new messages require your attention." -msgstr "" +msgstr "Wenn aktiviert, erfordern neue Nachrichten Ihr Handeln" #. module: crm #: help:crm.lead.report,creation_day:0 @@ -147,7 +147,7 @@ msgstr "Datum Erstellung" #. module: crm #: field:crm.segmentation.line,name:0 msgid "Rule Name" -msgstr "Bezeichnung" +msgstr "Regel Bezeichnung" #. module: crm #: view:crm.case.resource.type:0 @@ -162,7 +162,7 @@ msgstr "Kampagne" #. module: crm #: view:crm.lead:0 msgid "Search Opportunities" -msgstr "Suche Verkaufschancen" +msgstr "Suche Chancen" #. module: crm #: help:crm.lead.report,deadline_month:0 @@ -177,9 +177,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 "" -"Beinhaltet die Chatter Zusammenfassung (Anzahl der Nachrichten, ...). Diese " -"Zusammenfassung ist im HTML-Format, um in Kanban Karten Ansichten eingefügt " -"zu werden." +"Hier finden Sie die Nachrichtenübersicht (Anzahl Nachrichten etc., ...) im " +"html Format, um Sie später in einer Kanban Ansicht einfügen zu können." #. module: crm #: code:addons/crm/crm_lead.py:552 @@ -214,7 +213,7 @@ msgstr "Terminiere weiteren Anruf" #: view:crm.phonecall:0 #, python-format msgid "Phone Call" -msgstr "Kundenanrufe" +msgstr "Telefonanruf" #. module: crm #: field:crm.lead,opt_out:0 @@ -239,19 +238,19 @@ msgstr "Kriterien" #. module: crm #: view:crm.segmentation:0 msgid "Excluded Answers :" -msgstr "Ausgeschlossene Antworten" +msgstr "Ausgeschlossene Antworten:" #. module: crm #: field:crm.case.stage,section_ids:0 msgid "Sections" -msgstr "Vertriebssektionen" +msgstr "Sektionen" #. module: crm #: view:crm.lead.report:0 #: model:ir.actions.act_window,name:crm.action_report_crm_lead #: model:ir.ui.menu,name:crm.menu_report_crm_leads_tree msgid "Leads Analysis" -msgstr "Statistik Verkaufskontakte" +msgstr "Statistik Interessenten" #. module: crm #: code:addons/crm/crm_lead.py:878 @@ -268,7 +267,7 @@ msgstr "Kampagnen" #. module: crm #: view:crm.lead2opportunity.partner.mass:0 msgid "Select Opportunities" -msgstr "Wähle Verkaufschancen" +msgstr "Wähle Chancen" #. module: crm #: field:crm.lead,state_id:0 @@ -305,7 +304,7 @@ msgstr "Kein Betreff" #. module: crm #: field:crm.lead,contact_name:0 msgid "Contact Name" -msgstr "Ansprechpartner" +msgstr "Kontakt Name" #. module: crm #: help:crm.segmentation,categ_id:0 @@ -313,8 +312,8 @@ msgid "" "The partner category that will be added to partners that match the " "segmentation criterions after computation." msgstr "" -"Die Partner Kategorie, die gemäß der Segementierungskriterien nach der " -"Verarbeitung dem Partner zugewiesen wird." +"Die Partner Kategorie, die gemäß der Segementierung dem Partner zugewiesen " +"wird." #. module: crm #: model:ir.actions.act_window,help:crm.crm_segmentation_tree-act @@ -336,10 +335,9 @@ msgstr "" "Kontakten zuweisen, \n" " um die Interaktionen Ihres Vertriebs besser zu " "koordinieren. Das Tool zur\n" -"                 Segmentierung ist dabei in der Lage, Kategorien nach den\n" +" Segmentierung ist dabei in der Lage, Kategorien nach den\n" " von Ihnen vorab definierten Kriterien automatisch " -"zuzuweisen.\n" -"               \n" +"zuzuweisen.\n" " " #. module: crm @@ -347,7 +345,7 @@ msgstr "" #: field:crm.phonecall,partner_id:0 #: field:crm.phonecall2phonecall,contact_name:0 msgid "Contact" -msgstr "Ansprechpartner" +msgstr "Kontakt" #. module: crm #: help:crm.case.section,change_responsible:0 @@ -360,23 +358,23 @@ msgstr "" #. module: crm #: model:process.transition,name:crm.process_transition_opportunitymeeting0 msgid "Opportunity Meeting" -msgstr "Meeting Verkaufschance" +msgstr "Meeting mit Chance" #. module: crm #: help:crm.lead.report,delay_close:0 #: help:crm.phonecall.report,delay_close:0 msgid "Number of Days to close the case" -msgstr "Anzahl Tage f. Beendigung" +msgstr "Tage bis Beendigung" #. module: crm #: model:process.node,note:crm.process_node_opportunities0 msgid "When a real project/opportunity is detected" -msgstr "Wenn definitiv Verkaufschance erkannt wird" +msgstr "Falls eine reale Chance oder konkretes Projekt vermutet wird." #. module: crm #: field:res.partner,opportunity_ids:0 msgid "Leads and Opportunities" -msgstr "Verkaufskontakte & Verkaufschancen" +msgstr "Interessenten & Chancen" #. module: crm #: model:ir.actions.act_window,help:crm.relate_partner_opportunities @@ -403,13 +401,13 @@ msgstr "" "Pipeline, verfolgen Sie dabei \n" " Ihre potenziellen Verkäufe und treffen Sie bessere " "Vorhersagen über zukünftige Umsätze.\n" -"              

\n" -"                 Terminieren Sie Ihre Meetings und Telefonanruf im Kontext " +"

\n" +" Terminieren Sie Ihre Meetings und Telefonanruf im Kontext " "der Chance, wandeln sie diese \n" -" in konkrete Angebote, verbinden Sie Dateianhänge oder " +" in konkrete Angebote, verbinden Sie Dateianhänge oder " "Dokumente oder verfolgen Sie \n" " einfach sämtliche Mitteilungen und Diskussionen u.s.w.\n" -"               \n" +" \n" " " #. module: crm @@ -423,7 +421,7 @@ msgstr "Kein Auftrag" #: field:crm.lead,message_unread:0 #: field:crm.phonecall,message_unread:0 msgid "Unread Messages" -msgstr "Ungelesene Mitteilungen" +msgstr "Ungelesene Nachrichten" #. module: crm #: selection:crm.lead2opportunity.partner,action:0 @@ -461,12 +459,12 @@ msgstr "" #: field:crm.phonecall.report,categ_id:0 #: field:crm.phonecall2phonecall,categ_id:0 msgid "Category" -msgstr "Vertriebskategorie" +msgstr "Kategorie" #. module: crm #: view:crm.lead.report:0 msgid "#Opportunities" -msgstr "# Verkaufschancen" +msgstr "Anzahl Chancen" #. module: crm #: view:crm.lead:0 @@ -521,7 +519,7 @@ msgstr "Status" #: view:crm.lead2opportunity.partner:0 #: view:crm.partner2opportunity:0 msgid "Create Opportunity" -msgstr "Erstelle Verkaufschance" +msgstr "Erstelle Chance" #. module: crm #: selection:crm.lead.report,creation_month:0 @@ -534,7 +532,7 @@ msgstr "August" #: view:crm.case.stage:0 #: field:crm.case.stage,name:0 msgid "Stage Name" -msgstr "Bez. Stufe" +msgstr "Bezeichnung Stufe" #. module: crm #: view:crm.lead:0 @@ -566,7 +564,7 @@ msgstr "Funktioniert Nicht" #. module: crm #: field:crm.lead.report,planned_revenue:0 msgid "Planned Revenue" -msgstr "Geplante Umsatzerlöse" +msgstr "Geplanter Umsatz" #. module: crm #: model:ir.actions.server,name:crm.actions_server_crm_phonecall_read @@ -583,7 +581,7 @@ msgstr "Oktober" #. module: crm #: view:crm.segmentation:0 msgid "Included Answers :" -msgstr "Inbegriffene Antworten" +msgstr "Inbegriffene Antworten:" #. module: crm #: help:crm.phonecall,state:0 @@ -594,13 +592,18 @@ msgid "" " If the call needs to be done then the status is set " "to 'Not Held'." msgstr "" +"Der Status wird als 'Bestätigt' eingestuft, wenn ein neuer Vorgang erzeugt " +"wurde. Durch öffnen, wird der Fall in den Status 'in Bearbeitung' geändert. " +"Wenn der Anruf abgeschlossen wurde, ändert sich der Status zu 'Erledigt'. " +"Sollte der Anruf nach wie vor offen sein, ist der Status 'Noch nicht " +"angerufen'." #. module: crm #: field:crm.case.section,message_summary:0 #: field:crm.lead,message_summary:0 #: field:crm.phonecall,message_summary:0 msgid "Summary" -msgstr "Bezeichnung" +msgstr "Übersicht" #. module: crm #: view:crm.merge.opportunity:0 @@ -610,7 +613,7 @@ msgstr "Zusammenfassen" #. module: crm #: view:crm.case.categ:0 msgid "Case Category" -msgstr "Vertriebskategorie" +msgstr "Vorgangshistorie" #. module: crm #: field:crm.lead,partner_address_name:0 @@ -639,12 +642,12 @@ msgstr "Kunden Profilerstellung" #. module: crm #: view:crm.phonecall.report:0 msgid "#Phone calls" -msgstr "# Kundenanrufe" +msgstr "Anzahl Anrufe" #. module: crm #: sql_constraint:crm.case.section:0 msgid "The code of the sales team must be unique !" -msgstr "Die Kurzbezeichnung für das Vertriebsteam muss eindeutig sein!" +msgstr "Das Kürzel für das Vertriebsteam muss eindeutig sein!" #. module: crm #: selection:crm.case.stage,state:0 @@ -703,12 +706,12 @@ msgstr "Partner Segmentierungspositionen" #: model:ir.actions.act_window,name:crm.action_report_crm_phonecall #: model:ir.ui.menu,name:crm.menu_report_crm_phonecalls_tree msgid "Phone Calls Analysis" -msgstr "Statistik Kundenanrufe" +msgstr "Statistik Anrufe" #. module: crm #: view:crm.lead:0 msgid "Leads Form" -msgstr "Verkaufskontakt Formular" +msgstr "Interessenten Formular" #. module: crm #: view:crm.segmentation:0 @@ -724,7 +727,7 @@ msgstr "Dauer in Minuten" #. module: crm #: field:crm.lead.report,probable_revenue:0 msgid "Probable Revenue" -msgstr "Möglicher Umsatz" +msgstr "Geplanter Umsatz" #. module: crm #: help:crm.lead.report,creation_month:0 @@ -746,23 +749,23 @@ msgstr "Interessenten aus der USA" msgid "The probability of closing the deal should be between 0% and 100%!" msgstr "" "Die Wahrscheinlichkeit eines erfolgreichen Abschluss liegt zwischen 0% und " -"100% !." +"100% !" #. module: crm #: view:crm.lead:0 msgid "Leads Generation" -msgstr "Generierung Verkaufskontakte" +msgstr "Generierung Interessenten" #. module: crm #: view:board.board:0 msgid "Statistics Dashboard" -msgstr "Pinnwand Statistiken" +msgstr "Statistik Anzeigetafel" #. module: crm #: code:addons/crm/crm_lead.py:853 #, python-format msgid "Stage changed to %s." -msgstr "Die Stufe wurde geändert zu %s." +msgstr "Stufe wurde geändert auf %s." #. module: crm #: code:addons/crm/crm_lead.py:755 @@ -776,7 +779,7 @@ msgstr "Die Stufe wurde geändert zu %s." #: field:res.partner,opportunity_count:0 #, python-format msgid "Opportunity" -msgstr "Verkaufschance" +msgstr "Chance" #. module: crm #: code:addons/crm/crm_meeting.py:62 @@ -807,26 +810,24 @@ msgstr "Beende Prozess" #. module: crm #: field:crm.case.section,alias_id:0 msgid "Alias" -msgstr "" +msgstr "Alias" #. module: crm #: view:crm.phonecall:0 msgid "Search Phonecalls" -msgstr "Suche Kundenanruf" +msgstr "Suche Anruf" #. module: crm #: view:crm.lead.report:0 msgid "" "Leads/Opportunities that are assigned to one of the sale teams I manage" -msgstr "" -"Interessenten / Chancen, die dem mir unterstellten Team oder mir persönlich " -"zugewiesen wurden." +msgstr "Interessenten / Chancen, die mir oder meinem Team zugewiesen wurden." #. module: crm #: field:crm.partner2opportunity,name:0 #: field:crm.phonecall2opportunity,name:0 msgid "Opportunity Name" -msgstr "Verkaufschance Bez." +msgstr "Chance Bezeichnung" #. module: crm #: field:base.action.rule,act_section_id:0 @@ -841,7 +842,7 @@ msgstr "Terminart" #. module: crm #: field:crm.segmentation,exclusif:0 msgid "Exclusive" -msgstr "Exklusive Auswahl" +msgstr "Exklusiv" #. module: crm #: code:addons/crm/crm_lead.py:512 @@ -852,7 +853,7 @@ msgstr "Von %s : %s" #. module: crm #: field:crm.lead.report,creation_year:0 msgid "Creation Year" -msgstr "Jahr Erzuegung" +msgstr "Jahr der Erzeugung" #. module: crm #: view:crm.lead2opportunity.partner:0 @@ -876,7 +877,7 @@ msgstr "Erzeugt am" #. module: crm #: field:crm.lead,ref2:0 msgid "Reference 2" -msgstr "Ref. 2" +msgstr "Referenz 2" #. module: crm #: help:crm.case.stage,section_ids:0 @@ -902,8 +903,8 @@ msgid "" " " msgstr "" "Hallo [[object.user_id.name]], \n" -"könntest Du diesen Interessenten prüfen, der Fall ist bereits seit 5 Tagen " -"offen ?\n" +"könntest Du bitte diesen Interessenten prüfen, der Fall wurde schon seit 5 " +"Tagen noch nicht bearbeitet ?\n" "\n" "Interessent: [[object.id ]]\n" "Beschreibung:\n" @@ -922,7 +923,7 @@ msgstr "Anforderungen" #. module: crm #: view:crm.phonecall2opportunity:0 msgid "Convert To Opportunity " -msgstr "Konvertiere z. Verkaufschance " +msgstr "Umwandel zu Chance " #. module: crm #: view:crm.phonecall:0 @@ -939,7 +940,7 @@ msgstr "Nicht zugeteilte Anrufe" #: model:process.node,name:crm.process_node_opportunities0 #: view:res.partner:0 msgid "Opportunities" -msgstr "Verkaufschance" +msgstr "Chancen" #. module: crm #: field:crm.segmentation,categ_id:0 @@ -964,17 +965,17 @@ msgstr "Ausgehende Anrufe" #. module: crm #: view:crm.lead:0 msgid "Mark Won" -msgstr "Abschluss als Verkauf" +msgstr "Markiere als erfolgreich angeschlossen" #. module: crm #: field:crm.case.stage,probability:0 msgid "Probability (%)" -msgstr "Wahrscheinlichk. (%)" +msgstr "Wahrscheinl. (%)" #. module: crm #: view:crm.lead:0 msgid "Mark Lost" -msgstr "Kein Verkaufsabschluss" +msgstr "Markiere als nicht erfolgreich abgeschlossen" #. module: crm #: model:ir.filters,name:crm.filter_draft_lead @@ -1002,12 +1003,12 @@ msgstr "Warnung !" #. module: crm #: field:crm.lead,day_open:0 msgid "Days to Open" -msgstr "Tage b. Eröffnung" +msgstr "Tage bis Eröffnung" #. module: crm #: view:crm.phonecall2partner:0 msgid "Create Partner" -msgstr "Erstelle Partner" +msgstr "Erzeuge Partner" #. module: crm #: field:crm.lead,mobile:0 @@ -1031,9 +1032,7 @@ msgstr "Referenz" msgid "" "Opportunities that are assigned to either me or one of the sale teams I " "manage" -msgstr "" -"Chancen, die mir persönlich oder dem Team, für das ich verantwortlich bin, " -"zugewiesen wurden" +msgstr "Chancen, die mir oder meinem Team zugewiesen wurden" #. module: crm #: help:crm.case.section,resource_calendar_id:0 @@ -1046,7 +1045,7 @@ msgstr "Für Kalkulation der offenen Tage" #: view:res.partner:0 #: field:res.partner,meeting_ids:0 msgid "Meetings" -msgstr "Terminkalender" +msgstr "Meetings" #. module: crm #: view:base.action.rule:0 @@ -1058,7 +1057,7 @@ msgstr "Filterkriterien" #: field:crm.lead,title_action:0 #: field:crm.phonecall,date_action_next:0 msgid "Next Action" -msgstr "Nächste Aktion" +msgstr "Nächster Schritt" #. module: crm #: view:crm.segmentation:0 @@ -1078,12 +1077,12 @@ msgstr "Betreff" #. module: crm #: view:crm.lead:0 msgid "New Leads" -msgstr "Neue Kontakte" +msgstr "Neue Interessenten" #. module: crm #: view:crm.lead:0 msgid "Show Sales Team" -msgstr "Zeige Verkaufs Team" +msgstr "Zeige Vertriebsteam" #. module: crm #: help:sale.config.settings,module_crm_claim:0 @@ -1103,7 +1102,7 @@ msgstr "Erfolgreich" #. module: crm #: field:crm.lead.report,delay_expected:0 msgid "Overpassed Deadline" -msgstr "Abgelaufene Frist" +msgstr "Überschrittene Frist" #. module: crm #: model:crm.case.section,name:crm.section_sales_department @@ -1197,7 +1196,7 @@ msgstr "Anrufe in Bearbeitung" #: model:ir.actions.act_window,name:crm.crm_lead_stage_act #: model:ir.ui.menu,name:crm.menu_crm_lead_stage_act msgid "Stages" -msgstr "Vertriebsstufen" +msgstr "Stufen" #. module: crm #: help:sale.config.settings,module_crm_helpdesk:0 @@ -1219,7 +1218,7 @@ msgstr "Löschen" #: field:crm.partner2opportunity,planned_revenue:0 #: field:crm.phonecall2opportunity,planned_revenue:0 msgid "Expected Revenue" -msgstr "Erwart. Umsatz" +msgstr "Erwarteter Umsatz" #. module: crm #: view:crm.lead:0 @@ -1230,7 +1229,7 @@ msgstr "" #: code:addons/crm/crm_lead.py:867 #, python-format msgid "Opportunity has been lost." -msgstr "Chance wurde kein Verkauf." +msgstr "Chance wurde kein erfolgreicher Abschluss." #. module: crm #: selection:crm.lead.report,creation_month:0 @@ -1254,8 +1253,7 @@ msgstr "Max Partner ID verarbeitet" msgid "" "Setting this stage will change the probability automatically on the " "opportunity." -msgstr "" -"Das Setzten dieser Stufe wird die Wahrscheinlichkeit automatisch ändern" +msgstr "Eine andere Stufe ändert die Wahrscheinlichkeit automatisch." #. module: crm #: view:crm.lead:0 @@ -1309,8 +1307,8 @@ msgid "" "If you check this field, this stage will be proposed by default on each " "sales team. It will not assign this stage to existing teams." msgstr "" -"Bei Aktivierung dieses Feldes wird diese Stufe automatische dem Verkaufsteam " -"zugeordnet. Gilt nicht für bestehende Teams." +"Durch Aktivierung wird diese Stufe automatisch dem Verkaufsteam zugeordnet. " +"Dieses wird nicht unmittelbar für die bereits bestehenden Teams übernommen." #. module: crm #: help:crm.case.stage,type:0 @@ -1328,9 +1326,9 @@ msgid "" "Check if you want to use this tab as part of the segmentation rule. If not " "checked, the criteria beneath will be ignored" msgstr "" -"Setze Haken, falls dieser Tabulator als Bestandteil der Segmentierungs Regel " -" genutzt werden soll. Falls der Haken nicht gesetzt wird, werden die " -"Kriterien dieser Seite ignoriert." +"Aktivieren Sie diese, falls dieser Tabulator als Bestandteil der " +"Segmentierung genutzt werden soll. Falls der Haken nicht gesetzt wird, " +"werden die Kriterien dieser Seite ignoriert." #. module: crm #: view:crm.lead2partner:0 @@ -1338,7 +1336,7 @@ msgstr "" #: model:ir.actions.act_window,name:crm.action_crm_lead2partner #: model:ir.actions.act_window,name:crm.action_crm_phonecall2partner msgid "Create a Partner" -msgstr "Erstelle Partner" +msgstr "Erzeuge Partner" #. module: crm #: field:crm.segmentation,state:0 @@ -1353,7 +1351,7 @@ msgstr "Dokumentiere Anruf" #. module: crm #: field:crm.lead,day_close:0 msgid "Days to Close" -msgstr "Tage f. Beend." +msgstr "Tage b. Beend." #. module: crm #: field:crm.case.section,complete_name:0 @@ -1372,7 +1370,7 @@ msgstr "" #. module: crm #: model:ir.model,name:crm.model_crm_partner2opportunity msgid "Partner To Opportunity" -msgstr "Partner zu Verkaufschance" +msgstr "Partner zu Chance" #. module: crm #: field:crm.opportunity2phonecall,date:0 @@ -1403,7 +1401,7 @@ msgstr "Erweiterter Filter..." #. module: crm #: view:crm.phonecall.report:0 msgid "Phone calls which are in closed state" -msgstr "abgeschlossene Anrufe" +msgstr "Beendete Telefonanrufe" #. module: crm #: view:crm.phonecall.report:0 @@ -1418,6 +1416,10 @@ msgid "" "set to 'Done'. If the case needs to be reviewed then the Status is set to " "'Pending'." msgstr "" +"Der Status wird bei der Anlage eines Falles auf 'Neu' gesetzt. Wenn der Fall " +"bearbeitet wird, wird der Status auf 'offen' gesetzt. Wenn der Fall " +"abgeschlossen wird, wird der Status auf 'Erledigt' gesetzt. Wenn der Fall " +"überprüft werden muss, wird der Status auf 'Wiedervorlage' gesetzt." #. module: crm #: model:crm.case.section,name:crm.crm_case_section_1 @@ -1450,7 +1452,7 @@ msgstr "Interessent Beschreibung" #: code:addons/crm/crm_lead.py:491 #, python-format msgid "Merged opportunities" -msgstr "Zusammengeführte Verkaufschancen" +msgstr "Zusammengefasste Chancen" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor7 @@ -1460,7 +1462,7 @@ msgstr "Beratungsdienste" #. module: crm #: field:crm.case.section,code:0 msgid "Code" -msgstr "Kurzbez." +msgstr "Kürzel" #. module: crm #: view:sale.config.settings:0 @@ -1515,12 +1517,12 @@ msgstr "Informationen" #. module: crm #: view:crm.lead.report:0 msgid "Leads/Opportunities which are in pending state" -msgstr "Verkaufskontakte und Chancen in Wartezustand" +msgstr "Interessenten / Chancen zur Wiedervorlage" #. module: crm #: model:ir.model,name:crm.model_crm_merge_opportunity msgid "Merge two Opportunities" -msgstr "Fasse zwei Verkaufschancen zusammen" +msgstr "Fasse zwei Chancen zusammen" #. module: crm #: model:ir.model,name:crm.model_crm_phonecall2partner @@ -1536,7 +1538,7 @@ msgstr "Andere" #: field:crm.phonecall,opportunity_id:0 #: model:ir.model,name:crm.model_crm_lead msgid "Lead/Opportunity" -msgstr "Verkaufskontakt/Chance" +msgstr "Interessent / Chance" #. module: crm #: model:ir.actions.act_window,name:crm.action_merge_opportunities @@ -1547,17 +1549,17 @@ msgstr "Zusammenfassung Interessent / Chance" #. module: crm #: help:crm.case.stage,sequence:0 msgid "Used to order stages. Lower is better." -msgstr "Wird zum ordnen der Stufen genutzt. Je geringer desto besser." +msgstr "Wird zum ordnen der Stufen in aufsteigender Reihenfolge genutzt." #. module: crm #: model:ir.actions.act_window,name:crm.crm_phonecall_categ_action msgid "Phonecall Categories" -msgstr "Kundenanruf Kategorien" +msgstr "Anruf Kategorien" #. module: crm #: view:crm.lead.report:0 msgid "Leads/Opportunities which are in open state" -msgstr "Offene Verkaufskontakt/Chance" +msgstr "Offene Chancen / Interessenten" #. module: crm #: model:ir.model,name:crm.model_res_users @@ -1567,13 +1569,13 @@ msgstr "Benutzer" #. module: crm #: constraint:crm.case.section:0 msgid "Error ! You cannot create recursive Sales team." -msgstr "Fehler ! Sie können kein rekursives Sales Team haben." +msgstr "Fehler ! Sie können kein rekursives Verkaufsteam haben." #. module: crm #: selection:crm.opportunity2phonecall,action:0 #: selection:crm.phonecall2phonecall,action:0 msgid "Log a call" -msgstr "Dokumentiere einen Anruf" +msgstr "Dokumentiere Anruf" #. module: crm #: selection:crm.segmentation.line,expr_name:0 @@ -1584,7 +1586,7 @@ msgstr "Umsatz Verkauf" #: view:crm.phonecall.report:0 #: model:ir.actions.act_window,name:crm.act_crm_opportunity_crm_phonecall_new msgid "Phone calls" -msgstr "Kundenanrufe" +msgstr "Anrufe" #. module: crm #: model:ir.actions.act_window,help:crm.action_report_crm_opportunity @@ -1595,8 +1597,8 @@ msgid "" "mainly used by the sales manager in order to do the periodic review with the " "teams of the sales pipeline." msgstr "" -"Statistik Verkaufschancen zeigt Ihnen einen zusammenfassenden Überblick über " -"die Bearbeitung ihre Verkaufsmöglichkeiten mit Informationen zu erwartetem " +"Statistik Chancen zeigt Ihnen einen zusammenfassenden Überblick über die " +"Bearbeitung Ihrer Verkaufsmöglichkeiten mit Informationen zu erwartetem " "Umsatz, geplanten Vertriebskosten, überschrittenen Bearbeitungsfristen oder " "der Anzahl an erforderlichen Kontaktaufnahmen durch den Vertrieb. Dieser " "Bericht wird i.d.R. durch die Vertriebsleitung eingesetzt, um einen " @@ -1608,7 +1610,7 @@ msgstr "" #: field:crm.payment.mode,name:0 #: field:crm.segmentation,name:0 msgid "Name" -msgstr "Bezeichnung" +msgstr "Name" #. module: crm #: view:crm.lead.report:0 @@ -1625,7 +1627,7 @@ msgstr "Meine Fälle" #: help:crm.lead,message_ids:0 #: help:crm.phonecall,message_ids:0 msgid "Messages and communication history" -msgstr "Nachrichten und Kommunikation" +msgstr "Nachrichten und Kommunikations-Historie" #. module: crm #: view:crm.lead:0 @@ -1655,7 +1657,7 @@ msgstr "Konvertiere zu Kaufinteressent oder Partner" #: code:addons/crm/crm_lead.py:871 #, python-format msgid "Opportunity has been won." -msgstr "Chance wurde gewonnen." +msgstr "Chance wurde erfolgreich abgeschlossen." #. module: crm #: view:crm.phonecall:0 @@ -1665,17 +1667,17 @@ msgstr "Anrufe, die mir oder meinem Team zugewiesen wurden" #. module: crm #: model:ir.model,name:crm.model_crm_payment_mode msgid "CRM Payment Mode" -msgstr "CRM Zahlungsverfahren" +msgstr "CRM Zahlungsmethode" #. module: crm #: view:crm.lead.report:0 msgid "Leads/Opportunities which are in done state" -msgstr "Erledigte Verkaufskontakt/Chance" +msgstr "Erledigte Interessenten / Chancen" #. module: crm #: field:crm.lead.report,delay_close:0 msgid "Delay to Close" -msgstr "Zeit f. Beendigung" +msgstr "Zeit bis zur Beendigung" #. module: crm #: view:crm.lead:0 @@ -1709,7 +1711,7 @@ msgstr "Datum nächste Aktion" #. module: crm #: selection:crm.segmentation,state:0 msgid "Running" -msgstr "In Weiterbearbeitung" +msgstr "In laufender Bearbeitung" #. module: crm #: help:crm.case.stage,state:0 @@ -1741,7 +1743,7 @@ msgstr "Eingehende Anrufe" #. module: crm #: view:crm.phonecall.report:0 msgid "Month of call" -msgstr "Methode des Anrufs" +msgstr "Monat des Anrufs" #. module: crm #: code:addons/crm/crm_phonecall.py:289 @@ -1764,7 +1766,7 @@ msgstr "" "Die Interessenten Statistik ermöglicht verschiedene Analysen über die " "Bearbeitung Ihrer Interessenten, z.B. die Eröffnungszeiten, die " "Bearbeitungsdauern oder die Anzahl nach Stufen. Sie können die Interessenten " -"Statistik durch Gruppierung über multiple Dimensionen feingranular zu " +"Statistik durch Gruppierung über multiple Dimensionen feingranular " "untersuchen." #. module: crm @@ -1790,7 +1792,7 @@ msgstr "Jahr der Erstellung" #: view:crm.lead:0 #: field:crm.lead,description:0 msgid "Notes" -msgstr "Anmerkungen" +msgstr "Notizen" #. module: crm #: field:crm.segmentation.line,expr_value:0 @@ -1800,12 +1802,12 @@ msgstr "Wert" #. module: crm #: field:crm.lead,partner_name:0 msgid "Customer Name" -msgstr "Kunde" +msgstr "Kundenname" #. module: crm #: model:ir.model,name:crm.model_crm_phonecall2opportunity msgid "Phonecall To Opportunity" -msgstr "Anrufe zu Verkaufschance" +msgstr "Anruf bei Chance" #. module: crm #: field:crm.case.section,reply_to:0 @@ -1820,7 +1822,7 @@ msgstr "Anzeige" #. module: crm #: view:board.board:0 msgid "Opportunities by Stage" -msgstr "Verkaufschancen nach Stufen" +msgstr "Chancen nach Stufen" #. module: crm #: model:process.transition,note:crm.process_transition_leadpartner0 @@ -1851,7 +1853,7 @@ msgstr "Erledigt" #. module: crm #: view:crm.lead:0 msgid "Extra Info" -msgstr "Extra Information" +msgstr "Weitere Info" #. module: crm #: view:crm.lead:0 @@ -1887,7 +1889,7 @@ msgstr "Priorität" #. module: crm #: model:ir.model,name:crm.model_crm_lead2opportunity_partner msgid "Lead To Opportunity Partner" -msgstr "Verkaufskontakt zu Verkaufschance Partner" +msgstr "Interessent zu Chance Partner" #. module: crm #: help:crm.lead,partner_id:0 @@ -1911,7 +1913,7 @@ msgstr "Mehrfach Umwandlung" #. module: crm #: view:sale.config.settings:0 msgid "On Mail Server" -msgstr "" +msgstr "Anbindung E-Mail Server" #. module: crm #: model:ir.actions.act_window,name:crm.open_board_statistical_dash @@ -1949,7 +1951,7 @@ msgstr "Segmentierung Positionen" #: view:crm.opportunity2phonecall:0 #: view:crm.phonecall2phonecall:0 msgid "Planned Date" -msgstr "Gepl. Datum" +msgstr "Geplantes Datum" #. module: crm #: view:crm.lead:0 @@ -1965,16 +1967,14 @@ msgstr "Wiederkehrer" #: help:crm.lead,type:0 #: help:crm.lead.report,type:0 msgid "Type is used to separate Leads and Opportunities" -msgstr "" -"Typ wird zur Unterscheidung von Verkaufskontakten und Verkaufschancen " -"verwendet." +msgstr "Typ wird zur Unterscheidung von Interessent und Chance verwendet." #. module: crm #: view:crm.phonecall2partner:0 msgid "Are you sure you want to create a partner based on this Phonecall ?" msgstr "" "Sind Sie sicher, dass Sie einen neuen Partner auf der Grundlage dieses " -"Telefonanrufs anlegen möchten?" +"Anrufs anlegen möchten?" #. module: crm #: selection:crm.lead.report,creation_month:0 @@ -1986,7 +1986,7 @@ msgstr "Juli" #. module: crm #: view:crm.lead:0 msgid "Lead / Customer" -msgstr "Verkaufskontakt / Kunde" +msgstr "Interessent / Kunde" #. module: crm #: model:crm.case.section,name:crm.crm_case_section_2 @@ -1996,7 +1996,7 @@ msgstr "Kundensupport Abteilung" #. module: crm #: view:crm.lead.report:0 msgid "Show only lead" -msgstr "Zeige nur Verkaufskontakte" +msgstr "Zeige nur Interessenten" #. module: crm #: model:ir.actions.act_window,name:crm.crm_case_section_act @@ -2020,12 +2020,12 @@ msgstr "Segmentierung" #. module: crm #: view:crm.lead:0 msgid "Team" -msgstr "Name Team" +msgstr "Team" #. module: crm #: view:crm.lead.report:0 msgid "Leads/Opportunities which are in New state" -msgstr "Neue Verkaufskontakt/Chance" +msgstr "Neuer Interessent / Chance" #. module: crm #: code:addons/crm/crm_lead.py:883 @@ -2037,18 +2037,18 @@ msgstr "%s Kundewurde geändert zu%s." #: selection:crm.phonecall,state:0 #: view:crm.phonecall.report:0 msgid "Not Held" -msgstr "Nicht Stattgef." +msgstr "Nicht Telefoniert" #. module: crm #: field:crm.lead.report,probability:0 msgid "Probability" -msgstr "Wahrscheinlichk." +msgstr "Wahrscheinl." #. module: crm #: code:addons/crm/crm_lead.py:552 #, python-format msgid "Please select more than one opportunity from the list view." -msgstr "Bitte wählen Sie mehr als eine Verkaufsschance aus" +msgstr "Bitte wählen Sie mehr als eine Chance aus" #. module: crm #: view:crm.lead.report:0 @@ -2063,7 +2063,7 @@ msgstr "Monat" #: model:ir.ui.menu,name:crm.menu_crm_leads #: model:process.node,name:crm.process_node_leads0 msgid "Leads" -msgstr "Verkaufskontakte" +msgstr "Interessenten" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor5 @@ -2096,7 +2096,7 @@ msgstr "" "

\n" " OpenERP hilft Ihnen dabei, Ihre Vertriebs-Pipeline zu " "verfolgen\n" -"              und die Prognose zukünftiger Umsätze zu optimieren.\n" +" und die Prognose zukünftiger Umsätze zu optimieren.\n" "

\n" " Sie können Ihre Meetings und Telefonanrufe bei Chancen " "einplanen,\n" @@ -2110,7 +2110,7 @@ msgstr "" #: view:crm.phonecall.report:0 #: selection:crm.phonecall.report,state:0 msgid "Todo" -msgstr "Offen" +msgstr "Zu erledigen" #. module: crm #: field:crm.lead,user_email:0 @@ -2130,7 +2130,7 @@ msgstr "" #: field:crm.opportunity2phonecall,note:0 #: field:crm.phonecall2phonecall,note:0 msgid "Note" -msgstr "Bemerkung" +msgstr "Notiz" #. module: crm #: selection:crm.lead,priority:0 @@ -2153,7 +2153,7 @@ msgstr "Beendet" #. module: crm #: view:crm.lead:0 msgid "Open Opportunities" -msgstr "Offene Verkaufschancen" +msgstr "Offene Chancen" #. module: crm #: model:crm.case.resource.type,name:crm.type_lead2 @@ -2167,12 +2167,12 @@ msgstr "E-Mail Kampagne - Dienstleistung" #: selection:crm.lead.report,state:0 #: selection:crm.phonecall.report,state:0 msgid "Pending" -msgstr "Schwebend" +msgstr "Wiedervorlage" #. module: crm #: model:process.transition,name:crm.process_transition_leadopportunity0 msgid "Prospect Opportunity" -msgstr "Verkaufschance" +msgstr "Aussichtsreiche Chance" #. module: crm #: model:ir.actions.act_window,help:crm.crm_case_category_act_leads_all @@ -2212,7 +2212,7 @@ msgstr "" #. module: crm #: field:crm.lead,email_cc:0 msgid "Global CC" -msgstr "Allgemeine Kopie (CC)" +msgstr "Generelle E-Mail Kopie (CC)" #. module: crm #: view:crm.lead:0 @@ -2221,7 +2221,7 @@ msgstr "Allgemeine Kopie (CC)" #: model:ir.ui.menu,name:crm.menu_crm_case_phone #: model:ir.ui.menu,name:crm.menu_crm_config_phonecall msgid "Phone Calls" -msgstr "Kundenanrufe" +msgstr "Anrufe" #. module: crm #: view:crm.case.stage:0 @@ -2232,7 +2232,7 @@ msgstr "Suche Stufen" #: help:crm.lead.report,delay_open:0 #: help:crm.phonecall.report,delay_open:0 msgid "Number of Days to open the case" -msgstr "Anzahl Tage f. Eröffnung" +msgstr "Anzahl Tage b. Eröffnung" #. module: crm #: field:crm.lead,phone:0 @@ -2273,7 +2273,7 @@ msgstr "Verknüpfter Kunde" #. module: crm #: field:crm.lead.report,deadline_day:0 msgid "Exp. Closing Day" -msgstr "Erw. Abschlußtag" +msgstr "Geplanter Abschluß" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor2 @@ -2290,12 +2290,12 @@ msgstr "Neuzuweisung Eskalation" #: model:ir.actions.act_window,name:crm.action_report_crm_opportunity #: model:ir.ui.menu,name:crm.menu_report_crm_opportunities_tree msgid "Opportunities Analysis" -msgstr "Statistik Verkaufschancen" +msgstr "Statistik Chancen" #. module: crm #: view:crm.lead:0 msgid "Misc" -msgstr "Diverse" +msgstr "Sonstiges" #. module: crm #: field:base.action.rule,regex_history:0 @@ -2353,7 +2353,7 @@ msgstr "Anruf wurde erstellt und eröffnet." #. module: crm #: field:base.action.rule,trg_max_history:0 msgid "Maximum Communication History" -msgstr "Max. Anzahl Einträge Historie" +msgstr "Maximum Kommunikation Historie" #. module: crm #: view:crm.lead2opportunity.partner.mass:0 @@ -2363,7 +2363,7 @@ msgstr "Optionen zur Umwandlung" #. module: crm #: view:crm.lead:0 msgid "Address" -msgstr "Adresse" +msgstr "Anschrift" #. module: crm #: help:crm.case.section,alias_id:0 @@ -2377,19 +2377,19 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Unassigned Opportunities" -msgstr "Nicht zugeteilte Verkaufschancen" +msgstr "Nicht zugewiesene Chancen" #. module: crm #: view:crm.lead:0 msgid "Search Leads" -msgstr "Suche Leads" +msgstr "Suche Interessenten" #. module: crm #: view:crm.lead.report:0 #: view:crm.phonecall.report:0 #: field:crm.phonecall.report,delay_open:0 msgid "Delay to open" -msgstr "Zeit b. Eröffn." +msgstr "Zeit bis Eröffnung" #. module: crm #: model:ir.actions.act_window,name:crm.crm_case_categ_phone_outgoing0 @@ -2400,7 +2400,7 @@ msgstr "Geplante Anrufe" #. module: crm #: field:crm.lead,id:0 msgid "ID" -msgstr "Ticket-Nr." +msgstr "ID" #. module: crm #: help:crm.lead,type_id:0 @@ -2408,8 +2408,8 @@ msgid "" "From which campaign (seminar, marketing campaign, mass mailing, ...) did " "this contact come from?" msgstr "" -"Von welcher Marketingaktion (Seminar, Merketing, Postwurf,...) kam dieser " -"Kontakt?" +"Durch welche Kampange (Seminar, Marketing Kampange, Massen Mailing, ...) " +"wurde dieser Kontakt erzeugt?" #. module: crm #: model:ir.model,name:crm.model_calendar_attendee @@ -2419,7 +2419,7 @@ msgstr "Information zu Teilnehmern" #. module: crm #: view:crm.segmentation:0 msgid "Segmentation Test" -msgstr "Kriterien Segmentierung" +msgstr "Segmentierung Test" #. module: crm #: view:crm.segmentation:0 @@ -2488,15 +2488,14 @@ msgid "" "This stage is not visible, for example in status bar or kanban view, when " "there are no records in that stage to display." msgstr "" -"Die Stufe ist unsichtbar, z.B. in der Status Anzeige oder Kanban Ansicht, " -"wenn es keine Datensätze in\r\n" -"dieser Stufe mehr gibt." +"Die Stufe ist unsichtbar, z.B. in der Fortschrittsanzeige oder Kanban " +"Ansicht, wenn es keine Datensätze in dieser Stufe gibt." #. module: crm #: field:crm.lead.report,nbr:0 #: field:crm.phonecall.report,nbr:0 msgid "# of Cases" -msgstr "# Fälle" +msgstr "# Vorgänge" #. module: crm #: help:crm.phonecall,section_id:0 @@ -2536,7 +2535,7 @@ msgstr "Bedingungen der Kommunikation" #. module: crm #: view:crm.lead:0 msgid "Unassigned Leads" -msgstr "nicht zugeordnete Verkaufskontakte" +msgstr "nicht zugewiesene Interessenten" #. module: crm #: field:crm.case.categ,object_id:0 @@ -2573,8 +2572,7 @@ msgid "" " " msgstr "" "Hallo [[object.partner_id and object.partner_id.name or '']], \n" -"der folgende Interessent wurde bereits nach 5 Tage immer noch nicht " -"eröffnet.\n" +"der folgende Interessent wurde nach 5 Tage immer noch nicht eröffnet.\n" "\n" "Interessent: [[object.id ]]\n" "Beschreibung: \n" @@ -2587,14 +2585,14 @@ msgstr "" #. module: crm #: view:crm.phonecall2opportunity:0 msgid "_Convert" -msgstr "Konvertiere" +msgstr "_Umwandeln" #. module: crm #: field:crm.case.section,message_ids:0 #: field:crm.lead,message_ids:0 #: field:crm.phonecall,message_ids:0 msgid "Messages" -msgstr "Nachrichten" +msgstr "Mitteilungen" #. module: crm #: help:crm.lead,channel_id:0 @@ -2630,7 +2628,7 @@ msgid "" "the report." msgstr "" "Mit diesem Bericht können Sie die Leistung Ihres Verkaufsteams auf Basis " -"ihrer Telefonanrufe analysieren. Sie können ausserdem Informationen anhand " +"ihrer Anwendnung beurteilen . Sie können ausserdem Informationen anhand " "verschiedener Kriterien filtern und gründlich untersuchen." #. module: crm @@ -2641,7 +2639,7 @@ msgstr "Verbundener Status" #. module: crm #: field:crm.phonecall,name:0 msgid "Call Summary" -msgstr "Anruf Thema" +msgstr "Anruf Übersicht" #. module: crm #: field:crm.segmentation.line,expr_operator:0 @@ -2672,7 +2670,7 @@ msgstr "Geplanter Umsatz je Benutzer und Stufe" #. module: crm #: view:crm.phonecall:0 msgid "Confirm" -msgstr "Bestätige" +msgstr "Bestätigen" #. module: crm #: view:crm.lead:0 @@ -2699,14 +2697,14 @@ msgstr "Followers" #. module: crm #: field:sale.config.settings,fetchmail_lead:0 msgid "Create leads from incoming mails" -msgstr "Erzeugt Leads aus eingehenden E-Mails" +msgstr "Erzeuge Interessenten aus eingehenden EMails" #. module: crm #: view:crm.lead:0 #: field:crm.lead,email_from:0 #: field:crm.phonecall,email_from:0 msgid "Email" -msgstr "E-Mail Adresse" +msgstr "E-Mail:" #. module: crm #: view:crm.case.channel:0 @@ -2715,7 +2713,7 @@ msgstr "E-Mail Adresse" #: view:crm.lead.report:0 #: field:crm.lead.report,channel_id:0 msgid "Channel" -msgstr "Vertriebsweg" +msgstr "Kanal" #. module: crm #: view:crm.opportunity2phonecall:0 @@ -2727,7 +2725,7 @@ msgstr "Terminiere Anruf" #: view:crm.lead.report:0 #: view:crm.phonecall.report:0 msgid "My Sales Team(s)" -msgstr "Mein(e) Verkaufsteam(s)" +msgstr "Eigene Teams" #. module: crm #: help:crm.segmentation,exclusif:0 @@ -2737,14 +2735,14 @@ msgid "" "If checked, remove the category from partners that doesn't match " "segmentation criterions" msgstr "" -"Prüfe ob diese Kategorie für Partner bereits genutzt wird.\n" +"Prüfe, ob diese Kategorie für Partner bereits genutzt wird.\n" "Wenn aktiviert, entferne die Kategorie bei Partnern, die diese Bedingung " "nicht erfüllen." #. module: crm #: model:process.transition,note:crm.process_transition_leadopportunity0 msgid "Creating business opportunities from Leads" -msgstr "Erzeuge Verkaufschance von Verkaufskontakt" +msgstr "Erzeuge Chance aus Interessent" #. module: crm #: model:crm.case.resource.type,name:crm.type_lead3 @@ -2833,11 +2831,11 @@ msgid "" " " msgstr "" "

\n" -" Klicken Sie um einen neuen 'Tag' zur Kennzeichnung von " -"Verkaufsvorgängen anzulegen.\n" +" Klicken Sie um eine neue Kennzeichnung zu Verkaufsvorgängen " +"anzulegen.\n" "

\n" -" Erstellen Sie 'Tags' die zur spezifischen Kennzeichnung von " -"Aktivitäten und Vorgängen\n" +" Erstellen Sie spezielle 'Gruppen'die zur spezifischen " +"Kennzeichnung von Aktivitäten und Vorgängen\n" " beitragen und eine bessere Klassifizierung und Analyse Ihrer " "Interessenten und Chancen\n" " ermöglicht. Solche Kategorien könnten z.B. die " @@ -2850,7 +2848,7 @@ msgstr "" #: code:addons/crm/wizard/crm_lead_to_partner.py:48 #, python-format msgid "A partner is already defined." -msgstr "Es ist bereits ein Partner definiert" +msgstr "Ein Partner wird nach-wie vor" #. module: crm #: view:sale.config.settings:0 @@ -2878,12 +2876,12 @@ msgstr "Datum des Anrufs" #: view:crm.lead:0 #: field:crm.lead,date_deadline:0 msgid "Expected Closing" -msgstr "Erw. Abschlussdatum" +msgstr "Erwartetes Abschlussdatum" #. module: crm #: model:ir.model,name:crm.model_crm_opportunity2phonecall msgid "Opportunity to Phonecall" -msgstr "Verkaufschance zu Kundenanruf" +msgstr "Chance zu Anruf" #. module: crm #: view:crm.segmentation:0 @@ -2893,12 +2891,12 @@ msgstr "Verkauf, Einkauf" #. module: crm #: view:crm.lead:0 msgid "Schedule Meeting" -msgstr "Plane Termin" +msgstr "Plane Meeting" #. module: crm #: field:crm.lead.report,deadline_year:0 msgid "Ex. Closing Year" -msgstr "Erw. Abschluß Jahr" +msgstr "Geplantes Abschluß Jahr" #. module: crm #: model:ir.actions.client,name:crm.action_client_crm_menu @@ -2926,12 +2924,12 @@ msgstr "Terminiere / Protokolliere Anruf" #. module: crm #: field:crm.lead,planned_cost:0 msgid "Planned Costs" -msgstr "Gepl. Kosten" +msgstr "Geplante Kosten" #. module: crm #: help:crm.lead,date_deadline:0 msgid "Estimate of the date on which the opportunity will be won." -msgstr "Erwartetes Verkaufsdatum dieser Chance" +msgstr "Vorraussichtliches Abschlussdatum dieses Leads" #. module: crm #: help:crm.lead,email_cc:0 @@ -2948,7 +2946,7 @@ msgstr "" #: model:ir.actions.act_window,name:crm.crm_case_categ_phone_incoming0 #: model:ir.ui.menu,name:crm.menu_crm_case_phone_inbound msgid "Logged Calls" -msgstr "Dokumentierte Anrufe" +msgstr "Aufgezeichete Anrufe" #. module: crm #: field:crm.partner2opportunity,probability:0 @@ -2966,7 +2964,7 @@ msgstr "Entwurf" #. module: crm #: model:ir.actions.act_window,name:crm.crm_case_section_act_tree msgid "Cases by Sales Team" -msgstr "Fälle nach Verkaufsteam" +msgstr "Vorgänge der Teams" #. module: crm #: view:crm.lead:0 @@ -2975,17 +2973,17 @@ msgstr "Fälle nach Verkaufsteam" #: model:process.node,name:crm.process_node_meeting0 #: field:res.partner,meeting_count:0 msgid "Meeting" -msgstr "Termine" +msgstr "Meeting" #. module: crm #: model:ir.model,name:crm.model_crm_case_categ msgid "Category of Case" -msgstr "Vertriebskategorie" +msgstr "Vorgang Kategorie" #. module: crm #: view:crm.lead:0 msgid "Opportunity / Customer" -msgstr "Verkaufschance / Kunde" +msgstr "Chance / Kunde" #. module: crm #: view:board.board:0 @@ -3003,7 +3001,7 @@ msgstr "Normal" #. module: crm #: field:crm.lead,street2:0 msgid "Street2" -msgstr "Strasse2" +msgstr "Straße 2" #. module: crm #: field:sale.config.settings,module_crm_helpdesk:0 @@ -3052,7 +3050,7 @@ msgstr "Verhandlung" #: view:crm.lead.report:0 #: model:ir.actions.act_window,name:crm.act_opportunity_stage msgid "Opportunities By Stage" -msgstr "Verkaufschancen nach Stufe" +msgstr "Chancen nach Stufen" #. module: crm #: selection:crm.lead.report,creation_month:0 @@ -3069,7 +3067,7 @@ msgstr "Vertrag" #. module: crm #: model:crm.case.resource.type,name:crm.type_lead4 msgid "Twitter Ads" -msgstr "Twitter Ads" +msgstr "Twitter Werbung" #. module: crm #: field:crm.case.stage,case_default:0 @@ -3084,7 +3082,7 @@ msgstr "Datum Erstellung" #. module: crm #: view:crm.lead.report:0 msgid "Planned Revenues" -msgstr "Gepl. Umsatz" +msgstr "Geplanter Umsatz" #. module: crm #: model:ir.actions.server,name:crm.actions_server_crm_lead_read @@ -3094,17 +3092,17 @@ msgstr "CRM Interessent: Markiere als gelesen" #. module: crm #: model:ir.model,name:crm.model_crm_phonecall2phonecall msgid "Phonecall To Phonecall" -msgstr "Kundenanruf zu Kundenanruf" +msgstr "Folgeanruf zu Anruf" #. module: crm #: help:crm.lead.report,deadline_year:0 msgid "Expected closing year" -msgstr "Erw. Abschluß Jahr" +msgstr "Geplanter Abschluß" #. module: crm #: model:ir.model,name:crm.model_crm_case_stage msgid "Stage of case" -msgstr "Phase des Falls" +msgstr "Stufe zu Vorgang" #. module: crm #: selection:crm.opportunity2phonecall,action:0 @@ -3121,12 +3119,12 @@ msgstr "Kategorisierung" #: view:crm.lead:0 #: view:crm.phonecall2phonecall:0 msgid "Log Call" -msgstr "Log Anruf" +msgstr "Anrufprotokoll" #. module: crm #: model:ir.model,name:crm.model_base_action_rule msgid "Action Rules" -msgstr "Action Rules" +msgstr "Regeln zur Auslösung v. Aktionen" #. module: crm #: help:sale.config.settings,group_fund_raising:0 @@ -3138,17 +3136,17 @@ msgstr "" #: field:crm.meeting,phonecall_id:0 #: model:ir.model,name:crm.model_crm_phonecall msgid "Phonecall" -msgstr "Kundenanruf" +msgstr "Telefonanruf" #. module: crm #: view:crm.phonecall.report:0 msgid "Phone calls that are assigned to one of the sale teams I manage" -msgstr "Meine eigenen Anrufe, oder Anrufe meines Teams" +msgstr "Eigene oder Anrufe des Teams" #. module: crm #: view:crm.lead:0 msgid "Create date" -msgstr "Erstellungsdatum" +msgstr "Datum Erstellung" #. module: crm #: view:crm.lead:0 @@ -3196,7 +3194,7 @@ msgstr "Beschreibung" #: field:crm.phonecall2phonecall,section_id:0 #: field:res.partner,section_id:0 msgid "Sales Team" -msgstr "Vertriebsteam" +msgstr "Verkauf Team" #. module: crm #: selection:crm.lead.report,creation_month:0 @@ -3238,12 +3236,12 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Internal Notes" -msgstr "Interne Hinweise" +msgstr "Interne Notizen" #. module: crm #: view:crm.lead:0 msgid "New Opportunities" -msgstr "Neue Verkaufschancen" +msgstr "Neue Chancen" #. module: crm #: field:crm.segmentation.line,operator:0 @@ -3253,7 +3251,7 @@ msgstr "Zwingend / Optional" #. module: crm #: field:crm.lead,street:0 msgid "Street" -msgstr "Strasse" +msgstr "Straße" #. module: crm #: field:crm.lead,referred:0 @@ -3263,7 +3261,7 @@ msgstr "Vermittelt durch" #. module: crm #: view:crm.phonecall:0 msgid "Reset to Todo" -msgstr "Auf ToDo zurücksetzen" +msgstr "Auf To Do zurücksetzen" #. module: crm #: field:crm.case.section,working_hours:0 @@ -3274,7 +3272,7 @@ msgstr "Arbeitsstunden" #: view:crm.phonecall:0 #: field:res.partner,phonecall_ids:0 msgid "Phonecalls" -msgstr "Kundenanrufe" +msgstr "Telefonanrufe" #. module: crm #: view:crm.lead:0 @@ -3297,7 +3295,7 @@ msgstr "Februar" #. module: crm #: view:crm.phonecall:0 msgid "Schedule a Meeting" -msgstr "Plane ein Meeting" +msgstr "Terminiere Meeting" #. module: crm #: model:crm.case.stage,name:crm.stage_lead8 @@ -3325,7 +3323,7 @@ msgstr "Land" #: view:crm.lead2opportunity.partner.mass:0 #: view:crm.phonecall:0 msgid "Convert to Opportunity" -msgstr "Konvertiere zu Verkaufschance" +msgstr "Umwandeln in Chance" #. module: crm #: help:crm.phonecall,email_from:0 @@ -3347,12 +3345,12 @@ msgstr "Kampagnen Bezeichnung" #. module: crm #: view:crm.segmentation:0 msgid "Profiling" -msgstr "Profilerstellung" +msgstr "Profil erstellen" #. module: crm #: model:ir.model,name:crm.model_crm_phonecall_report msgid "Phone calls by user and section" -msgstr "Kundenanrufe nach Benutzer und Sektion" +msgstr "Anrufe nach Benutzer und Sektion" #. module: crm #: code:addons/crm/crm_meeting.py:55 @@ -3367,12 +3365,12 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Exp.Closing" -msgstr "Erw. Abschluss" +msgstr "Geplanter Abschluss" #. module: crm #: field:crm.case.stage,sequence:0 msgid "Sequence" -msgstr "Reihenfolge" +msgstr "Nummernfolge" #. module: crm #: field:crm.segmentation.line,expr_name:0 @@ -3382,13 +3380,13 @@ msgstr "Variable zur Steuerung" #. module: crm #: model:crm.case.stage,name:crm.stage_lead4 msgid "Proposition" -msgstr "Schätzung Umsatzpotenzial" +msgstr "Umsatzprognose" #. module: crm #: field:crm.lead.report,date_closed:0 #: field:crm.phonecall.report,date_closed:0 msgid "Close Date" -msgstr "Datum Beendigung" +msgstr "Abschluss Datum" #. module: crm #: view:crm.lead.report:0 diff --git a/addons/crm/i18n/zh_CN.po b/addons/crm/i18n/zh_CN.po index 02f7a8f5040..e23a0a304c0 100644 --- a/addons/crm/i18n/zh_CN.po +++ b/addons/crm/i18n/zh_CN.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-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-05 16:32+0000\n" -"Last-Translator: jerryzhang \n" +"PO-Revision-Date: 2012-12-19 07:22+0000\n" +"Last-Translator: Wei \"oldrev\" Li \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-06 04:40+0000\n" -"X-Generator: Launchpad (build 16341)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:44+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: crm #: view:crm.lead.report:0 @@ -62,7 +62,7 @@ msgstr "" #: model:res.groups,name:crm.group_fund_raising #: field:sale.config.settings,group_fund_raising:0 msgid "Manage Fund Raising" -msgstr "" +msgstr "管理集资" #. module: crm #: view:crm.lead2opportunity.partner.mass:0 @@ -79,7 +79,7 @@ msgstr "延迟关闭" #: code:addons/crm/crm_lead.py:888 #, python-format msgid "Lead has been converted to an opportunity." -msgstr "" +msgstr "销售线索已转换为商机。" #. module: crm #: view:crm.lead:0 @@ -97,7 +97,7 @@ msgstr "CRM 线索分析" #. module: crm #: model:ir.actions.server,subject:crm.action_email_reminder_customer_lead msgid "Reminder on Lead: [[object.id ]]" -msgstr "" +msgstr "线索提醒:[[object.id ]]" #. module: crm #: view:crm.lead.report:0 @@ -120,7 +120,7 @@ msgstr "培训" #: model:ir.actions.act_window,name:crm.crm_lead_categ_action #: model:ir.ui.menu,name:crm.menu_crm_lead_categ msgid "Sales Tags" -msgstr "" +msgstr "销售标签" #. module: crm #: view:crm.lead.report:0 @@ -216,7 +216,7 @@ msgstr "退订" #. module: crm #: field:crm.case.stage,fold:0 msgid "Hide in Views when Empty" -msgstr "" +msgstr "当空的时候在视图中隐藏" #. module: crm #: model:ir.actions.server,name:crm.action_email_reminder_lead @@ -369,6 +369,14 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 单击以便创建一个关联到此客户的商机。\n" +"

\n" +" 使用商机来跟踪你的销售漏斗,把握潜在销售机会并且更好地预测未来产值。\n" +"

\n" +" 您可以从商机中安排会面和电话沟通,并把商机转换为报价单、附加到相关文档、跟踪所有讨论和更多功能。\n" +"

\n" +" " #. module: crm #: model:crm.case.stage,name:crm.stage_lead7 @@ -433,7 +441,7 @@ msgstr "" #: field:crm.lead2opportunity.partner,name:0 #: field:crm.lead2opportunity.partner.mass,name:0 msgid "Conversion Action" -msgstr "" +msgstr "转换操作" #. module: crm #: model:ir.actions.act_window,help:crm.crm_case_section_act @@ -693,7 +701,7 @@ msgstr "统计控制台" #: code:addons/crm/crm_lead.py:853 #, python-format msgid "Stage changed to %s." -msgstr "" +msgstr "阶段已改为 %s" #. module: crm #: code:addons/crm/crm_lead.py:755 @@ -713,7 +721,7 @@ msgstr "商机" #: code:addons/crm/crm_meeting.py:62 #, python-format msgid "A meeting has been scheduled on %s." -msgstr "" +msgstr "已为 %s 安排了一次会议。" #. module: crm #: model:crm.case.resource.type,name:crm.type_lead7 @@ -895,7 +903,7 @@ msgstr "失去标记" #. module: crm #: model:ir.filters,name:crm.filter_draft_lead msgid "Draft Leads" -msgstr "" +msgstr "线索草稿" #. module: crm #: selection:crm.lead.report,creation_month:0 @@ -907,7 +915,7 @@ msgstr "3月" #. module: crm #: view:crm.lead:0 msgid "Send Email" -msgstr "" +msgstr "发送电子邮件" #. module: crm #: code:addons/crm/wizard/crm_lead_to_opportunity.py:100 @@ -935,7 +943,7 @@ msgstr "手机" #: code:addons/crm/crm_phonecall.py:270 #, python-format msgid "Phonecall has been reset and set as open." -msgstr "" +msgstr "电话沟通已经被重置并设置为打开状态。" #. module: crm #: field:crm.lead,ref:0 @@ -1062,7 +1070,7 @@ msgstr "创建日期" #: code:addons/crm/crm_lead.py:862 #, python-format msgid "%s has been created." -msgstr "" +msgstr "%s已创建。" #. module: crm #: selection:crm.segmentation.line,expr_name:0 @@ -1086,7 +1094,7 @@ msgstr "阶段" #. module: crm #: view:crm.phonecall.report:0 msgid "Phone Calls that are assigned to me" -msgstr "" +msgstr "指派给我的电话沟通" #. module: crm #: field:crm.lead,user_login:0 @@ -1113,12 +1121,12 @@ msgstr "阶段" msgid "" "Allows you to communicate with Customer, process Customer query, and " "provide better help and support. This installs the module crm_helpdesk." -msgstr "" +msgstr "安装 crm_helpdesk 模块能够允许你与客户沟通,处理客户查询,并且提供更好的帮助与支持。" #. module: crm #: view:crm.lead:0 msgid "Delete" -msgstr "" +msgstr "删除" #. module: crm #: field:crm.lead,planned_revenue:0 @@ -1136,7 +1144,7 @@ msgstr "" #: code:addons/crm/crm_lead.py:867 #, python-format msgid "Opportunity has been lost." -msgstr "" +msgstr "商机已丢失。" #. module: crm #: selection:crm.lead.report,creation_month:0 @@ -1148,7 +1156,7 @@ msgstr "9月" #. module: crm #: help:crm.lead,email_from:0 msgid "Email address of the contact" -msgstr "" +msgstr "联系人邮箱地址" #. module: crm #: field:crm.segmentation,partner_id:0 @@ -1165,12 +1173,12 @@ msgstr "设置为这个阶段,会自动改变商机的成功可能性" #. module: crm #: view:crm.lead:0 msgid "oe_kanban_text_red" -msgstr "" +msgstr "oe_kanban_text_red" #. module: crm #: model:ir.ui.menu,name:crm.menu_crm_payment_mode_act msgid "Payment Modes" -msgstr "" +msgstr "付款方式" #. module: crm #: field:crm.lead.report,opening_date:0 @@ -1181,7 +1189,7 @@ msgstr "开启日期" #. module: crm #: field:crm.lead,company_currency:0 msgid "Currency" -msgstr "" +msgstr "币种" #. module: crm #: field:crm.case.channel,name:0 @@ -1280,12 +1288,12 @@ msgstr "日期" #: field:crm.lead,message_is_follower:0 #: field:crm.phonecall,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "是一个关注者" #. module: crm #: model:crm.case.section,name:crm.crm_case_section_4 msgid "Online Support" -msgstr "" +msgstr "在线支持" #. module: crm #: view:crm.lead.report:0 @@ -1336,7 +1344,7 @@ msgstr "细分说明" #. module: crm #: view:crm.lead:0 msgid "Lead Description" -msgstr "" +msgstr "销售线索描述" #. module: crm #: code:addons/crm/crm_lead.py:491 @@ -1347,7 +1355,7 @@ msgstr "合并商机" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor7 msgid "Consulting" -msgstr "" +msgstr "咨询" #. module: crm #: field:crm.case.section,code:0 @@ -1357,7 +1365,7 @@ msgstr "编码" #. module: crm #: view:sale.config.settings:0 msgid "Features" -msgstr "" +msgstr "特性" #. module: crm #: field:crm.case.section,child_ids:0 @@ -1372,7 +1380,7 @@ msgstr "待处理通话记录" #. module: crm #: field:crm.lead2opportunity.partner.mass,user_ids:0 msgid "Salesmen" -msgstr "" +msgstr "销售员" #. module: crm #: view:crm.lead:0 @@ -1397,12 +1405,12 @@ msgstr "取消" #. module: crm #: view:crm.lead:0 msgid "Opportunities Assigned to Me or My Team(s)" -msgstr "" +msgstr "指派给我或我的团队的商机" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor4 msgid "Information" -msgstr "" +msgstr "资料" #. module: crm #: view:crm.lead.report:0 @@ -1434,12 +1442,12 @@ msgstr "线索/商机" #: model:ir.actions.act_window,name:crm.action_merge_opportunities #: model:ir.actions.act_window,name:crm.merge_opportunity_act msgid "Merge leads/opportunities" -msgstr "" +msgstr "合并线索与商机" #. module: crm #: help:crm.case.stage,sequence:0 msgid "Used to order stages. Lower is better." -msgstr "" +msgstr "用于阶段的排序,数字越小越好。" #. module: crm #: model:ir.actions.act_window,name:crm.crm_phonecall_categ_action @@ -1454,7 +1462,7 @@ msgstr "线索/正在处理的商机" #. module: crm #: model:ir.model,name:crm.model_res_users msgid "Users" -msgstr "" +msgstr "用户" #. module: crm #: constraint:crm.case.section:0 @@ -1499,7 +1507,7 @@ msgstr "名称" #. module: crm #: view:crm.lead.report:0 msgid "Leads/Opportunities that are assigned to me" -msgstr "" +msgstr "指派给我的线索和商机" #. module: crm #: view:crm.lead.report:0 @@ -1511,7 +1519,7 @@ msgstr "我的业务" #: help:crm.lead,message_ids:0 #: help:crm.phonecall,message_ids:0 msgid "Messages and communication history" -msgstr "" +msgstr "信息和通信历史记录" #. module: crm #: view:crm.lead:0 @@ -1541,17 +1549,17 @@ msgstr "把潜在客户转成业务伙伴" #: code:addons/crm/crm_lead.py:871 #, python-format msgid "Opportunity has been won." -msgstr "" +msgstr "已赢得商机。" #. module: crm #: view:crm.phonecall:0 msgid "Phone Calls that are assigned to me or to my team(s)" -msgstr "" +msgstr "指派给我或我的团队的电话沟通" #. module: crm #: model:ir.model,name:crm.model_crm_payment_mode msgid "CRM Payment Mode" -msgstr "" +msgstr "CRM 付款模式" #. module: crm #: view:crm.lead.report:0 @@ -1574,7 +1582,7 @@ msgstr "分组于" #. module: crm #: view:crm.merge.opportunity:0 msgid "Merge Leads/Opportunities" -msgstr "" +msgstr "合并线索和商机" #. module: crm #: field:crm.case.section,parent_id:0 @@ -1585,7 +1593,7 @@ msgstr "父团队" #: selection:crm.lead2opportunity.partner,action:0 #: selection:crm.lead2opportunity.partner.mass,action:0 msgid "Do not link to a customer" -msgstr "" +msgstr "不要链接到某个客户" #. module: crm #: field:crm.lead,date_action:0 @@ -1608,7 +1616,7 @@ msgstr "" #. module: crm #: view:crm.lead2opportunity.partner.mass:0 msgid "Assign opportunities to" -msgstr "" +msgstr "指派商机给" #. module: crm #: field:crm.lead,zip:0 @@ -1634,7 +1642,7 @@ msgstr "" #. module: crm #: field:sale.config.settings,module_crm_claim:0 msgid "Manage Customer Claims" -msgstr "" +msgstr "管理客户请求" #. module: crm #: model:ir.actions.act_window,help:crm.action_report_crm_lead @@ -1647,7 +1655,7 @@ msgstr "" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor3 msgid "Services" -msgstr "" +msgstr "服务" #. module: crm #: selection:crm.lead,priority:0 @@ -1692,7 +1700,7 @@ msgstr "回复到" #. module: crm #: view:crm.lead:0 msgid "Display" -msgstr "" +msgstr "显示" #. module: crm #: view:board.board:0 @@ -1707,7 +1715,7 @@ msgstr "潜在客户转换为业务伙伴" #. module: crm #: model:ir.actions.server,name:crm.actions_server_crm_lead_unread msgid "CRM Lead: Mark unread" -msgstr "" +msgstr "CRM 线索:标记为未读" #. module: crm #: view:crm.case.channel:0 @@ -1733,12 +1741,12 @@ msgstr "额外信息" #. module: crm #: view:crm.lead:0 msgid "Fund Raising" -msgstr "" +msgstr "集资" #. module: crm #: view:crm.lead:0 msgid "Edit..." -msgstr "" +msgstr "编辑..." #. module: crm #: model:crm.case.resource.type,name:crm.type_lead5 @@ -1769,14 +1777,14 @@ msgstr "线索转换为业务伙伴或商机" #. module: crm #: help:crm.lead,partner_id:0 msgid "Linked partner (optional). Usually created when converting the lead." -msgstr "" +msgstr "关联业务伙伴(可选), 通常用于在线索转换时自动创建业务伙伴." #. module: crm #: field:crm.lead,payment_mode:0 #: view:crm.payment.mode:0 #: model:ir.actions.act_window,name:crm.action_crm_payment_mode msgid "Payment Mode" -msgstr "" +msgstr "付款方式" #. module: crm #: model:ir.model,name:crm.model_crm_lead2opportunity_partner_mass @@ -1786,13 +1794,13 @@ msgstr "批量转换线索为商机业务伙伴" #. module: crm #: view:sale.config.settings:0 msgid "On Mail Server" -msgstr "" +msgstr "在邮件服务器" #. module: crm #: model:ir.actions.act_window,name:crm.open_board_statistical_dash #: model:ir.ui.menu,name:crm.menu_board_statistics_dash msgid "CRM" -msgstr "" +msgstr "CRM" #. module: crm #: model:ir.actions.act_window,name:crm.crm_segmentation_tree-act @@ -1813,7 +1821,7 @@ msgstr "电话销售" #. module: crm #: view:crm.lead:0 msgid "Leads Assigned to Me or My Team(s)" -msgstr "" +msgstr "指派给我或我的团队的线索" #. module: crm #: model:ir.model,name:crm.model_crm_segmentation_line @@ -1862,7 +1870,7 @@ msgstr "线索/客户" #. module: crm #: model:crm.case.section,name:crm.crm_case_section_2 msgid "Support Department" -msgstr "" +msgstr "支持部门" #. module: crm #: view:crm.lead.report:0 @@ -1902,7 +1910,7 @@ msgstr "线索/新建的商机" #: code:addons/crm/crm_lead.py:883 #, python-format msgid "%s partner is now set to %s." -msgstr "" +msgstr "业务伙伴%s已设置为%s." #. module: crm #: selection:crm.phonecall,state:0 @@ -1939,13 +1947,13 @@ msgstr "线索" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor5 msgid "Design" -msgstr "" +msgstr "设计" #. module: crm #: selection:crm.lead2opportunity.partner,name:0 #: selection:crm.lead2opportunity.partner.mass,name:0 msgid "Merge with existing opportunities" -msgstr "" +msgstr "与已存在的商机合并" #. module: crm #: model:ir.actions.act_window,help:crm.crm_case_category_act_oppor11 @@ -1979,7 +1987,7 @@ msgstr "用户电子邮件" msgid "" "The name of the future partner company that will be created while converting " "the lead into opportunity" -msgstr "" +msgstr "在销售线索转化为商机时对应创建业务伙伴的公司名称." #. module: crm #: field:crm.opportunity2phonecall,note:0 @@ -2013,7 +2021,7 @@ msgstr "打开商机" #. module: crm #: model:crm.case.resource.type,name:crm.type_lead2 msgid "Email Campaign - Services" -msgstr "" +msgstr "邮件营销 - 服务" #. module: crm #: selection:crm.case.stage,state:0 @@ -2100,13 +2108,13 @@ msgstr "强制的表达式1" #: selection:crm.lead2partner,action:0 #: selection:crm.phonecall2partner,action:0 msgid "Create a new customer" -msgstr "" +msgstr "创建新客户" #. module: crm #: field:crm.lead2opportunity.partner,action:0 #: field:crm.lead2opportunity.partner.mass,action:0 msgid "Related Customer" -msgstr "" +msgstr "相关客户" #. module: crm #: field:crm.lead.report,deadline_day:0 @@ -2116,7 +2124,7 @@ msgstr "预期结束日期" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor2 msgid "Software" -msgstr "" +msgstr "软件" #. module: crm #: field:crm.case.section,change_responsible:0 @@ -2154,12 +2162,12 @@ msgstr "城市" #. module: crm #: selection:crm.case.stage,type:0 msgid "Both" -msgstr "" +msgstr "全部" #. module: crm #: view:crm.phonecall:0 msgid "Call Done" -msgstr "" +msgstr "呼叫完成" #. module: crm #: view:crm.phonecall:0 @@ -2170,23 +2178,23 @@ msgstr "负责人" #. module: crm #: model:ir.actions.server,name:crm.action_email_reminder_customer_lead msgid "Reminder to Customer" -msgstr "" +msgstr "提醒客户" #. module: crm #: model:crm.case.section,name:crm.crm_case_section_3 msgid "Direct Marketing" -msgstr "" +msgstr "直销" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor1 msgid "Product" -msgstr "" +msgstr "产品" #. module: crm #: code:addons/crm/crm_phonecall.py:284 #, python-format msgid "Phonecall has been created and opened." -msgstr "" +msgstr "电话沟通已创建并打开。" #. module: crm #: field:base.action.rule,trg_max_history:0 @@ -2196,12 +2204,12 @@ msgstr "最大的沟通日志" #. module: crm #: view:crm.lead2opportunity.partner.mass:0 msgid "Conversion Options" -msgstr "" +msgstr "转换选项" #. module: crm #: view:crm.lead:0 msgid "Address" -msgstr "" +msgstr "地址" #. module: crm #: help:crm.case.section,alias_id:0 @@ -2266,7 +2274,7 @@ msgstr "继续处理" #: model:ir.actions.act_window,name:crm.action_crm_lead2opportunity_partner #: model:ir.actions.act_window,name:crm.phonecall2opportunity_act msgid "Convert to opportunity" -msgstr "" +msgstr "转换为商机" #. module: crm #: field:crm.opportunity2phonecall,user_id:0 @@ -2323,12 +2331,12 @@ msgstr "销售团队属于那个业务" #. module: crm #: model:crm.case.resource.type,name:crm.type_lead6 msgid "Banner Ads" -msgstr "" +msgstr "横幅广告" #. module: crm #: field:crm.merge.opportunity,opportunity_ids:0 msgid "Leads/Opportunities" -msgstr "" +msgstr "线索/商机" #. module: crm #: field:crm.lead,fax:0 @@ -2348,7 +2356,7 @@ msgstr "公司" #. module: crm #: view:base.action.rule:0 msgid "Conditions on Communication History" -msgstr "" +msgstr "沟通记录的条件" #. module: crm #: view:crm.lead:0 @@ -2363,17 +2371,17 @@ msgstr "对象名" #. module: crm #: view:crm.phonecall:0 msgid "Phone Calls Assigned to Me or My Team(s)" -msgstr "" +msgstr "指派给我和我的团队的电话沟通" #. module: crm #: view:crm.lead:0 msgid "Reset" -msgstr "" +msgstr "重置" #. module: crm #: view:sale.config.settings:0 msgid "After-Sale Services" -msgstr "" +msgstr "售后服务" #. module: crm #: model:ir.actions.server,message:crm.action_email_reminder_customer_lead @@ -2389,6 +2397,18 @@ msgid "" "Thanks,\n" " " msgstr "" +"[[object.partner_id and object.partner_id.name or '']],您好:\n" +"\n" +"您下面的销售线索已经有 5 天没有打开了。 \n" +"\n" +"线索:[[object.id ]]\n" +"描述:\n" +"\n" +" [[object.description]]\n" +"\n" +"\n" +"谢谢!\n" +" " #. module: crm #: view:crm.phonecall2opportunity:0 @@ -2439,7 +2459,7 @@ msgstr "在这报表中,你能分析你的销售团队在电话访问上的业 #. module: crm #: field:crm.case.stage,state:0 msgid "Related Status" -msgstr "" +msgstr "相关状态" #. module: crm #: field:crm.phonecall,name:0 @@ -2460,7 +2480,7 @@ msgstr "计划/电话访问的记录" #. module: crm #: view:crm.merge.opportunity:0 msgid "Select Leads/Opportunities" -msgstr "" +msgstr "选择商机/线索" #. module: crm #: selection:crm.phonecall,state:0 @@ -2480,7 +2500,7 @@ msgstr "确定" #. module: crm #: view:crm.lead:0 msgid "Unread messages" -msgstr "" +msgstr "未读消息" #. module: crm #: field:crm.phonecall.report,section_id:0 @@ -2497,7 +2517,7 @@ msgstr "可选表达式" #: field:crm.lead,message_follower_ids:0 #: field:crm.phonecall,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "关注者" #. module: crm #: field:sale.config.settings,fetchmail_lead:0 @@ -2551,7 +2571,7 @@ msgstr "从线索创建商机" #. module: crm #: model:crm.case.resource.type,name:crm.type_lead3 msgid "Email Campaign - Products" -msgstr "" +msgstr "电邮广告-产品" #. module: crm #: field:base.action.rule,act_categ_id:0 @@ -2584,7 +2604,7 @@ msgstr "第一次与新的潜在客户接触" #. module: crm #: view:res.partner:0 msgid "Calls" -msgstr "" +msgstr "通话" #. module: crm #: field:crm.case.stage,on_change:0 @@ -2594,7 +2614,7 @@ msgstr "自动修改概率" #. module: crm #: view:crm.phonecall.report:0 msgid "My Phone Calls" -msgstr "" +msgstr "我的电话沟通" #. module: crm #: model:crm.case.stage,name:crm.stage_lead3 @@ -2678,7 +2698,7 @@ msgstr "预期结束年数" #. module: crm #: model:ir.actions.client,name:crm.action_client_crm_menu msgid "Open Sale Menu" -msgstr "" +msgstr "打开销售菜单" #. module: crm #: field:crm.lead,date_open:0 @@ -2706,7 +2726,7 @@ msgstr "计划成本" #. module: crm #: help:crm.lead,date_deadline:0 msgid "Estimate of the date on which the opportunity will be won." -msgstr "" +msgstr "预计商机落单日期." #. module: crm #: help:crm.lead,email_cc:0 @@ -2780,7 +2800,7 @@ msgstr "街道 2" #. module: crm #: field:sale.config.settings,module_crm_helpdesk:0 msgid "Manage Helpdesk and Support" -msgstr "" +msgstr "管理帮助平台与客户支持" #. module: crm #: view:crm.phonecall2partner:0 @@ -2813,7 +2833,7 @@ msgstr "11月" #: field:crm.phonecall,message_comment_ids:0 #: help:crm.phonecall,message_comment_ids:0 msgid "Comments and emails" -msgstr "" +msgstr "评论和电子邮件" #. module: crm #: model:crm.case.stage,name:crm.stage_lead5 @@ -2861,7 +2881,7 @@ msgstr "计划收入" #. module: crm #: model:ir.actions.server,name:crm.actions_server_crm_lead_read msgid "CRM Lead: Mark read" -msgstr "" +msgstr "CRM 线索:标记为已读" #. module: crm #: model:ir.model,name:crm.model_crm_phonecall2phonecall @@ -2903,7 +2923,7 @@ msgstr "动作规则" #. module: crm #: help:sale.config.settings,group_fund_raising:0 msgid "Allows you to trace and manage your activities for fund raising." -msgstr "" +msgstr "允许跟踪及管理您的集资活动。" #. module: crm #: field:crm.meeting,phonecall_id:0 @@ -2996,7 +3016,7 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Internal Notes" -msgstr "" +msgstr "内部备注" #. module: crm #: view:crm.lead:0 @@ -3066,7 +3086,7 @@ msgstr "丢失" #: code:addons/crm/wizard/crm_lead_to_opportunity.py:100 #, python-format msgid "Closed/Cancelled leads cannot be converted into opportunities." -msgstr "" +msgstr "已关闭或已取消的销售线索不能被转换为商机。" #. module: crm #: field:crm.lead,country_id:0 diff --git a/addons/crm_claim/i18n/de.po b/addons/crm_claim/i18n/de.po index 405183727ff..1960125873d 100644 --- a/addons/crm_claim/i18n/de.po +++ b/addons/crm_claim/i18n/de.po @@ -7,14 +7,15 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:03+0000\n" -"PO-Revision-Date: 2012-12-16 16:13+0000\n" -"Last-Translator: Felix Schubert \n" +"PO-Revision-Date: 2012-12-19 20:17+0000\n" +"Last-Translator: Thorsten Vocks (OpenBig.org) \n" "Language-Team: German \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-17 04:47+0000\n" -"X-Generator: Launchpad (build 16372)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: crm_claim #: help:crm.claim.stage,fold:0 @@ -22,25 +23,24 @@ msgid "" "This stage is not visible, for example in status bar or kanban view, when " "there are no records in that stage to display." msgstr "" -"Die Stufe wird in bestimmten Ansichten verborgen, z.B. in der " -"Fortschrittsanzeige oder den Kanban Karten, wenn es keine Datensätze in " -"dieser Stufe gibt." +"Die Stufe ist unsichtbar, z.B. in der Fortschrittsanzeige oder Kanban " +"Ansicht, wenn es keine Datensätze in dieser Stufe gibt." #. module: crm_claim #: field:crm.claim.report,nbr:0 msgid "# of Cases" -msgstr "# Vorgänge" +msgstr "Anzahl Vorgänge" #. module: crm_claim #: view:crm.claim:0 #: view:crm.claim.report:0 msgid "Group By..." -msgstr "Gruppiere..." +msgstr "Gruppierung ..." #. module: crm_claim #: view:crm.claim:0 msgid "Responsibilities" -msgstr "Zuständigkeiten" +msgstr "Verantwortlichkeit" #. module: crm_claim #: help:sale.config.settings,fetchmail_claim:0 @@ -69,12 +69,12 @@ msgstr "Dauer für Beendigung" #. module: crm_claim #: field:crm.claim,message_unread:0 msgid "Unread Messages" -msgstr "Ungelesene Mitteilungen" +msgstr "Ungelesene Nachrichten" #. module: crm_claim #: field:crm.claim,resolution:0 msgid "Resolution" -msgstr "Lösung" +msgstr "Behebung" #. module: crm_claim #: field:crm.claim,company_id:0 @@ -96,23 +96,20 @@ msgid "" " " msgstr "" "

\n" -" Click to create a claim category.\n" +" Klicken Sie zur Erstellung einer Reklamationen Kategorie.\n" "

\n" -"                 Klicken Sie, um neue Kategorien für Ihre Reklamationen zu " -"erstellen.\n" -"               \n" " Durch Kategorien haben Sie die Möglichkeit Ihre " "Reklamationen zu koordinieren.\n" " Beispiele für Reklamationen können folgende sein : " "Austausch, Reparatur, \n" -"                 Kulanzvorfall u.s.w.\n" +" Kulanzvorfall u.s.w.\n" "

\n" " " #. module: crm_claim #: view:crm.claim.report:0 msgid "#Claim" -msgstr "# Reklamation" +msgstr "Anzahl Reklamationen" #. module: crm_claim #: field:crm.claim.stage,name:0 @@ -159,7 +156,7 @@ msgstr "Nachrichten" #. module: crm_claim #: model:crm.case.categ,name:crm_claim.categ_claim1 msgid "Factual Claims" -msgstr "Reklamation e. Schadens" +msgstr "Schadensprüfung" #. module: crm_claim #: selection:crm.claim,state:0 @@ -176,7 +173,7 @@ msgstr "Schadensprävention" #. module: crm_claim #: help:crm.claim,message_unread:0 msgid "If checked new messages require your attention." -msgstr "" +msgstr "Wenn aktiviert, erfordern neue Nachrichten Ihr Handeln" #. module: crm_claim #: field:crm.claim.report,date_closed:0 @@ -186,7 +183,7 @@ msgstr "Datum Beendigung" #. module: crm_claim #: view:res.partner:0 msgid "False" -msgstr "trifft nicht zu" +msgstr "Ungültig" #. module: crm_claim #: field:crm.claim,ref:0 @@ -201,7 +198,7 @@ msgstr "Datum des Antrags" #. module: crm_claim #: view:crm.claim.report:0 msgid "# Mails" -msgstr "# E-Mails" +msgstr "E-Mail Anzahl" #. module: crm_claim #: help:crm.claim,message_summary:0 @@ -209,9 +206,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 "" -"Beinhaltet die Chatter Zusammenfassung (Anzahl der Nachrichten, ...). Diese " -"Zusammenfassung ist im HTML-Format, um in Kanban Karten Ansichten eingefügt " -"zu werden." +"Hier finden Sie die Nachrichtenübersicht (Anzahl Nachrichten etc., ...) im " +"html Format, um Sie später in einer Kanban Ansicht einfügen zu können." #. module: crm_claim #: view:crm.claim:0 @@ -294,7 +290,7 @@ msgstr "Sektionen" #. module: crm_claim #: field:crm.claim,email_from:0 msgid "Email" -msgstr "E-Mail:" +msgstr "E-Mail" #. module: crm_claim #: selection:crm.claim,priority:0 @@ -310,17 +306,17 @@ msgstr "Nächste Aktion" #. module: crm_claim #: view:crm.claim.report:0 msgid "My Sales Team(s)" -msgstr "Mein(e) Verkaufsteam(s)" +msgstr "Eigene Teams" #. module: crm_claim #: field:crm.claim,create_date:0 msgid "Creation Date" -msgstr "Erstellung am" +msgstr "Datum Erstellung" #. module: crm_claim #: field:crm.claim,name:0 msgid "Claim Subject" -msgstr "Reklamationsursache" +msgstr "Reklamation Begründung" #. module: crm_claim #: model:crm.claim.stage,name:crm_claim.stage_claim3 @@ -411,7 +407,7 @@ msgstr "Statistik Reklamationen" #. module: crm_claim #: help:crm.claim.report,delay_close:0 msgid "Number of Days to close the case" -msgstr "Anzahl Tage für Vorgangsende" +msgstr "Tage bis Beendigung" #. module: crm_claim #: model:ir.model,name:crm_claim.model_crm_claim_report @@ -426,7 +422,7 @@ msgstr "Einstellungen" #. module: crm_claim #: model:crm.case.resource.type,name:crm_claim.type_claim1 msgid "Corrective" -msgstr "Verbesserung" +msgstr "Behebung" #. module: crm_claim #: selection:crm.claim.report,month:0 @@ -449,12 +445,12 @@ msgstr "Monat" #: view:crm.claim.report:0 #: field:crm.claim.report,type_action:0 msgid "Action Type" -msgstr "Aktionstyp" +msgstr "Aktion Typ" #. module: crm_claim #: field:crm.claim,write_date:0 msgid "Update Date" -msgstr "Update Datum" +msgstr "Aktualisierungsdatum" #. module: crm_claim #: view:crm.claim.report:0 @@ -467,8 +463,8 @@ msgid "" "If you check this field, this stage will be proposed by default on each " "sales team. It will not assign this stage to existing teams." msgstr "" -"Durch Aktivierung wird diese Stufe automatisch dem Verkaufsteam zugeordnet. " -"Dieses wird nicht unmittelbar für die bereits bestehenden Teams übernommen." +"Durch Aktivierung wird diese Stufe automatisch dem Team zugeordnet. Dieses " +"wird nicht unmittelbar für die bereits existierenden Teams übernommen." #. module: crm_claim #: field:crm.claim,categ_id:0 @@ -480,12 +476,12 @@ msgstr "Kategorie" #. module: crm_claim #: model:crm.case.categ,name:crm_claim.categ_claim2 msgid "Value Claims" -msgstr "Wert der Reklamation" +msgstr "Reklamation wert" #. module: crm_claim #: view:crm.claim:0 msgid "Responsible User" -msgstr "Verantw. Benutzer" +msgstr "Verantwortl. Benutzer" #. module: crm_claim #: field:crm.claim,email_cc:0 @@ -579,17 +575,17 @@ msgstr "Juni" #. module: crm_claim #: field:crm.claim,id:0 msgid "ID" -msgstr "Kurz" +msgstr "Kürzel" #. module: crm_claim #: field:crm.claim,partner_phone:0 msgid "Phone" -msgstr "Tel." +msgstr "Telefon" #. module: crm_claim #: field:crm.claim,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "Ist ein Follower" #. module: crm_claim #: field:crm.claim.report,user_id:0 @@ -634,6 +630,11 @@ msgid "" "the case needs to be reviewed then the status is set " "to 'Pending'." msgstr "" +"Der Status wird auf 'Entwurf' geändert, wenn der Vorfall gespeichert wurde. " +"Durch die Vorgangsbearbeitung ändert sich der Status auf 'In Bearbeitung'. " +"Durch Abschluss wird der Status auf 'Erledigt' geändert. Wenn der Vorfall " +"eine weitere Bearbeitung zu einem späteren Zeitpunkt erfordert, ändert man " +"den Status am Besten auf 'Wiedervorlage'." #. module: crm_claim #: field:crm.claim,active:0 @@ -659,7 +660,7 @@ msgstr "Kommentare und E-Mails" #. module: crm_claim #: view:crm.claim:0 msgid "Closure" -msgstr "Abschluss" +msgstr "Beendigung" #. module: crm_claim #: help:crm.claim,section_id:0 @@ -667,8 +668,8 @@ msgid "" "Responsible sales team. Define Responsible user and Email account for mail " "gateway." msgstr "" -"Verantwortliches Verkaufsteam. Definieren Sie den Teamleiter und das E-Mail " -"Konto, dessen Posteingang überwacht wird." +"Verantwortliches Team. Definieren Sie den Teamleiter und das E-Mail Konto, " +"dessen Posteingang überwacht wird." #. module: crm_claim #: selection:crm.claim.report,month:0 @@ -788,7 +789,7 @@ msgstr "Suche" #. module: crm_claim #: view:crm.claim:0 msgid "Unassigned Claims" -msgstr "Nicht zugeordnete Anträge" +msgstr "Nicht zugeordnete Reklamationen" #. module: crm_claim #: code:addons/crm_claim/crm_claim.py:247 @@ -898,12 +899,12 @@ msgstr "April" #. module: crm_claim #: view:crm.claim.report:0 msgid "My Case(s)" -msgstr "Meine Fälle" +msgstr "Eigene Vorfälle" #. module: crm_claim #: model:crm.claim.stage,name:crm_claim.stage_claim2 msgid "Settled" -msgstr "" +msgstr "Bestätigt" #. module: crm_claim #: help:crm.claim,message_ids:0 @@ -923,7 +924,7 @@ msgstr "Reihenfolge" #. module: crm_claim #: view:crm.claim:0 msgid "Actions" -msgstr "Lösungsvorgänge" +msgstr "Aktionen" #. module: crm_claim #: selection:crm.claim,priority:0 diff --git a/addons/crm_claim/i18n/fr.po b/addons/crm_claim/i18n/fr.po index c5a9dd4c6e2..cdd0e3741cd 100644 --- a/addons/crm_claim/i18n/fr.po +++ b/addons/crm_claim/i18n/fr.po @@ -7,14 +7,15 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:03+0000\n" -"PO-Revision-Date: 2012-12-04 10:30+0000\n" -"Last-Translator: WANTELLET Sylvain \n" +"PO-Revision-Date: 2012-12-19 15:49+0000\n" +"Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) " +"\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-05 05:20+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: crm_claim #: help:crm.claim.stage,fold:0 @@ -394,7 +395,7 @@ msgstr "Rapport des réclamations (CRM)" #. module: crm_claim #: view:sale.config.settings:0 msgid "Configure" -msgstr "" +msgstr "Configurer" #. module: crm_claim #: model:crm.case.resource.type,name:crm_claim.type_claim1 @@ -559,7 +560,7 @@ msgstr "Téléphone" #. module: crm_claim #: field:crm.claim,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "Est un abonné" #. module: crm_claim #: field:crm.claim.report,user_id:0 diff --git a/addons/crm_profiling/i18n/fr.po b/addons/crm_profiling/i18n/fr.po index 0539e32de58..2da6e3dc7bb 100644 --- a/addons/crm_profiling/i18n/fr.po +++ b/addons/crm_profiling/i18n/fr.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:03+0000\n" -"PO-Revision-Date: 2012-05-10 17:46+0000\n" +"PO-Revision-Date: 2012-12-19 15:50+0000\n" "Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) " "\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-04 05:40+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: crm_profiling #: view:crm_profiling.questionnaire:0 @@ -152,7 +152,7 @@ msgstr "Utiliser les Règles d'Analyse" #. module: crm_profiling #: constraint:crm.segmentation:0 msgid "Error ! You cannot create recursive profiles." -msgstr "" +msgstr "Erreur! Vous ne pouvez pas créer de profils récursifs." #. module: crm_profiling #: field:crm.segmentation,answer_yes:0 @@ -201,7 +201,7 @@ msgstr "Sauvegarder les Données" #. module: crm_profiling #: view:open.questionnaire:0 msgid "or" -msgstr "" +msgstr "ou" #~ msgid "Error ! You can not create recursive profiles." #~ msgstr "Erreur ! Vous ne pouvez pas créer des profils récursifs." diff --git a/addons/crm_todo/i18n/fr.po b/addons/crm_todo/i18n/fr.po index fba42c36cc4..5737d299ad1 100644 --- a/addons/crm_todo/i18n/fr.po +++ b/addons/crm_todo/i18n/fr.po @@ -8,14 +8,14 @@ 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-02-22 09:08+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2012-12-19 15:50+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: 2012-12-04 05:54+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: crm_todo #: model:ir.model,name:crm_todo.model_project_task @@ -30,7 +30,7 @@ msgstr "Zone de temps" #. module: crm_todo #: view:crm.lead:0 msgid "Lead" -msgstr "" +msgstr "Piste" #. module: crm_todo #: view:crm.lead:0 @@ -67,7 +67,7 @@ msgstr "Annuler" #. module: crm_todo #: model:ir.model,name:crm_todo.model_crm_lead msgid "Lead/Opportunity" -msgstr "" +msgstr "Piste/opportunité" #. module: crm_todo #: field:project.task,lead_id:0 diff --git a/addons/document/i18n/fr.po b/addons/document/i18n/fr.po index d051e4f3d0c..0b9d188371b 100644 --- a/addons/document/i18n/fr.po +++ b/addons/document/i18n/fr.po @@ -7,13 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-11-24 02:52+0000\n" -"PO-Revision-Date: 2012-12-18 18:20+0000\n" -"Last-Translator: Nicolas JEUDY \n" +"PO-Revision-Date: 2012-12-19 15:51+0000\n" +"Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) " +"\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-19 05:17+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: document @@ -557,7 +558,7 @@ msgstr "Inclure le Nom de l'Enregistrement" #. module: document #: field:ir.actions.report.xml,model_id:0 msgid "Model Id" -msgstr "Id du Modèle" +msgstr "Identifiant du modèle" #. module: document #: field:document.storage,online:0 @@ -877,7 +878,7 @@ msgstr "# de Fichiers" #. module: document #: view:document.storage:0 msgid "Search Document Storage" -msgstr "Chercher le Stockage du Fichier" +msgstr "Chercher dans le stockage de fichiers" #. module: document #: view:document.directory:0 diff --git a/addons/document_page/i18n/fr.po b/addons/document_page/i18n/fr.po index 2529fab97c0..6f2f9999059 100644 --- a/addons/document_page/i18n/fr.po +++ b/addons/document_page/i18n/fr.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-19 05:17+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: document_page diff --git a/addons/edi/i18n/fr.po b/addons/edi/i18n/fr.po index a57a99c0cf8..e641fd8fa46 100644 --- a/addons/edi/i18n/fr.po +++ b/addons/edi/i18n/fr.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: 2012-12-19 05:17+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: edi diff --git a/addons/event/i18n/fr.po b/addons/event/i18n/fr.po index 8a1888a5ae1..b1eed54571d 100644 --- a/addons/event/i18n/fr.po +++ b/addons/event/i18n/fr.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:03+0000\n" -"PO-Revision-Date: 2011-01-18 16:47+0000\n" +"PO-Revision-Date: 2012-12-19 15:51+0000\n" "Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) " "\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-04 05:13+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:43+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: event #: view:event.event:0 @@ -703,7 +703,7 @@ msgstr "Évènements" #: view:event.registration:0 #: field:event.registration,state:0 msgid "Status" -msgstr "" +msgstr "Statut" #. module: event #: field:event.event,city:0 diff --git a/addons/event/i18n/it.po b/addons/event/i18n/it.po index 3f2461a4f60..bda691e39db 100644 --- a/addons/event/i18n/it.po +++ b/addons/event/i18n/it.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-03 16:03+0000\n" -"PO-Revision-Date: 2011-01-13 15:18+0000\n" -"Last-Translator: Nicola Riolini - Micronaet \n" +"PO-Revision-Date: 2012-12-19 20:58+0000\n" +"Last-Translator: Sergio Corato \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-04 05:13+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:43+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: event #: view:event.event:0 @@ -414,7 +414,7 @@ msgstr "" #. module: event #: field:event.registration,create_date:0 msgid "Creation Date" -msgstr "Data creazione" +msgstr "Data di Creazione" #. module: event #: view:report.event.registration:0 @@ -1138,7 +1138,7 @@ msgstr "" #: view:event.event:0 #: model:ir.actions.act_window,name:event.act_register_event_partner msgid "Subscribe" -msgstr "" +msgstr "Iscriviti" #. module: event #: view:event.event:0 diff --git a/addons/event_sale/i18n/fr.po b/addons/event_sale/i18n/fr.po index 6ef117623a5..207d1c86c03 100644 --- a/addons/event_sale/i18n/fr.po +++ b/addons/event_sale/i18n/fr.po @@ -8,14 +8,15 @@ 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-11-29 15:35+0000\n" -"Last-Translator: Numérigraphe \n" +"PO-Revision-Date: 2012-12-19 15:52+0000\n" +"Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) " +"\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: 2012-12-04 05:54+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: event_sale #: model:ir.model,name:event_sale.model_product_product @@ -28,6 +29,8 @@ msgid "" "Determine if a product needs to create automatically an event registration " "at the confirmation of a sale order line." msgstr "" +"Détermine si un article doit créer automatiquement un enregistrement " +"d’événement à la confirmation de la ligne de commande." #. module: event_sale #: help:sale.order.line,event_id:0 diff --git a/addons/fetchmail/i18n/fr.po b/addons/fetchmail/i18n/fr.po index 0547f785f75..dcb874cd7fd 100644 --- a/addons/fetchmail/i18n/fr.po +++ b/addons/fetchmail/i18n/fr.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-11-24 02:52+0000\n" -"PO-Revision-Date: 2012-12-18 23:07+0000\n" +"PO-Revision-Date: 2012-12-19 15:52+0000\n" "Last-Translator: WANTELLET Sylvain \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-19 05:17+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: fetchmail @@ -102,7 +102,7 @@ msgstr "Serveur local" #. module: fetchmail #: field:fetchmail.server,state:0 msgid "Status" -msgstr "" +msgstr "Statut" #. module: fetchmail #: model:ir.model,name:fetchmail.model_fetchmail_server diff --git a/addons/fleet/i18n/es.po b/addons/fleet/i18n/es.po index a0a207f00f0..1fffc9feffc 100644 --- a/addons/fleet/i18n/es.po +++ b/addons/fleet/i18n/es.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-24 02:52+0000\n" -"PO-Revision-Date: 2012-12-11 00:12+0000\n" -"Last-Translator: Ana Juaristi Olalde \n" +"PO-Revision-Date: 2012-12-20 01:27+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: 2012-12-12 04:41+0000\n" -"X-Generator: Launchpad (build 16361)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: fleet #: selection:fleet.vehicle,fuel_type:0 @@ -30,12 +30,14 @@ msgstr "Compactar" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_1 msgid "A/C Compressor Replacement" -msgstr "" +msgstr "Repuesto del compresor de A/C" #. module: fleet #: help:fleet.vehicle,vin_sn:0 msgid "Unique number written on the vehicle motor (VIN/SN number)" msgstr "" +"Nº único escrito en el motor del vehículo (nº de identificación del vehículo " +"o nº de serie)" #. module: fleet #: selection:fleet.service.type,category:0 @@ -58,28 +60,28 @@ msgstr "Desconocido" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_20 msgid "Engine/Drive Belt(s) Replacement" -msgstr "" +msgstr "Repuesto de la(s) correa(s) de transmisión" #. module: fleet #: view:fleet.vehicle.cost:0 msgid "Vehicle costs" -msgstr "" +msgstr "Costes del vehículo" #. module: fleet #: selection:fleet.vehicle,fuel_type:0 msgid "Diesel" -msgstr "" +msgstr "Diesel" #. module: fleet #: code:addons/fleet/fleet.py:421 #, python-format msgid "License Plate: from '%s' to '%s'" -msgstr "" +msgstr "Matrícula: de '%s' a '%s'" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_38 msgid "Resurface Rotors" -msgstr "" +msgstr "Reflotar rotores" #. module: fleet #: view:fleet.vehicle.cost:0 @@ -89,12 +91,12 @@ msgstr "Agrupar por..." #. module: fleet #: model:fleet.service.type,name:fleet.type_service_32 msgid "Oil Pump Replacement" -msgstr "" +msgstr "Repuesto de la bomba de aceite" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_18 msgid "Engine Belt Inspection" -msgstr "" +msgstr "Inspección de las correas" #. module: fleet #: selection:fleet.vehicle.log.contract,cost_frequency:0 @@ -104,12 +106,12 @@ msgstr "No" #. module: fleet #: help:fleet.vehicle,power:0 msgid "Power in kW of the vehicle" -msgstr "" +msgstr "Potencia en kW del vehículo" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_2 msgid "Depreciation and Interests" -msgstr "" +msgstr "Depreciación e intereses" #. module: fleet #: field:fleet.vehicle.log.contract,insurer_id:0 @@ -121,7 +123,7 @@ msgstr "Proveedor" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_35 msgid "Power Steering Hose Replacement" -msgstr "" +msgstr "Repuesto de la manguera de la dirección asistida" #. module: fleet #: view:fleet.vehicle.log.contract:0 @@ -152,7 +154,7 @@ msgstr "Coste carburante" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_9 msgid "Battery Inspection" -msgstr "" +msgstr "Inspección de batería" #. module: fleet #: field:fleet.vehicle,company_id:0 @@ -167,38 +169,38 @@ msgstr "Fecha Factura" #. module: fleet #: view:fleet.vehicle.log.fuel:0 msgid "Refueling Details" -msgstr "" +msgstr "Detalles de reabastecimiento de combustible" #. module: fleet #: code:addons/fleet/fleet.py:655 #, python-format msgid "%s contract(s) need(s) to be renewed and/or closed!" -msgstr "" +msgstr "¡%s contrato(s) necesita(n) ser renovado(s) o cerrado(s)!" #. module: fleet #: view:fleet.vehicle.cost:0 msgid "Indicative Costs" -msgstr "" +msgstr "Costes indicativos" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_16 msgid "Charging System Diagnosis" -msgstr "" +msgstr "Diagnosis del sistema de carga" #. module: fleet #: help:fleet.vehicle,car_value:0 msgid "Value of the bought vehicle" -msgstr "" +msgstr "Valor del vehículo comprado" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_44 msgid "Tie Rod End Replacement" -msgstr "" +msgstr "Repuesto de la rótula" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_24 msgid "Head Gasket(s) Replacement" -msgstr "" +msgstr "Repuesto de la junta(s) de culata" #. module: fleet #: view:fleet.vehicle:0 @@ -211,7 +213,7 @@ msgstr "Servicios" #: help:fleet.vehicle.cost,odometer:0 #: help:fleet.vehicle.cost,odometer_id:0 msgid "Odometer measure of the vehicle at the moment of this log" -msgstr "" +msgstr "Medida del odómetro del vehículo en el momento de registro" #. module: fleet #: view:fleet.vehicle.log.contract:0 @@ -246,6 +248,7 @@ msgstr "Ambos" #: field:fleet.vehicle.log.services,cost_id:0 msgid "Automatically created field to link to parent fleet.vehicle.cost" msgstr "" +"Campo creado automáticamente para enlazar con el fleet.vehicle.cost padre" #. module: fleet #: view:fleet.vehicle.log.contract:0 @@ -255,17 +258,17 @@ msgstr "Finalizar contrato" #. module: fleet #: help:fleet.vehicle.cost,parent_id:0 msgid "Parent cost to this current cost" -msgstr "" +msgstr "Coste padre del coste actual" #. module: fleet #: help:fleet.vehicle.log.contract,cost_frequency:0 msgid "Frequency of the recuring cost" -msgstr "" +msgstr "Frecuencia del coste recurrente" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_1 msgid "Calculation Benefit In Kind" -msgstr "" +msgstr "Cálculo de las prestaciones en especie" #. module: fleet #: help:fleet.vehicle.log.contract,expiration_date:0 @@ -273,6 +276,8 @@ msgid "" "Date when the coverage of the contract expirates (by default, one year after " "begin date)" msgstr "" +"Fecha en la que la cobertura de los contratos expira (por defecto, un año " +"después de la fecha de inicio)" #. module: fleet #: view:fleet.vehicle.log.fuel:0 @@ -296,14 +301,14 @@ msgstr "Mensajes" #. module: fleet #: help:fleet.vehicle.cost,vehicle_id:0 msgid "Vehicle concerned by this log" -msgstr "" +msgstr "Vehículo afectado por este registro" #. module: fleet #: field:fleet.vehicle.log.contract,cost_amount:0 #: field:fleet.vehicle.log.fuel,cost_amount:0 #: field:fleet.vehicle.log.services,cost_amount:0 msgid "Amount" -msgstr "" +msgstr "Importe" #. module: fleet #: field:fleet.vehicle,message_unread:0 @@ -313,22 +318,22 @@ msgstr "Mensajes sin leer" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_6 msgid "Air Filter Replacement" -msgstr "" +msgstr "Repuesto del filtro de aire" #. module: fleet #: model:ir.model,name:fleet.model_fleet_vehicle_tag msgid "fleet.vehicle.tag" -msgstr "" +msgstr "Etiqueta de vehículo" #. module: fleet #: view:fleet.vehicle:0 msgid "show the services logs for this vehicle" -msgstr "" +msgstr "mostrar los registros de revisiones para este vehículo" #. module: fleet #: field:fleet.vehicle,contract_renewal_name:0 msgid "Name of contract to renew soon" -msgstr "" +msgstr "Nombre del contrato a renovar pronto" #. module: fleet #: model:fleet.vehicle.tag,name:fleet.vehicle_tag_senior @@ -338,7 +343,7 @@ msgstr "Senior" #. module: fleet #: help:fleet.vehicle.log.contract,state:0 msgid "Choose wheter the contract is still valid or not" -msgstr "" +msgstr "Escoja si el contrato es aún válido o no" #. module: fleet #: selection:fleet.vehicle,transmission:0 @@ -354,7 +359,7 @@ msgstr "Si se marca, los nuevos mensajes requieren su atención" #: code:addons/fleet/fleet.py:414 #, python-format msgid "Driver: from '%s' to '%s'" -msgstr "" +msgstr "Conductor: de '%s' a '%s'" #. module: fleet #: view:fleet.vehicle:0 @@ -364,12 +369,12 @@ msgstr "y" #. module: fleet #: field:fleet.vehicle.model.brand,image_medium:0 msgid "Medium-sized photo" -msgstr "" +msgstr "Foto de tamaño medio" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_34 msgid "Oxygen Sensor Replacement" -msgstr "" +msgstr "Repuesto del sensor de oxígeno" #. module: fleet #: view:fleet.vehicle.log.services:0 @@ -379,7 +384,7 @@ msgstr "Tipo de Servicio" #. module: fleet #: help:fleet.vehicle,transmission:0 msgid "Transmission Used by the vehicle" -msgstr "" +msgstr "Transmisión usada por el vehículo" #. module: fleet #: code:addons/fleet/fleet.py:726 @@ -387,37 +392,37 @@ msgstr "" #: model:ir.actions.act_window,name:fleet.act_renew_contract #, python-format msgid "Renew Contract" -msgstr "" +msgstr "Renovar contrato" #. module: fleet #: view:fleet.vehicle:0 msgid "show the odometer logs for this vehicle" -msgstr "" +msgstr "mostrar los registros de odómetro para este vehículo" #. module: fleet #: help:fleet.vehicle,odometer_unit:0 msgid "Unit of the odometer " -msgstr "" +msgstr "Unidad del odómetro " #. module: fleet #: view:fleet.vehicle.log.services:0 msgid "Services Costs Per Month" -msgstr "" +msgstr "Costes de las revisiones por mes" #. module: fleet #: view:fleet.vehicle.cost:0 msgid "Effective Costs" -msgstr "" +msgstr "Costes efectivos" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_8 msgid "Repair and maintenance" -msgstr "" +msgstr "Reparación y mantenimiento" #. module: fleet #: help:fleet.vehicle.log.contract,purchaser_id:0 msgid "Person to which the contract is signed for" -msgstr "" +msgstr "Persona para la que el contrato está firmado" #. module: fleet #: model:ir.actions.act_window,help:fleet.fleet_vehicle_log_contract_act @@ -435,11 +440,22 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para crear un nuevo contrato.\n" +"

\n" +"Gestione todos sus contratos (leasing, seguros, etc.) con sus servicios y " +"costes relacionados. OpenERP le avisará automáticamente cuando algún " +"contrato deba ser renovado.\n" +"

\n" +"Cada contrato (por ejemplo: leasing) puede incluir varios servicios " +"(reparación, seguro, mantenimiento periódico...).\n" +"

\n" +" " #. module: fleet #: model:ir.model,name:fleet.model_fleet_service_type msgid "Type of services available on a vehicle" -msgstr "" +msgstr "Tipo de servicios disponible en el vehículo" #. module: fleet #: model:ir.actions.act_window,name:fleet.fleet_vehicle_service_types_act @@ -450,19 +466,19 @@ msgstr "Tipo de servicios" #. module: fleet #: view:board.board:0 msgid "Contracts Costs" -msgstr "" +msgstr "Costes de los contratos" #. module: fleet #: model:ir.actions.act_window,name:fleet.fleet_vehicle_log_services_act #: model:ir.ui.menu,name:fleet.fleet_vehicle_log_services_menu msgid "Vehicles Services Logs" -msgstr "" +msgstr "Registros de los servicios de los vehículos" #. module: fleet #: model:ir.actions.act_window,name:fleet.fleet_vehicle_log_fuel_act #: model:ir.ui.menu,name:fleet.fleet_vehicle_log_fuel_menu msgid "Vehicles Fuel Logs" -msgstr "" +msgstr "Registros de combustible de los vehículos" #. module: fleet #: view:fleet.vehicle.model.brand:0 @@ -470,11 +486,13 @@ msgid "" "$('.oe_picture').load(function() { if($(this).width() > $(this).height()) { " "$(this).addClass('oe_employee_picture_wide') } });" msgstr "" +"$('.oe_picture').load(function() { if($(this).width() > $(this).height()) { " +"$(this).addClass('oe_employee_picture_wide') } });" #. module: fleet #: view:board.board:0 msgid "Vehicles With Alerts" -msgstr "" +msgstr "Vehículos con alertas" #. module: fleet #: model:ir.actions.act_window,help:fleet.fleet_vehicle_costs_act @@ -488,11 +506,19 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para crear un nuevo coste.\n" +"

\n" +"OpenERP le ayuda a gestionar los costes para sus diferentes vehículos. Los " +"costes se crean automáticamente de los servicios, contratos (fijos o " +"recurrentes) y registros de combustible.\n" +"

\n" +" " #. module: fleet #: view:fleet.vehicle:0 msgid "show the fuel logs for this vehicle" -msgstr "" +msgstr "mostrar los registros de combustible para este vehículo" #. module: fleet #: field:fleet.vehicle.log.contract,purchaser_id:0 @@ -502,12 +528,12 @@ msgstr "Contratista" #. module: fleet #: field:fleet.vehicle,license_plate:0 msgid "License Plate" -msgstr "" +msgstr "Matrícula" #. module: fleet #: field:fleet.vehicle.log.contract,cost_frequency:0 msgid "Recurring Cost Frequency" -msgstr "" +msgstr "Frecuencia de los costes recurrentes" #. module: fleet #: field:fleet.vehicle.log.fuel,inv_ref:0 @@ -528,7 +554,7 @@ msgstr "Ubicación" #. module: fleet #: view:fleet.vehicle.cost:0 msgid "Costs Per Month" -msgstr "" +msgstr "Costes por mes" #. module: fleet #: field:fleet.contract.state,name:0 @@ -538,7 +564,7 @@ msgstr "Estado del Contrato" #. module: fleet #: field:fleet.vehicle,contract_renewal_total:0 msgid "Total of contracts due or overdue minus one" -msgstr "" +msgstr "Total de contratos vencidos o casi vencidos" #. module: fleet #: field:fleet.vehicle.cost,cost_subtype:0 @@ -548,7 +574,7 @@ msgstr "Tipo" #. module: fleet #: field:fleet.vehicle,contract_renewal_overdue:0 msgid "Has Contracts Overdued" -msgstr "" +msgstr "Tiene contratos vencidos" #. module: fleet #: field:fleet.vehicle.cost,amount:0 @@ -558,27 +584,27 @@ msgstr "Precio total" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_27 msgid "Heater Core Replacement" -msgstr "" +msgstr "Repuesto del núcleo del calentador" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_14 msgid "Car Wash" -msgstr "" +msgstr "Lavado de coche" #. module: fleet #: help:fleet.vehicle,driver:0 msgid "Driver of the vehicle" -msgstr "" +msgstr "Conductor del vehículo" #. module: fleet #: view:fleet.vehicle:0 msgid "other(s)" -msgstr "" +msgstr "otro(s)" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_refueling msgid "Refueling" -msgstr "" +msgstr "Recarga de combustible" #. module: fleet #: help:fleet.vehicle,message_summary:0 @@ -586,36 +612,38 @@ msgid "" "Holds the Chatter summary (number of messages, ...). This summary is " "directly in html format in order to be inserted in kanban views." msgstr "" +"Contiene el resumen del chatter (nº de mensajes, ...). Este resumen viene " +"directamente en formato HTML para poder ser insertado en las vistas kanban." #. module: fleet #: model:fleet.service.type,name:fleet.type_service_5 msgid "A/C Recharge" -msgstr "" +msgstr "Recarga A/C" #. module: fleet #: model:ir.model,name:fleet.model_fleet_vehicle_log_fuel msgid "Fuel log for vehicles" -msgstr "" +msgstr "Registro de combustible para los vehículos" #. module: fleet #: view:fleet.vehicle:0 msgid "Engine Options" -msgstr "" +msgstr "Opciones del motor" #. module: fleet #: view:fleet.vehicle.log.fuel:0 msgid "Fuel Costs Per Month" -msgstr "" +msgstr "Costes de combustible por mes" #. module: fleet #: model:fleet.vehicle.tag,name:fleet.vehicle_tag_sedan msgid "Sedan" -msgstr "" +msgstr "Sedán" #. module: fleet #: field:fleet.vehicle,seats:0 msgid "Seats Number" -msgstr "" +msgstr "Nº de asientos" #. module: fleet #: model:fleet.vehicle.tag,name:fleet.vehicle_tag_convertible @@ -631,12 +659,12 @@ msgstr "Configuración" #: view:fleet.vehicle.log.contract:0 #: field:fleet.vehicle.log.contract,sum_cost:0 msgid "Indicative Costs Total" -msgstr "" +msgstr "Total de costes indicativos" #. module: fleet #: model:fleet.vehicle.tag,name:fleet.vehicle_tag_junior msgid "Junior" -msgstr "" +msgstr "Junior" #. module: fleet #: help:fleet.vehicle,model_id:0 @@ -655,13 +683,20 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para crear un estado del vehículo.\n" +"

\n" +"Puede personalizar los estados disponibles para seguir la evolución de cada " +"vehículo. Por ejemplo: Activo, siendo reparado, vendido, etc.\n" +"

\n" +" " #. module: fleet #: view:fleet.vehicle:0 #: field:fleet.vehicle,log_fuel:0 #: view:fleet.vehicle.log.fuel:0 msgid "Fuel Logs" -msgstr "" +msgstr "Registros de combustible" #. module: fleet #: code:addons/fleet/fleet.py:409 @@ -676,17 +711,17 @@ msgstr "Ninguno" #: model:ir.actions.act_window,name:fleet.action_fleet_reporting_costs_non_effective #: model:ir.ui.menu,name:fleet.menu_fleet_reporting_indicative_costs msgid "Indicative Costs Analysis" -msgstr "" +msgstr "Análisis de los costes indicativos" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_12 msgid "Brake Inspection" -msgstr "" +msgstr "Inspección de frenos" #. module: fleet #: help:fleet.vehicle,state:0 msgid "Current state of the vehicle" -msgstr "" +msgstr "Estado actual del vehículo" #. module: fleet #: selection:fleet.vehicle,transmission:0 @@ -696,12 +731,12 @@ msgstr "Manual" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_52 msgid "Wheel Bearing Replacement" -msgstr "" +msgstr "Repuesto de la rueda del cojinete" #. module: fleet #: help:fleet.vehicle.cost,cost_subtype:0 msgid "Cost type purchased with this cost" -msgstr "" +msgstr "Tipo de coste comprado con este coste" #. module: fleet #: selection:fleet.vehicle,fuel_type:0 @@ -716,21 +751,25 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para crear una nueva marca.\n" +"

\n" +" " #. module: fleet #: field:fleet.vehicle.log.contract,start_date:0 msgid "Contract Start Date" -msgstr "" +msgstr "Fecha de inicio del contrato" #. module: fleet #: field:fleet.vehicle,odometer_unit:0 msgid "Odometer Unit" -msgstr "" +msgstr "Unidad del odómetro" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_30 msgid "Intake Manifold Gasket Replacement" -msgstr "" +msgstr "Repuesto de la junta del colector de admisión" #. module: fleet #: selection:fleet.vehicle.log.contract,cost_frequency:0 @@ -740,12 +779,12 @@ msgstr "Diariamente" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_6 msgid "Snow tires" -msgstr "" +msgstr "Neumáticos de nieve" #. module: fleet #: help:fleet.vehicle.cost,date:0 msgid "Date when the cost has been executed" -msgstr "" +msgstr "Fecha en la que se ha ejecutado el coste" #. module: fleet #: field:fleet.vehicle.state,sequence:0 @@ -755,22 +794,22 @@ msgstr "Pedido" #. module: fleet #: view:fleet.vehicle.cost:0 msgid "Vehicles costs" -msgstr "" +msgstr "Costes de los vehículos" #. module: fleet #: model:ir.model,name:fleet.model_fleet_vehicle_log_services msgid "Services for vehicles" -msgstr "" +msgstr "Servicios para los vehículos" #. module: fleet #: view:fleet.vehicle.log.contract:0 msgid "Indicative Cost" -msgstr "" +msgstr "Coste indicativo" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_26 msgid "Heater Control Valve Replacement" -msgstr "" +msgstr "Repuesto de la válvula de control del calentador" #. module: fleet #: view:fleet.vehicle.log.contract:0 @@ -778,6 +817,8 @@ msgid "" "Create a new contract automatically with all the same informations except " "for the date that will start at the end of current contract" msgstr "" +"Crea automáticamente un nuevo contrato con la misma información excepto por " +"la fecha de inicio, que será la de finalización del actual contrato." #. module: fleet #: selection:fleet.vehicle.log.contract,state:0 @@ -787,23 +828,23 @@ msgstr "Finalizado" #. module: fleet #: model:ir.model,name:fleet.model_fleet_vehicle_cost msgid "Cost related to a vehicle" -msgstr "" +msgstr "Coste relativo al vehículo" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_33 msgid "Other Maintenance" -msgstr "" +msgstr "Otro mantenimiento" #. module: fleet #: field:fleet.vehicle.model,brand:0 #: view:fleet.vehicle.model.brand:0 msgid "Model Brand" -msgstr "" +msgstr "Modelo" #. module: fleet #: field:fleet.vehicle.model.brand,image_small:0 msgid "Smal-sized photo" -msgstr "" +msgstr "Foto pequeña" #. module: fleet #: field:fleet.vehicle,state:0 @@ -814,12 +855,12 @@ msgstr "Estado" #. module: fleet #: field:fleet.vehicle.log.contract,cost_generated:0 msgid "Recurring Cost Amount" -msgstr "" +msgstr "Importe del coste recurrente" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_49 msgid "Transmission Replacement" -msgstr "" +msgstr "Repuesto de la transmisión" #. module: fleet #: model:ir.actions.act_window,help:fleet.fleet_vehicle_log_fuel_act @@ -834,68 +875,76 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para crear un nuevo registro de combustible.\n" +"

\n" +"Aquí puede añadir entradas de reabastecimiento de combustible para todos los " +"vehículos. Puede también filtrar los registros de un vehículo en particular " +"usando el campo de búsqueda.\n" +"

\n" +" " #. module: fleet #: model:fleet.service.type,name:fleet.type_service_11 msgid "Brake Caliper Replacement" -msgstr "" +msgstr "Repuesto de la pinza de freno" #. module: fleet #: field:fleet.vehicle,odometer:0 msgid "Last Odometer" -msgstr "" +msgstr "Último odómetro" #. module: fleet #: model:ir.actions.act_window,name:fleet.fleet_vehicle_model_act #: model:ir.ui.menu,name:fleet.fleet_vehicle_model_menu msgid "Vehicle Model" -msgstr "" +msgstr "Modelo del vehículo" #. module: fleet #: field:fleet.vehicle,doors:0 msgid "Doors Number" -msgstr "" +msgstr "Nº de puertas" #. module: fleet #: help:fleet.vehicle,acquisition_date:0 msgid "Date when the vehicle has been bought" -msgstr "" +msgstr "Fecha en la que fue comprado el vehículo" #. module: fleet #: view:fleet.vehicle.model:0 msgid "Models" -msgstr "" +msgstr "Modelos" #. module: fleet #: view:fleet.vehicle.log.contract:0 msgid "amount" -msgstr "" +msgstr "importe" #. module: fleet #: help:fleet.vehicle,fuel_type:0 msgid "Fuel Used by the vehicle" -msgstr "" +msgstr "Combustible usado por el vehículo" #. module: fleet #: view:fleet.vehicle.log.contract:0 msgid "Set Contract In Progress" -msgstr "" +msgstr "Establece el contrato en proceso" #. module: fleet #: field:fleet.vehicle.cost,odometer_unit:0 #: field:fleet.vehicle.odometer,unit:0 msgid "Unit" -msgstr "" +msgstr "Unidad" #. module: fleet #: field:fleet.vehicle,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "Es un seguidor" #. module: fleet #: field:fleet.vehicle,horsepower:0 msgid "Horsepower" -msgstr "" +msgstr "Caballos de potencia" #. module: fleet #: field:fleet.vehicle,image:0 @@ -906,39 +955,39 @@ msgstr "" #: field:fleet.vehicle.model,image_small:0 #: field:fleet.vehicle.model.brand,image:0 msgid "Logo" -msgstr "" +msgstr "Logo" #. module: fleet #: field:fleet.vehicle,horsepower_tax:0 msgid "Horsepower Taxation" -msgstr "" +msgstr "Caballos de potencia fiscales" #. module: fleet #: field:fleet.vehicle,log_services:0 #: view:fleet.vehicle.log.services:0 msgid "Services Logs" -msgstr "" +msgstr "Registros de los servicios" #. module: fleet #: code:addons/fleet/fleet.py:47 #, python-format msgid "Emptying the odometer value of a vehicle is not allowed." -msgstr "" +msgstr "Vaciar el valor del odómetro de un vehículo no está permitido." #. module: fleet #: model:fleet.service.type,name:fleet.type_service_43 msgid "Thermostat Replacement" -msgstr "" +msgstr "Repuesto del termostato" #. module: fleet #: field:fleet.service.type,category:0 msgid "Category" -msgstr "" +msgstr "Categoría" #. module: fleet #: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_log_fuel_graph msgid "Fuel Costs by Month" -msgstr "" +msgstr "Costes de combustible por mes" #. module: fleet #: help:fleet.vehicle.model.brand,image:0 @@ -946,129 +995,131 @@ msgid "" "This field holds the image used as logo for the brand, limited to " "1024x1024px." msgstr "" +"Este campo contiene la imagen usado como logo para la marca, limitada a " +"1024x1024 px." #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_11 msgid "Management Fee" -msgstr "" +msgstr "Tasa de gestión" #. module: fleet #: view:fleet.vehicle:0 msgid "All vehicles" -msgstr "" +msgstr "Todos los vehículos" #. module: fleet #: view:fleet.vehicle.log.fuel:0 #: view:fleet.vehicle.log.services:0 msgid "Additional Details" -msgstr "" +msgstr "Detalles adicionales" #. module: fleet #: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_log_services_graph msgid "Services Costs by Month" -msgstr "" +msgstr "Costes de servicios por mes" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_9 msgid "Assistance" -msgstr "" +msgstr "Asistencia" #. module: fleet #: field:fleet.vehicle.log.fuel,price_per_liter:0 msgid "Price Per Liter" -msgstr "" +msgstr "Precio por litro" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_17 msgid "Door Window Motor/Regulator Replacement" -msgstr "" +msgstr "Repuesto de regulador/motor de la ventana" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_46 msgid "Tire Service" -msgstr "" +msgstr "Servicio de neumáticos" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_8 msgid "Ball Joint Replacement" -msgstr "" +msgstr "Repuesto de la rótula" #. module: fleet #: field:fleet.vehicle,fuel_type:0 msgid "Fuel Type" -msgstr "" +msgstr "Tipo de combustible" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_22 msgid "Fuel Injector Replacement" -msgstr "" +msgstr "Repuesto del inyector de combustible" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_50 msgid "Water Pump Replacement" -msgstr "" +msgstr "Repuesto de la bomba de agua" #. module: fleet #: help:fleet.vehicle,location:0 msgid "Location of the vehicle (garage, ...)" -msgstr "" +msgstr "Ubicación del vehículo (garage, ...)" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_28 msgid "Heater Hose Replacement" -msgstr "" +msgstr "Repuesto de la manguera del calentador" #. module: fleet #: field:fleet.vehicle.log.contract,state:0 msgid "Status" -msgstr "" +msgstr "Estado" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_40 msgid "Rotor Replacement" -msgstr "" +msgstr "Repuesto del rotor" #. module: fleet #: help:fleet.vehicle.model,brand:0 msgid "Brand of the vehicle" -msgstr "" +msgstr "Marca del vehículo" #. module: fleet #: help:fleet.vehicle.log.contract,start_date:0 msgid "Date when the coverage of the contract begins" -msgstr "" +msgstr "Fecha en la que comienza la cobertura del contrato" #. module: fleet #: selection:fleet.vehicle,fuel_type:0 msgid "Electric" -msgstr "" +msgstr "Eléctrico" #. module: fleet #: field:fleet.vehicle,tag_ids:0 msgid "Tags" -msgstr "" +msgstr "Etiquetas" #. module: fleet #: view:fleet.vehicle:0 #: field:fleet.vehicle,log_contracts:0 msgid "Contracts" -msgstr "" +msgstr "Contratos" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_13 msgid "Brake Pad(s) Replacement" -msgstr "" +msgstr "Repuesto de la(s) pastilla(s) de freno" #. module: fleet #: view:fleet.vehicle.log.fuel:0 #: view:fleet.vehicle.log.services:0 msgid "Odometer Details" -msgstr "" +msgstr "Detalles del odómetro" #. module: fleet #: field:fleet.vehicle,driver:0 msgid "Driver" -msgstr "" +msgstr "Conductor" #. module: fleet #: help:fleet.vehicle.model.brand,image_small:0 @@ -1077,77 +1128,80 @@ msgid "" "image, with aspect ratio preserved. Use this field anywhere a small image is " "required." msgstr "" +"Foto pequeña de la marca. Se redimensiona automáticamente a 64x64 px, con el " +"ratio de aspecto preservado. Use este campo donde se requiera una imagen " +"pequeña" #. module: fleet #: view:board.board:0 msgid "Fleet Dashboard" -msgstr "" +msgstr "Tablero de la flota" #. module: fleet #: model:fleet.vehicle.tag,name:fleet.vehicle_tag_break msgid "Break" -msgstr "" +msgstr "Freno" #. module: fleet #: model:fleet.service.type,name:fleet.type_contract_omnium msgid "Omnium" -msgstr "" +msgstr "A todo riesgo" #. module: fleet #: view:fleet.vehicle.log.services:0 msgid "Services Details" -msgstr "" +msgstr "Detalles del servicio" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_15 msgid "Residual value (Excluding VAT)" -msgstr "" +msgstr "Valor residual (excluyendo IVA)" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_7 msgid "Alternator Replacement" -msgstr "" +msgstr "Repuesto del alternador" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_3 msgid "A/C Diagnosis" -msgstr "" +msgstr "Diagnóstico del A/C" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_23 msgid "Fuel Pump Replacement" -msgstr "" +msgstr "Repuesto de la bomba de combustible" #. module: fleet #: view:fleet.vehicle.log.contract:0 msgid "Activation Cost" -msgstr "" +msgstr "Coste de activación" #. module: fleet #: view:fleet.vehicle.cost:0 msgid "Cost Type" -msgstr "" +msgstr "Tipo de coste" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_4 msgid "A/C Evaporator Replacement" -msgstr "" +msgstr "Repuesto del evaporador de A/C" #. module: fleet #: view:fleet.vehicle:0 msgid "show all the costs for this vehicle" -msgstr "" +msgstr "mostrar todos los costes para este vehículo" #. module: fleet #: view:fleet.vehicle.odometer:0 msgid "Odometer Values Per Month" -msgstr "" +msgstr "Valores del odómetro por mes" #. module: fleet #: field:fleet.vehicle,message_comment_ids:0 #: help:fleet.vehicle,message_comment_ids:0 msgid "Comments and emails" -msgstr "" +msgstr "Comentarios y correos electrónicos" #. module: fleet #: model:ir.actions.act_window,help:fleet.fleet_vehicle_act @@ -1166,21 +1220,32 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para crear un nuevo vehículo.\n" +"

\n" +"Podrá gestionar su flota siguiendo los contratos, servicios, costes fijos y " +"recurrentes, odómetros y registros de combustible asociados a cada " +"vehículo.\n" +"

\n" +"OpenERP le avisará cuando los servicios o el contrato tengan que ser " +"renovados.\n" +"

\n" +" " #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_13 msgid "Entry into service tax" -msgstr "" +msgstr "Impuesto de entrada al servicio" #. module: fleet #: field:fleet.vehicle.log.contract,expiration_date:0 msgid "Contract Expiration Date" -msgstr "" +msgstr "Fecha de expiración del contrato" #. module: fleet #: view:fleet.vehicle.cost:0 msgid "Cost Subtype" -msgstr "" +msgstr "Subtipo del coste" #. module: fleet #: model:ir.actions.act_window,help:fleet.open_board_fleet @@ -1200,58 +1265,71 @@ msgid "" " \n" " " msgstr "" +"
\n" +"

\n" +"El tablero de la flota está vacío.\n" +"

\n" +"Para añdir un primer informe en el tablero, vaya a un menú, cambia a la " +"vista lista o gráfico, y pulse 'Añadir al tablero' en las opciones de " +"búsqueda avanzada.\n" +"

\n" +"Puede filtrar y agrupar los datos antes de insertarla en el tablero usando " +"las opciones de búsqueda.\n" +"

\n" +"
\n" +" " #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_12 msgid "Rent (Excluding VAT)" -msgstr "" +msgstr "Alquiler (excluyendo IVA)" #. module: fleet #: selection:fleet.vehicle,odometer_unit:0 msgid "Kilometers" -msgstr "" +msgstr "Kilómetros" #. module: fleet #: view:fleet.vehicle.log.fuel:0 msgid "Vehicle Details" -msgstr "" +msgstr "Detalles del vehículo" #. module: fleet #: selection:fleet.service.type,category:0 #: field:fleet.vehicle.cost,contract_id:0 #: selection:fleet.vehicle.cost,cost_type:0 msgid "Contract" -msgstr "" +msgstr "Contrato" #. module: fleet #: model:ir.actions.act_window,name:fleet.fleet_vehicle_model_brand_act #: model:ir.ui.menu,name:fleet.fleet_vehicle_model_brand_menu msgid "Model brand of Vehicle" -msgstr "" +msgstr "Modelo del vehículo" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_10 msgid "Battery Replacement" -msgstr "" +msgstr "Repuesto de la batería" #. module: fleet #: view:fleet.vehicle.cost:0 #: field:fleet.vehicle.cost,date:0 #: field:fleet.vehicle.odometer,date:0 msgid "Date" -msgstr "" +msgstr "Fecha" #. module: fleet #: model:ir.actions.act_window,name:fleet.fleet_vehicle_act #: model:ir.ui.menu,name:fleet.fleet_vehicle_menu #: model:ir.ui.menu,name:fleet.fleet_vehicles msgid "Vehicles" -msgstr "" +msgstr "Vehículos" #. module: fleet #: selection:fleet.vehicle,odometer_unit:0 msgid "Miles" -msgstr "" +msgstr "Millas" #. module: fleet #: help:fleet.vehicle.log.contract,cost_generated:0 @@ -1259,11 +1337,14 @@ msgid "" "Costs paid at regular intervals, depending on the cost frequency. If the " "cost frequency is set to unique, the cost will be logged at the start date" msgstr "" +"Costes pagados a intervalos regulares, dependiendo de la frecuencia del " +"coste. Si la frecuencia del coste se establece a única, el coste será " +"registrado en la fecha de inicio." #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_17 msgid "Emissions" -msgstr "" +msgstr "Emisiones" #. module: fleet #: model:ir.actions.act_window,help:fleet.action_fleet_reporting_costs @@ -1281,11 +1362,20 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"OpenERP le ayuda a gestionar los costes para sus vehículos. Los costes se " +"crean generalmente desde los servicios y contratos, y aparecen aquí.\n" +"

\n" +"

\n" +"Gracias a los diferentes filtros, OpenERP puede mostrar sólo los costes " +"efectivos, y ordenarlos por tipo y por vehículo.\n" +"

\n" +" " #. module: fleet #: field:fleet.vehicle,car_value:0 msgid "Car Value" -msgstr "" +msgstr "Valor del coche" #. module: fleet #: model:ir.actions.act_window,name:fleet.open_board_fleet @@ -1293,49 +1383,49 @@ msgstr "" #: model:ir.ui.menu,name:fleet.menu_fleet_reporting #: model:ir.ui.menu,name:fleet.menu_root msgid "Fleet" -msgstr "" +msgstr "Flota" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_14 msgid "Total expenses (Excluding VAT)" -msgstr "" +msgstr "Gastos totales (excluyendo IVA)" #. module: fleet #: field:fleet.vehicle.cost,odometer_id:0 msgid "Odometer" -msgstr "" +msgstr "Odómetro" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_45 msgid "Tire Replacement" -msgstr "" +msgstr "Repuesto de neumático" #. module: fleet #: view:fleet.service.type:0 msgid "Service types" -msgstr "" +msgstr "Tipos de servicios" #. module: fleet #: field:fleet.vehicle.log.fuel,purchaser_id:0 #: field:fleet.vehicle.log.services,purchaser_id:0 msgid "Purchaser" -msgstr "" +msgstr "Comprador" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_3 msgid "Tax roll" -msgstr "" +msgstr "Registro tributario" #. module: fleet #: view:fleet.vehicle.model:0 #: field:fleet.vehicle.model,vendors:0 msgid "Vendors" -msgstr "" +msgstr "Vendedores" #. module: fleet #: model:fleet.service.type,name:fleet.type_contract_leasing msgid "Leasing" -msgstr "" +msgstr "Leasing" #. module: fleet #: help:fleet.vehicle.model.brand,image_medium:0 @@ -1344,68 +1434,71 @@ msgid "" "image, with aspect ratio preserved. Use this field in form views or some " "kanban views." msgstr "" +"Logo de tamaño medio de la marca. Se redimensiona automáticamente a 128x128 " +"px, con el ratio de aspecto preservado. Use este campo en las vistas de " +"formulario o en algunas vistas kanban." #. module: fleet #: selection:fleet.vehicle.log.contract,cost_frequency:0 msgid "Weekly" -msgstr "" +msgstr "Semanalmente" #. module: fleet #: view:fleet.vehicle:0 #: view:fleet.vehicle.odometer:0 msgid "Odometer Logs" -msgstr "" +msgstr "Registros de odómetros" #. module: fleet #: field:fleet.vehicle,acquisition_date:0 msgid "Acquisition Date" -msgstr "" +msgstr "Fecha de adquisición" #. module: fleet #: model:ir.model,name:fleet.model_fleet_vehicle_odometer msgid "Odometer log for a vehicle" -msgstr "" +msgstr "Registro del odómetro para un vehículo" #. module: fleet #: field:fleet.vehicle.cost,cost_type:0 msgid "Category of the cost" -msgstr "" +msgstr "Categoría del coste" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_5 #: model:fleet.service.type,name:fleet.type_service_service_7 msgid "Summer tires" -msgstr "" +msgstr "Neumáticos de verano" #. module: fleet #: field:fleet.vehicle,contract_renewal_due_soon:0 msgid "Has Contracts to renew" -msgstr "" +msgstr "Tiene contratos que renovar" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_31 msgid "Oil Change" -msgstr "" +msgstr "Cambio de aceite" #. module: fleet #: selection:fleet.vehicle.log.contract,state:0 msgid "To Close" -msgstr "" +msgstr "Para cerrar" #. module: fleet #: model:ir.model,name:fleet.model_fleet_vehicle_model_brand msgid "Brand model of the vehicle" -msgstr "" +msgstr "Modelo del vehículo" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_51 msgid "Wheel Alignment" -msgstr "" +msgstr "Alineación de los neumáticos" #. module: fleet #: model:fleet.vehicle.tag,name:fleet.vehicle_tag_purchased msgid "Purchased" -msgstr "" +msgstr "Comprado" #. module: fleet #: model:ir.actions.act_window,help:fleet.fleet_vehicle_odometer_act @@ -1418,6 +1511,12 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Aquí puede añadir varias entradas de odómetro para todos sus vehículos.\n" +"Puede también ver el valor del odómetro para un vehículo en particular " +"usando el campo de búsqueda.\n" +"

\n" +" " #. module: fleet #: model:ir.actions.act_window,help:fleet.fleet_vehicle_model_act @@ -1430,194 +1529,200 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para crear un nuevo modelo.\n" +"

\n" +"Puede definir varios modelos (por ejemplo, A3, A4) para cada marca (Audi).\n" +"

\n" +" " #. module: fleet #: view:fleet.vehicle:0 msgid "General Properties" -msgstr "" +msgstr "Propiedades generales" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_21 msgid "Exhaust Manifold Replacement" -msgstr "" +msgstr "Repuesto del tubo de escape" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_47 msgid "Transmission Filter Replacement" -msgstr "" +msgstr "Repuesto del filtro de transmisión" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_10 msgid "Replacement Vehicle" -msgstr "" +msgstr "Vehículo de reemplazo" #. module: fleet #: selection:fleet.vehicle.log.contract,state:0 msgid "In Progress" -msgstr "" +msgstr "En proceso" #. module: fleet #: selection:fleet.vehicle.log.contract,cost_frequency:0 msgid "Yearly" -msgstr "" +msgstr "Anualmente" #. module: fleet #: model:ir.actions.act_window,name:fleet.fleet_vehicle_state_act #: model:ir.ui.menu,name:fleet.fleet_vehicle_state_menu msgid "States of Vehicle" -msgstr "" +msgstr "Estados del vehículo" #. module: fleet #: field:fleet.vehicle.model,modelname:0 msgid "Model name" -msgstr "" +msgstr "Nombre del modelo" #. module: fleet #: view:board.board:0 #: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_costs_graph msgid "Costs by Month" -msgstr "" +msgstr "Costes por mes" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_18 msgid "Touring Assistance" -msgstr "" +msgstr "Asistencia en viaje" #. module: fleet #: field:fleet.vehicle,power:0 msgid "Power (kW)" -msgstr "" +msgstr "Potencia (kW)" #. module: fleet #: code:addons/fleet/fleet.py:418 #, python-format msgid "State: from '%s' to '%s'" -msgstr "" +msgstr "Estado: de '%s' a '%s'" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_2 msgid "A/C Condenser Replacement" -msgstr "" +msgstr "Repuesto del condensador de A/C" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_19 msgid "Engine Coolant Replacement" -msgstr "" +msgstr "Repuesto del refrigerante del motor" #. module: fleet #: view:fleet.vehicle.cost:0 msgid "Cost Details" -msgstr "" +msgstr "Detalles del coste" #. module: fleet #: code:addons/fleet/fleet.py:410 #, python-format msgid "Model: from '%s' to '%s'" -msgstr "" +msgstr "Modelo: de '%s' a '%s'" #. module: fleet #: selection:fleet.vehicle.cost,cost_type:0 msgid "Other" -msgstr "" +msgstr "Otro" #. module: fleet #: view:fleet.vehicle.log.contract:0 msgid "Contract details" -msgstr "" +msgstr "Detalles del contrato" #. module: fleet #: model:fleet.vehicle.tag,name:fleet.vehicle_tag_leasing msgid "Employee Car" -msgstr "" +msgstr "Coche de empleado" #. module: fleet #: field:fleet.vehicle.cost,auto_generated:0 msgid "Automatically Generated" -msgstr "" +msgstr "Generado automáticamente" #. module: fleet #: selection:fleet.vehicle.cost,cost_type:0 msgid "Fuel" -msgstr "" +msgstr "Combustible" #. module: fleet #: sql_constraint:fleet.vehicle.state:0 msgid "State name already exists" -msgstr "" +msgstr "El nombre del estado ya existe" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_37 msgid "Radiator Repair" -msgstr "" +msgstr "Reparación del radiador" #. module: fleet #: model:ir.model,name:fleet.model_fleet_vehicle_log_contract msgid "Contract information on a vehicle" -msgstr "" +msgstr "Información del contrato en el vehículo" #. module: fleet #: field:fleet.vehicle.log.contract,days_left:0 msgid "Warning Date" -msgstr "" +msgstr "Fecha de aviso" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_19 msgid "Residual value in %" -msgstr "" +msgstr "Valor residual en %" #. module: fleet #: view:fleet.vehicle:0 msgid "Additional Properties" -msgstr "" +msgstr "Propiedades adicionales" #. module: fleet #: model:ir.model,name:fleet.model_fleet_vehicle_state msgid "fleet.vehicle.state" -msgstr "" +msgstr "Estado del vehículo" #. module: fleet #: view:fleet.vehicle.log.contract:0 msgid "Contract Costs Per Month" -msgstr "" +msgstr "Costes contractuales por mes" #. module: fleet #: model:ir.actions.act_window,name:fleet.fleet_vehicle_log_contract_act #: model:ir.ui.menu,name:fleet.fleet_vehicle_log_contract_menu msgid "Vehicles Contracts" -msgstr "" +msgstr "Contratos de vehículos" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_48 msgid "Transmission Fluid Replacement" -msgstr "" +msgstr "Repuesto de líquido de transmisión" #. module: fleet #: field:fleet.vehicle.model.brand,name:0 msgid "Brand Name" -msgstr "" +msgstr "Nombre de la marca" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_36 msgid "Power Steering Pump Replacement" -msgstr "" +msgstr "Repuesto de la bomba de la dirección asistida" #. module: fleet #: help:fleet.vehicle.cost,contract_id:0 msgid "Contract attached to this cost" -msgstr "" +msgstr "Contrato relacionado con este coste" #. module: fleet #: code:addons/fleet/fleet.py:397 #, python-format msgid "Vehicle %s has been added to the fleet!" -msgstr "" +msgstr "¡El vehículo %s ha sido añadido a la flota!" #. module: fleet #: view:fleet.vehicle.log.contract:0 #: view:fleet.vehicle.log.fuel:0 #: view:fleet.vehicle.log.services:0 msgid "Price" -msgstr "" +msgstr "Precio" #. module: fleet #: view:fleet.vehicle:0 @@ -1625,14 +1730,14 @@ msgstr "" #: field:fleet.vehicle.cost,vehicle_id:0 #: field:fleet.vehicle.odometer,vehicle_id:0 msgid "Vehicle" -msgstr "" +msgstr "Vehículo" #. module: fleet #: field:fleet.vehicle.cost,cost_ids:0 #: view:fleet.vehicle.log.contract:0 #: view:fleet.vehicle.log.services:0 msgid "Included Services" -msgstr "" +msgstr "Servicios incluidos" #. module: fleet #: model:ir.actions.act_window,help:fleet.action_fleet_vehicle_kanban @@ -1644,53 +1749,59 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Aquí se muestran los vehículos para los que uno o más contratos deben ser " +"renovados. Si ve este mensaje, entonces no hay contratos a renovar.\n" +"

\n" +" " #. module: fleet #: model:fleet.service.type,name:fleet.type_service_15 msgid "Catalytic Converter Replacement" -msgstr "" +msgstr "Repuesto del convertidor catalítico" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_25 msgid "Heater Blower Motor Replacement" -msgstr "" +msgstr "Repuesto del motor del ventilador" #. module: fleet #: model:ir.actions.act_window,name:fleet.fleet_vehicle_odometer_act #: model:ir.ui.menu,name:fleet.fleet_vehicle_odometer_menu msgid "Vehicles Odometer" -msgstr "" +msgstr "Odómetro de los vehículos" #. module: fleet #: help:fleet.vehicle.log.contract,notes:0 msgid "Write here all supplementary informations relative to this contract" msgstr "" +"Escriba aquí toda la información suplementaria relativa a este contrato" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_29 msgid "Ignition Coil Replacement" -msgstr "" +msgstr "Repuesto de la bobina de encendido" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_16 msgid "Options" -msgstr "" +msgstr "Opciones" #. module: fleet #: model:fleet.service.type,name:fleet.type_contract_repairing msgid "Repairing" -msgstr "" +msgstr "Reparación" #. module: fleet #: model:ir.actions.act_window,name:fleet.action_fleet_reporting_costs #: model:ir.ui.menu,name:fleet.menu_fleet_reporting_costs msgid "Costs Analysis" -msgstr "" +msgstr "Análisis de costes" #. module: fleet #: field:fleet.vehicle.log.contract,ins_ref:0 msgid "Contract Reference" -msgstr "" +msgstr "Referencia del contrato" #. module: fleet #: field:fleet.service.type,name:0 @@ -1702,27 +1813,27 @@ msgstr "" #: field:fleet.vehicle.state,name:0 #: field:fleet.vehicle.tag,name:0 msgid "Name" -msgstr "" +msgstr "Nombre" #. module: fleet #: help:fleet.vehicle,doors:0 msgid "Number of doors of the vehicle" -msgstr "" +msgstr "Nº de puertas del vehículo" #. module: fleet #: field:fleet.vehicle,transmission:0 msgid "Transmission" -msgstr "" +msgstr "Transmisión" #. module: fleet #: field:fleet.vehicle,vin_sn:0 msgid "Chassis Number" -msgstr "" +msgstr "Número de bastidor" #. module: fleet #: help:fleet.vehicle,color:0 msgid "Color of the vehicle" -msgstr "" +msgstr "Color del vehículo" #. module: fleet #: model:ir.actions.act_window,help:fleet.fleet_vehicle_log_services_act @@ -1736,73 +1847,81 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para crear un nuevo servicio.\n" +"

\n" +"OpenERP le ayuda a seguir todos los servicios realizados en su vehículo. Los " +"servicios pueden ser de muchos tipos: reparaciones ocasionales, " +"mantenimiento fijos, etc.\n" +"

\n" +" " #. module: fleet #: field:fleet.vehicle,co2:0 msgid "CO2 Emissions" -msgstr "" +msgstr "Emisiones de CO2" #. module: fleet #: view:fleet.vehicle.log.contract:0 msgid "Contract logs" -msgstr "" +msgstr "Registros de los contratos" #. module: fleet #: view:fleet.vehicle:0 msgid "Costs" -msgstr "" +msgstr "Costes" #. module: fleet #: field:fleet.vehicle,message_summary:0 msgid "Summary" -msgstr "" +msgstr "Resumen" #. module: fleet #: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_log_contract_graph msgid "Contracts Costs by Month" -msgstr "" +msgstr "Costes de los contratos por mes" #. module: fleet #: field:fleet.vehicle,model_id:0 #: view:fleet.vehicle.model:0 msgid "Model" -msgstr "" +msgstr "Modelo" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_41 msgid "Spark Plug Replacement" -msgstr "" +msgstr "Repuesto de la bujía" #. module: fleet #: help:fleet.vehicle,message_ids:0 msgid "Messages and communication history" -msgstr "" +msgstr "Mensajes e historial de comunicación" #. module: fleet #: model:ir.model,name:fleet.model_fleet_vehicle msgid "Information on a vehicle" -msgstr "" +msgstr "Información en un vehículo" #. module: fleet #: help:fleet.vehicle,co2:0 msgid "CO2 emissions of the vehicle" -msgstr "" +msgstr "Emisiones CO2 del vehículo" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_53 msgid "Windshield Wiper(s) Replacement" -msgstr "" +msgstr "Repuesto del/de los limpiaparabrisas" #. module: fleet #: view:fleet.vehicle.log.contract:0 #: field:fleet.vehicle.log.contract,generated_cost_ids:0 msgid "Generated Costs" -msgstr "" +msgstr "Costes generados" #. module: fleet #: field:fleet.vehicle,color:0 msgid "Color" -msgstr "" +msgstr "Color" #. module: fleet #: model:ir.actions.act_window,help:fleet.fleet_vehicle_service_types_act @@ -1815,81 +1934,90 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para crear un nuevo tipo de servicio.\n" +"

\n" +"Cada servicio puede ser usado en los contratos, como un servicio " +"independiente o ambos.\n" +"

\n" +" " #. module: fleet #: view:board.board:0 msgid "Services Costs" -msgstr "" +msgstr "Costes de los servicios" #. module: fleet #: model:ir.model,name:fleet.model_fleet_vehicle_model msgid "Model of a vehicle" -msgstr "" +msgstr "Modelo de un vehículo" #. module: fleet #: help:fleet.vehicle,seats:0 msgid "Number of seats of the vehicle" -msgstr "" +msgstr "Nº de asientos del vehículo" #. module: fleet #: field:fleet.vehicle.cost,odometer:0 #: field:fleet.vehicle.odometer,value:0 msgid "Odometer Value" -msgstr "" +msgstr "Valor del odómetro" #. module: fleet #: view:fleet.vehicle.log.services:0 msgid "Cost" -msgstr "" +msgstr "Coste" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_39 msgid "Rotate Tires" -msgstr "" +msgstr "Rotar neumáticos" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_42 msgid "Starter Replacement" -msgstr "" +msgstr "Repuesto del motor de arranque" #. module: fleet #: view:fleet.vehicle.cost:0 #: field:fleet.vehicle.cost,year:0 msgid "Year" -msgstr "" +msgstr "Año" #. module: fleet #: help:fleet.vehicle,license_plate:0 msgid "License plate number of the vehicle (ie: plate number for a car)" -msgstr "" +msgstr "Matrícula del vehículo" #. module: fleet #: model:ir.model,name:fleet.model_fleet_contract_state msgid "Contains the different possible status of a leasing contract" -msgstr "" +msgstr "Contiene los diferentes estados posibles de un contrato de leasing" #. module: fleet #: view:fleet.vehicle:0 msgid "show the contract for this vehicle" -msgstr "" +msgstr "mostrar el contrato para este vehículo" #. module: fleet #: view:fleet.vehicle.log.services:0 msgid "Total" -msgstr "" +msgstr "Total" #. module: fleet #: help:fleet.service.type,category:0 msgid "" "Choose wheter the service refer to contracts, vehicle services or both" msgstr "" +"Escoja si el servicio se refiere a los contratos, a servicios del vehículo o " +"a ambos" #. module: fleet #: help:fleet.vehicle.cost,cost_type:0 msgid "For internal purpose only" -msgstr "" +msgstr "Sólo para uso interno" #. module: fleet #: help:fleet.vehicle.state,sequence:0 msgid "Used to order the note stages" -msgstr "" +msgstr "Usado para ordenar las etapas" diff --git a/addons/fleet/i18n/fr.po b/addons/fleet/i18n/fr.po index 2e358b847f9..c36a8b9b1f1 100644 --- a/addons/fleet/i18n/fr.po +++ b/addons/fleet/i18n/fr.po @@ -8,13 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-24 02:52+0000\n" -"PO-Revision-Date: 2012-12-18 22:24+0000\n" -"Last-Translator: Nicolas JEUDY \n" +"PO-Revision-Date: 2012-12-19 15:53+0000\n" +"Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) " +"\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: 2012-12-19 05:17+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: fleet @@ -30,7 +31,7 @@ msgstr "Compacte" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_1 msgid "A/C Compressor Replacement" -msgstr "" +msgstr "Remplacement du compresseur de l'air climatisé" #. module: fleet #: help:fleet.vehicle,vin_sn:0 @@ -79,7 +80,7 @@ msgstr "Plaque d'immatriculation: du %s au %s" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_38 msgid "Resurface Rotors" -msgstr "" +msgstr "Machiner les rotors" #. module: fleet #: view:fleet.vehicle.cost:0 @@ -109,7 +110,7 @@ msgstr "" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_service_2 msgid "Depreciation and Interests" -msgstr "" +msgstr "Dépréciation et intérêts" #. module: fleet #: field:fleet.vehicle.log.contract,insurer_id:0 @@ -121,7 +122,7 @@ msgstr "Fournisseur" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_35 msgid "Power Steering Hose Replacement" -msgstr "" +msgstr "Remplacement du tuyau de direction assistée" #. module: fleet #: view:fleet.vehicle.log.contract:0 diff --git a/addons/google_docs/i18n/fr.po b/addons/google_docs/i18n/fr.po new file mode 100644 index 00000000000..d7637ea6d25 --- /dev/null +++ b/addons/google_docs/i18n/fr.po @@ -0,0 +1,230 @@ +# French translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-11-24 02:52+0000\n" +"PO-Revision-Date: 2012-12-19 16:01+0000\n" +"Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) " +"\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: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:136 +#, python-format +msgid "Key Error!" +msgstr "Erreur de clé!" + +#. 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 "" +"pour une présentation (diaporama) ayant une url " +"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" +".p`, l'ID est `presentation:123456789`" + +#. 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 "" +"pour un document ayant l'url " +"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, l'ID est " +"`document:123456789`" + +#. module: google_docs +#: field:google.docs.config,gdocs_resource_id:0 +msgid "Google Resource ID to Use as Template" +msgstr "L'identifiant Google de la ressource à utiliser comme modèle" + +#. 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 "" +"pour un dessin ayant l'url " +"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, l'ID est " +"`drawings:123456789`" + +#. module: google_docs +#. openerp-web +#: code:addons/google_docs/static/src/xml/gdocs.xml:6 +#, python-format +msgid "Add Google Doc..." +msgstr "Ajouter un document Google..." + +#. 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 "" +"Ceci est l'identifiant du modèle de document, du côté de Google. Vous pouvez " +"le trouver grâce à son url:" + +#. module: google_docs +#: model:ir.model,name:google_docs.model_google_docs_config +msgid "Google Docs templates config" +msgstr "Configuration des modèles de documents Google" + +#. 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 "" +"Vous n'avez pas renseigné les identifiants Google sur votre compte " +"utilisateur. Contactez votre administrateur si vous souhaitez de l'aide." + +#. 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 "" +"pour un document tableur ayant l'url " +"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " +" l'ID est `spreadsheet:123456789`" + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:98 +#, python-format +msgid "" +"Your resource id is not correct. You can find the id in the google docs URL." +msgstr "" +"L'identifiant de la ressource est incorrecte. Vous pouvez le trouver dans " +"l'url associée document Google." + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:122 +#, python-format +msgid "Creating google docs may only be done by one at a time." +msgstr "Vous ne pouvez créer qu'un seul document google à la fois." + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:53 +#: code:addons/google_docs/google_docs.py:98 +#: code:addons/google_docs/google_docs.py:122 +#, python-format +msgid "Google Docs Error!" +msgstr "Erreur Google Docs!" + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:53 +#, python-format +msgid "Check your google configuration in Users/Users/Synchronization tab." +msgstr "" +"Vérifiez votre configuration Google dans l'onglet Synchronisation du " +"formulaire Utilisateurs" + +#. module: google_docs +#: model:ir.ui.menu,name:google_docs.menu_gdocs_config +msgid "Google Docs configuration" +msgstr "Configuration Google Documents" + +#. 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 "Configuration des Modèles" + +#. module: google_docs +#: field:google.docs.config,model_id:0 +msgid "Model" +msgstr "Modèles" + +#. 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 "" +"Les paramètres d'authentification Google de l'utilisateur n'ont pas encoré " +"été configurés" + +#. module: google_docs +#: code:addons/google_docs/google_docs.py:136 +#, python-format +msgid "Your Google Doc Name Pattern's key does not found in object." +msgstr "Le nom du document google associé n'a pas été trouvé dans cet objet." + +#. 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 "" +"Choisissez le nom du nouveau document google sur les serveurs Google. ex: " +"gdoc_%(field_name)s" + +#. module: google_docs +#: view:google.docs.config:0 +msgid "Google Docs Configuration" +msgstr "Configuration de Google documents" + +#. 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 "" +"\n" +"Ceci est l'identifiant du modèle de document, du côté de Google. Vous pouvez " +"le trouver grâce à son URL: \n" +" \n" +"*Pour un document texte dont l'url est " +"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, l'ID est " +"`document:123456789`\n" +"*Pour un document tableur dont l'url est " +"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " +"l'ID est `spreadsheet:123456789`\n" +"*Pour une présentation dont l'url est " +"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" +".p`, l'ID est `presentation:123456789`\n" +"* Pour un dessin dont l'url est " +"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, l'ID est " +"`drawings:123456789`\n" +"...\n" + +#. module: google_docs +#: model:ir.model,name:google_docs.model_ir_attachment +msgid "ir.attachment" +msgstr "ir.attachment" + +#. module: google_docs +#: field:google.docs.config,name_template:0 +msgid "Google Doc Name Pattern" +msgstr "" diff --git a/addons/hr/i18n/it.po b/addons/hr/i18n/it.po index 929b827f1dc..3514ae99c6c 100644 --- a/addons/hr/i18n/it.po +++ b/addons/hr/i18n/it.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-03 16:02+0000\n" -"PO-Revision-Date: 2012-12-15 09:13+0000\n" +"PO-Revision-Date: 2012-12-19 19:47+0000\n" "Last-Translator: Davide Corio - agilebg.com \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-16 04:48+0000\n" -"X-Generator: Launchpad (build 16372)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: hr #: model:process.node,name:hr.process_node_openerpuser0 @@ -336,8 +336,6 @@ msgid "" "This installs the module account_analytic_analysis, which will install sales " "management too." msgstr "" -"Installa il modulo account_analytic_analysis, che installerà anche la " -"gestione vendite." #. module: hr #: view:board.board:0 @@ -374,7 +372,7 @@ msgstr "Modulo dipendenti e struttura" #. module: hr #: field:hr.config.settings,module_hr_expense:0 msgid "Manage employees expenses" -msgstr "Gestisce i rimborsi ai dipendenti" +msgstr "Gestisci i rimborsi ai dipendenti" #. module: hr #: help:hr.job,expected_employees:0 @@ -549,7 +547,7 @@ msgstr "Informazioni Contatto" #. module: hr #: field:hr.config.settings,module_hr_holidays:0 msgid "Manage holidays, leaves and allocation requests" -msgstr "Gestisce richieste ferie e permessi" +msgstr "Gestisci richieste ferie e permessi" #. module: hr #: field:hr.department,child_ids:0 @@ -596,7 +594,7 @@ msgstr "E' un Follower" #. module: hr #: field:hr.config.settings,module_hr_recruitment:0 msgid "Manage the recruitment process" -msgstr "Gestisce il processo di assunzione" +msgstr "Gestisci il processo di assunzione" #. module: hr #: view:hr.employee:0 @@ -819,7 +817,7 @@ msgstr "Indirizzo abitazione" #. module: hr #: field:hr.config.settings,module_hr_timesheet:0 msgid "Manage timesheets" -msgstr "Gestisce i timesheets" +msgstr "Gestisci i timesheets" #. module: hr #: model:ir.actions.act_window,name:hr.open_payroll_modules @@ -849,7 +847,7 @@ msgstr "Installa il modulo hr_payroll." #. module: hr #: field:hr.config.settings,module_hr_contract:0 msgid "Record contracts per employee" -msgstr "Gestisci i contratti del dipendente" +msgstr "Gestisci contratti del dipendente" #. module: hr #: view:hr.department:0 diff --git a/addons/hr_evaluation/i18n/de.po b/addons/hr_evaluation/i18n/de.po index ad8e5938566..87d06ab765d 100644 --- a/addons/hr_evaluation/i18n/de.po +++ b/addons/hr_evaluation/i18n/de.po @@ -8,15 +8,15 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-03 16:02+0000\n" -"PO-Revision-Date: 2012-12-10 15:40+0000\n" +"PO-Revision-Date: 2012-12-19 23:18+0000\n" "Last-Translator: Thorsten Vocks (OpenBig.org) \n" "Language-Team: German \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-11 04:49+0000\n" -"X-Generator: Launchpad (build 16356)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: hr_evaluation #: help:hr_evaluation.plan.phase,send_anonymous_manager:0 @@ -697,7 +697,7 @@ msgstr "Beurteilung Erwartet" #: model:ir.actions.act_window,name:hr_evaluation.action_evaluation_report_all #: model:ir.ui.menu,name:hr_evaluation.menu_evaluation_report_all msgid "Appraisal Analysis" -msgstr "Beurteilungsanalyse" +msgstr "Statistik Beurteilungen" #. module: hr_evaluation #: field:hr_evaluation.evaluation,date:0 diff --git a/addons/hr_expense/i18n/pl.po b/addons/hr_expense/i18n/pl.po index bc7af42454f..2e92bc32c11 100644 --- a/addons/hr_expense/i18n/pl.po +++ b/addons/hr_expense/i18n/pl.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-03 16:02+0000\n" -"PO-Revision-Date: 2012-05-10 17:38+0000\n" -"Last-Translator: Raphael Collet (OpenERP) \n" +"PO-Revision-Date: 2012-12-19 17:51+0000\n" +"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) \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-04 05:38+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: hr_expense #: view:hr.expense.expense:0 @@ -36,23 +36,23 @@ msgstr "Księgowość zwraca wydatki" #: field:hr.expense.expense,date_confirm:0 #: field:hr.expense.report,date_confirm:0 msgid "Confirmation Date" -msgstr "" +msgstr "Data potwierdzenia" #. module: hr_expense #: view:hr.expense.expense:0 #: view:hr.expense.report:0 msgid "Group By..." -msgstr "" +msgstr "Grupuj wg..." #. module: hr_expense #: model:product.template,name:hr_expense.air_ticket_product_template msgid "Air Ticket" -msgstr "" +msgstr "Bilet lotniczy" #. module: hr_expense #: report:hr.expense:0 msgid "Validated By" -msgstr "" +msgstr "Zatwierdzone przez" #. module: hr_expense #: view:hr.expense.expense:0 @@ -60,35 +60,35 @@ msgstr "" #: view:hr.expense.report:0 #: field:hr.expense.report,department_id:0 msgid "Department" -msgstr "" +msgstr "Dział" #. module: hr_expense #: view:hr.expense.expense:0 msgid "New Expense" -msgstr "" +msgstr "Nowy Wydatek" #. module: hr_expense #: field:hr.expense.line,uom_id:0 #: view:product.product:0 msgid "Unit of Measure" -msgstr "" +msgstr "Jednostka Miary" #. module: hr_expense #: selection:hr.expense.report,month:0 msgid "March" -msgstr "" +msgstr "Marzec" #. module: hr_expense #: field:hr.expense.expense,message_unread:0 msgid "Unread Messages" -msgstr "" +msgstr "Nieprzeczytane wiadomości" #. module: hr_expense #: field:hr.expense.expense,company_id:0 #: view:hr.expense.report:0 #: field:hr.expense.report,company_id:0 msgid "Company" -msgstr "" +msgstr "Firma" #. module: hr_expense #: view:hr.expense.expense:0 @@ -98,23 +98,23 @@ msgstr "Ustaw na projekt" #. module: hr_expense #: view:hr.expense.expense:0 msgid "To Pay" -msgstr "" +msgstr "Do zapłacenia" #. module: hr_expense #: model:ir.model,name:hr_expense.model_hr_expense_report msgid "Expenses Statistics" -msgstr "" +msgstr "Statystyka wydatków" #. module: hr_expense #: view:hr.expense.expense:0 msgid "Open Receipt" -msgstr "" +msgstr "Otwarte potwierdzenie" #. module: hr_expense #: view:hr.expense.report:0 #: field:hr.expense.report,day:0 msgid "Day" -msgstr "" +msgstr "Dzień" #. module: hr_expense #: help:hr.expense.expense,date_valid:0 @@ -122,6 +122,8 @@ msgid "" "Date of the acceptation of the sheet expense. It's filled when the button " "Accept is pressed." msgstr "" +"Data akceptacji arkusza wydatków. To pole jest wypełniane po naciśnięciu " +"przycisku Akceptuj." #. module: hr_expense #: view:hr.expense.expense:0 @@ -131,25 +133,25 @@ msgstr "Uwagi" #. module: hr_expense #: field:hr.expense.expense,message_ids:0 msgid "Messages" -msgstr "" +msgstr "Wiadomości" #. module: hr_expense #: code:addons/hr_expense/hr_expense.py:179 #: code:addons/hr_expense/hr_expense.py:195 #, python-format msgid "Error!" -msgstr "" +msgstr "Błąd!" #. module: hr_expense #: model:ir.actions.act_window,name:hr_expense.hr_expense_product #: view:product.product:0 msgid "Products" -msgstr "" +msgstr "Produkty" #. module: hr_expense #: view:hr.expense.report:0 msgid "Confirm Expenses" -msgstr "" +msgstr "Potwierdż wydatki" #. module: hr_expense #: selection:hr.expense.report,state:0 @@ -164,7 +166,7 @@ msgstr "Bezpośredni przełożony odrzuca delegację. Ustaw na projekt." #. module: hr_expense #: help:hr.expense.expense,message_unread:0 msgid "If checked new messages require your attention." -msgstr "" +msgstr "Jeśli zaznaczone, to wiadomość wymaga twojej uwagi." #. module: hr_expense #: selection:hr.expense.report,state:0 @@ -207,7 +209,7 @@ msgstr "" #: view:hr.expense.report:0 #: field:hr.expense.report,nbr:0 msgid "# of Lines" -msgstr "" +msgstr "# wierszy" #. module: hr_expense #: help:hr.expense.expense,message_summary:0 @@ -215,12 +217,15 @@ msgid "" "Holds the Chatter summary (number of messages, ...). This summary is " "directly in html format in order to be inserted in kanban views." msgstr "" +"Zawiera podsumowanie wypowiedzi (liczbę wiadomości, ...). To podsumowanie " +"jest bezpośrednio w formacie html, aby można je było stosować w widokach " +"kanban." #. module: hr_expense #: code:addons/hr_expense/hr_expense.py:300 #, python-format msgid "Warning" -msgstr "" +msgstr "Ostrzeżenie" #. module: hr_expense #: report:hr.expense:0 @@ -240,7 +245,7 @@ msgstr "Odmów wydatku" #. module: hr_expense #: field:hr.expense.report,price_average:0 msgid "Average Price" -msgstr "" +msgstr "Cena przeciętna" #. module: hr_expense #: view:hr.expense.expense:0 @@ -256,7 +261,7 @@ msgstr "Księgowy zatwierdza delegację" #. module: hr_expense #: field:hr.expense.report,delay_valid:0 msgid "Delay to Valid" -msgstr "" +msgstr "Czas do zatiwerdzenia" #. module: hr_expense #: help:hr.expense.line,sequence:0 @@ -268,7 +273,7 @@ msgstr "" #: view:hr.expense.report:0 #: field:hr.expense.report,state:0 msgid "Status" -msgstr "" +msgstr "Stan" #. module: hr_expense #: field:hr.expense.line,analytic_account:0 @@ -280,17 +285,17 @@ msgstr "Konto analityczne" #. module: hr_expense #: field:hr.expense.report,date:0 msgid "Date " -msgstr "" +msgstr "Data " #. module: hr_expense #: view:hr.expense.report:0 msgid "Waiting" -msgstr "" +msgstr "Oczekiwanie" #. module: hr_expense #: field:hr.expense.expense,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "Obserwatorzy" #. module: hr_expense #: report:hr.expense:0 @@ -304,7 +309,7 @@ msgstr "Pracownik" #: view:hr.expense.expense:0 #: selection:hr.expense.expense,state:0 msgid "New" -msgstr "" +msgstr "Nowe" #. module: hr_expense #: report:hr.expense:0 @@ -327,7 +332,7 @@ msgstr "Część kosztów może być refakturowana na klienta" #: code:addons/hr_expense/hr_expense.py:195 #, python-format msgid "The employee must have a home address." -msgstr "" +msgstr "Pracownik musi mieć adres domowy" #. module: hr_expense #: view:board.board:0 @@ -339,12 +344,12 @@ msgstr "Moje wydatki" #. module: hr_expense #: view:hr.expense.report:0 msgid "Creation Date" -msgstr "" +msgstr "Data utworzenia" #. module: hr_expense #: model:ir.actions.report.xml,name:hr_expense.hr_expenses msgid "HR expenses" -msgstr "" +msgstr "Wydatki personalne" #. module: hr_expense #: field:hr.expense.expense,id:0 @@ -366,12 +371,12 @@ msgstr "Wymuś dziennik" #: view:hr.expense.report:0 #: field:hr.expense.report,no_of_products:0 msgid "# of Products" -msgstr "" +msgstr "# Produktów" #. module: hr_expense #: selection:hr.expense.report,month:0 msgid "July" -msgstr "" +msgstr "Lipiec" #. module: hr_expense #: model:process.transition,note:hr_expense.process_transition_reimburseexpense0 @@ -382,7 +387,7 @@ msgstr "Po utworzeniu faktury zwrot wydatków" #: code:addons/hr_expense/hr_expense.py:106 #, python-format msgid "Warning!" -msgstr "" +msgstr "Ostrzeżenie !" #. module: hr_expense #: model:process.node,name:hr_expense.process_node_reimbursement0 @@ -393,20 +398,20 @@ msgstr "Zwrot wydatków" #: field:hr.expense.expense,date_valid:0 #: field:hr.expense.report,date_valid:0 msgid "Validation Date" -msgstr "" +msgstr "Data zatwierdzenia" #. module: hr_expense #: code:addons/hr_expense/hr_expense.py:225 #, python-format msgid "Expense Receipt" -msgstr "" +msgstr "Potwierdzenie wydatku" #. module: hr_expense #: view:hr.expense.report:0 #: model:ir.actions.act_window,name:hr_expense.action_hr_expense_report_all #: model:ir.ui.menu,name:hr_expense.menu_hr_expense_report_all msgid "Expenses Analysis" -msgstr "" +msgstr "Analiza wydatków" #. module: hr_expense #: view:hr.expense.expense:0 @@ -426,24 +431,24 @@ msgstr "Pozycja wydatków" #. module: hr_expense #: field:hr.expense.report,delay_confirm:0 msgid "Delay to Confirm" -msgstr "" +msgstr "Czas do potwierdzenia" #. module: hr_expense #: selection:hr.expense.report,month:0 msgid "September" -msgstr "" +msgstr "Wrzesień" #. module: hr_expense #: selection:hr.expense.report,month:0 msgid "December" -msgstr "" +msgstr "Grudzień" #. module: hr_expense #: view:hr.expense.expense:0 #: view:hr.expense.report:0 #: field:hr.expense.report,month:0 msgid "Month" -msgstr "" +msgstr "Miesiąc" #. module: hr_expense #: field:hr.expense.expense,currency_id:0 @@ -459,12 +464,12 @@ msgstr "Użytkownik" #. module: hr_expense #: field:hr.expense.expense,voucher_id:0 msgid "Employee's Receipt" -msgstr "" +msgstr "Potwierdzenie pracownika" #. module: hr_expense #: selection:hr.expense.expense,state:0 msgid "Waiting Approval" -msgstr "" +msgstr "Oczekuje na aprobatę" #. module: hr_expense #: model:process.node,note:hr_expense.process_node_draftexpenses0 @@ -478,11 +483,13 @@ msgid "" "Selected Unit of Measure does not belong to the same category as the product " "Unit of Measure" msgstr "" +"Wybrana jednostka miary nie należy do tej samej kategorii co jednostka miary " +"produktu." #. module: hr_expense #: help:hr.expense.expense,journal_id:0 msgid "The journal used when the expense is done." -msgstr "" +msgstr "Dziennik stosowany kiedy wydatek jest zatwierdzany." #. module: hr_expense #: field:hr.expense.expense,note:0 @@ -515,7 +522,7 @@ msgstr "Wydatek zatwierdzono." #. module: hr_expense #: selection:hr.expense.report,month:0 msgid "August" -msgstr "" +msgstr "Sierpień" #. module: hr_expense #: model:process.node,note:hr_expense.process_node_approved0 @@ -530,7 +537,7 @@ msgstr "Suma kwot" #. module: hr_expense #: selection:hr.expense.report,month:0 msgid "June" -msgstr "" +msgstr "Czerwiec" #. module: hr_expense #: model:process.node,name:hr_expense.process_node_draftexpenses0 @@ -540,12 +547,12 @@ msgstr "Projekt wydatków" #. module: hr_expense #: field:hr.expense.expense,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "Jest obserwatorem" #. module: hr_expense #: model:ir.actions.act_window,name:hr_expense.product_normal_form_view_installer msgid "Review Your Expenses Products" -msgstr "" +msgstr "Przgląd produktów wydatkowych" #. module: hr_expense #: report:hr.expense:0 @@ -557,23 +564,23 @@ msgstr "Data" #. module: hr_expense #: selection:hr.expense.report,month:0 msgid "November" -msgstr "" +msgstr "Listopad" #. module: hr_expense #: view:hr.expense.report:0 msgid "Extended Filters..." -msgstr "" +msgstr "Rozszerzone filtry..." #. module: hr_expense #: field:hr.expense.expense,message_comment_ids:0 #: help:hr.expense.expense,message_comment_ids:0 msgid "Comments and emails" -msgstr "" +msgstr "Komentarze i emaile" #. module: hr_expense #: selection:hr.expense.report,month:0 msgid "October" -msgstr "" +msgstr "Październik" #. module: hr_expense #: model:ir.actions.act_window,help:hr_expense.expense_all @@ -590,16 +597,25 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kliknij, aby zarejestrować nowy wydatek. \n" +"

\n" +" OpenERP zapewni następne kroki w procesie; arkusz\n" +" wydatków będzie zatwierdzany przez menedżerów, a\n" +" pracownik dostanie zwrot swoich wydatków. Część z\n" +" tych wydatków musi być refakturowana na klienta.\n" +"

\n" +" " #. module: hr_expense #: view:hr.expense.expense:0 msgid "Generate Accounting Entries" -msgstr "" +msgstr "Generuj zapisy księgowe" #. module: hr_expense #: selection:hr.expense.report,month:0 msgid "January" -msgstr "" +msgstr "Styczeń" #. module: hr_expense #: report:hr.expense:0 @@ -609,22 +625,22 @@ msgstr "Wydatki pracowników" #. module: hr_expense #: field:hr.expense.expense,message_summary:0 msgid "Summary" -msgstr "" +msgstr "Podsumowanie" #. module: hr_expense #: model:product.template,name:hr_expense.car_travel_product_template msgid "Car Travel Expenses" -msgstr "" +msgstr "Wydatki na samochód" #. module: hr_expense #: view:hr.expense.expense:0 msgid "Submit to Manager" -msgstr "" +msgstr "Wyślij do menedżera" #. module: hr_expense #: view:hr.expense.report:0 msgid "Done Expenses" -msgstr "" +msgstr "Wydatki wykonane" #. module: hr_expense #: model:process.node,note:hr_expense.process_node_confirmedexpenses0 @@ -634,7 +650,7 @@ msgstr "Pracownik potwierdza swoje rozliczenie" #. module: hr_expense #: view:hr.expense.expense:0 msgid "Expenses to Invoice" -msgstr "" +msgstr "Wydatki do zafakturowania" #. module: hr_expense #: model:process.node,name:hr_expense.process_node_supplierinvoice0 @@ -650,12 +666,12 @@ msgstr "Rozliczenie wydatków (Delegacja)" #. module: hr_expense #: field:hr.expense.report,voucher_id:0 msgid "Receipt" -msgstr "" +msgstr "Potwierdzenie" #. module: hr_expense #: view:hr.expense.report:0 msgid "Approved Expenses" -msgstr "" +msgstr "Aprobowane wydatki" #. module: hr_expense #: report:hr.expense:0 @@ -668,7 +684,7 @@ msgstr "Cena jedn." #: view:hr.expense.report:0 #: selection:hr.expense.report,state:0 msgid "Done" -msgstr "" +msgstr "Wykonano" #. module: hr_expense #: model:process.transition.action,name:hr_expense.process_transition_action_supplierinvoice0 @@ -679,7 +695,7 @@ msgstr "Faktura" #: view:hr.expense.report:0 #: field:hr.expense.report,year:0 msgid "Year" -msgstr "" +msgstr "Rok" #. module: hr_expense #: model:process.transition,name:hr_expense.process_transition_reimbursereinvoice0 @@ -689,12 +705,12 @@ msgstr "Refakturuj" #. module: hr_expense #: view:hr.expense.expense:0 msgid "Expense Date" -msgstr "" +msgstr "Data Wydatku" #. module: hr_expense #: field:hr.expense.expense,user_valid:0 msgid "Validation By" -msgstr "" +msgstr "Zatwierdzone przez" #. module: hr_expense #: view:hr.expense.expense:0 @@ -736,6 +752,11 @@ msgid "" "based on real costs, set the cost at 0.00. The user will set the real price " "when recording his expense sheet." msgstr "" +"Definiuj jeden produkt dla każdego typu wydatku dozwolonego dla pracowników " +"(użycie samochodu, hotel, dieta, itp.). Jeśli refundujesz pracownikom " +"wydatki według stałych stawek, to ustaw koszt i jednostkę miary w produkcie. " +"Jeśli refundujesz rzeczywiste koszty, to ustaw koszt na 0,00. Użytkownik " +"wprowadzi rzeczywiste ceny przy wypełnianiu arkusza wydatków." #. module: hr_expense #: selection:hr.expense.expense,state:0 @@ -763,7 +784,7 @@ msgstr "Opis" #. module: hr_expense #: selection:hr.expense.report,month:0 msgid "May" -msgstr "" +msgstr "Maj" #. module: hr_expense #: field:hr.expense.line,unit_quantity:0 @@ -773,12 +794,12 @@ msgstr "Ilości" #. module: hr_expense #: report:hr.expense:0 msgid "Price" -msgstr "" +msgstr "Cena" #. module: hr_expense #: field:hr.expense.report,no_of_account:0 msgid "# of Accounts" -msgstr "" +msgstr "# kont" #. module: hr_expense #: selection:hr.expense.expense,state:0 @@ -799,7 +820,7 @@ msgstr "Odn." #. module: hr_expense #: field:hr.expense.report,employee_id:0 msgid "Employee's Name" -msgstr "" +msgstr "Nazwisko pracownika" #. module: hr_expense #: view:hr.expense.report:0 @@ -815,7 +836,7 @@ msgstr "Dane księgowe" #. module: hr_expense #: selection:hr.expense.report,month:0 msgid "February" -msgstr "" +msgstr "Luty" #. module: hr_expense #: report:hr.expense:0 @@ -826,7 +847,7 @@ msgstr "Nazwa" #: code:addons/hr_expense/hr_expense.py:106 #, python-format msgid "You can only delete draft expenses!" -msgstr "" +msgstr "Możesz usuwać jedynie projekty wydatków!" #. module: hr_expense #: field:hr.expense.expense,account_move_id:0 @@ -841,27 +862,27 @@ msgstr "Tworzy fakturę od dostawcy" #. module: hr_expense #: model:product.template,name:hr_expense.hotel_rent_product_template msgid "Hotel Accommodation" -msgstr "" +msgstr "Nocleg" #. module: hr_expense #: selection:hr.expense.report,month:0 msgid "April" -msgstr "" +msgstr "Kwiecień" #. module: hr_expense #: field:hr.expense.line,name:0 msgid "Expense Note" -msgstr "" +msgstr "Notatka do wydatku" #. module: hr_expense #: view:hr.expense.expense:0 msgid "Approve" -msgstr "" +msgstr "Aprobuj" #. module: hr_expense #: help:hr.expense.expense,message_ids:0 msgid "Messages and communication history" -msgstr "" +msgstr "Wiadomości i historia komunikacji" #. module: hr_expense #: field:hr.expense.line,sequence:0 @@ -895,12 +916,12 @@ msgstr "" #. module: hr_expense #: view:hr.expense.expense:0 msgid "Accounting" -msgstr "" +msgstr "Księgowość" #. module: hr_expense #: view:hr.expense.expense:0 msgid "To Approve" -msgstr "" +msgstr "Do aprobaty" #. module: hr_expense #: view:hr.expense.expense:0 diff --git a/addons/hr_holidays/i18n/de.po b/addons/hr_holidays/i18n/de.po index 0bafa9dcb50..b402c622d03 100644 --- a/addons/hr_holidays/i18n/de.po +++ b/addons/hr_holidays/i18n/de.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:02+0000\n" -"PO-Revision-Date: 2012-12-10 17:23+0000\n" +"PO-Revision-Date: 2012-12-19 23:20+0000\n" "Last-Translator: Thorsten Vocks (OpenBig.org) \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-11 04:48+0000\n" -"X-Generator: Launchpad (build 16356)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: hr_holidays #: selection:hr.holidays.status,color_name:0 @@ -833,7 +833,7 @@ msgstr "Hellgelb" #: model:ir.actions.act_window,name:hr_holidays.action_hr_available_holidays_report #: model:ir.ui.menu,name:hr_holidays.menu_hr_available_holidays_report_tree msgid "Leaves Analysis" -msgstr "Analyse Abwesenheit" +msgstr "Statistik Abwesenheit" #. module: hr_holidays #: view:hr.holidays.summary.dept:0 diff --git a/addons/hr_holidays/i18n/it.po b/addons/hr_holidays/i18n/it.po index 91085c42d5a..870a0456ae7 100644 --- a/addons/hr_holidays/i18n/it.po +++ b/addons/hr_holidays/i18n/it.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-03 16:02+0000\n" -"PO-Revision-Date: 2011-01-13 04:13+0000\n" +"PO-Revision-Date: 2012-12-19 20:59+0000\n" "Last-Translator: Nicola Riolini - Micronaet \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-04 05:38+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: hr_holidays #: selection:hr.holidays.status,color_name:0 @@ -934,7 +934,7 @@ msgstr "" #. module: hr_holidays #: view:hr.holidays:0 msgid "Approve" -msgstr "" +msgstr "Approva" #. module: hr_holidays #: help:hr.holidays,message_ids:0 diff --git a/addons/hr_timesheet/i18n/zh_CN.po b/addons/hr_timesheet/i18n/zh_CN.po index 4f33b45d4cf..fedf5a12703 100644 --- a/addons/hr_timesheet/i18n/zh_CN.po +++ b/addons/hr_timesheet/i18n/zh_CN.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-03 16:02+0000\n" -"PO-Revision-Date: 2012-10-25 17:20+0000\n" -"Last-Translator: ccdos \n" +"PO-Revision-Date: 2012-12-19 07:13+0000\n" +"Last-Translator: Wei \"oldrev\" Li \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-04 05:34+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: hr_timesheet #: model:ir.actions.act_window,help:hr_timesheet.act_analytic_cost_revenue @@ -74,7 +74,7 @@ msgstr "" #. module: hr_timesheet #: field:hr.employee,uom_id:0 msgid "Unit of Measure" -msgstr "" +msgstr "计量单位" #. module: hr_timesheet #: field:hr.employee,journal_id:0 @@ -102,7 +102,7 @@ msgstr "计工单" #: code:addons/hr_timesheet/wizard/hr_timesheet_print_employee.py:43 #, python-format msgid "Please define employee for this user!" -msgstr "" +msgstr "请为此用户定义员工信息。" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:44 @@ -128,7 +128,7 @@ msgstr "周五" #: model:ir.actions.act_window,name:hr_timesheet.act_hr_timesheet_line_evry1_all_form #: model:ir.ui.menu,name:hr_timesheet.menu_hr_working_hours msgid "Timesheet Activities" -msgstr "" +msgstr "时间表活动" #. module: hr_timesheet #: field:hr.sign.out.project,analytic_amount:0 @@ -165,12 +165,12 @@ msgstr "打印员工计工单" #: code:addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py:132 #, python-format msgid "Please define employee for your user." -msgstr "" +msgstr "请为你的用户定义员工信息。" #. module: hr_timesheet #: model:ir.actions.act_window,name:hr_timesheet.act_analytic_cost_revenue msgid "Costs & Revenues" -msgstr "" +msgstr "收支情况" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:44 @@ -187,7 +187,7 @@ msgstr "辅助核算项" #. module: hr_timesheet #: view:account.analytic.account:0 msgid "Costs and Revenues" -msgstr "" +msgstr "收支情况" #. module: hr_timesheet #: code:addons/hr_timesheet/hr_timesheet.py:141 @@ -197,7 +197,7 @@ msgstr "" #: code:addons/hr_timesheet/wizard/hr_timesheet_print_employee.py:43 #, python-format msgid "Warning!" -msgstr "" +msgstr "警告!" #. module: hr_timesheet #: field:hr.analytic.timesheet,partner_id:0 @@ -253,7 +253,7 @@ msgstr "打印" #. module: hr_timesheet #: help:account.analytic.account,use_timesheets:0 msgid "Check this field if this project manages timesheets" -msgstr "" +msgstr "如果此项目需要管理时间表的话请选中此字段" #. module: hr_timesheet #: view:hr.analytical.timesheet.users:0 @@ -279,7 +279,7 @@ msgstr "开始日期" #: code:addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py:77 #, python-format msgid "Please define cost unit for this employee." -msgstr "" +msgstr "请定义此员工的成本单位" #. module: hr_timesheet #: help:hr.employee,product_id:0 @@ -347,7 +347,7 @@ msgstr "工作说明" #: view:hr.sign.in.project:0 #: view:hr.sign.out.project:0 msgid "or" -msgstr "" +msgstr "或" #. module: hr_timesheet #: xsl:hr.analytical.timesheet:0 @@ -429,7 +429,7 @@ msgstr "6月" #: field:hr.sign.in.project,state:0 #: field:hr.sign.out.project,state:0 msgid "Current Status" -msgstr "" +msgstr "当前状态" #. module: hr_timesheet #: view:hr.analytic.timesheet:0 @@ -607,7 +607,7 @@ msgstr "项目签出" msgid "" "Please create an employee for this user, using the menu: Human Resources > " "Employees." -msgstr "" +msgstr "请为此用户创建一个员工档案,使用菜单:”人力资源“ > ”员工“。" #. module: hr_timesheet #: view:hr.analytical.timesheet.users:0 @@ -637,7 +637,7 @@ msgstr "4月" #: code:addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py:132 #, python-format msgid "User Error!" -msgstr "" +msgstr "用户错误!" #. module: hr_timesheet #: view:hr.sign.in.project:0 diff --git a/addons/hr_timesheet_invoice/i18n/fr.po b/addons/hr_timesheet_invoice/i18n/fr.po index 6af9a86c94c..867e93772a0 100644 --- a/addons/hr_timesheet_invoice/i18n/fr.po +++ b/addons/hr_timesheet_invoice/i18n/fr.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-03 16:03+0000\n" -"PO-Revision-Date: 2012-11-29 14:35+0000\n" +"PO-Revision-Date: 2012-12-19 16:04+0000\n" "Last-Translator: Numérigraphe \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-04 05:35+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: hr_timesheet_invoice #: view:report.timesheet.line:0 @@ -38,6 +38,8 @@ msgid "" "The product to invoice is defined on the employee form, the price will be " "deducted by this pricelist on the product." msgstr "" +"L'article à facturer est défini sur le formulaire de l'employé ; le prix " +"sera déduit grâce aux listes de prix de l'article." #. module: hr_timesheet_invoice #: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_analytic_profit.py:58 @@ -142,6 +144,9 @@ msgid "" "Fill this field only if you want to force to use a specific product. Keep " "empty to use the real product that comes from the cost." msgstr "" +"Ne remplissez ce champ que si vous souhaitez forcer l'utilisation d'un " +"article spécifique. Laissez vide pour utiliser l'article réel provenant des " +"coûts." #. module: hr_timesheet_invoice #: model:ir.actions.act_window,help:hr_timesheet_invoice.action_hr_timesheet_invoice_factor_form @@ -294,7 +299,7 @@ msgstr "Coûts à facturer" #: code:addons/hr_timesheet_invoice/hr_timesheet_invoice.py:267 #, python-format msgid "Please define income account for product '%s'." -msgstr "" +msgstr "Veuillez définir le compte de revenus de l'article \"%s\"." #. module: hr_timesheet_invoice #: field:report.account.analytic.line.to.invoice,account_id:0 @@ -355,7 +360,7 @@ msgstr "Profit sur la feuille de temps" #. module: hr_timesheet_invoice #: field:hr.timesheet.invoice.create,product:0 msgid "Force Product" -msgstr "" +msgstr "Forcer l'article" #. module: hr_timesheet_invoice #: view:account.analytic.account:0 diff --git a/addons/hr_timesheet_sheet/i18n/fr.po b/addons/hr_timesheet_sheet/i18n/fr.po index 5267dfc71d4..b17f7f99fd1 100644 --- a/addons/hr_timesheet_sheet/i18n/fr.po +++ b/addons/hr_timesheet_sheet/i18n/fr.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-03 16:02+0000\n" -"PO-Revision-Date: 2012-11-29 15:11+0000\n" +"PO-Revision-Date: 2012-12-19 16:05+0000\n" "Last-Translator: Numérigraphe \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-04 05:36+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: hr_timesheet_sheet #: field:hr.analytic.timesheet,sheet_id:0 @@ -507,6 +507,8 @@ msgid "" "In order to create a timesheet for this employee, you must link the employee " "to a product, like 'Consultant'." msgstr "" +"Pour créer une feuille de temps pour cet employé, vous devez lier l'employé " +"à un article, comme par exemple \"Consultant\"." #. module: hr_timesheet_sheet #: selection:hr.timesheet.report,month:0 @@ -558,6 +560,8 @@ msgid "" "In order to create a timesheet for this employee, you must link the employee " "to a product." msgstr "" +"Pour créer une feuille de temps pour cet employé, vous devez lier l'employé " +"à un article." #. module: hr_timesheet_sheet #. openerp-web diff --git a/addons/l10n_be_invoice_bba/i18n/es.po b/addons/l10n_be_invoice_bba/i18n/es.po index bad2107a976..9fa89bb4a96 100644 --- a/addons/l10n_be_invoice_bba/i18n/es.po +++ b/addons/l10n_be_invoice_bba/i18n/es.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-24 02:53+0000\n" -"PO-Revision-Date: 2012-12-12 15:09+0000\n" +"PO-Revision-Date: 2012-12-19 11:34+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: 2012-12-13 04:44+0000\n" -"X-Generator: Launchpad (build 16361)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: l10n_be_invoice_bba #: sql_constraint:account.invoice:0 @@ -107,7 +107,7 @@ msgstr "¡Advertencia!" #. module: l10n_be_invoice_bba #: selection:res.partner,out_inv_comm_algorithm:0 msgid "Customer Reference" -msgstr "Referencia cliente" +msgstr "Referencia del cliente" #. module: l10n_be_invoice_bba #: field:res.partner,out_inv_comm_type:0 diff --git a/addons/l10n_bo/i18n/es.po b/addons/l10n_bo/i18n/es.po index 9d12c53b71c..31a9c787753 100644 --- a/addons/l10n_bo/i18n/es.po +++ b/addons/l10n_bo/i18n/es.po @@ -8,33 +8,33 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2011-01-10 13:46+0000\n" -"Last-Translator: Yury Tello \n" +"PO-Revision-Date: 2012-12-19 21:41+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: 2011-01-15 05:56+0000\n" -"X-Generator: Launchpad (build 12177)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: l10n_ar #: model:ir.module.module,description:l10n_ar.module_meta_information msgid "" "\n" -" Bolivian Accounting : chart of Account\n" +" Argentinian Accounting : chart of Account\n" " " msgstr "" "\n" -" Contabilidad Peruana : Plan de cuentas\n" +" Contabilidad argentina : Plan de cuentas\n" " " -#. module: l10n_bo -#: model:ir.module.module,shortdesc:l10n_bo.module_meta_information -msgid "Bolivian Chart of Account" -msgstr "Plan de cuentas de Boliviana" +#. module: l10n_ar +#: model:ir.module.module,shortdesc:l10n_ar.module_meta_information +msgid "Argentinian Chart of Account" +msgstr "Plan de cuentas de Argentina" -#. module: l10n_bo -#: model:ir.actions.todo,note:l10n_bo.config_call_account_template_in_minimal +#. module: l10n_ar +#: model:ir.actions.todo,note:l10n_ar.config_call_account_template_in_minimal msgid "" "Generate Chart of Accounts from a Chart Template. You will be asked to pass " "the name of the company, the chart template to follow, the no. of digits to " @@ -45,28 +45,10 @@ msgid "" "Chart of Accounts from a Chart Template." msgstr "" "Generar el plan contable a partir de una plantilla de plan contable. Se le " -"pedirá el nombre de la compañia, la plantilla de plan contable a utilizar, " +"pedirá el nombre de la compañía, la plantilla de plan contable a utilizar, " "el número de dígitos para generar el código de las cuentas y de la cuenta " -"bancaria, la moneda para crear los diarios. Así pues, se genere una copia " +"bancaria, la moneda para crear los diarios. Así pues, se genera una copia " "exacta de la plantilla de plan contable.\n" -"\tEste es el mismo asistente que se ejecuta desde Contabilidad y finanzas / " +"\tÉste es el mismo asistente que se ejecuta desde Contabilidad / " "Configuración / Contabilidad financiera / Cuentas financieras / Generar el " "plan contable a partir de una plantilla de plan contable." - -#~ msgid "Liability" -#~ msgstr "Pasivo" - -#~ msgid "Asset" -#~ msgstr "Activo" - -#~ msgid "Closed" -#~ msgstr "Cerrado" - -#~ msgid "Income" -#~ msgstr "Ingreso" - -#~ msgid "Expense" -#~ msgstr "Gasto" - -#~ msgid "View" -#~ msgstr "Vista" diff --git a/addons/l10n_in_hr_payroll/i18n/es.po b/addons/l10n_in_hr_payroll/i18n/es.po index b6943fc2b95..9fba3d392da 100644 --- a/addons/l10n_in_hr_payroll/i18n/es.po +++ b/addons/l10n_in_hr_payroll/i18n/es.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-24 02:53+0000\n" -"PO-Revision-Date: 2012-12-13 16:00+0000\n" +"PO-Revision-Date: 2012-12-19 17:44+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: 2012-12-14 05:38+0000\n" -"X-Generator: Launchpad (build 16369)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: l10n_in_hr_payroll #: report:salary.detail.byyear:0 @@ -30,7 +30,7 @@ msgstr "Cuenta bancaria del empleado" #. module: l10n_in_hr_payroll #: view:payment.advice.report:0 msgid "Payment Advices which are in draft state" -msgstr "" +msgstr "Avisos de pago que se encuentran en estado borrador" #. module: l10n_in_hr_payroll #: report:salary.detail.byyear:0 @@ -40,12 +40,12 @@ msgstr "Título" #. module: l10n_in_hr_payroll #: report:payroll.advice:0 msgid "Payment Advice from" -msgstr "" +msgstr "Aviso de pago de" #. module: l10n_in_hr_payroll #: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail msgid "Hr Salary Employee By Category Report" -msgstr "" +msgstr "Informe de salario del empleado por categoría" #. module: l10n_in_hr_payroll #: view:payslip.report:0 @@ -62,7 +62,7 @@ msgstr "Agrupar por ..." #. module: l10n_in_hr_payroll #: report:salary.detail.byyear:0 msgid "Allowances with Basic:" -msgstr "" +msgstr "Derechos de emisión con base:" #. module: l10n_in_hr_payroll #: view:payslip.report:0 diff --git a/addons/mail/i18n/et.po b/addons/mail/i18n/et.po index dc7597eb4c4..2750fbccc5e 100644 --- a/addons/mail/i18n/et.po +++ b/addons/mail/i18n/et.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-17 17:59+0000\n" +"PO-Revision-Date: 2012-12-19 20:42+0000\n" "Last-Translator: Ahti Hinnov \n" "Language-Team: Estonian \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-18 05:02+0000\n" -"X-Generator: Launchpad (build 16372)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: mail #: field:res.partner,notification_email_send:0 @@ -688,7 +688,7 @@ msgstr "" #: code:addons/mail/static/src/xml/mail.xml:44 #, python-format msgid "Share with my followers..." -msgstr "" +msgstr "Jaga minu jälgijatega..." #. module: mail #: field:mail.notification,partner_id:0 @@ -1120,7 +1120,7 @@ msgstr "" #: code:addons/mail/static/src/xml/mail.xml:213 #, python-format msgid "Mark as Todo" -msgstr "" +msgstr "Märgi tegemist vajavaks" #. module: mail #: field:mail.group,message_summary:0 @@ -1160,7 +1160,7 @@ msgstr "" #: code:addons/mail/static/src/xml/mail_followers.xml:13 #, python-format msgid "Following" -msgstr "" +msgstr "Jälgin" #. module: mail #: sql_constraint:mail.alias:0 @@ -1321,7 +1321,7 @@ msgstr "" #: code:addons/mail/static/src/xml/mail_followers.xml:22 #, python-format msgid "Invite others" -msgstr "" +msgstr "Kutsu teisi" #. module: mail #: help:mail.group,public:0 diff --git a/addons/membership/i18n/fr.po b/addons/membership/i18n/fr.po index c46a44d6559..52faa0b3e6c 100644 --- a/addons/membership/i18n/fr.po +++ b/addons/membership/i18n/fr.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-12-03 16:03+0000\n" -"PO-Revision-Date: 2012-11-29 15:06+0000\n" -"Last-Translator: Numérigraphe \n" +"PO-Revision-Date: 2012-12-19 16:07+0000\n" +"Last-Translator: WANTELLET Sylvain \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-04 05:13+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:43+0000\n" +"X-Generator: Launchpad (build 16378)\n" "Language: \n" #. module: membership @@ -110,7 +110,7 @@ msgstr "" #: field:report.membership,user_id:0 #: view:res.partner:0 msgid "Salesperson" -msgstr "" +msgstr "Vendeur" #. module: membership #: model:process.transition,name:membership.process_transition_waitingtoinvoice0 @@ -137,7 +137,7 @@ msgstr "Non membre" #. module: membership #: view:product.product:0 msgid "Taxes" -msgstr "" +msgstr "Taxes" #. module: membership #: view:res.partner:0 @@ -149,7 +149,7 @@ msgstr "Tous les membres" #: code:addons/membership/membership.py:413 #, python-format msgid "Error!" -msgstr "" +msgstr "Erreur!" #. module: membership #: model:process.transition,name:membership.process_transition_producttomember0 @@ -433,7 +433,7 @@ msgstr "Catégorie" #. module: membership #: view:res.partner:0 msgid "Contacts" -msgstr "" +msgstr "Contacts" #. module: membership #: view:report.membership:0 @@ -478,7 +478,7 @@ msgstr "Clients" #. module: membership #: view:membership.invoice:0 msgid "or" -msgstr "" +msgstr "ou" #. module: membership #: selection:report.membership,month:0 @@ -505,7 +505,7 @@ msgstr "Juin" #. module: membership #: help:product.product,membership:0 msgid "Check if the product is eligible for membership." -msgstr "" +msgstr "Cochez si l'article est éligible pour l'adhésion" #. module: membership #: selection:membership.membership_line,state:0 diff --git a/addons/mrp/i18n/sl.po b/addons/mrp/i18n/sl.po index 08121a9cfe2..ec83f1bb0a9 100644 --- a/addons/mrp/i18n/sl.po +++ b/addons/mrp/i18n/sl.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-03 16:02+0000\n" -"PO-Revision-Date: 2012-12-18 21:34+0000\n" -"Last-Translator: Dusan Laznik \n" +"PO-Revision-Date: 2012-12-19 13:57+0000\n" +"Last-Translator: Vida Potočnik \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-19 05:15+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:43+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: mrp @@ -820,7 +820,7 @@ msgstr "Datum izpisa" #: model:process.node,name:mrp.process_node_orderrfq0 #: model:process.node,name:mrp.process_node_rfq0 msgid "RFQ" -msgstr "" +msgstr "Zahteva za ponudbo" #. module: mrp #: model:process.transition,name:mrp.process_transition_producttostockrules0 @@ -913,7 +913,7 @@ msgstr "" #: field:mrp.production,message_is_follower:0 #: field:mrp.production.workcenter.line,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "Je sledilec" #. module: mrp #: view:mrp.bom:0 @@ -964,7 +964,7 @@ msgstr "" #. module: mrp #: model:ir.model,name:mrp.model_res_company msgid "Companies" -msgstr "" +msgstr "Podjetja" #. module: mrp #: code:addons/mrp/mrp.py:649 @@ -1112,7 +1112,7 @@ msgstr "" #: help:mrp.production,message_ids:0 #: help:mrp.production.workcenter.line,message_ids:0 msgid "Messages and communication history" -msgstr "" +msgstr "Sporočila in zgodovina sporočil" #. module: mrp #: field:mrp.workcenter.load,measure_unit:0 @@ -1163,7 +1163,7 @@ msgstr "" #: view:mrp.routing:0 #: view:mrp.workcenter:0 msgid "Group By..." -msgstr "" +msgstr "Združi po..." #. module: mrp #: code:addons/mrp/report/price.py:130 @@ -1221,7 +1221,7 @@ msgstr "" #: field:mrp.production,message_unread:0 #: field:mrp.production.workcenter.line,message_unread:0 msgid "Unread Messages" -msgstr "" +msgstr "Neprebrana sporočila" #. module: mrp #: model:process.transition,note:mrp.process_transition_stockmts0 @@ -1251,7 +1251,7 @@ msgstr "" #: field:mrp.production,bom_id:0 #: model:process.node,name:mrp.process_node_billofmaterial0 msgid "Bill of Material" -msgstr "" +msgstr "Kosovnica" #. module: mrp #: view:mrp.workcenter.load:0 @@ -1264,7 +1264,7 @@ msgstr "" #: model:ir.ui.menu,name:mrp.menu_mrp_product_form #: view:mrp.config.settings:0 msgid "Products" -msgstr "" +msgstr "Izdelki" #. module: mrp #: view:report.workcenter.load:0 @@ -1274,7 +1274,7 @@ msgstr "Zasedenost delovne faze" #. module: mrp #: help:mrp.production,location_dest_id:0 msgid "Location where the system will stock the finished products." -msgstr "" +msgstr "Lokacija gotovih izdelkov" #. module: mrp #: help:mrp.routing.workcenter,routing_id:0 @@ -1318,7 +1318,7 @@ msgstr "Prioriteta" #: model:ir.model,name:mrp.model_stock_picking #: field:mrp.production,picking_id:0 msgid "Picking List" -msgstr "" +msgstr "Prevzemnica" #. module: mrp #: help:mrp.production,bom_id:0 @@ -1359,7 +1359,7 @@ msgstr "" #. module: mrp #: constraint:mrp.production:0 msgid "Order quantity cannot be negative or zero!" -msgstr "" +msgstr "Naročena količina mora biti večja od 0" #. module: mrp #: model:process.transition,note:mrp.process_transition_stockrfq0 @@ -1441,7 +1441,7 @@ msgstr "" #: field:mrp.production,product_uom:0 #: field:mrp.production.product.line,product_uom:0 msgid "Product Unit of Measure" -msgstr "" +msgstr "Enota mere izdelka" #. module: mrp #: view:mrp.production:0 @@ -1578,7 +1578,7 @@ msgstr "" #. module: mrp #: field:mrp.production,user_id:0 msgid "Responsible" -msgstr "" +msgstr "Odgovoren" #. module: mrp #: model:ir.actions.act_window,name:mrp.mrp_production_action2 @@ -1632,7 +1632,7 @@ msgstr "" #: field:mrp.bom,product_uos:0 #: field:mrp.production.product.line,product_uos:0 msgid "Product UOS" -msgstr "" +msgstr "Prodajna ME proizvoda" #. module: mrp #: view:mrp.production:0 @@ -1668,7 +1668,7 @@ msgstr "Končni datum" #. module: mrp #: field:mrp.workcenter,resource_id:0 msgid "Resource" -msgstr "" +msgstr "Vir" #. module: mrp #: help:mrp.bom,date_start:0 @@ -1729,7 +1729,7 @@ msgstr "" #. module: mrp #: model:res.groups,name:mrp.group_mrp_manager msgid "Manager" -msgstr "" +msgstr "Vodja" #. module: mrp #: view:mrp.bom:0 @@ -1769,17 +1769,17 @@ msgstr "" #: model:process.node,name:mrp.process_node_serviceproduct0 #: model:process.node,name:mrp.process_node_serviceproduct1 msgid "Service" -msgstr "" +msgstr "Storitev" #. module: mrp #: selection:mrp.production,state:0 msgid "Cancelled" -msgstr "" +msgstr "Preklicano" #. module: mrp #: view:mrp.production:0 msgid "(Update)" -msgstr "" +msgstr "(Posodobi)" #. module: mrp #: help:mrp.config.settings,module_mrp_operations:0 @@ -1812,12 +1812,12 @@ msgstr "" #: field:mrp.routing.workcenter,company_id:0 #: view:mrp.workcenter:0 msgid "Company" -msgstr "" +msgstr "Podjetje" #. module: mrp #: view:mrp.bom:0 msgid "Default Unit of Measure" -msgstr "" +msgstr "Privzeta EM" #. module: mrp #: field:mrp.workcenter,time_cycle:0 @@ -1843,7 +1843,7 @@ msgstr "" #: field:mrp.production,message_ids:0 #: field:mrp.production.workcenter.line,message_ids:0 msgid "Messages" -msgstr "" +msgstr "Sporočila" #. module: mrp #: view:mrp.production:0 @@ -1856,7 +1856,7 @@ msgstr "" #: code:addons/mrp/wizard/change_production_qty.py:88 #, python-format msgid "Error!" -msgstr "" +msgstr "Napaka!" #. module: mrp #: code:addons/mrp/report/price.py:139 @@ -1900,7 +1900,7 @@ msgstr "" #: code:addons/mrp/mrp.py:284 #, python-format msgid "Warning" -msgstr "" +msgstr "Opozorilo" #. module: mrp #: field:mrp.bom,product_uos_qty:0 @@ -1935,7 +1935,7 @@ msgstr "" #: field:mrp.production,message_follower_ids:0 #: field:mrp.production.workcenter.line,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "Sledilci" #. module: mrp #: help:mrp.bom,active:0 @@ -1952,7 +1952,7 @@ msgstr "" #. module: mrp #: selection:mrp.production,state:0 msgid "New" -msgstr "" +msgstr "Nov" #. module: mrp #: selection:mrp.product.produce,mode:0 @@ -2119,7 +2119,7 @@ msgstr "" #. module: mrp #: model:res.groups,name:mrp.group_mrp_user msgid "User" -msgstr "" +msgstr "Uporabnik" #. module: mrp #: selection:mrp.product.produce,mode:0 @@ -2144,7 +2144,7 @@ msgstr "" #: field:mrp.production.workcenter.line,message_comment_ids:0 #: help:mrp.production.workcenter.line,message_comment_ids:0 msgid "Comments and emails" -msgstr "" +msgstr "Pripombe in e-pošta" #. module: mrp #: code:addons/mrp/mrp.py:784 @@ -2353,7 +2353,7 @@ msgstr "" #: field:mrp.production,message_summary:0 #: field:mrp.production.workcenter.line,message_summary:0 msgid "Summary" -msgstr "" +msgstr "Povzetek" #. module: mrp #: model:process.transition,name:mrp.process_transition_purchaseprocure0 diff --git a/addons/note_pad/i18n/pl.po b/addons/note_pad/i18n/pl.po new file mode 100644 index 00000000000..73688218d21 --- /dev/null +++ b/addons/note_pad/i18n/pl.po @@ -0,0 +1,28 @@ +# Polish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-11-24 02:53+0000\n" +"PO-Revision-Date: 2012-12-19 17:56+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: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" + +#. module: note_pad +#: model:ir.model,name:note_pad.model_note_note +msgid "Note" +msgstr "Notatka" + +#. module: note_pad +#: field:note.note,note_pad_url:0 +msgid "Pad Url" +msgstr "" diff --git a/addons/pad/i18n/pl.po b/addons/pad/i18n/pl.po new file mode 100644 index 00000000000..70f9511e0f3 --- /dev/null +++ b/addons/pad/i18n/pl.po @@ -0,0 +1,69 @@ +# Polish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +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-19 17:56+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: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" + +#. module: pad +#. openerp-web +#: code:addons/pad/static/src/xml/pad.xml:27 +#, python-format +msgid "Ñ" +msgstr "" + +#. module: pad +#: model:ir.model,name:pad.model_pad_common +msgid "pad.common" +msgstr "" + +#. module: pad +#: help:res.company,pad_key:0 +msgid "Etherpad lite api key." +msgstr "" + +#. module: pad +#: model:ir.model,name:pad.model_res_company +msgid "Companies" +msgstr "Firmy" + +#. module: pad +#. openerp-web +#: code:addons/pad/static/src/xml/pad.xml:10 +#, python-format +msgid "" +"You must configure the etherpad through the menu Setting > Companies > " +"Companies, in the configuration tab of your company." +msgstr "" + +#. module: pad +#: view:res.company:0 +msgid "Pads" +msgstr "" + +#. module: pad +#: field:res.company,pad_server:0 +msgid "Pad Server" +msgstr "" + +#. module: pad +#: field:res.company,pad_key:0 +msgid "Pad Api Key" +msgstr "" + +#. module: pad +#: help:res.company,pad_server:0 +msgid "Etherpad lite server. Example: beta.primarypad.com" +msgstr "" diff --git a/addons/pad_project/i18n/pl.po b/addons/pad_project/i18n/pl.po new file mode 100644 index 00000000000..0aa6aebb9d8 --- /dev/null +++ b/addons/pad_project/i18n/pl.po @@ -0,0 +1,38 @@ +# Polish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-11-24 02:53+0000\n" +"PO-Revision-Date: 2012-12-19 17:56+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: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" + +#. module: pad_project +#: constraint:project.task:0 +msgid "Error ! Task end-date must be greater then task start-date" +msgstr "Błąd ! Data końcowa musi być późniejsza niż data początkowa" + +#. module: pad_project +#: field:project.task,description_pad:0 +msgid "Description PAD" +msgstr "" + +#. module: pad_project +#: model:ir.model,name:pad_project.model_project_task +msgid "Task" +msgstr "Zadanie" + +#. module: pad_project +#: constraint:project.task:0 +msgid "Error ! You cannot create recursive tasks." +msgstr "Błąd ! Nie możesz tworzyć rekurencyjnych zadań." diff --git a/addons/plugin_outlook/i18n/de.po b/addons/plugin_outlook/i18n/de.po index b0344bd4eaa..8c4f0f36cf3 100644 --- a/addons/plugin_outlook/i18n/de.po +++ b/addons/plugin_outlook/i18n/de.po @@ -8,24 +8,24 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-24 02:53+0000\n" -"PO-Revision-Date: 2012-02-09 15:38+0000\n" +"PO-Revision-Date: 2012-12-19 14:35+0000\n" "Last-Translator: Ferdinand @ Camptocamp \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-11-25 06:29+0000\n" -"X-Generator: Launchpad (build 16293)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: plugin_outlook #: field:outlook.installer,plugin32:0 msgid "Outlook Plug-in 32bits" -msgstr "" +msgstr "Outlook Plug-in 32bits" #. module: plugin_outlook #: view:sale.config.settings:0 msgid "Download and install the plug-in" -msgstr "" +msgstr "Herunterladen und Installieren des Plug-Ins" #. module: plugin_outlook #: model:ir.model,name:plugin_outlook.model_outlook_installer @@ -35,7 +35,7 @@ msgstr "outlook.installer" #. module: plugin_outlook #: view:outlook.installer:0 msgid "MS .Net Framework 3.5 or above." -msgstr "" +msgstr "MS .Net Framework 3.5 oder höher." #. module: plugin_outlook #: model:ir.actions.act_window,name:plugin_outlook.action_outlook_installer @@ -48,7 +48,7 @@ msgstr "Installiere Outlook Plugin" #. module: plugin_outlook #: view:outlook.installer:0 msgid "System requirements:" -msgstr "" +msgstr "System Voraussetzungen" #. module: plugin_outlook #: view:outlook.installer:0 @@ -61,21 +61,23 @@ msgid "" "Click on the link above to download the installer for either 32 or 64 bits, " "and execute it." msgstr "" +"Klicken Sie auf den obigen Link um die 32 oder 64 bit version zu laden und " +"danach installieren." #. module: plugin_outlook #: view:outlook.installer:0 msgid "MS Outlook 2005 or above." -msgstr "" +msgstr "MS Outlook 2005 oder höher." #. module: plugin_outlook #: view:outlook.installer:0 msgid "Close" -msgstr "" +msgstr "Schließen" #. module: plugin_outlook #: field:outlook.installer,plugin64:0 msgid "Outlook Plug-in 64bits" -msgstr "" +msgstr "Outlook Plug-in 64bits" #. module: plugin_outlook #: view:outlook.installer:0 @@ -87,6 +89,8 @@ msgstr "Abfolge Installation und Konfiguration" #: help:outlook.installer,plugin64:0 msgid "Outlook plug-in file. Save this file and install it in Outlook." msgstr "" +"Outlook plug-in Datei. Speichern Sie diese Datei und installieren Sie diese " +"dann in Outlook." #~ msgid "Outlook Plug-in" #~ msgstr "Outlook Plug-in" diff --git a/addons/point_of_sale/i18n/de.po b/addons/point_of_sale/i18n/de.po index d04d3324748..c9c6cd37d91 100644 --- a/addons/point_of_sale/i18n/de.po +++ b/addons/point_of_sale/i18n/de.po @@ -7,15 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:02+0000\n" -"PO-Revision-Date: 2012-12-17 21:24+0000\n" -"Last-Translator: Thorsten Vocks (OpenBig.org) \n" +"PO-Revision-Date: 2012-12-19 23:37+0000\n" +"Last-Translator: Ferdinand @ Camptocamp \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-18 04:59+0000\n" -"X-Generator: Launchpad (build 16372)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:44+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: point_of_sale #: field:report.transaction.pos,product_nb:0 @@ -299,7 +298,7 @@ msgstr "Gesamt Rabatt" #: code:addons/point_of_sale/static/src/xml/pos.xml:447 #, python-format msgid "Debug Window" -msgstr "" +msgstr "Fehlerdiagnosefenster" #. module: point_of_sale #. openerp-web @@ -307,7 +306,7 @@ msgstr "" #: code:addons/point_of_sale/static/src/xml/pos.xml:616 #, python-format msgid "Change:" -msgstr "Ändern:" +msgstr "Wechselgeld:" #. module: point_of_sale #: model:product.template,name:point_of_sale.coca_regular_2l_product_template @@ -507,7 +506,7 @@ msgstr "" #. module: point_of_sale #: view:pos.session:0 msgid "Validate & Open Session" -msgstr "" +msgstr "Quittiere & Öffne Kassensitzung" #. module: point_of_sale #: code:addons/point_of_sale/point_of_sale.py:101 @@ -554,7 +553,7 @@ msgstr "Kassiervorgänge" #: code:addons/point_of_sale/static/src/xml/pos.xml:42 #, python-format msgid "Google Chrome" -msgstr "" +msgstr "Google Chrome" #. module: point_of_sale #: model:pos.category,name:point_of_sale.sparkling_water @@ -972,7 +971,7 @@ msgstr "Journal" #. module: point_of_sale #: view:pos.session:0 msgid "Statements" -msgstr "" +msgstr "Kassenbücher" #. module: point_of_sale #: report:pos.details:0 @@ -997,7 +996,7 @@ msgstr "Summe bezahlt" #. module: point_of_sale #: model:ir.model,name:point_of_sale.model_pos_session_opening msgid "pos.session.opening" -msgstr "" +msgstr "pos.session.opening" #. module: point_of_sale #: view:res.users:0 @@ -1111,7 +1110,7 @@ msgstr "Definieren Sie eine benutzerdefinierte EAN" #: code:addons/point_of_sale/static/src/xml/pos.xml:237 #, python-format msgid "Remaining:" -msgstr "Verbleibend:" +msgstr "Restbetrag:" #. module: point_of_sale #: model:pos.category,name:point_of_sale.legumes @@ -1338,7 +1337,7 @@ msgstr "Meine Verkäufe" #. module: point_of_sale #: view:pos.config:0 msgid "Set to Deprecated" -msgstr "" +msgstr "Als abgelaufen hinterlegen" #. module: point_of_sale #: model:product.template,name:point_of_sale.limon_product_template @@ -1382,7 +1381,7 @@ msgstr "" #: code:addons/point_of_sale/static/src/xml/pos.xml:334 #, python-format msgid "Choose your type of receipt:" -msgstr "" +msgstr "Wählen Sie den Belegtyp:" #. module: point_of_sale #: model:ir.model,name:point_of_sale.model_report_sales_by_margin_pos_month @@ -1608,7 +1607,7 @@ msgstr "Benutzer" #: code:addons/point_of_sale/static/src/xml/pos.xml:188 #, python-format msgid "Kg" -msgstr "" +msgstr "kg" #. module: point_of_sale #: field:product.product,available_in_pos:0 @@ -1618,7 +1617,7 @@ msgstr "Verfügbar am Point Of Sale" #. module: point_of_sale #: selection:pos.config,state:0 msgid "Deprecated" -msgstr "" +msgstr "Aufgelassen" #. module: point_of_sale #: model:product.template,name:point_of_sale.coca_light_decaf_33cl_product_template @@ -1656,7 +1655,7 @@ msgstr "" #. module: point_of_sale #: model:ir.model,name:point_of_sale.model_pos_config msgid "pos.config" -msgstr "" +msgstr "pos.config" #. module: point_of_sale #: view:pos.ean_wizard:0 @@ -1881,7 +1880,7 @@ msgstr "Coca-Cola (normal) 33cl" #: code:addons/point_of_sale/static/src/xml/pos.xml:335 #, python-format msgid "Ticket" -msgstr "" +msgstr "Beleg" #. module: point_of_sale #: field:pos.session,cash_register_difference:0 @@ -2370,7 +2369,7 @@ msgstr "Juli" #: model:ir.ui.menu,name:point_of_sale.menu_pos_config_pos #: view:pos.session:0 msgid "Point of Sales" -msgstr "" +msgstr "Kassenmodul (Verkauf)" #. module: point_of_sale #: report:pos.details:0 @@ -2973,7 +2972,7 @@ msgstr "Benutzer" #. module: point_of_sale #: view:pos.details:0 msgid "POS Details" -msgstr "" +msgstr "POS Details" #. module: point_of_sale #. openerp-web @@ -3042,7 +3041,7 @@ msgstr "Bitte haben Sie Geduld, Hilfe ist auf dem Weg" #. module: point_of_sale #: model:ir.model,name:point_of_sale.model_pos_session msgid "pos.session" -msgstr "" +msgstr "pos.session" #. module: point_of_sale #: help:pos.session,config_id:0 @@ -3406,7 +3405,7 @@ msgstr "" #. module: point_of_sale #: model:ir.model,name:point_of_sale.model_cash_box_out msgid "cash.box.out" -msgstr "" +msgstr "cash.box.out" #. module: point_of_sale #: model:product.template,name:point_of_sale.fanta_zero_orange_33cl_product_template @@ -3450,7 +3449,7 @@ msgstr "" #: code:addons/point_of_sale/static/src/xml/pos.xml:521 #, python-format msgid "discount" -msgstr "" +msgstr "Rabatt" #. module: point_of_sale #: model:product.template,name:point_of_sale.coca_regular_1l_product_template @@ -3491,7 +3490,7 @@ msgstr "Dezember" #. module: point_of_sale #: field:pos.category,image:0 msgid "Image" -msgstr "" +msgstr "Bild" #. module: point_of_sale #: model:product.template,name:point_of_sale.spa_gazeuse_1,5l_product_template @@ -3781,7 +3780,7 @@ msgstr "Gutschrift" #: code:addons/point_of_sale/static/src/xml/pos.xml:427 #, python-format msgid "Your shopping cart is empty" -msgstr "Ihre Shopping Karte ist leer." +msgstr "Ihr Warenkorb ist leer" #. module: point_of_sale #: code:addons/point_of_sale/report/pos_invoice.py:46 @@ -4058,7 +4057,7 @@ msgstr "" #: code:addons/point_of_sale/static/src/xml/pos.xml:41 #, python-format msgid "Mozilla Firefox" -msgstr "" +msgstr "Mozilla Firefox" #. module: point_of_sale #: model:product.template,name:point_of_sale.raisins_noir_product_template @@ -4093,6 +4092,7 @@ msgstr "Verkäufer Heute" #, python-format msgid "Sorry, we could not create a session for this user." msgstr "" +"Bedauerlicher Weise kann keine Sitzung für diesen Benutzer erstellt werden." #. module: point_of_sale #: code:addons/point_of_sale/point_of_sale.py:100 @@ -4100,7 +4100,7 @@ msgstr "" #: selection:pos.session.opening,pos_state:0 #, python-format msgid "Opening Control" -msgstr "" +msgstr "Öffnung Kontrolle" #. module: point_of_sale #: view:report.pos.order:0 @@ -4123,7 +4123,7 @@ msgstr "" #. module: point_of_sale #: model:ir.model,name:point_of_sale.model_cash_box_in msgid "cash.box.in" -msgstr "" +msgstr "cash.box.in" #. module: point_of_sale #: model:ir.actions.act_window,name:point_of_sale.act_pos_session_orders @@ -4131,7 +4131,7 @@ msgstr "" #: model:ir.ui.menu,name:point_of_sale.menu_point_ofsale #: field:pos.session,order_ids:0 msgid "Orders" -msgstr "" +msgstr "Bestellungen" #~ msgid "," #~ msgstr "." diff --git a/addons/point_of_sale/i18n/es.po b/addons/point_of_sale/i18n/es.po index 95b52228065..5e3379f573e 100644 --- a/addons/point_of_sale/i18n/es.po +++ b/addons/point_of_sale/i18n/es.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-03 16:02+0000\n" -"PO-Revision-Date: 2012-12-18 15:41+0000\n" -"Last-Translator: Ana Juaristi Olalde \n" +"PO-Revision-Date: 2012-12-19 19:01+0000\n" +"Last-Translator: Pedro Manuel Baeza \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-19 05:15+0000\n" +"X-Launchpad-Export-Date: 2012-12-20 04:44+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: point_of_sale @@ -42,11 +42,22 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para definir una nueva categoría.\n" +"

\n" +"Las categorías se usan para examinar sus productos a lo largo del interfaz " +"de pantalla táctil.\n" +"

\n" +"Si pone una foto en la categoría, el interfaz la mostrará automáticamente. " +"Recomendamos no pone fotos en las categorías para pantallas pequeñas " +"(1024x768).\n" +"

\n" +" " #. module: point_of_sale #: view:pos.receipt:0 msgid "Print the Receipt of the Sale" -msgstr "Imprimir ticket de la venta" +msgstr "Imprimir recibo de la venta" #. module: point_of_sale #: field:pos.session,cash_register_balance_end:0 @@ -62,7 +73,7 @@ msgstr "Hoy" #. module: point_of_sale #: field:pos.config,iface_electronic_scale:0 msgid "Electronic Scale Interface" -msgstr "" +msgstr "Interfaz para balanza electrónica" #. module: point_of_sale #: model:pos.category,name:point_of_sale.plain_water @@ -72,14 +83,14 @@ msgstr "Agua corriente" #. module: point_of_sale #: model:product.template,name:point_of_sale.poire_conference_product_template msgid "Conference pears" -msgstr "" +msgstr "Peras conferencia" #. module: point_of_sale #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:408 #, python-format msgid "ã" -msgstr "" +msgstr "ã" #. module: point_of_sale #: field:pos.config,journal_id:0 @@ -128,13 +139,13 @@ msgstr "Nombre del Producto" #. module: point_of_sale #: model:product.template,name:point_of_sale.pamplemousse_rouge_pamplemousse_product_template msgid "Red grapefruit" -msgstr "" +msgstr "Pomelo rojo" #. module: point_of_sale #: code:addons/point_of_sale/point_of_sale.py:1343 #, python-format msgid "Assign a Custom EAN" -msgstr "" +msgstr "Asignar un EAN personalizado" #. module: point_of_sale #: view:pos.session.opening:0 @@ -143,6 +154,8 @@ msgid "" " being able to start selling through the " "touchscreen interface." msgstr "" +"Debe controlar su cantidad de efectivo en su caja registrador, antes de " +"comenzar a vender a través del interfaz de pantalla táctil." #. module: point_of_sale #: report:account.statement:0 @@ -164,12 +177,12 @@ msgstr "Sacar dinero" #: code:addons/point_of_sale/point_of_sale.py:107 #, python-format msgid "not used" -msgstr "" +msgstr "no usado" #. module: point_of_sale #: field:pos.config,iface_vkeyboard:0 msgid "Virtual KeyBoard Interface" -msgstr "" +msgstr "Interfaz de teclado virtual" #. module: point_of_sale #. openerp-web @@ -181,7 +194,7 @@ msgstr "+/-" #. module: point_of_sale #: field:pos.ean_wizard,ean13_pattern:0 msgid "Reference" -msgstr "" +msgstr "Referencia" #. module: point_of_sale #: code:addons/point_of_sale/point_of_sale.py:1040 @@ -200,32 +213,32 @@ msgstr "Fecha inicial" #. module: point_of_sale #: constraint:pos.session:0 msgid "You cannot create two active sessions with the same responsible!" -msgstr "" +msgstr "¡No puede crear dos sesiones activas con el mismo responsable!" #. module: point_of_sale #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:479 #, python-format msgid "Weighting" -msgstr "" +msgstr "Pesando" #. module: point_of_sale #: model:product.template,name:point_of_sale.fenouil_fenouil_product_template msgid "Fennel" -msgstr "" +msgstr "Hinojo" #. module: point_of_sale #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:478 #, python-format msgid "Help needed" -msgstr "" +msgstr "Se necesita ayuda" #. module: point_of_sale #: code:addons/point_of_sale/point_of_sale.py:741 #, python-format msgid "Configuration Error!" -msgstr "" +msgstr "¡Error de configuración!" #. module: point_of_sale #: report:account.statement:0 @@ -237,7 +250,7 @@ msgstr "Empresa" #. module: point_of_sale #: view:pos.session:0 msgid "Closing Cash Control" -msgstr "" +msgstr "Control de cierre de caja" #. module: point_of_sale #: report:pos.details:0 @@ -259,7 +272,7 @@ msgstr "Información contable" #. module: point_of_sale #: field:pos.session.opening,show_config:0 msgid "Show Config" -msgstr "" +msgstr "Mostrar configuración" #. module: point_of_sale #: report:pos.lines:0 @@ -277,7 +290,7 @@ msgstr "Total descuento" #: code:addons/point_of_sale/static/src/xml/pos.xml:447 #, python-format msgid "Debug Window" -msgstr "" +msgstr "Ventana de depuración" #. module: point_of_sale #. openerp-web @@ -319,6 +332,7 @@ msgstr "Desc.(%)" #, python-format msgid "Please define income account for this product: \"%s\" (id:%d)." msgstr "" +"Defina por favor la cuenta de ingresos para este producto:\"%s\"(id: %id)." #. module: point_of_sale #: view:report.pos.order:0 @@ -337,6 +351,8 @@ msgid "" "Check this if this point of sale should open by default in a self checkout " "mode. If unchecked, OpenERP uses the normal cashier mode by default." msgstr "" +"Marque esta casilla si el TPV debe abrir por defecto en modo de auto-pago. " +"Si no está marcado, OpenERP usa el modo habitual de cajero por defecto." #. module: point_of_sale #: model:ir.actions.report.xml,name:point_of_sale.pos_sales_user @@ -353,7 +369,7 @@ msgstr "Bebidas" #: model:ir.actions.act_window,name:point_of_sale.action_pos_session_opening #: model:ir.ui.menu,name:point_of_sale.menu_pos_session_opening msgid "Your Session" -msgstr "" +msgstr "Su sesión" #. module: point_of_sale #: model:product.template,name:point_of_sale.stella_50cl_product_template @@ -375,12 +391,12 @@ msgstr "Categoría padre" #: code:addons/point_of_sale/static/src/xml/pos.xml:488 #, python-format msgid "Open Cashbox" -msgstr "" +msgstr "Abrir caja" #. module: point_of_sale #: view:pos.session.opening:0 msgid "Select your Point of Sale" -msgstr "" +msgstr "Seleccione su TPV" #. module: point_of_sale #: field:report.sales.by.margin.pos,total:0 @@ -404,25 +420,25 @@ msgstr "Dr. Oetker Ristorante Speciale" #: code:addons/point_of_sale/static/src/xml/pos.xml:486 #, python-format msgid "Payment Request" -msgstr "" +msgstr "Petición de pago" #. module: point_of_sale #: field:product.product,to_weight:0 msgid "To Weight" -msgstr "" +msgstr "A pesar" #. module: point_of_sale #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:482 #, python-format msgid "Hardware Events" -msgstr "" +msgstr "Eventos de hardware" #. module: point_of_sale #: code:addons/point_of_sale/point_of_sale.py:303 #, python-format msgid "You should assign a Point of Sale to your session." -msgstr "" +msgstr "Debe asignar un TPV a su sesión." #. module: point_of_sale #: view:pos.order.line:0 @@ -443,13 +459,17 @@ msgid "" "close this session, you can update the 'Closing Cash Control' to avoid any " "difference." msgstr "" +"Establezca por favor una cuenta de pérdidas y ganancias en su método de pago " +"'%s'. Esto permitirá que OpenERP contabilice la diferencia de %.2f en su " +"saldo final. Para cerrar esta sesión, puede actualizar su 'Control de cierre " +"de caja' para evitar cualquier diferencia." #. module: point_of_sale #: code:addons/point_of_sale/point_of_sale.py:317 #: code:addons/point_of_sale/point_of_sale.py:514 #, python-format msgid "error!" -msgstr "" +msgstr "¡Error!" #. module: point_of_sale #: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_user_pos_month @@ -462,21 +482,22 @@ msgid "" "Difference between the counted cash control at the closing and the computed " "balance." msgstr "" +"Diferencia entre el efectivo indicado en el cierre y el saldo del sistema." #. module: point_of_sale #: view:pos.session.opening:0 msgid ") is \"" -msgstr "" +msgstr ") es \"" #. module: point_of_sale #: model:product.template,name:point_of_sale.Onions_product_template msgid "Onions" -msgstr "" +msgstr "Cebollas" #. module: point_of_sale #: view:pos.session:0 msgid "Validate & Open Session" -msgstr "" +msgstr "Validar y abrir sesión" #. module: point_of_sale #: code:addons/point_of_sale/point_of_sale.py:101 @@ -484,18 +505,18 @@ msgstr "" #: selection:pos.session.opening,pos_state:0 #, python-format msgid "In Progress" -msgstr "" +msgstr "En proceso" #. module: point_of_sale #: view:pos.session:0 #: field:pos.session,opening_details_ids:0 msgid "Opening Cash Control" -msgstr "" +msgstr "Control de apertura de caja" #. module: point_of_sale #: help:res.users,ean13:0 msgid "BarCode" -msgstr "" +msgstr "Código de barras" #. module: point_of_sale #: help:pos.category,image_medium:0 @@ -504,11 +525,14 @@ msgid "" "128x128px image, with aspect ratio preserved. Use this field in form views " "or some kanban views." msgstr "" +"Imagen mediana de la categoría. Se redimensiona automáticamente a 128x128 " +"px, con el ratio de aspecto preservado. Use este campo en las vistas de " +"formulario o en algunas vistas kanban." #. module: point_of_sale #: view:pos.session.opening:0 msgid "Open Session" -msgstr "" +msgstr "Abrir sesión" #. module: point_of_sale #: model:ir.ui.menu,name:point_of_sale.menu_point_of_sale @@ -520,7 +544,7 @@ msgstr "Operaciones diarias" #: code:addons/point_of_sale/static/src/xml/pos.xml:42 #, python-format msgid "Google Chrome" -msgstr "" +msgstr "Google Chrome" #. module: point_of_sale #: model:pos.category,name:point_of_sale.sparkling_water @@ -543,7 +567,7 @@ msgstr "Buscar extractos de efectivo" #: field:pos.session.opening,pos_state_str:0 #: field:report.pos.order,state:0 msgid "Status" -msgstr "" +msgstr "Estado" #. module: point_of_sale #: selection:report.pos.order,month:0 @@ -568,14 +592,14 @@ msgstr "Línea de venta TPV" #. module: point_of_sale #: view:pos.config:0 msgid "Point of Sale Configuration" -msgstr "" +msgstr "Configuración del TPV" #. module: point_of_sale #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:369 #, python-format msgid "Your order has to be validated by a cashier." -msgstr "" +msgstr "Su pedido ha sido validado por un cajero." #. module: point_of_sale #: model:product.template,name:point_of_sale.fanta_orange_50cl_product_template @@ -607,6 +631,17 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para comenzar una nueva sesión.\n" +"

\n" +"Una sesión es un periodo de tiempo, normalmente un día, durante el cuál " +"vende a través del TPV. El usuario tiene que revisar las monedas en su " +"registro de caja al inicio y al final de cada sesión.\n" +"

\n" +"Tenga en cuenta que es mejor usar el menú Su sesión para abrir " +"rápidamente una nueva sesión.\n" +"

\n" +" " #. module: point_of_sale #: code:addons/point_of_sale/point_of_sale.py:870 @@ -620,6 +655,8 @@ msgid "" "You can continue sales from the touchscreen interface by clicking on \"Start " "Selling\" or close the cash register session." msgstr "" +"Puede continuar vendiendo desde el interfaz de pantalla táctil presionando " +"\"Comenzar la venta\" o cerrar la sesión de caja." #. module: point_of_sale #: report:account.statement:0 @@ -631,7 +668,7 @@ msgstr "Fecha de cierre" #. module: point_of_sale #: view:pos.session:0 msgid "Opening Cashbox Lines" -msgstr "" +msgstr "Líneas de apertura de caja" #. module: point_of_sale #: selection:report.pos.order,month:0 @@ -652,7 +689,7 @@ msgstr "Resumen" #. module: point_of_sale #: model:product.template,name:point_of_sale.lays_naturel_45g_product_template msgid "Lays Natural 45g" -msgstr "" +msgstr "Lays natural 45 g" #. module: point_of_sale #: model:product.template,name:point_of_sale.chaudfontaine_50cl_product_template @@ -678,7 +715,7 @@ msgstr "Línea Nº" #: code:addons/point_of_sale/static/src/xml/pos.xml:459 #, python-format msgid "Set Weight" -msgstr "" +msgstr "Establecer peso" #. module: point_of_sale #: view:account.bank.statement:0 @@ -693,7 +730,7 @@ msgstr "Base:" #. module: point_of_sale #: model:ir.actions.client,name:point_of_sale.action_client_pos_menu msgid "Open POS Menu" -msgstr "" +msgstr "Abrir menú TPV" #. module: point_of_sale #: report:pos.details_summary:0 @@ -703,19 +740,19 @@ msgstr "Método de pago" #. module: point_of_sale #: model:ir.model,name:point_of_sale.model_pos_confirm msgid "Post POS Journal Entries" -msgstr "Publicar entradas TPV en los diarios" +msgstr "Contabilizar asientos del TPV" #. module: point_of_sale #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:463 #, python-format msgid "Barcode Scanner" -msgstr "" +msgstr "Lector de códigos de barras" #. module: point_of_sale #: model:product.template,name:point_of_sale.pomme_granny_smith_product_template msgid "Granny Smith apples" -msgstr "" +msgstr "Peras Granny Smith" #. module: point_of_sale #: help:product.product,expense_pdt:0 @@ -723,6 +760,9 @@ msgid "" "Check if, this is a product you can use to take cash from a statement for " "the point of sale backend, example: money lost, transfer to bank, etc." msgstr "" +"Marque esta casilla si éste es un producto que puede usar para retirar " +"dinero de un extracto del «backend» del TPV, por ejemplo: dinero perdido, " +"transferencia a un banco, etc." #. module: point_of_sale #: view:report.pos.order:0 @@ -739,11 +779,13 @@ msgid "" "use\n" " a modern browser like" msgstr "" +"El TPV no está soportado por Microsoft Internet Explorer. Use por favor un " +"navegador moderno como" #. module: point_of_sale #: view:pos.session.opening:0 msgid "Click to start a session." -msgstr "" +msgstr "Pulse para comenzar una sesión." #. module: point_of_sale #: view:pos.details:0 @@ -773,7 +815,7 @@ msgstr "Añadir producto" #. module: point_of_sale #: field:pos.config,name:0 msgid "Point of Sale Name" -msgstr "" +msgstr "Nombre del TPV" #. module: point_of_sale #: field:report.transaction.pos,invoice_am:0 @@ -807,7 +849,7 @@ msgstr "Margen neto por ctdad" #. module: point_of_sale #: view:pos.confirm:0 msgid "Post All Orders" -msgstr "Enviar todos los pedidos" +msgstr "Contabilizar todos los pedidos" #. module: point_of_sale #: report:account.statement:0 @@ -820,7 +862,7 @@ msgstr "Saldo final" #: code:addons/point_of_sale/wizard/pos_box_out.py:89 #, python-format msgid "please check that account is set to %s." -msgstr "" +msgstr "revise por favor que la cuenta está establecida a %s." #. module: point_of_sale #: help:pos.category,image:0 @@ -828,6 +870,8 @@ msgid "" "This field holds the image used as image for the cateogry, limited to " "1024x1024px." msgstr "" +"Este campo mantiene la imagen usada como imagen de la categoría, limitada a " +"1024x1024 px." #. module: point_of_sale #: model:product.template,name:point_of_sale.pepsi_max_50cl_product_template @@ -849,16 +893,21 @@ msgid "" "Method\" from the \"Point of Sale\" tab. You can also create new payment " "methods directly from menu \"PoS Backend / Configuration / Payment Methods\"." msgstr "" +"Puede definir qué método de pago estará disponible en el TPV reusando los " +"bancos y cajas existentes a través de \"Contabilidad / Configuración / " +"Diarios / Diarios\". Seleccione un diario y marque la casilla \"Método de " +"pago de TPV\" desde la pestaña TPV. Puede crear también métodos de pago " +"directamente desde el menú \"Backend TPV / Configuración / Métodos de pago\"." #. module: point_of_sale #: model:pos.category,name:point_of_sale.rouges_noyau_fruits msgid "Berries" -msgstr "" +msgstr "Bayas" #. module: point_of_sale #: view:pos.ean_wizard:0 msgid "Ean13 Generator" -msgstr "" +msgstr "Generador EAN13" #. module: point_of_sale #: model:product.template,name:point_of_sale.spa_1l_product_template @@ -874,7 +923,7 @@ msgstr "Error: Código EAN no válido" #. module: point_of_sale #: model:pos.category,name:point_of_sale.legumes_racine msgid "Root vegetables" -msgstr "" +msgstr "Tubérculos" #. module: point_of_sale #: model:ir.actions.act_window,name:point_of_sale.act_pos_open_statement @@ -892,7 +941,7 @@ msgstr "Fecha final" #. module: point_of_sale #: model:product.template,name:point_of_sale.pomme_jonagold_product_template msgid "Jonagold apples" -msgstr "" +msgstr "Manzanas Jonagold" #. module: point_of_sale #: view:account.bank.statement:0 @@ -906,7 +955,7 @@ msgstr "Diario" #. module: point_of_sale #: view:pos.session:0 msgid "Statements" -msgstr "" +msgstr "Extractos" #. module: point_of_sale #: report:pos.details:0 @@ -919,6 +968,8 @@ msgid "" "Check this if you want to group the Journal Items by Product while closing a " "Session" msgstr "" +"Marque esta casilla si quiere agrupar los apuntes contable por producto en " +"el cierre de sesión." #. module: point_of_sale #: report:pos.details:0 @@ -929,12 +980,12 @@ msgstr "Total pagado" #. module: point_of_sale #: model:ir.model,name:point_of_sale.model_pos_session_opening msgid "pos.session.opening" -msgstr "" +msgstr "Apertura de sesión de TPV" #. module: point_of_sale #: view:res.users:0 msgid "Edit EAN" -msgstr "" +msgstr "Editar EAN" #. module: point_of_sale #: code:addons/point_of_sale/wizard/pos_open_statement.py:80 @@ -955,12 +1006,12 @@ msgstr "No facturado" #. module: point_of_sale #: model:product.template,name:point_of_sale.lays_pickles_250g_product_template msgid "250g Lays Pickels" -msgstr "" +msgstr "Lays Pickles 250 g" #. module: point_of_sale #: field:pos.session.opening,pos_session_id:0 msgid "PoS Session" -msgstr "" +msgstr "Sesión de TPV" #. module: point_of_sale #: selection:report.pos.order,month:0 @@ -1006,7 +1057,7 @@ msgstr "Añadir un descuento global" #. module: point_of_sale #: view:pos.config:0 msgid "Journals" -msgstr "" +msgstr "Diarios" #. module: point_of_sale #: model:product.template,name:point_of_sale.oetker_prosciutto_product_template @@ -1031,36 +1082,36 @@ msgstr "Coca-Cola Light Lemon 50cl" #: code:addons/point_of_sale/static/src/xml/pos.xml:747 #, python-format msgid "return" -msgstr "" +msgstr "devolver" #. module: point_of_sale #: view:product.product:0 msgid "Set a Custom EAN" -msgstr "" +msgstr "Establecer un código EAN personalizado" #. module: point_of_sale #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:237 #, python-format msgid "Remaining:" -msgstr "" +msgstr "Restante:" #. module: point_of_sale #: model:pos.category,name:point_of_sale.legumes msgid "Fresh vegetables" -msgstr "" +msgstr "Verduras frescas" #. module: point_of_sale #: view:pos.session:0 msgid "tab of the" -msgstr "" +msgstr "pestaña de" #. module: point_of_sale #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:484 #, python-format msgid "Scan Item Success" -msgstr "" +msgstr "Escaneo de elemento correcto" #. module: point_of_sale #: report:account.statement:0 @@ -1072,22 +1123,22 @@ msgstr "Saldo inicial" #. module: point_of_sale #: model:product.template,name:point_of_sale.lays_naturel_oven_150g_product_template msgid "Oven Baked Lays Natural 150g" -msgstr "" +msgstr "Lays natural al horno 150 g" #. module: point_of_sale #: sql_constraint:pos.session:0 msgid "The name of this POS Session must be unique !" -msgstr "" +msgstr "El nombre de esta sesión de TPV debe ser único." #. module: point_of_sale #: view:pos.session:0 msgid "Opening Subtotal" -msgstr "" +msgstr "Subtotal de apertura" #. module: point_of_sale #: view:pos.session:0 msgid "payment method." -msgstr "" +msgstr "método de pago." #. module: point_of_sale #: view:pos.order:0 @@ -1132,12 +1183,12 @@ msgstr "Desc." #. module: point_of_sale #: view:pos.order:0 msgid "(update)" -msgstr "" +msgstr "(actualizar)" #. module: point_of_sale #: model:product.template,name:point_of_sale.ijsboerke_vanille_2,5l_product_template msgid "IJsboerke Vanilla 2.5L" -msgstr "" +msgstr "IJsboerke de vainilla 2.5 l" #. module: point_of_sale #: model:ir.actions.act_window,name:point_of_sale.action_report_pos_details @@ -1148,7 +1199,7 @@ msgstr "Detalles de ventas" #. module: point_of_sale #: model:product.template,name:point_of_sale.evian_2l_product_template msgid "2L Evian" -msgstr "" +msgstr "Evian 2 l" #. module: point_of_sale #: code:addons/point_of_sale/point_of_sale.py:375 @@ -1156,7 +1207,7 @@ msgstr "" #: code:addons/point_of_sale/wizard/pos_session_opening.py:34 #, python-format msgid "Start Point Of Sale" -msgstr "" +msgstr "Iniciar TPV" #. module: point_of_sale #: model:pos.category,name:point_of_sale.pils @@ -1166,7 +1217,7 @@ msgstr "Pils" #. module: point_of_sale #: help:pos.session,cash_register_balance_end_real:0 msgid "Computed using the cash control lines" -msgstr "" +msgstr "Calculado usando las líneas de control de caja" #. module: point_of_sale #: report:all.closed.cashbox.of.the.day:0 @@ -1183,12 +1234,12 @@ msgstr "Total ventas" #: code:addons/point_of_sale/static/src/xml/pos.xml:744 #, python-format msgid "ABC" -msgstr "" +msgstr "ABC" #. module: point_of_sale #: model:product.template,name:point_of_sale.ijsboerke_dame_blanche_2,5l_product_template msgid "IJsboerke 2.5L White Lady" -msgstr "" +msgstr "IJsboerke white lady 2.5 l" #. module: point_of_sale #: field:pos.order,lines:0 @@ -1210,14 +1261,14 @@ msgstr "Chaudfontaine Petillante 50cl" #: code:addons/point_of_sale/static/src/xml/pos.xml:491 #, python-format msgid "Read Weighting Scale" -msgstr "" +msgstr "Leer balanza" #. module: point_of_sale #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:435 #, python-format msgid "0.00 €" -msgstr "" +msgstr "0.00 €" #. module: point_of_sale #: field:pos.order.line,create_date:0 @@ -1235,7 +1286,7 @@ msgstr "Ventas de hoy" #: code:addons/point_of_sale/static/src/xml/pos.xml:334 #, python-format msgid "Welcome" -msgstr "" +msgstr "Bienvenido/a" #. module: point_of_sale #: code:addons/point_of_sale/wizard/pos_box_entries.py:46 @@ -1270,12 +1321,12 @@ msgstr "Mis ventas" #. module: point_of_sale #: view:pos.config:0 msgid "Set to Deprecated" -msgstr "" +msgstr "Establecer como descatalogado" #. module: point_of_sale #: model:product.template,name:point_of_sale.limon_product_template msgid "Stringers" -msgstr "" +msgstr "Largueros" #. module: point_of_sale #: field:pos.order,pricelist_id:0 @@ -1292,7 +1343,7 @@ msgstr "Total facturado" #: model:ir.model,name:point_of_sale.model_pos_category #: field:product.product,pos_categ_id:0 msgid "Point of Sale Category" -msgstr "" +msgstr "Categoría del TPV" #. module: point_of_sale #: view:report.pos.order:0 @@ -1306,13 +1357,15 @@ msgid "" "This sequence is automatically created by OpenERP but you can change it to " "customize the reference numbers of your orders." msgstr "" +"OpenERP crea automáticamente esta secuencia, pero puede cambiarla para " +"personalizar los números de referencia de sus pedidos." #. module: point_of_sale #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:334 #, python-format msgid "Choose your type of receipt:" -msgstr "" +msgstr "Elija su tipo de recibo:" #. module: point_of_sale #: model:ir.model,name:point_of_sale.model_report_sales_by_margin_pos_month @@ -1322,7 +1375,7 @@ msgstr "Ventas por margen mensual" #. module: point_of_sale #: model:product.template,name:point_of_sale.poivron_jaunes_product_template msgid "Yellow Peppers" -msgstr "" +msgstr "Pimientos amarillos" #. module: point_of_sale #: view:pos.order:0 @@ -1342,14 +1395,14 @@ msgstr "Stella Artois 33cl" #. module: point_of_sale #: model:product.template,name:point_of_sale.lays_naturel_300g_product_template msgid "Lays Natural XXL 300g" -msgstr "" +msgstr "Lays natural XXL 300 g" #. module: point_of_sale #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:485 #, python-format msgid "Scan Item Unrecognized" -msgstr "" +msgstr "Elemento escaneado no reconocido" #. module: point_of_sale #: report:all.closed.cashbox.of.the.day:0 @@ -1360,7 +1413,7 @@ msgstr "Caja registradora cerrada hoy" #: code:addons/point_of_sale/point_of_sale.py:900 #, python-format msgid "Selected orders do not have the same session!" -msgstr "" +msgstr "¡Los pedidos seleccionados no tienen la misma sesión!" #. module: point_of_sale #: report:pos.invoice:0 @@ -1370,7 +1423,7 @@ msgstr "Factura borrador" #. module: point_of_sale #: model:product.template,name:point_of_sale.lays_paprika_oven_150g_product_template msgid "Oven Baked Lays Paprika 150g" -msgstr "" +msgstr "Lays paprika al horno 150 g" #. module: point_of_sale #: report:pos.invoice:0 @@ -1393,14 +1446,14 @@ msgstr "Fecha de apertura" #: model:ir.actions.act_window,name:point_of_sale.action_pos_session #: model:ir.ui.menu,name:point_of_sale.menu_pos_session_all msgid "All Sessions" -msgstr "" +msgstr "Todas las sesiones" #. module: point_of_sale #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:666 #, python-format msgid "tab" -msgstr "" +msgstr "pestaña" #. module: point_of_sale #: report:pos.lines:0 @@ -1412,7 +1465,7 @@ msgstr "Impuestos :" #: code:addons/point_of_sale/static/src/xml/pos.xml:281 #, python-format msgid "Thank you for shopping with us." -msgstr "" +msgstr "Gracias por comprar con nosotros." #. module: point_of_sale #: model:product.template,name:point_of_sale.coca_light_2l_product_template @@ -1428,12 +1481,12 @@ msgstr "Dr. Oetker Ristorante Funghi" #: model:ir.actions.act_window,name:point_of_sale.pos_category_action #: model:ir.ui.menu,name:point_of_sale.menu_pos_category msgid "Product Categories" -msgstr "" +msgstr "Categorías de producto" #. module: point_of_sale #: help:pos.config,journal_id:0 msgid "Accounting journal used to post sales entries." -msgstr "" +msgstr "Diario contable usado para contabilizar los asientos." #. module: point_of_sale #: field:report.transaction.pos,disc:0 @@ -1445,7 +1498,7 @@ msgstr "Desc." #: code:addons/point_of_sale/static/src/xml/pos.xml:473 #, python-format msgid "Invalid Ean" -msgstr "" +msgstr "EAN no válido" #. module: point_of_sale #: model:product.template,name:point_of_sale.lindemans_kriek_37,5cl_product_template @@ -1455,7 +1508,7 @@ msgstr "Lindemans Kriek 37.5cl" #. module: point_of_sale #: view:pos.config:0 msgid "Point of Sale Config" -msgstr "" +msgstr "Configuración del TPV" #. module: point_of_sale #: model:product.template,name:point_of_sale.coca_zero_33cl_product_template @@ -1467,7 +1520,7 @@ msgstr "Coca-Cola Zero 33cl" #: code:addons/point_of_sale/static/src/xml/pos.xml:415 #, python-format msgid "ä" -msgstr "" +msgstr "ä" #. module: point_of_sale #: report:pos.invoice:0 @@ -1496,7 +1549,7 @@ msgstr "desconocido" #. module: point_of_sale #: field:product.product,income_pdt:0 msgid "Point of Sale Cash In" -msgstr "" +msgstr "Dinero en efectivo en el TPV" #. module: point_of_sale #. openerp-web @@ -1508,7 +1561,7 @@ msgstr "IVA:" #. module: point_of_sale #: view:pos.session:0 msgid "+ Transactions" -msgstr "" +msgstr "+ Transacciones" #. module: point_of_sale #: model:ir.actions.act_window,name:point_of_sale.action_pos_discount @@ -1538,29 +1591,29 @@ msgstr "Usuario" #: code:addons/point_of_sale/static/src/xml/pos.xml:188 #, python-format msgid "Kg" -msgstr "" +msgstr "kg" #. module: point_of_sale #: field:product.product,available_in_pos:0 msgid "Available in the Point of Sale" -msgstr "" +msgstr "Disponible en el TPV" #. module: point_of_sale #: selection:pos.config,state:0 msgid "Deprecated" -msgstr "" +msgstr "Descatalogado" #. module: point_of_sale #: model:product.template,name:point_of_sale.coca_light_decaf_33cl_product_template msgid "Coca-Cola Light 33cl Decaf" -msgstr "" +msgstr "Coca-Cola light sin cafeína 33 cl" #. module: point_of_sale #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:348 #, python-format msgid "The scanned product was not recognized" -msgstr "" +msgstr "El producto escaneado no ha sido reconocido" #. module: point_of_sale #: model:ir.model,name:point_of_sale.model_report_transaction_pos @@ -1586,7 +1639,7 @@ msgstr "Boon Framboise 37.5cl" #. module: point_of_sale #: model:ir.model,name:point_of_sale.model_pos_config msgid "pos.config" -msgstr "" +msgstr "Configuración del TPV" #. module: point_of_sale #: view:pos.ean_wizard:0 @@ -1594,11 +1647,13 @@ msgid "" "Enter a reference, it will be converted\n" " automatically to a valid EAN number." msgstr "" +"Introduzca una referencia. Será convertida automáticamente a un número EAN " +"válido." #. module: point_of_sale #: field:product.product,expense_pdt:0 msgid "Point of Sale Cash Out" -msgstr "" +msgstr "Dinero retirado del TPV" #. module: point_of_sale #: selection:report.pos.order,month:0 @@ -1610,12 +1665,12 @@ msgstr "Noviembre" #: code:addons/point_of_sale/static/src/xml/pos.xml:277 #, python-format msgid "Please scan an item or your member card" -msgstr "" +msgstr "Escanee por favor un elemento o su tarjeta de miembro" #. module: point_of_sale #: model:product.template,name:point_of_sale.poivron_verts_product_template msgid "Green Peppers" -msgstr "" +msgstr "Pimientos verdes" #. module: point_of_sale #: model:product.template,name:point_of_sale.timmermans_faro_37,5cl_product_template @@ -1629,11 +1684,13 @@ msgid "" "Your ending balance is too different from the theorical cash closing (%.2f), " "the maximum allowed is: %.2f. You can contact your manager to force it." msgstr "" +"Su saldo final de cierre es muy diferente al permitido (%.2f). El máximo " +"permitido es %.2f. Debe contactar con su supervisor para forzarlo." #. module: point_of_sale #: view:pos.session:0 msgid "Validate Closing & Post Entries" -msgstr "" +msgstr "Validar y contabilizar asiento(s) de cierre" #. module: point_of_sale #: field:report.transaction.pos,no_trans:0 @@ -1647,12 +1704,14 @@ msgid "" "There is no receivable account defined to make payment for the partner: " "\"%s\" (id:%d)." msgstr "" +"No hay una cuenta contable por cobrar definida para hacer el pago de esta " +"empresa: \"%s\" (id: %d)." #. module: point_of_sale #: view:pos.config:0 #: selection:pos.config,state:0 msgid "Inactive" -msgstr "" +msgstr "Inactivo" #. module: point_of_sale #. openerp-web @@ -1676,7 +1735,7 @@ msgstr "Cancelar" #: code:addons/point_of_sale/static/src/xml/pos.xml:306 #, python-format msgid "Please put your product on the scale" -msgstr "" +msgstr "Coloque por favor el producto en la balanza" #. module: point_of_sale #: model:ir.actions.report.xml,name:point_of_sale.pos_details_summary @@ -1686,7 +1745,7 @@ msgstr "Ventas (resumen)" #. module: point_of_sale #: model:product.template,name:point_of_sale.nectarine_product_template msgid "Peach" -msgstr "" +msgstr "Melocotón" #. module: point_of_sale #: model:product.template,name:point_of_sale.timmermans_kriek_37,5cl_product_template @@ -1696,7 +1755,7 @@ msgstr "Timmermans Kriek 37.5cl" #. module: point_of_sale #: field:pos.config,sequence_id:0 msgid "Order IDs Sequence" -msgstr "" +msgstr "Secuencia de identificadores del pedido" #. module: point_of_sale #: report:pos.invoice:0 @@ -1711,7 +1770,7 @@ msgstr "Precio unidad" #: code:addons/point_of_sale/static/src/xml/pos.xml:184 #, python-format msgid "Product Weighting" -msgstr "" +msgstr "Peso del producto" #. module: point_of_sale #. openerp-web @@ -1719,12 +1778,12 @@ msgstr "" #: code:addons/point_of_sale/static/src/xml/pos.xml:749 #, python-format msgid "close" -msgstr "" +msgstr "cerrar" #. module: point_of_sale #: model:ir.actions.report.xml,name:point_of_sale.report_user_label msgid "User Labels" -msgstr "" +msgstr "Etiquetas de usuario" #. module: point_of_sale #: model:ir.model,name:point_of_sale.model_pos_order_line @@ -1740,7 +1799,7 @@ msgstr "Importe total" #. module: point_of_sale #: view:pos.session:0 msgid "End of Session" -msgstr "" +msgstr "Fin de la sesión" #. module: point_of_sale #: model:ir.actions.act_window,name:point_of_sale.action_new_bank_statement_all_tree @@ -1752,13 +1811,14 @@ msgstr "Registros de caja" #: help:pos.session,cash_register_balance_end:0 msgid "Computed with the initial cash control and the sum of all payments." msgstr "" +"Calculado con el control inicial de caja y la suma de todos los pagos." #. module: point_of_sale #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:480 #, python-format msgid "In Transaction" -msgstr "" +msgstr "En la transacción" #. module: point_of_sale #: model:pos.category,name:point_of_sale.food @@ -1804,12 +1864,12 @@ msgstr "Coca-Cola Regular 33cl" #: code:addons/point_of_sale/static/src/xml/pos.xml:335 #, python-format msgid "Ticket" -msgstr "" +msgstr "Ticket" #. module: point_of_sale #: field:pos.session,cash_register_difference:0 msgid "Difference" -msgstr "" +msgstr "Diferencia" #. module: point_of_sale #: code:addons/point_of_sale/point_of_sale.py:531 @@ -1820,7 +1880,7 @@ msgstr "No se puede eliminar!" #. module: point_of_sale #: model:pos.category,name:point_of_sale.autres_agrumes msgid "Other Citrus" -msgstr "" +msgstr "Otros cítricos" #. module: point_of_sale #: report:pos.details:0 @@ -1854,12 +1914,12 @@ msgstr "" #. module: point_of_sale #: model:product.template,name:point_of_sale.unreferenced_product_product_template msgid "Unreferenced Products" -msgstr "" +msgstr "Productos sin referencia" #. module: point_of_sale #: view:pos.ean_wizard:0 msgid "Apply" -msgstr "" +msgstr "Aplicar" #. module: point_of_sale #. openerp-web @@ -1870,6 +1930,8 @@ msgid "" "complete\n" " your purchase" msgstr "" +"Inserte por favor su tarjeta en el lector y siga las instrucciones para " +"completar su compra" #. module: point_of_sale #: help:product.product,income_pdt:0 @@ -1877,22 +1939,24 @@ msgid "" "Check if, this is a product you can use to put cash into a statement for the " "point of sale backend." msgstr "" +"Marque esta casilla si el producto se puede usar para poner dinero en un " +"extracto para el backend del TPV." #. module: point_of_sale #: model:product.template,name:point_of_sale.ijsboerke_moka_2,5l_product_template msgid "IJsboerke Mocha 2.5L" -msgstr "" +msgstr "IJsboerke Mocha 2.5 l" #. module: point_of_sale #: field:pos.session,cash_control:0 msgid "Has Cash Control" -msgstr "" +msgstr "Tiene control de caja" #. module: point_of_sale #: model:ir.actions.act_window,name:point_of_sale.action_report_pos_order_all #: model:ir.ui.menu,name:point_of_sale.menu_report_pos_order_all msgid "Orders Analysis" -msgstr "" +msgstr "Análisis de pedidos" #. module: point_of_sale #. openerp-web @@ -1908,6 +1972,8 @@ msgid "" "Unable to open the session. You have to assign a sale journal to your point " "of sale." msgstr "" +"No se ha podido abrir la sesión. Tiene que asignar un diario de ventas a su " +"TPV." #. module: point_of_sale #: view:report.pos.order:0 @@ -1917,7 +1983,7 @@ msgstr "Pedidos creados con TPV durante el año actual" #. module: point_of_sale #: model:product.template,name:point_of_sale.peche_product_template msgid "Fishing" -msgstr "" +msgstr "Pescado" #. module: point_of_sale #: report:pos.details:0 @@ -1933,7 +1999,7 @@ msgstr "Fecha impresión" #. module: point_of_sale #: model:product.template,name:point_of_sale.poireaux_poireaux_product_template msgid "Leeks" -msgstr "" +msgstr "Puerros" #. module: point_of_sale #: help:pos.category,sequence:0 @@ -1961,7 +2027,7 @@ msgstr "Tienda:" #. module: point_of_sale #: field:account.journal,self_checkout_payment_method:0 msgid "Self Checkout Payment Method" -msgstr "" +msgstr "Método de pago para el auto-pago" #. module: point_of_sale #: view:pos.order:0 @@ -1976,7 +2042,7 @@ msgstr "Todas cajas registradoras cerradas" #. module: point_of_sale #: field:pos.details,user_ids:0 msgid "Salespeople" -msgstr "" +msgstr "Vendedor" #. module: point_of_sale #: code:addons/point_of_sale/point_of_sale.py:758 @@ -1984,7 +2050,7 @@ msgstr "" #: code:addons/point_of_sale/wizard/pos_box_out.py:91 #, python-format msgid "You have to open at least one cashbox." -msgstr "" +msgstr "Tiene que abrir al menos una caja." #. module: point_of_sale #: code:addons/point_of_sale/point_of_sale.py:1141 @@ -1995,19 +2061,19 @@ msgstr "¡No existe tarifa!" #. module: point_of_sale #: model:product.template,name:point_of_sale.poivron_rouges_product_template msgid "Red Pepper" -msgstr "" +msgstr "Pimiento rojo" #. module: point_of_sale #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:680 #, python-format msgid "caps lock" -msgstr "" +msgstr "bloqueo mayúsculas" #. module: point_of_sale #: model:product.template,name:point_of_sale.grisette_cerise_25cl_product_template msgid "Grisette Cherry 25cl" -msgstr "" +msgstr "Grisette de cereza 25 cl" #. module: point_of_sale #: report:pos.invoice:0 @@ -2020,7 +2086,7 @@ msgstr "Base" #: code:addons/point_of_sale/static/src/xml/pos.xml:745 #, python-format msgid " " -msgstr "" +msgstr " " #. module: point_of_sale #: model:pos.category,name:point_of_sale.categ_others @@ -2030,7 +2096,7 @@ msgstr "Otros" #. module: point_of_sale #: model:pos.category,name:point_of_sale.autres_legumes_frais msgid "Other fresh vegetables" -msgstr "" +msgstr "Otras verduras frescas" #. module: point_of_sale #: code:addons/point_of_sale/wizard/pos_open_statement.py:49 @@ -2044,11 +2110,13 @@ msgstr "No se ha definido un registro de caja!" msgid "" "No cash statement found for this session. Unable to record returned cash." msgstr "" +"No se ha encontrado ningún extracto de caja para esta sesión. Imposible " +"registrar el efectivo devuelto." #. module: point_of_sale #: model:pos.category,name:point_of_sale.oignons_ail_echalotes msgid "Onions / Garlic / Shallots" -msgstr "" +msgstr "Cebollas / Ajo / Chalotes" #. module: point_of_sale #: model:product.template,name:point_of_sale.evian_50cl_product_template @@ -2084,7 +2152,7 @@ msgstr "Línea de venta" #: code:addons/point_of_sale/static/src/xml/pos.xml:744 #, python-format msgid "123" -msgstr "" +msgstr "123" #. module: point_of_sale #: model:ir.actions.act_window,name:point_of_sale.product_normal_action @@ -2102,17 +2170,17 @@ msgstr "Dr. Oetker Ristorante Quattro Formaggi" #. module: point_of_sale #: model:product.template,name:point_of_sale.croky_naturel_45g_product_template msgid "Croky Natural 45g" -msgstr "" +msgstr "Croky natural 45 g" #. module: point_of_sale #: model:product.template,name:point_of_sale.tomate_en_grappe_product_template msgid "In Cluster Tomatoes" -msgstr "" +msgstr "Tomates en racimo" #. module: point_of_sale #: model:ir.actions.client,name:point_of_sale.action_pos_pos msgid "Start Point of Sale" -msgstr "" +msgstr "Iniciar TPV" #. module: point_of_sale #. openerp-web @@ -2141,19 +2209,19 @@ msgstr "Fecha pedido" #. module: point_of_sale #: view:pos.order:0 msgid "Point of Sale Orders" -msgstr "" +msgstr "Pedidos del TPV" #. module: point_of_sale #: model:product.template,name:point_of_sale.spa_et_fruit_50cl_product_template msgid "Spa Fruit and Orange 50cl" -msgstr "" +msgstr "Spa fruta y naranja 50 cl" #. module: point_of_sale #: view:pos.config:0 #: field:pos.config,journal_ids:0 #: field:pos.session,journal_ids:0 msgid "Available Payment Methods" -msgstr "" +msgstr "Métodos de pago disponibles" #. module: point_of_sale #: model:ir.actions.act_window,help:point_of_sale.product_normal_action @@ -2173,6 +2241,16 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para añadir un nuevo producto.\n" +"

\n" +"Debe definir un producto para todo lo que venda a través del TPV.\n" +"

\n" +"No olvide establecer el precio y la categoría de TPV en la que deba " +"aparecer. Si un producto no tiene categoría de TPV, no podrá vender el " +"producto a través del TPV.\n" +"

\n" +" " #. module: point_of_sale #: view:pos.order:0 @@ -2187,7 +2265,7 @@ msgstr "Fax :" #. module: point_of_sale #: view:pos.session:0 msgid "Point of Sale Session" -msgstr "" +msgstr "Sesión TPV" #. module: point_of_sale #: report:account.statement:0 @@ -2198,14 +2276,14 @@ msgstr "Extracto" #. module: point_of_sale #: report:pos.invoice:0 msgid "Source" -msgstr "" +msgstr "Origen" #. module: point_of_sale #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:467 #, python-format msgid "Admin Badge" -msgstr "" +msgstr "Chapa de identificación" #. module: point_of_sale #: field:pos.make.payment,journal_id:0 @@ -2229,7 +2307,7 @@ msgstr "Extracto bancario" #: selection:pos.session.opening,pos_state:0 #, python-format msgid "Closed & Posted" -msgstr "" +msgstr "Cerrado y contabilizado" #. module: point_of_sale #: model:ir.actions.act_window,name:point_of_sale.action_report_pos_sale_user @@ -2258,7 +2336,7 @@ msgstr "Agua" #. module: point_of_sale #: model:ir.model,name:point_of_sale.model_pos_ean_wizard msgid "pos.ean_wizard" -msgstr "" +msgstr "Asistente EAN del TPV" #. module: point_of_sale #: selection:report.pos.order,month:0 @@ -2270,7 +2348,7 @@ msgstr "Julio" #: model:ir.ui.menu,name:point_of_sale.menu_pos_config_pos #: view:pos.session:0 msgid "Point of Sales" -msgstr "" +msgstr "Terminal punto de venta (TPV)" #. module: point_of_sale #: report:pos.details:0 @@ -2281,7 +2359,7 @@ msgstr "Ctd. producto" #. module: point_of_sale #: model:product.template,name:point_of_sale.pomme_golden_perlim_product_template msgid "Golden Apples Perlim" -msgstr "" +msgstr "Manzanas Golden Perlim" #. module: point_of_sale #: code:addons/point_of_sale/point_of_sale.py:102 @@ -2289,7 +2367,7 @@ msgstr "" #: selection:pos.session.opening,pos_state:0 #, python-format msgid "Closing Control" -msgstr "" +msgstr "Control de cierre" #. module: point_of_sale #: field:report.pos.order,delay_validation:0 @@ -2316,14 +2394,14 @@ msgstr "Coca-Cola Light 50cl" #: code:addons/point_of_sale/static/src/xml/pos.xml:472 #, python-format msgid "Unknown Product" -msgstr "" +msgstr "Producto desconocido" #. module: point_of_sale #. openerp-web #: code:addons/point_of_sale/static/src/xml/pos.xml:36 #, python-format msgid "" -msgstr "" +msgstr "" #. module: point_of_sale #: model:product.template,name:point_of_sale.jupiler_50cl_product_template @@ -2346,7 +2424,7 @@ msgstr "Coca-Cola Light Lemon 33cl" #: code:addons/point_of_sale/static/src/xml/pos.xml:33 #, python-format msgid "