From c9c5f4b7859cb414d37d99f25297f4175c7df74f Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Thu, 24 Jan 2013 19:28:08 +0100 Subject: [PATCH 001/160] [FIX] res.config.installer: correct module installing bzr revid: chs@openerp.com-20130124182808-5xvdc0mqst0h2970 --- openerp/addons/base/res/res_config.py | 90 ++++++++++++++++----------- 1 file changed, 54 insertions(+), 36 deletions(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index a2368a9f508..4c59180acc3 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -21,14 +21,47 @@ import logging from operator import attrgetter -import openerp -from openerp import pooler from openerp.osv import osv, fields from openerp.tools import ustr from openerp.tools.translate import _ _logger = logging.getLogger(__name__) + +class res_config_module_installation_mixin(object): + def _install_modules(self, cr, uid, modules, context): + """Install the requested modules. + return the next action to execute + + modules is a list of tuples + (mod_name, browse_record | None) + """ + ir_module = self.pool.get('ir.module.module') + to_install_ids = [] + to_install_missing_names = [] + + for name, module in modules: + if not module: + to_install_missing_names.append(name) + elif module.state == 'uninstalled': + to_install_ids.append(module.id) + + if to_install_ids: + ir_module.button_immediate_install(cr, uid, to_install_ids, context=context) + + if to_install_missing_names: + return { + 'type': 'ir.actions.client', + 'tag': 'apps', + 'params': {'modules': to_install_missing_names}, + } + + config = self.pool.get('res.config').next(cr, uid, [], context=context) or {} + if config.get('type') not in ('ir.actions.act_window_close',): + return config + + return None + class res_config_configurable(osv.osv_memory): ''' Base classes for new-style configuration items @@ -153,7 +186,7 @@ class res_config_configurable(osv.osv_memory): res_config_configurable() -class res_config_installer(osv.osv_memory): +class res_config_installer(osv.osv_memory, res_config_module_installation_mixin): """ New-style configuration base specialized for addons selection and installation. @@ -351,17 +384,18 @@ class res_config_installer(osv.osv_memory): return fields def execute(self, cr, uid, ids, context=None): - modules = self.pool.get('ir.module.module') to_install = list(self.modules_to_install( cr, uid, ids, context=context)) _logger.info('Selecting addons %s to install', to_install) - modules.state_update( - cr, uid, - modules.search(cr, uid, [('name','in',to_install)]), - 'to install', ['uninstalled'], context=context) - cr.commit() - openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) - new_db, self.pool = pooler.restart_pool(cr.dbname, update_module=True) + + ir_module = self.pool.get('ir.module.module') + modules = [] + for name in to_install: + mod_ids = ir_module.search(cr, uid, [('name', '=', name)]) + record = ir_module.browse(cr, uid, mod_ids[0], context) if mod_ids else None + modules.append((name, record)) + + return self._install_modules(cr, uid, modules, context=context) res_config_installer() @@ -402,8 +436,7 @@ class ir_actions_configuration_wizard(osv.osv_memory): ir_actions_configuration_wizard() - -class res_config_settings(osv.osv_memory): +class res_config_settings(osv.osv_memory, res_config_module_installation_mixin): """ Base configuration wizard for application settings. It provides support for setting default values, assigning groups to employee users, and installing modules. To make such a 'settings' wizard, define a model like:: @@ -527,37 +560,22 @@ class res_config_settings(osv.osv_memory): getattr(self, method)(cr, uid, ids, context) # module fields: install/uninstall the selected modules - to_install_missing_names = [] + to_install = [] to_uninstall_ids = [] - to_install_ids = [] lm = len('module_') for name, module in classified['module']: if config[name]: - if not module: - # missing module, will be provided by apps.openerp.com - to_install_missing_names.append(name[lm:]) - elif module.state == 'uninstalled': - # local module, to be installed - to_install_ids.append(module.id) + to_install.append((name[lm:], module)) else: if module and module.state in ('installed', 'to upgrade'): to_uninstall_ids.append(module.id) if to_uninstall_ids: ir_module.button_immediate_uninstall(cr, uid, to_uninstall_ids, context=context) - if to_install_ids: - ir_module.button_immediate_install(cr, uid, to_install_ids, context=context) - if to_install_missing_names: - return { - 'type': 'ir.actions.client', - 'tag': 'apps', - 'params': {'modules': to_install_missing_names}, - } - - config = self.pool.get('res.config').next(cr, uid, [], context=context) or {} - if config.get('type') not in ('ir.actions.act_window_close',): - return config + action = self._install_modules(cr, uid, to_install, context=context) + if action: + return action # force client-side reload (update user menu and current view) return { @@ -572,17 +590,17 @@ class res_config_settings(osv.osv_memory): if action_ids: return act_window.read(cr, uid, action_ids[0], [], context=context) return {} - + def name_get(self, cr, uid, ids, context=None): """ Override name_get method to return an appropriate configuration wizard name, and not the generated name.""" - + if not ids: return [] # name_get may receive int id instead of an id list if isinstance(ids, (int, long)): ids = [ids] - + act_window = self.pool.get('ir.actions.act_window') action_ids = act_window.search(cr, uid, [('res_model', '=', self._name)], context=context) name = self._name From 4c89124778a1516cd3371347831bb4b6f1e60a74 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Thu, 24 Jan 2013 20:00:39 +0100 Subject: [PATCH 002/160] [IMP] account: installer get list of charts from apps bzr revid: chs@openerp.com-20130124190039-qhcyrnrgpue0rak5 --- addons/account/installer.py | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/addons/account/installer.py b/addons/account/installer.py index d02e7196d4d..aba88975e41 100644 --- a/addons/account/installer.py +++ b/addons/account/installer.py @@ -23,10 +23,16 @@ import datetime from dateutil.relativedelta import relativedelta import logging from operator import itemgetter -from os.path import join as opj import time +import urllib2 +import urlparse -from openerp import netsvc, tools +try: + import simplejson as json +except ImportError: + import json # noqa + +from openerp.release import serie from openerp.tools.translate import _ from openerp.osv import fields, osv @@ -38,13 +44,28 @@ class account_installer(osv.osv_memory): def _get_charts(self, cr, uid, context=None): modules = self.pool.get('ir.module.module') + + # try get the list on apps server + try: + apps_server = self.pool.get('ir.config_parameter').get_value(cr, uid, 'apps.server', 'https://apps.openerp.com') + + up = urlparse.urlparse(apps_server) + url = '{0.scheme}://{0.netloc}/apps/charts?serie={1}'.format(up, serie) + + j = urllib2.urlopen(url, timeout=3).read() + apps_charts = json.loads(j) + + charts = dict(apps_charts) + except Exception: + charts = dict() + # Looking for the module with the 'Account Charts' category category_name, category_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base', 'module_category_localization_account_charts') ids = modules.search(cr, uid, [('category_id', '=', category_id)], context=context) - charts = list( - sorted(((m.name, m.shortdesc) - for m in modules.browse(cr, uid, ids, context=context)), - key=itemgetter(1))) + if ids: + charts.update((m.name, m.shortdesc) for m in modules.browse(cr, uid, ids, context=context)) + + charts = sorted(charts.items(), key=itemgetter(1)) charts.insert(0, ('configurable', _('Custom'))) return charts From a78531df4393b3850b718865df5b748d696975e5 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Fri, 25 Jan 2013 13:11:27 +0100 Subject: [PATCH 003/160] [FIX] account: installer: call right method bzr revid: chs@openerp.com-20130125121127-j7i3rwskqojyp8nm --- addons/account/installer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account/installer.py b/addons/account/installer.py index aba88975e41..995e3986af4 100644 --- a/addons/account/installer.py +++ b/addons/account/installer.py @@ -47,7 +47,7 @@ class account_installer(osv.osv_memory): # try get the list on apps server try: - apps_server = self.pool.get('ir.config_parameter').get_value(cr, uid, 'apps.server', 'https://apps.openerp.com') + apps_server = self.pool.get('ir.config_parameter').get_param(cr, uid, 'apps.server', 'https://apps.openerp.com') up = urlparse.urlparse(apps_server) url = '{0.scheme}://{0.netloc}/apps/charts?serie={1}'.format(up, serie) From 16289266c99096a1770fd6039539da26a0ce7c0f Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Fri, 25 Jan 2013 14:34:53 +0100 Subject: [PATCH 004/160] [FIX] res.config.installer: correct module installing bzr revid: chs@openerp.com-20130125133453-aqu5eotetdyb2zpj --- openerp/addons/base/res/res_config.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index 4c59180acc3..1ca6fd57cfa 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -56,10 +56,6 @@ class res_config_module_installation_mixin(object): 'params': {'modules': to_install_missing_names}, } - config = self.pool.get('res.config').next(cr, uid, [], context=context) or {} - if config.get('type') not in ('ir.actions.act_window_close',): - return config - return None class res_config_configurable(osv.osv_memory): @@ -577,6 +573,10 @@ class res_config_settings(osv.osv_memory, res_config_module_installation_mixin): if action: return action + config = self.pool.get('res.config').next(cr, uid, [], context=context) or {} + if config.get('type') not in ('ir.actions.act_window_close',): + return config + # force client-side reload (update user menu and current view) return { 'type': 'ir.actions.client', From eff170870451284a7317a9a0554e6e2060c9071d Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 31 Jan 2013 16:31:00 +0100 Subject: [PATCH 005/160] [IMP] web module tutorial: start adding RPC stuff bzr revid: xmo@openerp.com-20130131153100-gze86fbchz4tnrg3 --- addons/web/doc/module.rst | 30 ++++++++ addons/web/doc/module/__init__.py.1.diff | 16 +++++ .../static/src/js/first_module.js.7.diff | 71 +++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 addons/web/doc/module/__init__.py.1.diff create mode 100644 addons/web/doc/module/static/src/js/first_module.js.7.diff diff --git a/addons/web/doc/module.rst b/addons/web/doc/module.rst index 8306e885f65..df849afc54c 100644 --- a/addons/web/doc/module.rst +++ b/addons/web/doc/module.rst @@ -273,6 +273,36 @@ the button displayed in the UI. Then comes some actual logic: Starting and stopping the watch now works, and correctly tracks time since having started the watch, neatly formatted. +Burning through the skies +------------------------- + +All work so far has been "local" outside of the original impetus +provided by the client action: the widget is self-contained and, once +started, does not communicate with anything outside itself. Not only +that, but it has no persistence: if the user leaves the stopwatch +screen (to go and see his inbox, or do some well-deserved accounting, +for instance) whatever was being timed will be lost. + +To prevent this irremediable loss, we can use OpenERP's support for +storing data as a model, allowing so that we don't lose our data and +can later retrieve, query and manipulate it. First let's create a +basic OpenERP model in which our data will be stored: + +.. literalinclude:: module/__init__.py.1.diff + :language: diff + +then let's add saving times to the database every time the stopwatch +is stopped, using :js:class:`the "high-level" Model API +`: + +.. literalinclude:: module/static/src/js/first_module.js.7.diff + :language: diff + +A look at the "Network" tab of your preferred browser's developer +tools while playing with the stopwatch will show that the save +(creation) request is indeed sent (and replied to, even though we're +ignoring the response at this point). + .. [#DOM-building] they are not alternative solutions: they work very well together. Templates are used to build "just DOM", sub-widgets are used to build DOM subsections diff --git a/addons/web/doc/module/__init__.py.1.diff b/addons/web/doc/module/__init__.py.1.diff new file mode 100644 index 00000000000..6f16f0e9a08 --- /dev/null +++ b/addons/web/doc/module/__init__.py.1.diff @@ -0,0 +1,16 @@ +--- web_example/__init__.py ++++ web_example/__init__.py +@@ -1,1 +1,14 @@ ++# __init__.py ++from openerp.osv import orm, fields ++ ++ ++class Times(orm.Model): ++ _name = 'web_example.stopwatch' ++ ++ _columns = { ++ 'time': fields.integer("Time", required=True, ++ help="Measured time in milliseconds"), ++ 'user_id': fields.many2one('res.users', "User", required=True, ++ help="User who registered the measurement") ++ } diff --git a/addons/web/doc/module/static/src/js/first_module.js.7.diff b/addons/web/doc/module/static/src/js/first_module.js.7.diff new file mode 100644 index 00000000000..1d3430656fc --- /dev/null +++ b/addons/web/doc/module/static/src/js/first_module.js.7.diff @@ -0,0 +1,71 @@ +--- web_example/static/src/js/first_module.js ++++ web_example/static/src/js/first_module.js +@@ -1,52 +1,60 @@ + // static/src/js/first_module.js + openerp.web_example = function (instance) { + instance.web.client_actions.add('example.action', 'instance.web_example.Action'); + instance.web_example.Action = instance.web.Widget.extend({ + template: 'web_example.action', + events: { + 'click .oe_web_example_start button': 'watch_start', + 'click .oe_web_example_stop button': 'watch_stop' + }, + init: function () { + this._super.apply(this, arguments); + this._start = null; + this._watch = null; + }, ++ current: function () { ++ // Subtracting javascript dates returns the difference in milliseconds ++ return new Date() - this._start; ++ }, +- update_counter: function () { ++ update_counter: function (time) { + var h, m, s; +- // Subtracting javascript dates returns the difference in milliseconds +- var diff = new Date() - this._start; +- s = diff / 1000; ++ s = time / 1000; + m = Math.floor(s / 60); + s -= 60*m; + h = Math.floor(m / 60); + m -= 60*h; + this.$('.oe_web_example_timer').text( + _.str.sprintf("%02d:%02d:%02d", h, m, s)); + }, + watch_start: function () { + this.$el.addClass('oe_web_example_started') + .removeClass('oe_web_example_stopped'); + this._start = new Date(); + // Update the UI to the current time +- this.update_counter(); ++ this.update_counter(this.current()); + // Update the counter at 30 FPS (33ms/frame) +- this._watch = setInterval( +- this.proxy('update_counter'), ++ this._watch = setInterval(function () { ++ this.update_counter(this.current()); ++ }.bind(this), + 33); + }, + watch_stop: function () { + clearInterval(this._watch); ++ var time = this.current(); +- this.update_counter(); ++ this.update_counter(time); + this._start = this._watch = null; + this.$el.removeClass('oe_web_example_started') + .addClass('oe_web_example_stopped'); ++ new instance.web.Model('web_example.stopwatch').call('create', [{ ++ user_id: instance.session.uid, ++ time: time, ++ }]); + }, + destroy: function () { + if (this._watch) { + clearInterval(this._watch); + } + this._super(); + } + }); + }; From 06954ded48b0b9e9736eaf7325e89454d8be22c3 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 11 Feb 2013 08:52:00 +0100 Subject: [PATCH 006/160] [IMP] replace ad-hoc patch display by patchqueue bzr revid: xmo@openerp.com-20130211075200-lwd79pktewqf0wkk --- addons/web/doc/conf.py | 6 +- addons/web/doc/module.rst | 59 ++++++------------- addons/web/doc/module/0 | 17 ++++++ addons/web/doc/module/10 | 13 ++++ addons/web/doc/module/11 | 11 ++++ addons/web/doc/module/12 | 28 +++++++++ .../src/js/first_module.js.4.diff => 14} | 12 ++-- .../src/css/web_example.css.1.diff => 15} | 10 ++-- .../src/js/first_module.js.5.diff => 16} | 10 ++-- .../src/js/first_module.js.6.diff => 17} | 15 ++--- .../web/doc/module/{__init__.py.1.diff => 18} | 9 ++- .../src/js/first_module.js.7.diff => 19} | 37 +++--------- addons/web/doc/module/2 | 12 ++++ addons/web/doc/module/3 | 9 +++ addons/web/doc/module/4 | 11 ++++ addons/web/doc/module/5 | 11 ++++ addons/web/doc/module/6 | 29 +++++++++ .../src/js/first_module.js.2.diff => 8} | 7 ++- .../src/js/first_module.js.3.diff => 9} | 7 ++- addons/web/doc/module/__init__.py | 0 addons/web/doc/module/__openerp__.py | 7 --- addons/web/doc/module/__openerp__.py.1.diff | 11 ---- addons/web/doc/module/__openerp__.py.2.diff | 11 ---- addons/web/doc/module/__openerp__.py.3.diff | 12 ---- addons/web/doc/module/__openerp__.py.4.diff | 13 ---- addons/web/doc/module/__openerp__.py.5.diff | 14 ----- addons/web/doc/module/series | 17 ++++++ .../doc/module/static/src/css/web_example.css | 6 -- .../doc/module/static/src/js/first_module.js | 2 - .../static/src/js/first_module.js.1.diff | 8 --- .../doc/module/static/src/xml/web_example.xml | 11 ---- addons/web/doc/module/web_example.xml | 11 ---- 32 files changed, 232 insertions(+), 204 deletions(-) create mode 100644 addons/web/doc/module/0 create mode 100644 addons/web/doc/module/10 create mode 100644 addons/web/doc/module/11 create mode 100644 addons/web/doc/module/12 rename addons/web/doc/module/{static/src/js/first_module.js.4.diff => 14} (63%) rename addons/web/doc/module/{static/src/css/web_example.css.1.diff => 15} (59%) rename addons/web/doc/module/{static/src/js/first_module.js.5.diff => 16} (76%) rename addons/web/doc/module/{static/src/js/first_module.js.6.diff => 17} (80%) rename addons/web/doc/module/{__init__.py.1.diff => 18} (72%) rename addons/web/doc/module/{static/src/js/first_module.js.7.diff => 19} (65%) create mode 100644 addons/web/doc/module/2 create mode 100644 addons/web/doc/module/3 create mode 100644 addons/web/doc/module/4 create mode 100644 addons/web/doc/module/5 create mode 100644 addons/web/doc/module/6 rename addons/web/doc/module/{static/src/js/first_module.js.2.diff => 8} (61%) rename addons/web/doc/module/{static/src/js/first_module.js.3.diff => 9} (74%) delete mode 100644 addons/web/doc/module/__init__.py delete mode 100644 addons/web/doc/module/__openerp__.py delete mode 100644 addons/web/doc/module/__openerp__.py.1.diff delete mode 100644 addons/web/doc/module/__openerp__.py.2.diff delete mode 100644 addons/web/doc/module/__openerp__.py.3.diff delete mode 100644 addons/web/doc/module/__openerp__.py.4.diff delete mode 100644 addons/web/doc/module/__openerp__.py.5.diff create mode 100644 addons/web/doc/module/series delete mode 100644 addons/web/doc/module/static/src/css/web_example.css delete mode 100644 addons/web/doc/module/static/src/js/first_module.js delete mode 100644 addons/web/doc/module/static/src/js/first_module.js.1.diff delete mode 100644 addons/web/doc/module/static/src/xml/web_example.xml delete mode 100644 addons/web/doc/module/web_example.xml diff --git a/addons/web/doc/conf.py b/addons/web/doc/conf.py index 7fe38022ab1..e8ffc50d495 100644 --- a/addons/web/doc/conf.py +++ b/addons/web/doc/conf.py @@ -27,7 +27,11 @@ sys.path.insert(0, os.path.abspath('..')) # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.viewcode'] +extensions = [ + 'sphinx.ext.autodoc', 'sphinx.ext.intersphinx', + 'sphinx.ext.todo', 'sphinx.ext.viewcode', + 'patchqueue' +] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] diff --git a/addons/web/doc/module.rst b/addons/web/doc/module.rst index df849afc54c..02e0f9c250a 100644 --- a/addons/web/doc/module.rst +++ b/addons/web/doc/module.rst @@ -1,5 +1,7 @@ .. _module: +.. queue:: module/series + Building an OpenERP Web module ============================== @@ -19,8 +21,7 @@ A very basic OpenERP module structure will be our starting point: ├── __init__.py └── __openerp__.py -.. literalinclude:: module/__openerp__.py - :language: python +.. patch:: This is a sufficient minimal declaration of a valid OpenERP module. @@ -41,8 +42,7 @@ module is automatically recognized as "web-enabled" if it contains a is the extent of it. You should also change the dependency to list ``web``: -.. literalinclude:: module/__openerp__.py.1.diff - :language: diff +.. patch:: .. note:: @@ -67,15 +67,13 @@ The first one is to add javascript code. It's customary to put it in ``static/src/js``, to have room for e.g. other file types, or third-party libraries. -.. literalinclude:: module/static/src/js/first_module.js - :language: javascript +.. patch:: The client won't load any file unless specified, thus the new file should be listed in the module's manifest file, under a new key ``js`` (a list of file names, or glob patterns): -.. literalinclude:: module/__openerp__.py.2.diff - :language: diff +.. patch:: At this point, if the module is installed and the client reloaded the message should appear in your browser's development console. @@ -100,8 +98,7 @@ initialized, and it can't get access to the various APIs of the web client (such as making RPC requests to the server). This is done by providing a `javascript module`_: -.. literalinclude:: module/static/src/js/first_module.js.1.diff - :language: diff +.. patch:: If you reload the client, you'll see a message in the console exactly as previously. The differences, though invisible at this point, are: @@ -122,17 +119,12 @@ To demonstrate, let's build a simple :doc:`client action First, the action declaration: -.. literalinclude:: module/__openerp__.py.3.diff - :language: diff - -.. literalinclude:: module/web_example.xml - :language: xml +.. patch:: then set up the :doc:`client action hook ` to register a function (for now): -.. literalinclude:: module/static/src/js/first_module.js.2.diff - :language: diff +.. patch:: Updating the module (in order to load the XML description) and re-starting the server should display a new menu *Example Client @@ -148,8 +140,7 @@ client action function by a :doc:`widget`. Our widget will simply use its :js:func:`~openerp.web.Widget.start` to add some content to its DOM: -.. literalinclude:: module/static/src/js/first_module.js.3.diff - :language: diff +.. patch:: after reloading the client (to update the javascript file), instead of printing to the console the menu item clears the whole screen and @@ -159,15 +150,13 @@ Since we've added a class on the widget's :ref:`DOM root ` we can now see how to add a stylesheet to a module: first create the stylesheet file: -.. literalinclude:: module/static/src/css/web_example.css - :language: css +.. patch:: then add a reference to the stylesheet in the module's manifest (which will require restarting the OpenERP Server to see the changes, as usual): -.. literalinclude:: module/__openerp__.py.4.diff - :language: diff +.. patch:: the text displayed by the menu item should now be huge, and white-on-black (instead of small and black-on-white). From there on, @@ -204,22 +193,16 @@ integration to OpenERP Web widgets. Adding a template file is similar to adding a style sheet: -.. literalinclude:: module/static/src/xml/web_example.xml - :language: xml - -.. literalinclude:: module/__openerp__.py.5.diff - :language: diff +.. patch:: The template can then easily be hooked in the widget: -.. literalinclude:: module/static/src/js/first_module.js.4.diff - :language: diff +.. patch:: And finally the CSS can be altered to style the new (and more complex) template-generated DOM, rather than the code-generated one: -.. literalinclude:: module/static/src/css/web_example.css.1.diff - :language: diff +.. patch:: .. note:: @@ -238,15 +221,13 @@ The last step (until the next one) is to add some behavior and make our stopwatch watch. First hook some events on the buttons to toggle the widget's state: -.. literalinclude:: module/static/src/js/first_module.js.5.diff - :language: diff +.. patch:: This demonstrates the use of the "events hash" and event delegation to declaratively handle events on the widget's DOM. And already changes the button displayed in the UI. Then comes some actual logic: -.. literalinclude:: module/static/src/js/first_module.js.6.diff - :language: diff +.. patch:: * An initializer (the ``init`` method) is introduced to set-up a few internal variables: ``_start`` will hold the start of the timer (as @@ -288,15 +269,13 @@ storing data as a model, allowing so that we don't lose our data and can later retrieve, query and manipulate it. First let's create a basic OpenERP model in which our data will be stored: -.. literalinclude:: module/__init__.py.1.diff - :language: diff +.. patch:: then let's add saving times to the database every time the stopwatch is stopped, using :js:class:`the "high-level" Model API `: -.. literalinclude:: module/static/src/js/first_module.js.7.diff - :language: diff +.. patch:: A look at the "Network" tab of your preferred browser's developer tools while playing with the stopwatch will show that the save diff --git a/addons/web/doc/module/0 b/addons/web/doc/module/0 new file mode 100644 index 00000000000..16762e1afd0 --- /dev/null +++ b/addons/web/doc/module/0 @@ -0,0 +1,17 @@ +# HG changeset patch +# Parent 0000000000000000000000000000000000000000 + +diff --git a/__init__.py b/__init__.py +new file mode 100644 +diff --git a/__openerp__.py b/__openerp__.py +new file mode 100644 +--- /dev/null ++++ b/__openerp__.py +@@ -0,0 +1,7 @@ ++# __openerp__.py ++{ ++ 'name': "Web Example", ++ 'description': "Basic example of a (future) web module", ++ 'category': 'Hidden', ++ 'depends': ['base'], ++} diff --git a/addons/web/doc/module/10 b/addons/web/doc/module/10 new file mode 100644 index 00000000000..dc3b670c5a0 --- /dev/null +++ b/addons/web/doc/module/10 @@ -0,0 +1,13 @@ +# HG changeset patch +# Parent 72d9d59a93fcee06ba28cf0b98a1075331dcc8f4 +diff --git a/static/src/css/web_example.css b/static/src/css/web_example.css +new file mode 100644 +--- /dev/null ++++ b/static/src/css/web_example.css +@@ -0,0 +1,6 @@ ++.openerp .oe_web_example { ++ color: white; ++ background-color: black; ++ height: 100%; ++ font-size: 400%; ++} diff --git a/addons/web/doc/module/11 b/addons/web/doc/module/11 new file mode 100644 index 00000000000..fc4225afaa6 --- /dev/null +++ b/addons/web/doc/module/11 @@ -0,0 +1,11 @@ +# HG changeset patch +# Parent 3ed382d9a8fe64fbb8e2bf4045e3fcd5c74c92bc +diff --git a/__openerp__.py b/__openerp__.py +--- a/__openerp__.py ++++ b/__openerp__.py +@@ -6,4 +6,5 @@ + 'depends': ['web'], + 'data': ['web_example.xml'], + 'js': ['static/src/js/first_module.js'], ++ 'css': ['static/src/css/web_example.css'], + } diff --git a/addons/web/doc/module/12 b/addons/web/doc/module/12 new file mode 100644 index 00000000000..9a2982e7d20 --- /dev/null +++ b/addons/web/doc/module/12 @@ -0,0 +1,28 @@ +# HG changeset patch +# Parent 43f21611dacb7c2b2f3810baeeef359ad7c329f0 + +diff --git a/__openerp__.py b/__openerp__.py +--- a/__openerp__.py ++++ b/__openerp__.py +@@ -7,4 +7,5 @@ + 'data': ['web_example.xml'], + 'js': ['static/src/js/first_module.js'], + 'css': ['static/src/css/web_example.css'], ++ 'qweb': ['static/src/xml/web_example.xml'], + } +diff --git a/static/src/xml/web_example.xml b/static/src/xml/web_example.xml +new file mode 100644 +--- /dev/null ++++ b/static/src/xml/web_example.xml +@@ -0,0 +1,11 @@ ++ ++
++

00:00:00

++

++ ++

++

++ ++

++
++
diff --git a/addons/web/doc/module/static/src/js/first_module.js.4.diff b/addons/web/doc/module/14 similarity index 63% rename from addons/web/doc/module/static/src/js/first_module.js.4.diff rename to addons/web/doc/module/14 index 78a192147e6..a908cbc61e2 100644 --- a/addons/web/doc/module/static/src/js/first_module.js.4.diff +++ b/addons/web/doc/module/14 @@ -1,15 +1,17 @@ ---- web_example/static/src/js/first_module.js -+++ web_example/static/src/js/first_module.js -@@ -1,11 +1,7 @@ - // static/src/js/first_module.js +# HG changeset patch +# Parent ae3b427c96b532794a65357b3f075129cc991276 +diff --git a/static/src/js/first_module.js b/static/src/js/first_module.js +--- a/static/src/js/first_module.js ++++ b/static/src/js/first_module.js +@@ -2,10 +2,6 @@ openerp.web_example = function (instance) { instance.web.client_actions.add('example.action', 'instance.web_example.Action'); instance.web_example.Action = instance.web.Widget.extend({ -+ template: 'web_example.action' - className: 'oe_web_example', - start: function () { - this.$el.text("Hello, world!"); - return this._super(); - } ++ template: 'web_example.action' }); }; diff --git a/addons/web/doc/module/static/src/css/web_example.css.1.diff b/addons/web/doc/module/15 similarity index 59% rename from addons/web/doc/module/static/src/css/web_example.css.1.diff rename to addons/web/doc/module/15 index 442211a252b..d82abee3284 100644 --- a/addons/web/doc/module/static/src/css/web_example.css.1.diff +++ b/addons/web/doc/module/15 @@ -1,7 +1,9 @@ ---- web_example/static/src/css/web_example.css -+++ web_example/static/src/css/web_example.css -@@ -1,6 +1,13 @@ - .openerp .oe_web_example { +# HG changeset patch +# Parent e2d2e1a4cc2d2496aebeb05d94768384427c9e8b +diff --git a/static/src/css/web_example.css b/static/src/css/web_example.css +--- a/static/src/css/web_example.css ++++ b/static/src/css/web_example.css +@@ -2,5 +2,12 @@ color: white; background-color: black; height: 100%; diff --git a/addons/web/doc/module/static/src/js/first_module.js.5.diff b/addons/web/doc/module/16 similarity index 76% rename from addons/web/doc/module/static/src/js/first_module.js.5.diff rename to addons/web/doc/module/16 index f345ea319ef..816c23aa0b0 100644 --- a/addons/web/doc/module/static/src/js/first_module.js.5.diff +++ b/addons/web/doc/module/16 @@ -1,7 +1,9 @@ ---- web_example/static/src/js/first_module.js -+++ web_example/static/src/js/first_module.js -@@ -1,7 +1,19 @@ - // static/src/js/first_module.js +# HG changeset patch +# Parent 2645d7a09dcba7f6d6074a33252c16c03c56fdf3 +diff --git a/static/src/js/first_module.js b/static/src/js/first_module.js +--- a/static/src/js/first_module.js ++++ b/static/src/js/first_module.js +@@ -2,6 +2,18 @@ openerp.web_example = function (instance) { instance.web.client_actions.add('example.action', 'instance.web_example.Action'); instance.web_example.Action = instance.web.Widget.extend({ diff --git a/addons/web/doc/module/static/src/js/first_module.js.6.diff b/addons/web/doc/module/17 similarity index 80% rename from addons/web/doc/module/static/src/js/first_module.js.6.diff rename to addons/web/doc/module/17 index 7dd17af0e18..d6d6ecc71e3 100644 --- a/addons/web/doc/module/static/src/js/first_module.js.6.diff +++ b/addons/web/doc/module/17 @@ -1,12 +1,9 @@ ---- web_example/static/src/js/first_module.js -+++ web_example/static/src/js/first_module.js -@@ -1,19 +1,52 @@ - // static/src/js/first_module.js - openerp.web_example = function (instance) { - instance.web.client_actions.add('example.action', 'instance.web_example.Action'); - instance.web_example.Action = instance.web.Widget.extend({ - template: 'web_example.action', - events: { +# HG changeset patch +# Parent 2921a545adc3406d3139be7951f3225e94493466 +diff --git a/static/src/js/first_module.js b/static/src/js/first_module.js +--- a/static/src/js/first_module.js ++++ b/static/src/js/first_module.js +@@ -7,13 +7,46 @@ openerp.web_example = function (instance 'click .oe_web_example_start button': 'watch_start', 'click .oe_web_example_stop button': 'watch_stop' }, diff --git a/addons/web/doc/module/__init__.py.1.diff b/addons/web/doc/module/18 similarity index 72% rename from addons/web/doc/module/__init__.py.1.diff rename to addons/web/doc/module/18 index 6f16f0e9a08..6781c985239 100644 --- a/addons/web/doc/module/__init__.py.1.diff +++ b/addons/web/doc/module/18 @@ -1,6 +1,9 @@ ---- web_example/__init__.py -+++ web_example/__init__.py -@@ -1,1 +1,14 @@ +# HG changeset patch +# Parent e0cc13c2b2ec4d6f6bfdb033b189a32e44106f2e +diff --git a/__init__.py b/__init__.py +--- a/__init__.py ++++ b/__init__.py +@@ -0,0 +1,13 @@ +# __init__.py +from openerp.osv import orm, fields + diff --git a/addons/web/doc/module/static/src/js/first_module.js.7.diff b/addons/web/doc/module/19 similarity index 65% rename from addons/web/doc/module/static/src/js/first_module.js.7.diff rename to addons/web/doc/module/19 index 1d3430656fc..d95a89a3441 100644 --- a/addons/web/doc/module/static/src/js/first_module.js.7.diff +++ b/addons/web/doc/module/19 @@ -1,25 +1,17 @@ ---- web_example/static/src/js/first_module.js -+++ web_example/static/src/js/first_module.js -@@ -1,52 +1,60 @@ - // static/src/js/first_module.js - openerp.web_example = function (instance) { - instance.web.client_actions.add('example.action', 'instance.web_example.Action'); - instance.web_example.Action = instance.web.Widget.extend({ - template: 'web_example.action', - events: { - 'click .oe_web_example_start button': 'watch_start', - 'click .oe_web_example_stop button': 'watch_stop' - }, - init: function () { - this._super.apply(this, arguments); +# HG changeset patch +# Parent 05797cc75b49634e640f44b24347f2905b464022 +diff --git a/static/src/js/first_module.js b/static/src/js/first_module.js +--- a/static/src/js/first_module.js ++++ b/static/src/js/first_module.js +@@ -12,11 +12,13 @@ openerp.web_example = function (instance this._start = null; this._watch = null; }, +- update_counter: function () { + current: function () { + // Subtracting javascript dates returns the difference in milliseconds + return new Date() - this._start; + }, -- update_counter: function () { + update_counter: function (time) { var h, m, s; - // Subtracting javascript dates returns the difference in milliseconds @@ -29,12 +21,7 @@ m = Math.floor(s / 60); s -= 60*m; h = Math.floor(m / 60); - m -= 60*h; - this.$('.oe_web_example_timer').text( - _.str.sprintf("%02d:%02d:%02d", h, m, s)); - }, - watch_start: function () { - this.$el.addClass('oe_web_example_started') +@@ -29,18 +31,24 @@ openerp.web_example = function (instance .removeClass('oe_web_example_stopped'); this._start = new Date(); // Update the UI to the current time @@ -50,8 +37,8 @@ }, watch_stop: function () { clearInterval(this._watch); -+ var time = this.current(); - this.update_counter(); ++ var time = this.current(); + this.update_counter(time); this._start = this._watch = null; this.$el.removeClass('oe_web_example_started') @@ -63,9 +50,3 @@ }, destroy: function () { if (this._watch) { - clearInterval(this._watch); - } - this._super(); - } - }); - }; diff --git a/addons/web/doc/module/2 b/addons/web/doc/module/2 new file mode 100644 index 00000000000..08becf41602 --- /dev/null +++ b/addons/web/doc/module/2 @@ -0,0 +1,12 @@ +# HG changeset patch +# Parent 8a986919a3e22cd7cca51210820c09d4545dc60d +diff --git a/__openerp__.py b/__openerp__.py +--- a/__openerp__.py ++++ b/__openerp__.py +@@ -3,5 +3,5 @@ + 'name': "Web Example", + 'description': "Basic example of a (future) web module", + 'category': 'Hidden', +- 'depends': ['base'], ++ 'depends': ['web'], + } diff --git a/addons/web/doc/module/3 b/addons/web/doc/module/3 new file mode 100644 index 00000000000..c09925f93d4 --- /dev/null +++ b/addons/web/doc/module/3 @@ -0,0 +1,9 @@ +# HG changeset patch +# Parent dcf661a5eef8f82503831bdb8e6c9d2f9beb285e +diff --git a/static/src/js/first_module.js b/static/src/js/first_module.js +new file mode 100644 +--- /dev/null ++++ b/static/src/js/first_module.js +@@ -0,0 +1,2 @@ ++// static/src/js/first_module.js ++console.log("Debug statement: file loaded"); diff --git a/addons/web/doc/module/4 b/addons/web/doc/module/4 new file mode 100644 index 00000000000..55535fe57da --- /dev/null +++ b/addons/web/doc/module/4 @@ -0,0 +1,11 @@ +# HG changeset patch +# Parent 139dae60de67efa0017f5032f71ab774685c5507 +diff --git a/__openerp__.py b/__openerp__.py +--- a/__openerp__.py ++++ b/__openerp__.py +@@ -4,4 +4,5 @@ + 'description': "Basic example of a (future) web module", + 'category': 'Hidden', + 'depends': ['web'], ++ 'js': ['static/src/js/first_module.js'], + } diff --git a/addons/web/doc/module/5 b/addons/web/doc/module/5 new file mode 100644 index 00000000000..49acad9cd52 --- /dev/null +++ b/addons/web/doc/module/5 @@ -0,0 +1,11 @@ +# HG changeset patch +# Parent c8ae7646cce3f271698c844eb2d67f9a8719650d +diff --git a/static/src/js/first_module.js b/static/src/js/first_module.js +--- a/static/src/js/first_module.js ++++ b/static/src/js/first_module.js +@@ -1,2 +1,4 @@ + // static/src/js/first_module.js +-console.log("Debug statement: file loaded"); ++openerp.web_example = function (instance) { ++ console.log("Module loaded"); ++}; diff --git a/addons/web/doc/module/6 b/addons/web/doc/module/6 new file mode 100644 index 00000000000..f2c6a8762e7 --- /dev/null +++ b/addons/web/doc/module/6 @@ -0,0 +1,29 @@ +# HG changeset patch +# Parent 0026cb80097a724db8d36371bc00da993a51a06f + +diff --git a/__openerp__.py b/__openerp__.py +--- a/__openerp__.py ++++ b/__openerp__.py +@@ -4,5 +4,6 @@ + 'description': "Basic example of a (future) web module", + 'category': 'Hidden', + 'depends': ['web'], ++ 'data': ['web_example.xml'], + 'js': ['static/src/js/first_module.js'], + } +diff --git a/web_example.xml b/web_example.xml +new file mode 100644 +--- /dev/null ++++ b/web_example.xml +@@ -0,0 +1,11 @@ ++ ++ ++ ++ ++ Example Client Action ++ example.action ++ ++ ++ ++ diff --git a/addons/web/doc/module/static/src/js/first_module.js.2.diff b/addons/web/doc/module/8 similarity index 61% rename from addons/web/doc/module/static/src/js/first_module.js.2.diff rename to addons/web/doc/module/8 index 88a80f50fff..83e6c371bb3 100644 --- a/addons/web/doc/module/static/src/js/first_module.js.2.diff +++ b/addons/web/doc/module/8 @@ -1,5 +1,8 @@ ---- web_example/static/src/js/first_module.js -+++ web_example/static/src/js/first_module.js +# HG changeset patch +# Parent d987c9edd884de1de30f2ceb70d2e554474b8dd1 +diff --git a/static/src/js/first_module.js b/static/src/js/first_module.js +--- a/static/src/js/first_module.js ++++ b/static/src/js/first_module.js @@ -1,4 +1,7 @@ // static/src/js/first_module.js openerp.web_example = function (instance) { diff --git a/addons/web/doc/module/static/src/js/first_module.js.3.diff b/addons/web/doc/module/9 similarity index 74% rename from addons/web/doc/module/static/src/js/first_module.js.3.diff rename to addons/web/doc/module/9 index 295e90b6840..9113f914e7c 100644 --- a/addons/web/doc/module/static/src/js/first_module.js.3.diff +++ b/addons/web/doc/module/9 @@ -1,5 +1,8 @@ ---- web_example/static/src/js/first_module.js -+++ web_example/static/src/js/first_module.js +# HG changeset patch +# Parent 6a1a7240ea0e63182f60abb1eb5c631089d56dbe +diff --git a/static/src/js/first_module.js b/static/src/js/first_module.js +--- a/static/src/js/first_module.js ++++ b/static/src/js/first_module.js @@ -1,7 +1,11 @@ // static/src/js/first_module.js openerp.web_example = function (instance) { diff --git a/addons/web/doc/module/__init__.py b/addons/web/doc/module/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/addons/web/doc/module/__openerp__.py b/addons/web/doc/module/__openerp__.py deleted file mode 100644 index d8c23c34f10..00000000000 --- a/addons/web/doc/module/__openerp__.py +++ /dev/null @@ -1,7 +0,0 @@ -# __openerp__.py -{ - 'name': "Web Example", - 'description': "Basic example of a (future) web module", - 'category': 'Hidden', - 'depends': ['base'], -} diff --git a/addons/web/doc/module/__openerp__.py.1.diff b/addons/web/doc/module/__openerp__.py.1.diff deleted file mode 100644 index dbab2e65437..00000000000 --- a/addons/web/doc/module/__openerp__.py.1.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- web_example/__openerp__.py -+++ web_example/__openerp__.py -@@ -1,7 +1,7 @@ - # __openerp__.py - { - 'name': "Web Example", - 'description': "Basic example of a (future) web module", - 'category': 'Hidden', -- 'depends': ['base'], -+ 'depends': ['web'], - } diff --git a/addons/web/doc/module/__openerp__.py.2.diff b/addons/web/doc/module/__openerp__.py.2.diff deleted file mode 100644 index 77025f11512..00000000000 --- a/addons/web/doc/module/__openerp__.py.2.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- web_example/__openerp__.py -+++ web_example/__openerp__.py -@@ -1,7 +1,8 @@ - # __openerp__.py - { - 'name': "Web Example", - 'description': "Basic example of a (future) web module", - 'category': 'Hidden', - 'depends': ['web'], -+ 'js': ['static/src/js/first_module.js'], - } diff --git a/addons/web/doc/module/__openerp__.py.3.diff b/addons/web/doc/module/__openerp__.py.3.diff deleted file mode 100644 index e100098bce9..00000000000 --- a/addons/web/doc/module/__openerp__.py.3.diff +++ /dev/null @@ -1,12 +0,0 @@ ---- web_example/__openerp__.py -+++ web_example/__openerp__.py -@@ -1,8 +1,9 @@ - # __openerp__.py - { - 'name': "Web Example", - 'description': "Basic example of a (future) web module", - 'category': 'Hidden', - 'depends': ['web'], -+ 'data': ['web_example.xml'], - 'js': ['static/src/js/first_module.js'], - } diff --git a/addons/web/doc/module/__openerp__.py.4.diff b/addons/web/doc/module/__openerp__.py.4.diff deleted file mode 100644 index 78fc90c4b1c..00000000000 --- a/addons/web/doc/module/__openerp__.py.4.diff +++ /dev/null @@ -1,13 +0,0 @@ ---- web_example/__openerp__.py -+++ web_example/__openerp__.py -@@ -1,9 +1,10 @@ - # __openerp__.py - { - 'name': "Web Example", - 'description': "Basic example of a (future) web module", - 'category': 'Hidden', - 'depends': ['web'], - 'data': ['web_example.xml'], - 'js': ['static/src/js/first_module.js'], -+ 'css': ['static/src/css/web_example.css'], - } diff --git a/addons/web/doc/module/__openerp__.py.5.diff b/addons/web/doc/module/__openerp__.py.5.diff deleted file mode 100644 index c9492420ee8..00000000000 --- a/addons/web/doc/module/__openerp__.py.5.diff +++ /dev/null @@ -1,14 +0,0 @@ ---- web_example/__openerp__.py -+++ web_example/__openerp__.py -@@ -1,10 +1,11 @@ - # __openerp__.py - { - 'name': "Web Example", - 'description': "Basic example of a (future) web module", - 'category': 'Hidden', - 'depends': ['web'], - 'data': ['web_example.xml'], - 'js': ['static/src/js/first_module.js'], - 'css': ['static/src/css/web_example.css'], -+ 'qweb': ['static/src/xml/web_example.xml'], - } diff --git a/addons/web/doc/module/series b/addons/web/doc/module/series new file mode 100644 index 00000000000..119e58801de --- /dev/null +++ b/addons/web/doc/module/series @@ -0,0 +1,17 @@ +0 +2 +3 +4 +5 +6 +8 +9 +10 +11 +12 +14 +15 +16 +17 +18 +19 diff --git a/addons/web/doc/module/static/src/css/web_example.css b/addons/web/doc/module/static/src/css/web_example.css deleted file mode 100644 index b861af8d517..00000000000 --- a/addons/web/doc/module/static/src/css/web_example.css +++ /dev/null @@ -1,6 +0,0 @@ -.openerp .oe_web_example { - color: white; - background-color: black; - height: 100%; - font-size: 400%; -} diff --git a/addons/web/doc/module/static/src/js/first_module.js b/addons/web/doc/module/static/src/js/first_module.js deleted file mode 100644 index 74580d1c0ca..00000000000 --- a/addons/web/doc/module/static/src/js/first_module.js +++ /dev/null @@ -1,2 +0,0 @@ -// static/src/js/first_module.js -console.log("Debug statement: file loaded"); diff --git a/addons/web/doc/module/static/src/js/first_module.js.1.diff b/addons/web/doc/module/static/src/js/first_module.js.1.diff deleted file mode 100644 index 53c153e1971..00000000000 --- a/addons/web/doc/module/static/src/js/first_module.js.1.diff +++ /dev/null @@ -1,8 +0,0 @@ ---- web_example/static/src/js/first_module.js -+++ web_example/static/src/js/first_module.js -@@ -1,2 +1,4 @@ - // static/src/js/first_module.js --console.log("Debug statement: file loaded"); -+openerp.web_example = function (instance) { -+ console.log("Module loaded"); -+}; diff --git a/addons/web/doc/module/static/src/xml/web_example.xml b/addons/web/doc/module/static/src/xml/web_example.xml deleted file mode 100644 index b5a9918f2f0..00000000000 --- a/addons/web/doc/module/static/src/xml/web_example.xml +++ /dev/null @@ -1,11 +0,0 @@ - -
-

00:00:00

-

- -

-

- -

-
-
diff --git a/addons/web/doc/module/web_example.xml b/addons/web/doc/module/web_example.xml deleted file mode 100644 index dfcc1614df4..00000000000 --- a/addons/web/doc/module/web_example.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Example Client Action - example.action - - - - From f25c4725b8fdf43febcc9ed9dadd954fb0ec2901 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 15 Feb 2013 14:19:50 +0100 Subject: [PATCH 007/160] [ADD] sync-on-start tutoring bzr revid: xmo@openerp.com-20130215131950-df68dpp0iz3dhdte --- addons/web/doc/module.rst | 21 ++++++++++++ addons/web/doc/module/20 | 64 ++++++++++++++++++++++++++++++++++++ addons/web/doc/module/21 | 27 +++++++++++++++ addons/web/doc/module/series | 2 ++ 4 files changed, 114 insertions(+) create mode 100644 addons/web/doc/module/20 create mode 100644 addons/web/doc/module/21 diff --git a/addons/web/doc/module.rst b/addons/web/doc/module.rst index 02e0f9c250a..2e38733a25d 100644 --- a/addons/web/doc/module.rst +++ b/addons/web/doc/module.rst @@ -282,6 +282,27 @@ tools while playing with the stopwatch will show that the save (creation) request is indeed sent (and replied to, even though we're ignoring the response at this point). +These saved data should now be loaded and displayed when first opening +the action, so the user can see his previously recorded times. This is +done by overloading the model's ``start`` method: the purpose of +:js:func:`~openerp.base.Widget.start()` is to perform *asynchronous* +initialization steps, so the rest of the web client knows to "wait" +and gets a readiness signal. In this case, it will fetch the data +recorded previously using the :js:class:`~openerp.web.Query` interface +and add this data to an ordered list added to the widget's template: + +.. patch:: + +And for consistency's sake (so that the display a user leaves is +pretty much the same as the one he comes back to), newly created +records should also automatically be added to the list: + +.. patch:: + +Note that we're only displaying the record once we know it's been +saved from the database (the ``create`` call has returned without +error). + .. [#DOM-building] they are not alternative solutions: they work very well together. Templates are used to build "just DOM", sub-widgets are used to build DOM subsections diff --git a/addons/web/doc/module/20 b/addons/web/doc/module/20 new file mode 100644 index 00000000000..042ff28067c --- /dev/null +++ b/addons/web/doc/module/20 @@ -0,0 +1,64 @@ +Index: web_example/static/src/js/first_module.js +=================================================================== +--- web_example.orig/static/src/js/first_module.js ++++ web_example/static/src/js/first_module.js +@@ -11,20 +11,36 @@ openerp.web_example = function (instance + this._super.apply(this, arguments); + this._start = null; + this._watch = null; ++ this.model = new instance.web.Model('web_example.stopwatch'); ++ }, ++ start: function () { ++ var display = this.display_record.bind(this); ++ return this.model.query() ++ .filter([['user_id', '=', instance.session.uid]]) ++ .all().done(function (records) { ++ _(records).each(display); ++ }); + }, + current: function () { + // Subtracting javascript dates returns the difference in milliseconds + return new Date() - this._start; + }, +- update_counter: function (time) { ++ display_record: function (record) { ++ $('
  • ') ++ .text(this.format_time(record.time)) ++ .appendTo(this.$('.oe_web_example_saved')); ++ }, ++ format_time: function (time) { + var h, m, s; + s = time / 1000; + m = Math.floor(s / 60); + s -= 60*m; + h = Math.floor(m / 60); + m -= 60*h; +- this.$('.oe_web_example_timer').text( +- _.str.sprintf("%02d:%02d:%02d", h, m, s)); ++ return _.str.sprintf("%02d:%02d:%02d", h, m, s); ++ }, ++ update_counter: function (time) { ++ this.$('.oe_web_example_timer').text(this.format_time(time)); + }, + watch_start: function () { + this.$el.addClass('oe_web_example_started') +@@ -45,7 +61,7 @@ openerp.web_example = function (instance + this._start = this._watch = null; + this.$el.removeClass('oe_web_example_started') + .addClass('oe_web_example_stopped'); +- new instance.web.Model('web_example.stopwatch').call('create', [{ ++ this.model.call('create', [{ + user_id: instance.session.uid, + time: time, + }]); +Index: web_example/static/src/xml/web_example.xml +=================================================================== +--- web_example.orig/static/src/xml/web_example.xml ++++ web_example/static/src/xml/web_example.xml +@@ -7,5 +7,6 @@ +

    + +

    ++
      + + diff --git a/addons/web/doc/module/21 b/addons/web/doc/module/21 new file mode 100644 index 00000000000..0acfac9001d --- /dev/null +++ b/addons/web/doc/module/21 @@ -0,0 +1,27 @@ +Index: web_example/static/src/js/first_module.js +=================================================================== +--- web_example.orig/static/src/js/first_module.js ++++ web_example/static/src/js/first_module.js +@@ -55,16 +55,20 @@ openerp.web_example = function (instance + 33); + }, + watch_stop: function () { ++ var self = this; + clearInterval(this._watch); + var time = this.current(); + this.update_counter(time); + this._start = this._watch = null; + this.$el.removeClass('oe_web_example_started') + .addClass('oe_web_example_stopped'); +- this.model.call('create', [{ ++ var record = { + user_id: instance.session.uid, + time: time, +- }]); ++ }; ++ this.model.call('create', [record]).done(function () { ++ self.display_record(record); ++ }); + }, + destroy: function () { + if (this._watch) { diff --git a/addons/web/doc/module/series b/addons/web/doc/module/series index 119e58801de..6271f474f0b 100644 --- a/addons/web/doc/module/series +++ b/addons/web/doc/module/series @@ -15,3 +15,5 @@ 17 18 19 +20 +21 From 5e19bfd47b0bb8adca75133541540a0ee64a18af Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 18 Feb 2013 09:47:28 +0100 Subject: [PATCH 008/160] [WIP] testing in module guide bzr revid: xmo@openerp.com-20130218084728-q92rcstsr2ca8pqa --- addons/web/doc/module.rst | 88 ++++++++++++++++++++++++++++ addons/web/doc/module/22 | 6 ++ addons/web/doc/module/23 | 14 +++++ addons/web/doc/module/24 | 10 ++++ addons/web/doc/module/25 | 55 +++++++++++++++++ addons/web/doc/module/26 | 30 ++++++++++ addons/web/doc/module/series | 5 ++ addons/web/doc/module/testing_0.png | Bin 0 -> 23285 bytes addons/web/doc/widget.rst | 2 +- 9 files changed, 209 insertions(+), 1 deletion(-) create mode 100644 addons/web/doc/module/22 create mode 100644 addons/web/doc/module/23 create mode 100644 addons/web/doc/module/24 create mode 100644 addons/web/doc/module/25 create mode 100644 addons/web/doc/module/26 create mode 100644 addons/web/doc/module/testing_0.png diff --git a/addons/web/doc/module.rst b/addons/web/doc/module.rst index 2e38733a25d..138a8e91a4c 100644 --- a/addons/web/doc/module.rst +++ b/addons/web/doc/module.rst @@ -303,6 +303,94 @@ Note that we're only displaying the record once we know it's been saved from the database (the ``create`` call has returned without error). +Mic check, is this working? +--------------------------- + +So far, features have been implemented, code has been worked and +tentatively tried. However, there is no guarantee they will *keep +working* as new changes are performed, new features added, … + +The original author (you, dear reader) could keep a notebook with a +list of workflows to check, to ensure everything keeps working. And +follow the notebook day after day, every time something is changed in +the module. + +That gets repetitive after a while. And computers are good at doing +repetitive stuff, as long as you tell them how to do it. + +So let's add test to the module, so that in the future the computer +can take care of ensuring what works today keeps working tomorrow. + +.. note:: + + Here we're writing tests after having implemented the widget. This + may or may not work, we may need to alter bits and pieces of code + to get them in a testable state. An other testing methodology is + :abbr:`TDD (Test-Driven Development)` where the tests are written + first, and the code necessary to make these tests pass is written + afterwards. + + Both methods have their opponents and detractors, advantages and + inconvenients. Pick the one you prefer. + +The first step of :doc:`testing` is to set up the basic testing +structure: + +1. Creating a javascript file + + .. patch:: + +2. Containing a test section (and a few tests to make sure the tests + are correctly run) + + .. patch:: + +3. Then declaring the test file in the module's manifest + + .. patch:: + +4. And finally — after restarting OpenERP — navigating to the test + runner at ``/web/tests`` and selecting your soon-to-be-tested + module: + + .. image:: module/testing_0.png + :align: center + + the testing result do indeed match the test. + +The simplest tests to write are for synchronous pure +functions. Synchronous means no RPC call or any other such thing +(e.g. ``setTimeout``), only direct data processing, and pure means no +side-effect: the function takes some input, manipulates it and yields +an output. + +In our widget, only ``format_time`` fits the bill: it takes a duration +(in milliseconds) and returns an ``hours:minutes:second`` formatting +of it. Let's test it: + +.. patch:: + +This series of simple tests passes with no issue. The next easy-ish +test type is to test basic DOM alterations from provided input, such +as (for our widget) updating the counter or displaying a record to the +records list: while it's not pure (it alters the DOM "in-place") it +has well-delimited side-effects and these side-effects come solely +from the provided input. + +Because these methods alter the widget's DOM, the widget needs a +DOM. Looking up :doc:`a widget's lifecycle `, the widget +really only gets its DOM when adding it to the document. However a +side-effect of this is to :js:func:`~openerp.web.Widget.start` it, +which for us means going to query the user's times. + +We don't have any records to get in our test, and we don't want to +test the initialization yet! So let's cheat a bit: we can manually +:js:func:`set a widget's DOM '); ++ // Then set it on the widget ++ w.setElement($fixture); ++ ++ // Update the counter with a known value ++ w.update_counter(22733958); ++ // And check the DOM matches ++ strictEqual($fixture.text(), '06:18:53'); ++ ++ w.update_counter(73451828) ++ strictEqual($fixture.text(), '20:24:11'); ++ }); ++ test('display_record', function (instance, $fixture) { ++ var w = new instance.web_example.Action(); ++ $fixture.append('
        ') ++ ok(false, "test display records"); ++ }); + }); diff --git a/addons/web/doc/module/series b/addons/web/doc/module/series index 6271f474f0b..491e7dc3c59 100644 --- a/addons/web/doc/module/series +++ b/addons/web/doc/module/series @@ -17,3 +17,8 @@ 19 20 21 +22 +23 +24 +25 +26 diff --git a/addons/web/doc/module/testing_0.png b/addons/web/doc/module/testing_0.png new file mode 100644 index 0000000000000000000000000000000000000000..62711799ff7320f162a8107fefeed3ad7e1219a4 GIT binary patch literal 23285 zcmZ^}bzEFQw=GC;cM0z91Pkso?ry=|-2(&&u8m88#@*fB3GVLhE#DrBn zmQOR4tgmIU2Okh_{W^bUcdbx1?yuqBNwh05Q?xZT$Np@>%z>1q0mMyXGl(f#DgFM+ zGD~U1@}ruj1NKd7euDJ!V(y76nombr)kXo^HKyQse>wQaDzH64+O0p5qP~NHVklINtaCV7QGI zLWO+7lj?t^{WK;^9cvx7|0ID8j1T`m;17rlHt_!iBs9gafh45ys#Lh9-|)$D9ykI& zP1(U)lY0U8HEC~m4W{Mk2`?>Qp=vKc4qU2(3GYLp#U&$=o%#2xHp7%mAKh8r%a{8V z*yhnF45a)~g~uM6Cj1ox`4!K8YMq<$p&I16dG=#NDU*jL6^UV-M3{?R6%o6~?N_%c z8$Yk=)=(!!1P4(QXH^X8Vt8nd(w|z`lB}oZ_v$iU-g%ktuub^<+GxfG86>U9@%|k2 z*T)Ky6?1I26nI#~wh^uHTR6?_$cSWpHx|fCujN4cDQF7J&~*3ZLs^F<@$2 z3-7$jkcJVSq?NQomL*cGNC~vV-O{02D?N$3+Ollb>?WP= zp*|kI`ulH^wf7MZa_DzE8=2LBKW+T5sbyFLcvfp~ruXj!->s$y_u^+g!^RD0RKiyj zVpW#`u&EIfeJ%%v<2daZRA`Ntx7#gZZ3io;F<=sYEg+Gqh9-bN#fJ2L?YG881{{9z z<~U$Sa|3mZSL=+rhgUtLWZqVL*=<9MCF(bK`~A_nB`+UEmtH^fy+|aYNrj|Y54}c- zcY>HK^nCE-ytxhws^gY~0IZfv#|q~7M*S$1W11OGojd;3&p(@%tl84lS|qkQ9FLx! zFVF#IU~)c;&e!cNd+4RESQR$w)?0&@8!jGjUhhx>(H=0YW~(YP9K!xo47b`MAZ50F zD2}ffnc&ReXow83%FKoIl|9)(x8IpsHpW-PX{|Y8#hDqW8nVff`GXBsNi{x(ue&qW zaT>uKBi_fmGl^KB`D(;0#BFnAQkWC|jhricj=8cBcLT}ScQ_>}SJ$KYq(ZqRTGG)D ztejEH(D_oxV>dBgO|jU1v^~3HQO8rJ!UM=u@I(B($OUzkOCgG;AA946t6Ih=4ef#g z!IGE5VGa7yL_oW56pmQ|pzlefk2P~JG($7CHn4I&B*N^POy(%%=c1BJhEwiN2>T>^ zL}O!$;XU4N=tc7vTWI+4SwtXvq~FEeC{}q!=JFEO*9Mn-s&(Mst$ORa9-H23=o9JJbPt({zE;jCgEPDZa2OKTWa~NL8hkj6FRZ~lN&CYY z(t_|B4Dd}gbP2|k@}hT7?iHl1e#Z5ksgZ@S(iFI__Ux*(q23ig*8XF5W1Inc{&aF$ zuS;4oX|i;d#2cL;=mV*J{ZBcfo<(h{t%R43!OgJojDUnMA57QuSNc7xGhOfzqcdfq z;|U%W>{BVc2Ps^E;>p%J?-3w{@*6~^MI(jO8HECAWH8F!>4;h|H_Pw5Lpwn&5bY#{Rd_A9h>-u-^ZGwWpbpQbkg~uoM`f#XGf6n%au3!18veZ6(q$1WxthC zy|XQe|76*~(2z}M^Y%wSY$Cb;fR%|BI2;x4L%Wrx!k;;$h3vZ>5 z%Bo&$<(bxI6_mQO{rcP-_39uMJOzC`AwX$QW1^I+s^lzLykCT+a6=m%bI{-*LN_>w z{-nu69Ol;ynr57w!}>aPdL(of3{tsSfM(cP(<_iJvAy>dKIi`VzsKU}YbQVn(6|<= zy(XfNe~43+{!c;&neRHM)DFawYBO|84prVu_=>y~@G%$dV`n|i za5=+T&J;*IZOhlshGXbvN08_5(|hqvktgb4H)&c{1j&m7B(BYcTQowr;;YOR6R9ck zl#SXcIpPaA5npa4{N6)UKLbV?8uhyoX=9b1UG&IPnS0g(n3$!5rb)M3-9)YLtRCVQ z1QJO~G9r$&F=o42nnlrhUqdJX{~msRKMAn<6ZcvwK>8wp+=4}#eL`96s4dEe1onh9 zSb$mH&JW5`aj-WsY-({H0$>msyJG|J)*dSgR{496``2h5E1O+g2s7~i2y@;f1L%AN zyUElqOd=&K>-}^Sg zSk#NRe=CJsho$EoaPyWH@1QvBs(I_Rb|Qguzi7exg_-_)PHF*i#f7$Bv+lPA3K5T$FRQWmfsa!cQwz25tJq`xJG-L6-kO;o`e;{PuF%u5AwB>63a_vvE24lP9ebX znMh$>6FTPf3co-)Cjv_|F=v3GSAqL(pA&XF>mmTwbFl=aY}uVjD>6(kNS7=y;pIRJJvAF^5%D6LlAg@8EA;}b2mt?c7E1ETr)Rt-@Kn7o3l5asJu`au=2(rHQ| zoAug&87$2=Nci`bVu_W&G@7$da5(4{QmWsX1r1VIQTY@6euB1%yZ(tM!NghF<{Wn3 zat5X`2~;^6~HU`3Qa9U?9M)N@>_%B_NLpXv|x-S5Ax zv8tc00_Z-q++$|^KP}7s1wi+Cp}_it{}`m8KJQ41KOt826aM?#rr~%mN5|^AI(A;( z7jyigSRy4TtyW+3=z(JhXr86={><7m$E?LgX(XM>e33ZKQtz2AUbDJ%33t9nstFj~ zT)!klMg>o-Mti?wLzmiFP6QqE>dSMfhsIpjEZE_vZ9`p@h|Dd0o8fT1wQ)QI3pD|M4r4R720o zgWTOMo;RHFNsq{sYU6x9X1}e}dqV7|B;&TbXEMan&4`C{TW{f$&-NDIcRpZ6n7n^S z-s|gi$vc2WB4gq*QNhu3AEJe^mv90Gj#{N68LKNMepbFPuY~SxXEd4lgY;D+(C_8- z=_Z}az6f0HCCR}%yoH;h*l?~szBHD#_i)I)*zk>k!7H)f>jC;loAG$8KigVIAZ*m#m1O4<4^ye11>RTuh(yJkCBobC&|v%>ZFcVtt=Ut`huwk~`I2lg`>9 zmGXWzRbGto*C*c^;rAfkn$S(q&U&KlnW;Mm9imjTAz?uW`1;eHS2o@e23JnV;_=aEsEL|9702K3JRcOdRL*Mzt8#8M@q%8mCVBdyzlxoMqiX~5rUs~ zY8hCClCnXEPjgk(lwIRSyZ6J^PH2qpChU+Uf#0Eu;hiGk7-sf z4Fm7!EzjSPxA>9fHNrR%->WC@TV^H$c5*u4ukpl3t-nweD$2xs z9*X7aI_22;Yo!8HmE&d!pL0XWyg$RVx_L5%d0P@FTx@cHnt!xf=B0nla^%IOj}g8+ zJz&CZs@_47K-&^R2VVuJ;AU>;O;>4kF!=^QQU6Gy(T7_mM%kRQcex@zCOUgX+HbFA z)H!-ClqvWvVHS#X@G~lF$JRZ3u4J1_L%+B(@O+&XTs+lTE?zVzo#WsX6r9Gj0*ej;+l~+h+4s&{0r4U&<6mSc`czwR7 zd35E2w3TerxxPxXJ9{DR@#6uwKem6IyOsS)h_~v9-3t@g%%Q}@ z8bp=iNW*Ib%iSY96byO6d=P%3sNpeX9D?h&&+@H7s%^cU&)`P#JTRZZk@J>{K4F^V z=By*4ODx;o&aUrrWlU#L$b{vl#k37Qd!Sf8HVd{J_tN>+oM6O18A6?mEOSbgj7|53 zII1=XX;Sn(EK@`8)!fe!pvWD{duLUwTYiWGXP=E%pc%B03DE;sJNmiOiTxYZHXA3; z?^}Zn!7UoCD)DaxQ*ly+aXUr{9vv2QhqDz(xxc>`;n?tO-ba}pElq2{p)#`D@}ENi*_Z(%;76uPwS9CGEzwv^tw?%xMkC6s5#w7w(USB(0~r4-6T zwz)Q#*(p5dQBHtHSx-d!)~6V%vdk?{=&aokTD1>1Rr}gZLPYfYtKxZPbp>;uDT-GY z7}pK0ay_3ZfgF!|pL2srCNlTS7f!+~62=>?0~StXo@|lplkC-L=mq7!Qukxs@`{{e zk$P^dxxgWKz;R6CY@tH-G=93>$r1kHLZ!indBD4Hr!wiB6b1SQbMf<2h-WOrY#BA} zcuS3sVaM4T?|~fMw-Rr&z4N0%bU_+F6RFi@%&nN!GVY zgsdfL`Q~%PiRu8d_ z5_m^&Mz+gvHAgKQ;5>x1fkyU!4O|7@33pBa=uR98J;cUgI8(6Z|1?3qMia!gj6tqm zAu?BJt_(YL3=HJ((gmCN>=KKls5p1~{5Gei8IAfkSS*UWL7C&7!5CLPu8+Px=zmEx zJlqtdD8AmbXZ+jd%5VOcP#Svn1*Ds49uVz0LUT@U&7P&A0zs8B_)N(tpMWmG+`Eno2~y^Az61 zsMO>AR*O0^ClS?N#cN&<3|3YSb|_+^%-W)GZECI|DjnVDWIk)4+a#mkz=F3r%2i!o10m=!TB0A#w$hGx+pMsc|JnQDoZs_$_vz+<+2)Ukml)O|(?__QwM)=E+i5VR9)StPuAWuI^iW$>GA@bT z)ky=@opx9Wt_|D<;lS^q9&Gi|FDm z`SV8t2Z2rbKH>c!q|C!M>#Zsm@lmH!ADkMjclbLq0NvVDp>lDn`^CE@UcK8cfOGQpcD%6-oJ9LiTJ`zww6R=6NG*3U%ca zHZp7`uCKI)i6G$*uP_&*+e`dGAlZcF2K)b&b3Z|!8<#@LU%WC|DhN#gw?RAH82iLpUcUTWjt z!`{#sA|9PdI>0$!KG46DHFE95ywYC;p#~KbsvmhPCQg@U$BAiy?-VwYzKiQQk=Yxr zT&hi~Z<|R=r%yW|r^owv645OgI;g@c%u$*AkV=@^$e_*PeHu+df5h%SNFjRz;jH+z zJ=Obw3yzS3357+Bgo_5$r&8}`uz1j!Rztwe3Rf~>1y z&u?U-yb}7Ft>dG8F9_PRcvh>wM!pi7&nW5H1g5trC#cAcCGrxM~pe) zhi+d<(D7MGu<)HLW6nBzb`P$kDDx_3>dk$LQN>H^nV`#L<8NI}^uDQx0E%haj&NWm zsvsz-1Qht(_lX|Yv`I4C5bMnY6*?3?ZiU=p8y4p8Blzf|@C;H7ad@koFXlqWI>}=m zBjz@1nN>38w1TjFThiarGgNr5d$wlu`y-dLO>1ikmU4QTn{jG0JIHzl%*or;gQ z9xbVhpvCps=qj(j^B|7q`R9?B6-YZ!(KlZx&=KJL!Y$?N8yx1{!NJ$Jk^ z5kl)Bro{YkRe7&xjQ~%Qqj@;bJzO^2qCPdA#&k16-Ca!fnrB_6yOGnhb2MdinuO_| z5fy%{#lbsb*F#l{foEAWfrn(A`)$B*f2DHiAY~{(*=}2rVSO7P=6lw_biM|!t!LZ` zrv16fi$mB_wOpaY+rY+XGPieIPyC>eo+=GU>s|EW!dMAzcViz@&k0V zw*ozR2A|q;%|f=L<|%=FuF%rXEMTsLelipQ6VMPLPLJ%@M2h!imxr#bBs*-mRAXbU ztgfov)g9@{-70(p&k1vh*p83icY*TyjcObty#ICe`k9oIktorJAQ86rYJa}^+M2Bv zn`%BL+bz)Q>-GCGF{);TXA!=MNyPV9K3{iqNTO2mXS{P+JOVX8zE1 z9p7L7QUIPEpuWz#gN?QA(%3ry;y&=Y6i2EFdE-++j4;rfl4`8MsM!xSnRBpMYNKPB zNA6ZjBT{Z>CApO#?zXf1JFAwXqCt?+kSQyfuT=?z=_8;D=UhK_!{HNuXKp%(-{Ky_?vV$kZVeu;Uc^Z2A){ ze?MpJ8#S+sIp@yWmJ^M1J2QnX^v&lS^H+Ww1cs_(a0~c<-E_xvNBcT8q(=aMcHBxSeq&bY8x&b+mPaM!a=oNnV{s)0UJB@^D)m5!T(_?$~eK2uG1k z(&r7canC9loO^c8WwyJ4zdg( zo_{VwUcqxRnZWT&zZ1%xHSgt+#%=3 zxp~e?p09HeE>aX-)0(){05(Yz3sg}HBJuKV4F zcs~g7tSSMbssUl8YgIQR9Cr>&0&J_g`PsJ4zwUCH_qR|d6F7Cp*V@MmpqU*9wT$01 z#=n==|A1M0A1db?jYrzow|c4Xo!uO~!DZ{^wSVRR@tkF1BoOW9yclBOFII~~*(ax8 zWfp(XNEATFCSJ&S#V$Mz(D3MLk;>{IB8A$opgwzuK!v`jjM!G%nMu*s|EgV%Q;GDD z(&!YPESRJZ2B{X<>!xSLM4a08!&v@c=&-w21yLv16|erIdB5qSI+CnhJr(a^DcM?Z z)dl+L2)=lHp^`+JAN(d&s{A1d#=snS%v0wvUT1qin2JNT9ITMtZQhOd`wiFwNxfZ` zXB^9MH1xw!AI(_dubbrH)31Y6Z+}MzYkipVukSY+)!H)$SL>ei6KljK1-49*W>2pU zbDkvqIeUhB52$j5)pC*zOmr=SaCQ~%JI7VSH=hB@slG*VW9Jk&Bz6k_$3ANlv*OOI zaZToeV<@eQ(fS#(y167{VWca}S$?ihDvt1DtUxdc~&XSudgh+i1!QR0+Z10s2cONixY!?`x?r>_R0=H*F>!Fuou}Q( z5JP5|1PLT84cBl8n|hH&a(Iffm3zZk`)&ZwJ}9`Okc7XL+aTcB-F45N*WF+P>1rZ1 zniEu>j#71D<`z%BAS4s{#-XJxp9|9m&(2UU&lXuK@hG*5&nfH8(j>cN zM~{%L6=K7OLc!cB@%7fim8EgPEo9bpv|UQh{rZ)*A?ftT(fJW1CY!KUtMrnD-E~%D z50UcVUpq9sTp zCZ7-nT52*X^6HP~tAuu1WT3HAFU!e9i8(1cS!~6H36&uXkLk zlD^uSlCrW~PneDu5)y6Lp9j8#oGGJ%*&Ph#b#B}fT%e)3a{uoGbB=JN)jx^Xi$=%= zEnb#t-lU&p5iw(6j$g*WT^Em>{6R;jf(mYrlHDXk&KeBTc1HcR>@N4beING-{!+F? z{PpIxyp0qLR}lW5W}dadzyY7PZHh@>U|B5C9iKP#>cJ$Nx!-FT=4bX=H>MPTCV(G) zzOAeQEom|);r;#&)XC^=edV@H1G&a7M*`9w^BgD~>r`7v6#T}zsO#7{lf?ITZmfJO zYaeQbxvl*chG+D+Edeq`wCvTLfDo~pcu!zm#|Qmb^F;s_B=?|*fKqHN8lTvo|HNg- z2rC~s=Q|piKMXgw$#6F-D6wjCz21^YBwF=U$%+on%dIuM-1FwG z(Ban9V%;09cXI$UJon}F$Eq4AcgrG`YR->>>UTfO51*-}otvrorSv2#uF+XPNs#QA zt@cX=DUk62&c|Fb0B8zC{fSN`&(#GWew(!aiSw6ZQtS+SK@4nG14IWHTG-pukBSzk z;hq!YGriGh$MOIkJZ-R2w!ECRj9hzmysY2kDeDm^J38&k6YWRbDcy9aXm!&D&s%0^{(w%o8$G892*)DQQ0#QZG1!OL>gB+iDLs zxajU!CrUYGdsS*`L>#^;c)%{?XRvtAVz3nywqhYssh!u@is+5ijyuHpS?VZp)mm%hCxh{W#q3>=(?42MOT|NoY;WLv ztgpIr?aZb-(oQK;8S@&_F-l&v8abC+?^d(E^1NG>*j2GHy?&RmH;f^;%d`p1Tyf@3 z!(XI8MzCuO99StiCN&mwpP42y%TBX)}D1V&`{HU+!vs z=wNQRo~Lg|(|b?ke^T>r+bIY}`@8wpXu8?OY{rVoVnoCG;$K+SRH}44Q2ip*3I)cJbKz#_2nKbvFqIJ%O!YZJM=VBqwAD z$Xf5gDQrO4=mNFarL6j8dD&kqx;5Bn)t~X*X1832Rz}k~*ae1B`KHg0=JdLAqZ*dZ z_KY0ZgisLnN!TxcsSh^Itg;IpY{QyyH!$NcB3RY%$0zh*`r2Q2Qomql_CvYdbV#ZM zQn|T4QdPp?PvA`htw@QMKT|g-flu_Ltj}sGk-3u^wzuPJ0k_)9=yG|_l3nS;XwDnIx;K-ZDlJ{lEqu(qjD&|~ zj;&1lh3EBP$R=vU=)SE-+o0-BcDgv?NTy-H7aNr*%PFrS;xT47gI~~h!L(H}@uvgt z3xAV<^SRT(8^>JjOC@^bye`iv>x0l623ZaFP=dGUC^`C&f{B5HrqH)YZhGraycke)wKzr+c#;9{lbpQ~uji(YTbJ;}vbsOh3_z=Sn zU99h@OG9!`6b@*_K4&^Nx~)?+n^-O1cJoY1Qo~p99*gVVLty6MK6`kIFu7j^RpxV& zuvnQkq-L=|=FfhUNvHrDUE77~uB)3r$On^t-*LfBjiLm|ug)9ASm>Lle+cJ4s7P-;S3TCtE2ts6t_etV3Y>MU(^(Hwbh`nP*?0$# zH72a<*I;0cyr(brq4}ArPl?Q^b^efHD47`cwp&qlU*X;Gv-id;*v;yXx!p~6G(M^6 zRfLV`2+F~y_{tBz18R6@lfG;cSg)R?0YgfN*+Pwt-Cp7PaL2%OgxVMxqbNAPmphn# zX(iDU^fn=A4-L3DBS3w*iqRbc^%9t<4h1!x-GF6wl_}U7qlg|Su3tg-;9lM5B$?cU zEgR9)xu1N#0cX^Lhp6lG9B(D`Wdk)!YGTW)*%jG|p#74@#TjfzB&XQ0TLX`pJQ5f` zdJSS$kTHlPPq`aZxp|k%&oH)aIjpy$r_-4g&V;?l3!er!FlA@*O3TP<&WeYEw3+x9zAXEdkaS*^fWM9IO0p{X|q5ILXh+*h23TjM0rX&WFH zpGxG-WaQ4K(t18e+C(C4S~5q^DXxr;uUaaZYcR`&-`E& zHaQ%eKQaf~P)oEz${}1EG2RLM6~^px;2vn9d7PbQIc!MHILs7*%L^dK?J#ngR(Dgj zQ++G6fZ4x$TF)w@2+EsT9R>B-?T-HbZLpxgC+=lib44;M+!a5q)HQjgfm2am?w&k_ zN;pZO_wQypsT@;(`voign;z^9^0ptj0myexFx~avQ-_}LR~rlAc!R#U9kRfKn3`s} zr7yX&V$-;rTe392(^{ENxSoX_ag3Jr_Vc>WUUyIc>Gp~)Z3 z98jDM5Rp*t_l*_+1O;E_|~@;GMPu~bv#m|(ex z;?vX2DTNoM%v4b&a%}k7n5CU_yCcN3KtY-@bfTDTjnZ9h#9APqNg+M0X7NGo{AHKz zRNS8DXjq|w4+p&v?@{zvojbuZY^=7ywt5!1JI^nm{~z8f)$Q#>vwQ8uM~oZCI(%u> zM2%a9thLAk3cM^>Bd`VSV+~vGU>1nXjv2f9${pwybmQ&V9}cWRqdCj+Y1QS}yu7F3 z1vV<$HqB97W?-vEvEf#Z%n-IZJD(d>gl7zPJHd6@+HR*jp;?-B1SG)qc`tSf*wqz6 zcRI)YzpaT-0{$pq@S;u<4*>qK5~&W@C@@*nVZqi^9rUI%5&ueCb?16yo}T8sx`Z9% zJudEMEas>7#(h=4g-RQ2HO~)MxbQ>3`Cj?GsJ{XDOwOdtj^Qp&M|<-&_C3b880)1Z zzdroapZwiN-tDtFwgQiL(P=8m~Jx(X15)>uQ1ezDO`))TL@g>9(&n*2Dv%ab2%Zyqbm{DW z%=eUcL5&4JymVnxyI{V}+*1uV5P}oC2o2@Nyv^uqqomjL{y`(sYMMhXVdTNIr=El6 zI|qaJsiVx&cq;Gb1(+i3O?Xr`W)0KxB4p#<_ zAuMr|fEagBmt>8r&JVH%b0zil@>3n?!YmJ+%}fr-_Qul(Eux6&S^uSdUxbAVNIP`dDXkI}UI+N&*q9#~C|p_Y zPV|BB;X#6sLgKQLEf&H(WIEkngoiYZS4^)wE|f(Sxb*lG18oEL8?Ijdy!gKXBNQ`XDfFz4l!g@t9qg|^h7&v(QK z&bK%M6V?szkqt?{KN`boZk@brh?7LJpced$(K~}SCZh@9RwQV=#E}YC{249J=Q}M& zQxiTjO^R+3G!`AbGuIrce5ke?fCg5^PKy`!V+z*fn-blm55ZZ8$EE?^fgWN?2qNZN z83syCSXw`CvJi%t$Tl`g+-6ucEP4vg*;HnqgBM}=@3JoeIcNoLuvu7FJkFBsPmb-) z33>PDBP*1#*f!Mwh}Pz;(VaR*+dIY>UGKm@Y`K`)RhW|be~*F=Sf`F2vBG!a2tj+< zE{5FL(AhE%sbml4NQmI#9x#j(R))(uF7juWwCus#yX3H&yXsy`*!P|X>Fu%M=rDL& zzEm!MKvdSh2Ouc=XvP2uMwnjLR}vP%*xYD&Q@^`J&qdL><6^iTF*DZ+IPv0oW?_5e zk*`7~+^}^}CYnfmrEoOVF$M2^Synqt14)1x@J}RP3Sjy!-sJ!n|C=!gy9(AAk6F9%OS|?3PH;4Ay6S0y_%}#$3$y9@u~)ZTXiiZ z9MYn*+Bhhw36fyvfMsmUv5;t?x8lMJbU1MRg{#G?>p?X1Y~_#5Lo#3exKmNP1Bs=t zMx;;sizKywz2SaraMX@$a$Ab7Vv^FE8h&C;t`PtTfM5oL3h|9NL=p0|MlEZFM$swj zhj=&}mO}geW&i7Ad{(MRAJI^llG=c7OSnNM=}G|e*F8GE&Vg9TcLJra$p&7#v!--t zKWQn}4Wc)GGna8Y(G3@8j+tJNYc!%e{~qUE5cpcuOLHZJOo<`_l{Vp6)-^6L`Y6HK zv-Y{Ww}n3(CXelmq^hKTc!549GWs#|5f+~Kw2&HkJtx=tg4{DL#{B$FRXku|I;H8l z>&~r4Ba~9phhNw+EZwDf+r1s3J-W0Rb?$hd z{dt%K!OoOF2@4hL&nzEYn)UbP7n$b|<&Vr_vfw{r9|McM8;-b?b)EMiKoYgj!c#mT zQ1u^@!6{RIVi<)NEoi>Z1@NyrC3Rbw@PAjTr2k`yrTb^6_^&e7X94SfGD8+uwqyP4 zGt7@Vc6kw%z~C#YKRHPUH=qK!%_FG!{YpZ%`3dX$A->Mt2MU8)@d6Az;to0JFKULa z(*6*i*pKt9Tj(7qISlu;sgxW}6ANzTRaP4M;fC_?+?pUuclrIfBK*NJ<}fks83W;= zFzT8`>+A}2sn}&DV>UfSV1E(a#GWNiFbz0XQ_*jwBwEDs%7Gk88g|L`%ZtWDb!TUZ zA-QpGSUB}#T+(Co(4=i#(tbYYMvBg&6vyfi{L&e(kbMvF626$?Hu-&)&hUhtr0?4l zenjqPf3~AHSog_{BRMJJ;I+z|JKJJ0WCHv3UtEBnk@U7g5-5|_-+k3fkfx?tqOXp{FO;v}Fgl*O7B2%Wc4 zP2ZG-OqG%O@UIVWdRE+J+8dJJ!R$Ii6B3php5QA-%AM+Nz2dMX}GRr zPSp~E&y2{AR4VP{Mwn9afm*`X4rxHvFz7q-v`a=Yay2 zS);3GbWyz@786o>Dq+=gdv^6Q0R=)y$Ej_M{jQpx^c$L=O=v4GP0%F0C4(dc^U+l3 zfm|uCi6^5e1ZH%+HnGJ)8Z{k#zY?Tj!T3t30E}p8t#kSS)^?I~qNo5*q*ytmrLQSd z7JBkn@JpV)->mDX5#_)nEY>a+hVB-uD`C57SyNoixnghY5seXk-p4Wq|;92 zvO}P=i7W9%yz$UqOGvwxzR^^-f`1@3)BTweTgZ)qjII^2*DGXfLkepXnX{@0O5LBf zvKxo3FD1i|$|BX+o@D@qhcm*`R^Wj3d>glDJd)6(f-VM=E@=a#D2m4p@Pptftz=Wz zuUJ&Old?N3=S(XIB);`n#Fn^T1s07MJB0p+97sPG1Oh1INr00T^jX6atv$}k5UJRC_y)r_vevpST~=-_e$DfoBX zWU|fuku4Pe6|5+d%DY>IY6}8vmGQW1# z@t5jybAs&?zbl|4_sd{(`7-o3z(s|$uQ;H6cN+?r^1p(Ui|w4*0!u&G-@_7Byk9?Q z5~lAC=x<;rPw@4^FZsb$$l*mb9{FYP5_kxoPG^g=Nc}g0EsD%N45$c?HKP}uBa^q# z56_q*RYaIZ;LJ1yi|tEZ=>QRfMUVfaL}tVbOS_&EMD!(Yw_AEVH-RY@4<69IM~Tz5 zM*=akpDax0#UoM@?ti0t``R6G|5xlh>IcT~Ugdm00vTP*Frkrlgtn}WmGcm5KQZg; zKkq=qAav}MIcOCr<8;vmd^xK;t&7_giiA-;CARvcOT>QsHH^&sq?|Ukh9681MhGI& z(*bxoBSn)J$$jl4MSOPWs0>t`ch=c0pELV&I^elH`af&W@kQF_>d-8brwa4G4pIDP z4SFN?Hh-BJh#PcVSAXzV9lvv>tM~0sFG4R-rF__KQm0O=qi}~6XGft#Nfx67IWXn~ z4CwyZ&xmbG;o*bCVCf@;u6=~7Y+q!sPB$ff;H zmy)XI{{<8%M1o3!1qmJ?^b(^wx;Ha#@8a*Hx+IH@+pM3BHugJe@bJq$93{rdsqr+S zQgoO3-U>(424SCN2&YmZ=;@zCNB4XU)aa| zHo0JxzEh$+r%*9G-4l+KBqz)N5r^$~UeJV8cJsFWuk@z4Dad(gC=0He~Y z#D@^ETAF0x5B6-4@jR2vlOf~8^Srbl*bZ^HxYe$1OtKj;Zpn4LH8AFL{IU#BDF_jX zWTS*i$pknM0H^?DFy&%1;-udjhklPm=yl@d`v7Eqi6eoM1g)%9JR=0FlrVfrn8f&f z8(WF9OtlAr>QlV@Atz(Z%37lzKzMLMco2GN^xLHpB~hl#-gu^0GGA&7Kt{h!~A90H_p8Ki4t!~x->QExIF-&lR9FVvhW|#pQi&-eUGECb90LRkh==qKhUXzCw|ah^N57AA_UJ~?zkCkTuaf@v^To%Y z|FaGFe{=c2I^n;r1^Xm+C`z%7ym!x`eeQvYwk>hI_kKNuz#3?x;!hsWQZ5ljgJx}x zh9$9Dg5-TD@ZjYc0;e_0a~s~*Zf9%``Qt3^cEWN@MoHgs-|3`{^kqEEn1gy*x}SAm}Wp&FHBTZRSB$ z+rTI=U|$f!x3g{rdTyJRy1>uTk5rO>C*gQR;Zc^#q;AC;5YW0f1}fGV&{#i0Sb9L_ zyXYUj{P}WX*kOl&bvT^cl%gAT)&HnX8vUM% zft`>Fr4Clo5e&GKqhVx1{4Md3E^H;+of)$|p>_2`j#Xz>>p&_Q-Fd1CW-^6ON!Y?*T4?7}Jfase4=r9Z7&mTQXw2-?a?M z<&0!XNpc5K>GA>eir~~^OvLX(P50hPajUqqrt7(@wCR&{FnPbd_Fok-25_pPRwkzW zDu1OMNrx%7E<)OU0fZ=Y6_#^*Kz!dy@sgr7FA}bn-B8O{HwS>-A<#RrHt^t!3*#DF z!&r5l*V&gIqV&^yGswq8j2>Eqpc2hGamjYqUCx z{*i$jx^R8#WxJyO=_O5lnS+}#E7G(rMR4?lwJ`!uBciI>*_7!Y zjaS6CKj7J+6w~HSP;>kMdlc<6o7&WQwHeZyGrMs*UNUfz0d#>tDp}UD(C^QvvqVO; z^^ku^Q+4@h+Ebw<3Kx}n*i)MQYk*{CS`Z8?(MaOlSTy@_*k&z^3BTmgw@qPy}U*O zt|OcBwxt)hP$K*rE=lN!6lC?ks%+n9poy({Q{a|06Tv06HDp@f-&M*xh$X@6j1B?q zOPs2bLyN~}i10QeTDatY36Vw%Y0z3?s_zZWRp}5jy69&DQo)7K8VAB%*+Qp_&<&WF z$NC}M?G{OZ6fmL)DqBJ`p{4-fBDN3mWf-#tQZZkIW^*yV@=obeFbItnn}us(FA`Mf zLFC9uYL|a=k^-c+h7&egco-DdlV9Az)_a?( zu;913mAn@!&n!o)m2B*BcI}?|X5kTKUU*~U8>}w|sMe6*-{>R+ zK}XuPvCybD`Sz-~8yHL7Q8DJHSwG+$^#J(#d z?Aqc7JR;lL#k&^KVg%Bcu8On_;nwX@@K2Z}dGrfeG1Z5y6hPrAJA!93LERlnhoGsR z4~gEyk^Syel~7|++-U;NO0#`|X!0rZKs)V3`tJ11bigeN4GC8nsI1kxlNi#&1xIV=7 z%~RGpYkH|>{Z%|r^&n3pGdCRQU2Vf4GxAtF)J5|x6NsIp(zvoZ;N|QWH&t>6B|nki z%P(9qxX3FxM0$Fr&K16KTmboT$B*o{o(+)JW;5{MWAlGd`oEgE?s&Go_n#`YOA)h1 z?X6mhlG-G;h}zVyU3-u6p*5<6ST$;kStC_qRB2JG2&rAO#NL};@JjNch9Nh2$96wK^#uCDB;?jY&!+LZOtz}uQ-G}#z z2Dr-_Z>zn@<#}{e$}jo*kmHyT==FAjc9ir3vs|25rRBPa{;UiXGR0hLY%klHY`X8KvxC4JHJ%ZTxsOx$~K%DHu^yY$_6avw{*Gt=^|hK+m#j;vKX{>|DY z%FpnXm;ip!c!7ENM4eoxl@slH9EjZ*xJwl{x#l=&j3JPoRpLW2K82EwzRR9;7%~)N z@HPLD7z1=fKAxF!M4Aa%hiHV?MrKla-n;kM>NSQ!r>E+zowvjECmIO_+yjO3z;1S~LiIDD zK+U;x&76BPa&KLC${oIKkQdKR#`axJKT&Dsc^u}FHR3(S_8jH%!&ei~n3bJGYU%h$ z5J|}JN06wS(UIl)rz{wokXtn-bZ7vpcH`S!t3tK-hHNP0aIOn~Tk))x3rD*$m}8kU zmc%o*W>@)=C&_0G0%|}ieqH1p42*s%1J8!)U?S2W<}%4BhKo+7chBfSV73CzC}@1X zoQkT%RnPkc!qmjRj}i?qySA_9=S#J<9eL*y0f})Dhd)yY3yONDu@4SI{mqwLQ-sos zH%0(D&tAh>XLr-n;F&Ki7r8;1158qdJJsP%hAQMxm&NzR-J|z)zRI}t2|IH5g1*Hf zN^ddyFXf+(hdn^d`>Op0GI+`fz+GnKYn~xfb`y5oYwb<*-BOEI6Q43>;t zElqy9tL&QwKJ4`nw&yWzqaT2W+p~1di0+d43QuvM82@@%##FIcosuM1tzpO9dg6vD z@~Bfc8!OzxmC1E!Lwq(L1TF+q?6)%xxo)a{U`FScNF6$pGU?l^M(~Dow`awfzBh6@ zM)X$r47i*hi6Dd6FMQgH<3QqRX$LbwJ{wOhji7Cd2eK)>xD$-Qe9w?P$6;A4@L>1t zlMk}E{T+HCIluZj1`G2(vvE+1fq&0 zR8z;hcpq@dSqpm1^*3Zn*cl1xH}@TPQjw-)9=lud(!$_BA5thonPRNLf}Q`3t|}mI zRv|lGhut4oNCDRdRH>Nw*L=4kiUyaiU<3e2PH(`1>A%~Z3p#vt0*vRs9;ahE{pYUx zZZJ16f*W7laAA{RaI%OZIP8WYiziP+6wO*eFEt&9WYVo54KCwHE`df@6Nx5nJ)}`F zPGkRMGu_)Hh$wny45iW}t@7b+hhzJBu#3|4y?{;iE|=L7|y)Z7Km;oVS;tb zr5nhF-qU2|f=%AZVw`K~ESJyyV{^m_J`=DR6hi9)lVyvrsndfo-_S zk|4Ln=$1+(gPy4uOOo7nol2XlcK+ZQ&!Lxk&b7}ms@y@!T*XZAJu$9u+uwE)uwvn+qWyX8De(?oEKD|d;;X7^sJg5e8nEkB^vdLyA z2@3tabpl<(d~nB#B!Wul((XxYAtY<6#(9-4W>33|uI$BLo}OHcZu$hIGp|dLXX(>- zKqu^YKa4Qolwx=!bwXr9(Jz)8f{aN0#J$8m*OiwJ!FKV(;=zH8v#MEv&+{ED6}n!w zl2n_{<&iAcHhuE@mCUuB$MT~?B#ACV@z3O;sc^C@>bn5+gNlus^Oj|5`O zMjKhqH3X-5jzx`SO1}k3Cjr1XWnRM;{>zK0K5`k+IHQsU)nzYOXFGe?v1d`h~|DqyzjuJovE~f@o(JN(YVW&RxE^dcbEcl4|~I&rsvNxK|I?#=6b+N4XIUdK|gp9ep)rADVzZM-z`u4u{5)G9xiLF@#VmYw+V zCJS%&{laW6B>br1`pcrmX)j9yfLzjtJs4y0X^zSl^H_|(vM&{Dlh&sQ!kNk-82!Y8 zaR=zw#@h0DoF>8sN=!vlQ6Ld5ZkIon&C= z1|(rj2EIpJR}kV`4lKuLv2sR43OB1t#?+glM--h&Fg$FZXq^20x%}})``DGS7Mgil z`}hryhb3ihGEmNTDAz?;HZ5wPwdvO9goKx7AbopLMAC3lLh3zgo*8=GF({0{tiUjK zl>y?U7fW&%G9~>7MQ#Wv48j;%%*&_T$@*2dpS-^K<*yej7+u%$o(*-hE3pc{> z6+GB_3qpiXKqSF#avGmGZ|M4f-(7rHsA|!hJz;^7Mfhe8upqwj{~&=P^d=v|4J0A_ zA9$!10NqoZ`&i-D#crzqWG;+{t!L7;NnwMR&4vE&N3ju&<#Nt+`(jg%myM1VuYacH z)m1?g-#2A5p%=mC;w|(S)>01Zl(KhJ>LEU&EyP;y{AN+t$=mYR z73jIE*hvk>;+LKL-#CX|~ z3au({szlq3O*Va$@nI}yRjtqD5x-xXeJ*ZvW3jIFJe0V4quzcr3i6!|DwqNrB8-2y zD)rd(;WB{XgR1sn%Q?#4@#KBPcdJ`=Mu-l!HPu(>2z>U-Mp-~4beYN%VXMn6^{PQd7s z>r&2~A`KMHQDl*8jeh(5N@!T&hx35+B|@#eAj4U|p+3MG`Drv4+ z`ZBsAsgKt?qOHa;KRA+AVxp5#EFC~4!J4A8MPG$_k`J#YYpSV-9jLpzKin`~r3$XF z-eGZ0>Y_{@bd7X(t9<(~6qT zD?efvyw3)@#+i(i8%sBA+a_Vwm1Oko9MyIkdQGa4M-z`jGRQ z3u)Zaq@IcuIxDvLXjLR9Q(^jr5Ot zz&Tdp_p4e)vt?R)s^Di7_kLCyOE9-@H8Rg$QMK`DEJ>x?@6mB(CGe^2K>}v!m27JX z9ObzA$b|gZlWeF<#v)_!bb;{CR5B3jpp3Qyt@?UJS;NcaH^vgjzwHoxV6JZ0Y+|`D zz)&#U-mOI3=ERTOi|2kEy6b2+b)~T639oHC{pg-$o}flvtEXlra6lmy&qe2Gho8UA z(_@F8{!$Lxxrk1W0nyybkMM3wr7Yuq(5|P^vHacaYzw*bj_PXMXm{=N!94uW;0Ebe z(vng#uyoAA+JbEGdATmTB5?3NbGe_t#TvV6UV42i2NIh+W+(kFy&hd@RZ8cR#ItRZ z7$|}8p`-0M8+fu!v)hFVjEl7spH_QZf=r6XG>FxQ(mx~q)AYyqqj&XcJwBq0B87ug ze}v}NzGx`udF*ax0nM!W;wbC%EK^0`iH2HMT18Y>VS;f#ckZiDCf$8oV}E~Z7D$1Q zNHCV2)5b;`&T)*;8(jVwsDv0oz?eI=TGbuYW4To<2e1hSAN>=PUj$5UGm#VS*B0d_ zM?Z-Li{}7h72{Wdo8i8mWa`^XKJ&VF6UE#Cl8D*&#VyXixOkB*))How&R!igGq&ry2 z8h1L!xA|EGv<4h0#DH-hmfh>pj=i`Mu#AzB*;((>c+K|p+mKcr*gl&u1XRuOH&YU? z++e>+W7+|d{!aVIk32W^=;IUBEDkoxCT0mbF^kV}S-p)4i9v;%ykt{*lOPT_>g~D^ zjeeoyD+$xH%zASZIdG+u+@amR%nYN%BNuJB^QuMoTWaB4XP43uiSFJEllROz%QPm6 z@!GMJ#w-_^#k(1mj@;YuhV>q~I;BpR)ITQ+cOpit{el+>3&oJGj8cquTmm+eK0Dod zC?*1ShC3jKYHH-=y3O6CiQlZQaY>h)lHO)9L(R-Hv95u4H%Le54484fwOVrfOc{eum#xI_|5EcZioNs`2_5e}Obz)ezePm{ z-_sD5dkHLaZts><8gb03(eGtUC4^n|vo>0ootT}wVSPHJb~{}{n{;;x%Kjwh>okEL zrD2?+wSiF&%esHWJXJQG*C@Y2WlZ=A!7-rsf5flLj&(xPn$HL0E4|j?&TO#)B00qi zmsbLGf8TVct=yG26Kiid{zE)L2T{r_8f+6UXGI(V86+V&_X!}aTkz(M#sWxs`dE2E zsy)*^E1)4$qnY>dbgKU7RnE}4cW}{%YXpS10FtnVS@HvWwKUJ@pBy42>+C~2+Upf zwa)$<&!V91Fw#pIBZkbj_K-{{iCKTs@J?m{T)u_+azP!&9eolo=kK3PrMs0-`?CsM z&a6o*lc(=91g)u*C(AICi)YhKHW)5O%pEMWUT@{g_*9=AJcYDQ%D=vQOB7CQl75ue zMO+hXz=4zkL!I2eDR}c7w*76hKAUBgJvhE9xwYrc3VM4mdHaxzs67QVP3OjcI;L~> zPf%ctwu_nt`SIt{wQ}#p=ci8uBR@ah1-v69=7@t$SYaR8uiI%mBYvttsRg}>kRW9B(bGwQKupRR05 z@VJJzsH;XF-n&-MGdrDZXkb46^bFUcg3^Ja^Pbil%gyB}{Vio@3!?Qn)n(YFEscGU znpF2r-eEf$oA!!m?<+0`J46EkJqvd&+m!$SBa6Ze%TnRJ@JfmFiZ3k%BSW!k5!Yaj zUkcYg5*?_Ix~OceG~i);8(&4*EAK^1R|2V_09Bnd_@3Hqt07p*@HUq#cvn{~x{_S2 z&3NA7@TIafqgR&P@J~Y83o>U;N5w~FTp`Co4B^=qtG5sa6K~1g(t-+hRDXYHZV4Vj z%(}Od8TlVt%p%I&PW|;8`{z!CYO`l@eWe*Uk2(}KVlELFKc82%%Z`lH^_{xxnrSCu z?y|2enI!ct-Wiol)TSDJzBq|03L7&)$T}#^D=8t}PV)g!QT5Kp$;Q!n#ex@mVkRcq zE1mfv_pcW2{$B|F=?>gm2_}qwZDL|#7U$(d3XmW8NKPXAd<8`?3;KzTCY7K*v(NNqR zrFbLR@E^Udf7KiC@J75Vq6i=6;~W0f>-z6X66QLmDD3&=l+FBzTJXu*IbR}MaJX;1 zo{-kXRadF@YYRawyD*Svua{J z!Soxw-t{_nSPAKy_|s2pC~l=Fe^=_Sro2N7rV@Hdq$b%ztqhIxEKgh0i1(Y;F!Sa1 zMg8y<*H&Fmx?b$g*p>JGHE-*X@Da19kJI9V`PYSmH&#UkdYw7_v^Dx4PVqAL7L9F) zZcVhc>F6F1H!ABswY~$0fL@0e@0rZW8IbUFeVSGWf2v}rhjX7Z6hU^^%u0w}}Tp4E7Otbi(w+&-kPw#17quKe-ACMQwH5`H~rf@k#V9wd*B*Hr`;rjlR`G|sBh);L9bG{4>z{m z-#Apb(%3KDSva=xXn(q`#l;T<@E@*jK|vLvtAE%NyqBv2;d^7?2QYMOt0>P><#t!> zuQHJ~-8A!qE(YrnZTLTZo@Ql!&2g;WE|)!NJ;i->F9fp~7K^FHg-Q&X&^+pFcdnv~ z%+D*V+G_ce9fhpt?Ld+O!vy(j3q99>Vgf)h+XtvER;~>8WQ zG>kX(DXqr4G_ERrbAq0j?7T|`JwbpTF6B9HX5c{dC!rHvKd~Usne*JNw>8Aa1^H`O zpckRR;%6EQf9p`2C-TmGGqU(n!y<#mZ8CxHJDy{oeq)GF>d!gcK=S#b4xhihEp<9R zrqXEGJ{It;zptlMeObo1KSV0SdcxAK8yjSnP*vK@|JxledXo2{A5^ggJr+Q@$t?Gv zH29Mp6bb(AsTwF{J$&)JLQK~*rx9J;v%dUh>(NLLr43fl(XcykYT)vu^I^IJlQKI) z+oF|Ju{^Q;CKS=Pl2c_!KIwPdP-}(!a9+FX)M4QLqM|9pJ2T80nD_6aj)pvtbhu@! zAM`1G=OKwwuIqcZ430^+J+N>Sq)vG!sn%GS1V43m6Xo$Pd-HN$tb{N5ff{(H#?KkR zN4&IN1T-ICrk-UeB;!4fUEt7v@bS%FmtK$kz&ikdp0h~c+?w6Z$>RvB8cX|s(HA42 z6yS>y5&p7x5x<`KC5_PIJ)YnrDgs67BDUf^Y|TV{I5ocMkY7@BRB!ZmeKHhRfq0yv6ucNmWOsTIogPe*qdS B6FL9@ literal 0 HcmV?d00001 diff --git a/addons/web/doc/widget.rst b/addons/web/doc/widget.rst index 483c6a6a418..7c4a2374b3e 100644 --- a/addons/web/doc/widget.rst +++ b/addons/web/doc/widget.rst @@ -93,7 +93,7 @@ The DOM root can also be defined programmatically by overridding Any override to :js:func:`~openerp.web.Widget.renderElement` which does not call its ``_super`` **must** call :js:func:`~openerp.web.Widget.setElement` with whatever it - generated or the widget's behavior is undefined.r + generated or the widget's behavior is undefined. .. note:: From 1c2b769a1fc3e978ded0211af8a119b4a24c35f3 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 18 Feb 2013 16:06:04 +0100 Subject: [PATCH 009/160] [IMP] final section of the module guide bzr revid: xmo@openerp.com-20130218150604-pjd9lkmc834tmbiz --- addons/web/doc/module.rst | 43 +++++++++++++++++++++++++++- addons/web/doc/module/26 | 14 +++++++-- addons/web/doc/module/27 | 28 ++++++++++++++++++ addons/web/doc/module/28 | 13 +++++++++ addons/web/doc/module/29 | 37 ++++++++++++++++++++++++ addons/web/doc/module/series | 3 ++ addons/web/doc/module/testing_1.png | Bin 0 -> 36183 bytes addons/web/doc/testing.rst | 2 ++ 8 files changed, 136 insertions(+), 4 deletions(-) create mode 100644 addons/web/doc/module/27 create mode 100644 addons/web/doc/module/28 create mode 100644 addons/web/doc/module/29 create mode 100644 addons/web/doc/module/testing_1.png diff --git a/addons/web/doc/module.rst b/addons/web/doc/module.rst index 138a8e91a4c..7971a919780 100644 --- a/addons/web/doc/module.rst +++ b/addons/web/doc/module.rst @@ -385,12 +385,53 @@ which for us means going to query the user's times. We don't have any records to get in our test, and we don't want to test the initialization yet! So let's cheat a bit: we can manually -:js:func:`set a widget's DOM `, let's create a basic DOM matching what each method expects then call the method: .. patch:: +The next group of patches (in terms of setup/complexity) is RPC tests: +testing components/methods which perform network calls (RPC +requests). In our module, ``start`` and ``watch_stop`` are in that +case: ``start`` fetches the user's recorded times and ``watch_stop`` +creates a new record with the current watch. + +By default, tests don't allow RPC requests and will generate an error +when trying to perform one: + +.. image:: module/testing_1.png + :align: center + +To allow them, the test case (or the test suite) has to explicitly opt +into :js:attr:`rpc support ` by adding the ``rpc: +'mock'`` option to the test case, and providing its own "rpc +responses": + +.. patch:: + +.. note:: + + By defaut, tests cases don't load templates either. We had not + needed to perform any template rendering before here, so we must + now enable templates loading via :js:attr:`the corresponding + option `. + +Our final test requires altering the module's code: asynchronous tests +use :doc:`deferred ` to know when a test ends and the other +one can start (otherwise test content will execute non-linearly and +the assertions of a test will be executed during the next test or +worse), but although ``watch_stop`` performs an asynchronous +``create`` operation it doesn't return a deferred we can synchronize +on. We simply need to return its result: + +.. patch:: + +This makes no difference to the original code, but allows us to write +our test: + +.. patch:: + .. [#DOM-building] they are not alternative solutions: they work very well together. Templates are used to build "just DOM", sub-widgets are used to build DOM subsections diff --git a/addons/web/doc/module/26 b/addons/web/doc/module/26 index 4085350db24..ec0b345a908 100644 --- a/addons/web/doc/module/26 +++ b/addons/web/doc/module/26 @@ -2,7 +2,7 @@ Index: web_example/static/src/tests/timer.js =================================================================== --- web_example.orig/static/src/tests/timer.js +++ web_example/static/src/tests/timer.js -@@ -42,4 +42,25 @@ openerp.testing.section('timer', functio +@@ -42,4 +42,33 @@ openerp.testing.section('timer', functio w.format_time(84092336), '23:21:32'); }); @@ -18,13 +18,21 @@ Index: web_example/static/src/tests/timer.js + w.update_counter(22733958); + // And check the DOM matches + strictEqual($fixture.text(), '06:18:53'); -+ ++ + w.update_counter(73451828) + strictEqual($fixture.text(), '20:24:11'); + }); + test('display_record', function (instance, $fixture) { + var w = new instance.web_example.Action(); + $fixture.append('
          ') -+ ok(false, "test display records"); ++ w.setElement($fixture); ++ ++ w.display_record({time: 41676639}); ++ w.display_record({time: 84092336}); ++ ++ var $lis = $fixture.find('li'); ++ strictEqual($lis.length, 2, "should have printed 2 records"); ++ strictEqual($lis[0].textContent, '11:34:36'); ++ strictEqual($lis[1].textContent, '23:21:32'); + }); }); diff --git a/addons/web/doc/module/27 b/addons/web/doc/module/27 new file mode 100644 index 00000000000..2061b7007e6 --- /dev/null +++ b/addons/web/doc/module/27 @@ -0,0 +1,28 @@ +Index: web_example/static/src/tests/timer.js +=================================================================== +--- web_example.orig/static/src/tests/timer.js ++++ web_example/static/src/tests/timer.js +@@ -71,4 +71,23 @@ openerp.testing.section('timer', functio + strictEqual($lis[0].textContent, '11:34:36'); + strictEqual($lis[1].textContent, '23:21:32'); + }); ++ test('start', {templates: true, rpc: 'mock', asserts: 3}, function (instance, $fixture, mock) { ++ // Rather odd-looking shortcut for search+read in a single RPC call ++ mock('/web/dataset/search_read', function () { ++ // ignore parameters, just return a pair of records. ++ return {records: [ ++ {time: 22733958}, ++ {time: 84092336} ++ ]}; ++ }); ++ ++ var w = new instance.web_example.Action(); ++ return w.appendTo($fixture) ++ .then(function () { ++ var $lis = $fixture.find('li'); ++ strictEqual($lis.length, 2); ++ strictEqual($lis[0].textContent, '06:18:53'); ++ strictEqual($lis[1].textContent, '23:21:32'); ++ }); ++ }); + }); diff --git a/addons/web/doc/module/28 b/addons/web/doc/module/28 new file mode 100644 index 00000000000..800e7a6f084 --- /dev/null +++ b/addons/web/doc/module/28 @@ -0,0 +1,13 @@ +Index: web_example/static/src/js/first_module.js +=================================================================== +--- web_example.orig/static/src/js/first_module.js ++++ web_example/static/src/js/first_module.js +@@ -66,7 +66,7 @@ openerp.web_example = function (instance + user_id: instance.session.uid, + time: time, + }; +- this.model.call('create', [record]).done(function () { ++ return this.model.call('create', [record]).done(function () { + self.display_record(record); + }); + }, diff --git a/addons/web/doc/module/29 b/addons/web/doc/module/29 new file mode 100644 index 00000000000..509d4b78662 --- /dev/null +++ b/addons/web/doc/module/29 @@ -0,0 +1,37 @@ +Index: web_example/static/src/tests/timer.js +=================================================================== +--- web_example.orig/static/src/tests/timer.js ++++ web_example/static/src/tests/timer.js +@@ -90,4 +90,32 @@ openerp.testing.section('timer', functio + strictEqual($lis[1].textContent, '23:21:32'); + }); + }); ++ test('watch_stop', {templates: true, rpc: 'mock', asserts: 3}, function (instance, $fix, mock) { ++ var created = false; ++ mock('web_example.stopwatch:create', function (args, kwargs) { ++ created = true; ++ // return a fake id (unused) ++ return 42; ++ }); ++ mock('/web/dataset/search_read', function () { ++ return {records: []}; ++ }); ++ ++ var w = new instance.web_example.Action(); ++ return w.appendTo($fix) ++ .then(function () { ++ // Virtual start point 5s before 'now' ++ w._start = new Date() - 5000; ++ return w.watch_stop(); ++ }) ++ .done(function () { ++ ok(created, "should have called create()"); ++ strictEqual($fix.find('.oe_web_example_timer').text(), ++ '00:00:05', ++ "should have updated the timer"); ++ strictEqual($fix.find('li')[0].textContent, ++ '00:00:05', ++ "should have added the new time to the list"); ++ }); ++ }); + }); diff --git a/addons/web/doc/module/series b/addons/web/doc/module/series index 491e7dc3c59..ff1a909a6af 100644 --- a/addons/web/doc/module/series +++ b/addons/web/doc/module/series @@ -22,3 +22,6 @@ 24 25 26 +27 +28 +29 diff --git a/addons/web/doc/module/testing_1.png b/addons/web/doc/module/testing_1.png new file mode 100644 index 0000000000000000000000000000000000000000..40cf32497eb0403f11b4b2bd827af9d7bd1ed883 GIT binary patch literal 36183 zcma&N1x#f@(>BO3xVyvP?(T4bK?k_FySuv$?hNkk4uiY9ySux)F7v+m^6&1KP4-D{ zQe9nLZPm}IzBwlpC?f_Bg98Hs0s=1~E+P*C0%`#Q@=X*9^h?unCp!QF5=kH-0#I~a zIm-Z8+>BuiW-&~?zk_;%HYQn)dvKhHt{1~XGi=aG3bvu;fQ6yuhtz=wLP=_%5ktVe zpfF)otD@-yc;|XpkzZp;o20tuJh>8hhZh};adO2zdl*mP`MfWFJT6*ZR|$OH{_z=L z=Ft3eCwq7!rpYDvR{;!qgkkMf zPW)iP{#OBtn(|*wwjc37i~ncAl(ES*S=I_FqdgD#%eCSZ zLszJZq>hi)_=mTP8t%g0U+UoQGm2q8xVr0nj$Foh*1$ZClU`$~X0#fev*t2HbHoJ7 z$LB8n{iJI}T*RBU$$8V}JTFbQ%D|`X`Dox}3JdcAEPIKDQ|_NvF8=CMp%il$-h$>R z#>|G(oBm}1-G2jv_)Wu)O_+YUusWhy36M;h6*@Syd97(B+|9Wzwb!Y|GrPC_or&op z|9}c!fwaiBFYN!czH|&wkqowS7_sE}>S6g{wXkeniT3G`260;(3yx&!N?e}fB!98O z!Q``#80uz~no>o6ec9ndl}hZX3AL#&-@?eWIjJ&MpfdY*T>O`ogkgRiAsK>rct6x+ z_1LK7qf?nVbNgYPVuu&ICgRvldZ!Gp`VR=vMth`%q`C@bwTvr3Z|X6!3dZul;1Fh@ zs_o@<&j8njm(>T!!4FGmFI;UHeIZ91HQGXOBHKgDVSz^q3_$dzBH;NZS4! zJjOpS9BOSvM^=r^08q~-xg(0e1|xAxHQPnYSHG5Qtbjg>nweHiORbfT`K*MXW{Ask z52sjT9vCp_jlfCrK9v4*N6y@A8&+^5A45&**qAff&iEliFMS{uWBvBBzzmdMdafUa zhm50AZfd`c#FTM^kRf#=dxde}ufOay;8?0I8VOS$j#PXE$@iIMePicV?o>n44*P6r zi;_J|Fp}YIfZL^q#seOv?AE_p7zlT}?L-AL&e7)PN|!E4e=sZLGR`Ug_)Rc8pVf00 zG`&-T8~q80Zt>1k-HQ#sH%E&l%}mtR=1U5BEQY_Put5gnA_5NtTH0m2jc8M)bTle7 zkJ?Ww&8Ox*l-IMUm_PDZ6(n&C+Oy*DQkyR(NW>+(dDLnbjV~w&v;8_uNZ?^twcyhR z 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 ^Dqp6?hWlIa;Rb)nA&28sO~dv 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 DeqCyV literal 0 HcmV?d00001 diff --git a/addons/web/doc/testing.rst b/addons/web/doc/testing.rst index 600d379aa02..7ecf64288e1 100644 --- a/addons/web/doc/testing.rst +++ b/addons/web/doc/testing.rst @@ -327,6 +327,8 @@ a test case (or its containing test suite) through :js:attr:`~TestOptions.rpc`, and can be one of two modes: ``mock`` or ``rpc``. +.. _testing-rpc-mock: + Mock RPC ++++++++ From e0284cfe90a75ce815ba31d452eef15c676515ca Mon Sep 17 00:00:00 2001 From: "Ravi Gohil (OpenERP)" Date: Fri, 22 Feb 2013 11:57:54 +0530 Subject: [PATCH 010/160] [FIX] Passed context in write(...)(Courtesy: Humberto Arocha(hbto)). (Maintenance Case: 586824) lp bug: https://launchpad.net/bugs/1088086 fixed bzr revid: rgo@tinyerp.com-20130222062754-nbsp6a491xzm63kw --- openerp/addons/base/res/res_company.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/res/res_company.py b/openerp/addons/base/res/res_company.py index 022c9c06da0..c8ea8d7856e 100644 --- a/openerp/addons/base/res/res_company.py +++ b/openerp/addons/base/res/res_company.py @@ -97,7 +97,7 @@ class res_company(osv.osv): address_data = part_obj.address_get(cr, uid, [company.partner_id.id], adr_pref=['default']) address = address_data['default'] if address: - part_obj.write(cr, uid, [address], {name: value or False}) + part_obj.write(cr, uid, [address], {name: value or False}, context=context) else: part_obj.create(cr, uid, {name: value or False, 'parent_id': company.partner_id.id}, context=context) return True From b0eb876160935cede1c9b4ab84ea988f63bbdc55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 28 Feb 2013 14:26:25 +0100 Subject: [PATCH 011/160] [FIX] mail: first try to fix attachment duplication. bzr revid: tde@openerp.com-20130228132625-8yjggruhrvbvep21 --- addons/email_template/email_template.py | 34 +++++++++++-------- .../wizard/mail_compose_message.py | 5 ++- addons/mail/wizard/mail_compose_message.py | 5 ++- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py index 743384059b4..48fdc7edcd1 100644 --- a/addons/email_template/email_template.py +++ b/addons/email_template/email_template.py @@ -292,8 +292,7 @@ class email_template(osv.osv): 'copyvalue': self.build_expression(field_value.name, False, null_value or False), 'null_value': null_value or False }) - return {'value':result} - + return {'value': result} def generate_email(self, cr, uid, template_id, res_id, context=None): """Generates an email from the template for given (model, res_id) pair. @@ -346,11 +345,13 @@ class email_template(osv.osv): report_name += ext attachments.append((report_name, result)) + attachment_ids = [] # Add template attachments for attach in template.attachment_ids: - attachments.append((attach.datas_fname, attach.datas)) + attachment_ids.append(attach.id) values['attachments'] = attachments + values['attachment_ids'] = attachments return values def send_mail(self, cr, uid, template_id, res_id, force_send=False, context=None): @@ -365,28 +366,33 @@ class email_template(osv.osv): was executed for this message only. :returns: id of the mail.message that was created """ - if context is None: context = {} + if context is None: + context = {} mail_mail = self.pool.get('mail.mail') ir_attachment = self.pool.get('ir.attachment') + + # create a mail_mail based on values, without attachments values = self.generate_email(cr, uid, template_id, res_id, context=context) - assert 'email_from' in values, 'email_from is missing or empty after template rendering, send_mail() cannot proceed' - attachments = values.pop('attachments') or {} - del values['email_recipients'] # TODO Properly use them. - msg_id = mail_mail.create(cr, uid, values, context=context) - # link attachments - attachment_ids = [] - for fname, fcontent in attachments.iteritems(): + assert values.get('email_from'), 'email_from is missing or empty after template rendering, send_mail() cannot proceed' + del values['email_recipients'] # TODO Properly use them. + + # manage attachments + attachment_ids = values.pop('attachment_ids', []) + attachments = values.pop('attachments', []) + for fname, fcontent in attachments: attachment_data = { 'name': fname, 'datas_fname': fname, 'datas': fcontent, - 'res_model': mail_mail._name, - 'res_id': msg_id, + 'res_model': values.get('model', False), + 'res_id': values.get('res_id', False), } context.pop('default_type', None) attachment_ids.append(ir_attachment.create(cr, uid, attachment_data, context=context)) if attachment_ids: - mail_mail.write(cr, uid, msg_id, {'attachment_ids': [(6, 0, attachment_ids)]}, context=context) + values['attachment_ids'] = [(6, 0, attachment_ids)] + + msg_id = mail_mail.create(cr, uid, values, context=context) if force_send: mail_mail.send(cr, uid, [msg_id], context=context) return msg_id diff --git a/addons/email_template/wizard/mail_compose_message.py b/addons/email_template/wizard/mail_compose_message.py index b39ed4e5639..397f913e912 100644 --- a/addons/email_template/wizard/mail_compose_message.py +++ b/addons/email_template/wizard/mail_compose_message.py @@ -71,7 +71,6 @@ class mail_compose_message(osv.TransientModel): # FIXME odo: change the mail generation to avoid attachment duplication values = self.generate_email_for_composer(cr, uid, template_id, res_id, context=context) # transform attachments into attachment_ids - values['attachment_ids'] = [] ir_attach_obj = self.pool.get('ir.attachment') for attach_fname, attach_datas in values.pop('attachments', []): data_attach = { @@ -80,7 +79,7 @@ class mail_compose_message(osv.TransientModel): 'datas_fname': attach_fname, 'res_model': model, 'res_id': res_id, - 'type': 'binary', # override default_type from context, possibly meant for another model! + 'type': 'binary', # override default_type from context, possibly meant for another model! } values['attachment_ids'].append(ir_attach_obj.create(cr, uid, data_attach, context=context)) else: @@ -122,7 +121,7 @@ class mail_compose_message(osv.TransientModel): mail.compose.message, transform email_cc and email_to into partner_ids """ template_values = self.pool.get('email.template').generate_email(cr, uid, template_id, res_id, context=context) # filter template values - fields = ['body_html', 'subject', 'email_to', 'email_recipients', 'email_cc', 'attachments'] + fields = ['body_html', 'subject', 'email_to', 'email_recipients', 'email_cc', 'attachment_ids', 'attachments'] values = dict((field, template_values[field]) for field in fields if template_values.get(field)) values['body'] = values.pop('body_html', '') # transform email_to, email_cc into partner_ids diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py index ec0c2a8de06..5741aacb449 100644 --- a/addons/mail/wizard/mail_compose_message.py +++ b/addons/mail/wizard/mail_compose_message.py @@ -205,13 +205,16 @@ class mail_compose_message(osv.TransientModel): 'body': wizard.body, 'parent_id': wizard.parent_id and wizard.parent_id.id, 'partner_ids': [(4, partner.id) for partner in wizard.partner_ids], - 'attachments': [(attach.datas_fname or attach.name, base64.b64decode(attach.datas)) for attach in wizard.attachment_ids], + 'attachments': [], + 'attachment_ids': [(4, attach.id) for attach in wizard.attachment_ids], } # mass mailing: render and override default values if mass_mail_mode and wizard.model: email_dict = self.render_message(cr, uid, wizard, res_id, context=context) new_partner_ids = email_dict.pop('partner_ids', []) post_values['partner_ids'] += [(4, partner_id) for partner_id in new_partner_ids] + new_attachment_ids = email_dict.pop('attachment_ids', []) + post_values['attachments'] += new_attachment_ids new_attachments = email_dict.pop('attachments', []) post_values['attachments'] += new_attachments post_values.update(email_dict) From afbb5816e3e43bbb8f4f590c5686ccc708be2fa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 28 Feb 2013 14:36:33 +0100 Subject: [PATCH 012/160] [FIX] email_template: fixed previous patch, wrong var name. bzr revid: tde@openerp.com-20130228133633-1ur9jbqw021yoork --- addons/email_template/email_template.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py index 48fdc7edcd1..64c09d1eaff 100644 --- a/addons/email_template/email_template.py +++ b/addons/email_template/email_template.py @@ -351,7 +351,7 @@ class email_template(osv.osv): attachment_ids.append(attach.id) values['attachments'] = attachments - values['attachment_ids'] = attachments + values['attachment_ids'] = attachment_ids return values def send_mail(self, cr, uid, template_id, res_id, force_send=False, context=None): From cca08468043c17025cfbd6fd771227cc67ee93a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 28 Feb 2013 14:49:01 +0100 Subject: [PATCH 013/160] [FIX] email_template: fixed attachments management in send_mail. bzr revid: tde@openerp.com-20130228134901-ibtnt2zl4yne7o4n --- addons/email_template/email_template.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py index 64c09d1eaff..1856479ebbe 100644 --- a/addons/email_template/email_template.py +++ b/addons/email_template/email_template.py @@ -379,11 +379,11 @@ class email_template(osv.osv): # manage attachments attachment_ids = values.pop('attachment_ids', []) attachments = values.pop('attachments', []) - for fname, fcontent in attachments: + for attachment in attachments: attachment_data = { - 'name': fname, - 'datas_fname': fname, - 'datas': fcontent, + 'name': attachment[0], + 'datas_fname': attachment[0], + 'datas': attachment[1], 'res_model': values.get('model', False), 'res_id': values.get('res_id', False), } From d6fcee5a4fb96c410f2d6580f7a239b2080e864d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 28 Feb 2013 15:46:30 +0100 Subject: [PATCH 014/160] [FIX] email-template: attachments should have correct model and res_id from template. bzr revid: tde@openerp.com-20130228144630-7x6kh5jcn4w557do --- addons/email_template/email_template.py | 5 +++-- addons/email_template/tests/test_mail.py | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py index 1856479ebbe..8045cf62204 100644 --- a/addons/email_template/email_template.py +++ b/addons/email_template/email_template.py @@ -375,6 +375,7 @@ class email_template(osv.osv): values = self.generate_email(cr, uid, template_id, res_id, context=context) assert values.get('email_from'), 'email_from is missing or empty after template rendering, send_mail() cannot proceed' del values['email_recipients'] # TODO Properly use them. + template = self.get_email_template(cr, uid, template_id, res_id, context=context) # manage attachments attachment_ids = values.pop('attachment_ids', []) @@ -384,8 +385,8 @@ class email_template(osv.osv): 'name': attachment[0], 'datas_fname': attachment[0], 'datas': attachment[1], - 'res_model': values.get('model', False), - 'res_id': values.get('res_id', False), + 'res_model': template.model, + 'res_id': res_id, } context.pop('default_type', None) attachment_ids.append(ir_attachment.create(cr, uid, attachment_data, context=context)) diff --git a/addons/email_template/tests/test_mail.py b/addons/email_template/tests/test_mail.py index b87b6d63000..0da73dc0f33 100644 --- a/addons/email_template/tests/test_mail.py +++ b/addons/email_template/tests/test_mail.py @@ -48,8 +48,8 @@ class test_message_compose(TestMailBase): _body_html1 = 'Fans of Pigs, unite !' _body_html2 = 'I am angry !' _attachments = [ - {'name': 'First', 'datas_fname': 'first.txt', 'datas': base64.b64encode('My first attachment')}, - {'name': 'Second', 'datas_fname': 'second.txt', 'datas': base64.b64encode('My second attachment')} + {'name': 'First', 'datas_fname': 'first.txt', 'datas': base64.b64encode('My first attachment'), 'res_model': 'dummy.model'}, + {'name': 'Second', 'datas_fname': 'second.txt', 'datas': base64.b64encode('My second attachment'), 'res_model': 'dummy.model'} ] _attachments_test = [('first.txt', 'My first attachment'), ('second.txt', 'My second attachment')] @@ -118,7 +118,7 @@ class test_message_compose(TestMailBase): # Test: mail.compose.message: attachments # Test: mail.message: attachments for attach in compose.attachment_ids: - self.assertEqual(attach.res_model, 'mail.group', 'mail.message attachment res_model incorrect') + self.assertEqual(attach.res_model, 'dummy.model', 'mail.message attachment res_model through templat was overriden') self.assertEqual(attach.res_id, self.group_pigs_id, 'mail.message attachment res_id incorrect') self.assertIn((attach.name, base64.b64decode(attach.datas)), _attachments_test, 'mail.message attachment name / data incorrect') From aa865c8b61d53a1c9b402f616f419ad36c38bc7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 28 Feb 2013 15:55:13 +0100 Subject: [PATCH 015/160] [FIX] Still fixing attachments through templates. bzr revid: tde@openerp.com-20130228145513-6g30ujr3cm0j8b3u --- addons/email_template/tests/test_mail.py | 8 ++++---- addons/mail/wizard/mail_compose_message.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/email_template/tests/test_mail.py b/addons/email_template/tests/test_mail.py index 0da73dc0f33..39b1023bc64 100644 --- a/addons/email_template/tests/test_mail.py +++ b/addons/email_template/tests/test_mail.py @@ -48,8 +48,8 @@ class test_message_compose(TestMailBase): _body_html1 = 'Fans of Pigs, unite !' _body_html2 = 'I am angry !' _attachments = [ - {'name': 'First', 'datas_fname': 'first.txt', 'datas': base64.b64encode('My first attachment'), 'res_model': 'dummy.model'}, - {'name': 'Second', 'datas_fname': 'second.txt', 'datas': base64.b64encode('My second attachment'), 'res_model': 'dummy.model'} + {'name': 'First', 'datas_fname': 'first.txt', 'datas': base64.b64encode('My first attachment'), 'res_model': 'mail.group', 'res_id': self.group_pigs_id}, + {'name': 'Second', 'datas_fname': 'second.txt', 'datas': base64.b64encode('My second attachment'), 'res_model': 'mail.group', 'res_id': self.group_pigs_id} ] _attachments_test = [('first.txt', 'My first attachment'), ('second.txt', 'My second attachment')] @@ -118,9 +118,9 @@ class test_message_compose(TestMailBase): # Test: mail.compose.message: attachments # Test: mail.message: attachments for attach in compose.attachment_ids: - self.assertEqual(attach.res_model, 'dummy.model', 'mail.message attachment res_model through templat was overriden') + self.assertEqual(attach.res_model, 'mail.group', 'mail.message attachment res_model through templat was overriden') self.assertEqual(attach.res_id, self.group_pigs_id, 'mail.message attachment res_id incorrect') - self.assertIn((attach.name, base64.b64decode(attach.datas)), _attachments_test, + self.assertIn((attach.datas_fname, base64.b64decode(attach.datas)), _attachments_test, 'mail.message attachment name / data incorrect') # ---------------------------------------- diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py index 5741aacb449..6389246bd7b 100644 --- a/addons/mail/wizard/mail_compose_message.py +++ b/addons/mail/wizard/mail_compose_message.py @@ -214,7 +214,7 @@ class mail_compose_message(osv.TransientModel): new_partner_ids = email_dict.pop('partner_ids', []) post_values['partner_ids'] += [(4, partner_id) for partner_id in new_partner_ids] new_attachment_ids = email_dict.pop('attachment_ids', []) - post_values['attachments'] += new_attachment_ids + post_values['attachment_ids'] += [(4, attach_id) for attach_id in new_attachment_ids] new_attachments = email_dict.pop('attachments', []) post_values['attachments'] += new_attachments post_values.update(email_dict) From 46a5b63caddf857f38017ed4fb618f73a95a12a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 1 Mar 2013 15:48:27 +0100 Subject: [PATCH 016/160] [IMP] email_template: better management of attachments. In mass mail, we want attachments to be duplicated due to the ownership concept of attachments in OpenERP. bzr revid: tde@openerp.com-20130301144827-762362bgng5m4nye --- addons/email_template/tests/test_mail.py | 18 ++++++++--- .../wizard/mail_compose_message.py | 19 ++++++++++++ addons/mail/wizard/mail_compose_message.py | 31 +++++++++++-------- 3 files changed, 50 insertions(+), 18 deletions(-) diff --git a/addons/email_template/tests/test_mail.py b/addons/email_template/tests/test_mail.py index 39b1023bc64..9e6ed15f904 100644 --- a/addons/email_template/tests/test_mail.py +++ b/addons/email_template/tests/test_mail.py @@ -48,8 +48,8 @@ class test_message_compose(TestMailBase): _body_html1 = 'Fans of Pigs, unite !' _body_html2 = 'I am angry !' _attachments = [ - {'name': 'First', 'datas_fname': 'first.txt', 'datas': base64.b64encode('My first attachment'), 'res_model': 'mail.group', 'res_id': self.group_pigs_id}, - {'name': 'Second', 'datas_fname': 'second.txt', 'datas': base64.b64encode('My second attachment'), 'res_model': 'mail.group', 'res_id': self.group_pigs_id} + {'name': 'First', 'datas_fname': 'first.txt', 'datas': base64.b64encode('My first attachment')}, + {'name': 'Second', 'datas_fname': 'second.txt', 'datas': base64.b64encode('My second attachment')}, ] _attachments_test = [('first.txt', 'My first attachment'), ('second.txt', 'My second attachment')] @@ -116,10 +116,18 @@ class test_message_compose(TestMailBase): self.assertIn(_body_html1, compose.body, 'mail.compose.message body incorrect') self.assertEqual(set(message_pids), set(partner_ids), 'mail.compose.message partner_ids incorrect') # Test: mail.compose.message: attachments - # Test: mail.message: attachments for attach in compose.attachment_ids: - self.assertEqual(attach.res_model, 'mail.group', 'mail.message attachment res_model through templat was overriden') - self.assertEqual(attach.res_id, self.group_pigs_id, 'mail.message attachment res_id incorrect') + self.assertEqual(attach.res_model, False, 'mail.compose.message attachment res_model through templat was overriden') + self.assertEqual(attach.res_id, 0, 'mail.compose.message attachment res_id incorrect') + self.assertIn((attach.datas_fname, base64.b64decode(attach.datas)), _attachments_test, + 'mail.message attachment name / data incorrect') + # Test: mail.message: attachments + mail_compose.send_mail(cr, uid, [compose_id]) + group_pigs.refresh() + message_pigs = group_pigs.message_ids[0] + for attach in message_pigs.attachment_ids: + self.assertEqual(attach.res_model, 'mail.group', 'mail.compose.message attachment res_model through templat was overriden') + self.assertEqual(attach.res_id, self.group_pigs_id, 'mail.compose.message attachment res_id incorrect') self.assertIn((attach.datas_fname, base64.b64decode(attach.datas)), _attachments_test, 'mail.message attachment name / data incorrect') diff --git a/addons/email_template/wizard/mail_compose_message.py b/addons/email_template/wizard/mail_compose_message.py index 397f913e912..5631b927f46 100644 --- a/addons/email_template/wizard/mail_compose_message.py +++ b/addons/email_template/wizard/mail_compose_message.py @@ -61,6 +61,25 @@ class mail_compose_message(osv.TransientModel): 'template_id': fields.selection(_get_templates, 'Template', size=-1), } + def send_mail(self, cr, uid, ids, context=None): + """ Override of send_mail to duplicate attachments linked to the email.template. + Indeed, basic mail.compose.message wizard duplicates attachments in mass + mailing mode. But in 'single post' mode, attachments of an email template + also have to be duplicated to avoid changing their ownership. """ + for wizard in self.browse(cr, uid, ids, context=context): + if not wizard.attachment_ids or wizard.composition_mode == 'mass_mail' or not wizard.template_id: + continue + active_model_pool_name = wizard.model if wizard.model else 'mail.thread' + template = self.pool.get('email.template').browse(cr, uid, wizard.template_id, context=context) + new_attachment_ids = [] + for attachment in wizard.attachment_ids: + if attachment in template.attachment_ids: + new_attachment_ids.append(self.pool.get('ir.attachment').copy(cr, uid, attachment.id, {'res_model': active_model_pool_name, 'res_id': wizard.res_id}, context=context)) + else: + new_attachment_ids.append(attachment.id) + self.write(cr, uid, wizard.id, {'attachment_ids': [(6, 0, new_attachment_ids)]}, context=context) + return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context) + def onchange_template_id(self, cr, uid, ids, template_id, composition_mode, model, res_id, context=None): """ - mass_mailing: we cannot render, so return the template values - normal mode: return rendered values """ diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py index bb084405c29..0ec5242937e 100644 --- a/addons/mail/wizard/mail_compose_message.py +++ b/addons/mail/wizard/mail_compose_message.py @@ -190,41 +190,46 @@ class mail_compose_message(osv.TransientModel): email(s), rendering any template patterns on the fly if needed. """ if context is None: context = {} + ir_attachment_obj = self.pool.get('ir.attachment') active_ids = context.get('active_ids') - is_log = context.get('mail_compose_log', False) for wizard in self.browse(cr, uid, ids, context=context): mass_mail_mode = wizard.composition_mode == 'mass_mail' - active_model_pool = self.pool.get(wizard.model if wizard.model else 'mail.thread') + active_model_pool_name = wizard.model if wizard.model else 'mail.thread' + active_model_pool = self.pool.get(active_model_pool_name) # wizard works in batch mode: [res_id] or active_ids res_ids = active_ids if mass_mail_mode and wizard.model and active_ids else [wizard.res_id] for res_id in res_ids: - # default values, according to the wizard options + # mail.message values, according to the wizard options post_values = { 'subject': wizard.subject, 'body': wizard.body, 'parent_id': wizard.parent_id and wizard.parent_id.id, 'partner_ids': [partner.id for partner in wizard.partner_ids], - 'attachments': [], 'attachment_ids': [attach.id for attach in wizard.attachment_ids], } # mass mailing: render and override default values if mass_mail_mode and wizard.model: email_dict = self.render_message(cr, uid, wizard, res_id, context=context) - new_partner_ids = email_dict.pop('partner_ids', []) - post_values['partner_ids'] += new_partner_ids - new_attachment_ids = email_dict.pop('attachment_ids', []) - post_values['attachment_ids'] += new_attachment_ids - new_attachments = email_dict.pop('attachments', []) - post_values['attachments'] += new_attachments + post_values['partner_ids'] += email_dict.pop('partner_ids', []) + post_values['attachments'] = email_dict.pop('attachments', []) + post_values['attachment_ids'] += email_dict.pop('attachment_ids', []) + # we must duplicate attachments, as each document will have its own copy of the attachment + attachment_ids = [] + for attach_id in post_values.pop('attachment_ids'): + new_attach_id = ir_attachment_obj.copy(cr, uid, attach_id, {'res_model': active_model_pool_name, 'res_id': res_id}, context=context) + attachment_ids.append(new_attach_id) + post_values['attachment_ids'] = attachment_ids post_values.update(email_dict) # post the message - subtype = 'mail.mt_comment' - if is_log: - subtype = False + subtype = 'mail.mt_comment' if not context.get('mail_compose_log', False) else False active_model_pool.message_post(cr, uid, [res_id], type='comment', subtype=subtype, context=context, **post_values) + # mass mailing: delete mail.compose.message attachments, added by the user and that have been duplicated + if mass_mail_mode and wizard.attachment_ids: + wizard.attachment_ids.unlink() + return {'type': 'ir.actions.act_window_close'} def render_message(self, cr, uid, wizard, res_id, context=None): From c7d8842b0285760216d9d44cf3110f7344c3c57e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 4 Mar 2013 10:22:48 +0100 Subject: [PATCH 017/160] [IMP] mail, email_template: fixed attachment management (template does not override provided attachments anymore; fixed possible unexisting attachment ids key; fixed some duplication. bzr revid: tde@openerp.com-20130304092248-mqadzmrhgdu58j8y --- .../wizard/mail_compose_message.py | 18 +++++++++++------- addons/mail/wizard/mail_compose_message.py | 11 +++++++---- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/addons/email_template/wizard/mail_compose_message.py b/addons/email_template/wizard/mail_compose_message.py index 5631b927f46..1221cfde34e 100644 --- a/addons/email_template/wizard/mail_compose_message.py +++ b/addons/email_template/wizard/mail_compose_message.py @@ -84,20 +84,21 @@ class mail_compose_message(osv.TransientModel): """ - mass_mailing: we cannot render, so return the template values - normal mode: return rendered values """ if template_id and composition_mode == 'mass_mail': - values = self.pool.get('email.template').read(cr, uid, template_id, ['subject', 'body_html'], context) + values = self.pool.get('email.template').read(cr, uid, template_id, ['subject', 'body_html', 'attachment_ids'], context) values.pop('id') elif template_id: # FIXME odo: change the mail generation to avoid attachment duplication values = self.generate_email_for_composer(cr, uid, template_id, res_id, context=context) - # transform attachments into attachment_ids + # transform attachments into attachment_ids; not attached to the document because this will + # be done further in the posting process, allowing to clean database if email not send ir_attach_obj = self.pool.get('ir.attachment') for attach_fname, attach_datas in values.pop('attachments', []): data_attach = { 'name': attach_fname, 'datas': attach_datas, 'datas_fname': attach_fname, - 'res_model': model, - 'res_id': res_id, + 'res_model': 'mail.compose.message', + 'res_id': 0, 'type': 'binary', # override default_type from context, possibly meant for another model! } values['attachment_ids'].append(ir_attach_obj.create(cr, uid, data_attach, context=context)) @@ -140,12 +141,15 @@ class mail_compose_message(osv.TransientModel): mail.compose.message, transform email_cc and email_to into partner_ids """ template_values = self.pool.get('email.template').generate_email(cr, uid, template_id, res_id, context=context) # filter template values + values = { + 'attachment_ids': [], + 'partner_ids': [], + } fields = ['body_html', 'subject', 'email_to', 'email_recipients', 'email_cc', 'attachment_ids', 'attachments'] - values = dict((field, template_values[field]) for field in fields if template_values.get(field)) + values.update(dict((field, template_values[field]) for field in fields if template_values.get(field))) values['body'] = values.pop('body_html', '') - # transform email_to, email_cc into partner_ids - values['partner_ids'] = [] + # transform email_to, email_cc into partner_ids mails = tools.email_split(values.pop('email_to', '') + ' ' + values.pop('email_cc', '')) for mail in mails: partner_id = self.pool.get('res.partner').find_or_create(cr, uid, mail, context=context) diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py index 0ec5242937e..f70e3624357 100644 --- a/addons/mail/wizard/mail_compose_message.py +++ b/addons/mail/wizard/mail_compose_message.py @@ -214,8 +214,10 @@ class mail_compose_message(osv.TransientModel): email_dict = self.render_message(cr, uid, wizard, res_id, context=context) post_values['partner_ids'] += email_dict.pop('partner_ids', []) post_values['attachments'] = email_dict.pop('attachments', []) - post_values['attachment_ids'] += email_dict.pop('attachment_ids', []) - # we must duplicate attachments, as each document will have its own copy of the attachment + # manage attachments : + # - do not re-add attachments from template already displayed + # - duplicate template attachments because of ownership concept in OpenERP + post_values['attachment_ids'] += filter(lambda item: item not in post_values['attachment_ids'], email_dict.pop('attachment_ids', [])) attachment_ids = [] for attach_id in post_values.pop('attachment_ids'): new_attach_id = ir_attachment_obj.copy(cr, uid, attach_id, {'res_model': active_model_pool_name, 'res_id': res_id}, context=context) @@ -227,8 +229,8 @@ class mail_compose_message(osv.TransientModel): active_model_pool.message_post(cr, uid, [res_id], type='comment', subtype=subtype, context=context, **post_values) # mass mailing: delete mail.compose.message attachments, added by the user and that have been duplicated - if mass_mail_mode and wizard.attachment_ids: - wizard.attachment_ids.unlink() + if wizard.attachment_ids: + ir_attachment_obj.unlink(cr, uid, [attach.id for attach in wizard.attachment_ids if attach.res_model == self._name], context=context) return {'type': 'ir.actions.act_window_close'} @@ -239,6 +241,7 @@ class mail_compose_message(osv.TransientModel): return { 'subject': self.render_template(cr, uid, wizard.subject, wizard.model, res_id, context), 'body': self.render_template(cr, uid, wizard.body, wizard.model, res_id, context), + 'attachment_ids': [attach.id for attach in wizard.attachment_ids], } def render_template(self, cr, uid, template, model, res_id, context=None): From f789005c9a6c26322565a1af7cc4e57a60eab9f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 6 Mar 2013 14:44:10 +0100 Subject: [PATCH 018/160] [REV] email_template: send_mail: back to 2-steps creation, because attachments have to be garbage-collected, and not attached to the document. bzr revid: tde@openerp.com-20130306134410-mw9hau809qh1nbqh --- addons/email_template/email_template.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py index 8045cf62204..bcee1da9783 100644 --- a/addons/email_template/email_template.py +++ b/addons/email_template/email_template.py @@ -375,25 +375,25 @@ class email_template(osv.osv): values = self.generate_email(cr, uid, template_id, res_id, context=context) assert values.get('email_from'), 'email_from is missing or empty after template rendering, send_mail() cannot proceed' del values['email_recipients'] # TODO Properly use them. - template = self.get_email_template(cr, uid, template_id, res_id, context=context) - - # manage attachments attachment_ids = values.pop('attachment_ids', []) attachments = values.pop('attachments', []) + msg_id = mail_mail.create(cr, uid, values, context=context) + + # manage attachments for attachment in attachments: attachment_data = { 'name': attachment[0], 'datas_fname': attachment[0], 'datas': attachment[1], - 'res_model': template.model, - 'res_id': res_id, + 'res_model': 'mail.message', + 'res_id': msg_id, } context.pop('default_type', None) attachment_ids.append(ir_attachment.create(cr, uid, attachment_data, context=context)) if attachment_ids: values['attachment_ids'] = [(6, 0, attachment_ids)] + mail_mail.write(cr, uid, msg_id, {'attachment_ids': [(6, 0, attachment_ids)]}, context=context) - msg_id = mail_mail.create(cr, uid, values, context=context) if force_send: mail_mail.send(cr, uid, [msg_id], context=context) return msg_id From d794920d431d75e912a7654d1daf5cb16a54e6db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 6 Mar 2013 14:44:37 +0100 Subject: [PATCH 019/160] [IMP] mail.compose.message: remove attachment_ids from render_message as it should not be there; assume wizard.attachment_ids is always correct. bzr revid: tde@openerp.com-20130306134437-ywoi1p1nr2e1no97 --- addons/mail/wizard/mail_compose_message.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py index f70e3624357..c946a71de9f 100644 --- a/addons/mail/wizard/mail_compose_message.py +++ b/addons/mail/wizard/mail_compose_message.py @@ -19,10 +19,8 @@ # ############################################################################## -import base64 import re from openerp import tools - from openerp.osv import osv from openerp.osv import fields from openerp.tools.safe_eval import safe_eval as eval @@ -214,10 +212,6 @@ class mail_compose_message(osv.TransientModel): email_dict = self.render_message(cr, uid, wizard, res_id, context=context) post_values['partner_ids'] += email_dict.pop('partner_ids', []) post_values['attachments'] = email_dict.pop('attachments', []) - # manage attachments : - # - do not re-add attachments from template already displayed - # - duplicate template attachments because of ownership concept in OpenERP - post_values['attachment_ids'] += filter(lambda item: item not in post_values['attachment_ids'], email_dict.pop('attachment_ids', [])) attachment_ids = [] for attach_id in post_values.pop('attachment_ids'): new_attach_id = ir_attachment_obj.copy(cr, uid, attach_id, {'res_model': active_model_pool_name, 'res_id': res_id}, context=context) @@ -241,7 +235,6 @@ class mail_compose_message(osv.TransientModel): return { 'subject': self.render_template(cr, uid, wizard.subject, wizard.model, res_id, context), 'body': self.render_template(cr, uid, wizard.body, wizard.model, res_id, context), - 'attachment_ids': [attach.id for attach in wizard.attachment_ids], } def render_template(self, cr, uid, template, model, res_id, context=None): From 4665d10f0550beabc3c1b6027436641749761a14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 6 Mar 2013 14:46:12 +0100 Subject: [PATCH 020/160] [IMP] mail, email_template: better consistence of mail.compose.message mdoel ans 0 or res_id res_id for attachments on composer; generate_email_for_composer should avoid returning keys for void values. bzr revid: tde@openerp.com-20130306134612-yazwi6cgwvw8suyw --- .../email_template/wizard/mail_compose_message.py | 14 ++++++-------- addons/mail/mail_message.py | 2 +- addons/mail/mail_thread.py | 1 - 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/addons/email_template/wizard/mail_compose_message.py b/addons/email_template/wizard/mail_compose_message.py index 1221cfde34e..151cc3384ac 100644 --- a/addons/email_template/wizard/mail_compose_message.py +++ b/addons/email_template/wizard/mail_compose_message.py @@ -69,12 +69,11 @@ class mail_compose_message(osv.TransientModel): for wizard in self.browse(cr, uid, ids, context=context): if not wizard.attachment_ids or wizard.composition_mode == 'mass_mail' or not wizard.template_id: continue - active_model_pool_name = wizard.model if wizard.model else 'mail.thread' template = self.pool.get('email.template').browse(cr, uid, wizard.template_id, context=context) new_attachment_ids = [] for attachment in wizard.attachment_ids: if attachment in template.attachment_ids: - new_attachment_ids.append(self.pool.get('ir.attachment').copy(cr, uid, attachment.id, {'res_model': active_model_pool_name, 'res_id': wizard.res_id}, context=context)) + new_attachment_ids.append(self.pool.get('ir.attachment').copy(cr, uid, attachment.id, {'res_model': 'mail.compose.message', 'res_id': wizard.id}, context=context)) else: new_attachment_ids.append(attachment.id) self.write(cr, uid, wizard.id, {'attachment_ids': [(6, 0, new_attachment_ids)]}, context=context) @@ -87,10 +86,10 @@ class mail_compose_message(osv.TransientModel): values = self.pool.get('email.template').read(cr, uid, template_id, ['subject', 'body_html', 'attachment_ids'], context) values.pop('id') elif template_id: - # FIXME odo: change the mail generation to avoid attachment duplication values = self.generate_email_for_composer(cr, uid, template_id, res_id, context=context) # transform attachments into attachment_ids; not attached to the document because this will # be done further in the posting process, allowing to clean database if email not send + values['attachment_ids'] = values.pop('attachment_ids', []) ir_attach_obj = self.pool.get('ir.attachment') for attach_fname, attach_datas in values.pop('attachments', []): data_attach = { @@ -141,15 +140,12 @@ class mail_compose_message(osv.TransientModel): mail.compose.message, transform email_cc and email_to into partner_ids """ template_values = self.pool.get('email.template').generate_email(cr, uid, template_id, res_id, context=context) # filter template values - values = { - 'attachment_ids': [], - 'partner_ids': [], - } fields = ['body_html', 'subject', 'email_to', 'email_recipients', 'email_cc', 'attachment_ids', 'attachments'] - values.update(dict((field, template_values[field]) for field in fields if template_values.get(field))) + values = dict((field, template_values[field]) for field in fields if template_values.get(field)) values['body'] = values.pop('body_html', '') # transform email_to, email_cc into partner_ids + values['partner_ids'] = [] mails = tools.email_split(values.pop('email_to', '') + ' ' + values.pop('email_cc', '')) for mail in mails: partner_id = self.pool.get('res.partner').find_or_create(cr, uid, mail, context=context) @@ -170,6 +166,8 @@ class mail_compose_message(osv.TransientModel): values = self.generate_email_for_composer(cr, uid, wizard.template_id, res_id, context=context) else: values = {} + # remove attachments as they should not be rendered + values.pop('attachment_ids', None) # get values to return email_dict = super(mail_compose_message, self).render_message(cr, uid, wizard, res_id, context) values.update(email_dict) diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index 2f56e620543..f29d6c8c543 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -761,7 +761,7 @@ class mail_message(osv.Model): attachments_to_delete = [] for message in self.browse(cr, uid, ids, context=context): for attach in message.attachment_ids: - if attach.res_model == self._name and attach.res_id == message.id: + if attach.res_model == self._name and (attach.res_id == message.id or attach.res_id == 0): attachments_to_delete.append(attach.id) if attachments_to_delete: self.pool.get('ir.attachment').unlink(cr, uid, attachments_to_delete, context=context) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index a456e82d466..cf9b6ecf316 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -944,7 +944,6 @@ class mail_thread(osv.AbstractModel): if attachment_ids: filtered_attachment_ids = ir_attachment.search(cr, SUPERUSER_ID, [ ('res_model', '=', 'mail.compose.message'), - ('res_id', '=', 0), ('create_uid', '=', uid), ('id', 'in', attachment_ids)], context=context) if filtered_attachment_ids: From b1b3ed971ad1be9386618d9501fb9fdf97b9a55a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 6 Mar 2013 17:05:17 +0100 Subject: [PATCH 021/160] [REM] Removed attachment removal because garbage collecting will do it. bzr revid: tde@openerp.com-20130306160517-b0rdbait2h6c9c77 --- addons/mail/wizard/mail_compose_message.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py index c946a71de9f..f4b7eb8115d 100644 --- a/addons/mail/wizard/mail_compose_message.py +++ b/addons/mail/wizard/mail_compose_message.py @@ -222,10 +222,6 @@ class mail_compose_message(osv.TransientModel): subtype = 'mail.mt_comment' if not context.get('mail_compose_log', False) else False active_model_pool.message_post(cr, uid, [res_id], type='comment', subtype=subtype, context=context, **post_values) - # mass mailing: delete mail.compose.message attachments, added by the user and that have been duplicated - if wizard.attachment_ids: - ir_attachment_obj.unlink(cr, uid, [attach.id for attach in wizard.attachment_ids if attach.res_model == self._name], context=context) - return {'type': 'ir.actions.act_window_close'} def render_message(self, cr, uid, wizard, res_id, context=None): From 40244df4c18900f806055093ed64942667cf5d4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 6 Mar 2013 17:11:51 +0100 Subject: [PATCH 022/160] [IMP] mail.compose.message: copied attachments in mass mail mode are linked to the composer, because message_post will update their model and res_id. bzr revid: tde@openerp.com-20130306161151-gczob78pmt683kw7 --- addons/mail/wizard/mail_compose_message.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py index f4b7eb8115d..93b7ff07b80 100644 --- a/addons/mail/wizard/mail_compose_message.py +++ b/addons/mail/wizard/mail_compose_message.py @@ -214,7 +214,7 @@ class mail_compose_message(osv.TransientModel): post_values['attachments'] = email_dict.pop('attachments', []) attachment_ids = [] for attach_id in post_values.pop('attachment_ids'): - new_attach_id = ir_attachment_obj.copy(cr, uid, attach_id, {'res_model': active_model_pool_name, 'res_id': res_id}, context=context) + new_attach_id = ir_attachment_obj.copy(cr, uid, attach_id, {'res_model': self._name, 'res_id': wizard.id}, context=context) attachment_ids.append(new_attach_id) post_values['attachment_ids'] = attachment_ids post_values.update(email_dict) From 1aac220ee25b7dc45c073c76112e50c68a3c4944 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 7 Mar 2013 12:06:57 +0100 Subject: [PATCH 023/160] [IMP] mail: tests: updated tests for attachments bzr revid: tde@openerp.com-20130307110657-1cdelhyd1girmp28 --- addons/email_template/tests/test_mail.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/email_template/tests/test_mail.py b/addons/email_template/tests/test_mail.py index 9e6ed15f904..a4ecb9b6f91 100644 --- a/addons/email_template/tests/test_mail.py +++ b/addons/email_template/tests/test_mail.py @@ -48,8 +48,8 @@ class test_message_compose(TestMailBase): _body_html1 = 'Fans of Pigs, unite !' _body_html2 = 'I am angry !' _attachments = [ - {'name': 'First', 'datas_fname': 'first.txt', 'datas': base64.b64encode('My first attachment')}, - {'name': 'Second', 'datas_fname': 'second.txt', 'datas': base64.b64encode('My second attachment')}, + {'name': 'First', 'datas_fname': 'first.txt', 'datas': base64.b64encode('My first attachment'), 'res_model': 'res.partner', 'res_id': self.partner_admin_id}, + {'name': 'Second', 'datas_fname': 'second.txt', 'datas': base64.b64encode('My second attachment'), 'res_model': 'res.partner', 'res_id': self.partner_admin_id}, ] _attachments_test = [('first.txt', 'My first attachment'), ('second.txt', 'My second attachment')] @@ -115,10 +115,10 @@ class test_message_compose(TestMailBase): self.assertEqual(compose.subject, _subject1, 'mail.compose.message subject incorrect') self.assertIn(_body_html1, compose.body, 'mail.compose.message body incorrect') self.assertEqual(set(message_pids), set(partner_ids), 'mail.compose.message partner_ids incorrect') - # Test: mail.compose.message: attachments + # Test: mail.compose.message: attachments (owner has not been modified) for attach in compose.attachment_ids: - self.assertEqual(attach.res_model, False, 'mail.compose.message attachment res_model through templat was overriden') - self.assertEqual(attach.res_id, 0, 'mail.compose.message attachment res_id incorrect') + self.assertEqual(attach.res_model, 'res.partner', 'mail.compose.message attachment res_model through templat was overriden') + self.assertEqual(attach.res_id, self.partner_admin_id, 'mail.compose.message attachment res_id incorrect') self.assertIn((attach.datas_fname, base64.b64decode(attach.datas)), _attachments_test, 'mail.message attachment name / data incorrect') # Test: mail.message: attachments From fcea61b6ebce561743bfe3876dd5a705ce6a7bad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 7 Mar 2013 14:25:17 +0100 Subject: [PATCH 024/160] [IMP] mail: added a cron job to delete mail attachments (lost user input or reports generated on-the-fly). They have: res_model = mail.compose.message; res_id 0; more than one day of inactivity. bzr revid: tde@openerp.com-20130307132517-4xivu90dzn3o744a --- addons/mail/data/mail_data.xml | 13 +++++++++++++ addons/mail/mail_thread.py | 20 ++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/addons/mail/data/mail_data.xml b/addons/mail/data/mail_data.xml index 3f517ee7858..02cfd626768 100644 --- a/addons/mail/data/mail_data.xml +++ b/addons/mail/data/mail_data.xml @@ -27,6 +27,19 @@ 1000 + + Garbage Collect Mail Attachments + + + 1 + weeks + -1 + + mail.thread + _garbage_collect_attachments + () + + Discussions diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 173ec951b32..2d43b93dd9a 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -389,6 +389,26 @@ class mail_thread(osv.AbstractModel): return [('message_unread', '=', True)] return [] + def _garbage_collect_attachments(self, cr, uid, context=None): + """ Garbage collect lost mail attachments. Those are attachments + - linked to res_model 'mail.compose.message', the composer wizard + - with res_id 0, because they were created outside of an existing + wizard (typically user input through Chatter or reports + created on-the-fly by the templates) + - unused since at least one day (create_date and write_date) + """ + limit_date = datetime.datetime.utcnow() - datetime.timedelta(days=1) + limit_date_str = datetime.datetime.strftime(limit_date, tools.DEFAULT_SERVER_DATETIME_FORMAT) + ir_attachment_obj = self.pool.get('ir.attachment') + attach_ids = ir_attachment_obj.search(cr, uid, [ + ('res_model', '=', 'mail.compose.message'), + ('res_id', '=', 0), + ('create_date', '<', limit_date_str), + ('write_date', '<', limit_date_str), + ], context=context) + ir_attachment_obj.unlink(cr, uid, attach_ids, context=context) + return True + #------------------------------------------------------ # Email specific #------------------------------------------------------ From 70ce1e5eb4586d6f08248430fe6bee9360dba285 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 14 Mar 2013 09:53:15 +0100 Subject: [PATCH 025/160] [FIX] Fixed forgotten conflict when merging trunk. bzr revid: tde@openerp.com-20130314085315-m4didtupt20gmkyv --- addons/email_template/wizard/mail_compose_message.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/addons/email_template/wizard/mail_compose_message.py b/addons/email_template/wizard/mail_compose_message.py index f70f29e4b5e..2e051338352 100644 --- a/addons/email_template/wizard/mail_compose_message.py +++ b/addons/email_template/wizard/mail_compose_message.py @@ -145,11 +145,7 @@ class mail_compose_message(osv.TransientModel): values['body'] = values.pop('body_html', '') # transform email_to, email_cc into partner_ids -<<<<<<< TREE - values['partner_ids'] = [] -======= partner_ids = set() ->>>>>>> MERGE-SOURCE mails = tools.email_split(values.pop('email_to', '') + ' ' + values.pop('email_cc', '')) for mail in mails: partner_id = self.pool.get('res.partner').find_or_create(cr, uid, mail, context=context) From bab6cd035a7ca9c9203d25c0bc0780cf30a79c2d Mon Sep 17 00:00:00 2001 From: "Nikita Parmar (OpenERP Trainee)" Date: Fri, 22 Mar 2013 16:33:31 +0530 Subject: [PATCH 026/160] [FIX] created record rule for multi company becuase a child user was also able to see the incoming shipment of parent company where it should not bzr revid: ado@tinyerp.com-20130322110331-h0yhe2ksnqwzs0al --- addons/stock/security/stock_security.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/addons/stock/security/stock_security.xml b/addons/stock/security/stock_security.xml index 10ae6a16d59..3ffcd4a18ca 100644 --- a/addons/stock/security/stock_security.xml +++ b/addons/stock/security/stock_security.xml @@ -45,6 +45,20 @@ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + + stock_picking_out multi-company + + + ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + + + + stock_picking_in multi-company + + + ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + + Warehouse multi-company From c9c249291c1eeb377fa6b232d5e0064df76abc17 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Mon, 25 Mar 2013 11:38:07 +0530 Subject: [PATCH 027/160] [IMP] hr: change admin image in hr bzr revid: cha@tinyerp.com-20130325060807-de4zq8jvokoimmyu --- addons/hr/hr_data.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/hr/hr_data.xml b/addons/hr/hr_data.xml index 25c882f2201..1e9d7668f02 100644 --- a/addons/hr/hr_data.xml +++ b/addons/hr/hr_data.xml @@ -16,6 +16,7 @@ Leave Management (keep track of employee leaves), Expense Management (manage emp Administrator + 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 From 83d85ae1ec728b6d22e26adb729140f4506f37a6 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Mon, 25 Mar 2013 12:13:32 +0530 Subject: [PATCH 028/160] [IMP] added & modified employee demo data in hr bzr revid: cha@tinyerp.com-20130325064332-g1dvoz8lfkt831w1 --- addons/hr/hr_demo.xml | 104 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 99 insertions(+), 5 deletions(-) diff --git a/addons/hr/hr_demo.xml b/addons/hr/hr_demo.xml index 14e4a7f5da2..fcc50237267 100644 --- a/addons/hr/hr_demo.xml +++ b/addons/hr/hr_demo.xml @@ -135,7 +135,7 @@ Grand-Rosière +3281813700 niv@openerp.com - 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 @@ -172,7 +172,7 @@ Grand-Rosière +3281813700 qdp@openerp.com - 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 @@ -184,7 +184,7 @@ Grand-Rosière +3281813700 fme@openerp.com - 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 @@ -196,7 +196,7 @@ Grand-Rosière +3281813700 fpi@openerp.com - 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 @@ -208,7 +208,7 @@ Grand-Rosière +3281813700 jth@openerp.com - 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 @@ -235,5 +235,99 @@ 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 + + Hans Anders + + + Grand-Rosière + +3282823500 + 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 + + + + Jan Van Eyck + + + Auderghem + +3282823500 + jve@openerp.com + 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 + + + + Jean Pierre + + + Grand-Rosière + +3282823500 + jep@openerp.com + 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 + + + + John Doe + + + Grand-Rosière + +3282823500 + jod@openerp.com + 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 + + + + João Gomer + + + Auderghem + +3282823500 + jog@openerp.com + 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 + + + + Juan Gomez + + + Grand-Rosière + +3282823500 + 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 + + + + Luigi Roni + + + Auderghem + +3282823500 + lur@openerp.com + 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 + + + + Николай Петра + + + Grand-Rosière + +3282823500 + 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 + + + + 佐藤さくら (demo_ja_JP) + + + Grand-Rosière + +3282823500 + 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 + + + + 趙生 (demo_zh_CN) + + + Auderghem + +3282823500 + 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 + From 082339102486f16ed5cb2f220b3a142a25b09f52 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Mon, 25 Mar 2013 12:35:19 +0530 Subject: [PATCH 029/160] [IMP] hr_payroll: modified employee demo data bzr revid: cha@tinyerp.com-20130325070519-z5mngedvsqll8bll --- addons/hr_payroll/hr_payroll_demo.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/hr_payroll/hr_payroll_demo.xml b/addons/hr_payroll/hr_payroll_demo.xml index a22809b00e3..b287637db7e 100644 --- a/addons/hr_payroll/hr_payroll_demo.xml +++ b/addons/hr_payroll/hr_payroll_demo.xml @@ -133,6 +133,9 @@ Roger Scott user + Grand-Rosière + +3282823500 + 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 From 43e64047d5df7d5d22115d29c4af83fb4c61cf4b Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Mon, 25 Mar 2013 13:02:38 +0530 Subject: [PATCH 030/160] [IMP] project_timesheet: modified employee demo data bzr revid: cha@tinyerp.com-20130325073238-7xnqk17pn0h96gwc --- addons/project_timesheet/project_timesheet_demo.xml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/addons/project_timesheet/project_timesheet_demo.xml b/addons/project_timesheet/project_timesheet_demo.xml index 90873d2a418..13f8f01daec 100644 --- a/addons/project_timesheet/project_timesheet_demo.xml +++ b/addons/project_timesheet/project_timesheet_demo.xml @@ -18,6 +18,9 @@ + Grand-Rosière + +3282623500 + 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 @@ -35,12 +38,17 @@ - Aline + Aline Preillon - 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 + Grand-Rosière + +3282823500 + apr@openerp.com + + + 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 From 623f8c8ef4d863336999803d3f085da56a21546e Mon Sep 17 00:00:00 2001 From: Jigar Amin Date: Mon, 25 Mar 2013 14:50:41 +0530 Subject: [PATCH 031/160] [FIX] sale_stock: Planned Date based on sale_order date should preserver the utc time instead of putting it 00:00:00. Assumed 00 time lead time sone converstion to dates after then order date , e.g. in pst time if we see some time converstion then it may happen it hows previous day. bzr revid: jam@tinyerp.com-20130325092041-o71rqirijwqh2uqz --- addons/sale/sale.py | 2 +- addons/sale_stock/sale_stock.py | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 3655b3a8184..99a8e875f77 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -252,7 +252,7 @@ class sale_order(osv.osv): 'company_id': fields.related('shop_id','company_id',type='many2one',relation='res.company',string='Company',store=True,readonly=True) } _defaults = { - 'date_order': fields.date.context_today, + 'date_order': lambda *args: datetime.now().strftime(DEFAULT_SERVER_DATE_FORMAT), 'order_policy': 'manual', 'state': 'draft', 'user_id': lambda obj, cr, uid, context: uid, diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py index 1b5ddefbe74..04289abb294 100644 --- a/addons/sale_stock/sale_stock.py +++ b/addons/sale_stock/sale_stock.py @@ -20,7 +20,7 @@ # ############################################################################## from datetime import datetime, timedelta -from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP, float_compare +from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP, float_compare, DEFAULT_SERVER_TIME_FORMAT from dateutil.relativedelta import relativedelta from openerp.osv import fields, osv from openerp import netsvc @@ -232,6 +232,10 @@ class sale_order(osv.osv): res.append(line.procurement_id.id) return res + def _get_gmtdatetime(self, cr, uid, utcdate, context=None): + nowutctime = datetime.utcnow().strftime(DEFAULT_SERVER_TIME_FORMAT) + return "%s %s"%(utcdate, nowutctime) + # if mode == 'finished': # returns True if all lines are done, False otherwise # if mode == 'canceled': @@ -314,7 +318,7 @@ class sale_order(osv.osv): return { 'name': pick_name, 'origin': order.name, - 'date': order.date_order, + 'date': self._get_gmtdatetime(cr, uid, order.date_order, context), 'type': 'out', 'state': 'auto', 'move_type': order.picking_policy, @@ -348,7 +352,8 @@ class sale_order(osv.osv): return True def _get_date_planned(self, cr, uid, order, line, start_date, context=None): - date_planned = datetime.strptime(start_date, DEFAULT_SERVER_DATE_FORMAT) + relativedelta(days=line.delay or 0.0) + start_date = self._get_gmtdatetime(cr, uid, start_date, context) + date_planned = datetime.strptime(start_date, DEFAULT_SERVER_DATETIME_FORMAT) + relativedelta(days=line.delay or 0.0) date_planned = (date_planned - timedelta(days=order.company_id.security_lead)).strftime(DEFAULT_SERVER_DATETIME_FORMAT) return date_planned From 918db01d0e39195c837429ca1a3298b7df47faf3 Mon Sep 17 00:00:00 2001 From: Jigar Amin Date: Mon, 25 Mar 2013 15:05:26 +0530 Subject: [PATCH 032/160] [FIX] purcahse preserver the user UTC oder confimation time to avoid negative date issue bzr revid: jam@tinyerp.com-20130325093526-1m9wiikdga8v6s6x --- addons/purchase/purchase.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 799601acb64..17f2e9b4592 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -29,7 +29,7 @@ from openerp import pooler from openerp.tools.translate import _ import openerp.addons.decimal_precision as dp from openerp.osv.orm import browse_record, browse_null -from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP +from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP, DEFAULT_SERVER_TIME_FORMAT class purchase_order(osv.osv): @@ -226,7 +226,7 @@ class purchase_order(osv.osv): 'journal_id': fields.many2one('account.journal', 'Journal'), } _defaults = { - 'date_order': fields.date.context_today, + 'date_order': lambda *args: datetime.now().strftime(DEFAULT_SERVER_DATE_FORMAT), 'state': 'draft', 'name': lambda obj, cr, uid, context: '/', 'shipped': 0, @@ -593,11 +593,15 @@ class purchase_order(osv.osv): wf_service.trg_validate(uid, 'purchase.order', id, 'purchase_cancel', cr) return True + def _get_gmtdatetime(self, cr, uid, utcdate, context=None): + nowutctime = datetime.utcnow().strftime(DEFAULT_SERVER_TIME_FORMAT) + return "%s %s"%(utcdate, nowutctime) + def _prepare_order_picking(self, cr, uid, order, context=None): return { 'name': self.pool.get('ir.sequence').get(cr, uid, 'stock.picking.in'), 'origin': order.name + ((order.origin and (':' + order.origin)) or ''), - 'date': order.date_order, + 'date': self._get_gmtdatetime(cr, uid, order.date_order, context), 'partner_id': order.dest_address_id.id or order.partner_id.id, 'invoice_state': '2binvoiced' if order.invoice_method == 'picking' else 'none', 'type': 'in', @@ -615,8 +619,8 @@ class purchase_order(osv.osv): 'product_uos_qty': order_line.product_qty, 'product_uom': order_line.product_uom.id, 'product_uos': order_line.product_uom.id, - 'date': order_line.date_planned, - 'date_expected': order_line.date_planned, + 'date': self._get_gmtdatetime(cr, uid, order.date_order, context), + 'date_expected': self._get_gmtdatetime(cr, uid, order.date_order, context), 'location_id': order.partner_id.property_stock_supplier.id, 'location_dest_id': order.location_id.id, 'picking_id': picking_id, From fb38f1d81d1498dc228e4c5ce09d4a99a7b42fb3 Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Mon, 25 Mar 2013 14:44:10 +0100 Subject: [PATCH 033/160] [FIX] Update partner in associated bank statements when changing partner in pos order bzr revid: jco@openerp.com-20130325134410-ky0akwdcfr805df8 --- addons/point_of_sale/point_of_sale.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 44139f7a499..b47f31a2dad 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -523,6 +523,17 @@ class pos_order(osv.osv): wf_service.trg_validate(uid, 'pos.order', order_id, 'paid', cr) return order_ids + def write(self, cr, uid, ids, vals, context=None): + #If you change the partner of the PoS order, change also the partner of the associated bank statements + res = super(pos_order, self).write(cr, uid, ids, vals, context=context) + bsl_obj = self.pool.get("account.bank.statement.line") + if 'partner_id' in vals: + for posorder in self.browse(cr, uid, ids, context=context): + bsl_ids = [x.id for x in posorder.statement_ids] + part_id = self.pool.get('res.partner')._find_accounting_partner(posorder.partner_id).id + bsl_obj.write(cr, uid, bsl_ids, {'partner_id': part_id}, context=context) + return res + def unlink(self, cr, uid, ids, context=None): for rec in self.browse(cr, uid, ids, context=context): if rec.state not in ('draft','cancel'): From c1afba4742c73bd25b818515b27d793869b25fd2 Mon Sep 17 00:00:00 2001 From: Jigar Amin Date: Tue, 26 Mar 2013 05:14:37 -0700 Subject: [PATCH 034/160] [FIX] SO/PO: Fixed date to dateime convestion for expected date based on Order Date, Converstion is based on assumption date date will be in user tz and taking 12:00 hours time to make right time converstion bzr revid: jam@tinyerp.com-20130326121437-89c42jtdw7qv3l2w --- addons/purchase/purchase.py | 37 ++++++++++++++++++++++++++------- addons/sale/sale.py | 2 +- addons/sale_stock/sale_stock.py | 34 ++++++++++++++++++++++++------ 3 files changed, 58 insertions(+), 15 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 17f2e9b4592..1041b016fb3 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -20,6 +20,8 @@ ############################################################################## import time +import pytz +from openerp import SUPERUSER_ID from datetime import datetime from dateutil.relativedelta import relativedelta @@ -29,7 +31,7 @@ from openerp import pooler from openerp.tools.translate import _ import openerp.addons.decimal_precision as dp from openerp.osv.orm import browse_record, browse_null -from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP, DEFAULT_SERVER_TIME_FORMAT +from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP class purchase_order(osv.osv): @@ -226,7 +228,7 @@ class purchase_order(osv.osv): 'journal_id': fields.many2one('account.journal', 'Journal'), } _defaults = { - 'date_order': lambda *args: datetime.now().strftime(DEFAULT_SERVER_DATE_FORMAT), + 'date_order': fields.date.context_today, 'state': 'draft', 'name': lambda obj, cr, uid, context: '/', 'shipped': 0, @@ -593,15 +595,34 @@ class purchase_order(osv.osv): wf_service.trg_validate(uid, 'purchase.order', id, 'purchase_cancel', cr) return True - def _get_gmtdatetime(self, cr, uid, utcdate, context=None): - nowutctime = datetime.utcnow().strftime(DEFAULT_SERVER_TIME_FORMAT) - return "%s %s"%(utcdate, nowutctime) + def date_to_datetime(self, cr, uid, userdate, context=None): + """ + Function accepts date string assumed in client TZ and result is produced + in UTC timezone with 12:00 is assumed time to be sure, that system will + avoid tz date converstion issues. + e.g. Date 2013-03-26 in user tz will get 12:00 Hours and will then + get converted to UTC to avoid tz converstion. + userdate: date string in in user time zone. + return : the utc datetime string. + """ + user_datetime = datetime.strptime(userdate, DEFAULT_SERVER_DATE_FORMAT) + relativedelta(hours=12.0) + if context and context.get('tz'): + tz_name = context['tz'] + else: + tz_name = self.pool.get('res.users').read(cr, SUPERUSER_ID, uid, ['tz'])['tz'] + if not tz_name: + tz_name = time.tzname[time.daylight] + utc = pytz.timezone('UTC') + context_tz = pytz.timezone(tz_name) + local_timestamp = context_tz.localize(user_datetime, is_dst=False) + user_datetime = local_timestamp.astimezone(utc) + return user_datetime.strftime(DEFAULT_SERVER_DATETIME_FORMAT) def _prepare_order_picking(self, cr, uid, order, context=None): return { 'name': self.pool.get('ir.sequence').get(cr, uid, 'stock.picking.in'), 'origin': order.name + ((order.origin and (':' + order.origin)) or ''), - 'date': self._get_gmtdatetime(cr, uid, order.date_order, context), + 'date': self.date_to_datetime(cr, uid, order.date_order, context), 'partner_id': order.dest_address_id.id or order.partner_id.id, 'invoice_state': '2binvoiced' if order.invoice_method == 'picking' else 'none', 'type': 'in', @@ -619,8 +640,8 @@ class purchase_order(osv.osv): 'product_uos_qty': order_line.product_qty, 'product_uom': order_line.product_uom.id, 'product_uos': order_line.product_uom.id, - 'date': self._get_gmtdatetime(cr, uid, order.date_order, context), - 'date_expected': self._get_gmtdatetime(cr, uid, order.date_order, context), + 'date': self.date_to_datetime(cr, uid, order.date_order, context), + 'date_expected': self.date_to_datetime(cr, uid, order.date_order, context), 'location_id': order.partner_id.property_stock_supplier.id, 'location_dest_id': order.location_id.id, 'picking_id': picking_id, diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 99a8e875f77..3655b3a8184 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -252,7 +252,7 @@ class sale_order(osv.osv): 'company_id': fields.related('shop_id','company_id',type='many2one',relation='res.company',string='Company',store=True,readonly=True) } _defaults = { - 'date_order': lambda *args: datetime.now().strftime(DEFAULT_SERVER_DATE_FORMAT), + 'date_order': fields.date.context_today, 'order_policy': 'manual', 'state': 'draft', 'user_id': lambda obj, cr, uid, context: uid, diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py index 04289abb294..3fb41895d6e 100644 --- a/addons/sale_stock/sale_stock.py +++ b/addons/sale_stock/sale_stock.py @@ -20,11 +20,14 @@ # ############################################################################## from datetime import datetime, timedelta -from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP, float_compare, DEFAULT_SERVER_TIME_FORMAT +from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP, float_compare from dateutil.relativedelta import relativedelta from openerp.osv import fields, osv from openerp import netsvc from openerp.tools.translate import _ +import pytz +import time +from openerp import SUPERUSER_ID class sale_shop(osv.osv): _inherit = "sale.shop" @@ -232,9 +235,28 @@ class sale_order(osv.osv): res.append(line.procurement_id.id) return res - def _get_gmtdatetime(self, cr, uid, utcdate, context=None): - nowutctime = datetime.utcnow().strftime(DEFAULT_SERVER_TIME_FORMAT) - return "%s %s"%(utcdate, nowutctime) + def date_to_datetime(self, cr, uid, userdate, context=None): + """ + Function accepts date string assumed in client TZ and result is produced + in UTC timezone with 12:00 is assumed time to be sure, that system will + avoid tz date converstion issues. + e.g. Date 2013-03-26 in user tz will get 12:00 Hours and will then + get converted to UTC to avoid tz converstion. + userdate: date string in in user time zone. + return : the utc datetime string. + """ + user_datetime = datetime.strptime(userdate, DEFAULT_SERVER_DATE_FORMAT) + relativedelta(hours=12.0) + if context and context.get('tz'): + tz_name = context['tz'] + else: + tz_name = self.pool.get('res.users').read(cr, SUPERUSER_ID, uid, ['tz'])['tz'] + if not tz_name: + tz_name = time.tzname[time.daylight] + utc = pytz.timezone('UTC') + context_tz = pytz.timezone(tz_name) + local_timestamp = context_tz.localize(user_datetime, is_dst=False) + user_datetime = local_timestamp.astimezone(utc) + return user_datetime.strftime(DEFAULT_SERVER_DATETIME_FORMAT) # if mode == 'finished': # returns True if all lines are done, False otherwise @@ -318,7 +340,7 @@ class sale_order(osv.osv): return { 'name': pick_name, 'origin': order.name, - 'date': self._get_gmtdatetime(cr, uid, order.date_order, context), + 'date': self.date_to_datetime(cr, uid, order.date_order, context), 'type': 'out', 'state': 'auto', 'move_type': order.picking_policy, @@ -352,7 +374,7 @@ class sale_order(osv.osv): return True def _get_date_planned(self, cr, uid, order, line, start_date, context=None): - start_date = self._get_gmtdatetime(cr, uid, start_date, context) + start_date = self.date_to_datetime(cr, uid, start_date, context) date_planned = datetime.strptime(start_date, DEFAULT_SERVER_DATETIME_FORMAT) + relativedelta(days=line.delay or 0.0) date_planned = (date_planned - timedelta(days=order.company_id.security_lead)).strftime(DEFAULT_SERVER_DATETIME_FORMAT) return date_planned From f3a976fd53a3bd09256be26fceffac6556194527 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 26 Mar 2013 13:53:11 +0100 Subject: [PATCH 035/160] [FIX] mail: fixed suggested recipients, not taking into account followers; when having multiple email addresses, this could lead to people being suggested based on email although they already are followers. bzr revid: tde@openerp.com-20130326125311-xlt1lt1te28fcm1o --- addons/mail/mail_thread.py | 26 +++++++++++++++++++++----- addons/mail/static/src/js/mail.js | 12 ++++++++++-- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index cb8da42ab47..c5ec5300b56 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -848,7 +848,8 @@ class mail_thread(osv.AbstractModel): recipient in the result dictionary. The form is : partner_id, partner_name or partner_name, reason """ if email and not partner: - partner_info = self.message_get_partner_info_from_emails(cr, uid, [email], context=context)[0] + # get partner info from email + partner_info = self.message_get_partner_info_from_emails(cr, uid, [email], context=context, res_id=obj.id)[0] if partner_info.get('partner_id'): partner = self.pool.get('res.partner').browse(cr, SUPERUSER_ID, [partner_info.get('partner_id')], context=context)[0] if email and email in [val[1] for val in result[obj.id]]: # already existing email -> skip @@ -876,7 +877,11 @@ class mail_thread(osv.AbstractModel): self._message_add_suggested_recipient(cr, uid, result, obj, partner=obj.user_id.partner_id, reason=self._all_columns['user_id'].column.string, context=context) return result - def message_get_partner_info_from_emails(self, cr, uid, emails, link_mail=False, context=None): + def message_get_partner_info_from_emails(self, cr, uid, emails, link_mail=False, context=None, res_id=None): + """ Wrapper with weird order parameter because of 7.0 fix. """ + return self.message_find_partner_from_emails(cr, uid, res_id, emails, link_mail=link_mail, context=context) + + def message_find_partner_from_emails(self, cr, uid, id, emails, link_mail=False, context=None): """ Convert a list of emails into a list partner_ids and a list new_partner_ids. The return value is non conventional because it is meant to be used by the mail widget. @@ -886,15 +891,26 @@ class mail_thread(osv.AbstractModel): mail_message_obj = self.pool.get('mail.message') partner_obj = self.pool.get('res.partner') result = list() + if id: + obj = self.browse(cr, SUPERUSER_ID, id, context=context) + else: + obj = None for email in emails: partner_info = {'full_name': email, 'partner_id': False} m = re.search(r"((.+?)\s*<)?([^<>]+@[^<>]+)>?", email, re.IGNORECASE | re.DOTALL) if not m: continue email_address = m.group(3) - ids = partner_obj.search(cr, SUPERUSER_ID, [('email', '=', email_address)], context=context) - if ids: - partner_info['partner_id'] = ids[0] + # first try: check in document's followers + if obj: + for follower in obj.message_follower_ids: + if follower.email == email_address: + partner_info['partner_id'] = follower.id + # second try: check in partners + if not partner_info.get('partner_id'): + ids = partner_obj.search(cr, SUPERUSER_ID, [('email', '=', email_address)], context=context) + if ids: + partner_info['partner_id'] = ids[0] result.append(partner_info) # link mail with this from mail to the new partner id diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index cc34483c17b..d715979c507 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -620,7 +620,11 @@ openerp.mail = function (session) { // have unknown names -> call message_get_partner_info_from_emails to try to find partner_id var find_done = $.Deferred(); if (names_to_find.length > 0) { - find_done = self.parent_thread.ds_thread._model.call('message_get_partner_info_from_emails', [names_to_find]); + // find_done = self.parent_thread.ds_thread._model.call('message_get_partner_info_from_emails', [names_to_find]); + var values = { + 'res_id': this.context.default_res_id, + } + find_done = self.parent_thread.ds_thread._model.call('message_get_partner_info_from_emails', [names_to_find], values); } else { find_done.resolve([]); @@ -666,7 +670,11 @@ openerp.mail = function (session) { var new_names_to_find = _.difference(names_to_find, names_to_remove); find_done = $.Deferred(); if (new_names_to_find.length > 0) { - find_done = self.parent_thread.ds_thread._model.call('message_get_partner_info_from_emails', [new_names_to_find, true]); + var values = { + 'link_mail': true, + 'res_id': this.context.default_res_id, + } + find_done = self.parent_thread.ds_thread._model.call('message_get_partner_info_from_emails', [new_names_to_find], values); } else { find_done.resolve([]); From 2858a4c54a1902d23658f8abbe59b4382cb4c36f Mon Sep 17 00:00:00 2001 From: Jigar Amin Date: Tue, 26 Mar 2013 20:53:14 +0530 Subject: [PATCH 036/160] [IMP] Impoved tooltips for the SO/PO Lead time for Company. bzr revid: jam@tinyerp.com-20130326152314-77h1f5eqy0zy1gax --- addons/purchase/company.py | 4 +++- addons/sale_stock/company.py | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/addons/purchase/company.py b/addons/purchase/company.py index 275f5ea200d..e1337361cc7 100644 --- a/addons/purchase/company.py +++ b/addons/purchase/company.py @@ -25,7 +25,9 @@ class company(osv.osv): _inherit = 'res.company' _columns = { 'po_lead': fields.float('Purchase Lead Time', required=True, - help="This is the leads/security time for each purchase order."), + help="This is the leads/security time for each purchase order."\ + "This number of days will be removed from what suppliers has promise to you"\ + "for company security purpose."), } _defaults = { 'po_lead': lambda *a: 1.0, diff --git a/addons/sale_stock/company.py b/addons/sale_stock/company.py index 67440ed6c67..716300f4f52 100644 --- a/addons/sale_stock/company.py +++ b/addons/sale_stock/company.py @@ -25,8 +25,8 @@ class company(osv.osv): _inherit = 'res.company' _columns = { 'security_lead': fields.float('Security Days', required=True, - help="This is the days added to what you promise to customers "\ - "for security purpose"), + help="This number of days will be removed from what you promise to customers"\ + "for company security purpose to cope with any problems of procurement, final shipping, order negotiation etc."), } _defaults = { 'security_lead': 0.0, From e5f8921f5f11998afc2fa6b8fffaa8eef7340f0c Mon Sep 17 00:00:00 2001 From: Jigar Amin Date: Wed, 27 Mar 2013 00:39:24 +0530 Subject: [PATCH 037/160] [FIX] yaml test case fix for So date and planned ate checking. bzr revid: jam@tinyerp.com-20130326190924-sojhm8kxf7qqji42 --- addons/sale_stock/test/picking_order_policy.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/sale_stock/test/picking_order_policy.yml b/addons/sale_stock/test/picking_order_policy.yml index 800c131e288..d4d598d10e9 100644 --- a/addons/sale_stock/test/picking_order_policy.yml +++ b/addons/sale_stock/test/picking_order_policy.yml @@ -26,8 +26,7 @@ order = self.browse(cr, uid, ref("sale.sale_order_6")) for order_line in order.order_line: procurement = order_line.procurement_id - date_planned = datetime.strptime(order.date_order, DEFAULT_SERVER_DATE_FORMAT) + relativedelta(days=order_line.delay or 0.0) - date_planned = (date_planned - timedelta(days=order.company_id.security_lead)).strftime(DEFAULT_SERVER_DATETIME_FORMAT) + date_planned = self._get_date_planned(cr, uid, order, order_line, order.date_order, context=context) assert procurement.date_planned == date_planned, "Scheduled date is not correspond." assert procurement.product_id.id == order_line.product_id.id, "Product is not correspond." assert procurement.product_qty == order_line.product_uom_qty, "Qty is not correspond." @@ -60,7 +59,8 @@ output_id = sale_order.shop_id.warehouse_id.lot_output_id.id for move in picking.move_lines: order_line = move.sale_line_id - date_planned = datetime.strptime(sale_order.date_order, DEFAULT_SERVER_DATE_FORMAT) + relativedelta(days=order_line.delay or 0.0) + sale_order_date = self.date_to_datetime(cr, uid, sale_order.date_order, context) + date_planned = datetime.strptime(sale_order_date, DEFAULT_SERVER_DATETIME_FORMAT) + relativedelta(days=order_line.delay or 0.0) date_planned = (date_planned - timedelta(days=sale_order.company_id.security_lead)).strftime(DEFAULT_SERVER_DATETIME_FORMAT) assert datetime.strptime(move.date_expected, DEFAULT_SERVER_DATETIME_FORMAT) == datetime.strptime(date_planned, DEFAULT_SERVER_DATETIME_FORMAT), "Excepted Date is not correspond with Planned Date." assert move.product_id.id == order_line.product_id.id,"Product is not correspond." From 78a8766861d468b2e49093b3f86b9a4628f397ff Mon Sep 17 00:00:00 2001 From: Jigar Amin Date: Wed, 27 Mar 2013 01:24:00 +0530 Subject: [PATCH 038/160] [FIX] project_mrp yaml test case fix for procurment date vs date_deadline bzr revid: jam@tinyerp.com-20130326195400-pphgliizzzkfcruk --- addons/project_mrp/test/project_task_procurement.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/project_mrp/test/project_task_procurement.yml b/addons/project_mrp/test/project_task_procurement.yml index 8854ce20c80..967461ca30a 100644 --- a/addons/project_mrp/test/project_task_procurement.yml +++ b/addons/project_mrp/test/project_task_procurement.yml @@ -27,7 +27,7 @@ assert (not project and not account) or project.analytic_account_id == account, "Project does not correspond." planned_hours = self._convert_qty_company_hours(cr, uid, procurement, context=context) assert task.planned_hours == planned_hours, 'Planned Hours do not correspond.' - assert datetime.strptime(task.date_deadline, '%Y-%m-%d') == datetime.strptime(procurement.date_planned, '%Y-%m-%d %H:%M:%S'), 'Deadline does not correspond.' + assert datetime.strptime(task.date_deadline, '%Y-%m-%d') == datetime.strptime(procurement.date_planned[:10], '%Y-%m-%d'), 'Deadline does not correspond.' if procurement.product_id.product_manager: assert task.user_id.id == procurement.product_id.product_manager.id, 'Allocated Person does not correspond with Service Product Manager.' - From a890cedff685aa5fa30fcbdf317dd83d2384e079 Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Thu, 28 Mar 2013 10:59:42 +0100 Subject: [PATCH 039/160] [FIX] Remove double . in numbered bulleted list bzr revid: jco@openerp.com-20130328095942-7muw0dt7x2jzmdka --- .../base_report_designer/openerp_sxw2rml/normalized_odt2rml.xsl | 2 +- .../base_report_designer/openerp_sxw2rml/normalized_oo2rml.xsl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/base_report_designer/openerp_sxw2rml/normalized_odt2rml.xsl b/addons/base_report_designer/openerp_sxw2rml/normalized_odt2rml.xsl index 50ffb3d81be..9f9e5050d69 100644 --- a/addons/base_report_designer/openerp_sxw2rml/normalized_odt2rml.xsl +++ b/addons/base_report_designer/openerp_sxw2rml/normalized_odt2rml.xsl @@ -414,7 +414,7 @@ - . + diff --git a/addons/base_report_designer/openerp_sxw2rml/normalized_oo2rml.xsl b/addons/base_report_designer/openerp_sxw2rml/normalized_oo2rml.xsl index 66ef0b5b53c..ae68ae1ed1b 100644 --- a/addons/base_report_designer/openerp_sxw2rml/normalized_oo2rml.xsl +++ b/addons/base_report_designer/openerp_sxw2rml/normalized_oo2rml.xsl @@ -414,7 +414,7 @@ - . + From 2d210fce44faa23adce7399de8b5c965353e1191 Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Thu, 28 Mar 2013 12:28:29 +0100 Subject: [PATCH 040/160] [FIX] Use accounting partner and take partner into account when group by bzr revid: jco@openerp.com-20130328112829-6sj9eixmkzm3dr1r --- addons/point_of_sale/point_of_sale.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index b47f31a2dad..570168795a7 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -526,11 +526,16 @@ class pos_order(osv.osv): def write(self, cr, uid, ids, vals, context=None): #If you change the partner of the PoS order, change also the partner of the associated bank statements res = super(pos_order, self).write(cr, uid, ids, vals, context=context) + partner_obj = self.pool.get('res.partner') bsl_obj = self.pool.get("account.bank.statement.line") if 'partner_id' in vals: for posorder in self.browse(cr, uid, ids, context=context): bsl_ids = [x.id for x in posorder.statement_ids] - part_id = self.pool.get('res.partner')._find_accounting_partner(posorder.partner_id).id + if vals['partner_id']: + p_id = partner_obj.browse(cr, uid, vals['partner_id'], context=context) + part_id = partner_obj._find_accounting_partner(p_id).id + else: + part_id = False bsl_obj.write(cr, uid, bsl_ids, {'partner_id': part_id}, context=context) return res @@ -962,9 +967,9 @@ class pos_order(osv.osv): }) if data_type == 'product': - key = ('product', values['product_id'],) + key = ('product', values['partner_id'], values['product_id']) elif data_type == 'tax': - key = ('tax', values['tax_code_id'],) + key = ('tax', values['partner_id'], values['tax_code_id'],) elif data_type == 'counter_part': key = ('counter_part', values['partner_id'], values['account_id']) else: @@ -1040,7 +1045,7 @@ class pos_order(osv.osv): 'debit': ((amount<0) and -amount) or 0.0, 'tax_code_id': tax_code_id, 'tax_amount': tax_amount, - 'partner_id': order.partner_id and order.partner_id.id or False + 'partner_id': order.partner_id and self.pool.get("res.partner")._find_accounting_partner(order.partner_id).id or False }) # For each remaining tax with a code, whe create a move line @@ -1082,7 +1087,7 @@ class pos_order(osv.osv): 'account_id': order_account, 'credit': ((order.amount_total < 0) and -order.amount_total) or 0.0, 'debit': ((order.amount_total > 0) and order.amount_total) or 0.0, - 'partner_id': order.partner_id and order.partner_id.id or False + 'partner_id': order.partner_id and self.pool.get("res.partner")._find_accounting_partner(order.partner_id).id or False }) order.write({'state':'done', 'account_move': move_id}) From c0b4f5b714c6804a3747ba090556fd78aacd9a94 Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Thu, 28 Mar 2013 13:16:15 +0100 Subject: [PATCH 041/160] [FIX] taxes should have partner too bzr revid: jco@openerp.com-20130328121615-eyoplrrrofrosuay --- addons/point_of_sale/point_of_sale.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 570168795a7..cd3dea7cb66 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -1063,6 +1063,7 @@ class pos_order(osv.osv): 'debit': 0.0, 'tax_code_id': tax_code_id, 'tax_amount': tax_amount, + 'partner_id': order.partner_id and self.pool.get("res.partner")._find_accounting_partner(order.partner_id).id or False }) # Create a move for each tax group @@ -1079,6 +1080,7 @@ class pos_order(osv.osv): 'debit': ((tax_amount<0) and -tax_amount) or 0.0, 'tax_code_id': key[tax_code_pos], 'tax_amount': tax_amount, + 'partner_id': order.partner_id and self.pool.get("res.partner")._find_accounting_partner(order.partner_id).id or False }) # counterpart From 78e94187179b1a62c2699b8f14b6369de10759c6 Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Thu, 28 Mar 2013 16:55:49 +0100 Subject: [PATCH 042/160] [FIX] Write all lines at once to the move instead of creating move lines separately bzr revid: jco@openerp.com-20130328155549-pdqg0fgk1timzgfb --- addons/point_of_sale/point_of_sale.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index cd3dea7cb66..253fdea02ef 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -1094,9 +1094,12 @@ class pos_order(osv.osv): order.write({'state':'done', 'account_move': move_id}) + all_lines = [] for group_key, group_data in grouped_data.iteritems(): for value in group_data: - account_move_line_obj.create(cr, uid, value, context=context) + all_lines.append((0, 0, value),) + if move_id: #In case no order was changed + self.pool.get("account.move").write(cr, uid, [move_id], {'line_id':all_lines}, context=context) return True From e3d1e4fb44a1958b8d135dd892b950a306c9e77a Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Fri, 29 Mar 2013 12:38:27 +0100 Subject: [PATCH 043/160] [IMP] view_form: radio button for many2one bzr revid: chm@openerp.com-20130329113827-me6d3ho6jrp525f0 --- addons/web/static/src/js/view_form.js | 63 ++++++++++++++++++++++----- addons/web/static/src/xml/base.xml | 10 ++--- 2 files changed, 56 insertions(+), 17 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 3b851568fe6..d95e5a9306d 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2814,21 +2814,60 @@ instance.web.form.FieldRadio = instance.web.form.AbstractField.extend(instance.w */ var self = this; this._super(field_manager, node); - this.horizontal = +this.options.horizontal; - this.no_radiolabel = +this.options.no_radiolabel; - this.display_readonly = +this.options.display_readonly; + this.horizontal = +this.options.horizontal || false; + this.no_radiolabel = +this.options.no_radiolabel || false; + this.display_readonly = +this.options.display_readonly || false; + this.selection = this.field.selection || []; + this.domain = false; }, initialize_content: function () { var self = this; - this.$el.on('click', '.oe_radio_input,.oe_radio_header', function (event) { - var id = $(event.target).data("id"); - id = isNaN(+id) ? id : +id; - if (id && !self.get("effective_readonly")) { - if (!self.field.required && id == self.get_value()) { - self.set_value(false); - } else { - self.set_value(id); - } + this.$el.on('click', '.oe_radio_input,.oe_radio_header', function (e) {self.on_click_change_value(e)}); + this.field_manager.on("view_content_has_changed", this, this.get_selection); + }, + on_click_change_value: function (event) { + var id = $(event.target).data("id") || $(event.target).parent().data("id"); + id = isNaN(+id) ? id : +id; + if (id && !this.get("effective_readonly")) { + if (!this.field.required && id == this.get_value()) { + this.set_value(false); + } else { + this.set_value(id); + } + } + }, + /** Get the selection and render it + * selection: [[identifier, value_to_display], ...] + * For selection fields: this is directly given by this.field.selection + * For many2one fields: perform a search on the relation of the many2one field + */ + get_selection: function() { + var self = this; + var selection = []; + var def = $.Deferred(); + if (self.field.type == "many2one") { + var domain = instance.web.pyeval.eval('domain', this.build_domain()) || []; + if (! _.isEqual(self.domain, domain)) { + self.domain = domain; + new instance.web.DataSetSearch(self, self.field.relation, self.build_context(), self.domain) + .read_slice(['name'], {}) + .then(function (records) { + for(var i = 0; i < records.length; i++) { + selection.push([records[i].id, records[i].name]); + } + def.resolve(); + }); + } + } + else if (self.field.type == "selection") { + selection = self.field.selection || []; + def.resolve(); + } + def.then(function () { + if (! _.isEqual(selection, self.get('selection'))) { + self.selection = selection; + self.$el.html($(QWeb.render("FieldRadio", {'widget': self})).html()); + self.set("selection", _.clone(this.selection)); } }); }, diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 41067240b52..e74ff0bb796 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -1114,20 +1114,20 @@ - + - +

          - +
          &nbsp;
          - -
          + +
          &nbsp;
          From 90f6175053410237cc3921ce67c0f8b83d90dae3 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Fri, 29 Mar 2013 12:44:49 +0100 Subject: [PATCH 044/160] [IMP] view_form: radio button for many2one: check context bzr revid: chm@openerp.com-20130329114449-93yghqpenjb1sd22 --- addons/web/static/src/js/view_form.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index d95e5a9306d..08dc2f0dcaf 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2819,6 +2819,7 @@ instance.web.form.FieldRadio = instance.web.form.AbstractField.extend(instance.w this.display_readonly = +this.options.display_readonly || false; this.selection = this.field.selection || []; this.domain = false; + this.context = false; }, initialize_content: function () { var self = this; @@ -2847,9 +2848,11 @@ instance.web.form.FieldRadio = instance.web.form.AbstractField.extend(instance.w var def = $.Deferred(); if (self.field.type == "many2one") { var domain = instance.web.pyeval.eval('domain', this.build_domain()) || []; - if (! _.isEqual(self.domain, domain)) { + var context = instance.web.pyeval.eval('context', this.build_context()) || []; + if (! _.isEqual(self.domain, domain) || ! _.isEqual(self.context, context)) { self.domain = domain; - new instance.web.DataSetSearch(self, self.field.relation, self.build_context(), self.domain) + self.context = context; + new instance.web.DataSetSearch(self, self.field.relation, self.context, self.domain) .read_slice(['name'], {}) .then(function (records) { for(var i = 0; i < records.length; i++) { From dbd331ee6dc9396e3d8991ef6a5de6370eea0390 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Fri, 29 Mar 2013 15:10:38 +0100 Subject: [PATCH 045/160] [IMP] view_form: radio button for many2one read name_get bzr revid: chm@openerp.com-20130329141038-uobzji7e8fxkq4rr --- addons/web/static/src/js/view_form.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 08dc2f0dcaf..fe396d4be1e 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2812,7 +2812,6 @@ instance.web.form.FieldRadio = instance.web.form.AbstractField.extend(instance.w * - "no_radiolabel" don't display text values * - "display_readonly" to display radio button (not clickable) in read only mode */ - var self = this; this._super(field_manager, node); this.horizontal = +this.options.horizontal || false; this.no_radiolabel = +this.options.no_radiolabel || false; @@ -2852,13 +2851,13 @@ instance.web.form.FieldRadio = instance.web.form.AbstractField.extend(instance.w if (! _.isEqual(self.domain, domain) || ! _.isEqual(self.context, context)) { self.domain = domain; self.context = context; - new instance.web.DataSetSearch(self, self.field.relation, self.context, self.domain) - .read_slice(['name'], {}) + var ds = new instance.web.DataSet(self, self.field.relation, self.context); + ds.call('search', [self.domain]) .then(function (records) { - for(var i = 0; i < records.length; i++) { - selection.push([records[i].id, records[i].name]); - } - def.resolve(); + ds.name_get(records).then(function (records) { + selection = records; + def.resolve(); + }); }); } } From 96ad6088540cc4cea5ea656f9350623cfecbc4a5 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Fri, 29 Mar 2013 15:37:20 +0100 Subject: [PATCH 046/160] [IMP] general: use registry[X] instead registry.get(X) when X is dynamic bzr revid: rco@openerp.com-20130329143720-80pkd4csemlk1aqz --- addons/account/account.py | 2 +- addons/account/account_invoice.py | 2 +- addons/account/wizard/pos_box.py | 2 +- .../account_analytic_plans.py | 6 ++--- addons/account_payment/report/order.rml | 2 +- addons/anonymization/anonymization.py | 4 ++-- addons/audittrail/audittrail.py | 17 +++++++------- addons/base_action_rule/base_action_rule.py | 8 +++---- addons/base_calendar/base_calendar.py | 8 +++---- addons/base_calendar/crm_meeting.py | 2 +- .../wizard/crm_forward_to_partner.py | 4 ++-- .../wizard/open_questionnaire.py | 2 +- addons/document/document.py | 13 +++++------ addons/document_webdav/nodes.py | 6 ++--- addons/edi/models/edi.py | 16 +++++++------- addons/email_template/email_template.py | 2 +- .../wizard/email_template_preview.py | 2 +- addons/google_docs/google_docs.py | 2 +- addons/hr_payroll/hr_payroll.py | 4 ++-- .../wizard/account_coda_import.py | 2 +- addons/l10n_multilang/l10n_multilang.py | 2 +- addons/mail/mail_alias.py | 2 +- addons/mail/mail_mail.py | 8 +++---- addons/mail/mail_message.py | 8 +++---- addons/mail/mail_thread.py | 22 +++++++++---------- addons/mail/wizard/invite.py | 6 ++--- addons/mail/wizard/mail_compose_message.py | 6 ++--- .../marketing_campaign/marketing_campaign.py | 12 +++++----- addons/pad/pad.py | 2 +- addons/plugin/plugin_handler.py | 6 ++--- addons/point_of_sale/point_of_sale.py | 2 +- addons/point_of_sale/wizard/pos_box.py | 6 ++--- addons/portal/mail_mail.py | 2 +- .../project/wizard/project_task_delegate.py | 2 +- addons/purchase/purchase.py | 2 +- addons/share/wizard/share_wizard.py | 14 ++++++------ .../stock/wizard/stock_invoice_onshipping.py | 4 ++-- addons/subscription/subscription.py | 4 ++-- addons/survey/wizard/survey_answer.py | 13 ++++++----- 39 files changed, 114 insertions(+), 115 deletions(-) diff --git a/addons/account/account.py b/addons/account/account.py index bb24aec1748..48e66dd957b 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -3398,7 +3398,7 @@ class wizard_multi_charts_accounts(osv.osv_memory): try: tmp2 = obj_data.get_object_reference(cr, uid, *ref) if tmp2: - self.pool.get(tmp2[0]).write(cr, uid, tmp2[1], { + self.pool[tmp2[0]].write(cr, uid, tmp2[1], { 'currency_id': obj_wizard.currency_id.id }) except ValueError, e: diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index 30bdc2eedac..0802f77f497 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -313,7 +313,7 @@ class account_invoice(osv.osv): context = {} if context.get('active_model', '') in ['res.partner'] and context.get('active_ids', False) and context['active_ids']: - partner = self.pool.get(context['active_model']).read(cr, uid, context['active_ids'], ['supplier','customer'])[0] + partner = self.pool[context['active_model']].read(cr, uid, context['active_ids'], ['supplier','customer'])[0] if not view_type: view_id = self.pool.get('ir.ui.view').search(cr, uid, [('name', '=', 'account.invoice.tree')]) view_type = 'tree' diff --git a/addons/account/wizard/pos_box.py b/addons/account/wizard/pos_box.py index 49178dfd3ea..810d101eefd 100644 --- a/addons/account/wizard/pos_box.py +++ b/addons/account/wizard/pos_box.py @@ -21,7 +21,7 @@ class CashBox(osv.osv_memory): active_model = context.get('active_model', False) or False active_ids = context.get('active_ids', []) or [] - records = self.pool.get(active_model).browse(cr, uid, active_ids, context=context) + records = self.pool[active_model].browse(cr, uid, active_ids, context=context) return self._run(cr, uid, ids, records, context=None) diff --git a/addons/account_analytic_plans/account_analytic_plans.py b/addons/account_analytic_plans/account_analytic_plans.py index 5834db99cd3..40a227d8ceb 100644 --- a/addons/account_analytic_plans/account_analytic_plans.py +++ b/addons/account_analytic_plans/account_analytic_plans.py @@ -40,10 +40,10 @@ class one2many_mod2(fields.one2many): plan = journal.plan_id if plan and len(plan.plan_ids) > pnum: acc_id = plan.plan_ids[pnum].root_analytic_id.id - ids2 = obj.pool.get(self._obj).search(cr, user, [(self._fields_id,'in',ids),('analytic_account_id','child_of',[acc_id])], limit=self._limit) + ids2 = obj.pool[self._obj].search(cr, user, [(self._fields_id,'in',ids),('analytic_account_id','child_of',[acc_id])], limit=self._limit) if ids2 is None: - ids2 = obj.pool.get(self._obj).search(cr, user, [(self._fields_id,'in',ids)], limit=self._limit) - for r in obj.pool.get(self._obj)._read_flat(cr, user, ids2, [self._fields_id], context=context, load='_classic_write'): + ids2 = obj.pool[self._obj].search(cr, user, [(self._fields_id,'in',ids)], limit=self._limit) + for r in obj.pool[self._obj]._read_flat(cr, user, ids2, [self._fields_id], context=context, load='_classic_write'): res[r[self._fields_id]].append( r['id'] ) return res diff --git a/addons/account_payment/report/order.rml b/addons/account_payment/report/order.rml index ca2315d81b1..07d549db618 100644 --- a/addons/account_payment/report/order.rml +++ b/addons/account_payment/report/order.rml @@ -253,7 +253,7 @@ [[ get_invoice_name(line.ml_inv_ref.id) or '-' ]] - [[line.date=='False' and '-' or formatLang(line.date,date=True) ]] + [[not line.date and '-' or formatLang(line.date,date=True) ]] [[ formatLang(line.amount or '-', currency_obj=line.company_currency) ]] diff --git a/addons/anonymization/anonymization.py b/addons/anonymization/anonymization.py index de46e2e8d03..025f1f79f70 100644 --- a/addons/anonymization/anonymization.py +++ b/addons/anonymization/anonymization.py @@ -411,7 +411,7 @@ class ir_model_fields_anonymize_wizard(osv.osv_memory): model_name = field.model_id.model field_name = field.field_id.name field_type = field.field_id.ttype - table_name = self.pool.get(model_name)._table + table_name = self.pool[model_name]._table # get the current value sql = "select id, %s from %s" % (field_name, table_name) @@ -543,7 +543,7 @@ class ir_model_fields_anonymize_wizard(osv.osv_memory): fixes = group(fixes, ('model_name', 'field_name')) for line in data: - table_name = self.pool.get(line['model_id'])._table if self.pool.get(line['model_id']) else None + table_name = self.pool[line['model_id']]._table if line['model_id'] in self.pool else None # check if custom sql exists: key = (line['model_id'], line['field_id']) diff --git a/addons/audittrail/audittrail.py b/addons/audittrail/audittrail.py index 811c5387697..159baf3a9e7 100644 --- a/addons/audittrail/audittrail.py +++ b/addons/audittrail/audittrail.py @@ -70,8 +70,7 @@ class audittrail_rule(osv.osv): obj_model = self.pool.get('ir.model.data') #start Loop for thisrule in self.browse(cr, uid, ids): - obj = self.pool.get(thisrule.object_id.model) - if not obj: + if thisrule.object_id.model not in self.pool: raise osv.except_osv( _('WARNING: audittrail is not part of the pool'), _('Change audittrail depends -- Setting rule as DRAFT')) @@ -131,7 +130,7 @@ class audittrail_log(osv.osv): model_object = resname.object_id res_id = resname.res_id if model_object and res_id: - model_pool = self.pool.get(model_object.model) + model_pool = self.pool[model_object.model] res = model_pool.read(cr, uid, res_id, ['name']) data[resname.id] = res['name'] else: @@ -190,7 +189,7 @@ def get_value_text(cr, uid, pool, resource_pool, method, field, value): field_obj = (resource_pool._all_columns.get(field)).column if field_obj._type in ('one2many','many2many'): - data = pool.get(field_obj._obj).name_get(cr, uid, value) + data = pool[field_obj._obj].name_get(cr, uid, value) #return the modifications on x2many fields as a list of names res = map(lambda x:x[1], data) elif field_obj._type == 'many2one': @@ -212,7 +211,7 @@ def create_log_line(cr, uid, log_id, model, lines=None): if lines is None: lines = [] pool = openerp.registry(cr.dbname) - obj_pool = pool.get(model.model) + obj_pool = pool[model.model] model_pool = pool.get('ir.model') field_pool = pool.get('ir.model.fields') log_line_pool = pool.get('audittrail.log.line') @@ -251,7 +250,7 @@ def log_fct(cr, uid_orig, model, method, fct_src, *args, **kw): @return: Returns result as per method of Object proxy """ pool = openerp.registry(cr.dbname) - resource_pool = pool.get(model) + resource_pool = pool[model] model_pool = pool.get('ir.model') model_ids = model_pool.search(cr, SUPERUSER_ID, [('model', '=', model)]) model_id = model_ids and model_ids[0] or False @@ -321,7 +320,7 @@ def get_data(cr, uid, pool, res_ids, model, method): } """ data = {} - resource_pool = pool.get(model.model) + resource_pool = pool[model.model] # read all the fields of the given resources in super admin mode for resource in resource_pool.read(cr, SUPERUSER_ID, res_ids): values = {} @@ -390,7 +389,7 @@ def prepare_audittrail_log_line(cr, uid, pool, model, resource_id, method, old_v key: [] } # loop on all the fields - for field_name, field_definition in pool.get(model.model)._all_columns.items(): + for field_name, field_definition in pool[model.model]._all_columns.items(): if field_name in ('__last_update', 'id'): continue #if the field_list param is given, skip all the fields not in that list @@ -457,7 +456,7 @@ def process_data(cr, uid, pool, res_ids, model, method, old_values=None, new_val # if at least one modification has been found for model_id, resource_id in lines: - name = pool.get(model.model).name_get(cr, uid, [resource_id])[0][1] + name = pool[model.model].name_get(cr, uid, [resource_id])[0][1] vals = { 'method': method, 'object_id': model_id, diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index 62c808ed556..9d7d4d34ac4 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -96,7 +96,7 @@ class base_action_rule(osv.osv): """ filter the list record_ids that satisfy the action filter """ if record_ids and action_filter: assert action.model == action_filter.model_id, "Filter model different from action rule model" - model = self.pool.get(action_filter.model_id) + model = self.pool[action_filter.model_id] domain = [('id', 'in', record_ids)] + eval(action_filter.domain) ctx = dict(context or {}) ctx.update(eval(action_filter.context)) @@ -106,7 +106,7 @@ class base_action_rule(osv.osv): def _process(self, cr, uid, action, record_ids, context=None): """ process the given action on the records """ # execute server actions - model = self.pool.get(action.model_id.model) + model = self.pool[action.model_id.model] if action.server_action_ids: server_action_ids = map(int, action.server_action_ids) for record in model.browse(cr, uid, record_ids, context): @@ -195,7 +195,7 @@ class base_action_rule(osv.osv): ids = self.search(cr, SUPERUSER_ID, []) for action_rule in self.browse(cr, SUPERUSER_ID, ids): model = action_rule.model_id.model - model_obj = self.pool.get(model) + model_obj = self.pool[model] if not hasattr(model_obj, 'base_action_ruled'): model_obj.create = self._wrap_create(model_obj.create, model) model_obj.write = self._wrap_write(model_obj.write, model) @@ -232,7 +232,7 @@ class base_action_rule(osv.osv): last_run = get_datetime(action.last_run) if action.last_run else False # retrieve all the records that satisfy the action's condition - model = self.pool.get(action.model_id.model) + model = self.pool[action.model_id.model] domain = [] ctx = dict(context) if action.filter_id: diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py index ca75c9e20fc..fe5ffbc8988 100644 --- a/addons/base_calendar/base_calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -591,7 +591,7 @@ property or property parameter."), for vals in self.browse(cr, uid, ids, context=context): if vals.ref and vals.ref.user_id: - mod_obj = self.pool.get(vals.ref._name) + mod_obj = self.pool[vals.ref._name] res=mod_obj.read(cr,uid,[vals.ref.id],['duration','class'],context) defaults = {'user_id': vals.user_id.id, 'organizer_id': vals.ref.user_id.id,'duration':res[0]['duration'],'class':res[0]['class']} mod_obj.copy(cr, uid, vals.ref.id, default=defaults, context=context) @@ -684,7 +684,7 @@ true, it will allow you to hide the event alarm information without removing it. ir_obj = self.pool.get('ir.model') model_id = ir_obj.search(cr, uid, [('model', '=', model)])[0] - model_obj = self.pool.get(model) + model_obj = self.pool[model] for data in model_obj.browse(cr, uid, ids, context=context): basic_alarm = data.alarm_id @@ -754,7 +754,7 @@ true, it will allow you to hide the event alarm information without removing it. alarm_obj = self.pool.get('calendar.alarm') ir_obj = self.pool.get('ir.model') model_id = ir_obj.search(cr, uid, [('model', '=', model)])[0] - model_obj = self.pool.get(model) + model_obj = self.pool[model] for data in model_obj.browse(cr, uid, ids, context=context): alarm_ids = alarm_obj.search(cr, uid, [('model_id', '=', model_id), ('res_id', '=', data.id)]) if alarm_ids: @@ -853,7 +853,7 @@ class calendar_alarm(osv.osv): for alarm in self.browse(cr, uid, alarm_ids, context=context): next_trigger_date = None update_vals = {} - model_obj = self.pool.get(alarm.model_id.model) + model_obj = self.pool[alarm.model_id.model] res_obj = model_obj.browse(cr, uid, alarm.res_id, context=context) re_dates = [] diff --git a/addons/base_calendar/crm_meeting.py b/addons/base_calendar/crm_meeting.py index 6010f5ccfca..aa476002abc 100644 --- a/addons/base_calendar/crm_meeting.py +++ b/addons/base_calendar/crm_meeting.py @@ -135,7 +135,7 @@ class mail_message(osv.osv): def _find_allowed_model_wise(self, cr, uid, doc_model, doc_dict, context=None): if doc_model == 'crm.meeting': - for virtual_id in self.pool.get(doc_model).get_recurrent_ids(cr, uid, doc_dict.keys(), [], context=context): + for virtual_id in self.pool[doc_model].get_recurrent_ids(cr, uid, doc_dict.keys(), [], context=context): doc_dict.setdefault(virtual_id, doc_dict[get_real_ids(virtual_id)]) return super(mail_message, self)._find_allowed_model_wise(cr, uid, doc_model, doc_dict, context=context) diff --git a/addons/crm_partner_assign/wizard/crm_forward_to_partner.py b/addons/crm_partner_assign/wizard/crm_forward_to_partner.py index 81cc09d9717..91d462de015 100644 --- a/addons/crm_partner_assign/wizard/crm_forward_to_partner.py +++ b/addons/crm_partner_assign/wizard/crm_forward_to_partner.py @@ -86,7 +86,7 @@ class crm_lead_forward_to_partner(osv.TransientModel): if context is None: context = {} if model and model == 'crm.lead' and res_id: - lead = self.pool.get(model).browse(cr, uid, res_id, context=context) + lead = self.pool[model].browse(cr, uid, res_id, context=context) context['history_mode'] = history_mode body = self.get_record_data(cr, uid, 'crm.lead', res_id, context=context)['body'] return {'value': {'body': body}} @@ -110,7 +110,7 @@ class crm_lead_forward_to_partner(osv.TransientModel): if wizard.model not in ('crm.lead'): return res - lead = self.pool.get(wizard.model) + lead = self.pool[wizard.model] lead_ids = wizard.res_id and [wizard.res_id] or [] if wizard.composition_mode == 'mass_mail': diff --git a/addons/crm_profiling/wizard/open_questionnaire.py b/addons/crm_profiling/wizard/open_questionnaire.py index cb7ad220e3f..be0d2ef54af 100644 --- a/addons/crm_profiling/wizard/open_questionnaire.py +++ b/addons/crm_profiling/wizard/open_questionnaire.py @@ -61,7 +61,7 @@ class open_questionnaire(osv.osv_memory): for d in data.question_ans_ids: if d.answer_id: answers.append(d.answer_id.id) - self.pool.get(model)._questionnaire_compute(cr, uid, answers, context=context) + self.pool[model]._questionnaire_compute(cr, uid, answers, context=context) return {'type': 'ir.actions.act_window_close'} diff --git a/addons/document/document.py b/addons/document/document.py index 9b1fdc1d66b..54f12e204fe 100644 --- a/addons/document/document.py +++ b/addons/document/document.py @@ -137,7 +137,7 @@ class document_file(osv.osv): It is a hack that will try to discover if the mentioned record is clearly associated with a partner record. """ - obj_model = self.pool.get(res_model) + obj_model = self.pool[res_model] if obj_model._name == 'res.partner': return res_id elif 'partner_id' in obj_model._columns and obj_model._columns['partner_id']._obj == 'res.partner': @@ -422,7 +422,6 @@ class document_directory_content(osv.osv): tname = '' if content.include_name: record_name = node.displayname or '' - # obj = node.context._dirobj.pool.get(model) if record_name: tname = (content.prefix or '') + record_name + (content.suffix or '') + (content.extension or '') else: @@ -1296,9 +1295,9 @@ class node_res_dir(node_class): 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: + if self.res_model not in self.context._dirobj.pool: return [] + obj = self.context._dirobj.pool[self.res_model] dirobj = self.context._dirobj uid = self.context.uid ctx = self.context.context.copy() @@ -1333,7 +1332,7 @@ class node_res_dir(node_class): 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 + object2 = dirobj.pool[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)) @@ -1504,7 +1503,7 @@ class node_res_obj(node_class): ctx = self.context.context.copy() ctx.update(self.dctx) directory = dirobj.browse(cr, uid, self.dir_id) - obj = dirobj.pool.get(self.res_model) + obj = dirobj.pool[self.res_model] where = [] res = [] if name: @@ -1590,7 +1589,7 @@ class node_res_obj(node_class): uid = self.context.uid ctx = self.context.context.copy() ctx.update(self.dctx) - res_obj = dirobj.pool.get(self.res_model) + res_obj = dirobj.pool[self.res_model] object2 = res_obj.browse(cr, uid, self.res_id) or False diff --git a/addons/document_webdav/nodes.py b/addons/document_webdav/nodes.py index 5e819e01754..9a35f3cfe1b 100644 --- a/addons/document_webdav/nodes.py +++ b/addons/document_webdav/nodes.py @@ -67,7 +67,7 @@ class node_acl_mixin(object): """ ret = par_class.get_dav_props(self, cr) if prop_model: - propobj = self.context._dirobj.pool.get(prop_model) + propobj = self.context._dirobj.pool[prop_model] uid = self.context.uid ctx = self.context.context.copy() ctx.update(self.dctx) @@ -105,7 +105,7 @@ class node_acl_mixin(object): if ret is not None: return ret if prop_model: - propobj = self.context._dirobj.pool.get(prop_model) + propobj = self.context._dirobj.pool[prop_model] uid = self.context.uid ctx = self.context.context.copy() ctx.update(self.dctx) @@ -151,7 +151,7 @@ class node_acl_mixin(object): assert prop_model assert res_id assert isinstance(lock_data, dict), '%r' % lock_data - propobj = self.context._dirobj.pool.get(prop_model) + propobj = self.context._dirobj.pool[prop_model] uid = self.context.uid ctx = self.context.context.copy() ctx.update(self.dctx) diff --git a/addons/edi/models/edi.py b/addons/edi/models/edi.py index 239b543e194..bfd59dae15a 100644 --- a/addons/edi/models/edi.py +++ b/addons/edi/models/edi.py @@ -106,8 +106,8 @@ class edi(osv.AbstractModel): """ edi_list = [] for record in records: - record_model_obj = self.pool.get(record._name) - edi_list += record_model_obj.edi_export(cr, uid, [record], context=context) + record_model = record._model + edi_list += record_model.edi_export(cr, uid, [record], context=context) return self.serialize(edi_list) def load_edi(self, cr, uid, edi_documents, context=None): @@ -131,9 +131,9 @@ class edi(osv.AbstractModel): "You can install it by connecting as the administrator and opening the configuration assistant.")%(module,)) model = edi_document.get('__import_model') or edi_document.get('__model') assert model, 'a `__model` or `__import_model` attribute is required in each EDI document.' - model_obj = self.pool.get(model) - assert model_obj, 'model `%s` cannot be found, despite module `%s` being available - '\ + assert model in self.pool, 'model `%s` cannot be found, despite module `%s` being available - '\ 'this EDI document seems invalid or unsupported.' % (model,module) + model_obj = self.pool[model] record_id = model_obj.edi_import(cr, uid, edi_document, context=context) record_action = model_obj._edi_record_display_action(cr, uid, record_id, context=context) res.append((model, record_id, record_action)) @@ -400,7 +400,7 @@ class EDIMixin(object): return results def _edi_get_object_by_name(self, cr, uid, name, model_name, context=None): - model = self.pool.get(model_name) + model = self.pool[model_name] search_results = model.name_search(cr, uid, name, operator='=', context=context) if len(search_results) == 1: return model.browse(cr, uid, search_results[0][0], context=context) @@ -483,7 +483,7 @@ class EDIMixin(object): ('name','=',ext_id), ('module','in',modules)]) if data_ids: - model = self.pool.get(model) + model = self.pool[model] data = ir_model_data.browse(cr, uid, data_ids[0], context=context) if model.exists(cr, uid, [data.res_id]): return model.browse(cr, uid, data.res_id, context=context) @@ -519,7 +519,7 @@ class EDIMixin(object): _logger.debug("%s: Importing EDI relationship [%r,%r] - name not found, creating it.", self._name, external_id, value) # also need_new_ext_id here, but already been set above - model = self.pool.get(model) + model = self.pool[model] res_id, _ = model.name_create(cr, uid, value, context=context) target = model.browse(cr, uid, res_id, context=context) else: @@ -592,7 +592,7 @@ class EDIMixin(object): # process o2m values, connecting them to their parent on-the-fly for o2m_field, o2m_value in o2m_todo.iteritems(): field = self._all_columns[o2m_field].column - dest_model = self.pool.get(field._obj) + dest_model = self.pool[field._obj] for o2m_line in o2m_value: # link to parent record: expects an (ext_id, name) pair o2m_line[field._fields_id] = (ext_id_members['full'], record_display[1]) diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py index ed76b69901c..5993252b72b 100644 --- a/addons/email_template/email_template.py +++ b/addons/email_template/email_template.py @@ -89,7 +89,7 @@ class email_template(osv.osv): template = tools.ustr(template) record = None if res_id: - record = self.pool.get(model).browse(cr, uid, res_id, context=context) + record = self.pool[model].browse(cr, uid, res_id, context=context) user = self.pool.get('res.users').browse(cr, uid, uid, context=context) variables = { 'object': record, diff --git a/addons/email_template/wizard/email_template_preview.py b/addons/email_template/wizard/email_template_preview.py index 1cfcf048691..f24c4f13962 100644 --- a/addons/email_template/wizard/email_template_preview.py +++ b/addons/email_template/wizard/email_template_preview.py @@ -40,7 +40,7 @@ class email_template_preview(osv.osv_memory): email_template = self.pool.get('email.template') template = email_template.browse(cr, uid, int(template_id), context=context) template_object = template.model_id - model = self.pool.get(template_object.model) + model = self.pool[template_object.model] record_ids = model.search(cr, uid, [], 0, 10, 'id', context=context) default_id = context.get('default_res_id') diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py index cdb14de1de3..3b060e199c0 100644 --- a/addons/google_docs/google_docs.py +++ b/addons/google_docs/google_docs.py @@ -155,7 +155,7 @@ class google_docs_ir_attachment(osv.osv): pool_ir_attachment = self.pool.get('ir.attachment') pool_gdoc_config = self.pool.get('google.docs.config') name_gdocs = '' - model_fields_dic = self.pool.get(res_model).read(cr, uid, res_id, [], context=context) + model_fields_dic = self.pool[res_model].read(cr, uid, res_id, [], context=context) # check if a model is configured with a template google_docs_config = pool_gdoc_config.search(cr, uid, [('model_id', '=', res_model)], context=context) diff --git a/addons/hr_payroll/hr_payroll.py b/addons/hr_payroll/hr_payroll.py index 06af3054b68..a3d3da04f0e 100644 --- a/addons/hr_payroll/hr_payroll.py +++ b/addons/hr_payroll/hr_payroll.py @@ -202,8 +202,8 @@ class one2many_mod2(fields.one2many): res = {} for id in ids: res[id] = [] - ids2 = obj.pool.get(self._obj).search(cr, user, [(self._fields_id,'in',ids), ('appears_on_payslip', '=', True)], limit=self._limit) - for r in obj.pool.get(self._obj)._read_flat(cr, user, ids2, [self._fields_id], context=context, load='_classic_write'): + ids2 = obj.pool[self._obj].search(cr, user, [(self._fields_id,'in',ids), ('appears_on_payslip', '=', True)], limit=self._limit) + for r in obj.pool[self._obj]._read_flat(cr, user, ids2, [self._fields_id], context=context, load='_classic_write'): res[r[self._fields_id]].append( r['id'] ) return res diff --git a/addons/l10n_be_coda/wizard/account_coda_import.py b/addons/l10n_be_coda/wizard/account_coda_import.py index 213040d6204..9465980629c 100644 --- a/addons/l10n_be_coda/wizard/account_coda_import.py +++ b/addons/l10n_be_coda/wizard/account_coda_import.py @@ -389,7 +389,7 @@ class account_coda_import(osv.osv_memory): if statement['coda_note'] != '': self.pool.get('account.bank.statement').write(cr, uid, [statement['id']], {'coda_note': statement['coda_note']}, context=context) model, action_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account', 'action_bank_statement_tree') - action = self.pool.get(model).browse(cr, uid, action_id, context=context) + action = self.pool[model].browse(cr, uid, action_id, context=context) return { 'name': action.name, 'view_type': action.view_type, diff --git a/addons/l10n_multilang/l10n_multilang.py b/addons/l10n_multilang/l10n_multilang.py index 9596b292ff3..b94ff303eae 100644 --- a/addons/l10n_multilang/l10n_multilang.py +++ b/addons/l10n_multilang/l10n_multilang.py @@ -78,7 +78,7 @@ class wizard_multi_charts_accounts(osv.osv_memory): else: #replace the value in the destination object only if it's the user lang if context.get('lang') == lang: - self.pool.get(out_obj._name).write(cr, uid, out_ids[j], {in_field: value[in_id]}) + self.pool[out_obj._name].write(cr, uid, out_ids[j], {in_field: value[in_id]}) else: _logger.info('Language: %s. Translation from template: there is no translation available for %s!' %(lang, src[in_id]))#out_obj._name)) return True diff --git a/addons/mail/mail_alias.py b/addons/mail/mail_alias.py index d5e3b675b56..dab6621824c 100644 --- a/addons/mail/mail_alias.py +++ b/addons/mail/mail_alias.py @@ -159,7 +159,7 @@ class mail_alias(osv.Model): registry = RegistryManager.get(cr.dbname) mail_alias = registry.get('mail.alias') - child_class_model = registry.get(child_model_name) + child_class_model = registry[child_model_name] no_alias_ids = child_class_model.search(cr, SUPERUSER_ID, [('alias_id', '=', False)], context={'active_test':False}) # Use read() not browse(), to avoid prefetching uninitialized inherited fields for obj_data in child_class_model.read(cr, SUPERUSER_ID, no_alias_ids, [alias_key]): diff --git a/addons/mail/mail_mail.py b/addons/mail/mail_mail.py index c5a7e227465..8bcc8b0a91c 100644 --- a/addons/mail/mail_mail.py +++ b/addons/mail/mail_mail.py @@ -108,8 +108,8 @@ class mail_mail(osv.Model): res_id = message.res_id # if model and res_id: try to use ``message_get_reply_to`` that returns the document alias - if model and res_id and hasattr(self.pool.get(model), 'message_get_reply_to'): - email_reply_to = self.pool.get(model).message_get_reply_to(cr, uid, [res_id], context=context)[0] + if model and res_id and hasattr(self.pool[model], 'message_get_reply_to'): + email_reply_to = self.pool[model].message_get_reply_to(cr, uid, [res_id], context=context)[0] # no alias reply_to -> reply_to will be the email_from, only the email part if not email_reply_to and values.get('email_from'): emails = tools.email_split(values.get('email_from')) @@ -118,7 +118,7 @@ class mail_mail(osv.Model): # format 'Document name ' if email_reply_to and model and res_id: - document_name = self.pool.get(model).name_get(cr, SUPERUSER_ID, [res_id], context=context)[0] + document_name = self.pool[model].name_get(cr, SUPERUSER_ID, [res_id], context=context)[0] if document_name: # sanitize document name sanitized_doc_name = re.sub(r'[^\w+.]+', '-', document_name[1]) @@ -217,7 +217,7 @@ class mail_mail(osv.Model): and self.check_access_rights(cr, partner.user_ids[0].id, 'read', raise_exception=False): related_user = partner.user_ids[0] try: - self.pool.get(mail.model).check_access_rule(cr, related_user.id, [mail.res_id], 'read', context=context) + self.pool[mail.model].check_access_rule(cr, related_user.id, [mail.res_id], 'read', context=context) base_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url') # the parameters to encode for the query and fragment part of url query = {'db': cr.dbname} diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index 8442891f3f9..dd5ebc8b48b 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -76,9 +76,9 @@ class mail_message(osv.Model): # TDE note: regroup by model/ids, to have less queries to perform result = dict.fromkeys(ids, False) for message in self.read(cr, uid, ids, ['model', 'res_id'], context=context): - if not message.get('model') or not message.get('res_id') or not self.pool.get(message['model']): + if not message.get('model') or not message.get('res_id') or message['model'] not in self.pool: continue - result[message['id']] = self.pool.get(message['model']).name_get(cr, SUPERUSER_ID, [message['res_id']], context=context)[0][1] + result[message['id']] = self.pool[message['model']].name_get(cr, SUPERUSER_ID, [message['res_id']], context=context)[0][1] return result def _get_to_read(self, cr, uid, ids, name, arg, context=None): @@ -563,7 +563,7 @@ class mail_message(osv.Model): def _find_allowed_model_wise(self, cr, uid, doc_model, doc_dict, context=None): doc_ids = doc_dict.keys() - allowed_doc_ids = self.pool.get(doc_model).search(cr, uid, [('id', 'in', doc_ids)], context=context) + allowed_doc_ids = self.pool[doc_model].search(cr, uid, [('id', 'in', doc_ids)], context=context) return set([message_id for allowed_doc_id in allowed_doc_ids for message_id in doc_dict[allowed_doc_id]]) def _find_allowed_doc_ids(self, cr, uid, model_ids, context=None): @@ -711,7 +711,7 @@ class mail_message(osv.Model): model_record_ids = _generate_model_record_ids(message_values, other_ids) document_related_ids = [] for model, doc_dict in model_record_ids.items(): - model_obj = self.pool.get(model) + model_obj = self.pool[model] mids = model_obj.exists(cr, uid, doc_dict.keys()) if operation in ['create', 'write', 'unlink']: model_obj.check_access_rights(cr, uid, 'write') diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 778d7d53bd1..3c81af924e5 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -409,7 +409,7 @@ class mail_thread(osv.AbstractModel): """ Used by the plugin addon, based for plugin_outlook and others. """ ret_dict = {} for model_name in self.pool.obj_list(): - model = self.pool.get(model_name) + model = self.pool[model_name] if 'mail.thread' in getattr(model, '_inherit', []): ret_dict[model_name] = model._description return ret_dict @@ -478,12 +478,12 @@ class mail_thread(osv.AbstractModel): if ref_match: thread_id = int(ref_match.group(1)) model = ref_match.group(2) or model - model_pool = self.pool.get(model) - if thread_id and model and model_pool and model_pool.exists(cr, uid, thread_id) \ - and hasattr(model_pool, 'message_update'): - _logger.debug('Routing mail with Message-Id %s: direct reply to model: %s, thread_id: %s, custom_values: %s, uid: %s', - message_id, model, thread_id, custom_values, uid) - return [(model, thread_id, custom_values, uid)] + if thread_id and model in self.pool: + model_obj = self.pool[model] + if model_obj.exists(cr, uid, thread_id) and hasattr(model_obj, 'message_update'): + _logger.debug('Routing mail with Message-Id %s: direct reply to model: %s, thread_id: %s, custom_values: %s, uid: %s', + message_id, model, thread_id, custom_values, uid) + return [(model, thread_id, custom_values, uid)] # Verify whether this is a reply to a private message if in_reply_to: @@ -528,7 +528,7 @@ class mail_thread(osv.AbstractModel): return routes # 3. Fallback to the provided parameters, if they work - model_pool = self.pool.get(model) + model_pool = self.pool[model] if not thread_id: # Legacy: fallback to matching [ID] in the Subject match = tools.res_re.search(decode_header(message, 'Subject')) @@ -611,7 +611,7 @@ class mail_thread(osv.AbstractModel): if self._name == 'mail.thread': context.update({'thread_model': model}) if model: - model_pool = self.pool.get(model) + model_pool = self.pool[model] 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) @@ -665,7 +665,7 @@ class mail_thread(osv.AbstractModel): if isinstance(custom_values, dict): data = custom_values.copy() model = context.get('thread_model') or self._name - model_pool = self.pool.get(model) + model_pool = self.pool[model] fields = model_pool.fields_get(cr, uid, context=context) if 'name' in fields and not data.get('name'): data['name'] = msg_dict.get('subject', '') @@ -942,7 +942,7 @@ class mail_thread(osv.AbstractModel): model = context.get('thread_model', self._name) if self._name == 'mail.thread' else self._name if model != self._name: del context['thread_model'] - return self.pool.get(model).message_post(cr, uid, thread_id, body=body, subject=subject, type=type, subtype=subtype, parent_id=parent_id, attachments=attachments, context=context, content_subtype=content_subtype, **kwargs) + return self.pool[model].message_post(cr, uid, thread_id, body=body, subject=subject, type=type, subtype=subtype, parent_id=parent_id, attachments=attachments, context=context, content_subtype=content_subtype, **kwargs) # 0: Parse email-from, try to find a better author_id based on document's followers for incoming emails email_from = kwargs.get('email_from') diff --git a/addons/mail/wizard/invite.py b/addons/mail/wizard/invite.py index 2eb48f3d998..4ff6584d789 100644 --- a/addons/mail/wizard/invite.py +++ b/addons/mail/wizard/invite.py @@ -37,10 +37,10 @@ class invite_wizard(osv.osv_memory): res_id = result.get('res_id') if 'message' in fields and model and res_id: ir_model = self.pool.get('ir.model') - model_ids = ir_model.search(cr, uid, [('model', '=', self.pool.get(model)._name)], context=context) + model_ids = ir_model.search(cr, uid, [('model', '=', self.pool[model]._name)], context=context) model_name = ir_model.name_get(cr, uid, model_ids, context=context)[0][1] - document_name = self.pool.get(model).name_get(cr, uid, [res_id], context=context)[0][1] + document_name = self.pool[model].name_get(cr, uid, [res_id], context=context)[0][1] message = _('

          Hello,

          %s invited you to follow %s document: %s.

          ') % (user_name, model_name, document_name) result['message'] = message elif 'message' in fields: @@ -63,7 +63,7 @@ class invite_wizard(osv.osv_memory): def add_followers(self, cr, uid, ids, context=None): for wizard in self.browse(cr, uid, ids, context=context): - model_obj = self.pool.get(wizard.res_model) + model_obj = self.pool[wizard.res_model] document = model_obj.browse(cr, uid, wizard.res_id, context=context) # filter partner_ids to get the new followers, to avoid sending email to already following partners diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py index 66e7149ac6d..b259135b7b7 100644 --- a/addons/mail/wizard/mail_compose_message.py +++ b/addons/mail/wizard/mail_compose_message.py @@ -174,7 +174,7 @@ class mail_compose_message(osv.TransientModel): related to. :param int res_id: id of the document record this mail is related to """ - doc_name_get = self.pool.get(model).name_get(cr, uid, [res_id], context=context) + doc_name_get = self.pool[model].name_get(cr, uid, [res_id], context=context) if doc_name_get: record_name = doc_name_get[0][1] else: @@ -231,7 +231,7 @@ class mail_compose_message(osv.TransientModel): mass_mail_mode = wizard.composition_mode == 'mass_mail' if mass_mail_mode: # mass mail: avoid any auto subscription because this could lead to people being follower of plenty of documents context['mail_create_nosubscribe'] = True - active_model_pool = self.pool.get(wizard.model if wizard.model else 'mail.thread') + active_model_pool = self.pool[wizard.model if wizard.model else 'mail.thread'] # wizard works in batch mode: [res_id] or active_ids res_ids = active_ids if mass_mail_mode and wizard.model and active_ids else [wizard.res_id] @@ -313,7 +313,7 @@ class mail_compose_message(osv.TransientModel): exp = str(match.group()[2:-1]).strip() result = eval(exp, { 'user': self.pool.get('res.users').browse(cr, uid, uid, context=context), - 'object': self.pool.get(model).browse(cr, uid, res_id, context=context), + 'object': self.pool[model].browse(cr, uid, res_id, context=context), 'context': dict(context), # copy context to prevent side-effects of eval }) return result and tools.ustr(result) or '' diff --git a/addons/marketing_campaign/marketing_campaign.py b/addons/marketing_campaign/marketing_campaign.py index dfa13259383..4aa340d7a14 100644 --- a/addons/marketing_campaign/marketing_campaign.py +++ b/addons/marketing_campaign/marketing_campaign.py @@ -165,7 +165,7 @@ Normal - the campaign runs normally and automatically sends all emails and repor # dead code def signal(self, cr, uid, model, res_id, signal, run_existing=True, context=None): - record = self.pool.get(model).browse(cr, uid, res_id, context) + record = self.pool[model].browse(cr, uid, res_id, context) return self._signal(cr, uid, record, signal, run_existing, context) #dead code @@ -228,7 +228,7 @@ Normal - the campaign runs normally and automatically sends all emails and repor if unique_value: if unique_field.ttype == 'many2one': unique_value = unique_value.id - similar_res_ids = self.pool.get(campaign_rec.object_id.model).search(cr, uid, + similar_res_ids = self.pool[campaign_rec.object_id.model].search(cr, uid, [(unique_field.name, '=', unique_value)], context=context) if similar_res_ids: duplicate_workitem_domain = [('res_id','in', similar_res_ids), @@ -349,7 +349,7 @@ class marketing_campaign_segment(osv.osv): act_ids = self.pool.get('marketing.campaign.activity').search(cr, uid, [('start', '=', True), ('campaign_id', '=', segment.campaign_id.id)], context=context) - model_obj = self.pool.get(segment.object_id.model) + model_obj = self.pool[segment.object_id.model] criteria = [] if segment.sync_last_date and segment.sync_mode != 'all': criteria += [(segment.sync_mode, '>', segment.sync_last_date)] @@ -594,7 +594,7 @@ class marketing_campaign_workitem(osv.osv): if not wi.res_id: continue - proxy = self.pool.get(wi.object_id.model) + proxy = self.pool[wi.object_id.model] if not proxy.exists(cr, uid, [wi.res_id]): continue ng = proxy.name_get(cr, uid, [wi.res_id], context=context) @@ -628,7 +628,7 @@ class marketing_campaign_workitem(osv.osv): for id, res_id, model in res: workitem_map.setdefault(model,{}).setdefault(res_id,set()).add(id) for model, id_map in workitem_map.iteritems(): - model_pool = self.pool.get(model) + model_pool = self.pool[model] condition_name[0] = model_pool._rec_name condition = [('id', 'in', id_map.keys()), condition_name] for res_id in model_pool.search(cr, uid, condition, context=context): @@ -676,7 +676,7 @@ class marketing_campaign_workitem(osv.osv): return False activity = workitem.activity_id - proxy = self.pool.get(workitem.object_id.model) + proxy = self.pool[workitem.object_id.model] object_id = proxy.browse(cr, uid, workitem.res_id, context=context) eval_context = { diff --git a/addons/pad/pad.py b/addons/pad/pad.py index 90f5354054c..4cd9e91b76e 100644 --- a/addons/pad/pad.py +++ b/addons/pad/pad.py @@ -42,7 +42,7 @@ class pad_common(osv.osv_memory): myPad.createPad(path) #get attr on the field model - model = self.pool.get(context["model"]) + model = self.pool[context["model"]] field = model._all_columns[context['field_name']] real_field = field.column.pad_content_field diff --git a/addons/plugin/plugin_handler.py b/addons/plugin/plugin_handler.py index 0664af1c92e..b4b5064f2b1 100644 --- a/addons/plugin/plugin_handler.py +++ b/addons/plugin/plugin_handler.py @@ -57,7 +57,7 @@ class plugin_handler(osv.osv_memory): res_id = msg.res_id model = msg.model url = self._make_url(cr, uid, res_id, model) - name = self.pool.get(model).name_get(cr, uid, [res_id])[0][1] + name = self.pool[model].name_get(cr, uid, [res_id])[0][1] return (model,res_id, url,name) def document_type(self, cr, uid, context=None): @@ -81,7 +81,7 @@ class plugin_handler(osv.osv_memory): @return : the result of name_search a list of tuple [(id, 'name')] """ - return self.pool.get(model).name_search(cr, uid, name) + return self.pool[model].name_search(cr, uid, name) def push_message(self, cr, uid, model, email, res_id=0): """ @@ -91,7 +91,7 @@ class plugin_handler(osv.osv_memory): @return Dictionary which contain model , url and resource id. """ mail_message = self.pool.get('mail.message') - model_obj = self.pool.get(model) + model_obj = self.pool[model] msg = self.pool.get('mail.thread').message_parse(cr, uid, email) message_id = msg.get('message-id') mail_ids = mail_message.search(cr, uid, [('message_id','=',message_id),('res_id','=',res_id),('model','=',model)]) diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 7e8487b2b2b..5e680833dd6 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -1279,7 +1279,7 @@ class ean_wizard(osv.osv_memory): ean13 = openerp.addons.product.product.sanitize_ean13(r.ean13_pattern) m = context.get('active_model') m_id = context.get('active_id') - self.pool.get(m).write(cr,uid,[m_id],{'ean13':ean13}) + self.pool[m].write(cr,uid,[m_id],{'ean13':ean13}) return { 'type' : 'ir.actions.act_window_close' } class product_product(osv.osv): diff --git a/addons/point_of_sale/wizard/pos_box.py b/addons/point_of_sale/wizard/pos_box.py index 776d962a3a8..471153695f4 100644 --- a/addons/point_of_sale/wizard/pos_box.py +++ b/addons/point_of_sale/wizard/pos_box.py @@ -16,7 +16,7 @@ class PosBox(CashBox): active_ids = context.get('active_ids', []) or [] if active_model == 'pos.session': - records = self.pool.get(active_model).browse(cr, uid, active_ids, context=context) + records = self.pool[active_model].browse(cr, uid, active_ids, context=context) bank_statements = [record.cash_register_id for record in records if record.cash_register_id] if not bank_statements: @@ -41,7 +41,7 @@ class PosBoxIn(PosBox): active_ids = context.get('active_ids', []) or [] if active_model == 'pos.session': - session = self.pool.get(active_model).browse(cr, uid, active_ids, context=context)[0] + session = self.pool[active_model].browse(cr, uid, active_ids, context=context)[0] values['ref'] = session.name return values @@ -57,7 +57,7 @@ class PosBoxOut(PosBox): active_ids = context.get('active_ids', []) or [] if active_model == 'pos.session': - session = self.pool.get(active_model).browse(cr, uid, active_ids, context=context)[0] + session = self.pool[active_model].browse(cr, uid, active_ids, context=context)[0] values['ref'] = session.name return values diff --git a/addons/portal/mail_mail.py b/addons/portal/mail_mail.py index 3810ddd2540..bc982671bfe 100644 --- a/addons/portal/mail_mail.py +++ b/addons/portal/mail_mail.py @@ -45,7 +45,7 @@ class mail_mail(osv.Model): and self.check_access_rights(cr, partner.user_ids[0].id, 'read', raise_exception=False): related_user = partner.user_ids[0] try: - self.pool.get(mail.model).check_access_rule(cr, related_user.id, [mail.res_id], 'read', context=context) + self.pool[mail.model].check_access_rule(cr, related_user.id, [mail.res_id], 'read', context=context) url = partner_obj._get_signup_url_for_action(cr, related_user.id, [partner.id], action='', res_id=mail.res_id, model=mail.model, context=context)[partner.id] text = _("""Access this document directly in OpenERP""") % url except except_orm, e: diff --git a/addons/project/wizard/project_task_delegate.py b/addons/project/wizard/project_task_delegate.py index bb15c62db1f..bbea5ce2d8f 100644 --- a/addons/project/wizard/project_task_delegate.py +++ b/addons/project/wizard/project_task_delegate.py @@ -125,7 +125,7 @@ class project_task_delegate(osv.osv_memory): action_model, action_id = models_data.get_object_reference(cr, uid, 'project', 'action_view_task') view_model, task_view_form_id = models_data.get_object_reference(cr, uid, 'project', 'view_task_form2') view_model, task_view_tree_id = models_data.get_object_reference(cr, uid, 'project', 'view_task_tree2') - action = self.pool.get(action_model).read(cr, uid, action_id, context=context) + action = self.pool[action_model].read(cr, uid, action_id, context=context) action['res_id'] = delegated_tasks[task_id] action['view_id'] = False action['views'] = [(task_view_form_id, 'form'), (task_view_tree_id, 'tree')] diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 6258a18e399..7d73b0169ed 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -371,7 +371,7 @@ class purchase_order(osv.osv): pick_ids += [picking.id for picking in po.picking_ids] action_model, action_id = tuple(mod_obj.get_object_reference(cr, uid, 'stock', 'action_picking_tree4')) - action = self.pool.get(action_model).read(cr, uid, action_id, context=context) + action = self.pool[action_model].read(cr, uid, action_id, context=context) ctx = eval(action['context']) ctx.update({ 'search_default_purchase_id': ids[0] diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py index 429a1dc2f08..813a8a80e88 100644 --- a/addons/share/wizard/share_wizard.py +++ b/addons/share/wizard/share_wizard.py @@ -205,7 +205,7 @@ class share_wizard(osv.TransientModel): raise osv.except_osv(_('No email address configured'), _('You must configure your email address in the user preferences before using the Share button.')) model, res_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'share', 'action_share_wizard_step1') - action = self.pool.get(model).read(cr, uid, res_id, context=context) + action = self.pool[model].read(cr, uid, res_id, context=context) action['res_id'] = ids[0] action.pop('context', '') return action @@ -404,7 +404,7 @@ class share_wizard(osv.TransientModel): local_rel_fields = [] models = [x[1].model for x in relation_fields] model_obj = self.pool.get('ir.model') - model_osv = self.pool.get(model.model) + model_osv = self.pool[model.model] for colinfo in model_osv._all_columns.itervalues(): coldef = colinfo.column coltype = coldef._type @@ -412,7 +412,7 @@ class share_wizard(osv.TransientModel): if coltype in ttypes and colinfo.column._obj not in models: relation_model_id = model_obj.search(cr, UID_ROOT, [('model','=',coldef._obj)])[0] relation_model_browse = model_obj.browse(cr, UID_ROOT, relation_model_id, context=context) - relation_osv = self.pool.get(coldef._obj) + relation_osv = self.pool[coldef._obj] if coltype == 'one2many': # don't record reverse path if it's not a real m2o (that happens, but rarely) dest_model_ci = relation_osv._all_columns @@ -422,7 +422,7 @@ class share_wizard(osv.TransientModel): local_rel_fields.append((relation_field, relation_model_browse)) for parent in relation_osv._inherits: if parent not in models: - parent_model = self.pool.get(parent) + parent_model = self.pool[parent] parent_colinfos = parent_model._all_columns parent_model_browse = model_obj.browse(cr, UID_ROOT, model_obj.search(cr, UID_ROOT, [('model','=',parent)]))[0] @@ -458,7 +458,7 @@ class share_wizard(osv.TransientModel): """ # obj0 class and its parents obj0 = [(None, model)] - model_obj = self.pool.get(model.model) + model_obj = self.pool[model.model] ir_model_obj = self.pool.get('ir.model') for parent in model_obj._inherits: parent_model_browse = ir_model_obj.browse(cr, UID_ROOT, @@ -777,7 +777,7 @@ class share_wizard(osv.TransientModel): # Record id not found: issue if res_id <= 0: raise osv.except_osv(_('Record id not found'), _('The share engine has not been able to fetch a record_id for your invitation.')) - self.pool.get(model.model).message_subscribe(cr, uid, [res_id], new_ids + existing_ids, context=context) + self.pool[model.model].message_subscribe(cr, uid, [res_id], new_ids + existing_ids, context=context) # self.send_invite_email(cr, uid, wizard_data, context=context) # self.send_invite_note(cr, uid, model.model, res_id, wizard_data, context=context) @@ -823,7 +823,7 @@ class share_wizard(osv.TransientModel): elif tmp_idx == len(wizard_data.result_line_ids)-2: body += ' and' body += '.' - return self.pool.get(model_name).message_post(cr, uid, [res_id], body=body, context=context) + return self.pool[model_name].message_post(cr, uid, [res_id], body=body, context=context) def send_invite_email(self, cr, uid, wizard_data, context=None): # TDE Note: not updated because will disappear diff --git a/addons/stock/wizard/stock_invoice_onshipping.py b/addons/stock/wizard/stock_invoice_onshipping.py index 7c960c5e617..d742ede366d 100644 --- a/addons/stock/wizard/stock_invoice_onshipping.py +++ b/addons/stock/wizard/stock_invoice_onshipping.py @@ -39,7 +39,7 @@ class stock_invoice_onshipping(osv.osv_memory): if not model or 'stock.picking' not in model: return [] - model_pool = self.pool.get(model) + model_pool = self.pool[model] journal_obj = self.pool.get('account.journal') res_ids = context and context.get('active_ids', []) vals = [] @@ -119,7 +119,7 @@ class stock_invoice_onshipping(osv.osv_memory): elif inv_type == "in_refund": action_model,action_id = data_pool.get_object_reference(cr, uid, 'account', "action_invoice_tree4") if action_model: - action_pool = self.pool.get(action_model) + action_pool = self.pool[action_model] action = action_pool.read(cr, uid, action_id, context=context) action['domain'] = "[('id','in', ["+','.join(map(str,invoice_ids))+"])]" return action diff --git a/addons/subscription/subscription.py b/addons/subscription/subscription.py index 92bde135bc6..356ab78aadb 100644 --- a/addons/subscription/subscription.py +++ b/addons/subscription/subscription.py @@ -115,7 +115,7 @@ class subscription_subscription(osv.osv): try: (model_name, id) = row['doc_source'].split(',') id = int(id) - model = self.pool.get(model_name) + model = self.pool[model_name] except: raise osv.except_osv(_('Wrong Source Document !'), _('Please provide another source document.\nThis one does not exist !')) @@ -136,7 +136,7 @@ class subscription_subscription(osv.osv): # the subscription is over and we mark it as being done if remaining == 1: state = 'done' - id = self.pool.get(model_name).copy(cr, uid, id, default, context) + id = self.pool[model_name].copy(cr, uid, id, default, context) self.pool.get('subscription.subscription.history').create(cr, uid, {'subscription_id': row['id'], 'date':time.strftime('%Y-%m-%d %H:%M:%S'), 'document_id': model_name+','+str(id)}) self.write(cr, uid, [row['id']], {'state':state}) return True diff --git a/addons/survey/wizard/survey_answer.py b/addons/survey/wizard/survey_answer.py index 903937af441..a108388ac8e 100644 --- a/addons/survey/wizard/survey_answer.py +++ b/addons/survey/wizard/survey_answer.py @@ -402,9 +402,10 @@ class survey_question_wiz(osv.osv_memory): sur_response_obj.write(cr, uid, [sur_name_read.response], {'state' : 'done'}) # mark the survey request as done; call 'survey_req_done' on its actual model - survey_req_obj = self.pool.get(context.get('active_model')) - if survey_req_obj and hasattr(survey_req_obj, 'survey_req_done'): - survey_req_obj.survey_req_done(cr, uid, context.get('active_ids', []), context=context) + if context.get('active_model') in self.pool: + survey_req_obj = self.pool[context.get('active_model')] + if hasattr(survey_req_obj, 'survey_req_done'): + survey_req_obj.survey_req_done(cr, uid, context.get('active_ids', []), context=context) if sur_rec.send_response: survey_data = survey_obj.browse(cr, uid, survey_id) @@ -609,10 +610,10 @@ class survey_question_wiz(osv.osv_memory): survey_obj.write(cr, uid, survey_id, {'tot_start_survey' : sur_rec['tot_start_survey'] + 1}) if context.has_key('cur_id'): if context.has_key('request') and context.get('request',False): - self.pool.get(context.get('object',False)).write(cr, uid, [int(context.get('cur_id',False))], {'response' : response_id}) - self.pool.get(context.get('object',False)).survey_req_done(cr, uid, [int(context.get('cur_id'))], context) + self.pool[context.get('object')].write(cr, uid, [int(context.get('cur_id',False))], {'response' : response_id}) + self.pool[context.get('object')].survey_req_done(cr, uid, [int(context.get('cur_id'))], context) else: - self.pool.get(context.get('object',False)).write(cr, uid, [int(context.get('cur_id',False))], {'response' : response_id}) + self.pool[context.get('object')].write(cr, uid, [int(context.get('cur_id',False))], {'response' : response_id}) if sur_name_read['store_ans'] and type(safe_eval(sur_name_read['store_ans'])) == dict: sur_name_read['store_ans'] = safe_eval(sur_name_read['store_ans']) for key,val in sur_name_read['store_ans'].items(): From fb4b655139d5a00f605ea954dfee2df77e457778 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Fri, 29 Mar 2013 15:56:52 +0100 Subject: [PATCH 047/160] [FIX] mail: make some registry access more tolerant bzr revid: rco@openerp.com-20130329145652-ux8g42u063015zy9 --- addons/mail/mail_thread.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 3c81af924e5..b082a52a9a9 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -528,7 +528,7 @@ class mail_thread(osv.AbstractModel): return routes # 3. Fallback to the provided parameters, if they work - model_pool = self.pool[model] + model_pool = self.pool.get(model) if not thread_id: # Legacy: fallback to matching [ID] in the Subject match = tools.res_re.search(decode_header(message, 'Subject')) From dd044c571d02fe63cbe699366c06da4c6cd0c5c9 Mon Sep 17 00:00:00 2001 From: Cedric Snauwaert Date: Fri, 29 Mar 2013 16:02:01 +0100 Subject: [PATCH 048/160] [FIX]base_calendar: when running scheduler for alarm, the argument exdate should be a list and not a string bzr revid: csn@openerp.com-20130329150201-tlcflrzdrd8v3wiq --- addons/base_calendar/base_calendar.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py index ab0d8d324b4..25bfcac448c 100644 --- a/addons/base_calendar/base_calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -858,7 +858,9 @@ class calendar_alarm(osv.osv): if hasattr(res_obj, 'rrule') and res_obj.rrule: event_date = datetime.strptime(res_obj.date, '%Y-%m-%d %H:%M:%S') - recurrent_dates = get_recurrent_dates(res_obj.rrule, res_obj.exdate, event_date, res_obj.exrule) + #exdate is a string and we need a list + exdate = res_obj.exdate and res_obj.exdate.split(',') or [] + recurrent_dates = get_recurrent_dates(res_obj.rrule, exdate, event_date, res_obj.exrule) trigger_interval = alarm.trigger_interval if trigger_interval == 'days': From cec486a1615e1f20e30a9ceca36f0bd7cf6315d2 Mon Sep 17 00:00:00 2001 From: Cedric Snauwaert Date: Fri, 29 Mar 2013 16:59:38 +0100 Subject: [PATCH 049/160] [FIX]account_invoice: remove useless and ugly viol error message from the past bzr revid: csn@openerp.com-20130329155938-gezglrgphnndswnr --- addons/account/account_invoice.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index b4705245268..eb362455cd9 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -370,18 +370,6 @@ class account_invoice(osv.osv): context['view_id'] = view_id return context - def create(self, cr, uid, vals, context=None): - if context is None: - context = {} - try: - return super(account_invoice, self).create(cr, uid, vals, context) - except Exception, e: - if '"journal_id" viol' in e.args[0]: - raise orm.except_orm(_('Configuration Error!'), - _('There is no Sale/Purchase Journal(s) defined.')) - else: - raise orm.except_orm(_('Unknown Error!'), str(e)) - def invoice_print(self, cr, uid, ids, context=None): ''' This function prints the invoice and mark it as sent, so that we can see more easily the next step of the workflow From 9c6dc6ab99762ec19ba9b15c8d1a1fe75d5b6243 Mon Sep 17 00:00:00 2001 From: Jigar Amin Date: Mon, 1 Apr 2013 21:50:50 +0530 Subject: [PATCH 050/160] [USA] Imporved the lead time tooltip bzr revid: jam@tinyerp.com-20130401162050-m5cor1v1qhz4zxr2 --- addons/purchase/company.py | 5 ++--- addons/sale_stock/company.py | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/addons/purchase/company.py b/addons/purchase/company.py index e1337361cc7..307c0c43d70 100644 --- a/addons/purchase/company.py +++ b/addons/purchase/company.py @@ -25,9 +25,8 @@ class company(osv.osv): _inherit = 'res.company' _columns = { 'po_lead': fields.float('Purchase Lead Time', required=True, - help="This is the leads/security time for each purchase order."\ - "This number of days will be removed from what suppliers has promise to you"\ - "for company security purpose."), + help="This is the leads/security time for each purchase order. For company security purpose this"\ + "many days will be removed from the date what suppliers has promised to you."), } _defaults = { 'po_lead': lambda *a: 1.0, diff --git a/addons/sale_stock/company.py b/addons/sale_stock/company.py index 716300f4f52..cd07df3f744 100644 --- a/addons/sale_stock/company.py +++ b/addons/sale_stock/company.py @@ -25,8 +25,8 @@ class company(osv.osv): _inherit = 'res.company' _columns = { 'security_lead': fields.float('Security Days', required=True, - help="This number of days will be removed from what you promise to customers"\ - "for company security purpose to cope with any problems of procurement, final shipping, order negotiation etc."), + help="For company security purpose this many days will be removed from the date, what you have promised to customers,"\ + "to cope up with any problems of procurement, final shipping, order negotiation etc."), } _defaults = { 'security_lead': 0.0, From 0b5788eec7fce57ce755979113d3086a286be506 Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Tue, 2 Apr 2013 13:52:54 +0200 Subject: [PATCH 051/160] [FIX] Purchase ok (can be purchase) should only be used for domains bzr revid: jco@openerp.com-20130402115254-mtp113vyk4yhlmyb --- addons/procurement/schedulers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py index 3cb34d6bdff..6bc1b6fc0c2 100644 --- a/addons/procurement/schedulers.py +++ b/addons/procurement/schedulers.py @@ -158,7 +158,7 @@ class procurement_order(osv.osv): wf_service = netsvc.LocalService("workflow") warehouse_ids = warehouse_obj.search(cr, uid, [], context=context) - products_ids = product_obj.search(cr, uid, [('purchase_ok', '=', True)], order='id', context=context) + products_ids = product_obj.search(cr, uid, [], order='id', context=context) for warehouse in warehouse_obj.browse(cr, uid, warehouse_ids, context=context): context['warehouse'] = warehouse From a68f49c6f61499f713351168c3d44ee352df00ed Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Wed, 3 Apr 2013 11:07:58 +0200 Subject: [PATCH 052/160] [FIX] Replace analytic account with analytic distribution in multiple analytic accounts bzr revid: jco@openerp.com-20130403090758-kzb2jdtxt0y97mvg --- .../account_analytic_plans_view.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/addons/account_analytic_plans/account_analytic_plans_view.xml b/addons/account_analytic_plans/account_analytic_plans_view.xml index 3dcbcda6952..58d5f71793d 100644 --- a/addons/account_analytic_plans/account_analytic_plans_view.xml +++ b/addons/account_analytic_plans/account_analytic_plans_view.xml @@ -89,6 +89,18 @@ + + account.invoice.form.inherit + account.invoice + + 16 + + + + + + + account.analytic.plan.instance.form From 7d47c62f0c8eb0b37c0f4342e024e378da08341b Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Wed, 3 Apr 2013 12:21:04 +0200 Subject: [PATCH 053/160] [FIX] Only give analytic distribution on customer/supplier invoice if sale/purchase checked bzr revid: jco@openerp.com-20130403102104-udpyg90w8jrdg3lg --- .../account_analytic_plans_view.xml | 23 ------------------- .../purchase_analytic_plans_view.xml | 17 ++++++++++++++ .../sale_analytic_plans_view.xml | 14 +++++++++++ 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/addons/account_analytic_plans/account_analytic_plans_view.xml b/addons/account_analytic_plans/account_analytic_plans_view.xml index 58d5f71793d..19d6179e4eb 100644 --- a/addons/account_analytic_plans/account_analytic_plans_view.xml +++ b/addons/account_analytic_plans/account_analytic_plans_view.xml @@ -64,30 +64,7 @@ - - - account.invoice.line.form.inherit - account.invoice.line - - - - - - - - - - account.invoice.supplier.form.inherit - account.invoice - - 2 - - - - - - account.invoice.form.inherit diff --git a/addons/purchase_analytic_plans/purchase_analytic_plans_view.xml b/addons/purchase_analytic_plans/purchase_analytic_plans_view.xml index bcc67a2a215..d1db411f68c 100644 --- a/addons/purchase_analytic_plans/purchase_analytic_plans_view.xml +++ b/addons/purchase_analytic_plans/purchase_analytic_plans_view.xml @@ -38,5 +38,22 @@ + + + + + + + + account.invoice.supplier.form.inherit + account.invoice + + 2 + + + + + + diff --git a/addons/sale_analytic_plans/sale_analytic_plans_view.xml b/addons/sale_analytic_plans/sale_analytic_plans_view.xml index 6c788866520..3600d71b7d4 100644 --- a/addons/sale_analytic_plans/sale_analytic_plans_view.xml +++ b/addons/sale_analytic_plans/sale_analytic_plans_view.xml @@ -38,5 +38,19 @@ + + + + + account.invoice.line.form.inherit + account.invoice.line + + + + + + + + From 35b51a2efdd85f4089787243b5e13890d4835c56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 3 Apr 2013 16:51:51 +0200 Subject: [PATCH 054/160] [IMP] Chatter: improved footer of chatter messages: better differentiation of logged a note / send a message / system notification, with or without recipients. bzr revid: tde@openerp.com-20130403145151-nvpeqdpp937079iu --- addons/mail/mail_message.py | 1 + addons/mail/static/src/css/mail.css | 3 +++ addons/mail/static/src/js/mail.js | 1 + addons/mail/static/src/xml/mail.xml | 21 +++++++++++++++++---- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index a8fba3022e1..669b017a86f 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -366,6 +366,7 @@ class mail_message(osv.Model): return {'id': message.id, 'type': message.type, + 'subtype': message.subtype_id.name if message.subtype_id else False, 'body': body_html, 'model': message.model, 'res_id': message.res_id, diff --git a/addons/mail/static/src/css/mail.css b/addons/mail/static/src/css/mail.css index 77dfb806f77..a3d8dca6490 100644 --- a/addons/mail/static/src/css/mail.css +++ b/addons/mail/static/src/css/mail.css @@ -57,6 +57,9 @@ .openerp .oe_mail .oe_msg.oe_msg_nobody{ background: #F8F8F8; } +.openerp .oe_mail .oe_msg.oe_msg_notification{ + background: #F8F8F8; +} .openerp .oe_mail .oe_msg .oe_msg_left{ position: absolute; left:0; top: 0; bottom: 0; width: 40px; diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index f992a385c3e..cc34483c17b 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -217,6 +217,7 @@ openerp.mail = function (session) { this.res_id = datasets.res_id || this.context.default_res_id || false, this.parent_id = datasets.parent_id || false, this.type = datasets.type || false, + this.subtype = datasets.subtype || false, this.is_author = datasets.is_author || false, this.is_private = datasets.is_private || false, this.subject = datasets.subject || false, diff --git a/addons/mail/static/src/xml/mail.xml b/addons/mail/static/src/xml/mail.xml index db53a60cdbc..7e7d772397a 100644 --- a/addons/mail/static/src/xml/mail.xml +++ b/addons/mail/static/src/xml/mail.xml @@ -226,7 +226,7 @@ -
          +
          @@ -263,13 +263,23 @@ - + + updated document + + • + + + logged a note - + to + + nobody + - + @@ -279,6 +289,9 @@ and more + + notified + • • From b027b5d6920de566bf62c0ef1ff1ee4df1beed8b Mon Sep 17 00:00:00 2001 From: Cedric Snauwaert Date: Thu, 4 Apr 2013 11:14:01 +0200 Subject: [PATCH 055/160] [FIX]portal_stock: remove 2 useless ir rules since the model doesn't inherit mail.thread bzr revid: csn@openerp.com-20130404091401-f6l7h7lcw6t0kguz --- addons/portal_stock/security/portal_security.xml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/addons/portal_stock/security/portal_security.xml b/addons/portal_stock/security/portal_security.xml index 154a7fc9ddd..c5587453e40 100644 --- a/addons/portal_stock/security/portal_security.xml +++ b/addons/portal_stock/security/portal_security.xml @@ -17,19 +17,5 @@ - - Portal Personal Stock Moves - - [('message_follower_ids','in',[user.partner_id.id])] - - - - - Portal Personal Stock Warehouse Orderpoints - - [('message_follower_ids','in',[user.partner_id.id])] - - - From ef84d5c4216ec1fa999df50834f378fc47c0dd05 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 4 Apr 2013 11:21:34 +0200 Subject: [PATCH 056/160] [FIX] sale_stock,purchase: review help string + remove incorrect fallback to local TZ See also http://bugs.python.org/issue7229 bzr revid: odo@openerp.com-20130404092134-0zt7blbl1kt3p0lz --- addons/purchase/company.py | 9 ++++++--- addons/purchase/purchase.py | 31 +++++++++++++++---------------- addons/sale_stock/company.py | 9 ++++++--- addons/sale_stock/sale_stock.py | 31 +++++++++++++++---------------- 4 files changed, 42 insertions(+), 38 deletions(-) diff --git a/addons/purchase/company.py b/addons/purchase/company.py index 307c0c43d70..7a5d26a1b52 100644 --- a/addons/purchase/company.py +++ b/addons/purchase/company.py @@ -24,9 +24,12 @@ from openerp.osv import osv,fields class company(osv.osv): _inherit = 'res.company' _columns = { - 'po_lead': fields.float('Purchase Lead Time', required=True, - help="This is the leads/security time for each purchase order. For company security purpose this"\ - "many days will be removed from the date what suppliers has promised to you."), + 'po_lead': fields.float( + 'Purchase Lead Time', required=True, + help="Margin of error for supplier lead times. When the system"\ + "generates Purchase Orders for procuring products,"\ + "they will be scheduled that many days earlier "\ + "to cope with unexpected supplier delays."), } _defaults = { 'po_lead': lambda *a: 1.0, diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 1041b016fb3..3446d71c0e5 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -596,27 +596,26 @@ class purchase_order(osv.osv): return True def date_to_datetime(self, cr, uid, userdate, context=None): + """ Convert date values expressed in user's timezone to + server-side UTC timestamp, assuming a default arbitrary + time of 12:00 AM - because a time is needed. + + :param str userdate: date string in in user time zone + :return: UTC datetime string for server-side use """ - Function accepts date string assumed in client TZ and result is produced - in UTC timezone with 12:00 is assumed time to be sure, that system will - avoid tz date converstion issues. - e.g. Date 2013-03-26 in user tz will get 12:00 Hours and will then - get converted to UTC to avoid tz converstion. - userdate: date string in in user time zone. - return : the utc datetime string. - """ + # TODO: move to fields.datetime in server after 7.0 user_datetime = datetime.strptime(userdate, DEFAULT_SERVER_DATE_FORMAT) + relativedelta(hours=12.0) if context and context.get('tz'): - tz_name = context['tz'] + tz_name = context['tz'] else: tz_name = self.pool.get('res.users').read(cr, SUPERUSER_ID, uid, ['tz'])['tz'] - if not tz_name: - tz_name = time.tzname[time.daylight] - utc = pytz.timezone('UTC') - context_tz = pytz.timezone(tz_name) - local_timestamp = context_tz.localize(user_datetime, is_dst=False) - user_datetime = local_timestamp.astimezone(utc) - return user_datetime.strftime(DEFAULT_SERVER_DATETIME_FORMAT) + if tz_name: + utc = pytz.timezone('UTC') + context_tz = pytz.timezone(tz_name) + local_timestamp = context_tz.localize(user_datetime, is_dst=False) + user_datetime = local_timestamp.astimezone(utc) + return user_datetime.strftime(DEFAULT_SERVER_DATETIME_FORMAT) + return userdate def _prepare_order_picking(self, cr, uid, order, context=None): return { diff --git a/addons/sale_stock/company.py b/addons/sale_stock/company.py index cd07df3f744..eb2d644e57b 100644 --- a/addons/sale_stock/company.py +++ b/addons/sale_stock/company.py @@ -24,9 +24,12 @@ from openerp.osv import fields, osv class company(osv.osv): _inherit = 'res.company' _columns = { - 'security_lead': fields.float('Security Days', required=True, - help="For company security purpose this many days will be removed from the date, what you have promised to customers,"\ - "to cope up with any problems of procurement, final shipping, order negotiation etc."), + 'security_lead': fields.float( + 'Security Days', required=True, + help="Margin of error for dates promised to customers. "\ + "Products will be scheduled for procurement and delivery "\ + "that many days earlier than the actual promised date, to "\ + "cope with unexpected delays in the supply chain."), } _defaults = { 'security_lead': 0.0, diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py index 3fb41895d6e..a2246c78481 100644 --- a/addons/sale_stock/sale_stock.py +++ b/addons/sale_stock/sale_stock.py @@ -236,27 +236,26 @@ class sale_order(osv.osv): return res def date_to_datetime(self, cr, uid, userdate, context=None): + """ Convert date values expressed in user's timezone to + server-side UTC timestamp, assuming a default arbitrary + time of 12:00 AM - because a time is needed. + + :param str userdate: date string in in user time zone + :return: UTC datetime string for server-side use """ - Function accepts date string assumed in client TZ and result is produced - in UTC timezone with 12:00 is assumed time to be sure, that system will - avoid tz date converstion issues. - e.g. Date 2013-03-26 in user tz will get 12:00 Hours and will then - get converted to UTC to avoid tz converstion. - userdate: date string in in user time zone. - return : the utc datetime string. - """ + # TODO: move to fields.datetime in server after 7.0 user_datetime = datetime.strptime(userdate, DEFAULT_SERVER_DATE_FORMAT) + relativedelta(hours=12.0) if context and context.get('tz'): - tz_name = context['tz'] + tz_name = context['tz'] else: tz_name = self.pool.get('res.users').read(cr, SUPERUSER_ID, uid, ['tz'])['tz'] - if not tz_name: - tz_name = time.tzname[time.daylight] - utc = pytz.timezone('UTC') - context_tz = pytz.timezone(tz_name) - local_timestamp = context_tz.localize(user_datetime, is_dst=False) - user_datetime = local_timestamp.astimezone(utc) - return user_datetime.strftime(DEFAULT_SERVER_DATETIME_FORMAT) + if tz_name: + utc = pytz.timezone('UTC') + context_tz = pytz.timezone(tz_name) + local_timestamp = context_tz.localize(user_datetime, is_dst=False) + user_datetime = local_timestamp.astimezone(utc) + return user_datetime.strftime(DEFAULT_SERVER_DATETIME_FORMAT) + return userdate # if mode == 'finished': # returns True if all lines are done, False otherwise From 5b832d7738948d36d38774bc66d34069ffde68af Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 4 Apr 2013 14:31:54 +0200 Subject: [PATCH 057/160] [FIX] sale_stock: useless import due to previous commit + make sure test actually tests something, rather than x() == x() bzr revid: odo@openerp.com-20130404123154-xtq4idqnnlugv0ui --- addons/sale_stock/sale_stock.py | 1 - addons/sale_stock/test/picking_order_policy.yml | 4 +++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py index a2246c78481..d9d8755c887 100644 --- a/addons/sale_stock/sale_stock.py +++ b/addons/sale_stock/sale_stock.py @@ -26,7 +26,6 @@ from openerp.osv import fields, osv from openerp import netsvc from openerp.tools.translate import _ import pytz -import time from openerp import SUPERUSER_ID class sale_shop(osv.osv): diff --git a/addons/sale_stock/test/picking_order_policy.yml b/addons/sale_stock/test/picking_order_policy.yml index d4d598d10e9..720c79685fa 100644 --- a/addons/sale_stock/test/picking_order_policy.yml +++ b/addons/sale_stock/test/picking_order_policy.yml @@ -26,7 +26,9 @@ order = self.browse(cr, uid, ref("sale.sale_order_6")) for order_line in order.order_line: procurement = order_line.procurement_id - date_planned = self._get_date_planned(cr, uid, order, order_line, order.date_order, context=context) + sale_order_date = self.date_to_datetime(cr, uid, order.date_order, context) + date_planned = datetime.strptime(sale_order_date, DEFAULT_SERVER_DATETIME_FORMAT) + relativedelta(days=order_line.delay or 0.0) + date_planned = (date_planned - timedelta(days=order.company_id.security_lead)).strftime(DEFAULT_SERVER_DATETIME_FORMAT) assert procurement.date_planned == date_planned, "Scheduled date is not correspond." assert procurement.product_id.id == order_line.product_id.id, "Product is not correspond." assert procurement.product_qty == order_line.product_uom_qty, "Qty is not correspond." From 4bdd8252ba1c9c6e32686686f6e8282477380a0d Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Thu, 4 Apr 2013 17:14:51 +0200 Subject: [PATCH 058/160] [REF] sale_stock: removing of dead code and correction of documentation (process) linked to the invoicing after delivery of a sale order bzr revid: qdp-launchpad@openerp.com-20130404151451-7fesb178mpijlv29 --- addons/sale/sale.py | 3 +-- addons/sale_stock/process/sale_stock_process.xml | 13 +------------ addons/sale_stock/sale_stock.py | 5 ----- 3 files changed, 2 insertions(+), 19 deletions(-) diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 3655b3a8184..a6be2838171 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -212,8 +212,7 @@ class sale_order(osv.osv): 'order_policy': fields.selection([ ('manual', 'On Demand'), ], 'Create Invoice', required=True, readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, - help="""This field controls how invoice and delivery operations are synchronized. - - With 'Before Delivery', a draft invoice is created, and it must be paid before delivery."""), + help="""This field controls how invoice and delivery operations are synchronized."""), 'pricelist_id': fields.many2one('product.pricelist', 'Pricelist', required=True, readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, help="Pricelist for current sales order."), 'currency_id': fields.related('pricelist_id', 'currency_id', type="many2one", relation="res.currency", string="Currency", readonly=True, required=True), 'project_id': fields.many2one('account.analytic.account', 'Contract / Analytic', readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, help="The analytic account related to a sales order."), diff --git a/addons/sale_stock/process/sale_stock_process.xml b/addons/sale_stock/process/sale_stock_process.xml index 666f6ba6502..c10b34c8866 100644 --- a/addons/sale_stock/process/sale_stock_process.xml +++ b/addons/sale_stock/process/sale_stock_process.xml @@ -64,17 +64,6 @@ - - - - - - - - - @@ -106,7 +95,7 @@ - + diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py index 1b5ddefbe74..c286e6555c9 100644 --- a/addons/sale_stock/sale_stock.py +++ b/addons/sale_stock/sale_stock.py @@ -610,11 +610,6 @@ class sale_advance_payment_inv(osv.osv_memory): sale_line_obj = self.pool.get('sale.order.line') wizard = self.browse(cr, uid, [result], context) sale = sale_obj.browse(cr, uid, sale_id, context=context) - if sale.order_policy == 'postpaid': - raise osv.except_osv( - _('Error!'), - _("You cannot make an advance on a sales order \ - that is defined as 'Automatic Invoice after delivery'.")) # If invoice on picking: add the cost on the SO # If not, the advance will be deduced when generating the final invoice From 5585f21aa5405a9ca143e7e6c864e31f6099a034 Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Thu, 4 Apr 2013 17:54:37 +0200 Subject: [PATCH 059/160] [FIX] On cchange for sales person to change sales team in opportunity bzr revid: jco@openerp.com-20130404155437-a4d6mdi2y0r5nvc6 --- addons/crm/crm_lead.py | 7 +++++++ addons/crm/crm_lead_view.xml | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index ec5bc8bf67a..509bcf106b6 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -356,6 +356,13 @@ class crm_lead(base_stage, format_address, osv.osv): } return {'value' : values} + def on_change_user(self, cr, uid, ids, user_id, context=None): + if user_id: + user = self.pool.get('res.users').browse(cr, uid, user_id, context=context) + return {'value':{'section_id': user.default_section_id and user.default_section_id.id or False}} + else: + return {'value':{'section_id':False}} + def _check(self, cr, uid, ids=False, context=None): """ Override of the base.stage method. Function called by the scheduler to process cases for date actions diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml index e42ac81e108..5fedf2b4209 100644 --- a/addons/crm/crm_lead_view.xml +++ b/addons/crm/crm_lead_view.xml @@ -427,7 +427,7 @@ - +
          \n" " " msgstr "" +"\n" +"
          \n" +" \n" +"

          Tisztelt ${object.name},

          \n" +"

          \n" +" Ha időközben kiegyenlítésre került, vagy a mi hibánkból adódóan téves, " +"akkor tárgytalan, \n" +"de adataink szerint a következő tétel kifizetés nélkül maradt. \n" +"Kérjük Önöket a fizetés 8 napon belüli pontos teljesítésére.\n" +"Ha a levél elküldése előtt a fizetés már megtörtént akkor kérjük tekintsék " +"ezt tárgytalannak. Kérjük vegyék fel a kapcsolatot könyvelési " +"csoportunkkal. \n" +"

          \n" +"
          \n" +"Üdvözlettel,\n" +"
          \n" +"
          \n" +"${user.name}\n" +"
          \n" +"
          \n" +"\n" +"${object.get_followup_table_html() | safe}\n" +"\n" +"
          \n" +"
          \n" +" " #. module: account_followup #: field:account.move.line,result:0 @@ -883,17 +1077,17 @@ msgstr "Egyenleg" #. module: account_followup #: help:res.partner,payment_note:0 msgid "Payment Note" -msgstr "" +msgstr "Megjegyzés a fizetéshez" #. module: account_followup #: view:res.partner:0 msgid "My Follow-ups" -msgstr "" +msgstr "Fizetési-emlékeztetőim" #. module: account_followup #: view:account_followup.followup.line:0 msgid "%(company_name)s" -msgstr "" +msgstr "%(company_name)s" #. module: account_followup #: model:account_followup.followup.line,description:account_followup.demo_followup_line1 @@ -911,6 +1105,18 @@ msgid "" "\n" "Best Regards,\n" msgstr "" +"\n" +"Dear %(partner_name)s,\n" +"\n" +" Ha időközben kiegyenlítésre került, vagy a mi hibánkból adódóan téves, " +"akkor tárgytalan, de adataink szerint a következő tétel kifizetés nélkül " +"maradt. Kérjük Önöket a fizetés 8 napon belüli pontos teljesítésére.\n" +"\n" +"Ha a levél elküldése előtt a fizetés már megtörtént akkor kérjük tekintsék " +"ezt tárgytalannak. Kérjük vegyék fel a kapcsolatot könyvelési " +"csoportunkkal. \n" +"\n" +"Üdvözlettel,\n" #. module: account_followup #: field:account_followup.stat,date_move_last:0 @@ -927,12 +1133,12 @@ msgstr "Időszak" #: code:addons/account_followup/wizard/account_followup_print.py:228 #, python-format msgid "%s partners have no credits and as such the action is cleared" -msgstr "" +msgstr "%s a partnernek nincs hitele azért a művelet törölve lett" #. module: account_followup #: model:ir.actions.report.xml,name:account_followup.account_followup_followup_report msgid "Follow-up Report" -msgstr "" +msgstr "Fizetési-emlékeztető jelentés" #. module: account_followup #: view:res.partner:0 @@ -940,6 +1146,8 @@ msgid "" ", the latest payment follow-up\n" " was:" msgstr "" +", a legutóbbi fizetési-emlékeztető kifizetés\n" +" ez volt:" #. module: account_followup #: view:account_followup.print:0 @@ -949,7 +1157,7 @@ msgstr "Mégse" #. module: account_followup #: view:account_followup.sending.results:0 msgid "Close" -msgstr "" +msgstr "Lezár" #. module: account_followup #: view:account_followup.stat:0 @@ -965,24 +1173,26 @@ msgstr "Maximális fizetési emlékeztető szint" #: code:addons/account_followup/wizard/account_followup_print.py:171 #, python-format msgid " had unknown email address(es)" -msgstr "" +msgstr " ismeretlen e-mail címe(i) van(nak)" #. module: account_followup #: help:account_followup.print,test_print:0 msgid "" "Check if you want to print follow-ups without changing follow-up level." msgstr "" +"Jelölje be, ha ki szeretné nyomtatni a fizetési értesítőket azok szintjének " +"változtatása nélkül." #. module: account_followup #: model:ir.ui.menu,name:account_followup.menu_finance_followup #: view:res.partner:0 msgid "Payment Follow-up" -msgstr "" +msgstr "Fizetési-emlékeztető kifizetés" #. module: account_followup #: view:account_followup.followup.line:0 msgid ": Current Date" -msgstr "" +msgstr ": Jelenlegi dátum" #. module: account_followup #: view:account_followup.print:0 @@ -991,16 +1201,20 @@ msgid "" " set the manual actions per customer, according to " "the follow-up levels defined." msgstr "" +"Ez a művelet fizetési-emlékeztető e-mail küldéseket indít, levelet nyomtat " +"és\n" +" beállítja a vevőnkénti kézi műveletet, a fizetési-" +"emlékeztető szintek beállításának megfelelően." #. module: account_followup #: field:account_followup.followup.line,name:0 msgid "Follow-Up Action" -msgstr "" +msgstr "Fizetési-emlékeztető művelet" #. module: account_followup #: view:account_followup.stat:0 msgid "Including journal entries marked as a litigation" -msgstr "" +msgstr "Beleértve a peres megjelölésű jelentés bejegyzéseket" #. module: account_followup #: report:account_followup.followup.print:0 @@ -1013,7 +1227,7 @@ msgstr "Megjegyzés" #. module: account_followup #: view:account_followup.sending.results:0 msgid "Summary of actions" -msgstr "" +msgstr "Műveletek összegzése" #. module: account_followup #: report:account_followup.followup.print:0 @@ -1023,7 +1237,7 @@ msgstr "Hiv." #. module: account_followup #: view:account_followup.followup.line:0 msgid "After" -msgstr "" +msgstr "Utána" #. module: account_followup #: view:account_followup.stat:0 @@ -1033,12 +1247,12 @@ msgstr "Tárgyév" #. module: account_followup #: field:res.partner,latest_followup_level_id_without_lit:0 msgid "Latest Follow-up Level without litigation" -msgstr "" +msgstr "Legitóbbi per nélküli fizetési-emlékeztetőt szint" #. module: account_followup #: view:res.partner:0 msgid "⇾ Mark as Done" -msgstr "" +msgstr "⇾ Jelölje elvégzettnek" #. module: account_followup #: view:account.move.line:0 @@ -1048,12 +1262,12 @@ msgstr "Partner tételek" #. module: account_followup #: view:account_followup.followup.line:0 msgid "e.g. Call the customer, check if it's paid, ..." -msgstr "" +msgstr "pl. Vevő felhívása, ellenőrizni, hogy már kiegyenlésre került, ..." #. module: account_followup #: view:account_followup.stat:0 msgid "Follow-up lines" -msgstr "" +msgstr "Fizetési emlékeztető sorok" #. module: account_followup #: model:account_followup.followup.line,description:account_followup.demo_followup_line3 @@ -1074,6 +1288,21 @@ msgid "" "\n" "Best Regards,\n" msgstr "" +"\n" +"Tisztelt %(partner_name)s,\n" +"\n" +" A többszörös fizetési-emlékeztető ellenére, még mindig nem történt meg a " +"számla kiegyenlítése.\n" +"Ha nem történik meg a kiegyenlítés 8 napon belül, törvényes úton vagyunk " +"kénytelenek az adósságot behajtani, minden további felszólítás nélkül.\n" +"\n" +"Úgy gondoljuk, hogy ez nem lesz szükséges lépés a lenti részletekkel " +"kapcsolatban.\n" +"\n" +"Az üggyel kapcsolatban felmerült kérdésekben, kérjük vegyék fel a " +"kapcsolatot a könyvelési csoportunkkal.\n" +"\n" +"Üdvözlettel,\n" #. module: account_followup #: help:account_followup.print,partner_lang:0 @@ -1095,6 +1324,13 @@ msgid "" "installed\n" " using to top right icon." msgstr "" +"Írja ide ennek a levélnek a levél bemutatását,\n" +" a fizetési-emlékeztető szint szerint. " +"Használhatóak a\n" +" következő kulcsszavak a szövegben. Meg kell " +"lennie\n" +" az összes jobb felső ikon szerinti nyelv " +"fordításban is!" #. module: account_followup #: view:account_followup.stat:0 @@ -1110,7 +1346,7 @@ msgstr "Név" #. module: account_followup #: field:res.partner,latest_followup_level_id:0 msgid "Latest Follow-up Level" -msgstr "" +msgstr "Legitóbbi fizetési-emlékeztető szint" #. module: account_followup #: field:account_followup.stat,date_move:0 @@ -1121,24 +1357,24 @@ msgstr "Első tétel" #. module: account_followup #: model:ir.model,name:account_followup.model_account_followup_stat_by_partner msgid "Follow-up Statistics by Partner" -msgstr "" +msgstr "Fizetési-emlékeztető partnerenkénti statisztika" #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:172 #, python-format msgid " letter(s) in report" -msgstr "" +msgstr " level(ek) a jelentésben" #. module: account_followup #: model:ir.actions.act_window,name:account_followup.action_customer_my_followup #: model:ir.ui.menu,name:account_followup.menu_sale_followup msgid "My Follow-Ups" -msgstr "" +msgstr "Fizetési felszólításaim" #. module: account_followup #: view:res.partner:0 msgid "Customer Followup" -msgstr "" +msgstr "Vevői fizetési-emlékeztető" #. module: account_followup #: model:ir.actions.act_window,help:account_followup.action_account_followup_definition_form @@ -1154,22 +1390,33 @@ msgid "" "

          \n" " " msgstr "" +"

          \n" +" Kattintson a fizetési-emlékeztető szint és műveletének " +"létrehozásához.\n" +"

          \n" +" Minden lépéshez, határozza meg a műveletet amit a lejárat " +"után annyi nappal el fog végezni.\n" +" Lehetséges nyomtatás és e-mail sablon használatával egy " +"üzenet eljuttatása a vevő\n" +" részére.\n" +"

          \n" +" " #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:166 #, python-format msgid "Follow-up letter of " -msgstr "" +msgstr "Fizetési-emlékeztető levél ide " #. module: account_followup #: view:res.partner:0 msgid "The" -msgstr "" +msgstr "A" #. module: account_followup #: view:account_followup.print:0 msgid "Send follow-ups" -msgstr "" +msgstr "Fizetési-emlékeztető küldése" #. module: account_followup #: view:account.move.line:0 @@ -1183,6 +1430,8 @@ msgid "" "The partner does not have any accounting entries to print in the overdue " "report for the current company." msgstr "" +"A partnernek nincs egyetlen számlával kapcsolatos belyegyzése a nyomtatáshoz " +"ami kapcsolódna a vállalat fizetési felszólítás jelentéshez." #. module: account_followup #: field:account_followup.followup.line,sequence:0 @@ -1192,7 +1441,7 @@ msgstr "Sorszám" #. module: account_followup #: view:res.partner:0 msgid "Follow-ups To Do" -msgstr "" +msgstr "Még végrehejtandó fizetési-emlékeztető" #. module: account_followup #: report:account_followup.followup.print:0 @@ -1211,26 +1460,30 @@ msgid "" "the reminder. Could be negative if you want to send a polite alert " "beforehand." msgstr "" +"A számla lejárati dátuma utáni napok száma, amíg várakozik a felszólítás " +"küldése előtt. Negatív is lehet, ha egy udvarias levelet szeretne küldeni a " +"lejárati dátumra vonatkozólag." #. module: account_followup #: help:res.partner,latest_followup_date:0 msgid "Latest date that the follow-up level of the partner was changed" msgstr "" +"Legutóbbi dátum amikor a vevőnek a fizetési-emlékeztető szintje változott" #. module: account_followup #: field:account_followup.print,test_print:0 msgid "Test Print" -msgstr "" +msgstr "Nyomtatás teszt" #. module: account_followup #: view:account_followup.followup.line:0 msgid ": User Name" -msgstr "" +msgstr ": Felhasználó neve" #. module: account_followup #: view:res.partner:0 msgid "Accounting" -msgstr "" +msgstr "Könyvelés" #. module: account_followup #: view:res.partner:0 @@ -1238,14 +1491,37 @@ msgid "" "If not specified by the latest follow-up level, it will send from the " "default email template" msgstr "" +"Ha nincs meghatározva a legutóbbi fizetési-emlékeztető szinttel, akkor az " +"alapértelmezett e-mail sablonnal lesz elküldve" #. module: account_followup #: code:addons/account_followup/account_followup.py:319 #, python-format msgid "There is no followup plan defined for the current company." msgstr "" +"A jelenlegi vállalathoz nem lett fizetési felszólító terv meghatározva." #. module: account_followup #: field:res.partner,payment_note:0 msgid "Customer Payment Promise" -msgstr "" +msgstr "Vevő fizetésre vonatkozó igérete" + +#~ msgid "" +#~ "Check if you want to print follow-ups without changing follow-ups level." +#~ msgstr "" +#~ "Ellenőrizze, hogy a fizetési-emlékeztető szintek változtatása nélkül " +#~ "szeretné a fizetési-emlékeztetők nyomtatást." + +#~ msgid "Responsible" +#~ msgstr "Felelős" + +#~ msgid "" +#~ "

          \n" +#~ " No journal items found.\n" +#~ "

          \n" +#~ " " +#~ msgstr "" +#~ "

          \n" +#~ " Nem talált jelentés tartalmat.\n" +#~ "

          \n" +#~ " " diff --git a/addons/account_followup/i18n/nl.po b/addons/account_followup/i18n/nl.po index 49f57a3cbe2..9e82b196399 100644 --- a/addons/account_followup/i18n/nl.po +++ b/addons/account_followup/i18n/nl.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-15 16:52+0000\n" +"PO-Revision-Date: 2013-04-12 21:23+0000\n" "Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:30+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-13 06:31+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: account_followup #: model:email.template,subject:account_followup.email_template_account_followup_default @@ -955,7 +955,7 @@ msgstr " e-mail(s) zouden verstuurt moeten zijn, maar " #. module: account_followup #: model:ir.model,name:account_followup.model_account_move_line msgid "Journal Items" -msgstr "Boekingen" +msgstr "Boekingsregels" #. module: account_followup #: code:addons/account_followup/account_followup.py:281 diff --git a/addons/account_followup/i18n/tr.po b/addons/account_followup/i18n/tr.po index e3daa867935..fb9bb6b055e 100644 --- a/addons/account_followup/i18n/tr.po +++ b/addons/account_followup/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-14 20:32+0000\n" +"PO-Revision-Date: 2013-04-13 18:34+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:30+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: account_followup #: model:email.template,subject:account_followup.email_template_account_followup_default @@ -28,7 +28,7 @@ msgstr "${user.company_id.name} Ödeme Anımsatıcı" #. module: account_followup #: help:res.partner,latest_followup_level_id:0 msgid "The maximum follow-up level" -msgstr "Enyüksek takip düzeyi" +msgstr "Enyüksek izleme düzeyi" #. module: account_followup #: view:account_followup.stat:0 @@ -39,7 +39,7 @@ msgstr "Gruplandır..." #. module: account_followup #: field:account_followup.print,followup_id:0 msgid "Follow-Up" -msgstr "Takip" +msgstr "İzleme" #. module: account_followup #: view:account_followup.followup.line:0 @@ -100,7 +100,7 @@ msgstr "vadesi geçenler, aşağıdaki işlemleri yapın:" #. module: account_followup #: view:account_followup.followup.line:0 msgid "Follow-up Steps" -msgstr "Takip Adımları" +msgstr "İzleme Adımları" #. module: account_followup #: code:addons/account_followup/account_followup.py:262 @@ -111,7 +111,7 @@ msgstr "Vade Tarihi" #. module: account_followup #: model:ir.actions.act_window,name:account_followup.action_account_followup_print msgid "Send Follow-Ups" -msgstr "Takipleri Gönder" +msgstr "İzlemeleri Gönder" #. module: account_followup #: code:addons/account_followup/account_followup.py:313 @@ -134,7 +134,7 @@ msgid "" "This is the next action to be taken. It will automatically be set when the " "partner gets a follow-up level that requires a manual action. " msgstr "" -"Bu yapılması gereken sonraki eylemdir. İş Ortağının takip düzeyi elle eylem " +"Bu yapılması gereken sonraki eylemdir. İş Ortağının izleme düzeyi elle eylem " "gerektirir duruma geldiğinde otomatik olarak ayarlanır. " #. module: account_followup @@ -228,7 +228,6 @@ msgstr "" " Bizim hatamız istisna olmak üzere, aşağıdaki tutar ödenmemiş durumdadır. " "Önümüzdeki 8 gün içinde bu ödemeyi gerçekleştirmek için lütfen gerekli " "önlemleri alınız.\n" -"\n" "Bu yazımız gönderilmeden önce bu ödemeyi yaptıysanız lütfen bu yazımızı " "dikkate almayınız. Muhasebe bölümümüzle iletişime geçmekte lütfen tereddüt " "etmeyiniz. \n" @@ -287,7 +286,7 @@ msgstr "Bir Sorumlu Ata" #: field:account_followup.followup,followup_line:0 #: view:res.partner:0 msgid "Follow-up" -msgstr "Takip" +msgstr "İzleme" #. module: account_followup #: report:account_followup.followup.print:0 @@ -327,9 +326,9 @@ msgstr "" "tarihinin \n" " üzerinden geçecek belirli bir gün sayısı ile " "başlatılacak \n" -" takip düzeyleri içinde toplanmıştır. Aynı müşteri " +" izleme düzeyleri içinde toplanmıştır. Aynı müşteri " "için \n" -" vadesi geçen başka faturalar da varsa ençok geciken " +" vadesi geçen başka faturalar da varsa en çok geciken " "\n" " faturaya ait eylemler gerçekleştirilecektir." @@ -346,7 +345,7 @@ msgstr "İş Ortakları" #. module: account_followup #: sql_constraint:account_followup.followup:0 msgid "Only one follow-up per company is allowed" -msgstr "Her firma için yalnız bir takipe izin verilir" +msgstr "Her firma için yalnız bir izlemeye izin verilir" #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:254 @@ -377,7 +376,7 @@ msgstr "Epostalar gönder ve mektuplar oluştur" #. module: account_followup #: model:ir.actions.act_window,name:account_followup.action_customer_followup msgid "Manual Follow-Ups" -msgstr "Elle Takip" +msgstr "Elle İzleme" #. module: account_followup #: view:account_followup.followup.line:0 @@ -465,7 +464,7 @@ msgstr "Borç" #. module: account_followup #: model:ir.model,name:account_followup.model_account_followup_stat msgid "Follow-up Statistics" -msgstr "Takip İstatistikleri" +msgstr "İzleme İstatistikleri" #. module: account_followup #: view:res.partner:0 @@ -475,12 +474,12 @@ msgstr "Vade Geçmesi Epostası Gönder" #. module: account_followup #: model:ir.model,name:account_followup.model_account_followup_followup_line msgid "Follow-up Criteria" -msgstr "Takip Kriteri" +msgstr "İzleme Kriteri" #. module: account_followup #: help:account_followup.followup.line,sequence:0 msgid "Gives the sequence order when displaying a list of follow-up lines." -msgstr "Takip kalemleri görüntüleme sıralamasını verir." +msgstr "İzleme kalemleri görüntüleme sıralamasını verir." #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:166 @@ -502,7 +501,7 @@ msgstr "Bir Mektup Gönder" #. module: account_followup #: model:ir.actions.act_window,name:account_followup.action_account_followup_definition_form msgid "Payment Follow-ups" -msgstr "Ödeme Takipleri" +msgstr "Ödeme İzlemeleri" #. module: account_followup #: code:addons/account_followup/report/account_followup_print.py:86 @@ -522,12 +521,12 @@ msgstr "Vade Tarihleri" #: field:account.move.line,followup_line_id:0 #: view:account_followup.stat:0 msgid "Follow-up Level" -msgstr "Takip Seviyesi" +msgstr "İzleme Düzeyi" #. module: account_followup #: field:account_followup.stat,date_followup:0 msgid "Latest followup" -msgstr "Son İzleme" +msgstr "En son İzleme" #. module: account_followup #: model:ir.ui.menu,name:account_followup.menu_manual_reconcile_followup @@ -537,7 +536,7 @@ msgstr "Faturaları ve Ödemeleri Uzlaştır" #. module: account_followup #: model:ir.ui.menu,name:account_followup.account_followup_s msgid "Do Manual Follow-Ups" -msgstr "Elle Takip Yap" +msgstr "Elle İzleme Yap" #. module: account_followup #: report:account_followup.followup.print:0 @@ -552,12 +551,12 @@ msgstr "Eposta Onayı Gönder" #. module: account_followup #: view:account_followup.stat:0 msgid "Follow-up Entries with period in current year" -msgstr "Geçerli yıl içindeki dönemin Takip Kayıtları" +msgstr "Geçerli yıl içindeki dönemin İzleme Kayıtları" #. module: account_followup #: field:account_followup.stat.by.partner,date_followup:0 msgid "Latest follow-up" -msgstr "Enson Takip" +msgstr "Enson İzleme" #. module: account_followup #: field:account_followup.print,partner_lang:0 @@ -573,7 +572,7 @@ msgstr " eposta(lar) gönderildi" #. module: account_followup #: model:ir.model,name:account_followup.model_account_followup_print msgid "Print Follow-up & Send Mail to Customers" -msgstr "Müşterilere Takip Yazdır & Posta Gönder" +msgstr "Müşterilere İzleme Yazdır & Posta Gönder" #. module: account_followup #: field:account_followup.followup.line,description:0 @@ -621,7 +620,7 @@ msgstr "Eposta gönderilemedi çünkü iş ortağı eposta adresi yazılmamış" #. module: account_followup #: model:ir.model,name:account_followup.model_account_followup_followup msgid "Account Follow-up" -msgstr "Hesap Takip" +msgstr "Hesap İzleme" #. module: account_followup #: help:res.partner,payment_responsible_id:0 @@ -670,7 +669,7 @@ msgstr "Mektup ve Eposta Gönder" #. module: account_followup #: view:account_followup.followup:0 msgid "Search Follow-up" -msgstr "Takip Ara" +msgstr "İzleme Ara" #. module: account_followup #: view:res.partner:0 @@ -705,7 +704,7 @@ msgstr "Engellendi" #. module: account_followup #: sql_constraint:account_followup.followup.line:0 msgid "Days of the follow-up levels must be different" -msgstr "Takip düzeyi günleri farklı olmalı" +msgstr "İzleme düzeyi günleri farklı olmalı" #. module: account_followup #: view:res.partner:0 @@ -715,7 +714,7 @@ msgstr "Eylemi yapıldı olarak işaretlemek için tıklayın" #. module: account_followup #: model:ir.ui.menu,name:account_followup.menu_action_followup_stat_follow msgid "Follow-Ups Analysis" -msgstr "Takip Analizi" +msgstr "İzleme Analizi" #. module: account_followup #: view:res.partner:0 @@ -732,31 +731,31 @@ msgid "" "action. Can be practical to set manually e.g. to see if he keeps his " "promises." msgstr "" -"Bu elle takip gerektiğinde olur . İş ortağı elle eylem gerektirecek izleme " -"düzeyine geldiğinde tarih geçerli tarihe ayarlanacaktır. Elle ayarlama " -"kullanışlı olabilir, örn. sözünü tutup tutmadığını görmek için." +"Bu elle izleme gerektirdiğinde olur . İş ortağı elle eylem gerektirecek " +"izleme düzeyine geldiğinde tarih geçerli tarihe ayarlanacaktır. Elle " +"ayarlama kullanışlı olabilir, örn. sözünü tutup tutmadığını görmek için." #. module: account_followup #: view:res.partner:0 msgid "Print overdue payments report independent of follow-up line" -msgstr "Takip kalemlerinden ayrı olarak vadesi geçen ödemeler raporu yazdır" +msgstr "İzleme kalemlerinden ayrı olarak vadesi geçen ödemeler raporu yazdır" #. module: account_followup #: help:account_followup.print,date:0 msgid "" "This field allow you to select a forecast date to plan your follow-ups" -msgstr "Bu alan takiplerinize öngörü planı yapmanızı sağlar." +msgstr "Bu alan izlemelerinizin öngörü planını yapmanızı sağlar." #. module: account_followup #: field:account_followup.print,date:0 msgid "Follow-up Sending Date" -msgstr "Takip Gönderim Tarihi" +msgstr "İzleme Gönderim Tarihi" #. module: account_followup #: view:res.partner:0 #: field:res.partner,payment_responsible_id:0 msgid "Follow-up Responsible" -msgstr "Takip Sorumlusu" +msgstr "İzleme Sorumlusu" #. module: account_followup #: model:email.template,body_html:account_followup.email_template_account_followup_level2 @@ -832,7 +831,7 @@ msgstr "Belge: Müşteri hesap özeti" #. module: account_followup #: model:ir.ui.menu,name:account_followup.account_followup_menu msgid "Follow-up Levels" -msgstr "Takip Düzeyleri" +msgstr "İzleme Düzeyleri" #. module: account_followup #: model:account_followup.followup.line,description:account_followup.demo_followup_line4 @@ -880,7 +879,7 @@ msgstr "Ödenecek Tutar" #. module: account_followup #: field:account.move.line,followup_date:0 msgid "Latest Follow-up" -msgstr "Son Takip" +msgstr "En son İzleme" #. module: account_followup #: view:account_followup.sending.results:0 @@ -924,9 +923,9 @@ msgid "" "actions." msgstr "" "Aşağıda bu müşteriye ait işlemler geçmişi\n" -" vardır. Sonraki takip eylemlerinin dışında " +" vardır. Sonraki izleme eylemlerinin dışında " "tutmak için\n" -" \"Takip Yok\"u işaretleyebilirsiniz." +" \"İzleme Yok\"u işaretleyebilirsiniz." #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:171 @@ -987,13 +986,13 @@ msgstr "Lit." msgid "" "The maximum follow-up level without taking into account the account move " "lines with litigation" -msgstr "Bir ihtilaf gerektirmeyecek en yüksek takip düzeyi." +msgstr "Bir ihtilaf gerektirmeyecek en yüksek izleme düzeyi." #. module: account_followup #: view:account_followup.stat:0 #: field:res.partner,latest_followup_date:0 msgid "Latest Follow-up Date" -msgstr "Enson Takip Tarihi" +msgstr "Enson İzleme Tarihi" #. module: account_followup #: model:email.template,body_html:account_followup.email_template_account_followup_default @@ -1038,7 +1037,7 @@ msgstr "" "önlemleri alınız.\n" "Bu yazımız gönderilmeden önce bu ödemeyi yaptıysanız lütfen bu yazımızı " "dikkate almayınız. Muhasebe bölümümüzle iletişime geçmekte lütfen tereddüt " -"etmeyiniz.\n" +"etmeyiniz. \n" "

          \n" "
          \n" "Saygılarımızla,\n" @@ -1070,7 +1069,7 @@ msgstr "Ödeme Bildirimi" #. module: account_followup #: view:res.partner:0 msgid "My Follow-ups" -msgstr "Takiplerim" +msgstr "İzlemelerim" #. module: account_followup #: view:account_followup.followup.line:0 @@ -1126,7 +1125,7 @@ msgstr "%s iş ortağının hiç borcu yoktur ve eylem gereksizdir" #. module: account_followup #: model:ir.actions.report.xml,name:account_followup.account_followup_followup_report msgid "Follow-up Report" -msgstr "Takip Raporu" +msgstr "İzleme Raporu" #. module: account_followup #: view:res.partner:0 @@ -1155,7 +1154,7 @@ msgstr "İhtilaf" #. module: account_followup #: field:account_followup.stat.by.partner,max_followup_id:0 msgid "Max Follow Up Level" -msgstr "Enüst İzleme Seviyesi" +msgstr "Enüst İzleme Düzeyi" #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:171 @@ -1168,13 +1167,13 @@ msgstr " bilinmeyen eposta adresi(leri) vardı" msgid "" "Check if you want to print follow-ups without changing follow-up level." msgstr "" -"İzleme seviyesi değiştirmeden izlemeleri yazdırmak istiyorsanız işaretleyin." +"İzleme düzeyini değiştirmeden izlemeleri yazdırmak istiyorsanız işaretleyin." #. module: account_followup #: model:ir.ui.menu,name:account_followup.menu_finance_followup #: view:res.partner:0 msgid "Payment Follow-up" -msgstr "Ödeme Takibi" +msgstr "Ödeme İzlemesi" #. module: account_followup #: view:account_followup.followup.line:0 @@ -1188,7 +1187,7 @@ msgid "" " set the manual actions per customer, according to " "the follow-up levels defined." msgstr "" -"Bu eylem, tanımlanan takip düzeylerine göre takip epostaları,\n" +"Bu eylem, tanımlanan izleme düzeylerine göre izleme epostaları,\n" " basılı mektuplar gönderecektir ve her müşteri için " "elle eylemler \n" " ayarlayacaktır." @@ -1196,7 +1195,7 @@ msgstr "" #. module: account_followup #: field:account_followup.followup.line,name:0 msgid "Follow-Up Action" -msgstr "Takip Eylemi" +msgstr "İzleme Eylemi" #. module: account_followup #: view:account_followup.stat:0 @@ -1234,7 +1233,7 @@ msgstr "Bu Mali Yıl" #. module: account_followup #: field:res.partner,latest_followup_level_id_without_lit:0 msgid "Latest Follow-up Level without litigation" -msgstr "İhtilafsız Enson Takip Düzeyi" +msgstr "İhtilafsız Enson İzleme Düzeyi" #. module: account_followup #: view:res.partner:0 @@ -1254,7 +1253,7 @@ msgstr "örn. Müşteriyi ara, ödenip ödenmediğini denetle, ..." #. module: account_followup #: view:account_followup.stat:0 msgid "Follow-up lines" -msgstr "Takip kalemleri" +msgstr "İzleme kalemleri" #. module: account_followup #: model:account_followup.followup.line,description:account_followup.demo_followup_line3 @@ -1311,7 +1310,7 @@ msgid "" "installed\n" " using to top right icon." msgstr "" -"Buraya takip düzeyine uygun olarak\n" +"Buraya izleme düzeyine uygun olarak\n" " bilgilendirme mektubunu yazın. Aşağıdaki\n" " metindeki anahtar kelimeleri kullanabilirsiniz. " "Üst\n" @@ -1323,7 +1322,7 @@ msgstr "" #: view:account_followup.stat:0 #: model:ir.actions.act_window,name:account_followup.action_followup_stat msgid "Follow-ups Sent" -msgstr "Gönderilen Takipler" +msgstr "Gönderilen İzlemeler" #. module: account_followup #: field:account_followup.followup,name:0 @@ -1333,7 +1332,7 @@ msgstr "Adı" #. module: account_followup #: field:res.partner,latest_followup_level_id:0 msgid "Latest Follow-up Level" -msgstr "Enson Takip Düzeyi" +msgstr "Enson İzleme Düzeyi" #. module: account_followup #: field:account_followup.stat,date_move:0 @@ -1344,7 +1343,7 @@ msgstr "İlk Hareket" #. module: account_followup #: model:ir.model,name:account_followup.model_account_followup_stat_by_partner msgid "Follow-up Statistics by Partner" -msgstr "İş Ortağına göre Takip İstatistikleri" +msgstr "İş Ortağına göre İzleme İstatistikleri" #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:172 @@ -1378,7 +1377,7 @@ msgid "" " " msgstr "" "

          \n" -" Takip düzeylerini ve ilişkili eylemlerini tanımlamak için " +" İzleme düzeylerini ve ilişkili eylemlerini tanımlamak için " "tıklayın.\n" "

          \n" " Her adım için yapılması gereken eylemleri ve gecikme " @@ -1392,7 +1391,7 @@ msgstr "" #: code:addons/account_followup/wizard/account_followup_print.py:166 #, python-format msgid "Follow-up letter of " -msgstr "Bunun takip mektubu " +msgstr "Bunun izleme mektubu " #. module: account_followup #: view:res.partner:0 @@ -1402,7 +1401,7 @@ msgstr "Bu" #. module: account_followup #: view:account_followup.print:0 msgid "Send follow-ups" -msgstr "Takip gönder" +msgstr "İzleme gönder" #. module: account_followup #: view:account.move.line:0 @@ -1427,7 +1426,7 @@ msgstr "Sıra No" #. module: account_followup #: view:res.partner:0 msgid "Follow-ups To Do" -msgstr "Yapılacak Takipler" +msgstr "Yapılacak İzlemeler" #. module: account_followup #: report:account_followup.followup.print:0 @@ -1452,7 +1451,7 @@ msgstr "" #. module: account_followup #: help:res.partner,latest_followup_date:0 msgid "Latest date that the follow-up level of the partner was changed" -msgstr "İş Ortağının takip düzeyinin değiştirildiği enson tarih" +msgstr "İş Ortağının izleme düzeyinin değiştirildiği enson tarih" #. module: account_followup #: field:account_followup.print,test_print:0 @@ -1475,7 +1474,7 @@ msgid "" "If not specified by the latest follow-up level, it will send from the " "default email template" msgstr "" -"Son takip düzeyinde belirlenmediyse varsayılan eposta şablonundan " +"Son izleme düzeyinde belirlenmediyse varsayılan eposta şablonundan " "gönderilecektir" #. module: account_followup diff --git a/addons/account_payment/i18n/nl.po b/addons/account_payment/i18n/nl.po index c71f59fe282..9b66a50a719 100644 --- a/addons/account_payment/i18n/nl.po +++ b/addons/account_payment/i18n/nl.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-09 08:57+0000\n" +"PO-Revision-Date: 2013-04-12 21:21+0000\n" "Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:30+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-13 06:31+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: account_payment #: model:ir.actions.act_window,help:account_payment.action_payment_order_tree @@ -445,7 +445,7 @@ msgstr "Betalingsregels" #. module: account_payment #: model:ir.model,name:account_payment.model_account_move_line msgid "Journal Items" -msgstr "Boekingen" +msgstr "Boekingsregels" #. module: account_payment #: help:payment.line,move_line_id:0 diff --git a/addons/account_payment/i18n/tr.po b/addons/account_payment/i18n/tr.po index 739efb7190f..addb9793db2 100644 --- a/addons/account_payment/i18n/tr.po +++ b/addons/account_payment/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-08 21:13+0000\n" +"PO-Revision-Date: 2013-04-13 17:40+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:30+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: account_payment #: model:ir.actions.act_window,help:account_payment.action_payment_order_tree @@ -130,8 +130,8 @@ msgid "" "You cannot cancel an invoice which has already been imported in a payment " "order. Remove it from the following payment order : %s." msgstr "" -"Ödeme emri içine aktarılan bir faturayı iptal edemezsiniz.\r\n" -"faturayı ödeme emrinden çıkart: %s." +"Ödeme emrine aktarılan bir faturayı iptal edemezsiniz.\r\n" +"Bu faturayı aşağıdaki ödeme emrinden çıkart: %s." #. module: account_payment #: code:addons/account_payment/account_invoice.py:43 diff --git a/addons/account_sequence/i18n/nl.po b/addons/account_sequence/i18n/nl.po index b01dab84e6a..6bb1aafd269 100644 --- a/addons/account_sequence/i18n/nl.po +++ b/addons/account_sequence/i18n/nl.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-02-14 11:19+0000\n" +"PO-Revision-Date: 2013-04-12 21:23+0000\n" "Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:30+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-13 06:31+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: account_sequence #: view:account.sequence.installer:0 @@ -77,7 +77,7 @@ msgstr "Nummer verspringing" #. module: account_sequence #: model:ir.model,name:account_sequence.model_account_move_line msgid "Journal Items" -msgstr "Boekingen" +msgstr "Boekingsregels" #. module: account_sequence #: field:account.move,internal_sequence_number:0 diff --git a/addons/account_voucher/i18n/nl.po b/addons/account_voucher/i18n/nl.po index 7ca8b44afc0..55f65275f75 100644 --- a/addons/account_voucher/i18n/nl.po +++ b/addons/account_voucher/i18n/nl.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-15 16:03+0000\n" +"PO-Revision-Date: 2013-04-12 21:26+0000\n" "Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:31+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-13 06:31+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: account_voucher #: field:account.bank.statement.line,voucher_id:0 @@ -1054,7 +1054,7 @@ msgstr "Pro-forma" #: view:account.voucher:0 #: field:account.voucher,move_ids:0 msgid "Journal Items" -msgstr "Boekingen" +msgstr "Boekingsregels" #. module: account_voucher #: code:addons/account_voucher/account_voucher.py:508 diff --git a/addons/account_voucher/i18n/tr.po b/addons/account_voucher/i18n/tr.po index 88a5c914137..23ccd791e05 100644 --- a/addons/account_voucher/i18n/tr.po +++ b/addons/account_voucher/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-08 21:14+0000\n" +"PO-Revision-Date: 2013-04-13 17:43+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:31+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: account_voucher #: field:account.bank.statement.line,voucher_id:0 @@ -843,7 +843,7 @@ msgstr "Satış Makbuzları" #. module: account_voucher #: field:account.voucher,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçi mi" +msgstr "Bir İzleyicidir" #. module: account_voucher #: field:account.voucher,analytic_id:0 diff --git a/addons/analytic/i18n/tr.po b/addons/analytic/i18n/tr.po index ff0f7dfe625..4f58d6cfcd3 100644 --- a/addons/analytic/i18n/tr.po +++ b/addons/analytic/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-08 21:46+0000\n" +"PO-Revision-Date: 2013-04-13 17:44+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:31+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: analytic #: field:account.analytic.account,child_ids:0 @@ -213,7 +213,7 @@ msgstr "" #. module: analytic #: field:account.analytic.account,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçi mi" +msgstr "Bir İzleyicidir" #. module: analytic #: field:account.analytic.line,user_id:0 diff --git a/addons/base_action_rule/i18n/tr.po b/addons/base_action_rule/i18n/tr.po index 6a23b1df419..0e1a8d5165f 100644 --- a/addons/base_action_rule/i18n/tr.po +++ b/addons/base_action_rule/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-04-07 19:48+0000\n" +"PO-Revision-Date: 2013-04-13 17:45+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-08 06:20+0000\n" -"X-Generator: Launchpad (build 16550)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: base_action_rule #: selection:base.action.rule.lead.test,state:0 @@ -29,6 +29,9 @@ msgid "" "enter the name (Ex: Create the 01/01/2012) and add the option \"Share with " "all users\"" msgstr "" +"-Bu aynı \"Arama\" görünümünde \"Geçerli Süzgeci Kaydet\" menüsünü seçin, " +"adını girin (Örn: 01/01/2012 yi oluştur) ve \"Bütün kullanıcılarla paylaş\" " +"seçeneğini ekleyin" #. module: base_action_rule #: model:ir.model,name:base_action_rule.model_base_action_rule @@ -38,7 +41,7 @@ msgstr "Eylem Kuralları" #. module: base_action_rule #: view:base.action.rule:0 msgid "Select a filter or a timer as condition." -msgstr "" +msgstr "Koşul olarak bir süzgeç ya da bir zaman sayacı seçin." #. module: base_action_rule #: field:base.action.rule.lead.test,user_id:0 @@ -48,12 +51,12 @@ msgstr "Sorumlu" #. module: base_action_rule #: help:base.action.rule,server_action_ids:0 msgid "Examples: email reminders, call object service, etc." -msgstr "" +msgstr "Örnekler: eposta anımsatıcıları, nesne servisi çağır, v.b." #. module: base_action_rule #: field:base.action.rule,act_followers:0 msgid "Add Followers" -msgstr "Takipçi Ekle" +msgstr "İzleyici Ekle" #. module: base_action_rule #: field:base.action.rule,act_user_id:0 @@ -67,6 +70,9 @@ msgid "" "delay before thetrigger date, like sending a reminder 15 minutes before a " "meeting." msgstr "" +"Tetikleme tarihinden sonraki gecikme. Tetikleme tarihinden önce bir gecikme " +"gerektiriyorsa eksş bir değer girebilirsiniz, toplantı tarihinden 15 dakika " +"önce anımsatma gönderme gibi." #. module: base_action_rule #: model:ir.model,name:base_action_rule.model_base_action_rule_lead_test @@ -117,7 +123,7 @@ msgstr "Eylem Kuralı" #: help:base.action.rule,filter_id:0 msgid "" "If present, this condition must be satisfied after the update of the record." -msgstr "" +msgstr "Varsa, bu koşul kaydın güncellenmesinden sonra tatminkar olmalıdır." #. module: base_action_rule #: view:base.action.rule:0 @@ -163,6 +169,10 @@ msgid "" "while the postcondition filter is checked after the modification. A " "precondition filter will therefore not work during a creation." msgstr "" +"Bir işlem kuralı, \"İlişkili Belge Model\"ini oluştururken ya da " +"değiştirirken denetlenir. Önkoşul süzgeci, değiştirilmeden sonraki eski " +"koşul denetlenirken değiştirilmeden hemen önce denetlenir. Bundan dolayı bir " +"önkoşul süzgeci oluşturulma sırasında çalışmayacaktır." #. module: base_action_rule #: view:base.action.rule:0 @@ -176,6 +186,9 @@ msgid "" "in the \"Search\" view (Example of filter based on Leads/Opportunities: " "Creation Date \"is equal to\" 01/01/2012)" msgstr "" +"- \"İlişkili Belge Modeli\" sayfanıza gidin ve \"Arama\" görünümündeki " +"süzgeç parametrelerini doldurun (Adaylara/Fırsatlara göre süzgeç örnekleri: " +"Oluşturma Tarihi \"eşittir\" 01/01/2012)" #. module: base_action_rule #: field:base.action.rule,name:0 @@ -252,7 +265,7 @@ msgstr "İlgili Döküman Modeli" #: help:base.action.rule,filter_pre_id:0 msgid "" "If present, this condition must be satisfied before the update of the record." -msgstr "" +msgstr "Varsa, bu koşul kaydın güncellenmesinden önce tatminkar olmalıdır." #. module: base_action_rule #: field:base.action.rule,sequence:0 @@ -280,6 +293,20 @@ msgid "" "

          \n" " " msgstr "" +"

          \n" +" Yeni bir otomatik işlem kuralı ayarlamak için tıklayın. \n" +"

          \n" +" Çeşitli ekranlarda otomatik tetikleme işlemleri için " +"otomatik\n" +" işlemler kullanın. Örnek: belirli bir kullanıcı tarafından " +"oluşturulan\n" +" bir aday otomatik olarak bir satış takımına ayarlanabilir ya " +"da bir fırsat\n" +" hala 14 günlük bir bekleme durumundayken bir otomatik " +"eposta\n" +" anımsatmasını tetikleyebilir.\n" +"

          \n" +" " #. module: base_action_rule #: field:base.action.rule,create_date:0 diff --git a/addons/base_calendar/i18n/nl.po b/addons/base_calendar/i18n/nl.po index 8242b303bf8..b752058f615 100644 --- a/addons/base_calendar/i18n/nl.po +++ b/addons/base_calendar/i18n/nl.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-09 08:43+0000\n" +"PO-Revision-Date: 2013-04-12 20:59+0000\n" "Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:33+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-13 06:31+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: base_calendar #: selection:calendar.alarm,trigger_related:0 @@ -396,7 +396,7 @@ msgstr "Herhaal" #: field:crm.meeting,organizer:0 #: field:crm.meeting,organizer_id:0 msgid "Organizer" -msgstr "Organisator" +msgstr "Agenda" #. module: base_calendar #: view:calendar.event:0 diff --git a/addons/base_calendar/i18n/tr.po b/addons/base_calendar/i18n/tr.po index 3e9bc307628..3040bafe7f2 100644 --- a/addons/base_calendar/i18n/tr.po +++ b/addons/base_calendar/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-18 12:06+0000\n" +"PO-Revision-Date: 2013-04-13 17:45+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:33+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: base_calendar #: selection:calendar.alarm,trigger_related:0 @@ -479,7 +479,7 @@ msgstr "Ayın günü" #. module: base_calendar #: field:crm.meeting,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: base_calendar #: field:calendar.event,location:0 @@ -951,7 +951,7 @@ msgstr "Yetkilendiren" #. module: base_calendar #: field:crm.meeting,message_is_follower:0 msgid "Is a Follower" -msgstr "Takipçi" +msgstr "Bir İzleyicidir" #. module: base_calendar #: field:calendar.attendee,user_id:0 diff --git a/addons/base_import/i18n/hu.po b/addons/base_import/i18n/hu.po index 8429269cb96..72c1040f5d1 100644 --- a/addons/base_import/i18n/hu.po +++ b/addons/base_import/i18n/hu.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-22 15:04+0000\n" +"PO-Revision-Date: 2013-04-11 23:11+0000\n" "Last-Translator: krnkris \n" "Language-Team: Hungarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:33+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-12 06:05+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: base_import #. openerp-web @@ -1295,7 +1295,7 @@ msgstr "" #: code:addons/base_import/static/src/js/import.js:184 #, python-format msgid "Comma" -msgstr "" +msgstr "Vessző" #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_m2o_related @@ -1361,6 +1361,14 @@ msgid "" " (displayed under the Browse CSV file bar after you \n" " select your file)." msgstr "" +"Alapértelmezetten az importálás előnézetben a vesszők mint mező \n" +" elválasztók és a kérdőjelek mint szöveg határolók \n" +" szerepelnek. Ha a csv fájlnak nincsenek meg ezek a " +"\n" +" beállításai, akkor módosíthatja a fájl formátum " +"lehetőségekkel \n" +" (kijelezve a kiválasztott CSV fájl böngészési sávja " +"alatt)." #. module: base_import #. openerp-web @@ -1417,8 +1425,14 @@ msgid "" "demo \n" " data." msgstr "" +"Példának, it van egy \n" +" purchase.order_functional_error_line_cant_adpat.CSV " +"\n" +" fájl egy pár árajánlatról amit beimportálhat, a demo " +"adat \n" +" alapján." #. module: base_import #: field:base_import.import,file:0 msgid "File" -msgstr "" +msgstr "Fájl" diff --git a/addons/base_import/i18n/tr.po b/addons/base_import/i18n/tr.po index d417cc2c765..96d0567db62 100644 --- a/addons/base_import/i18n/tr.po +++ b/addons/base_import/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-04-06 07:26+0000\n" +"PO-Revision-Date: 2013-04-13 17:49+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-07 06:00+0000\n" -"X-Generator: Launchpad (build 16550)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: base_import #. openerp-web @@ -723,7 +723,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:301 #, python-format msgid "This SQL command will create the following CSV file:" -msgstr "" +msgstr "Bu SQL komutu aşağıdaki CSV dosyasını oluşturacaktır:" #. module: base_import #. openerp-web @@ -733,6 +733,9 @@ msgid "" "The following CSV file shows how to import purchase \n" " orders with their respective purchase order lines:" msgstr "" +"Aşağıdaki CSV dosyası satınalma siparişlerini ilgili satınalma \n" +" sipariş kalemleri ile birlikte nasıl " +"içeaktarılacağını gösterir:" #. module: base_import #. openerp-web @@ -837,6 +840,9 @@ msgid "" " \"External ID\". In PSQL, write the following " "command:" msgstr "" +"Önce bütün şirketleri ve şirketlerin \n" +" \"Dış ID\"lerini dışaaktaracağız. PSQL de, aşağıdaki " +"komutu yazın:" #. module: base_import #. openerp-web diff --git a/addons/base_vat/i18n/hr.po b/addons/base_vat/i18n/hr.po index ad1f6904d38..e00f1f54692 100644 --- a/addons/base_vat/i18n/hr.po +++ b/addons/base_vat/i18n/hr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-02-05 23:42+0000\n" -"Last-Translator: Davor Bojkić \n" +"PO-Revision-Date: 2013-04-14 09:46+0000\n" +"Last-Translator: Damir Tušek \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:34+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: base_vat #: view:res.partner:0 @@ -51,7 +51,7 @@ msgstr "Greška!" #. module: base_vat #: view:res.partner:0 msgid "e.g. BE0477472701" -msgstr "" +msgstr "modul: osnovno_porezi (base_vat)" #. module: base_vat #: help:res.partner,vat_subjected:0 diff --git a/addons/contacts/i18n/hr.po b/addons/contacts/i18n/hr.po index ba761b5a8c5..ce967ba5721 100644 --- a/addons/contacts/i18n/hr.po +++ b/addons/contacts/i18n/hr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2012-12-21 23:00+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-04-14 09:45+0000\n" +"Last-Translator: Damir Tušek \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:34+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: contacts #: model:ir.actions.act_window,help:contacts.action_contacts @@ -29,6 +29,13 @@ msgid "" "

          \n" " " msgstr "" +"Click to add a contact in your address book.\n" +"

          \n" +" OpenERP omogućavajednostavno praćenje svih aktivnosti vezanih " +"uz vaše partnere; rasprave i razgovori, povijest međusobnih poslova, " +"razmjenjene dokumente i slično...\n" +"

          \n" +" " #. module: contacts #: model:ir.actions.act_window,name:contacts.action_contacts diff --git a/addons/crm/i18n/tr.po b/addons/crm/i18n/tr.po index 4c204e0214c..fc0722b007a 100644 --- a/addons/crm/i18n/tr.po +++ b/addons/crm/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:36+0000\n" -"PO-Revision-Date: 2013-04-04 18:50+0000\n" +"PO-Revision-Date: 2013-04-13 17:51+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: OpenERP Turkish Translation <>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-05 06:23+0000\n" -"X-Generator: Launchpad (build 16550)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" +"X-Generator: Launchpad (build 16564)\n" "Language: tr\n" #. module: crm @@ -1359,7 +1359,7 @@ msgstr "bilinmeyen" #: field:crm.lead,message_is_follower:0 #: field:crm.phonecall,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçi" +msgstr "Bir İzleyicidir" #. module: crm #: field:crm.opportunity2phonecall,date:0 @@ -2239,7 +2239,7 @@ msgid "" "of this team." msgstr "" "Bu takımın kullanıcılarına bağlı etkinlikleri otomatikman izlemek için bu " -"satış takımını takip edin." +"satış takımını izleyin." #. module: crm #: view:crm.lead:0 @@ -2567,7 +2567,7 @@ msgstr "Seçmel Açıklama" #: field:crm.lead,message_follower_ids:0 #: field:crm.phonecall,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: crm #: model:ir.actions.act_window,help:crm.crm_case_category_act_leads_all diff --git a/addons/crm_claim/i18n/tr.po b/addons/crm_claim/i18n/tr.po index beb9777c223..8aa5dc1325f 100644 --- a/addons/crm_claim/i18n/tr.po +++ b/addons/crm_claim/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-03-10 19:25+0000\n" +"PO-Revision-Date: 2013-04-13 17:52+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:36+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: crm_claim #: help:crm.claim.stage,fold:0 @@ -217,7 +217,7 @@ msgstr "Partner" #. module: crm_claim #: view:crm.claim:0 msgid "Follow Up" -msgstr "Takip Etme" +msgstr "İzleme" #. module: crm_claim #: selection:crm.claim,type_action:0 @@ -255,7 +255,7 @@ msgstr "Boş Görünümler Gizle" #. module: crm_claim #: field:crm.claim,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: crm_claim #: view:crm.claim:0 @@ -569,7 +569,7 @@ msgstr "Telefon" #. module: crm_claim #: field:crm.claim,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçisi mi" +msgstr "Bir İzleyicidir" #. module: crm_claim #: field:crm.claim.report,user_id:0 diff --git a/addons/crm_helpdesk/i18n/tr.po b/addons/crm_helpdesk/i18n/tr.po index 28d7e151adb..397acb82d33 100644 --- a/addons/crm_helpdesk/i18n/tr.po +++ b/addons/crm_helpdesk/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-03-10 19:28+0000\n" +"PO-Revision-Date: 2013-04-13 17:53+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:36+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: crm_helpdesk #: field:crm.helpdesk.report,delay_close:0 @@ -178,7 +178,7 @@ msgstr "Öncelik" #. module: crm_helpdesk #: field:crm.helpdesk,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: crm_helpdesk #: view:crm.helpdesk:0 @@ -480,7 +480,7 @@ msgstr "Planlanan Gelir" #. module: crm_helpdesk #: field:crm.helpdesk,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçisi mi" +msgstr "Bir İzleyicidir" #. module: crm_helpdesk #: field:crm.helpdesk.report,user_id:0 diff --git a/addons/crm_todo/i18n/hr.po b/addons/crm_todo/i18n/hr.po index 261ffbb4727..cbcb12f2497 100644 --- a/addons/crm_todo/i18n/hr.po +++ b/addons/crm_todo/i18n/hr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2012-12-21 23:00+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-04-14 09:48+0000\n" +"Last-Translator: Damir Tušek \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:37+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: crm_todo #: model:ir.model,name:crm_todo.model_project_task @@ -25,7 +25,7 @@ msgstr "Zadatak" #. module: crm_todo #: view:crm.lead:0 msgid "Timebox" -msgstr "" +msgstr "modul: Popis zadataka (crm_todo)" #. module: crm_todo #: view:crm.lead:0 @@ -35,7 +35,7 @@ msgstr "Potencijal" #. module: crm_todo #: view:crm.lead:0 msgid "For cancelling the task" -msgstr "" +msgstr "Za otkazivanje zadatka" #. module: crm_todo #: view:crm.lead:0 @@ -77,7 +77,7 @@ msgstr "Potencijal / Prilika" #. module: crm_todo #: view:crm.lead:0 msgid "For changing to done state" -msgstr "" +msgstr "Za promjenu u status: Završeno" #. module: crm_todo #: view:crm.lead:0 diff --git a/addons/delivery/i18n/hr.po b/addons/delivery/i18n/hr.po index 3354bfd6b31..343f9f27de7 100644 --- a/addons/delivery/i18n/hr.po +++ b/addons/delivery/i18n/hr.po @@ -8,19 +8,19 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2012-12-21 23:00+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-04-14 09:56+0000\n" +"Last-Translator: Damir Tušek \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:37+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: delivery #: report:sale.shipping:0 msgid "Order Ref." -msgstr "" +msgstr "modul: isporuka (delivery)" #. module: delivery #: model:product.template,name:delivery.product_product_delivery_product_template @@ -30,7 +30,7 @@ msgstr "Dostava Poštom" #. module: delivery #: view:delivery.grid.line:0 msgid " in Function of " -msgstr "" +msgstr " u funkciji " #. module: delivery #: view:delivery.carrier:0 @@ -46,13 +46,13 @@ msgstr "Neto težina" #. module: delivery #: model:ir.model,name:delivery.model_delivery_grid_line msgid "Delivery Grid Line" -msgstr "" +msgstr "Stavka isporuke" #. module: delivery #: field:stock.move,weight_uom_id:0 #: field:stock.picking,weight_uom_id:0 msgid "Unit of Measure" -msgstr "" +msgstr "Jedinica mjere" #. module: delivery #: view:delivery.carrier:0 @@ -81,7 +81,7 @@ msgstr "?Grid line" #. module: delivery #: help:delivery.carrier,partner_id:0 msgid "The partner that is doing the delivery service." -msgstr "" +msgstr "Partner koji obavlja uslugu dostave." #. module: delivery #: model:ir.actions.report.xml,name:delivery.report_shipping @@ -93,21 +93,22 @@ msgstr "Otpremnica" #, python-format msgid "No line matched this product or order in the chosen delivery grid." msgstr "" +"U odabranim stavkama isporuke nema proizvoda ili narudžbe koji ste tražili." #. module: delivery #: model:ir.actions.act_window,name:delivery.action_picking_tree4 msgid "Picking to be invoiced" -msgstr "" +msgstr "Izlazno pakiranje za fakturiranje" #. module: delivery #: field:delivery.carrier,pricelist_ids:0 msgid "Advanced Pricing" -msgstr "" +msgstr "Detaljni sustav cijena" #. module: delivery #: help:delivery.grid,sequence:0 msgid "Gives the sequence order when displaying a list of delivery grid." -msgstr "" +msgstr "Upišite redoslijed prikazivanja za stavke isporuke" #. module: delivery #: view:delivery.grid:0 diff --git a/addons/event/i18n/tr.po b/addons/event/i18n/tr.po index b0ceff63462..9e5fcf67f06 100644 --- a/addons/event/i18n/tr.po +++ b/addons/event/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-03-08 21:26+0000\n" +"PO-Revision-Date: 2013-04-13 17:54+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:38+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: event #: view:event.event:0 @@ -365,7 +365,7 @@ msgstr "Yalnız" #: field:event.event,message_follower_ids:0 #: field:event.registration,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: event #: view:event.event:0 @@ -780,7 +780,7 @@ msgstr "" #: field:event.event,message_is_follower:0 #: field:event.registration,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçi" +msgstr "Bir İzleyicidir" #. module: event #: field:event.registration,user_id:0 diff --git a/addons/fleet/i18n/tr.po b/addons/fleet/i18n/tr.po index c61f6e1821a..96981da6e5a 100644 --- a/addons/fleet/i18n/tr.po +++ b/addons/fleet/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:39+0000\n" -"PO-Revision-Date: 2013-04-06 20:49+0000\n" +"PO-Revision-Date: 2013-04-13 17:55+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-07 06:00+0000\n" -"X-Generator: Launchpad (build 16550)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: fleet #: selection:fleet.vehicle,fuel_type:0 @@ -447,6 +447,19 @@ msgid "" "

          \n" " " msgstr "" +"

          \n" +" Yeni bir sözleşme oluşturmak için tıklayın. \n" +"

          \n" +" Bütün sözleşmelerinizi (kiralama, sigorta, v.b.) ilişkili " +"hizmetleriyle,\n" +" maliyetleriyle birlikte yönetin. Sözleşmelerinizin " +"yenilenmesi gerektiğinde\n" +" OpenERP otomatikman sizi uyaracaktır.\n" +"

          \n" +" Her sözleşme (örn.: kiralama) birçok hizmet içerebilir\n" +" (onarım, sigorta, periyodik bakım).\n" +"

          \n" +" " #. module: fleet #: model:ir.model,name:fleet.model_fleet_service_type @@ -482,6 +495,8 @@ 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 @@ -500,6 +515,15 @@ msgid "" "

          \n" " " msgstr "" +"

          \n" +" Yeni bir maliyet oluşturmak için tıklayın.\n" +"

          \n" +" OpenERP değişik araçlarınızın maliyetlerini yönetmenizi\n" +" sağlar. Maliyetler hizmetlerden, sözleşmelerden (sabit ya da " +"yinelenen),\n" +" ve akaryakıt kayıtlarından otomatikman oluşturulur.\n" +"

          \n" +" " #. module: fleet #: view:fleet.vehicle:0 @@ -535,7 +559,7 @@ msgstr "Fatura Referans" #. module: fleet #: field:fleet.vehicle,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: fleet #: field:fleet.vehicle,location:0 @@ -555,7 +579,7 @@ msgstr "Sözleşme Durumları" #. module: fleet #: field:fleet.vehicle,contract_renewal_total:0 msgid "Total of contracts due or overdue minus one" -msgstr "" +msgstr "Günü gelen ya da günü eksi bir gün geçen sözleşmelerin toplamı" #. module: fleet #: field:fleet.vehicle.cost,cost_subtype_id:0 @@ -565,7 +589,7 @@ msgstr "Türü" #. module: fleet #: field:fleet.vehicle,contract_renewal_overdue:0 msgid "Has Contracts Overdued" -msgstr "" +msgstr "Günü Geçen Sözleşmeler Var" #. module: fleet #: field:fleet.vehicle.cost,amount:0 @@ -740,6 +764,10 @@ msgid "" "

          \n" " " msgstr "" +"

          \n" +" Yeni bir marka oluşturmak için tıklayın.\n" +"

          \n" +" " #. module: fleet #: field:fleet.vehicle.log.contract,start_date:0 @@ -905,7 +933,7 @@ msgstr "Birim" #. module: fleet #: field:fleet.vehicle,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçisi mi" +msgstr "Bir İzleyicidir" #. module: fleet #: field:fleet.vehicle,horsepower:0 @@ -1133,7 +1161,7 @@ msgstr "Alternatör Değiştirme" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_3 msgid "A/C Diagnosis" -msgstr "" +msgstr "A/C Diagnostik" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_23 @@ -1176,6 +1204,13 @@ msgid "" "

          \n" " " msgstr "" +"

          \n" +" Yeni bir model oluşturmak için tıklayın.\n" +"

          \n" +" Her marka (Audi) için birçok model (örn. A3, A4) " +"tanımlayabilirsiniz.\n" +"

          \n" +" " #. module: fleet #: model:ir.actions.act_window,help:fleet.fleet_vehicle_act @@ -1856,6 +1891,13 @@ msgid "" "

          \n" " " msgstr "" +"

          \n" +" Yeni bir hizmet türü oluşturmak için tıklayın.\n" +"

          \n" +" Her hizmet sözleşmelerde hem bağımsız bir servis olarak ya " +"da birlikte kullanılabilir.\n" +"

          \n" +" " #. module: fleet #: view:board.board:0 @@ -1891,7 +1933,7 @@ msgstr "Lastikler" #. module: fleet #: model:fleet.service.type,name:fleet.type_service_42 msgid "Starter Replacement" -msgstr "" +msgstr "Marş Değişimi" #. module: fleet #: view:fleet.vehicle.cost:0 @@ -1907,7 +1949,7 @@ msgstr "Araç plaka numarasını (ie:araba için plaka numarası)" #. module: fleet #: model:ir.model,name:fleet.model_fleet_contract_state msgid "Contains the different possible status of a leasing contract" -msgstr "" +msgstr "Bir kiralama sözleşmesinin değişik olası durumlarını içerir" #. module: fleet #: view:fleet.vehicle:0 @@ -1924,13 +1966,15 @@ msgstr "Toplam" msgid "" "Choose wheter the service refer to contracts, vehicle services or both" msgstr "" +"Hizmetin sözleşmelerle mi, araç hizmetleriyle mi ya da her ikisiyle de mi " +"ilgili olduunu seçin" #. module: fleet #: help:fleet.vehicle.cost,cost_type:0 msgid "For internal purpose only" -msgstr "" +msgstr "Yalnızca iç amaçlar için" #. module: fleet #: help:fleet.vehicle.state,sequence:0 msgid "Used to order the note stages" -msgstr "" +msgstr "Not aşamalarını sıralamak için kullanılır" diff --git a/addons/hr/i18n/tr.po b/addons/hr/i18n/tr.po index 7c03dbd2d88..6a97e0347d8 100644 --- a/addons/hr/i18n/tr.po +++ b/addons/hr/i18n/tr.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-10 14:59+0000\n" +"PO-Revision-Date: 2013-04-13 17:56+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:40+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: hr #: model:process.node,name:hr.process_node_openerpuser0 @@ -284,7 +284,7 @@ msgstr "Ofis Konumu" #. module: hr #: field:hr.job,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: hr #: view:hr.employee:0 @@ -593,7 +593,7 @@ msgstr "SGK No" #. module: hr #: field:hr.job,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçi" +msgstr "Bir İzleyicidir" #. module: hr #: field:hr.config.settings,module_hr_recruitment:0 diff --git a/addons/hr_attendance/i18n/tr.po b/addons/hr_attendance/i18n/tr.po index 3ed80b02417..b9cde5c0661 100644 --- a/addons/hr_attendance/i18n/tr.po +++ b/addons/hr_attendance/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2012-12-21 23:00+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-04-11 19:38+0000\n" +"Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:40+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-12 06:05+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: hr_attendance #: model:ir.model,name:hr_attendance.model_hr_attendance_month @@ -30,7 +30,7 @@ msgstr "İK Devamlılık Ara" #. module: hr_attendance #: field:hr.employee,last_sign:0 msgid "Last Sign" -msgstr "" +msgstr "Son Giriş" #. module: hr_attendance #: view:hr.attendance:0 @@ -44,12 +44,12 @@ msgstr "Devamlılık" #: code:addons/hr_attendance/static/src/js/attendance.js:34 #, python-format msgid "Last sign in: %s,
          %s.
          Click to sign out." -msgstr "" +msgstr "Son giriş: %s,
          %s.
          Çıkış için tıklayın." #. module: hr_attendance #: constraint:hr.attendance:0 msgid "Error ! Sign in (resp. Sign out) must follow Sign out (resp. Sign in)" -msgstr "" +msgstr "Hata! Giriş (Çıkış) Çıkışı (Giriş) izlemelidir" #. module: hr_attendance #: help:hr.action.reason,name:0 @@ -72,7 +72,7 @@ msgstr "Devamlılık Raporunu Aylık olara Yazdır" #: code:addons/hr_attendance/report/timesheet.py:120 #, python-format msgid "Attendances by Week" -msgstr "" +msgstr "Haftalık Devamlılık" #. module: hr_attendance #: selection:hr.action.reason,action_type:0 @@ -97,7 +97,7 @@ msgstr "Ekim" #. module: hr_attendance #: field:hr.employee,attendance_access:0 msgid "Attendance Access" -msgstr "" +msgstr "Katılım Erişimi" #. module: hr_attendance #: code:addons/hr_attendance/hr_attendance.py:154 @@ -111,7 +111,7 @@ msgstr "Çıkış" #: code:addons/hr_attendance/wizard/hr_attendance_error.py:49 #, python-format msgid "No records are found for your selection!" -msgstr "" +msgstr "Seçiminiz için hiç kayıt bulunamadı!" #. module: hr_attendance #: view:hr.attendance.error:0 @@ -177,7 +177,7 @@ msgstr "Uyarı" #. module: hr_attendance #: help:hr.config.settings,group_hr_attendance:0 msgid "Allocates attendance group to all users." -msgstr "" +msgstr "Katılım grubunu bütün kullanıcılara tahsis eder." #. module: hr_attendance #: view:hr.attendance:0 @@ -193,7 +193,7 @@ msgstr "Haziran" #: code:addons/hr_attendance/report/attendance_by_month.py:190 #, python-format msgid "Attendances by Month" -msgstr "" +msgstr "Aylık Devamlılık" #. module: hr_attendance #: model:ir.actions.act_window,name:hr_attendance.action_hr_attendance_week @@ -249,7 +249,7 @@ msgstr "Tarih" #. module: hr_attendance #: field:hr.config.settings,group_hr_attendance:0 msgid "Track attendances for all employees" -msgstr "" +msgstr "Devamlılığı bütün çalışanlar için izle" #. module: hr_attendance #: selection:hr.attendance.month,month:0 @@ -333,7 +333,7 @@ msgstr "Ocak" #: code:addons/hr_attendance/wizard/hr_attendance_error.py:49 #, python-format msgid "No Data Available !" -msgstr "" +msgstr "Hiç veri yok !" #. module: hr_attendance #: selection:hr.attendance.month,month:0 @@ -407,14 +407,14 @@ msgstr "Haftalık Devamlılık Raporunu yazdır" #. module: hr_attendance #: model:ir.model,name:hr_attendance.model_hr_config_settings msgid "hr.config.settings" -msgstr "" +msgstr "hr.config.settings" #. module: hr_attendance #. openerp-web #: code:addons/hr_attendance/static/src/js/attendance.js:36 #, python-format msgid "Click to Sign In at %s." -msgstr "" +msgstr "%s te Giriş için tıklayın." #. module: hr_attendance #: field:hr.action.reason,action_type:0 @@ -433,6 +433,8 @@ msgid "" "You tried to %s with a date anterior to another event !\n" "Try to contact the HR Manager to correct attendances." msgstr "" +"Başka bir etkinliğin içinde olan bir tarihli %s yapmaya çalıştınız !\n" +"Devamlılıkları düzeltmek için İK Yöneticisine danışın." #. module: hr_attendance #: selection:hr.attendance.month,month:0 @@ -463,7 +465,7 @@ msgstr "" #: view:hr.attendance.month:0 #: view:hr.attendance.week:0 msgid "or" -msgstr "" +msgstr "ya da" #. module: hr_attendance #: help:hr.attendance,action_desc:0 diff --git a/addons/hr_contract/i18n/tr.po b/addons/hr_contract/i18n/tr.po index 91153294d66..91082f2bde8 100644 --- a/addons/hr_contract/i18n/tr.po +++ b/addons/hr_contract/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2012-12-21 23:00+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-04-13 05:28+0000\n" +"Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:40+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: hr_contract #: field:hr.contract,wage:0 @@ -45,7 +45,7 @@ msgstr "Gruplandır..." #. module: hr_contract #: view:hr.contract:0 msgid "Advantages..." -msgstr "" +msgstr "Avantajlar..." #. module: hr_contract #: field:hr.contract,department_id:0 @@ -108,7 +108,7 @@ msgstr "Sözleşme Türleri" #. module: hr_contract #: view:hr.employee:0 msgid "Medical Exam" -msgstr "" +msgstr "Medikal Sınavı" #. module: hr_contract #: field:hr.contract,date_end:0 @@ -169,7 +169,7 @@ msgstr "Çalışma Planı" #. module: hr_contract #: view:hr.contract:0 msgid "Salary and Advantages" -msgstr "" +msgstr "Ücretler ve Avantajlar" #. module: hr_contract #: field:hr.contract,job_id:0 @@ -179,7 +179,7 @@ msgstr "İş Ünvanı" #. module: hr_contract #: constraint:hr.contract:0 msgid "Error! Contract start-date must be less than contract end-date." -msgstr "" +msgstr "Hata! Sözleşme başlama tarihi sözleşme bitiş tarihinden önce olmalı." #. module: hr_contract #: field:hr.employee,manager:0 @@ -199,7 +199,7 @@ msgstr "Vize No" #. module: hr_contract #: field:hr.employee,vehicle_distance:0 msgid "Home-Work Dist." -msgstr "" +msgstr "Ev-İş Mes." #. module: hr_contract #: field:hr.employee,place_of_birth:0 @@ -209,7 +209,7 @@ msgstr "Doğum Yeri" #. module: hr_contract #: view:hr.contract:0 msgid "Trial Period Duration" -msgstr "" +msgstr "Deneme Dönemi Süresi" #. module: hr_contract #: view:hr.contract:0 diff --git a/addons/hr_evaluation/i18n/tr.po b/addons/hr_evaluation/i18n/tr.po index 23c54e7b09b..2b7f918c722 100644 --- a/addons/hr_evaluation/i18n/tr.po +++ b/addons/hr_evaluation/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-02-12 16:38+0000\n" -"Last-Translator: Ali Sağlam \n" +"PO-Revision-Date: 2013-04-13 17:58+0000\n" +"Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:40+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: hr_evaluation #: help:hr_evaluation.plan.phase,send_anonymous_manager:0 @@ -260,7 +260,7 @@ msgstr "Hakkında " #: field:hr.evaluation.interview,message_follower_ids:0 #: field:hr_evaluation.evaluation,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: hr_evaluation #: field:hr.evaluation.interview,message_unread:0 @@ -547,7 +547,7 @@ msgstr " (employee_name)s: Partner adı" #: field:hr.evaluation.interview,message_is_follower:0 #: field:hr_evaluation.evaluation,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçisi mi" +msgstr "Bir İzleyicidir" #. module: hr_evaluation #: view:hr.evaluation.report:0 diff --git a/addons/hr_expense/i18n/tr.po b/addons/hr_expense/i18n/tr.po index 914fbd7615e..1494e8fdd84 100644 --- a/addons/hr_expense/i18n/tr.po +++ b/addons/hr_expense/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-02-06 22:16+0000\n" -"Last-Translator: Ediz Duman \n" +"PO-Revision-Date: 2013-04-14 07:08+0000\n" +"Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:41+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: hr_expense #: view:hr.expense.expense:0 @@ -113,6 +113,8 @@ msgid "" "No expense journal found. Please make sure you have a journal with type " "'purchase' configured." msgstr "" +"Gider günlüğü bulunamadı. Lütfen \"satınalma\" türü olarak yapılandırılmış " +"bir günlüğünüzün olduğundan emin olun." #. module: hr_expense #: model:ir.model,name:hr_expense.model_hr_expense_report @@ -216,6 +218,11 @@ msgid "" "If the admin accepts it, the status is 'Accepted'.\n" " If a receipt is made for the expense request, the status is 'Done'." msgstr "" +"Gider isteği oluşturulduğunda durumu 'Taslak' olur.\n" +" Kullanıcı tarafından onaylanıp yöneticiye gönderildiğinde durumu 'Onay " +"Bekliyor' olur. \n" +"Yönetici kabul ettiğinde durumu 'Kabul Edildi' olur.\n" +" Gider isteği için bir makbuz kesildiğinde durumu 'Yapıldı' olur." #. module: hr_expense #: help:hr.expense.expense,date_confirm:0 @@ -223,6 +230,7 @@ msgid "" "Date of the confirmation of the sheet expense. It's filled when the button " "Confirm is pressed." msgstr "" +"Gider tablosunun onaylanma tarihi. Onayla düğmesine basıldığında doldurulur." #. module: hr_expense #: view:hr.expense.report:0 @@ -236,6 +244,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 "" +"Sohbetçi özetini (mesaj sayısı, ...) barındırır. Bu özet kanban " +"görünümlerine eklenmek üzere doğrudan html biçimindedir." #. module: hr_expense #: code:addons/hr_expense/hr_expense.py:301 @@ -272,17 +282,17 @@ msgstr "Onayla" #. module: hr_expense #: model:process.node,note:hr_expense.process_node_supplierinvoice0 msgid "The accoutant validates the sheet" -msgstr "" +msgstr "Muhasebeci tabloyu doğrular" #. module: hr_expense #: field:hr.expense.report,delay_valid:0 msgid "Delay to Valid" -msgstr "" +msgstr "Onaylama Süresi" #. module: hr_expense #: help:hr.expense.line,sequence:0 msgid "Gives the sequence order when displaying a list of expense lines." -msgstr "" +msgstr "Gider kalemlerinin liste olarak görüntülenme sırasını verir." #. module: hr_expense #: field:hr.expense.expense,state:0 @@ -311,7 +321,7 @@ msgstr "Bekleyen" #. module: hr_expense #: field:hr.expense.expense,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: hr_expense #: report:hr.expense:0 @@ -342,13 +352,13 @@ msgstr "Toplam fiyat" #. module: hr_expense #: model:process.node,note:hr_expense.process_node_reinvoicing0 msgid "Some costs may be reinvoices to the customer" -msgstr "" +msgstr "Bazı maliyetler müşteriye geri fatura edilebilir." #. module: hr_expense #: code:addons/hr_expense/hr_expense.py:197 #, python-format msgid "The employee must have a home address." -msgstr "" +msgstr "Çalışanın bir ev adresi olmalıdır." #. module: hr_expense #: view:board.board:0 @@ -370,18 +380,18 @@ msgstr "İK gigerleri" #. module: hr_expense #: field:hr.expense.expense,id:0 msgid "Sheet ID" -msgstr "" +msgstr "Tablo ID" #. module: hr_expense #: model:process.transition,name:hr_expense.process_transition_reimburseexpense0 msgid "Reimburse expense" -msgstr "" +msgstr "Gider ödeme" #. module: hr_expense #: field:hr.expense.expense,journal_id:0 #: field:hr.expense.report,journal_id:0 msgid "Force Journal" -msgstr "" +msgstr "Günlüğe Zorla" #. module: hr_expense #: view:hr.expense.report:0 @@ -490,7 +500,7 @@ msgstr "Personel bütün giderlerini kodlama" #. module: hr_expense #: view:hr.expense.expense:0 msgid "Free Notes" -msgstr "" +msgstr "Serbest Notlar" #. module: hr_expense #: code:addons/hr_expense/hr_expense.py:301 @@ -498,7 +508,7 @@ msgstr "" msgid "" "Selected Unit of Measure does not belong to the same category as the product " "Unit of Measure" -msgstr "" +msgstr "Seçilen Birim ürün Ölçü Birimi ile aynı kategoriye ait değil" #. module: hr_expense #: help:hr.expense.expense,journal_id:0 @@ -527,6 +537,8 @@ msgid "" "Please configure Default Expense account for Product purchase: " "`property_account_expense_categ`." msgstr "" +"Ürün satınalma için Varsayılan Gider hesabı yapılandırın: " +"`property_account_expense_categ`." #. module: hr_expense #: model:process.transition,note:hr_expense.process_transition_approveexpense0 @@ -561,7 +573,7 @@ msgstr "Taslak Giderleri" #. module: hr_expense #: field:hr.expense.expense,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçisi mi" +msgstr "Bir İzleyicidir" #. module: hr_expense #: model:ir.actions.act_window,name:hr_expense.product_normal_form_view_installer @@ -615,6 +627,16 @@ msgid "" "

          \n" " " msgstr "" +"

          \n" +" Yeni gider kaydı için tıklayın. \n" +"

          \n" +" OpenERP tüm sürecin izlenmesini sağlayacaktır; gider " +"tablosu\n" +" yönetici(ler) tarafından doğrulanır, çalışanın giderleri " +"ödenir\n" +" fbazı giderler müşteriye geri fatura edilebilir.\n" +"

          \n" +" " #. module: hr_expense #: view:hr.expense.expense:0 @@ -745,7 +767,7 @@ msgstr "Kabul" #. module: hr_expense #: report:hr.expense:0 msgid "This document must be dated and signed for reimbursement" -msgstr "" +msgstr "Ödeme için belgeye tarih konulup imzalanmalıdır" #. module: hr_expense #: model:process.transition,note:hr_expense.process_transition_refuseexpense0 @@ -761,6 +783,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 "" +"Bir çalışan için izin verilen her gider türü için bir ürün tanımlayın (araç " +"ile yolculuk, hostel, lokanta, vb.). Çalışana sabit bir tutar ödeme " +"yapıyorsanız, ürüne bir maliyet ve ölçü birimi girin. Gerçek maliyetlere " +"göre ödeme yapıyorsanız, maliyeti 0.00 olarak ayarlayın. Kullanıcı gider " +"tablosunu kaydederken gerçek fiyatı belirtecektir." #. module: hr_expense #: selection:hr.expense.expense,state:0 @@ -826,7 +853,7 @@ msgstr "Gider doğruladı, Onay bekliyor" #. module: hr_expense #: report:hr.expense:0 msgid "Ref." -msgstr "" +msgstr "Ref." #. module: hr_expense #: field:hr.expense.report,employee_id:0 @@ -917,7 +944,7 @@ msgstr "Giderler" #. module: hr_expense #: help:product.product,hr_expense_ok:0 msgid "Specify if the product can be selected in an HR expense line." -msgstr "" +msgstr "Ürünün İK gider kalemlerinden seçilebileceğini belirleyin." #. module: hr_expense #: view:hr.expense.expense:0 diff --git a/addons/hr_holidays/i18n/tr.po b/addons/hr_holidays/i18n/tr.po index 9cbde0eee79..0612a75eb2e 100644 --- a/addons/hr_holidays/i18n/tr.po +++ b/addons/hr_holidays/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-02-12 21:49+0000\n" -"Last-Translator: Ediz Duman \n" +"PO-Revision-Date: 2013-04-13 17:59+0000\n" +"Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:41+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: hr_holidays #: selection:hr.holidays.status,color_name:0 @@ -331,7 +331,7 @@ msgstr "Kalan İzinler" #. module: hr_holidays #: field:hr.holidays,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: hr_holidays #: model:ir.model,name:hr_holidays.model_hr_holidays_remaining_leaves_user @@ -641,7 +641,7 @@ msgstr "Daima Alınan İzinler" #. module: hr_holidays #: field:hr.holidays,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçisi mi" +msgstr "Bir İzleyicidir" #. module: hr_holidays #: field:hr.holidays,user_id:0 diff --git a/addons/hr_recruitment/i18n/tr.po b/addons/hr_recruitment/i18n/tr.po index 3e972eddf21..b439b072850 100644 --- a/addons/hr_recruitment/i18n/tr.po +++ b/addons/hr_recruitment/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-21 20:27+0000\n" -"Last-Translator: Ediz Duman \n" +"PO-Revision-Date: 2013-04-13 18:00+0000\n" +"Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:42+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: hr_recruitment #: help:hr.applicant,active:0 @@ -388,7 +388,7 @@ msgstr "Yıl" #. module: hr_recruitment #: field:hr.applicant,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: hr_recruitment #: model:hr.recruitment.source,name:hr_recruitment.source_monster @@ -821,7 +821,7 @@ msgstr "" #. module: hr_recruitment #: field:hr.applicant,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçisi mi" +msgstr "Bir İzleyicidir" #. module: hr_recruitment #: field:hr.recruitment.report,user_id:0 diff --git a/addons/hr_timesheet_invoice/i18n/nl.po b/addons/hr_timesheet_invoice/i18n/nl.po index 22395ce6857..be7c5f9c5f6 100644 --- a/addons/hr_timesheet_invoice/i18n/nl.po +++ b/addons/hr_timesheet_invoice/i18n/nl.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-04-02 14:05+0000\n" +"PO-Revision-Date: 2013-04-12 21:22+0000\n" "Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-03 15:03+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-13 06:31+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: hr_timesheet_invoice #: view:report.timesheet.line:0 @@ -563,7 +563,7 @@ msgstr "Urenstaat per kostenplaats" #. module: hr_timesheet_invoice #: model:ir.model,name:hr_timesheet_invoice.model_account_move_line msgid "Journal Items" -msgstr "Boekingen" +msgstr "Boekingsregels" #. module: hr_timesheet_invoice #: selection:report.account.analytic.line.to.invoice,month:0 diff --git a/addons/hr_timesheet_invoice/i18n/tr.po b/addons/hr_timesheet_invoice/i18n/tr.po index b4be88bd95d..ee65b5d4823 100644 --- a/addons/hr_timesheet_invoice/i18n/tr.po +++ b/addons/hr_timesheet_invoice/i18n/tr.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-02-14 10:55+0000\n" -"Last-Translator: Ediz Duman \n" +"PO-Revision-Date: 2013-04-14 07:12+0000\n" +"Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:43+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: hr_timesheet_invoice #: view:report.timesheet.line:0 @@ -231,6 +231,11 @@ msgid "" "20% advance invoice (fixed price, based on a sales order), you should " "invoice the rest on timesheet with a 80% ratio." msgstr "" +"Genelde zaman çizelgelerinin %100 ünü fatura edersiniz. Ama, sabit fiyat ve " +"zaman çizelgesi faturalamasını karma yapıyorsanız, başka bir oran " +"kullanmalısınız. Örnek olarak, eğer %20 oranında bir ön fatura yapıyorsanız " +"(sabit fiyat, satış siparişlerine göre), geri kalanını zaman çizelgesine " +"göre %80 oranında faturalamalısınız." #. module: hr_timesheet_invoice #: view:hr.timesheet.invoice.create:0 diff --git a/addons/hr_timesheet_sheet/i18n/tr.po b/addons/hr_timesheet_sheet/i18n/tr.po index 14cfa4957c2..45828c032cc 100644 --- a/addons/hr_timesheet_sheet/i18n/tr.po +++ b/addons/hr_timesheet_sheet/i18n/tr.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-02-11 15:41+0000\n" -"Last-Translator: Ediz Duman \n" +"PO-Revision-Date: 2013-04-13 18:01+0000\n" +"Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:43+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: hr_timesheet_sheet #: field:hr.analytic.timesheet,sheet_id:0 @@ -369,7 +369,7 @@ msgstr "ZamanÇizelge satırıları" #. module: hr_timesheet_sheet #: field:hr_timesheet_sheet.sheet,message_follower_ids:0 msgid "Followers" -msgstr "Takipçi" +msgstr "İzleyiciler" #. module: hr_timesheet_sheet #: model:process.node,note:hr_timesheet_sheet.process_node_confirmedtimesheet0 @@ -665,7 +665,7 @@ msgstr "" #. module: hr_timesheet_sheet #: field:hr_timesheet_sheet.sheet,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçisi mi" +msgstr "Bir İzleyicidir" #. module: hr_timesheet_sheet #: view:hr.timesheet.report:0 diff --git a/addons/idea/i18n/tr.po b/addons/idea/i18n/tr.po index cca074ccfa3..2fb746d21c3 100644 --- a/addons/idea/i18n/tr.po +++ b/addons/idea/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2012-12-21 23:00+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-04-13 18:01+0000\n" +"Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:44+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: idea #: view:idea.category:0 @@ -108,7 +108,7 @@ msgstr "" #. module: idea #: field:idea.idea,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "Bir İzleyicidir" #. module: idea #: model:ir.model,name:idea.model_idea_idea @@ -216,7 +216,7 @@ msgstr "Oluşturanlara Göre" #. module: idea #: field:idea.idea,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "İzleyiciler" #. module: idea #: view:idea.category:0 diff --git a/addons/mail/i18n/nl.po b/addons/mail/i18n/nl.po index 600d02c78e7..f1db012d197 100644 --- a/addons/mail/i18n/nl.po +++ b/addons/mail/i18n/nl.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-09 09:55+0000\n" +"PO-Revision-Date: 2013-04-12 21:00+0000\n" "Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:47+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-13 06:31+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: mail #: view:mail.followers:0 @@ -499,7 +499,7 @@ msgstr "Relatie" #. module: mail #: model:ir.ui.menu,name:mail.mail_my_stuff msgid "Organizer" -msgstr "Organizer" +msgstr "Agenda" #. module: mail #: field:mail.compose.message,subject:0 diff --git a/addons/mail/i18n/tr.po b/addons/mail/i18n/tr.po index 1cec0c02e7c..59009e7af48 100644 --- a/addons/mail/i18n/tr.po +++ b/addons/mail/i18n/tr.po @@ -8,19 +8,19 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-04-04 19:08+0000\n" +"PO-Revision-Date: 2013-04-13 18:07+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-05 06:23+0000\n" -"X-Generator: Launchpad (build 16550)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: mail #: view:mail.followers:0 msgid "Followers Form" -msgstr "Takipçi Formu" +msgstr "İzleyici Kartı" #. module: mail #: model:ir.model,name:mail.model_publisher_warranty_contract @@ -214,7 +214,7 @@ msgstr "" #: code:addons/mail/static/src/js/mail_followers.js:159 #, python-format msgid "followers" -msgstr "takipçiler" +msgstr "izleyiciler" #. module: mail #: code:addons/mail/mail_message.py:726 @@ -421,7 +421,7 @@ msgstr "bir notu kayıt et" #: view:mail.group:0 #, python-format msgid "Unfollow" -msgstr "Takip etme" +msgstr "İzleme" #. module: mail #. openerp-web @@ -568,7 +568,7 @@ msgstr "Gönder" #: code:addons/mail/static/src/js/mail_followers.js:155 #, python-format msgid "No followers" -msgstr "Takipçi Yok" +msgstr "İzleyici Yok" #. module: mail #: view:mail.mail:0 @@ -593,7 +593,7 @@ msgstr "İzleyenlere göderilmeyecek bir not ekle" #: field:res.partner,message_follower_ids:0 #, python-format msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: mail #: model:ir.actions.client,name:mail.action_mail_archives_feeds @@ -625,7 +625,7 @@ msgstr "Yeni" #: code:addons/mail/static/src/js/mail_followers.js:157 #, python-format msgid "One follower" -msgstr "Bir takipçi" +msgstr "Bir izleyici" #. module: mail #: field:mail.compose.message,type:0 @@ -703,7 +703,7 @@ msgstr "Mesaj gönderen, kullanıcı önceliklerinden ​​alınan." #: code:addons/mail/wizard/invite.py:40 #, python-format msgid "
          You have been invited to follow a new document.
          " -msgstr "
          Sen yeni bir belge takip etmeye davet edildin.
          " +msgstr "
          Yeni bir belge izlemeye davet edildiniz.
          " #. module: mail #: field:mail.compose.message,parent_id:0 @@ -802,7 +802,7 @@ msgstr "" #: help:mail.followers,res_model:0 #: help:mail.wizard.invite,res_model:0 msgid "Model of the followed resource" -msgstr "Takip kaynağın Modeli" +msgstr "İzlenen kaynağın modeli" #. module: mail #. openerp-web @@ -822,7 +822,7 @@ msgstr "Vazgeç" #: code:addons/mail/static/src/xml/mail.xml:47 #, python-format msgid "Share with my followers..." -msgstr "Benim takipçilerim ile paylaş ..." +msgstr "İzleyicilerim ile paylaş ..." #. module: mail #: field:mail.notification,partner_id:0 @@ -1022,7 +1022,7 @@ msgstr "Mesaj" #: help:mail.followers,res_id:0 #: help:mail.wizard.invite,res_id:0 msgid "Id of the followed resource" -msgstr "Takipçini kayanak ıd si" +msgstr "İzlenen kaynağın Id i" #. module: mail #: field:mail.compose.message,body:0 @@ -1088,7 +1088,7 @@ msgstr "

          Belgeye doğrudanOpenERP den erişin

          " #. module: mail #: view:mail.compose.message:0 msgid "Followers of selected items and" -msgstr "Seçilen öğelerin takipçileri ve" +msgstr "Seçilen öğelerin izleyicileri ve" #. module: mail #: field:mail.alias,alias_force_thread_id:0 @@ -1218,7 +1218,7 @@ msgstr "Sadece Grup Seçilmiş" #: field:mail.thread,message_is_follower:0 #: field:res.partner,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçisi mi" +msgstr "Bir İzleyicidir" #. module: mail #: view:mail.alias:0 @@ -1266,7 +1266,7 @@ msgstr "Kime:" #: code:addons/mail/static/src/xml/mail.xml:193 #, python-format msgid "Write to my followers" -msgstr "Takipçilerin için yaz" +msgstr "İzleyicilerime yaz" #. module: mail #: model:ir.model,name:mail.model_res_groups @@ -1344,7 +1344,7 @@ msgstr "Hata" #: code:addons/mail/static/src/xml/mail_followers.xml:13 #, python-format msgid "Following" -msgstr "Takip" +msgstr "İzleniyor" #. module: mail #: sql_constraint:mail.alias:0 @@ -1427,7 +1427,7 @@ msgstr "Eposta İptal et" #: view:mail.compose.message:0 #, python-format msgid "Followers of" -msgstr "Takipçileri" +msgstr "Bunu izleyicileri" #. module: mail #: help:mail.mail,auto_delete:0 @@ -1456,7 +1456,7 @@ msgstr "Tartışmalar" #: code:addons/mail/static/src/xml/mail_followers.xml:11 #, python-format msgid "Follow" -msgstr "takip etme" +msgstr "İzle" #. module: mail #: model:mail.group,name:mail.group_all_employees @@ -1554,14 +1554,14 @@ msgstr "Açıklama" #. module: mail #: model:ir.model,name:mail.model_mail_followers msgid "Document Followers" -msgstr "Belge Takipçileri" +msgstr "Belge İzleyicileri" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail_followers.xml:35 #, python-format msgid "Remove this follower" -msgstr "Bu takipçisi kaldır" +msgstr "Bu izleyiciyi kaldır" #. module: mail #: selection:res.partner,notification_email_send:0 @@ -1750,7 +1750,7 @@ msgid "" "Message subtypes followed, meaning subtypes that will be pushed onto the " "user's Wall." msgstr "" -"Mesaj alt tipleri izledi, kullanıcının Duvarına iteklenecek al tipler " +"Mesaj alt tipleri izlendi, kullanıcının Duvarına iteklenecek al tipler " "anlamına gelir." #. module: mail diff --git a/addons/marketing_campaign/i18n/nl.po b/addons/marketing_campaign/i18n/nl.po index 98812e44fac..8d4c2ecb5f3 100644 --- a/addons/marketing_campaign/i18n/nl.po +++ b/addons/marketing_campaign/i18n/nl.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-02-25 17:47+0000\n" +"PO-Revision-Date: 2013-04-12 21:30+0000\n" "Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:48+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-13 06:31+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: marketing_campaign #: view:marketing.campaign:0 @@ -379,7 +379,7 @@ msgstr "Naam bron" #. module: marketing_campaign #: field:marketing.campaign.segment,sync_mode:0 msgid "Synchronization mode" -msgstr "Synchronizatie stand" +msgstr "Synchronisatie mode" #. module: marketing_campaign #: view:marketing.campaign:0 diff --git a/addons/marketing_campaign/i18n/tr.po b/addons/marketing_campaign/i18n/tr.po index dc1719f8b0e..7a3c7368c06 100644 --- a/addons/marketing_campaign/i18n/tr.po +++ b/addons/marketing_campaign/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-03-30 19:44+0000\n" +"PO-Revision-Date: 2013-04-13 18:09+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-31 05:57+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: marketing_campaign #: view:marketing.campaign:0 @@ -72,7 +72,7 @@ msgstr "Tetik" #. module: marketing_campaign #: view:marketing.campaign:0 msgid "Follow-Up" -msgstr "Takip" +msgstr "İzleme" #. module: marketing_campaign #: field:campaign.analysis,count:0 @@ -535,7 +535,7 @@ msgstr "Sonraki Etkinlik" #: model:ir.actions.act_window,name:marketing_campaign.action_marketing_campaign_workitem #: model:ir.ui.menu,name:marketing_campaign.menu_action_marketing_campaign_workitem msgid "Campaign Follow-up" -msgstr "" +msgstr "Kampanya İzleme" #. module: marketing_campaign #: view:marketing.campaign:0 diff --git a/addons/mrp/i18n/nl.po b/addons/mrp/i18n/nl.po index 4ece56919f5..ffe4c42466b 100644 --- a/addons/mrp/i18n/nl.po +++ b/addons/mrp/i18n/nl.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-15 16:04+0000\n" +"PO-Revision-Date: 2013-04-14 19:20+0000\n" "Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:49+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: mrp #: help:mrp.config.settings,module_mrp_repair:0 @@ -1847,7 +1847,7 @@ msgstr "Produceren" #: model:process.transition,name:mrp.process_transition_servicemto0 #: model:process.transition,name:mrp.process_transition_stockproduct0 msgid "Make to Order" -msgstr "Maak op bestelling" +msgstr "Maak op order" #. module: mrp #: help:mrp.workcenter,note:0 diff --git a/addons/mrp/i18n/tr.po b/addons/mrp/i18n/tr.po index 547dee9ce86..ec088c14abe 100644 --- a/addons/mrp/i18n/tr.po +++ b/addons/mrp/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-08 21:37+0000\n" +"PO-Revision-Date: 2013-04-13 23:32+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:49+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: mrp #: help:mrp.config.settings,module_mrp_repair:0 @@ -1023,7 +1023,7 @@ msgstr "Üretime Hazır" #: field:mrp.production,message_is_follower:0 #: field:mrp.production.workcenter.line,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçi" +msgstr "Bir İzleyicidir" #. module: mrp #: view:mrp.bom:0 @@ -1181,7 +1181,7 @@ msgstr "Son" #. module: mrp #: model:process.node,name:mrp.process_node_servicemts0 msgid "Make to stock" -msgstr "Stok için Üretim" +msgstr "Stoktan Al" #. module: mrp #: report:bom.structure:0 @@ -1496,7 +1496,7 @@ msgstr "Her üretim işlemi için emniyet günleri." #: model:process.transition,name:mrp.process_transition_servicemts0 #: model:process.transition,name:mrp.process_transition_stockmts0 msgid "Make to Stock" -msgstr "Stoğa Üretim" +msgstr "Stoktan Al" #. module: mrp #: constraint:mrp.production:0 @@ -1805,7 +1805,7 @@ msgstr "Üret" #: model:process.transition,name:mrp.process_transition_servicemto0 #: model:process.transition,name:mrp.process_transition_stockproduct0 msgid "Make to Order" -msgstr "Siparişe Üretim" +msgstr "Sipariş Ver" #. module: mrp #: help:mrp.workcenter,note:0 @@ -2100,7 +2100,7 @@ msgstr "Üretim Verimliliği" #: field:mrp.production,message_follower_ids:0 #: field:mrp.production.workcenter.line,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: mrp #: help:mrp.bom,active:0 diff --git a/addons/mrp_operations/i18n/tr.po b/addons/mrp_operations/i18n/tr.po index 2e66f86f63e..78417dc306e 100644 --- a/addons/mrp_operations/i18n/tr.po +++ b/addons/mrp_operations/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-03-17 12:51+0000\n" +"PO-Revision-Date: 2013-04-14 16:55+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:50+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: mrp_operations #: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_action_form @@ -320,10 +320,9 @@ msgstr "" " İş Emirleri, her üretim emri için yapılması gereken işlemler\n" " listesidir. Bir üretim emrine ait ilk iş emrini " "başlattığınızda,\n" -" üretim emri kendiliğinden başlatıldı olarak işaretlenir.\n" +" üretim emri kendiliğinden başladı olarak işaretlenir.\n" " Bir üretim emrine ait enson işlemi bitirdiğinizde, üretim\n" -" üretim emri kendiliğinden yapıldı olarak işaretlenir ve ilgili " -"related\n" +" emri kendiliğinden yapıldı olarak işaretlenir ve ilgili\n" " ürünler üretilmiş olur.\n" "

          \n" " " @@ -666,7 +665,7 @@ msgstr "" "

          \n" " Ürünleri üretmek ya da montaj etmek ve ham malzeme ile bitmiş\n" " ürünleri kullanmak için üretim işlemleri de yürütmeniz " -"gerekemektedir.\n" +"gerekmektedir.\n" " Üretim işlemleri genellikle İş Emirleri olarak adlandırılır. " "Çeşitli işlemlerin,\n" " mevcut iş yüküne bağlı olarak üretim maliyetleri ve planlama " diff --git a/addons/mrp_repair/i18n/tr.po b/addons/mrp_repair/i18n/tr.po index bdb19c831ad..39e070ec88d 100644 --- a/addons/mrp_repair/i18n/tr.po +++ b/addons/mrp_repair/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-03-08 21:38+0000\n" +"PO-Revision-Date: 2013-04-13 18:10+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:50+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: mrp_repair #: field:mrp.repair.line,move_id:0 @@ -348,7 +348,7 @@ msgstr "Parti Numarası" #. module: mrp_repair #: field:mrp.repair,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: mrp_repair #: field:mrp.repair,fees_lines:0 @@ -581,7 +581,7 @@ msgstr "Etkin ID Bulunamadı" #. module: mrp_repair #: field:mrp.repair,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçi" +msgstr "Bir İzleyicidir" #. module: mrp_repair #: view:mrp.repair:0 diff --git a/addons/note/i18n/tr.po b/addons/note/i18n/tr.po index 505fba449c9..642bbbd4316 100644 --- a/addons/note/i18n/tr.po +++ b/addons/note/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-17 07:39+0000\n" +"PO-Revision-Date: 2013-04-13 18:11+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:51+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: note #: field:note.note,memo:0 @@ -89,7 +89,7 @@ msgstr "" " Notları kişisel görev ve notları düzenlemek için kullanın. " "Bütün\n" " notlar özeldir; başkaları onları görememelidir. Ancak; " -"takipçilerinizi\n" +"izleyicilerinizi\n" " not ile ile davet ederek bazı notlarınızı diğer kişilerle\n" " paylaşabilirsiniz. (Toplantı tutanakları için kullanışlı olur, " "özellikle\n" @@ -146,7 +146,7 @@ msgstr "Aşama Adı" #. module: note #: field:note.note,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçi mi" +msgstr "Bir İzleyicidir" #. module: note #: model:note.stage,name:note.demo_note_stage_02 diff --git a/addons/portal/i18n/tr.po b/addons/portal/i18n/tr.po index 81c538c236b..3a6330eef13 100644 --- a/addons/portal/i18n/tr.po +++ b/addons/portal/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-04-07 08:23+0000\n" +"PO-Revision-Date: 2013-04-14 07:13+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-08 06:20+0000\n" -"X-Generator: Launchpad (build 16550)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: portal #: view:portal.payment.acquirer:0 @@ -440,10 +440,11 @@ msgstr "" "

          \n" " İyi İşler! Gelen kutunuz boş.\n" "

          \n" -" Gelen kutunuz, size gönderilen özel mesajları ya da " -"epostaları, ayrıca\n" -" belgelerle ve izlediğiniz kişilerle ilgili bilgileri de " -"içerir.\n" +" Gelen kutunuz size gönderilen özel mesajları veya e-" +"postaları\n" +" içerir, aynı zamanda izlediğiniz belge ya da kişilerle " +"ilgili \n" +" bilgileri de içerir.\n" "

          \n" " " diff --git a/addons/portal_crm/i18n/tr.po b/addons/portal_crm/i18n/tr.po index 870ea5ff1e7..dd1b24d236c 100644 --- a/addons/portal_crm/i18n/tr.po +++ b/addons/portal_crm/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-04-07 19:34+0000\n" +"PO-Revision-Date: 2013-04-13 18:14+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-08 06:20+0000\n" -"X-Generator: Launchpad (build 16550)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: portal_crm #: selection:portal_crm.crm_contact_us,type:0 @@ -180,7 +180,7 @@ msgstr "Bölge" #. module: portal_crm #: field:portal_crm.crm_contact_us,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: portal_crm #: help:portal_crm.crm_contact_us,partner_id:0 @@ -426,7 +426,7 @@ msgstr "Telefon" #. module: portal_crm #: field:portal_crm.crm_contact_us,message_is_follower:0 msgid "Is a Follower" -msgstr "Takipçidir" +msgstr "Bir İzleyicidir" #. module: portal_crm #: field:portal_crm.crm_contact_us,active:0 diff --git a/addons/portal_hr_employees/i18n/tr.po b/addons/portal_hr_employees/i18n/tr.po index 75d8916a88c..a9dec672975 100644 --- a/addons/portal_hr_employees/i18n/tr.po +++ b/addons/portal_hr_employees/i18n/tr.po @@ -8,19 +8,20 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-03-21 19:59+0000\n" -"Last-Translator: Ediz Duman \n" +"PO-Revision-Date: 2013-04-14 07:15+0000\n" +"Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:53+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: portal_hr_employees #: view:hr.employee:0 msgid "Here you can write information about you to be shown in the portal..." msgstr "" +"Burada portal gösterilmek üzere kendiniz hakkında bilgiler yazabilirsiniz..." #. module: portal_hr_employees #: view:hr.employee:0 @@ -51,7 +52,7 @@ msgstr "Genel" #. module: portal_hr_employees #: help:hr.employee,visibility:0 msgid "Employee's visibility in the portal's contact page" -msgstr "" +msgstr "Portal iletişim sayfasında çalışanların görünürlüğü" #. module: portal_hr_employees #: selection:hr.employee,visibility:0 @@ -71,7 +72,7 @@ msgstr "Personel" #. module: portal_hr_employees #: view:hr.employee:0 msgid "Job" -msgstr "" +msgstr "İş" #. module: portal_hr_employees #: field:hr.employee,visibility:0 diff --git a/addons/portal_sale/i18n/nl.po b/addons/portal_sale/i18n/nl.po index 426d9a00488..83209c7606a 100644 --- a/addons/portal_sale/i18n/nl.po +++ b/addons/portal_sale/i18n/nl.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-03-21 09:39+0000\n" +"PO-Revision-Date: 2013-04-14 11:56+0000\n" "Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:53+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: portal_sale #: model:ir.model,name:portal_sale.model_account_config_settings @@ -209,7 +209,8 @@ msgstr "" "   Uw referentie: ${object.client_order_ref}
          \n" " % endif\n" " % if object.user_id:\n" -"   Your contact: ${object.user_id.name}\n" " % endif\n" "

          \n" diff --git a/addons/procurement/i18n/fr.po b/addons/procurement/i18n/fr.po index f669fb127ac..a86b3f8860e 100644 --- a/addons/procurement/i18n/fr.po +++ b/addons/procurement/i18n/fr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-11 14:43+0000\n" -"X-Generator: Launchpad (build 16550)\n" +"X-Launchpad-Export-Date: 2013-04-12 06:05+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: procurement #: model:ir.ui.menu,name:procurement.menu_stock_sched diff --git a/addons/procurement/i18n/nl.po b/addons/procurement/i18n/nl.po index 94fff018134..d52b88f7a56 100644 --- a/addons/procurement/i18n/nl.po +++ b/addons/procurement/i18n/nl.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-03-15 16:59+0000\n" +"PO-Revision-Date: 2013-04-14 19:18+0000\n" "Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:53+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: procurement #: model:ir.ui.menu,name:procurement.menu_stock_sched @@ -47,7 +47,7 @@ msgid "" msgstr "" "Activeert de automatische verwerving voor alle producten met een virtuele " "voorraad van minder dan 0. Het is beter deze optie niet te gebruiken en " -"gebruik te maken van de \"Maak op bestelling\" instellingen van producten." +"gebruik te maken van de \"Maak op order\" instellingen van producten." #. module: procurement #: view:stock.warehouse.orderpoint:0 @@ -820,8 +820,7 @@ msgid "" msgstr "" "Maak op voorraad: Wanneer benodigd wordt het product van voorraad gehaald of " "er wordt gewacht op een aanvulling. \n" -"Maak op bestelling: Wanneeer benodigd wordt het product beteld of " -"geproduceerd." +"Maak op order: Wanneer benodigd wordt het product besteld of geproduceerd." #. module: procurement #: field:mrp.property,composition:0 diff --git a/addons/procurement/i18n/tr.po b/addons/procurement/i18n/tr.po index 8ff7b21a96f..ddee3c2f0fc 100644 --- a/addons/procurement/i18n/tr.po +++ b/addons/procurement/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-03-22 07:38+0000\n" +"PO-Revision-Date: 2013-04-14 17:32+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:54+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: procurement #: model:ir.ui.menu,name:procurement.menu_stock_sched @@ -338,7 +338,7 @@ msgstr "Bekliyor" #. module: procurement #: field:procurement.order,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: procurement #: field:procurement.order,location_id:0 @@ -440,7 +440,7 @@ msgid "" " " msgstr "" "

          \n" -" Bir tedarik isteği oluşturmak için tıkla. \n" +" Bir tedarik isteği oluşturmak için tıklayın. \n" "

          \n" " Bir tedarik emri, belirli bir konumdaki belirli bir ürün " "için bir\n" @@ -683,7 +683,7 @@ msgstr "Ençok Miktar" #. module: procurement #: field:procurement.order,message_is_follower:0 msgid "Is a Follower" -msgstr "Takipçidir" +msgstr "Bir İzleyicidir" #. module: procurement #: code:addons/procurement/procurement.py:367 diff --git a/addons/product/i18n/nl.po b/addons/product/i18n/nl.po index 9e0dd15b887..05a6df79c51 100644 --- a/addons/product/i18n/nl.po +++ b/addons/product/i18n/nl.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-04-09 19:39+0000\n" +"PO-Revision-Date: 2013-04-14 14:31+0000\n" "Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-10 05:54+0000\n" -"X-Generator: Launchpad (build 16550)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: product #: field:product.packaging,rows:0 @@ -837,7 +837,7 @@ msgstr "Leverancier van het product" #. module: product #: model:product.template,name:product.product_product_28_product_template msgid "External Hard disk" -msgstr "Externae Harddisk" +msgstr "Externe Harddisk" #. module: product #: view:product.product:0 diff --git a/addons/product/i18n/tr.po b/addons/product/i18n/tr.po index 9e54b4fd2a9..00dd92b6583 100644 --- a/addons/product/i18n/tr.po +++ b/addons/product/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-04-06 20:54+0000\n" +"PO-Revision-Date: 2013-04-13 18:15+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-07 06:01+0000\n" -"X-Generator: Launchpad (build 16550)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: product #: field:product.packaging,rows:0 @@ -994,7 +994,7 @@ msgstr "Ürün Fiyat Türü" #. module: product #: field:product.product,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçi" +msgstr "Bir İzleyicidir" #. module: product #: field:product.product,price_extra:0 @@ -2145,7 +2145,7 @@ msgstr "Çoklu Ortam Hoparlörleri" #. module: product #: field:product.product,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: product #: view:product.product:0 diff --git a/addons/project/i18n/ro.po b/addons/project/i18n/ro.po index ba8f5dfe3f0..1d8d86ca594 100644 --- a/addons/project/i18n/ro.po +++ b/addons/project/i18n/ro.po @@ -8,19 +8,19 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-07 19:14+0000\n" -"Last-Translator: Fekete Mihai \n" +"PO-Revision-Date: 2013-04-13 15:26+0000\n" +"Last-Translator: Dorin \n" "Language-Team: Romanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:56+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: project #: view:project.project:0 msgid "Email Interface" -msgstr "Interfata Email" +msgstr "Interfață Email" #. module: project #: help:account.analytic.account,use_tasks:0 @@ -36,17 +36,17 @@ msgstr "" #: view:report.project.task.user:0 #: field:report.project.task.user,progress:0 msgid "Progress" -msgstr "In desfasurare" +msgstr "În desfășurare" #. module: project #: model:process.node,name:project.process_node_taskbydelegate0 msgid "Task by delegate" -msgstr "Sarcina dupa delegat" +msgstr "Sarcină după delegat" #. module: project #: view:project.project:0 msgid "Parent" -msgstr "Parinte" +msgstr "Părinte" #. module: project #: model:ir.actions.act_window,name:project.dblc_proj @@ -61,12 +61,12 @@ msgstr "Numele etapei" #. module: project #: model:process.transition.action,name:project.process_transition_action_openpendingtask0 msgid "Set pending" -msgstr "Setati in asteptare" +msgstr "Setați în așteptare" #. module: project #: view:project.project:0 msgid "New Project Based on Template" -msgstr "Proiect nou bazat pe un Sablon" +msgstr "Proiect nou bazat pe un Șablon" #. module: project #: view:report.project.task.user:0 @@ -82,7 +82,7 @@ msgstr "Unire" #. module: project #: view:res.partner:0 msgid "Start Task" -msgstr "Incepeti Sarcina" +msgstr "Incepeți sarcina" #. module: project #: code:addons/project/project.py:932 @@ -94,17 +94,17 @@ msgstr "Avertizare !" #: help:project.project,message_unread:0 #: help:project.task,message_unread:0 msgid "If checked new messages require your attention." -msgstr "Daca este selectat, mesajele noi necesita atentia dumneavoastra." +msgstr "Dacă este selectat, mesajele noi necesită atenția dumneavoastră." #. module: project #: model:process.node,name:project.process_node_donetask0 msgid "Done task" -msgstr "Sarcina efectuata" +msgstr "Sarcină efectuată" #. module: project #: model:process.node,note:project.process_node_donetask0 msgid "Task is Completed" -msgstr "Sarcina este finalizata" +msgstr "Sarcina este finalizată" #. module: project #: view:res.partner:0 @@ -201,7 +201,7 @@ msgstr "Titlul Validarii Sarcinii" #. module: project #: model:res.groups,name:project.group_delegate_task msgid "Task Delegation" -msgstr "Delegare Sarcina" +msgstr "Delegare Sarcină" #. module: project #: field:project.project,planned_hours:0 @@ -237,7 +237,7 @@ msgstr "Sugestie de contact" #. module: project #: help:project.config.settings,group_time_work_estimation_tasks:0 msgid "Allows you to compute Time Estimation on tasks." -msgstr "Va permite sa calculati Estimarea Timpului in sarcini." +msgstr "Va permite să calculați Estimarea Timpului în sarcini." #. module: project #: field:report.project.task.user,user_id:0 @@ -248,7 +248,7 @@ msgstr "Atribuit lui" #: model:mail.message.subtype,name:project.mt_project_task_closed #: model:mail.message.subtype,name:project.mt_task_closed msgid "Task Done" -msgstr "Sarcina Efectuata" +msgstr "Sarcină Efectuată" #. module: project #: view:project.project:0 @@ -289,7 +289,7 @@ msgstr "Delegat Sarcina Proiect" #: model:mail.message.subtype,name:project.mt_project_task_started #: model:mail.message.subtype,name:project.mt_task_started msgid "Task Started" -msgstr "Sarcina Inceputa" +msgstr "Sarcină începută" #. module: project #: view:project.task:0 @@ -299,7 +299,7 @@ msgstr "Foarte Important" #. module: project #: view:project.config.settings:0 msgid "Support" -msgstr "Asistenta" +msgstr "Asistență" #. module: project #: view:project.project:0 @@ -309,7 +309,7 @@ msgstr "Membru" #. module: project #: view:project.task:0 msgid "Cancel Task" -msgstr "Anuleaza Sarcina" +msgstr "Anulează Sarcina" #. module: project #: help:project.project,members:0 @@ -405,7 +405,7 @@ msgstr "" #: view:project.task:0 #: view:project.task.history.cumulative:0 msgid "In Progress Tasks" -msgstr "Sarcini in desfasurare" +msgstr "Sarcini în desfășurare" #. module: project #: help:res.company,project_time_mode_id:0 @@ -445,7 +445,7 @@ msgstr "Manager Proiecte" #: selection:project.task.type,state:0 #: selection:report.project.task.user,state:0 msgid "In Progress" -msgstr "In curs de desfasurare" +msgstr "În desfășurare" #. module: project #: view:project.task:0 diff --git a/addons/project/i18n/tr.po b/addons/project/i18n/tr.po index beb2b057270..8278fd7faab 100644 --- a/addons/project/i18n/tr.po +++ b/addons/project/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-30 19:36+0000\n" +"PO-Revision-Date: 2013-04-14 07:42+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-31 05:57+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: project #: view:project.project:0 @@ -187,6 +187,10 @@ msgid "" "users. You can analyse the quantities of tasks, the hours spent compared to " "the planned hours, the average number of days to open or close a task, etc." msgstr "" +"Bu rapor projelerinizin ve kullanıcılarınızın performansını incelemenizi " +"sağlar. Görevlerin miktarını, planlanan süreler göre harcanan süreleri " +"karşılaştırmaya, bir görevin açılması ya da kapatılması için gerekli " +"ortalama gün sayısını, vb." #. module: project #: view:project.task.delegate:0 @@ -888,7 +892,7 @@ msgstr "bilinmeyen" #: field:project.project,message_is_follower:0 #: field:project.task,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçisi mi" +msgstr "Bir İzleyicidir" #. module: project #: field:project.task.history,date:0 @@ -982,6 +986,9 @@ msgid "" "projects. It enables you to connect projects with budgets, planning, cost " "and revenue analysis, timesheets on projects, etc." msgstr "" +"Projeleriniz üzerinde finansal yönetim yapmak isterseniz bu projeyi bir " +"analitik hesaba bağlayın. Bu projelerinizi bütçelere, planlamaya, maliyet ve " +"gelir incelemelerine, proje zaman çizelgelerine bağlanmanızı sağlar." #. module: project #: model:process.transition.action,name:project.process_transition_action_draftcanceltask0 @@ -1023,8 +1030,8 @@ msgid "" "Follow this project to automatically track the events associated to tasks " "and issues of this project." msgstr "" -"Otomatik görevler ile ilişkili etkinlikler izlemek için bu projeyi takip " -"etBu projenin ve sorunları." +"Otomatik görevler ile ilişkili görevleri ve sorunları izlemek için bu " +"projeyi izle." #. module: project #: view:project.task:0 @@ -1222,6 +1229,9 @@ msgid "" "stage. For example, if a stage is related to the status 'Close', when your " "document reaches this stage, it is automatically closed." msgstr "" +"Belgenizin durumu seçilen aşamaya göre kendiliğinden değişecektir. Örneğin, " +"bir aşama 'Kapalı' durumu ile ilişkiliyse, belgeniz bu duruma eriştiğinde " +"kendiliğinden kapanır." #. module: project #: view:project.task:0 @@ -1262,6 +1272,9 @@ msgid "" "automatically synchronizedwith Tasks (or optionally Issues if the Issue " "Tracker module is installed)." msgstr "" +"Bu proje ile ilişkili iç eposta. Gelen epostalar Görevlerle kendiliğinden " +"eşleştirilir (ya da eğer Sorun İzleme modülü kuruluysa seçmeli olarak " +"Sorunlarla)." #. module: project #: model:ir.actions.act_window,help:project.open_task_type_form @@ -1277,6 +1290,15 @@ msgid "" "

          \n" " " msgstr "" +"

          \n" +" Görev kanalına bir aşama eklemek için tıklayın.\n" +"

          \n" +" Projede kullanılacak adımları görev oluşturma işleminden\n" +" tanımlayın, görevin ya da sorunun kapanışına kadar.\n" +" Bu aşamaları, görev ya da sorunun çözümlenme işlemlerinin\n" +" izlenmesinde kullanacaksınız.\n" +"

          \n" +" " #. module: project #: help:project.task,total_hours:0 @@ -1374,6 +1396,8 @@ msgid "" "If the task has a progress of 99.99% you should close the task if it's " "finished or reevaluate the time" msgstr "" +"Bir görev %99.9 luk bir ilerlemeye ulaşmışsa görev bitmişse kapatabilirsiniz " +"ya da süreyi yeniden değerlendirebilirsiniz" #. module: project #: field:project.task,user_email:0 @@ -1440,6 +1464,8 @@ msgid "" "New state of your own task. Pending will be reopened automatically when the " "delegated task is closed" msgstr "" +"Görevinizi yeni durumu. Bekleyen, atanan görev kapandığında kendiliğinden " +"yeniden açılacaktır" #. module: project #: help:project.config.settings,group_manage_delegation_task:0 @@ -1459,7 +1485,7 @@ msgstr "Projenin kategorileri görev, sorun, ..." #. module: project #: help:project.project,resource_calendar_id:0 msgid "Timetable working hours to adjust the gantt diagram report" -msgstr "" +msgstr "Gantt çizelgesini ayarlayacak çalışma süreleri zaman tablosu" #. module: project #: help:project.task,delay_hours:0 @@ -1467,6 +1493,8 @@ msgid "" "Computed as difference between planned hours by the project manager and the " "total hours of the task." msgstr "" +"Proje yöneticisi tarafından planlanan saat ve görevin toplam saatleri " +"arasındaki fark olarak hesaplanır." #. module: project #: view:project.config.settings:0 @@ -1489,6 +1517,8 @@ msgid "" "Estimated time to do the task, usually set by the project manager when the " "task is in draft state." msgstr "" +"Görevi yapabilmek için gerekli süre, genellikle görevler taslak " +"durumundayken proje yöneticisi tarafından ayarlanır." #. module: project #: code:addons/project/project.py:220 @@ -1508,6 +1538,9 @@ msgid "" "You cannot delete a project containing tasks. You can either delete all the " "project's tasks and then delete the project or simply deactivate the project." msgstr "" +"Görevler içeren bir projeyi silemezsiniz. Ya projenin bütün görevlerini " +"silebilir ve sonra projeyi silebilir ya da basitçe projeyi devre dışı " +"bırakabilirsiniz." #. module: project #: model:process.transition.action,name:project.process_transition_action_draftopentask0 @@ -1826,7 +1859,7 @@ msgstr "# nın Günleri" #: field:project.project,message_follower_ids:0 #: field:project.task,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: project #: selection:project.project,state:0 @@ -1984,6 +2017,8 @@ msgstr "" #: help:project.task.delegate,planned_hours:0 msgid "Estimated time to close this task by the delegated user" msgstr "" +"Görevlendirilen kullanıcı tarafından bu görevin kapatılması için öngörülen " +"süre" #. module: project #: model:project.category,name:project.project_category_03 @@ -2179,7 +2214,7 @@ msgstr "" #. module: project #: selection:project.project,privacy_visibility:0 msgid "Followers Only" -msgstr "Sadece Takipçilere" +msgstr "Yalnızca İzleyiciler" #. module: project #: view:board.board:0 diff --git a/addons/project_issue/i18n/tr.po b/addons/project_issue/i18n/tr.po index 41fa422324b..eca36722751 100644 --- a/addons/project_issue/i18n/tr.po +++ b/addons/project_issue/i18n/tr.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-02-25 18:49+0000\n" +"PO-Revision-Date: 2013-04-13 18:18+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:57+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: project_issue #: model:project.category,name:project_issue.project_issue_category_03 @@ -304,7 +304,7 @@ msgstr "Versiyon" #. module: project_issue #: field:project.issue,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: project_issue #: view:project.issue:0 @@ -605,7 +605,7 @@ msgstr "Kapanma Gün" #. module: project_issue #: field:project.issue,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçisi mi" +msgstr "Bir İzleyicidir" #. module: project_issue #: help:project.issue,state:0 diff --git a/addons/project_mrp/i18n/tr.po b/addons/project_mrp/i18n/tr.po index 6235b83030e..f787de50e14 100644 --- a/addons/project_mrp/i18n/tr.po +++ b/addons/project_mrp/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-03-02 16:56+0000\n" +"PO-Revision-Date: 2013-04-13 18:20+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:57+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: project_mrp #: model:process.node,note:project_mrp.process_node_procuretasktask0 @@ -91,7 +91,7 @@ msgid "" "order." msgstr "" "yapılacaklar \n" -" işlerinin takibi oluşturulacak. Bu görev, satış " +" işlerin izlenmesi oluşturulacak. Bu görev, satış " "siparişi\n" " sözleşmesi ile ilişkili projede görünecektir." diff --git a/addons/purchase/i18n/fr.po b/addons/purchase/i18n/fr.po index 4edf5f30abb..0ee069c790f 100644 --- a/addons/purchase/i18n/fr.po +++ b/addons/purchase/i18n/fr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-06 15:52+0000\n" -"Last-Translator: Thibaud-Cogitae \n" +"PO-Revision-Date: 2013-04-12 08:06+0000\n" +"Last-Translator: WANTELLET Sylvain \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:58+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-13 06:31+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: purchase #: model:res.groups,name:purchase.group_analytic_accounting @@ -841,7 +841,7 @@ msgstr "Mouvements de stock" #: code:addons/purchase/purchase.py:1156 #, python-format msgid "Draft Purchase Order created" -msgstr "" +msgstr "Bon de commande d'achat brouillon créé" #. module: purchase #: model:ir.ui.menu,name:purchase.menu_product_category_config_purchase @@ -915,7 +915,7 @@ msgstr "" #. module: purchase #: view:product.product:0 msgid "will be created in order to subcontract the job" -msgstr "" +msgstr "sera créé pour sous-traiter l'opération" #. module: purchase #: model:ir.actions.act_window,name:purchase.action_purchase_line_product_tree @@ -988,7 +988,7 @@ msgstr "Date approbation" #. module: purchase #: view:product.product:0 msgid "a draft purchase order" -msgstr "" +msgstr "un bon de commande d'achat brouillon" #. module: purchase #: model:email.template,body_html:purchase.email_template_edi_purchase diff --git a/addons/purchase/i18n/tr.po b/addons/purchase/i18n/tr.po index 72f31a8573b..c5359ac38d0 100644 --- a/addons/purchase/i18n/tr.po +++ b/addons/purchase/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-17 12:18+0000\n" +"PO-Revision-Date: 2013-04-14 17:43+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:58+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: purchase #: model:res.groups,name:purchase.group_analytic_accounting @@ -192,7 +192,7 @@ msgstr "Toplam Fiyat" #: report:purchase.quotation:0 #: field:purchase.report,expected_date:0 msgid "Expected Date" -msgstr "Umulan Tarih" +msgstr "Beklenen Tarih" #. module: purchase #: report:purchase.order:0 @@ -914,7 +914,7 @@ msgstr "Bu belgenin oluşturulduğu tarih." #. module: purchase #: field:purchase.order,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçi" +msgstr "Bir İzleyicidir" #. module: purchase #: model:ir.actions.act_window,name:purchase.action_purchase_order_report_graph @@ -1120,11 +1120,11 @@ msgstr "" "
          \n" "\n" -"

          Sayın$ ${object.partner_id.name},

          \n" +"

          Sayın ${object.partner_id.name},

          \n" " \n" "

          Burada ${object.company_id.name} tarafından yapılan bir " -"${object.state in ('draft', 'sent') and 'request for quotation' or 'purchase " -"order confirmation'} bulunmaktadır:

          \n" +"${object.state in ('draft', 'sent') and 'teklif isteği' or 'satınalma " +"siparişi onayı'} bulunmaktadır:

          \n" " \n" "

          \n" "   REFERANSLAR
          \n" @@ -2076,7 +2076,7 @@ msgstr "" #. module: purchase #: field:purchase.order,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: purchase #: help:purchase.config.settings,module_purchase_requisition:0 @@ -2347,7 +2347,7 @@ msgstr "Açıklama" #. module: purchase #: report:purchase.quotation:0 msgid "Expected Delivery address:" -msgstr "Umulan Teslimat adresi:" +msgstr "Beklenen Teslimat Adresi" #. module: purchase #: selection:purchase.report,month:0 diff --git a/addons/purchase_requisition/i18n/tr.po b/addons/purchase_requisition/i18n/tr.po index b014dd4d3a9..e71db0f7d7a 100644 --- a/addons/purchase_requisition/i18n/tr.po +++ b/addons/purchase_requisition/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-03-08 20:49+0000\n" +"PO-Revision-Date: 2013-04-14 17:11+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:59+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: purchase_requisition #: view:purchase.requisition:0 @@ -99,7 +99,7 @@ msgstr "Satınalma Yapıldı" #. module: purchase_requisition #: field:purchase.requisition,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: purchase_requisition #: view:purchase.requisition:0 @@ -217,7 +217,7 @@ msgstr "veya" #. module: purchase_requisition #: view:purchase.requisition:0 msgid "Reset to Draft" -msgstr "Taslağa Sıfırla" +msgstr "Taslağa Ayarla" #. module: purchase_requisition #: view:purchase.requisition:0 @@ -237,7 +237,7 @@ msgstr "Sipariş Referansı" #. module: purchase_requisition #: field:purchase.requisition,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçi" +msgstr "Bir İzleyicidir" #. module: purchase_requisition #: field:purchase.requisition.line,product_qty:0 @@ -382,7 +382,7 @@ msgstr "Satınalma İsteği Partner" #. module: purchase_requisition #: help:purchase.requisition,message_unread:0 msgid "If checked new messages require your attention." -msgstr "Eğer seçilirse yeni mesajlar dikkat gerektirir." +msgstr "İşaretliyse yeni mesajlar ilginizi gerektirir." #. module: purchase_requisition #: report:purchase.requisition:0 @@ -397,7 +397,7 @@ msgstr "Satınalma siparişleri" #. module: purchase_requisition #: field:purchase.requisition,date_end:0 msgid "Requisition Deadline" -msgstr "İstek ZamanSınırı" +msgstr "İstek Bitiş Tarihi" #. module: purchase_requisition #: field:purchase.requisition,message_summary:0 @@ -438,7 +438,7 @@ msgstr "Yönetici" #. module: purchase_requisition #: selection:purchase.requisition,exclusive:0 msgid "Purchase Requisition (exclusive)" -msgstr "Alış İsteği (özel)" +msgstr "Satınalma İsteği (özel)" #. module: purchase_requisition #: help:purchase.requisition,message_summary:0 @@ -452,13 +452,13 @@ msgstr "" #. module: purchase_requisition #: report:purchase.requisition:0 msgid "Product UoM" -msgstr "Ürün UoM" +msgstr "Ürün Ölçü Birimi" #. module: purchase_requisition #: code:addons/purchase_requisition/purchase_requisition.py:134 #, python-format msgid "Warning!" -msgstr "Uyar!" +msgstr "Uyarı!" #. module: purchase_requisition #: view:purchase.requisition:0 diff --git a/addons/sale/i18n/hu.po b/addons/sale/i18n/hu.po index c899f0efd6b..7de1afd677e 100644 --- a/addons/sale/i18n/hu.po +++ b/addons/sale/i18n/hu.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-10 20:14+0000\n" -"Last-Translator: krnkris \n" +"PO-Revision-Date: 2013-04-11 23:17+0000\n" +"Last-Translator: Krisztian Eyssen \n" "Language-Team: Hungarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 06:00+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-12 06:05+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: sale #: model:ir.model,name:sale.model_mail_compose_message @@ -25,7 +25,7 @@ msgstr "Email összeállító varázsló" #. module: sale #: field:sale.order,currency_id:0 msgid "Currency" -msgstr "Deviza" +msgstr "Pénznem" #. module: sale #: view:sale.report:0 @@ -42,7 +42,7 @@ msgstr "Nem lehet visszavonni ezt a megrendelést!" #. module: sale #: field:sale.config.settings,module_warning:0 msgid "Allow configuring alerts by customer or products" -msgstr "Engedélyezi a riasztás beállítását vevőkre vagy termékekre" +msgstr "Engedélyezi riasztás beállítását vevők vagy termékek szerint" #. module: sale #: help:sale.config.settings,group_invoice_so_lines:0 @@ -75,17 +75,6 @@ msgstr "A partner akihez a szóban forgó terméket tulajdonítani kell." msgid "Contract / Analytic" msgstr "Szerződés / Gyüjő,Elemző" -#. module: sale -#: selection:sale.order,state:0 -#: selection:sale.report,state:0 -msgid "Waiting Schedule" -msgstr "Várakozás ütemezés" - -#. module: sale -#: field:sale.order,note:0 -msgid "Terms and conditions" -msgstr "Kikötések és feltételek" - #. module: sale #: model:ir.actions.act_window,name:sale.action_orders #: model:ir.ui.menu,name:sale.menu_sale_order @@ -96,18 +85,13 @@ msgstr "Vevői megrendelések" #. module: sale #: help:sale.order,amount_tax:0 msgid "The tax amount." -msgstr "Az adó összege" +msgstr "Az adó összege." #. module: sale #: field:sale.order,invoiced_rate:0 msgid "Invoiced Ratio" msgstr "Számlázáskori árfolyam" -#. module: sale -#: selection:sale.order,order_policy:0 -msgid "On Demand" -msgstr "Készleten" - #. module: sale #: model:res.groups,name:sale.group_analytic_accounting msgid "Analytic Accounting for Sales" @@ -1193,6 +1177,22 @@ msgstr "Tervezet" msgid "Email Templates" msgstr "E-mail sablonok" +#. module: sale +#: selection:sale.order,state:0 +#: selection:sale.report,state:0 +msgid "Waiting Schedule" +msgstr "Ütemezésre vár" + +#. module: sale +#: field:sale.order,note:0 +msgid "Terms and conditions" +msgstr "Kikötések és feltételek" + +#. module: sale +#: selection:sale.order,order_policy:0 +msgid "On Demand" +msgstr "Készleten" + #. module: sale #: selection:sale.report,month:0 msgid "August" diff --git a/addons/sale/i18n/nl.po b/addons/sale/i18n/nl.po index 62cf52c8230..fb0836f42d9 100644 --- a/addons/sale/i18n/nl.po +++ b/addons/sale/i18n/nl.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-04-11 13:02+0000\n" +"PO-Revision-Date: 2013-04-14 19:19+0000\n" "Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-11 14:43+0000\n" -"X-Generator: Launchpad (build 16550)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: sale #: model:res.groups,name:sale.group_analytic_accounting @@ -266,7 +266,7 @@ msgstr "Verkooporderregels welke zich bevinden in de 'gereed' status." #. module: sale #: selection:sale.order.line,type:0 msgid "on order" -msgstr "Maak op bestelling" +msgstr "Maak op order" #. module: sale #: field:sale.order,message_ids:0 @@ -2113,7 +2113,7 @@ msgstr "Eigenschappen op regels" #. module: sale #: selection:sale.order,state:0 msgid "Sale to Invoice" -msgstr "Verkopen om te factureren" +msgstr "Verkopen te factureren" #. module: sale #: view:sale.order:0 diff --git a/addons/sale/i18n/ro.po b/addons/sale/i18n/ro.po index b6b399b00cb..dff14764e6c 100644 --- a/addons/sale/i18n/ro.po +++ b/addons/sale/i18n/ro.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-04-02 16:28+0000\n" -"Last-Translator: Dorin \n" +"PO-Revision-Date: 2013-04-13 15:27+0000\n" +"Last-Translator: Fekete Mihai \n" "Language-Team: Romanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-03 15:03+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: sale #: model:email.template,body_html:sale.email_template_edi_sale @@ -210,7 +210,7 @@ msgstr "Tablou de bord Vânzări" #: code:addons/sale/wizard/sale_make_invoice_advance.py:92 #, python-format msgid "There is no income account defined as global property." -msgstr "Nu exista niciun cont de venituri definit ca proprietate globala." +msgstr "Nu există nici un cont de venituri definit ca proprietate globală." #. module: sale #: model:ir.actions.act_window,name:sale.action_order_line_tree2 @@ -238,7 +238,7 @@ msgstr "Alocare partener" #. module: sale #: model:ir.actions.act_window,name:sale.action_view_sale_advance_payment_inv msgid "Invoice Order" -msgstr "Factureaza Comanda" +msgstr "Facturează Comanda" #. module: sale #: view:sale.config.settings:0 @@ -279,7 +279,7 @@ msgstr "" #: view:sale.order.line:0 #: field:sale.report,product_uom:0 msgid "Unit of Measure" -msgstr "Unitatea de Masura" +msgstr "Unitatea de măsură" #. module: sale #: field:sale.order.line,type:0 @@ -289,12 +289,12 @@ msgstr "Metoda de aprovizionare" #. module: sale #: help:sale.order,date_confirm:0 msgid "Date on which sales order is confirmed." -msgstr "Data la care comanda de vanzare este confirmata." +msgstr "Data la care comanda de vânzare este confirmată." #. module: sale #: field:account.config.settings,module_sale_analytic_plans:0 msgid "Use multiple analytic accounts on sales" -msgstr "Folositi conturi analitice multiple pentru vanzari" +msgstr "Folosții conturi analitice multiple pentru vânzări" #. module: sale #: selection:sale.report,month:0 @@ -305,18 +305,19 @@ msgstr "Martie" #: code:addons/sale/sale.py:567 #, python-format msgid "First cancel all invoices attached to this sales order." -msgstr "Mai intai anulati toate facturile atasate acetei comenzi de vanzari." +msgstr "" +"Mai întâi anulați toate facturile atașate acestei comenzi de vânzări." #. module: sale #: view:sale.order:0 msgid "Quotation Number" -msgstr "Numarul Cotatiei" +msgstr "Numărul cotației" #. module: sale #: view:sale.order:0 #: field:sale.order,message_unread:0 msgid "Unread Messages" -msgstr "Mesaje Necitite" +msgstr "Mesaje necitite" #. module: sale #: field:sale.order,company_id:0 @@ -335,28 +336,28 @@ msgstr "Data facturii" #. module: sale #: model:ir.actions.act_window,name:sale.action_order_line_tree3 msgid "Uninvoiced and Delivered Lines" -msgstr "Linii Nefacturate si Livrate" +msgstr "Linii Nefacturate și Livrate" #. module: sale #: model:mail.message.subtype,description:sale.mt_order_confirmed msgid "Quotation confirmed" -msgstr "Cotatie confirmata" +msgstr "Cotație confirmată" #. module: sale #: selection:sale.order,state:0 #: selection:sale.report,state:0 msgid "Invoice Exception" -msgstr "Exceptie factura" +msgstr "Excepție factură" #. module: sale #: view:sale.order:0 msgid "Quotation " -msgstr "Cotatie " +msgstr "Cotație " #. module: sale #: selection:sale.order,state:0 msgid "Draft Quotation" -msgstr "Cotatie Ciorna" +msgstr "Cotație Ciornă" #. module: sale #: field:sale.order,partner_shipping_id:0 @@ -390,12 +391,12 @@ msgstr "Zi" #: model:process.transition.action,name:sale.process_transition_action_cancelorder0 #: view:sale.order:0 msgid "Cancel Order" -msgstr "Anuleaza Comanda" +msgstr "Anulează comanda" #. module: sale #: field:sale.order.line,th_weight:0 msgid "Weight" -msgstr "Greutate" +msgstr "Masă" #. module: sale #: view:sale.config.settings:0 @@ -405,23 +406,23 @@ msgstr "Caracteristicile Depozitului" #. module: sale #: field:sale.config.settings,time_unit:0 msgid "The default working time unit for services is" -msgstr "Unitatea implicita a programului de lucru este" +msgstr "Unitatea implicită a programului de lucru este" #. module: sale #: field:sale.order.line,product_uom:0 msgid "Unit of Measure " -msgstr "Unitatea de masura " +msgstr "Unitatea de măsură " #. module: sale #: code:addons/sale/wizard/sale_make_invoice_advance.py:101 #, python-format msgid "Incorrect Data" -msgstr "Date Incorecte" +msgstr "Date incorecte" #. module: sale #: view:sale.order.line:0 msgid "Cancel Line" -msgstr "Anulati Linia" +msgstr "Anulați linia" #. module: sale #: help:sale.config.settings,group_discount_per_so_line:0 @@ -457,7 +458,7 @@ msgstr "Taxe" #. module: sale #: field:sale.order,amount_untaxed:0 msgid "Untaxed Amount" -msgstr "Suma neimpozitata" +msgstr "Sumă neimpozitată" #. module: sale #: field:sale.config.settings,module_project:0 @@ -515,7 +516,7 @@ msgstr "" #: selection:sale.order.line,state:0 #: selection:sale.report,state:0 msgid "Cancelled" -msgstr "Anulat(a)" +msgstr "Anulat(ă)" #. module: sale #: view:sale.order.line:0 @@ -526,7 +527,7 @@ msgstr "" #. module: sale #: selection:sale.order,state:0 msgid "Quotation Sent" -msgstr "Cotatie Trimisa" +msgstr "Cotație trimisă" #. module: sale #: model:ir.model,name:sale.model_mail_compose_message @@ -536,13 +537,13 @@ msgstr "Wizardul de compunere email-uri" #. module: sale #: help:sale.order,message_unread:0 msgid "If checked new messages require your attention." -msgstr "Daca este selectat, mesajele noi necesita atentia dumneavoastra." +msgstr "Dacă este selectat, mesajele noi necesită atenția dumneavoastră." #. module: sale #: selection:sale.order,state:0 #: selection:sale.report,state:0 msgid "Shipping Exception" -msgstr "Exceptie la expediere" +msgstr "Excepție la expediere" #. module: sale #: field:sale.order.line,product_uos_qty:0 @@ -570,7 +571,7 @@ msgstr "Adresa de facturare" #. module: sale #: help:sale.order,create_date:0 msgid "Date on which sales order is created." -msgstr "Data la care comanda de vanzare este creata." +msgstr "Data la care comanda de vânzare a fost creată." #. module: sale #: view:res.partner:0 @@ -580,7 +581,7 @@ msgstr "Fals" #. module: sale #: view:sale.order:0 msgid "Terms and conditions..." -msgstr "Termeni si conditii..." +msgstr "Termeni și condiții..." #. module: sale #: help:sale.advance.payment.inv,advance_payment_method:0 @@ -602,7 +603,7 @@ msgstr "" #: view:sale.make.invoice:0 #: view:sale.order.line.make.invoice:0 msgid "Create Invoices" -msgstr "Creeaza facturi" +msgstr "Crează facturi" #. module: sale #: report:sale.order:0 @@ -615,7 +616,7 @@ msgstr "Taxa" #: code:addons/sale/sale.py:983 #, python-format msgid "Invalid Action!" -msgstr "Actiune Nevalida!" +msgstr "Acțiune nevalidă!" #. module: sale #: help:sale.order,state:0 @@ -706,7 +707,7 @@ msgstr "Caracteristici Contract" #: selection:sale.order,state:0 #, python-format msgid "Sales Order" -msgstr "Comanda de vanzare" +msgstr "Comandă de vânzare" #. module: sale #: model:res.groups,name:sale.group_invoice_so_lines @@ -716,12 +717,12 @@ msgstr "Activati Liniile Comenzii de vanzare de facturare" #. module: sale #: model:ir.model,name:sale.model_sale_order_line msgid "Sales Order Line" -msgstr "Linie comanda de vanzare" +msgstr "Linie comandă de vânzare" #. module: sale #: field:sale.advance.payment.inv,amount:0 msgid "Advance Amount" -msgstr "Suma in avans" +msgstr "Sumă în avans" #. module: sale #: help:sale.order,invoice_exists:0 @@ -757,7 +758,7 @@ msgstr "Termen de plata implicit" #. module: sale #: model:process.transition.action,name:sale.process_transition_action_confirm0 msgid "Confirm" -msgstr "Confirma" +msgstr "Confirmă" #. module: sale #: field:sale.config.settings,timesheet:0 @@ -776,12 +777,12 @@ msgstr "" #: view:board.board:0 #: model:ir.actions.act_window,name:sale.action_turnover_by_month msgid "Monthly Turnover" -msgstr "Cifra de afaceri lunara" +msgstr "Cifra de afaceri lunară" #. module: sale #: selection:sale.order,invoice_quantity:0 msgid "Shipped Quantities" -msgstr "Cantitati expediate" +msgstr "Cantități expediate" #. module: sale #: view:sale.report:0 @@ -797,7 +798,7 @@ msgstr "Permite folosirea diferitelor unitati de masura" #. module: sale #: model:mail.message.subtype,name:sale.mt_order_confirmed msgid "Sales Order Confirmed" -msgstr "Comanda de Vanzare Confirmata" +msgstr "Comanda de vânzare confirmată" #. module: sale #: view:sale.order:0 @@ -807,18 +808,18 @@ msgstr "Comenzi de vanzare care nu au fost confirmate inca" #. module: sale #: view:sale.order:0 msgid "Print" -msgstr "Printeaza" +msgstr "Printează" #. module: sale #: report:sale.order:0 msgid "Order N°" -msgstr "Nr Comanda" +msgstr "Nr Comandă" #. module: sale #: view:sale.order:0 #: field:sale.order,order_line:0 msgid "Order Lines" -msgstr "Linii comanda" +msgstr "Linii comandă" #. module: sale #: report:sale.order:0 @@ -835,13 +836,13 @@ msgstr "" #. module: sale #: field:sale.order.line,invoice_lines:0 msgid "Invoice Lines" -msgstr "Linii factura" +msgstr "Linii factură" #. module: sale #: view:sale.report:0 #: field:sale.report,price_total:0 msgid "Total Price" -msgstr "Pret total" +msgstr "Preț total" #. module: sale #: help:account.config.settings,group_analytic_account_for_sales:0 @@ -870,7 +871,7 @@ msgstr "Bifati casuta pentru a grupa facturile pentru aceiasi clienti" #: model:ir.actions.act_window,name:sale.action_sale_order_make_invoice #: model:ir.actions.act_window,name:sale.action_view_sale_order_line_make_invoice msgid "Make Invoices" -msgstr "Creeaza Facturi" +msgstr "Crează facturi" #. module: sale #: code:addons/sale/res_config.py:97 @@ -881,7 +882,7 @@ msgstr "Ora" #. module: sale #: field:res.partner,sale_order_count:0 msgid "# of Sales Order" -msgstr "# Comenzii de Vanzare" +msgstr "# Comenzii de Vânzare" #. module: sale #: help:sale.config.settings,timesheet:0 @@ -917,17 +918,17 @@ msgstr "Adresa de facturare pentru comanda curenta de vanzare." #. module: sale #: selection:sale.order,invoice_quantity:0 msgid "Ordered Quantities" -msgstr "Cantitatile comandate" +msgstr "Cantitățile comandate" #. module: sale #: view:sale.report:0 msgid "Ordered Year of the sales order" -msgstr "Anul comenzii de vanzare" +msgstr "Anul comenzii de vânzare" #. module: sale #: model:res.groups,name:sale.group_delivery_invoice_address msgid "Addresses in Sales Orders" -msgstr "Adrese in Comenzile de Vanzare" +msgstr "Adrese în Comenzile de Vânzare" #. module: sale #: field:sale.advance.payment.inv,qtty:0 @@ -949,18 +950,18 @@ msgstr "Liniile Comenzii de Vanzare pregatite sa fie facturate" #. module: sale #: view:sale.report:0 msgid "My Sales" -msgstr "Vanzarile mele" +msgstr "Vânzările mele" #. module: sale #: field:sale.order,name:0 #: field:sale.order.line,order_id:0 msgid "Order Reference" -msgstr "Referinta comanda" +msgstr "Referință comandă" #. module: sale #: field:sale.order,fiscal_position:0 msgid "Fiscal Position" -msgstr "Pozitie fiscala" +msgstr "Poziție fiscală" #. module: sale #: selection:sale.report,month:0 @@ -1002,7 +1003,7 @@ msgstr "" #. module: sale #: view:sale.config.settings:0 msgid "Default Options" -msgstr "Optiuni Implicite" +msgstr "Opțiuni implicite" #. module: sale #: code:addons/sale/sale.py:960 @@ -1044,7 +1045,7 @@ msgstr "Trimite prin Email" #: code:addons/sale/edi/sale_order.py:140 #, python-format msgid "EDI Pricelist (%s)" -msgstr "Lista de preturi EDI (%s)" +msgstr "Listă de prețuri EDI (%s)" #. module: sale #: selection:sale.order,order_policy:0 @@ -1064,7 +1065,7 @@ msgstr "Data comenzii" #. module: sale #: view:sale.order:0 msgid "Sales Order done" -msgstr "Comanda de Vanzare efectuata" +msgstr "Comanda de Vânzare efectuată" #. module: sale #: model:process.transition.action,name:sale.process_transition_action_cancel0 @@ -1072,7 +1073,7 @@ msgstr "Comanda de Vanzare efectuata" #: view:sale.make.invoice:0 #: view:sale.order.line.make.invoice:0 msgid "Cancel" -msgstr "Anuleaza" +msgstr "Anulează" #. module: sale #: model:ir.actions.act_window,name:sale.act_res_partner_2_sale_order @@ -1083,25 +1084,25 @@ msgstr "Cotații și Vânzări" #. module: sale #: field:sale.order,invoiced:0 msgid "Paid" -msgstr "Platit" +msgstr "Plătit" #. module: sale #: help:sale.config.settings,group_uom:0 msgid "" "Allows you to select and maintain different units of measure for products." msgstr "" -"Va permite sa selectati si sa mentineti diferite unitati de masura pentru " +"Vă permite să selectați și să mențineți diferite unități de măsură pentru " "produse." #. module: sale #: view:sale.report:0 msgid "Reference Unit of Measure" -msgstr "Unitatea de Masura de Referinta" +msgstr "Unitatea de măsură de referință" #. module: sale #: view:sale.advance.payment.inv:0 msgid "Create and View Invoice" -msgstr "Creati si Vizualizati Factura" +msgstr "Creați și Vizualizați Factura" #. module: sale #: view:sale.order.line:0 @@ -1111,7 +1112,7 @@ msgstr "Liniile comenzii de vanzare efectuate" #. module: sale #: field:sale.make.invoice,grouped:0 msgid "Group the invoices" -msgstr "Grupeaza facturile" +msgstr "Grupează facturile" #. module: sale #: help:sale.advance.payment.inv,amount:0 @@ -1127,7 +1128,7 @@ msgstr "Vânzările generează factură" #: code:addons/sale/sale.py:308 #, python-format msgid "Pricelist Warning!" -msgstr "Avertizare Lista de preturi!" +msgstr "Avertizare Listă de prețuri!" #. module: sale #: field:sale.order.line,discount:0 @@ -1152,13 +1153,13 @@ msgstr "" #. module: sale #: view:sale.order.line.make.invoice:0 msgid "Create & View Invoice" -msgstr "Creeaza & Vizualizeaza Factura" +msgstr "Crează & Vizualizează Factura" #. module: sale #: view:board.board:0 #: model:ir.actions.act_window,name:sale.action_quotation_for_sale msgid "My Quotations" -msgstr "Cotatiile mele" +msgstr "Cotațiile mele" #. module: sale #: field:sale.order,invoice_ids:0 @@ -1226,7 +1227,7 @@ msgstr "Numele magazinului" #. module: sale #: view:sale.order:0 msgid "My Sales Orders" -msgstr "Comenzile mele de Vanzare" +msgstr "Comenzile mele de vânzare" #. module: sale #: report:sale.order:0 @@ -1243,7 +1244,7 @@ msgstr "Facturat" #: code:addons/sale/wizard/sale_make_invoice_advance.py:202 #, python-format msgid "Advance Invoice" -msgstr "Factura in avans" +msgstr "Factură în avans" #. module: sale #: help:sale.config.settings,group_invoice_so_lines:0 @@ -1257,7 +1258,7 @@ msgstr "" #. module: sale #: model:ir.actions.client,name:sale.action_client_sale_menu msgid "Open Sale Menu" -msgstr "Deschide Meniul Vanzari" +msgstr "Deschide Meniul Vânzări" #. module: sale #: code:addons/sale/sale.py:600 @@ -1268,7 +1269,7 @@ msgstr "Nu puteti confirma o comanda de vanzare care nu are nicio linie." #. module: sale #: selection:sale.report,state:0 msgid "In Progress" -msgstr "In desfasurare" +msgstr "În desfășurare" #. module: sale #: code:addons/sale/sale.py:865 @@ -1285,12 +1286,12 @@ msgstr "Declansati automat comenzile de livrare din comenzile de vanzare" #: view:sale.make.invoice:0 #: view:sale.order.line.make.invoice:0 msgid "Create invoices" -msgstr "Creeaza facturi" +msgstr "Creează facturi" #. module: sale #: selection:sale.order.line,state:0 msgid "Confirmed" -msgstr "Confirmat(a)" +msgstr "Confirmat(ă)" #. module: sale #: code:addons/sale/wizard/sale_make_invoice_advance.py:106 @@ -1306,12 +1307,12 @@ msgstr "Linie comanda de vanzare Creeaza_factura" #. module: sale #: selection:sale.order.line,state:0 msgid "Draft" -msgstr "Ciorna" +msgstr "Ciornă" #. module: sale #: model:ir.actions.act_window,name:sale.action_email_templates msgid "Email Templates" -msgstr "Sabloane e-mail" +msgstr "Șabloane e-mail" #. module: sale #: help:sale.order.line,address_allotment_id:0 @@ -1332,14 +1333,14 @@ msgstr "Programul de asteptare" #. module: sale #: field:sale.order,note:0 msgid "Terms and conditions" -msgstr "Termeni si conditii" +msgstr "Termeni și condiții" #. module: sale #: model:ir.actions.act_window,name:sale.action_orders #: model:ir.ui.menu,name:sale.menu_sale_order #: view:sale.order:0 msgid "Sales Orders" -msgstr "Comenzi de vanzare" +msgstr "Comenzi de vânzări" #. module: sale #: help:sale.order,amount_tax:0 @@ -1414,7 +1415,7 @@ msgstr "Analiza vânzărilor" #. module: sale #: field:sale.order,message_is_follower:0 msgid "Is a Follower" -msgstr "Este o Urmare" +msgstr "Este o Urmăre" #. module: sale #: view:sale.order.line:0 @@ -1428,7 +1429,7 @@ msgstr "" #. module: sale #: model:ir.model,name:sale.model_sale_report msgid "Sales Orders Statistics" -msgstr "Statistici comenzi de vanzare" +msgstr "Statistici comenzi de vânzare" #. module: sale #: field:sale.order,date_order:0 @@ -1454,14 +1455,14 @@ msgstr "Noiembrie" #. module: sale #: view:sale.report:0 msgid "Extended Filters..." -msgstr "Filtre Extinse..." +msgstr "Filtre extinse..." #. module: sale #: model:process.node,name:sale.process_node_quotation0 #: view:sale.order:0 #: selection:sale.report,state:0 msgid "Quotation" -msgstr "Cotatie" +msgstr "Cotație" #. module: sale #: field:sale.advance.payment.inv,product_id:0 @@ -1471,7 +1472,7 @@ msgstr "Avans Produse" #. module: sale #: selection:sale.order.line,state:0 msgid "Exception" -msgstr "Exceptie" +msgstr "Excepție" #. module: sale #: selection:sale.report,month:0 @@ -1531,7 +1532,7 @@ msgstr "Permite setarea unei reduceri in liniile comenzii de vanzare" #. module: sale #: model:ir.actions.act_window,name:sale.action_orders_in_progress msgid "Sales Order in Progress" -msgstr "Comanda de vanzare in desfasurare" +msgstr "Comanda de vânzare în desfășurare" #. module: sale #: view:sale.order.line.make.invoice:0 @@ -1574,12 +1575,12 @@ msgstr "Contul analitic asociat unei comenzi de vanzare." #. module: sale #: view:sale.order:0 msgid "View Invoice" -msgstr "Vizualizeaza Factura" +msgstr "Vizualizează factură" #. module: sale #: field:sale.advance.payment.inv,advance_payment_method:0 msgid "What do you want to invoice?" -msgstr "Ce doriti sa facturati?" +msgstr "Ce doriți să facturați?" #. module: sale #: field:sale.config.settings,group_sale_pricelist:0 @@ -1637,7 +1638,7 @@ msgstr "Angajament in cazul intarzierii" #: view:sale.order:0 #: view:sale.report:0 msgid "Quotations" -msgstr "Cotatii (oferte)" +msgstr "Cotații (oferte)" #. module: sale #: help:account.config.settings,module_sale_analytic_plans:0 @@ -1647,12 +1648,12 @@ msgstr "Permite instalarea modulului sale_analytic_plans." #. module: sale #: view:sale.order:0 msgid "Ignore Exception" -msgstr "Ignora exceptia" +msgstr "Ignoră excepția" #. module: sale #: help:sale.order,partner_shipping_id:0 msgid "Delivery address for current sales order." -msgstr "Adresa de livrare pentru comanda de vanzare curenta." +msgstr "Adresa de livrare pentru comanda de vânzare curentă." #. module: sale #: field:sale.config.settings,module_sale_margin:0 @@ -1673,7 +1674,7 @@ msgstr "" #. module: sale #: report:sale.order:0 msgid "Your Reference" -msgstr "Referinta dumneavoastra" +msgstr "Referinţa d-voastră" #. module: sale #: view:sale.advance.payment.inv:0 @@ -1690,7 +1691,7 @@ msgstr "Data comenzii" #: field:sale.report,pricelist_id:0 #: field:sale.shop,pricelist_id:0 msgid "Pricelist" -msgstr "Lista de preturi" +msgstr "Listă de prețuri" #. module: sale #: report:sale.order:0 @@ -1701,7 +1702,7 @@ msgstr "TVA :" #: code:addons/sale/sale.py:449 #, python-format msgid "Customer Invoices" -msgstr "Facturi client" +msgstr "Facturi clienți" #. module: sale #: model:process.node,note:sale.process_node_order0 @@ -1711,7 +1712,7 @@ msgstr "Comanda de vanzare confirmata pentru facturare." #. module: sale #: field:sale.order.line,sequence:0 msgid "Sequence" -msgstr "Secvenţă" +msgstr "Secvență" #. module: sale #: model:ir.actions.act_window,name:sale.open_board_sales @@ -1746,7 +1747,7 @@ msgstr "din stoc" #. module: sale #: report:sale.order:0 msgid "Quotation Date" -msgstr "Data cotatiei" +msgstr "Data cotației" #. module: sale #: field:sale.order,amount_total:0 @@ -1766,7 +1767,7 @@ msgstr "Efectuat" #. module: sale #: report:sale.order:0 msgid "Invoice address :" -msgstr "Adresa de facturare:" +msgstr "Adresă de facturare:" #. module: sale #: code:addons/sale/wizard/sale_line_invoice.py:124 @@ -1779,28 +1780,28 @@ msgstr "Factura" #. module: sale #: view:sale.order.line:0 msgid "My Sales Order Lines" -msgstr "Liniile Comenzii mele de vanzare" +msgstr "Liniile comenzii mele de vânzare" #. module: sale #: view:sale.order:0 msgid "Cancel Quotation" -msgstr "Anulati Oferta" +msgstr "Anulați Oferta" #. module: sale #: field:sale.order,message_follower_ids:0 msgid "Followers" -msgstr "Urmari" +msgstr "Urmări" #. module: sale #: code:addons/sale/sale.py:944 #, python-format msgid "No Pricelist ! : " -msgstr "Nicio Lista de preturi ! : " +msgstr "Nici o Listă de prețuri ! : " #. module: sale #: view:sale.order:0 msgid "Sales Order " -msgstr "Comanda de Vanzare " +msgstr "Comandă de Vânzare " #. module: sale #: model:mail.message.subtype,description:sale.mt_order_sent @@ -1811,7 +1812,7 @@ msgstr "Trimite Oferta" #. module: sale #: view:sale.order.line:0 msgid "Search Uninvoiced Lines" -msgstr "Cauta Linii Nefacturate" +msgstr "Caută Linii Nefacturate" #. module: sale #: model:ir.model,name:sale.model_account_config_settings @@ -1821,7 +1822,7 @@ msgstr "setari.config.cont" #. module: sale #: sql_constraint:sale.order:0 msgid "Order Reference must be unique per Company!" -msgstr "Referinta comenzii trebuie sa fie unica per Companie!" +msgstr "Referința comenzii trebuie să fie unică per Companie!" #. module: sale #: model:ir.actions.act_window,help:sale.action_order_line_tree2 @@ -1864,7 +1865,7 @@ msgstr "" #. module: sale #: view:sale.advance.payment.inv:0 msgid "Invoice Sales Order" -msgstr "Facturati Comanda de Vanzare" +msgstr "Facturați Comanda de Vânzare" #. module: sale #: help:sale.order,invoice_quantity:0 @@ -1879,7 +1880,7 @@ msgstr "" #. module: sale #: field:sale.config.settings,module_account_analytic_analysis:0 msgid "Use contracts management" -msgstr "Folositi managementul contractelor" +msgstr "Folosiți managementul contractelor" #. module: sale #: code:addons/sale/sale.py:952 @@ -1913,7 +1914,7 @@ msgstr "Factura Vanzare cu Plata in Avans" #: field:sale.order,order_policy:0 #: view:sale.order.line:0 msgid "Create Invoice" -msgstr "Creeaza Factura" +msgstr "Crează factura" #. module: sale #: help:sale.order,amount_untaxed:0 @@ -1923,7 +1924,7 @@ msgstr "Suma neimpozitata." #. module: sale #: view:sale.order.line:0 msgid "Order reference" -msgstr "Referinta comenzii" +msgstr "Referința comenzii" #. module: sale #: help:sale.order,invoiced:0 @@ -1934,7 +1935,7 @@ msgstr "Indica faptul ca o factura a fost platita." #: report:sale.order:0 #: field:sale.order.line,price_unit:0 msgid "Unit Price" -msgstr "Pret unitar" +msgstr "Preț unitar" #. module: sale #: selection:sale.advance.payment.inv,advance_payment_method:0 @@ -1944,7 +1945,7 @@ msgstr "Procentaj" #. module: sale #: view:sale.order:0 msgid "Other Information" -msgstr "Alte informatii" +msgstr "Alte informaţii" #. module: sale #: view:sale.order.line:0 @@ -1962,7 +1963,7 @@ msgstr "Suma totala." #. module: sale #: view:sale.order:0 msgid "Confirm Sale" -msgstr "Confirmati Vanzarea" +msgstr "Confirmați vănzarea" #. module: sale #: code:addons/sale/wizard/sale_make_invoice_advance.py:96 @@ -1989,7 +1990,7 @@ msgstr "" #. module: sale #: report:sale.order:0 msgid "Price" -msgstr "Pret" +msgstr "Preț" #. module: sale #: code:addons/sale/wizard/sale_make_invoice_advance.py:102 @@ -2034,7 +2035,7 @@ msgstr "" #. module: sale #: model:ir.actions.report.xml,name:sale.report_sale_order msgid "Quotation / Order" -msgstr "Cotatie / Comanda" +msgstr "Cotație / Comandă" #. module: sale #: report:sale.order:0 @@ -2101,7 +2102,7 @@ msgstr "" #. module: sale #: model:process.node,note:sale.process_node_invoice0 msgid "To be reviewed by the accountant." -msgstr "Urmeaza a fi verificat(a) de catre contabil." +msgstr "Urmează a fi verificat(ă) de către contabil." #. module: sale #: model:res.groups,name:sale.group_mrp_properties diff --git a/addons/sale/i18n/tr.po b/addons/sale/i18n/tr.po index 8cb765234e7..6d13ec40ea8 100644 --- a/addons/sale/i18n/tr.po +++ b/addons/sale/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-03-08 20:51+0000\n" +"PO-Revision-Date: 2013-04-13 18:22+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 06:00+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: sale #: model:res.groups,name:sale.group_analytic_accounting @@ -1234,7 +1234,7 @@ msgstr "Satış Analizi" #. module: sale #: field:sale.order,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçi" +msgstr "Bir İzleyicidir" #. module: sale #: view:sale.order.line:0 @@ -1605,7 +1605,7 @@ msgstr "Teklif İptal et" #. module: sale #: field:sale.order,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: sale #: code:addons/sale/sale.py:944 diff --git a/addons/sale_analytic_plans/i18n/tr.po b/addons/sale_analytic_plans/i18n/tr.po index 4e6b0b33510..c19c9b907e4 100644 --- a/addons/sale_analytic_plans/i18n/tr.po +++ b/addons/sale_analytic_plans/i18n/tr.po @@ -8,19 +8,19 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:39+0000\n" -"PO-Revision-Date: 2013-02-06 20:42+0000\n" -"Last-Translator: Ahmet Altınışık \n" +"PO-Revision-Date: 2013-04-13 18:23+0000\n" +"Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 06:01+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: sale_analytic_plans #: field:sale.order.line,analytics_id:0 msgid "Analytic Distribution" -msgstr "Analiz Dağılımı" +msgstr "Analitik Dağılım" #. module: sale_analytic_plans #: model:ir.model,name:sale_analytic_plans.model_sale_order diff --git a/addons/share/i18n/ru.po b/addons/share/i18n/ru.po index b48de937be2..b0af722b348 100644 --- a/addons/share/i18n/ru.po +++ b/addons/share/i18n/ru.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:39+0000\n" -"PO-Revision-Date: 2012-12-21 23:00+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-04-12 02:55+0000\n" +"Last-Translator: Paul Korotkov \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 06:01+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-13 06:31+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: share #: code:addons/share/wizard/share_wizard.py:841 @@ -29,11 +29,12 @@ msgstr "Приглашение по сотрудничеству над %s" msgid "" "The share engine has not been able to fetch a record_id for your invitation." msgstr "" +"Механизм совместного доступа не смог обработать record_id Вашего приглашения." #. module: share #: view:share.wizard:0 msgid "Include an Optional Personal Message" -msgstr "" +msgstr "Включить дополнительное персональное сообщение" #. module: share #: field:share.wizard,embed_option_title:0 @@ -76,6 +77,10 @@ msgid "" " %s\n" "\n" msgstr "" +"Документы не прикреплены, Вы можете просмотреть их непосредственно на " +"OpenERP-сервере:\n" +" %s\n" +"\n" #. module: share #: model:ir.module.category,name:share.module_category_share @@ -103,7 +108,7 @@ msgstr "Адрес(URL) совместного доступа" #: field:share.wizard,email_2:0 #: field:share.wizard,email_3:0 msgid "New user email" -msgstr "" +msgstr "Почта нового пользователя" #. module: share #: code:addons/share/wizard/share_wizard.py:886 @@ -123,6 +128,8 @@ msgstr "(Изменено)" #, python-format msgid "You must be a member of the Share/User group to use the share wizard." msgstr "" +"Вы должны быть участником группы совместного доступа для использования " +"мастера." #. module: share #. openerp-web @@ -194,6 +201,8 @@ msgstr "Далее" #, python-format msgid "Action and Access Mode are required to create a shared access." msgstr "" +"Для создания совместного доступа требуется указание действия и режима " +"доступа." #. module: share #: code:addons/share/wizard/share_wizard.py:849 @@ -257,7 +266,7 @@ msgstr "" #. module: share #: view:res.groups:0 msgid "Non-Share Groups" -msgstr "" +msgstr "Обычные группы" #. module: share #: view:share.wizard:0 @@ -586,7 +595,7 @@ msgstr "Группы доступа" #. module: share #: field:share.wizard,invite:0 msgid "Invite users to OpenSocial record" -msgstr "" +msgstr "Пригласить пользователей в запись OpenSocial." #. module: share #: code:addons/share/wizard/share_wizard.py:850 @@ -638,7 +647,7 @@ msgstr "Имя пользователя" #. module: share #: view:res.users:0 msgid "Regular users only (no share user)" -msgstr "Только обычные пользователи (не пользователи совместного доступа)" +msgstr "Обычные пользователи" #. module: share #: field:share.wizard,access_mode:0 diff --git a/addons/stock/i18n/tr.po b/addons/stock/i18n/tr.po index 87374b9ff44..b6c6d5a223c 100644 --- a/addons/stock/i18n/tr.po +++ b/addons/stock/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-04-06 21:35+0000\n" +"PO-Revision-Date: 2013-04-13 18:25+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-07 06:01+0000\n" -"X-Generator: Launchpad (build 16550)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: stock #: field:stock.inventory.line.split,line_exist_ids:0 @@ -2136,7 +2136,7 @@ msgstr "Tarih" #: field:stock.picking.in,message_is_follower:0 #: field:stock.picking.out,message_is_follower:0 msgid "Is a Follower" -msgstr "Bir Takipçisi mi" +msgstr "Bir İzleyicidir" #. module: stock #: view:report.stock.inventory:0 @@ -4283,7 +4283,7 @@ msgstr "" #: field:stock.picking.in,message_follower_ids:0 #: field:stock.picking.out,message_follower_ids:0 msgid "Followers" -msgstr "Takipçiler" +msgstr "İzleyiciler" #. module: stock #: code:addons/stock/stock.py:2585 diff --git a/addons/stock_location/i18n/nl.po b/addons/stock_location/i18n/nl.po index 6c8befaf760..92610ff7a4a 100644 --- a/addons/stock_location/i18n/nl.po +++ b/addons/stock_location/i18n/nl.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: 2013-03-07 08:39+0000\n" -"PO-Revision-Date: 2013-03-09 09:13+0000\n" +"PO-Revision-Date: 2013-04-14 19:19+0000\n" "Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 06:03+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-15 06:07+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: stock_location #: help:product.pulled.flow,company_id:0 @@ -188,7 +188,7 @@ msgstr "Produceren" #. module: stock_location #: selection:product.pulled.flow,procure_method:0 msgid "Make to Order" -msgstr "Maak op bestelling" +msgstr "Maak op order" #. module: stock_location #: selection:product.pulled.flow,procure_method:0 @@ -266,8 +266,8 @@ msgid "" "procurement request." msgstr "" "'Maak op voorraad': wanneer nodig, neem uit de voorraad of wacht op " -"herbevoorrading. 'Maak op bestelling': wanneer nodig, bestel of produceer " -"voor het verwervingsverzoek." +"herbevoorrading. 'Maak op order': wanneer nodig, bestel of produceer voor " +"het verwervingsverzoek." #. module: stock_location #: help:product.pulled.flow,location_id:0 diff --git a/addons/stock_location/i18n/tr.po b/addons/stock_location/i18n/tr.po index bf01390ed6a..b7770e253c2 100644 --- a/addons/stock_location/i18n/tr.po +++ b/addons/stock_location/i18n/tr.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 7.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-07 08:39+0000\n" -"PO-Revision-Date: 2013-03-08 20:54+0000\n" +"PO-Revision-Date: 2013-04-13 23:40+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 06:04+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: stock_location #: help:product.pulled.flow,company_id:0 @@ -190,7 +190,7 @@ msgstr "Sipariş Yapma" #. module: stock_location #: selection:product.pulled.flow,procure_method:0 msgid "Make to Stock" -msgstr "Stokla Yapma" +msgstr "Stoktan Al" #. module: stock_location #: code:addons/stock_location/procurement_pull.py:118 @@ -259,9 +259,9 @@ msgid "" "supplying. 'Make to Order': When needed, purchase or produce for the " "procurement request." msgstr "" -"'Stokla': Gerektiğinde stoktan alın ya da tekrar tedarik edilinceye kadar " -"bekleyin. 'Sipariş Ver': Gerektiğinde, satın alın ya da satınalma talebi " -"oluşturun." +"Stoktan Al: Gerektiğinde ürün stoktan alınacaktır ya da yeniden tedarik " +"edilmesi beklenecektir. Sipariş Ver: Gerektiğinde ürün, tedarik isteği " +"üzerine satınalınır ya da üretilir." #. module: stock_location #: help:product.pulled.flow,location_id:0 diff --git a/addons/web/i18n/tr.po b/addons/web/i18n/tr.po index 5e2b6a2f37a..6aec91fe057 100644 --- a/addons/web/i18n/tr.po +++ b/addons/web/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:39+0000\n" -"PO-Revision-Date: 2013-04-02 19:33+0000\n" +"PO-Revision-Date: 2013-04-11 20:33+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-03 15:03+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-12 06:05+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: web #. openerp-web @@ -82,7 +82,7 @@ msgstr "Ana Parolayı Değiştir." #: code:addons/web/static/src/js/chrome.js:507 #, python-format msgid "Do you really want to delete the database: %s ?" -msgstr "Gerçekten %s veritabanını silmek istiyor musunuz?" +msgstr "Gerçekten bu veritabanını silmek istiyor musunuz: %s?" #. module: web #. openerp-web diff --git a/addons/web_calendar/i18n/lt.po b/addons/web_calendar/i18n/lt.po index 9a9e40aabaf..073cee4438a 100644 --- a/addons/web_calendar/i18n/lt.po +++ b/addons/web_calendar/i18n/lt.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:39+0000\n" -"PO-Revision-Date: 2012-12-21 23:00+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-04-13 14:55+0000\n" +"Last-Translator: Giedrius Slavinskas - inovera.lt \n" "Language-Team: Lithuanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-29 05:10+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: web_calendar #. openerp-web @@ -29,14 +29,14 @@ msgstr "Naujas įvykis" #: code:addons/web_calendar/static/src/js/calendar.js:156 #, python-format msgid "Details" -msgstr "Išsami informacija" +msgstr "Išsamiau" #. module: web_calendar #. openerp-web #: code:addons/web_calendar/static/src/js/calendar.js:487 #, python-format msgid "Edit: %s" -msgstr "" +msgstr "Keisti: %s" #. module: web_calendar #. openerp-web @@ -50,7 +50,7 @@ msgstr "Išsaugoti" #: code:addons/web_calendar/static/src/js/calendar.js:101 #, python-format msgid "Calendar view has a 'date_delay' type != float" -msgstr "" +msgstr "Calendar view has a 'date_delay' type != float" #. module: web_calendar #. openerp-web @@ -79,14 +79,14 @@ msgstr "Visą dieną" #: code:addons/web_calendar/static/src/js/calendar.js:174 #, python-format msgid "Description" -msgstr "Aprašas" +msgstr "Aprašymas" #. module: web_calendar #. openerp-web #: code:addons/web_calendar/static/src/js/calendar.js:160 #, python-format msgid "Event will be deleted permanently, are you sure?" -msgstr "Įvykis bus pašalintas, sutinkate?" +msgstr "Įvykis bus ištrintas, ar esate tikri?" #. module: web_calendar #. openerp-web @@ -115,21 +115,21 @@ msgstr "Diena" #: code:addons/web_calendar/static/src/js/calendar.js:157 #, python-format msgid "Edit" -msgstr "Redaguoti" +msgstr "Keisti" #. module: web_calendar #. openerp-web #: code:addons/web_calendar/static/src/js/calendar.js:169 #, python-format msgid "Enabled" -msgstr "Įjungtas" +msgstr "Įgalintas" #. module: web_calendar #. openerp-web #: code:addons/web_calendar/static/src/js/calendar.js:166 #, python-format msgid "Do you want to edit the whole set of repeated events?" -msgstr "Ar norite redaguoti visus pasikartojančius įvykius?" +msgstr "Ar norite keisti visą eilę pasikartojančių įvykių?" #. module: web_calendar #. openerp-web @@ -143,7 +143,7 @@ msgstr "Filtras" #: code:addons/web_calendar/static/src/js/calendar.js:167 #, python-format msgid "Repeat event" -msgstr "Pasikartojantis įvykis" +msgstr "Pakartoti įvykį" #. module: web_calendar #. openerp-web @@ -158,7 +158,7 @@ msgstr "Dienotvarkė" #: code:addons/web_calendar/static/src/js/calendar.js:450 #, python-format msgid "Create: %s" -msgstr "" +msgstr "Sukurti: %s" #. module: web_calendar #. openerp-web @@ -172,7 +172,7 @@ msgstr "Laikotarpis" #: code:addons/web_calendar/static/src/js/calendar.js:158 #, python-format msgid "Delete" -msgstr "Pašalinti" +msgstr "Trinti" #. module: web_calendar #. openerp-web @@ -186,7 +186,7 @@ msgstr "Mėnesis" #: code:addons/web_calendar/static/src/js/calendar.js:168 #, python-format msgid "Disabled" -msgstr "Išjungtas" +msgstr "Neįgalintas" #. module: web_calendar #. openerp-web @@ -214,4 +214,4 @@ msgstr "Kalendorius" #: code:addons/web_calendar/static/src/js/calendar.js:93 #, python-format msgid "Calendar view has not defined 'date_start' attribute." -msgstr "" +msgstr "Calendar view has not defined 'date_start' attribute." diff --git a/addons/web_diagram/i18n/lt.po b/addons/web_diagram/i18n/lt.po index cef402c5c77..456fbb515f8 100644 --- a/addons/web_diagram/i18n/lt.po +++ b/addons/web_diagram/i18n/lt.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:39+0000\n" -"PO-Revision-Date: 2012-12-21 23:00+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-04-13 14:32+0000\n" +"Last-Translator: Giedrius Slavinskas - inovera.lt \n" "Language-Team: Lithuanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-29 05:10+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: web_diagram #. openerp-web @@ -23,7 +23,7 @@ msgstr "" #: code:addons/web_diagram/static/src/js/diagram.js:317 #, python-format msgid "Open: " -msgstr "" +msgstr "Atverti: " #. module: web_diagram #. openerp-web @@ -35,6 +35,10 @@ msgid "" "\n" "Are you sure ?" msgstr "" +"Mazgo ištrynimo nebus galima atšaukti.\n" +"Tai taip pat ištrins visus mazgo perėjimus.\n" +"\n" +"Ar esate įsitikinęs?" #. module: web_diagram #. openerp-web @@ -71,7 +75,7 @@ msgstr "Veikla" #: code:addons/web_diagram/static/src/js/diagram.js:420 #, python-format msgid "%d / %d" -msgstr "" +msgstr "%d / %d" #. module: web_diagram #. openerp-web @@ -86,7 +90,7 @@ msgstr "Sukurti:" #: code:addons/web_diagram/static/src/js/diagram.js:185 #, python-format msgid "Are you sure?" -msgstr "Jūs esate įsitikinęs?" +msgstr "Ar esate įsitikinęs?" #. module: web_diagram #. openerp-web @@ -97,3 +101,6 @@ msgid "" "\n" "Are you sure ?" msgstr "" +"Perėjimo ištrynimo nebus galima atšaukti.\n" +"\n" +"Ar esate įsitikinęs?" diff --git a/addons/web_graph/i18n/lt.po b/addons/web_graph/i18n/lt.po index f2d8e4a595a..278ec6871b2 100644 --- a/addons/web_graph/i18n/lt.po +++ b/addons/web_graph/i18n/lt.po @@ -8,28 +8,28 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:39+0000\n" -"PO-Revision-Date: 2012-12-21 23:00+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-04-13 15:09+0000\n" +"Last-Translator: Giedrius Slavinskas - inovera.lt \n" "Language-Team: Lithuanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-29 05:10+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:12 #, python-format msgid "Bars" -msgstr "" +msgstr "Juostinė" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:33 #, python-format msgid "Show Data" -msgstr "" +msgstr "Rodyti duomenis" #. module: web_graph #. openerp-web @@ -43,95 +43,95 @@ msgstr "Diagrama" #: code:addons/web_graph/static/src/xml/web_graph.xml:25 #, python-format msgid "Inside" -msgstr "" +msgstr "Viduje" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:3 #, python-format msgid "í" -msgstr "" +msgstr "í" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:11 #, python-format msgid "Pie" -msgstr "" +msgstr "Skritulinė" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:28 #, python-format msgid "Actions" -msgstr "" +msgstr "Veiksmai" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:7 #, python-format msgid "Graph Mode" -msgstr "" +msgstr "Diagramos tipas" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:18 #, python-format msgid "Radar" -msgstr "" +msgstr "Radarinė" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:34 #, python-format msgid "Download as PNG" -msgstr "" +msgstr "Parsisiųsti kaip PNG" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:26 #, python-format msgid "Top" -msgstr "" +msgstr "Viršuje" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:24 #, python-format msgid "Hidden" -msgstr "" +msgstr "Paslėpta" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:3 #, python-format msgid "Graph Options" -msgstr "" +msgstr "Diagramos pasirinktys" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:14 #, python-format msgid "Lines" -msgstr "" +msgstr "Linijinė" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:20 #, python-format msgid "Legend" -msgstr "" +msgstr "Legenda" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:32 #, python-format msgid "Switch Axis" -msgstr "" +msgstr "Sukeisti ašis" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:15 #, python-format msgid "Areas" -msgstr "" +msgstr "Plokštuminė" diff --git a/addons/web_kanban/i18n/lt.po b/addons/web_kanban/i18n/lt.po index 498ab431038..8f3708b92cf 100644 --- a/addons/web_kanban/i18n/lt.po +++ b/addons/web_kanban/i18n/lt.po @@ -8,77 +8,77 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:39+0000\n" -"PO-Revision-Date: 2012-12-21 23:00+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-04-13 14:46+0000\n" +"Last-Translator: Giedrius Slavinskas - inovera.lt \n" "Language-Team: Lithuanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-29 05:10+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/js/kanban.js:686 #, python-format msgid "Edit column" -msgstr "" +msgstr "Keisti skiltį" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:80 #, python-format msgid "Show more... (" -msgstr "" +msgstr "Rodyti daugiau... (" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/js/kanban.js:10 #, python-format msgid "Kanban" -msgstr "" +msgstr "Kanban" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/js/kanban.js:539 #, python-format msgid "Undefined" -msgstr "Nenurodyta" +msgstr "Neapibrėžta" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/js/kanban.js:705 #, python-format msgid "Are you sure to remove this column ?" -msgstr "" +msgstr "Ar tikrai norite ištrinti šią skiltį?" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:47 #, python-format msgid "Edit" -msgstr "" +msgstr "Keisti" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/js/kanban.js:192 #, python-format msgid "Add column" -msgstr "" +msgstr "Pridėti skiltį" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/js/kanban.js:1082 #, python-format msgid "Create: " -msgstr "" +msgstr "Sukurti: " #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:24 #, python-format msgid "Add a new column" -msgstr "" +msgstr "Pridėti skiltį" #. module: web_kanban #. openerp-web @@ -86,56 +86,56 @@ msgstr "" #: code:addons/web_kanban/static/src/xml/web_kanban.xml:45 #, python-format msgid "Fold" -msgstr "" +msgstr "Sutraukti" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:98 #, python-format msgid "Add" -msgstr "" +msgstr "Pridėti" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:35 #, python-format msgid "Quick create" -msgstr "" +msgstr "Greitas sukūrimas" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/js/kanban.js:918 #, python-format msgid "Are you sure you want to delete this record ?" -msgstr "" +msgstr "Ar tikrai norite ištrinti šį įrašą?" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/js/kanban.js:677 #, python-format msgid "Unfold" -msgstr "" +msgstr "Išskleisti" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:99 #, python-format msgid "Cancel" -msgstr "" +msgstr "Atšaukti" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:80 #, python-format msgid "remaining)" -msgstr "" +msgstr "liko)" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/js/kanban.js:421 #, python-format msgid "An error has occured while moving the record to this group: " -msgstr "" +msgstr "Įvyko klaida perkeliant įrašą į šią grupę: " #. module: web_kanban #. openerp-web @@ -143,7 +143,7 @@ msgstr "" #: code:addons/web_kanban/static/src/xml/web_kanban.xml:98 #, python-format msgid "or" -msgstr "" +msgstr "arba" #. module: web_kanban #. openerp-web @@ -151,11 +151,11 @@ msgstr "" #: code:addons/web_kanban/static/src/xml/web_kanban.xml:55 #, python-format msgid "99+" -msgstr "" +msgstr "99+" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:48 #, python-format msgid "Delete" -msgstr "" +msgstr "Trinti" diff --git a/addons/web_kanban/i18n/tr.po b/addons/web_kanban/i18n/tr.po index 75eba53ce51..a2e75f28be1 100644 --- a/addons/web_kanban/i18n/tr.po +++ b/addons/web_kanban/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:39+0000\n" -"PO-Revision-Date: 2013-03-31 19:16+0000\n" +"PO-Revision-Date: 2013-04-11 20:31+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-01 05:32+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-12 06:05+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: web_kanban #. openerp-web @@ -64,7 +64,7 @@ msgstr "Düzenle" #: code:addons/web_kanban/static/src/js/kanban.js:192 #, python-format msgid "Add column" -msgstr "Sütun Ekle" +msgstr "Sütun ekle" #. module: web_kanban #. openerp-web @@ -100,7 +100,7 @@ msgstr "Ekle" #: code:addons/web_kanban/static/src/xml/web_kanban.xml:35 #, python-format msgid "Quick create" -msgstr "Hızlı Oluştur" +msgstr "Hızlı oluştur" #. module: web_kanban #. openerp-web @@ -143,7 +143,7 @@ msgstr "Kayıt bu gruba taşınırken bir hata oluştu: " #: code:addons/web_kanban/static/src/xml/web_kanban.xml:98 #, python-format msgid "or" -msgstr "veya" +msgstr "ya da" #. module: web_kanban #. openerp-web diff --git a/addons/web_view_editor/i18n/lt.po b/addons/web_view_editor/i18n/lt.po new file mode 100644 index 00000000000..ed63e4d44ed --- /dev/null +++ b/addons/web_view_editor/i18n/lt.po @@ -0,0 +1,184 @@ +# Lithuanian translation for openerp-web +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-03-07 08:39+0000\n" +"PO-Revision-Date: 2013-04-13 15:27+0000\n" +"Last-Translator: Giedrius Slavinskas - inovera.lt \n" +"Language-Team: Lithuanian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" +"X-Generator: Launchpad (build 16564)\n" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:164 +#, python-format +msgid "The following fields are invalid :" +msgstr "Nurodyti laukai yra neteisingi:" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:63 +#, python-format +msgid "Create" +msgstr "Sukurti" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:986 +#, python-format +msgid "New Field" +msgstr "Naujas laukas" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:386 +#, python-format +msgid "Do you really wants to create an inherited view here?" +msgstr "Ar tikrai čia norite sukurti paveldėtąjį rodinį?" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:396 +#, python-format +msgid "Preview" +msgstr "Peržiūra" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:183 +#, python-format +msgid "Do you really want to remove this view?" +msgstr "Ar tikrai norite ištrinti šį rodinį?" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:90 +#, python-format +msgid "Save" +msgstr "Išsaugoti" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:393 +#, python-format +msgid "Select an element" +msgstr "Pasirinkite elementą" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:828 +#: code:addons/web_view_editor/static/src/js/view_editor.js:954 +#, python-format +msgid "Update" +msgstr "Atnaujinti" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:263 +#, python-format +msgid "Please select view in list :" +msgstr "Pasirinkite rodinį iš sąrašo:" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:37 +#, python-format +msgid "Manage Views (%s)" +msgstr "Tvarkyti rodinius (%s)" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:13 +#, python-format +msgid "Manage Views" +msgstr "Tvarkyti rodinius" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:825 +#: code:addons/web_view_editor/static/src/js/view_editor.js:951 +#, python-format +msgid "Properties" +msgstr "Savybės" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:64 +#, python-format +msgid "Edit" +msgstr "Keisti" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:14 +#, python-format +msgid "Could not find current view declaration" +msgstr "Nepavyko rasti rodinio aprašymo" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:382 +#, python-format +msgid "Inherited View" +msgstr "Paveldėtasis rodinys" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:65 +#, python-format +msgid "Remove" +msgstr "Pašalinti" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:516 +#, python-format +msgid "Do you really want to remove this node?" +msgstr "Ar tikrai norite pašalinti šį mazgą?" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:390 +#, python-format +msgid "Can't Update View" +msgstr "Nepavyko atnaujinti rodinio" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:379 +#, python-format +msgid "View Editor %d - %s" +msgstr "Rodinio redaktorius %d - %s" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:112 +#: code:addons/web_view_editor/static/src/js/view_editor.js:846 +#: code:addons/web_view_editor/static/src/js/view_editor.js:974 +#, python-format +msgid "Cancel" +msgstr "Atšaukti" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:66 +#: code:addons/web_view_editor/static/src/js/view_editor.js:413 +#, python-format +msgid "Close" +msgstr "Užverti" + +#. module: web_view_editor +#. openerp-web +#: code:addons/web_view_editor/static/src/js/view_editor.js:88 +#, python-format +msgid "Create a view (%s)" +msgstr "Sukurti rodinį (%s)" diff --git a/openerp/addons/base/i18n/ro.po b/openerp/addons/base/i18n/ro.po index e2d2669f24f..7dd438d24e3 100644 --- a/openerp/addons/base/i18n/ro.po +++ b/openerp/addons/base/i18n/ro.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-server\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:36+0000\n" -"PO-Revision-Date: 2013-04-07 18:50+0000\n" +"PO-Revision-Date: 2013-04-13 15:04+0000\n" "Last-Translator: Dorin \n" "Language-Team: Romanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-08 06:19+0000\n" -"X-Generator: Launchpad (build 16550)\n" +"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -8951,7 +8951,7 @@ msgstr "Modul de Instalare Imediata" #. module: base #: view:ir.actions.server:0 msgid "Field Mapping" -msgstr "Mapare camp" +msgstr "Mapare câmp" #. module: base #: field:ir.model.fields,ttype:0 @@ -11748,7 +11748,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_plugin msgid "CRM Plugins" -msgstr "Aplicatie MRC" +msgstr "Aplicație MRC" #. module: base #: model:ir.actions.act_window,name:base.action_model_model diff --git a/openerp/addons/base/i18n/ru.po b/openerp/addons/base/i18n/ru.po index 58d803ab907..41341841f86 100644 --- a/openerp/addons/base/i18n/ru.po +++ b/openerp/addons/base/i18n/ru.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-server\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:36+0000\n" -"PO-Revision-Date: 2013-04-09 08:38+0000\n" -"Last-Translator: Paul Korotkov \n" +"PO-Revision-Date: 2013-04-12 11:45+0000\n" +"Last-Translator: Rinat Karimov \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-10 05:54+0000\n" -"X-Generator: Launchpad (build 16550)\n" +"X-Launchpad-Export-Date: 2013-04-13 06:31+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -15266,7 +15266,7 @@ msgstr "Лимит" #. module: base #: model:res.groups,name:base.group_hr_user msgid "Officer" -msgstr "Сотрудник" +msgstr "Кадровик" #. module: base #: code:addons/orm.py:787 diff --git a/openerp/addons/base/i18n/tr.po b/openerp/addons/base/i18n/tr.po index fa72ee204a1..ef2983bc61a 100644 --- a/openerp/addons/base/i18n/tr.po +++ b/openerp/addons/base/i18n/tr.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openobject-server\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:36+0000\n" -"PO-Revision-Date: 2013-04-11 21:43+0000\n" +"PO-Revision-Date: 2013-04-14 17:36+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-12 06:05+0000\n" +"X-Launchpad-Export-Date: 2013-04-15 06:06+0000\n" "X-Generator: Launchpad (build 16564)\n" #. module: base @@ -146,7 +146,7 @@ msgstr "" #. module: base #: field:ir.actions.client,params:0 msgid "Supplementary arguments" -msgstr "Tedarik argümanlar" +msgstr "Tedarik argümanları" #. module: base #: model:ir.module.module,description:base.module_google_base_account @@ -4987,7 +4987,7 @@ msgid "" "object.partner_id.name ]]`" msgstr "" "E-posta içeriği, Mesajın içinde çift parantez içine alınmış ifadeler " -"içerebilir ör. `Sevgili [[object.partner_id.name]]`" +"içerebilir ör. `Sayın [[object.partner_id.name]]`" #. module: base #: model:ir.actions.act_window,name:base.action_workflow_form @@ -11113,7 +11113,7 @@ msgstr "" #. module: base #: field:ir.attachment,res_model:0 msgid "Resource Model" -msgstr "Kayanak Model" +msgstr "Kaynak Model" #. module: base #: code:addons/custom.py:555 @@ -14644,7 +14644,7 @@ msgstr "Erişim" #: field:res.partner,vat:0 #, python-format msgid "TIN" -msgstr "V.No" +msgstr "Vergi N°" #. module: base #: model:res.country,name:base.aw From b799a51d39908c133ae1661edfee99dd991251bb Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Mon, 15 Apr 2013 11:29:56 +0200 Subject: [PATCH 125/160] [FIX] l10n_be_coda: fixed a glitch in the coda import when the starting balance of the statement is negative. Courtesy of Damien Carlier (Idealis Consulting) bzr revid: qdp-launchpad@openerp.com-20130415092956-fzrd7646i9spssad --- addons/l10n_be_coda/wizard/account_coda_import.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/l10n_be_coda/wizard/account_coda_import.py b/addons/l10n_be_coda/wizard/account_coda_import.py index 213040d6204..a94b9670cc8 100644 --- a/addons/l10n_be_coda/wizard/account_coda_import.py +++ b/addons/l10n_be_coda/wizard/account_coda_import.py @@ -128,6 +128,8 @@ class account_coda_import(osv.osv_memory): raise osv.except_osv(_('Error') + ' R1004', _("No matching Bank Account (with Account Journal) found.\n\nPlease set-up a Bank Account with as Account Number '%s' and as Currency '%s' and an Account Journal.") % (statement['acc_number'], statement['currency'])) statement['description'] = rmspaces(line[90:125]) statement['balance_start'] = float(rmspaces(line[43:58])) / 1000 + if line[42] == '1': #1 = Debit, the starting balance is negative + statement['balance_start'] = - statement['balance_start'] statement['balance_start_date'] = time.strftime(tools.DEFAULT_SERVER_DATE_FORMAT, time.strptime(rmspaces(line[58:64]), '%d%m%y')) statement['accountHolder'] = rmspaces(line[64:90]) statement['paperSeqNumber'] = rmspaces(line[2:5]) From 53f168daaf989d97a4e514934afc7fe04d21193b Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Mon, 15 Apr 2013 11:37:26 +0200 Subject: [PATCH 126/160] [FIX] hr_holidays: traceback when the user change remaining_leaves value. Wrong reference python object: holiday_obj bzr revid: chm@openerp.com-20130415093726-x2lsmf54xiqc0lng --- addons/hr_holidays/hr_holidays.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 4e113a23510..6dddcaeb015 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -486,9 +486,9 @@ class hr_employee(osv.osv): leave_id = holiday_obj.create(cr, uid, {'name': _('Leave Request for %s') % employee.name, 'employee_id': employee.id, 'holiday_status_id': status_id, 'type': 'remove', 'holiday_type': 'employee', 'number_of_days_temp': abs(diff)}, context=context) else: return False - holidays_obj.signal_confirm(cr, uid, [leave_id]) - holidays_obj.signal_validate(cr, uid, [leave_id]) - holidays_obj.signal_second_validate(cr, uid, [leave_id]) + holiday_obj.signal_confirm(cr, uid, [leave_id]) + holiday_obj.signal_validate(cr, uid, [leave_id]) + holiday_obj.signal_second_validate(cr, uid, [leave_id]) return True def _get_remaining_days(self, cr, uid, ids, name, args, context=None): From 56badfcb46f385eb659fb1a0c011d2def0dda1ae Mon Sep 17 00:00:00 2001 From: Cedric Snauwaert Date: Mon, 15 Apr 2013 12:09:14 +0200 Subject: [PATCH 127/160] [REF]ir_translation: improve _get_src and _set_src function bzr revid: csn@openerp.com-20130415100914-wm0wqhgg5mou2wxs --- openerp/addons/base/ir/ir_translation.py | 43 ++++++++++++++---------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/openerp/addons/base/ir/ir_translation.py b/openerp/addons/base/ir/ir_translation.py index a75304743a9..0a7b83f86b5 100644 --- a/openerp/addons/base/ir/ir_translation.py +++ b/openerp/addons/base/ir/ir_translation.py @@ -155,32 +155,41 @@ class ir_translation(osv.osv): lang_data = lang_model.read(cr, uid, lang_ids, ['code', 'name'], context=context) return [(d['code'], d['name']) for d in lang_data] - def _get_src(self, cr, uid, ids, name, arg, context): + def _get_src(self, cr, uid, ids, name, arg, context=None): + ''' Get source name for the translation. If object type is model then + return the value store in db. Otherwise return value store in src field + ''' + if not context: + context = {} res = {} - for record in self.browse(cr,uid,ids,context=context): + for record in self.browse(cr, uid, ids, context=context): if record.type != 'model': res[record.id] = record.src else: - data = record.name.split(',') - model = self.pool.get(data[0]) - field = data[1] + model, field = record.name.split(',') + #We need to take the context without the language information, because we want to read the + #value store in db and not on the one associate with current language. context_wo_lang = context.copy() context_wo_lang.pop('lang', None) res[record.id] = model.read(cr, uid, record.res_id, [field], context=context_wo_lang)[field] return res - def _set_src(self, cr, uid, id, name, value, args=None, context=None): - if value: - record=self.browse(cr,uid,id,context=context) - if record.type == 'model': - name = record.name - data = name.split(',') - model = self.pool.get(data[0]) - field = data[1] - context_wo_lang = context.copy() - context_wo_lang.pop('lang', None) - model.write(cr, uid, record.res_id, {field: value}, context=context_wo_lang) - return self.write(cr,uid,id, {'src': value}, context=context_wo_lang) + def _set_src(self, cr, uid, id, name, value, args, context=None): + ''' When changing source term of a translation, change its value in db for + the associated object, and the src field + ''' + if not context: + context = {} + if value and record.model == 'model': + record = self.browse(cr, uid, id, context=context) + model, field = record.name.split(',') + #We need to take the context without the language information, because we want to write on the + #value store in db and not on the one associate with current language. + #Also not removing lang from context trigger an error when lang is different + context_wo_lang = context.copy() + context_wo_lang.pop('lang', None) + model.write(cr, uid, record.res_id, {field: value}, context=context_wo_lang) + return self.write(cr, uid, id, {'src': value}, context=context_wo_lang) _columns = { 'name': fields.char('Translated field', required=True), From f25c5d857b3432db99a2e422b35396db64aed652 Mon Sep 17 00:00:00 2001 From: Cedric Snauwaert Date: Mon, 15 Apr 2013 12:21:21 +0200 Subject: [PATCH 128/160] [REF]product: remove one extra loop bzr revid: csn@openerp.com-20130415102121-u74t7zd3zct3q3ts --- addons/product/product.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/addons/product/product.py b/addons/product/product.py index 4dbd0752911..239fc940b6b 100644 --- a/addons/product/product.py +++ b/addons/product/product.py @@ -525,10 +525,9 @@ class product_product(osv.osv): def _get_name_template_ids(self, cr, uid, ids, context=None): result = set() - for template in self.browse(cr, uid, ids, context=context): - template_ids = self.pool.get('product.product').search(cr, uid, [('product_tmpl_id','=',template.id)]) - for el in template_ids: - result.add(el) + template_ids = self.pool.get('product.product').search(cr, uid, [('product_tmpl_id', 'in', ids)]) + for el in template_ids: + result.add(el) return list(result) _defaults = { From e69326ee3b32bf50805bf1aca73d941a3bbcd2fe Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 15 Apr 2013 12:23:49 +0200 Subject: [PATCH 129/160] [REF] removed explicit model instanciations. bzr revid: vmt@openerp.com-20130415102349-vgcrfok2k5y10cwz --- addons/account/account.py | 28 ------------------- addons/account/account_analytic_line.py | 2 -- addons/account/account_bank_statement.py | 2 -- addons/account/account_cash_statement.py | 4 --- addons/account/account_financial_report.py | 1 - addons/account/account_invoice.py | 1 - addons/account/account_move_line.py | 1 - addons/account/company.py | 1 - addons/account/installer.py | 1 - addons/account/ir_sequence.py | 2 -- addons/account/partner.py | 4 --- addons/account/product.py | 2 -- addons/account/project/project.py | 2 -- .../wizard/account_analytic_balance_report.py | 1 - .../project/wizard/account_analytic_chart.py | 1 - ...analytic_cost_ledger_for_journal_report.py | 1 - .../account_analytic_cost_ledger_report.py | 1 - ...ccount_analytic_inverted_balance_report.py | 1 - .../wizard/account_analytic_journal_report.py | 1 - .../wizard/project_account_analytic_line.py | 1 - .../report/account_analytic_entries_report.py | 1 - .../account/report/account_entries_report.py | 1 - .../account/report/account_invoice_report.py | 1 - addons/account/report/account_report.py | 6 ---- .../account/report/account_treasury_report.py | 1 - addons/account/res_currency.py | 1 - .../wizard/account_automatic_reconcile.py | 1 - .../account/wizard/account_change_currency.py | 1 - addons/account/wizard/account_chart.py | 1 - .../wizard/account_financial_report.py | 1 - .../wizard/account_fiscalyear_close.py | 1 - .../wizard/account_fiscalyear_close_state.py | 1 - .../account/wizard/account_invoice_refund.py | 1 - .../account/wizard/account_invoice_state.py | 2 -- .../account/wizard/account_journal_select.py | 1 - .../wizard/account_move_bank_reconcile.py | 1 - .../account_move_line_reconcile_select.py | 1 - .../wizard/account_move_line_select.py | 1 - .../account_move_line_unreconcile_select.py | 1 - .../wizard/account_open_closed_fiscalyear.py | 1 - addons/account/wizard/account_period_close.py | 1 - addons/account/wizard/account_reconcile.py | 2 -- .../account_reconcile_partner_process.py | 1 - .../wizard/account_report_account_balance.py | 1 - .../account_report_aged_partner_balance.py | 1 - .../wizard/account_report_central_journal.py | 1 - .../account/wizard/account_report_common.py | 1 - .../wizard/account_report_common_account.py | 1 - .../wizard/account_report_common_journal.py | 1 - .../wizard/account_report_common_partner.py | 1 - .../wizard/account_report_general_journal.py | 1 - .../wizard/account_report_general_ledger.py | 1 - .../wizard/account_report_partner_balance.py | 1 - .../wizard/account_report_partner_ledger.py | 1 - .../wizard/account_report_print_journal.py | 1 - addons/account/wizard/account_state_open.py | 1 - .../wizard/account_subscription_generate.py | 1 - addons/account/wizard/account_tax_chart.py | 1 - addons/account/wizard/account_unreconcile.py | 2 -- addons/account/wizard/account_use_model.py | 1 - .../wizard/account_validate_account_move.py | 2 -- addons/account/wizard/account_vat.py | 1 - addons/account/wizard/pos_box.py | 2 -- .../account_analytic_default.py | 4 --- .../account_analytic_plans.py | 14 ---------- .../wizard/account_crossovered_analytic.py | 1 - .../wizard/analytic_plan_create_model.py | 1 - addons/account_anglo_saxon/product.py | 2 -- addons/account_anglo_saxon/purchase.py | 1 - addons/account_anglo_saxon/stock.py | 1 - addons/account_asset/account_asset.py | 5 ---- addons/account_asset/account_asset_invoice.py | 2 -- .../report/account_asset_report.py | 1 - .../wizard/account_asset_change_duration.py | 1 - .../wizard/wizard_asset_compute.py | 1 - .../account_bank_statement.py | 3 -- .../res_partner_bank.py | 1 - .../wizard/cancel_statement_line.py | 1 - .../wizard/confirm_statement_line.py | 1 - addons/account_budget/account_budget.py | 4 --- .../wizard/account_budget_analytic.py | 1 - .../account_budget_crossovered_report.py | 1 - ...count_budget_crossovered_summary_report.py | 1 - .../wizard/account_budget_report.py | 1 - addons/account_check_writing/account.py | 2 -- .../account_check_writing/account_voucher.py | 1 - .../wizard/account_check_batch_printing.py | 1 - .../report/account_followup_report.py | 1 - .../wizard/account_followup_print.py | 3 -- addons/account_payment/account_invoice.py | 1 - addons/account_payment/account_move_line.py | 1 - addons/account_payment/account_payment.py | 3 -- .../wizard/account_payment_order.py | 1 - .../wizard/account_payment_pay.py | 1 - .../account_payment_populate_statement.py | 1 - addons/account_sequence/account_sequence.py | 3 -- .../account_sequence_installer.py | 1 - addons/account_test/account_test.py | 1 - addons/account_voucher/account_voucher.py | 4 --- addons/account_voucher/invoice.py | 1 - .../report/account_voucher_sales_receipt.py | 1 - .../wizard/account_statement_from_invoice.py | 1 - .../analytic_contract_hr_expense.py | 1 - .../audittrail/wizard/audittrail_view_log.py | 1 - addons/auth_ldap/users_ldap.py | 3 -- addons/auth_openid/res_users.py | 1 - addons/base_calendar/base_calendar.py | 7 ----- addons/base_iban/base_iban.py | 1 - .../base_report_designer.py | 1 - addons/base_report_designer/installer.py | 1 - .../wizard/base_report_designer_modify.py | 3 -- addons/base_vat/base_vat.py | 1 - addons/crm/crm_segmentation.py | 2 -- addons/crm/report/crm_lead_report.py | 1 - addons/crm/report/crm_phonecall_report.py | 1 - addons/crm/res_partner.py | 1 - .../wizard/crm_opportunity_to_phonecall.py | 1 - addons/crm/wizard/crm_phonecall_to_meeting.py | 1 - .../crm/wizard/crm_phonecall_to_phonecall.py | 1 - addons/crm_claim/report/crm_claim_report.py | 1 - .../report/crm_helpdesk_report.py | 1 - .../report/crm_lead_report.py | 1 - .../report/crm_partner_report.py | 1 - addons/crm_profiling/crm_profiling.py | 5 ---- .../wizard/open_questionnaire.py | 2 -- addons/decimal_precision/decimal_precision.py | 1 - addons/delivery/delivery.py | 3 -- addons/delivery/partner.py | 1 - addons/delivery/sale.py | 1 - addons/delivery/stock.py | 4 --- .../document/wizard/document_configuration.py | 1 - addons/document_ftp/wizard/ftp_browse.py | 1 - .../document_ftp/wizard/ftp_configuration.py | 1 - addons/event/event.py | 1 - .../event/report/report_event_registration.py | 1 - addons/event/res_partner.py | 1 - addons/event/wizard/event_confirm.py | 1 - addons/event_moodle/event_moodle.py | 3 -- addons/event_sale/event_sale.py | 1 - .../google_base_account.py | 1 - .../wizard/google_login.py | 1 - addons/google_docs/google_docs.py | 1 - addons/hr/hr.py | 4 --- addons/hr/hr_department.py | 2 -- addons/hr_attendance/hr_attendance.py | 3 -- .../wizard/hr_attendance_bymonth.py | 1 - .../wizard/hr_attendance_byweek.py | 1 - .../wizard/hr_attendance_error.py | 1 - addons/hr_contract/hr_contract.py | 3 -- addons/hr_evaluation/hr_evaluation.py | 5 ---- .../report/hr_evaluation_report.py | 1 - addons/hr_expense/hr_expense.py | 3 -- addons/hr_expense/report/hr_expense_report.py | 1 - addons/hr_holidays/hr_holidays.py | 2 -- .../hr_holidays/report/hr_holidays_report.py | 1 - .../wizard/hr_holidays_summary_department.py | 1 - .../wizard/hr_holidays_summary_employees.py | 1 - addons/hr_payroll/hr_payroll.py | 13 --------- ...hr_payroll_contribution_register_report.py | 1 - .../hr_payroll_payslips_by_employees.py | 1 - .../hr_payroll_account/hr_payroll_account.py | 4 --- .../hr_payroll_payslips_by_employees.py | 1 - .../report/hr_recruitment_report.py | 1 - .../hr_recruitment_create_partner_job.py | 1 - .../wizard/hr_recruitment_employee_hired.py | 1 - addons/hr_timesheet/hr_timesheet.py | 1 - .../wizard/hr_timesheet_print_employee.py | 1 - .../wizard/hr_timesheet_print_users.py | 1 - .../wizard/hr_timesheet_sign_in_out.py | 2 -- .../hr_timesheet_invoice.py | 5 ---- .../report/hr_timesheet_invoice_report.py | 5 ---- .../report/report_analytic.py | 2 -- .../wizard/hr_timesheet_analytic_profit.py | 1 - .../hr_timesheet_final_invoice_create.py | 1 - .../wizard/hr_timesheet_invoice_create.py | 1 - .../hr_timesheet_sheet/hr_timesheet_sheet.py | 5 ---- .../report/hr_timesheet_report.py | 1 - .../report/timesheet_report.py | 1 - .../wizard/hr_timesheet_current.py | 1 - addons/l10n_at/account_wizard.py | 1 - .../wizard/l10n_be_account_vat_declaration.py | 1 - .../wizard/l10n_be_partner_vat_listing.py | 3 -- addons/l10n_be/wizard/l10n_be_vat_intra.py | 1 - .../l10n_be_hr_payroll/l10n_be_hr_payroll.py | 2 -- addons/l10n_be_invoice_bba/partner.py | 1 - addons/l10n_fr/l10n_fr.py | 3 -- addons/l10n_fr/wizard/fr_report_bilan.py | 1 - .../wizard/fr_report_compute_resultant.py | 1 - .../l10n_fr_hr_payroll/l10n_fr_hr_payroll.py | 3 -- addons/l10n_fr_rib/bank.py | 2 -- .../l10n_in_hr_payroll/l10n_in_hr_payroll.py | 6 ---- .../report/payment_advice_report.py | 1 - .../report/payslip_report.py | 1 - .../wizard/hr_salary_employee_bymonth.py | 1 - .../wizard/hr_yearly_salary_detail.py | 1 - addons/l10n_lu/wizard/print_vat.py | 1 - addons/l10n_ma/l10n_ma.py | 2 -- addons/l10n_multilang/account.py | 11 -------- addons/l10n_multilang/l10n_multilang.py | 1 - addons/l10n_ro/res_partner.py | 1 - addons/lunch/report/report_lunch_order.py | 1 - .../marketing_campaign/marketing_campaign.py | 7 ----- .../report/campaign_analysis.py | 1 - addons/marketing_campaign/res_partner.py | 1 - addons/membership/membership.py | 5 ---- addons/membership/report/report_membership.py | 1 - .../membership/wizard/membership_invoice.py | 1 - addons/mrp/company.py | 1 - addons/mrp/mrp.py | 3 -- addons/mrp/procurement.py | 1 - addons/mrp/product.py | 1 - addons/mrp/report/mrp_report.py | 2 -- addons/mrp/stock.py | 3 -- addons/mrp/wizard/change_production_qty.py | 1 - addons/mrp/wizard/mrp_price.py | 1 - addons/mrp/wizard/mrp_product_produce.py | 1 - addons/mrp/wizard/mrp_workcenter_load.py | 1 - addons/mrp_byproduct/mrp_byproduct.py | 3 -- addons/mrp_operations/mrp_operations.py | 4 --- .../report/mrp_workorder_analysis.py | 1 - addons/mrp_repair/mrp_repair.py | 2 -- addons/mrp_repair/wizard/cancel_repair.py | 1 - addons/mrp_repair/wizard/make_invoice.py | 1 - .../point_of_sale/account_bank_statement.py | 2 -- addons/point_of_sale/point_of_sale.py | 2 -- .../point_of_sale/report/pos_order_report.py | 1 - addons/point_of_sale/report/pos_report.py | 5 ---- .../point_of_sale/wizard/pos_box_entries.py | 1 - addons/point_of_sale/wizard/pos_box_out.py | 1 - addons/point_of_sale/wizard/pos_confirm.py | 1 - addons/point_of_sale/wizard/pos_details.py | 1 - addons/point_of_sale/wizard/pos_discount.py | 1 - .../wizard/pos_open_statement.py | 1 - addons/point_of_sale/wizard/pos_payment.py | 1 - .../wizard/pos_payment_report.py | 1 - .../wizard/pos_payment_report_user.py | 1 - addons/point_of_sale/wizard/pos_receipt.py | 1 - addons/point_of_sale/wizard/pos_return.py | 2 -- addons/point_of_sale/wizard/pos_sales_user.py | 1 - .../wizard/pos_sales_user_current_user.py | 1 - .../wizard/pos_sales_user_today.py | 1 - .../wizard/pos_session_opening.py | 1 - addons/portal/wizard/share_wizard.py | 1 - addons/process/process.py | 5 ---- addons/procurement/company.py | 1 - .../wizard/make_procurement_product.py | 1 - addons/procurement/wizard/mrp_procurement.py | 1 - .../wizard/orderpoint_procurement.py | 1 - addons/procurement/wizard/schedulers_all.py | 1 - addons/product/partner.py | 1 - addons/product/pricelist.py | 5 ---- addons/product/product.py | 9 ------ addons/product/wizard/product_price.py | 1 - addons/product_expiry/product_expiry.py | 2 -- .../product_manufacturer.py | 2 -- addons/product_margin/product_margin.py | 1 - .../product_margin/wizard/product_margin.py | 1 - .../product_visible_discount.py | 3 -- addons/project/company.py | 1 - addons/project/report/project_report.py | 1 - addons/project/res_partner.py | 1 - .../project/wizard/project_task_delegate.py | 1 - .../project/wizard/project_task_reevaluate.py | 1 - addons/project_gtd/project_gtd.py | 3 -- .../project_gtd/wizard/project_gtd_empty.py | 1 - addons/project_gtd/wizard/project_gtd_fill.py | 1 - addons/project_issue/project_issue.py | 1 - .../report/project_issue_report.py | 1 - .../project_issue_sheet.py | 3 -- addons/project_long_term/project_long_term.py | 5 ---- .../wizard/project_compute_phases.py | 1 - .../wizard/project_compute_tasks.py | 1 - addons/project_mrp/project_mrp.py | 3 -- addons/project_mrp/project_procurement.py | 1 - addons/project_timesheet/project_timesheet.py | 5 ---- .../project_timesheet/report/task_report.py | 1 - addons/purchase/company.py | 1 - addons/purchase/partner.py | 1 - addons/purchase/purchase.py | 1 - addons/purchase/report/purchase_report.py | 1 - addons/purchase/stock.py | 1 - .../purchase/wizard/purchase_line_invoice.py | 1 - .../purchase/wizard/purchase_order_group.py | 1 - .../purchase_analytic_plans.py | 2 -- .../purchase_requisition.py | 4 --- .../wizard/purchase_requisition_partner.py | 1 - addons/report_intrastat/report_intrastat.py | 4 --- addons/report_webkit/header.py | 2 -- .../wizard/report_webkit_actions.py | 1 - addons/resource/resource.py | 4 --- addons/sale/report/sale_report.py | 1 - addons/sale/sale.py | 1 - addons/sale/wizard/sale_line_invoice.py | 1 - addons/sale/wizard/sale_make_invoice.py | 1 - .../sale/wizard/sale_make_invoice_advance.py | 1 - .../sale_analytic_plans.py | 1 - addons/sale_crm/wizard/crm_make_sale.py | 1 - addons/sale_journal/sale_journal.py | 6 ---- addons/sale_margin/sale_margin.py | 2 -- addons/sale_mrp/sale_mrp.py | 1 - addons/sale_order_dates/sale_order_dates.py | 1 - addons/sale_stock/company.py | 1 - addons/sale_stock/report/sale_report.py | 1 - addons/sale_stock/sale_stock.py | 1 - addons/share/res_users.py | 2 -- addons/share/wizard/share_wizard.py | 1 - addons/stock/partner.py | 1 - addons/stock/product.py | 3 -- addons/stock/report/report_stock.py | 3 -- addons/stock/report/report_stock_move.py | 2 -- addons/stock/stock.py | 10 ------- .../wizard/stock_change_standard_price.py | 1 - addons/stock/wizard/stock_fill_inventory.py | 1 - addons/stock/wizard/stock_inventory_merge.py | 1 - .../stock/wizard/stock_invoice_onshipping.py | 1 - addons/stock/wizard/stock_location_product.py | 1 - addons/stock/wizard/stock_move.py | 3 -- addons/stock/wizard/stock_return_picking.py | 2 -- addons/stock/wizard/stock_splitinto.py | 1 - addons/stock/wizard/stock_traceability.py | 1 - .../wizard/stock_invoice.py | 1 - addons/stock_location/stock_location.py | 5 ---- .../stock_no_autopicking.py | 2 -- addons/subscription/subscription.py | 4 --- addons/survey/survey.py | 13 --------- addons/survey/wizard/survey_answer.py | 1 - addons/survey/wizard/survey_browse_answer.py | 1 - addons/survey/wizard/survey_print.py | 1 - addons/survey/wizard/survey_print_answer.py | 1 - .../survey/wizard/survey_print_statistics.py | 1 - .../survey/wizard/survey_send_invitation.py | 2 -- addons/warning/warning.py | 8 ------ 332 files changed, 633 deletions(-) diff --git a/addons/account/account.py b/addons/account/account.py index 529cbf96623..d262a5e273c 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -132,7 +132,6 @@ class account_payment_term_line(osv.osv): (_check_percent, 'Percentages for Payment Term Line must be between 0 and 1, Example: 0.02 for 2%.', ['value_amount']), ] -account_payment_term_line() class account_account_type(osv.osv): _name = "account.account.type" @@ -198,7 +197,6 @@ class account_account_type(osv.osv): } _order = "code" -account_account_type() def _code_get(self, cr, uid, context=None): acc_type_obj = self.pool.get('account.account.type') @@ -212,7 +210,6 @@ def _code_get(self, cr, uid, context=None): class account_tax(osv.osv): _name = 'account.tax' -account_tax() class account_account(osv.osv): _order = "parent_left" @@ -697,7 +694,6 @@ class account_account(osv.osv): self._check_moves(cr, uid, ids, "unlink", context=context) return super(account_account, self).unlink(cr, uid, ids, context=context) -account_account() class account_journal(osv.osv): _name = "account.journal" @@ -849,7 +845,6 @@ class account_journal(osv.osv): return self.name_get(cr, user, ids, context=context) -account_journal() class account_fiscalyear(osv.osv): _name = "account.fiscalyear" @@ -945,7 +940,6 @@ class account_fiscalyear(osv.osv): ids = self.search(cr, user, [('name', operator, name)]+ args, limit=limit) return self.name_get(cr, user, ids, context=context) -account_fiscalyear() class account_period(osv.osv): _name = "account.period" @@ -1071,7 +1065,6 @@ class account_period(osv.osv): return self.search(cr, uid, [('date_start', '>=', period_date_start), ('date_stop', '<=', period_date_stop), ('company_id', '=', company1_id)]) return self.search(cr, uid, [('date_start', '>=', period_date_start), ('date_stop', '<=', period_date_stop), ('company_id', '=', company1_id), ('special', '=', False)]) -account_period() class account_journal_period(osv.osv): _name = "account.journal.period" @@ -1128,7 +1121,6 @@ class account_journal_period(osv.osv): } _order = "period_id" -account_journal_period() class account_fiscalyear(osv.osv): _inherit = "account.fiscalyear" @@ -1145,7 +1137,6 @@ class account_fiscalyear(osv.osv): }) return super(account_fiscalyear, self).copy(cr, uid, id, default=default, context=context) -account_fiscalyear() #---------------------------------------------------------- # Entries #---------------------------------------------------------- @@ -1643,7 +1634,6 @@ class account_move(osv.osv): valid_moves = [move.id for move in valid_moves] return len(valid_moves) > 0 and valid_moves or False -account_move() class account_move_reconcile(osv.osv): _name = "account.move.reconcile" @@ -1717,7 +1707,6 @@ class account_move_reconcile(osv.osv): result.append((r.id,r.name)) return result -account_move_reconcile() #---------------------------------------------------------- # Tax @@ -1865,7 +1854,6 @@ class account_tax_code(osv.osv): ] _order = 'code' -account_tax_code() class account_tax(osv.osv): """ @@ -2273,7 +2261,6 @@ class account_tax(osv.osv): total += r['amount'] return res -account_tax() # --------------------------------------------------------- # Account Entries Models @@ -2385,7 +2372,6 @@ class account_model(osv.osv): return {'value': {'company_id': company_id}} -account_model() class account_model_line(osv.osv): _name = "account.model.line" @@ -2409,7 +2395,6 @@ class account_model_line(osv.osv): ('credit_debit1', 'CHECK (credit*debit=0)', 'Wrong credit or debit value in model, they must be positive!'), ('credit_debit2', 'CHECK (credit+debit>=0)', 'Wrong credit or debit value in model, they must be positive!'), ] -account_model_line() # --------------------------------------------------------- # Account Subscription @@ -2483,7 +2468,6 @@ class account_subscription(osv.osv): self.write(cr, uid, ids, {'state':'running'}) return True -account_subscription() class account_subscription_line(osv.osv): _name = "account.subscription.line" @@ -2512,7 +2496,6 @@ class account_subscription_line(osv.osv): _rec_name = 'date' -account_subscription_line() # --------------------------------------------------------------- # Account Templates: Account, Tax, Tax Code and chart. + Wizard @@ -2520,7 +2503,6 @@ account_subscription_line() class account_tax_template(osv.osv): _name = 'account.tax.template' -account_tax_template() class account_account_template(osv.osv): _order = "code" @@ -2648,7 +2630,6 @@ class account_account_template(osv.osv): obj_acc._parent_store_compute(cr) return acc_template_ref -account_account_template() class account_add_tmpl_wizard(osv.osv_memory): """Add one more account from the template. @@ -2702,7 +2683,6 @@ class account_add_tmpl_wizard(osv.osv_memory): def action_cancel(self, cr, uid, ids, context=None): return { 'type': 'state', 'state': 'end' } -account_add_tmpl_wizard() class account_tax_code_template(osv.osv): @@ -2774,7 +2754,6 @@ class account_tax_code_template(osv.osv): (_check_recursion, 'Error!\nYou cannot create recursive Tax Codes.', ['parent_id']) ] _order = 'code,name' -account_tax_code_template() class account_chart_template(osv.osv): @@ -2807,7 +2786,6 @@ class account_chart_template(osv.osv): 'complete_tax_set': True, } -account_chart_template() class account_tax_template(osv.osv): @@ -2937,7 +2915,6 @@ class account_tax_template(osv.osv): res.update({'tax_template_to_tax': tax_template_to_tax, 'account_dict': todo_dict}) return res -account_tax_template() # Fiscal Position Templates @@ -2985,7 +2962,6 @@ class account_fiscal_position_template(osv.osv): }) return True -account_fiscal_position_template() class account_fiscal_position_tax_template(osv.osv): _name = 'account.fiscal.position.tax.template' @@ -2998,7 +2974,6 @@ class account_fiscal_position_tax_template(osv.osv): 'tax_dest_id': fields.many2one('account.tax.template', 'Replacement Tax') } -account_fiscal_position_tax_template() class account_fiscal_position_account_template(osv.osv): _name = 'account.fiscal.position.account.template' @@ -3010,7 +2985,6 @@ class account_fiscal_position_account_template(osv.osv): 'account_dest_id': fields.many2one('account.account.template', 'Account Destination', domain=[('type','<>','view')], required=True) } -account_fiscal_position_account_template() # --------------------------------------------------------- # Account generation from template wizards @@ -3550,7 +3524,6 @@ class wizard_multi_charts_accounts(osv.osv_memory): current_num += 1 return True -wizard_multi_charts_accounts() class account_bank_accounts_wizard(osv.osv_memory): _name='account.bank.accounts.wizard' @@ -3562,6 +3535,5 @@ class account_bank_accounts_wizard(osv.osv_memory): 'account_type': fields.selection([('cash','Cash'), ('check','Check'), ('bank','Bank')], 'Account Type', size=32), } -account_bank_accounts_wizard() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/account_analytic_line.py b/addons/account/account_analytic_line.py index f3617106f28..e141f33b9d1 100644 --- a/addons/account/account_analytic_line.py +++ b/addons/account/account_analytic_line.py @@ -143,7 +143,6 @@ class account_analytic_line(osv.osv): return res return False -account_analytic_line() class res_partner(osv.osv): """ Inherits partner and adds contract information in the partner form """ @@ -154,6 +153,5 @@ class res_partner(osv.osv): 'partner_id', 'Contracts', readonly=True), } -res_partner() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py index 8e1a5dd26c6..56e061a707b 100644 --- a/addons/account/account_bank_statement.py +++ b/addons/account/account_bank_statement.py @@ -500,7 +500,6 @@ class account_bank_statement(osv.osv): 'context':ctx, } -account_bank_statement() class account_bank_statement_line(osv.osv): @@ -576,6 +575,5 @@ class account_bank_statement_line(osv.osv): 'type': 'general', } -account_bank_statement_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/account_cash_statement.py b/addons/account/account_cash_statement.py index 86d3b0d24de..40f0ca80738 100644 --- a/addons/account/account_cash_statement.py +++ b/addons/account/account_cash_statement.py @@ -66,7 +66,6 @@ class account_cashbox_line(osv.osv): 'bank_statement_id' : fields.many2one('account.bank.statement', ondelete='cascade'), } -account_cashbox_line() class account_cash_statement(osv.osv): @@ -316,7 +315,6 @@ class account_cash_statement(osv.osv): return self.write(cr, uid, ids, {'closing_date': time.strftime("%Y-%m-%d %H:%M:%S")}, context=context) -account_cash_statement() class account_journal(osv.osv): _inherit = 'account.journal' @@ -336,7 +334,6 @@ class account_journal(osv.osv): 'cashbox_line_ids' : _default_cashbox_line_ids, } -account_journal() class account_journal_cashbox_line(osv.osv): _name = 'account.journal.cashbox.line' @@ -348,6 +345,5 @@ class account_journal_cashbox_line(osv.osv): _order = 'pieces asc' -account_journal_cashbox_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/account_financial_report.py b/addons/account/account_financial_report.py index e8b58f61882..0c2e5845b89 100644 --- a/addons/account/account_financial_report.py +++ b/addons/account/account_financial_report.py @@ -138,6 +138,5 @@ class account_financial_report(osv.osv): 'style_overwrite': 0, } -account_financial_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index 4feee980ae5..e0a64a002a8 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -1584,7 +1584,6 @@ class account_invoice_line(osv.osv): unique_tax_ids = product_change_result['value']['invoice_line_tax_id'] return {'value':{'invoice_line_tax_id': unique_tax_ids}} -account_invoice_line() class account_invoice_tax(osv.osv): _name = "account.invoice.tax" diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index 082d654c5a2..b0b7815ad3c 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -1308,6 +1308,5 @@ class account_move_line(osv.osv): bool(journal.currency),bool(journal.analytic_journal_id))) return result -account_move_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/company.py b/addons/account/company.py index a4624ae5ad5..3f2db1b98b8 100644 --- a/addons/account/company.py +++ b/addons/account/company.py @@ -47,6 +47,5 @@ Thank you in advance for your cooperation. Best Regards,''' } -res_company() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/installer.py b/addons/account/installer.py index c00b80071b8..4e2c2b2e024 100644 --- a/addons/account/installer.py +++ b/addons/account/installer.py @@ -152,6 +152,5 @@ class account_installer(osv.osv_memory): _logger.debug('Installing chart of accounts %s', chart) return modules | set([chart]) -account_installer() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/ir_sequence.py b/addons/account/ir_sequence.py index 56e1a4d0367..d3615a847b7 100644 --- a/addons/account/ir_sequence.py +++ b/addons/account/ir_sequence.py @@ -38,7 +38,6 @@ class ir_sequence_fiscalyear(osv.osv): 'Main Sequence must be different from current !'), ] -ir_sequence_fiscalyear() class ir_sequence(osv.osv): _inherit = 'ir.sequence' @@ -56,6 +55,5 @@ class ir_sequence(osv.osv): return super(ir_sequence, self)._next(cr, uid, [line.sequence_id.id], context) return super(ir_sequence, self)._next(cr, uid, seq_ids, context) -ir_sequence() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/partner.py b/addons/account/partner.py index ae8d2fc1871..50addd88942 100644 --- a/addons/account/partner.py +++ b/addons/account/partner.py @@ -66,7 +66,6 @@ class account_fiscal_position(osv.osv): break return account_id -account_fiscal_position() class account_fiscal_position_tax(osv.osv): _name = 'account.fiscal.position.tax' @@ -84,7 +83,6 @@ class account_fiscal_position_tax(osv.osv): 'A tax fiscal position could be defined only once time on same taxes.') ] -account_fiscal_position_tax() class account_fiscal_position_account(osv.osv): _name = 'account.fiscal.position.account' @@ -102,7 +100,6 @@ class account_fiscal_position_account(osv.osv): 'An account fiscal position could be defined only once time on same accounts.') ] -account_fiscal_position_account() class res_partner(osv.osv): _name = 'res.partner' @@ -236,6 +233,5 @@ class res_partner(osv.osv): 'last_reconciliation_date': fields.datetime('Latest Full Reconciliation Date', help='Date on which the partner accounting entries were fully reconciled last time. It differs from the last date where a reconciliation has been made for this partner, as here we depict the fact that nothing more was to be reconciled at this date. This can be achieved in 2 different ways: either the last unreconciled debit/credit entry of this partner was reconciled, either the user pressed the button "Nothing more to reconcile" during the manual reconciliation process.') } -res_partner() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/product.py b/addons/account/product.py index ce1ac83d6dd..3df3ad9bd17 100644 --- a/addons/account/product.py +++ b/addons/account/product.py @@ -39,7 +39,6 @@ class product_category(osv.osv): view_load=True, help="This account will be used for invoices to value expenses."), } -product_category() #---------------------------------------------------------- # Products @@ -70,6 +69,5 @@ class product_template(osv.osv): help="This account will be used for invoices instead of the default one to value expenses for the current product."), } -product_template() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/project/project.py b/addons/account/project/project.py index f4927331ca8..b4dcdde2d30 100644 --- a/addons/account/project/project.py +++ b/addons/account/project/project.py @@ -38,7 +38,6 @@ class account_analytic_journal(osv.osv): 'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id, } -account_analytic_journal() class account_journal(osv.osv): _inherit="account.journal" @@ -47,6 +46,5 @@ class account_journal(osv.osv): 'analytic_journal_id':fields.many2one('account.analytic.journal','Analytic Journal', help="Journal for analytic entries"), } -account_journal() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/project/wizard/account_analytic_balance_report.py b/addons/account/project/wizard/account_analytic_balance_report.py index 81d6c192962..02b2eb6e95d 100644 --- a/addons/account/project/wizard/account_analytic_balance_report.py +++ b/addons/account/project/wizard/account_analytic_balance_report.py @@ -52,7 +52,6 @@ class account_analytic_balance(osv.osv_memory): 'datas': datas, } -account_analytic_balance() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/project/wizard/account_analytic_chart.py b/addons/account/project/wizard/account_analytic_chart.py index 01c606d5f08..4a26eec7c95 100644 --- a/addons/account/project/wizard/account_analytic_chart.py +++ b/addons/account/project/wizard/account_analytic_chart.py @@ -46,5 +46,4 @@ class account_analytic_chart(osv.osv_memory): result['context'] = str(result_context) return result -account_analytic_chart() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/project/wizard/account_analytic_cost_ledger_for_journal_report.py b/addons/account/project/wizard/account_analytic_cost_ledger_for_journal_report.py index fdb8eafb402..814cbb8cacc 100644 --- a/addons/account/project/wizard/account_analytic_cost_ledger_for_journal_report.py +++ b/addons/account/project/wizard/account_analytic_cost_ledger_for_journal_report.py @@ -52,5 +52,4 @@ class account_analytic_cost_ledger_journal_report(osv.osv_memory): 'datas': datas, } -account_analytic_cost_ledger_journal_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/project/wizard/account_analytic_cost_ledger_report.py b/addons/account/project/wizard/account_analytic_cost_ledger_report.py index 1c74c61e31f..ffd56352382 100644 --- a/addons/account/project/wizard/account_analytic_cost_ledger_report.py +++ b/addons/account/project/wizard/account_analytic_cost_ledger_report.py @@ -52,5 +52,4 @@ class account_analytic_cost_ledger(osv.osv_memory): 'datas': datas, } -account_analytic_cost_ledger() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/project/wizard/account_analytic_inverted_balance_report.py b/addons/account/project/wizard/account_analytic_inverted_balance_report.py index 10f97baf755..9e54f4f848d 100644 --- a/addons/account/project/wizard/account_analytic_inverted_balance_report.py +++ b/addons/account/project/wizard/account_analytic_inverted_balance_report.py @@ -51,5 +51,4 @@ class account_analytic_inverted_balance(osv.osv_memory): 'datas': datas, } -account_analytic_inverted_balance() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/project/wizard/account_analytic_journal_report.py b/addons/account/project/wizard/account_analytic_journal_report.py index e70649cd406..61fe2cd318a 100644 --- a/addons/account/project/wizard/account_analytic_journal_report.py +++ b/addons/account/project/wizard/account_analytic_journal_report.py @@ -71,5 +71,4 @@ class account_analytic_journal_report(osv.osv_memory): res.update({'analytic_account_journal_id': journal_ids}) return res -account_analytic_journal_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/project/wizard/project_account_analytic_line.py b/addons/account/project/wizard/project_account_analytic_line.py index c5a496527c1..40777f73e7d 100644 --- a/addons/account/project/wizard/project_account_analytic_line.py +++ b/addons/account/project/wizard/project_account_analytic_line.py @@ -53,6 +53,5 @@ class project_account_analytic_line(osv.osv_memory): 'search_view_id': id['res_id'], } -project_account_analytic_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/report/account_analytic_entries_report.py b/addons/account/report/account_analytic_entries_report.py index dad0dedc9fc..f7d1177e3b0 100644 --- a/addons/account/report/account_analytic_entries_report.py +++ b/addons/account/report/account_analytic_entries_report.py @@ -81,6 +81,5 @@ class analytic_entries_report(osv.osv): a.move_id,a.product_id,a.product_uom_id ) """) -analytic_entries_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/report/account_entries_report.py b/addons/account/report/account_entries_report.py index d53e6153981..907da56535a 100644 --- a/addons/account/report/account_entries_report.py +++ b/addons/account/report/account_entries_report.py @@ -152,6 +152,5 @@ class account_entries_report(osv.osv): where l.state != 'draft' ) """) -account_entries_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/report/account_invoice_report.py b/addons/account/report/account_invoice_report.py index 31725a46b46..5395d79af03 100644 --- a/addons/account/report/account_invoice_report.py +++ b/addons/account/report/account_invoice_report.py @@ -217,6 +217,5 @@ class account_invoice_report(osv.osv): self._table, self._select(), self._sub_select(), self._from(), self._group_by())) -account_invoice_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/report/account_report.py b/addons/account/report/account_report.py index 11a6374b24e..60b994dad07 100644 --- a/addons/account/report/account_report.py +++ b/addons/account/report/account_report.py @@ -66,7 +66,6 @@ class report_account_receivable(osv.osv): group by to_char(date,'YYYY:IW'), a.type )""") -report_account_receivable() #a.type in ('receivable','payable') class temp_range(osv.osv): @@ -77,7 +76,6 @@ class temp_range(osv.osv): 'name': fields.char('Range',size=64) } -temp_range() class report_aged_receivable(osv.osv): _name = "report.aged.receivable" @@ -147,7 +145,6 @@ class report_aged_receivable(osv.osv): select id,name from temp_range )""") -report_aged_receivable() class report_invoice_created(osv.osv): _name = "report.invoice.created" @@ -200,7 +197,6 @@ class report_invoice_created(osv.osv): AND (to_date(to_char(inv.create_date, 'YYYY-MM-dd'),'YYYY-MM-dd') > (CURRENT_DATE-15)) )""") -report_invoice_created() class report_account_type_sales(osv.osv): _name = "report.account_type.sales" @@ -241,7 +237,6 @@ class report_account_type_sales(osv.osv): group by to_char(inv.date_invoice, 'YYYY'),to_char(inv.date_invoice,'MM'),inv.currency_id, inv.period_id, inv_line.product_id, account.user_type )""") -report_account_type_sales() class report_account_sales(osv.osv): @@ -283,6 +278,5 @@ class report_account_sales(osv.osv): group by to_char(inv.date_invoice, 'YYYY'),to_char(inv.date_invoice,'MM'),inv.currency_id, inv.period_id, inv_line.product_id, account.id )""") -report_account_sales() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/report/account_treasury_report.py b/addons/account/report/account_treasury_report.py index 1ee411708c7..f7785d0827b 100644 --- a/addons/account/report/account_treasury_report.py +++ b/addons/account/report/account_treasury_report.py @@ -78,6 +78,5 @@ class account_treasury_report(osv.osv): group by p.id, p.fiscalyear_id, p.date_start, am.company_id ) """) -account_treasury_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/res_currency.py b/addons/account/res_currency.py index 9564b4e57c6..a7d3e5bc345 100644 --- a/addons/account/res_currency.py +++ b/addons/account/res_currency.py @@ -43,6 +43,5 @@ class res_currency_account(osv.osv): rate = float(tot2)/float(tot1) return rate -res_currency_account() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_automatic_reconcile.py b/addons/account/wizard/account_automatic_reconcile.py index 88d31b5b6c5..f6f0c90b1e2 100644 --- a/addons/account/wizard/account_automatic_reconcile.py +++ b/addons/account/wizard/account_automatic_reconcile.py @@ -246,6 +246,5 @@ class account_automatic_reconcile(osv.osv_memory): 'context': context, } -account_automatic_reconcile() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_change_currency.py b/addons/account/wizard/account_change_currency.py index 73fd52b3fcb..c3726ece676 100644 --- a/addons/account/wizard/account_change_currency.py +++ b/addons/account/wizard/account_change_currency.py @@ -73,6 +73,5 @@ class account_change_currency(osv.osv_memory): obj_inv.write(cr, uid, [invoice.id], {'currency_id': new_currency}, context=context) return {'type': 'ir.actions.act_window_close'} -account_change_currency() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_chart.py b/addons/account/wizard/account_chart.py index 32b83a0a670..38df2f7484d 100644 --- a/addons/account/wizard/account_chart.py +++ b/addons/account/wizard/account_chart.py @@ -105,6 +105,5 @@ class account_chart(osv.osv_memory): 'fiscalyear': _get_fiscalyear, } -account_chart() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_financial_report.py b/addons/account/wizard/account_financial_report.py index dde07eb7034..2ce7118335a 100644 --- a/addons/account/wizard/account_financial_report.py +++ b/addons/account/wizard/account_financial_report.py @@ -93,6 +93,5 @@ class accounting_report(osv.osv_memory): 'datas': data, } -accounting_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_fiscalyear_close.py b/addons/account/wizard/account_fiscalyear_close.py index d4f7b3e6654..6ceb833816b 100644 --- a/addons/account/wizard/account_fiscalyear_close.py +++ b/addons/account/wizard/account_fiscalyear_close.py @@ -278,6 +278,5 @@ class account_fiscalyear_close(osv.osv_memory): return {'type': 'ir.actions.act_window_close'} -account_fiscalyear_close() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_fiscalyear_close_state.py b/addons/account/wizard/account_fiscalyear_close_state.py index 746f1c47976..ed84ab65184 100644 --- a/addons/account/wizard/account_fiscalyear_close_state.py +++ b/addons/account/wizard/account_fiscalyear_close_state.py @@ -56,6 +56,5 @@ class account_fiscalyear_close_state(osv.osv_memory): return {'type': 'ir.actions.act_window_close'} -account_fiscalyear_close_state() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_invoice_refund.py b/addons/account/wizard/account_invoice_refund.py index ba48dd34fe2..5be9ebc5c80 100644 --- a/addons/account/wizard/account_invoice_refund.py +++ b/addons/account/wizard/account_invoice_refund.py @@ -220,6 +220,5 @@ class account_invoice_refund(osv.osv_memory): return self.compute_refund(cr, uid, ids, data_refund, context=context) -account_invoice_refund() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_invoice_state.py b/addons/account/wizard/account_invoice_state.py index 70d2984cef0..1aed2c6c477 100644 --- a/addons/account/wizard/account_invoice_state.py +++ b/addons/account/wizard/account_invoice_state.py @@ -42,7 +42,6 @@ class account_invoice_confirm(osv.osv_memory): return {'type': 'ir.actions.act_window_close'} -account_invoice_confirm() class account_invoice_cancel(osv.osv_memory): """ @@ -64,6 +63,5 @@ class account_invoice_cancel(osv.osv_memory): account_invoice_obj.signal_invoice_cancel(cr , uid, [record['id']]) return {'type': 'ir.actions.act_window_close'} -account_invoice_cancel() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_journal_select.py b/addons/account/wizard/account_journal_select.py index 7edd7923f4c..a4a1d4a6a9f 100644 --- a/addons/account/wizard/account_journal_select.py +++ b/addons/account/wizard/account_journal_select.py @@ -45,6 +45,5 @@ class account_journal_select(osv.osv_memory): result['context'] = str({'journal_id': journal_id, 'period_id': period_id}) return result -account_journal_select() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_move_bank_reconcile.py b/addons/account/wizard/account_move_bank_reconcile.py index 283068ae693..0fb4633163b 100644 --- a/addons/account/wizard/account_move_bank_reconcile.py +++ b/addons/account/wizard/account_move_bank_reconcile.py @@ -59,6 +59,5 @@ the bank account\nin the journal definition for reconciliation.')) 'type': 'ir.actions.act_window' } -account_move_bank_reconcile() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_move_line_reconcile_select.py b/addons/account/wizard/account_move_line_reconcile_select.py index 76af8538e05..658a6c5d503 100644 --- a/addons/account/wizard/account_move_line_reconcile_select.py +++ b/addons/account/wizard/account_move_line_reconcile_select.py @@ -50,6 +50,5 @@ class account_move_line_reconcile_select(osv.osv_memory): 'type': 'ir.actions.act_window' } -account_move_line_reconcile_select() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_move_line_select.py b/addons/account/wizard/account_move_line_select.py index b56621f2114..630db9fd1d6 100644 --- a/addons/account/wizard/account_move_line_select.py +++ b/addons/account/wizard/account_move_line_select.py @@ -67,6 +67,5 @@ class account_move_line_select(osv.osv_memory): result['domain']=result['domain'][0:-1]+','+domain+result['domain'][-1] return result -account_move_line_select() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_move_line_unreconcile_select.py b/addons/account/wizard/account_move_line_unreconcile_select.py index f9009fc8199..31fbeddeea8 100644 --- a/addons/account/wizard/account_move_line_unreconcile_select.py +++ b/addons/account/wizard/account_move_line_unreconcile_select.py @@ -39,6 +39,5 @@ class account_move_line_unreconcile_select(osv.osv_memory): 'type': 'ir.actions.act_window' } -account_move_line_unreconcile_select() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_open_closed_fiscalyear.py b/addons/account/wizard/account_open_closed_fiscalyear.py index 3b5d956d381..f4e90ae9f2f 100644 --- a/addons/account/wizard/account_open_closed_fiscalyear.py +++ b/addons/account/wizard/account_open_closed_fiscalyear.py @@ -43,6 +43,5 @@ class account_open_closed_fiscalyear(osv.osv_memory): cr.execute('delete from account_move where id IN %s', (tuple(ids_move),)) return {'type': 'ir.actions.act_window_close'} -account_open_closed_fiscalyear() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_period_close.py b/addons/account/wizard/account_period_close.py index fad757c0ff9..a50861c65ef 100644 --- a/addons/account/wizard/account_period_close.py +++ b/addons/account/wizard/account_period_close.py @@ -55,6 +55,5 @@ class account_period_close(osv.osv_memory): return {'type': 'ir.actions.act_window_close'} -account_period_close() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_reconcile.py b/addons/account/wizard/account_reconcile.py index 81609249fd7..aaf0ae4acf7 100644 --- a/addons/account/wizard/account_reconcile.py +++ b/addons/account/wizard/account_reconcile.py @@ -91,7 +91,6 @@ class account_move_line_reconcile(osv.osv_memory): period_id, journal_id, context=context) return {'type': 'ir.actions.act_window_close'} -account_move_line_reconcile() class account_move_line_reconcile_writeoff(osv.osv_memory): """ @@ -158,6 +157,5 @@ class account_move_line_reconcile_writeoff(osv.osv_memory): period_id, journal_id, context=context) return {'type': 'ir.actions.act_window_close'} -account_move_line_reconcile_writeoff() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_reconcile_partner_process.py b/addons/account/wizard/account_reconcile_partner_process.py index 1c317111888..bcbdb3fb5db 100644 --- a/addons/account/wizard/account_reconcile_partner_process.py +++ b/addons/account/wizard/account_reconcile_partner_process.py @@ -98,6 +98,5 @@ class account_partner_reconcile_process(osv.osv_memory): 'next_partner_id': _get_partner, } -account_partner_reconcile_process() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_report_account_balance.py b/addons/account/wizard/account_report_account_balance.py index e883a59c102..fd3c966e306 100644 --- a/addons/account/wizard/account_report_account_balance.py +++ b/addons/account/wizard/account_report_account_balance.py @@ -38,6 +38,5 @@ class account_balance_report(osv.osv_memory): data = self.pre_print_report(cr, uid, ids, data, context=context) return {'type': 'ir.actions.report.xml', 'report_name': 'account.account.balance', 'datas': data} -account_balance_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_report_aged_partner_balance.py b/addons/account/wizard/account_report_aged_partner_balance.py index 1054e7fa285..c483487b78f 100644 --- a/addons/account/wizard/account_report_aged_partner_balance.py +++ b/addons/account/wizard/account_report_aged_partner_balance.py @@ -86,6 +86,5 @@ class account_aged_trial_balance(osv.osv_memory): 'datas': data } -account_aged_trial_balance() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_report_central_journal.py b/addons/account/wizard/account_report_central_journal.py index da8be6d4735..a6bc111fa35 100644 --- a/addons/account/wizard/account_report_central_journal.py +++ b/addons/account/wizard/account_report_central_journal.py @@ -38,7 +38,6 @@ class account_central_journal(osv.osv_memory): 'datas': data, } -account_central_journal() #vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_report_common.py b/addons/account/wizard/account_report_common.py index 52a35327845..c457140684a 100644 --- a/addons/account/wizard/account_report_common.py +++ b/addons/account/wizard/account_report_common.py @@ -178,6 +178,5 @@ class account_common_report(osv.osv_memory): data['form']['used_context'] = used_context return self._print_report(cr, uid, ids, data, context=context) -account_common_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_report_common_account.py b/addons/account/wizard/account_report_common_account.py index 7cedf427386..13b83c32958 100644 --- a/addons/account/wizard/account_report_common_account.py +++ b/addons/account/wizard/account_report_common_account.py @@ -41,7 +41,6 @@ class account_common_account_report(osv.osv_memory): data['form'].update(self.read(cr, uid, ids, ['display_account'], context=context)[0]) return data -account_common_account_report() #vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_report_common_journal.py b/addons/account/wizard/account_report_common_journal.py index 609c2840ca6..a03315ecf7c 100644 --- a/addons/account/wizard/account_report_common_journal.py +++ b/addons/account/wizard/account_report_common_journal.py @@ -50,6 +50,5 @@ class account_common_journal_report(osv.osv_memory): data['form']['active_ids'] = self.pool.get('account.journal.period').search(cr, uid, [('journal_id', 'in', data['form']['journal_ids']), ('period_id', 'in', period_list)], context=context) return data -account_common_journal_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_report_common_partner.py b/addons/account/wizard/account_report_common_partner.py index 9779005b0de..d50a54ef32c 100644 --- a/addons/account/wizard/account_report_common_partner.py +++ b/addons/account/wizard/account_report_common_partner.py @@ -42,7 +42,6 @@ class account_common_partner_report(osv.osv_memory): data['form'].update(self.read(cr, uid, ids, ['result_selection'], context=context)[0]) return data -account_common_partner_report() #vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_report_general_journal.py b/addons/account/wizard/account_report_general_journal.py index 4a170a84db1..e5e516b1f38 100644 --- a/addons/account/wizard/account_report_general_journal.py +++ b/addons/account/wizard/account_report_general_journal.py @@ -34,7 +34,6 @@ class account_general_journal(osv.osv_memory): data = self.pre_print_report(cr, uid, ids, data, context=context) return {'type': 'ir.actions.report.xml', 'report_name': 'account.general.journal', 'datas': data} -account_general_journal() #vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_report_general_ledger.py b/addons/account/wizard/account_report_general_ledger.py index a10ff624fee..fae60df63fb 100644 --- a/addons/account/wizard/account_report_general_ledger.py +++ b/addons/account/wizard/account_report_general_ledger.py @@ -58,6 +58,5 @@ class account_report_general_ledger(osv.osv_memory): return { 'type': 'ir.actions.report.xml', 'report_name': 'account.general.ledger_landscape', 'datas': data} return { 'type': 'ir.actions.report.xml', 'report_name': 'account.general.ledger', 'datas': data} -account_report_general_ledger() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_report_partner_balance.py b/addons/account/wizard/account_report_partner_balance.py index 33a7a42072c..fbe18f27d69 100644 --- a/addons/account/wizard/account_report_partner_balance.py +++ b/addons/account/wizard/account_report_partner_balance.py @@ -50,6 +50,5 @@ class account_partner_balance(osv.osv_memory): 'datas': data, } -account_partner_balance() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_report_partner_ledger.py b/addons/account/wizard/account_report_partner_ledger.py index d1e6dd9809e..fdabe49ff17 100644 --- a/addons/account/wizard/account_report_partner_ledger.py +++ b/addons/account/wizard/account_report_partner_ledger.py @@ -67,6 +67,5 @@ class account_partner_ledger(osv.osv_memory): 'datas': data, } -account_partner_ledger() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_report_print_journal.py b/addons/account/wizard/account_report_print_journal.py index b91fe04660a..3ad45268248 100644 --- a/addons/account/wizard/account_report_print_journal.py +++ b/addons/account/wizard/account_report_print_journal.py @@ -72,7 +72,6 @@ class account_print_journal(osv.osv_memory): report_name = 'account.journal.period.print' return {'type': 'ir.actions.report.xml', 'report_name': report_name, 'datas': data} -account_print_journal() #vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_state_open.py b/addons/account/wizard/account_state_open.py index 1351b8f0ac1..1950a139983 100644 --- a/addons/account/wizard/account_state_open.py +++ b/addons/account/wizard/account_state_open.py @@ -37,6 +37,5 @@ class account_state_open(osv.osv_memory): obj_invoice.signal_open_test(cr, uid, context['active_ids'][0]) return {'type': 'ir.actions.act_window_close'} -account_state_open() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_subscription_generate.py b/addons/account/wizard/account_subscription_generate.py index f5babc4fd87..a61f3eee252 100644 --- a/addons/account/wizard/account_subscription_generate.py +++ b/addons/account/wizard/account_subscription_generate.py @@ -48,6 +48,5 @@ class account_subscription_generate(osv.osv_memory): result['domain'] = str([('id','in',moves_created)]) return result -account_subscription_generate() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_tax_chart.py b/addons/account/wizard/account_tax_chart.py index 84859e2077c..49492a04604 100644 --- a/addons/account/wizard/account_tax_chart.py +++ b/addons/account/wizard/account_tax_chart.py @@ -73,6 +73,5 @@ class account_tax_chart(osv.osv_memory): 'target_move': 'posted' } -account_tax_chart() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_unreconcile.py b/addons/account/wizard/account_unreconcile.py index ff592a329c7..425e549fec2 100644 --- a/addons/account/wizard/account_unreconcile.py +++ b/addons/account/wizard/account_unreconcile.py @@ -33,7 +33,6 @@ class account_unreconcile(osv.osv_memory): obj_move_line._remove_move_reconcile(cr, uid, context['active_ids'], context=context) return {'type': 'ir.actions.act_window_close'} -account_unreconcile() class account_unreconcile_reconcile(osv.osv_memory): _name = "account.unreconcile.reconcile" @@ -48,6 +47,5 @@ class account_unreconcile_reconcile(osv.osv_memory): obj_move_reconcile.unlink(cr, uid, rec_ids, context=context) return {'type': 'ir.actions.act_window_close'} -account_unreconcile_reconcile() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_use_model.py b/addons/account/wizard/account_use_model.py index 795284c8fef..06f02719065 100644 --- a/addons/account/wizard/account_use_model.py +++ b/addons/account/wizard/account_use_model.py @@ -71,6 +71,5 @@ class account_use_model(osv.osv_memory): 'type': 'ir.actions.act_window', } -account_use_model() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_validate_account_move.py b/addons/account/wizard/account_validate_account_move.py index faf7f8e2ccd..324248284f1 100644 --- a/addons/account/wizard/account_validate_account_move.py +++ b/addons/account/wizard/account_validate_account_move.py @@ -40,7 +40,6 @@ class validate_account_move(osv.osv_memory): obj_move.button_validate(cr, uid, ids_move, context=context) return {'type': 'ir.actions.act_window_close'} -validate_account_move() class validate_account_move_lines(osv.osv_memory): _name = "validate.account.move.lines" @@ -61,7 +60,6 @@ class validate_account_move_lines(osv.osv_memory): raise osv.except_osv(_('Warning!'), _('Selected Entry Lines does not have any account move enties in draft state.')) obj_move.button_validate(cr, uid, move_ids, context) return {'type': 'ir.actions.act_window_close'} -validate_account_move_lines() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_vat.py b/addons/account/wizard/account_vat.py index a60a7906e28..37bf4b029a6 100644 --- a/addons/account/wizard/account_vat.py +++ b/addons/account/wizard/account_vat.py @@ -59,6 +59,5 @@ class account_vat_declaration(osv.osv_memory): 'datas': datas, } -account_vat_declaration() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/pos_box.py b/addons/account/wizard/pos_box.py index 810d101eefd..1d6d13e140b 100644 --- a/addons/account/wizard/pos_box.py +++ b/addons/account/wizard/pos_box.py @@ -63,7 +63,6 @@ class CashBoxIn(CashBox): 'name' : box.name, } -CashBoxIn() class CashBoxOut(CashBox): _name = 'cash.box.out' @@ -78,4 +77,3 @@ class CashBoxOut(CashBox): 'name' : box.name, } -CashBoxOut() diff --git a/addons/account_analytic_default/account_analytic_default.py b/addons/account_analytic_default/account_analytic_default.py index 9d7df0aa010..1696874f0f5 100644 --- a/addons/account_analytic_default/account_analytic_default.py +++ b/addons/account_analytic_default/account_analytic_default.py @@ -67,7 +67,6 @@ class account_analytic_default(osv.osv): best_index = index return res -account_analytic_default() class account_invoice_line(osv.osv): _inherit = "account.invoice.line" @@ -82,7 +81,6 @@ class account_invoice_line(osv.osv): res_prod['value'].update({'account_analytic_id': False}) return res_prod -account_invoice_line() class stock_picking(osv.osv): @@ -97,7 +95,6 @@ class stock_picking(osv.osv): return super(stock_picking, self)._get_account_analytic_invoice(cursor, user, picking, move_line) -stock_picking() class sale_order_line(osv.osv): _inherit = "sale.order.line" @@ -118,6 +115,5 @@ class sale_order_line(osv.osv): inv_line_obj.write(cr, uid, [line.id], {'account_analytic_id': rec.analytic_id.id}, context=context) return create_ids -sale_order_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_analytic_plans/account_analytic_plans.py b/addons/account_analytic_plans/account_analytic_plans.py index 40a227d8ceb..54b15ad565b 100644 --- a/addons/account_analytic_plans/account_analytic_plans.py +++ b/addons/account_analytic_plans/account_analytic_plans.py @@ -65,7 +65,6 @@ class account_analytic_line(osv.osv): 'percentage': fields.float('Percentage') } -account_analytic_line() class account_analytic_plan(osv.osv): _name = "account.analytic.plan" @@ -75,7 +74,6 @@ class account_analytic_plan(osv.osv): 'plan_ids': fields.one2many('account.analytic.plan.line', 'plan_id', 'Analytic Plans'), } -account_analytic_plan() class account_analytic_plan_line(osv.osv): _name = "account.analytic.plan.line" @@ -94,7 +92,6 @@ class account_analytic_plan_line(osv.osv): 'max_required': 100.0, } -account_analytic_plan_line() class account_analytic_plan_instance(osv.osv): _name = "account.analytic.plan.instance" @@ -257,7 +254,6 @@ class account_analytic_plan_instance(osv.osv): vals['code'] = this.code and (str(this.code)+'*') or "*" return super(account_analytic_plan_instance, self).write(cr, uid, ids, vals, context=context) -account_analytic_plan_instance() class account_analytic_plan_instance_line(osv.osv): _name = "account.analytic.plan.instance.line" @@ -280,7 +276,6 @@ class account_analytic_plan_instance_line(osv.osv): res.append((record['id'], record['analytic_account_id'])) return res -account_analytic_plan_instance_line() class account_journal(osv.osv): _inherit = "account.journal" @@ -289,7 +284,6 @@ class account_journal(osv.osv): 'plan_id': fields.many2one('account.analytic.plan', 'Analytic Plans'), } -account_journal() class account_invoice_line(osv.osv): _inherit = "account.invoice.line" @@ -315,7 +309,6 @@ class account_invoice_line(osv.osv): res_prod['value'].update({'analytics_id': rec.analytics_id.id}) return res_prod -account_invoice_line() class account_move_line(osv.osv): @@ -370,7 +363,6 @@ class account_move_line(osv.osv): result = super(account_move_line, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu) return result -account_move_line() class account_invoice(osv.osv): _name = "account.invoice" @@ -425,14 +417,12 @@ class account_invoice(osv.osv): il['analytic_lines'].append((0, 0, al_vals)) return iml -account_invoice() class account_analytic_plan(osv.osv): _inherit = "account.analytic.plan" _columns = { 'default_instance_id': fields.many2one('account.analytic.plan.instance', 'Default Entries'), } -account_analytic_plan() class analytic_default(osv.osv): _inherit = "account.analytic.default" @@ -440,7 +430,6 @@ class analytic_default(osv.osv): 'analytics_id': fields.many2one('account.analytic.plan.instance', 'Analytic Distribution'), } -analytic_default() class sale_order_line(osv.osv): _inherit = "sale.order.line" @@ -459,7 +448,6 @@ class sale_order_line(osv.osv): inv_line_obj.write(cr, uid, [line.id], {'analytics_id': rec.analytics_id.id}, context=context) return create_ids -sale_order_line() class account_bank_statement(osv.osv): @@ -488,7 +476,6 @@ class account_bank_statement(osv.osv): continue return True -account_bank_statement() class account_bank_statement_line(osv.osv): @@ -497,6 +484,5 @@ class account_bank_statement_line(osv.osv): _columns = { 'analytics_id': fields.many2one('account.analytic.plan.instance', 'Analytic Distribution'), } -account_bank_statement_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_analytic_plans/wizard/account_crossovered_analytic.py b/addons/account_analytic_plans/wizard/account_crossovered_analytic.py index 640443c8a0b..d3581d6c457 100644 --- a/addons/account_analytic_plans/wizard/account_crossovered_analytic.py +++ b/addons/account_analytic_plans/wizard/account_crossovered_analytic.py @@ -71,6 +71,5 @@ class account_crossovered_analytic(osv.osv_memory): 'datas': datas, } -account_crossovered_analytic() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_analytic_plans/wizard/analytic_plan_create_model.py b/addons/account_analytic_plans/wizard/analytic_plan_create_model.py index 7038a6f1025..3a206aa227e 100644 --- a/addons/account_analytic_plans/wizard/analytic_plan_create_model.py +++ b/addons/account_analytic_plans/wizard/analytic_plan_create_model.py @@ -55,6 +55,5 @@ class analytic_plan_create_model(osv.osv_memory): else: return {'type': 'ir.actions.act_window_close'} -analytic_plan_create_model() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_anglo_saxon/product.py b/addons/account_anglo_saxon/product.py index 443642d048b..b52d9ed3bbd 100644 --- a/addons/account_anglo_saxon/product.py +++ b/addons/account_anglo_saxon/product.py @@ -48,7 +48,6 @@ class product_category(osv.osv): help="This account will be used to value outgoing stock using cost price."), } -product_category() class product_template(osv.osv): _inherit = "product.template" @@ -78,7 +77,6 @@ class product_template(osv.osv): help="This account will be used to value outgoing stock using cost price."), } -product_template() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_anglo_saxon/purchase.py b/addons/account_anglo_saxon/purchase.py index 959f8b7eb49..c10a2a97d80 100644 --- a/addons/account_anglo_saxon/purchase.py +++ b/addons/account_anglo_saxon/purchase.py @@ -37,6 +37,5 @@ class purchase_order(osv.osv): new_account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, acc_id) line.update({'account_id': new_account_id}) return line -purchase_order() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_anglo_saxon/stock.py b/addons/account_anglo_saxon/stock.py index 191249a6640..1cf3ecf21ef 100644 --- a/addons/account_anglo_saxon/stock.py +++ b/addons/account_anglo_saxon/stock.py @@ -57,7 +57,6 @@ class stock_picking(osv.osv): self.pool.get('account.invoice.line').write(cr, uid, [ol.id], {'account_id': a}) return res -stock_picking() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py index c35e1c4e807..3a1bb083762 100644 --- a/addons/account_asset/account_asset.py +++ b/addons/account_asset/account_asset.py @@ -70,7 +70,6 @@ class account_asset_category(osv.osv): res['value'] = {'account_depreciation_id': account_asset_id} return res -account_asset_category() class account_asset_asset(osv.osv): _name = 'account.asset.asset' @@ -361,7 +360,6 @@ class account_asset_asset(osv.osv): 'context': context, } -account_asset_asset() class account_asset_depreciation_line(osv.osv): _name = 'account.asset.depreciation.line' @@ -456,7 +454,6 @@ class account_asset_depreciation_line(osv.osv): asset.write({'state': 'close'}) return created_move_ids -account_asset_depreciation_line() class account_move_line(osv.osv): _inherit = 'account.move.line' @@ -465,7 +462,6 @@ class account_move_line(osv.osv): 'entry_ids': fields.one2many('account.move.line', 'asset_id', 'Entries', readonly=True, states={'draft':[('readonly',False)]}), } -account_move_line() class account_asset_history(osv.osv): _name = 'account.asset.history' @@ -490,6 +486,5 @@ class account_asset_history(osv.osv): 'user_id': lambda self, cr, uid, ctx: uid } -account_asset_history() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_asset/account_asset_invoice.py b/addons/account_asset/account_asset_invoice.py index 7e2f24f0d0a..d5b1c298c0b 100644 --- a/addons/account_asset/account_asset_invoice.py +++ b/addons/account_asset/account_asset_invoice.py @@ -35,7 +35,6 @@ class account_invoice(osv.osv): res['asset_id'] = x.get('asset_id', False) return res -account_invoice() class account_invoice_line(osv.osv): @@ -66,6 +65,5 @@ class account_invoice_line(osv.osv): asset_obj.validate(cr, uid, [asset_id], context=context) return True -account_invoice_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_asset/report/account_asset_report.py b/addons/account_asset/report/account_asset_report.py index 1554880ac38..40ab1c778f0 100644 --- a/addons/account_asset/report/account_asset_report.py +++ b/addons/account_asset/report/account_asset_report.py @@ -82,6 +82,5 @@ class asset_asset_report(osv.osv): a.purchase_value, a.id, a.salvage_value )""") -asset_asset_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_asset/wizard/account_asset_change_duration.py b/addons/account_asset/wizard/account_asset_change_duration.py index 19782c76367..f27507ac2b3 100755 --- a/addons/account_asset/wizard/account_asset_change_duration.py +++ b/addons/account_asset/wizard/account_asset_change_duration.py @@ -127,6 +127,5 @@ class asset_modify(osv.osv_memory): asset_obj.compute_depreciation_board(cr, uid, [asset_id], context=context) return {'type': 'ir.actions.act_window_close'} -asset_modify() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_asset/wizard/wizard_asset_compute.py b/addons/account_asset/wizard/wizard_asset_compute.py index cc870329840..ee18a832e7b 100755 --- a/addons/account_asset/wizard/wizard_asset_compute.py +++ b/addons/account_asset/wizard/wizard_asset_compute.py @@ -55,6 +55,5 @@ class asset_depreciation_confirmation_wizard(osv.osv_memory): 'type': 'ir.actions.act_window', } -asset_depreciation_confirmation_wizard() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_bank_statement_extensions/account_bank_statement.py b/addons/account_bank_statement_extensions/account_bank_statement.py index 60dcc6dfa25..b9e44ee8f9c 100644 --- a/addons/account_bank_statement_extensions/account_bank_statement.py +++ b/addons/account_bank_statement_extensions/account_bank_statement.py @@ -56,7 +56,6 @@ class account_bank_statement(osv.osv): (tuple([x.id for x in st.line_ids]),)) return True -account_bank_statement() class account_bank_statement_line_global(osv.osv): _name = 'account.bank.statement.line.global' @@ -100,7 +99,6 @@ class account_bank_statement_line_global(osv.osv): ids = self.search(cr, user, args, context=context, limit=limit) return self.name_get(cr, user, ids, context=context) -account_bank_statement_line_global() class account_bank_statement_line(osv.osv): _inherit = 'account.bank.statement.line' @@ -130,6 +128,5 @@ class account_bank_statement_line(osv.osv): Please go to the associated bank statement in order to delete and/or modify bank statement line.')) return super(account_bank_statement_line, self).unlink(cr, uid, ids, context=context) -account_bank_statement_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_bank_statement_extensions/res_partner_bank.py b/addons/account_bank_statement_extensions/res_partner_bank.py index f866634a08c..22baa78d39f 100644 --- a/addons/account_bank_statement_extensions/res_partner_bank.py +++ b/addons/account_bank_statement_extensions/res_partner_bank.py @@ -35,5 +35,4 @@ class res_partner_bank(osv.osv): ids = self.search(cr, user, args, context=context, limit=limit) return self.name_get(cr, user, ids, context=context) -res_partner_bank() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_bank_statement_extensions/wizard/cancel_statement_line.py b/addons/account_bank_statement_extensions/wizard/cancel_statement_line.py index 46d71354d4b..15c242e9c33 100644 --- a/addons/account_bank_statement_extensions/wizard/cancel_statement_line.py +++ b/addons/account_bank_statement_extensions/wizard/cancel_statement_line.py @@ -32,6 +32,5 @@ class cancel_statement_line(osv.osv_memory): line_obj.write(cr, uid, line_ids, {'state': 'draft'}, context=context) return {} -cancel_statement_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_bank_statement_extensions/wizard/confirm_statement_line.py b/addons/account_bank_statement_extensions/wizard/confirm_statement_line.py index 3a887a52441..c330a2cc359 100644 --- a/addons/account_bank_statement_extensions/wizard/confirm_statement_line.py +++ b/addons/account_bank_statement_extensions/wizard/confirm_statement_line.py @@ -32,6 +32,5 @@ class confirm_statement_line(osv.osv_memory): line_obj.write(cr, uid, line_ids, {'state': 'confirm'}, context=context) return {} -confirm_statement_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_budget/account_budget.py b/addons/account_budget/account_budget.py index a88c468fff1..e6fc3a29668 100644 --- a/addons/account_budget/account_budget.py +++ b/addons/account_budget/account_budget.py @@ -48,7 +48,6 @@ class account_budget_post(osv.osv): } _order = "name" -account_budget_post() class crossovered_budget(osv.osv): @@ -104,7 +103,6 @@ class crossovered_budget(osv.osv): }) return True -crossovered_budget() class crossovered_budget_lines(osv.osv): @@ -202,7 +200,6 @@ class crossovered_budget_lines(osv.osv): 'company_id': fields.related('crossovered_budget_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True) } -crossovered_budget_lines() class account_analytic_account(osv.osv): _inherit = "account.analytic.account" @@ -211,6 +208,5 @@ class account_analytic_account(osv.osv): 'crossovered_budget_line': fields.one2many('crossovered.budget.lines', 'analytic_account_id', 'Budget Lines'), } -account_analytic_account() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_budget/wizard/account_budget_analytic.py b/addons/account_budget/wizard/account_budget_analytic.py index 0cdb7504f75..90285b90d1e 100644 --- a/addons/account_budget/wizard/account_budget_analytic.py +++ b/addons/account_budget/wizard/account_budget_analytic.py @@ -50,6 +50,5 @@ class account_budget_analytic(osv.osv_memory): 'datas': datas, } -account_budget_analytic() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_budget/wizard/account_budget_crossovered_report.py b/addons/account_budget/wizard/account_budget_crossovered_report.py index 97fc43c8e9d..6f89a3cd95c 100644 --- a/addons/account_budget/wizard/account_budget_crossovered_report.py +++ b/addons/account_budget/wizard/account_budget_crossovered_report.py @@ -51,6 +51,5 @@ class account_budget_crossvered_report(osv.osv_memory): 'datas': datas, } -account_budget_crossvered_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_budget/wizard/account_budget_crossovered_summary_report.py b/addons/account_budget/wizard/account_budget_crossovered_summary_report.py index f42c39ec6ac..6e3131b584c 100644 --- a/addons/account_budget/wizard/account_budget_crossovered_summary_report.py +++ b/addons/account_budget/wizard/account_budget_crossovered_summary_report.py @@ -53,7 +53,6 @@ class account_budget_crossvered_summary_report(osv.osv_memory): 'datas': datas, } -account_budget_crossvered_summary_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_budget/wizard/account_budget_report.py b/addons/account_budget/wizard/account_budget_report.py index 5db6c68d508..54c3180ee0d 100644 --- a/addons/account_budget/wizard/account_budget_report.py +++ b/addons/account_budget/wizard/account_budget_report.py @@ -52,6 +52,5 @@ class account_budget_report(osv.osv_memory): 'datas': datas, } -account_budget_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_check_writing/account.py b/addons/account_check_writing/account.py index 62b7336dc5f..035e3a710b0 100644 --- a/addons/account_check_writing/account.py +++ b/addons/account_check_writing/account.py @@ -29,7 +29,6 @@ class account_journal(osv.osv): 'use_preprint_check': fields.boolean('Use Preprinted Check'), } -account_journal() class res_company(osv.osv): _inherit = "res.company" @@ -46,5 +45,4 @@ class res_company(osv.osv): 'check_layout' : lambda *a: 'top', } -res_company() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_check_writing/account_voucher.py b/addons/account_check_writing/account_voucher.py index 7a5d12f5cff..8e1ad2e1fbf 100644 --- a/addons/account_check_writing/account_voucher.py +++ b/addons/account_check_writing/account_voucher.py @@ -97,4 +97,3 @@ class account_voucher(osv.osv): res['arch'] = etree.tostring(doc) return res -account_voucher() diff --git a/addons/account_check_writing/wizard/account_check_batch_printing.py b/addons/account_check_writing/wizard/account_check_batch_printing.py index afeb5de6445..c3a13e2c687 100644 --- a/addons/account_check_writing/wizard/account_check_batch_printing.py +++ b/addons/account_check_writing/wizard/account_check_batch_printing.py @@ -83,5 +83,4 @@ class account_check_write(osv.osv_memory): 'nodestroy': True } -account_check_write() diff --git a/addons/account_followup/report/account_followup_report.py b/addons/account_followup/report/account_followup_report.py index 9ca8d3c2332..8d120cb88ba 100644 --- a/addons/account_followup/report/account_followup_report.py +++ b/addons/account_followup/report/account_followup_report.py @@ -91,6 +91,5 @@ class account_followup_stat(osv.osv): GROUP BY l.id, l.partner_id, l.company_id, l.blocked, l.period_id )""") -account_followup_stat() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_followup/wizard/account_followup_print.py b/addons/account_followup/wizard/account_followup_print.py index 37b4300b03f..c14b5c071f6 100644 --- a/addons/account_followup/wizard/account_followup_print.py +++ b/addons/account_followup/wizard/account_followup_print.py @@ -72,7 +72,6 @@ class account_followup_stat_by_partner(osv.osv): GROUP BY l.partner_id, l.company_id )""") #Blocked is to take into account litigation -account_followup_stat_by_partner() class account_followup_sending_results(osv.osv_memory): @@ -106,7 +105,6 @@ class account_followup_sending_results(osv.osv_memory): 'description':_get_description, } -account_followup_sending_results() class account_followup_print(osv.osv_memory): @@ -315,6 +313,5 @@ class account_followup_print(osv.osv_memory): to_update[str(id)]= {'level': fups[followup_line_id][1], 'partner_id': stat_line_id} return {'partner_ids': partner_list, 'to_update': to_update} -account_followup_print() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_payment/account_invoice.py b/addons/account_payment/account_invoice.py index bcce77a54ce..8fa98780c83 100644 --- a/addons/account_payment/account_invoice.py +++ b/addons/account_payment/account_invoice.py @@ -42,6 +42,5 @@ class Invoice(osv.osv): raise osv.except_osv(_('Error!'), _("You cannot cancel an invoice which has already been imported in a payment order. Remove it from the following payment order : %s."%(payment_order_name))) return super(Invoice, self).action_cancel(cr, uid, ids, context=context) -Invoice() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_payment/account_move_line.py b/addons/account_payment/account_move_line.py index c601d9e8da3..266876db95f 100644 --- a/addons/account_payment/account_move_line.py +++ b/addons/account_payment/account_move_line.py @@ -57,6 +57,5 @@ class account_move_line(osv.osv): raise osv.except_osv(_('Error!'), _('There is no partner defined on the entry line.')) return line2bank -account_move_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_payment/account_payment.py b/addons/account_payment/account_payment.py index 2b0fe1271d2..dc001e2e2a3 100644 --- a/addons/account_payment/account_payment.py +++ b/addons/account_payment/account_payment.py @@ -62,7 +62,6 @@ class payment_mode(osv.osv): return {'value': result} -payment_mode() class payment_order(osv.osv): _name = 'payment.order' @@ -170,7 +169,6 @@ class payment_order(osv.osv): payment_line_obj.write(cr, uid, payment_line_ids, {'date': False}, context=context) return super(payment_order, self).write(cr, uid, ids, vals, context=context) -payment_order() class payment_line(osv.osv): _name = 'payment.line' @@ -417,6 +415,5 @@ class payment_line(osv.osv): res['communication2']['states']['normal'] = [('readonly', False)] return res -payment_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_payment/wizard/account_payment_order.py b/addons/account_payment/wizard/account_payment_order.py index 4bd969726fe..08d36c45eff 100644 --- a/addons/account_payment/wizard/account_payment_order.py +++ b/addons/account_payment/wizard/account_payment_order.py @@ -118,6 +118,5 @@ class payment_order_create(osv.osv_memory): 'target': 'new', } -payment_order_create() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_payment/wizard/account_payment_pay.py b/addons/account_payment/wizard/account_payment_pay.py index 03ff46125f5..5e2dc652068 100644 --- a/addons/account_payment/wizard/account_payment_pay.py +++ b/addons/account_payment/wizard/account_payment_pay.py @@ -54,6 +54,5 @@ class account_payment_make_payment(osv.osv_memory): # id = obj_model.read(cr, uid, [result], ['res_id'])[0]['res_id'] # return obj_act.read(cr, uid, [id])[0] -account_payment_make_payment() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_payment/wizard/account_payment_populate_statement.py b/addons/account_payment/wizard/account_payment_populate_statement.py index edd47065e3a..92b1b1452f5 100644 --- a/addons/account_payment/wizard/account_payment_populate_statement.py +++ b/addons/account_payment/wizard/account_payment_populate_statement.py @@ -118,6 +118,5 @@ class account_payment_populate_statement(osv.osv_memory): line_obj.write(cr, uid, [line.id], {'bank_statement_line_id': st_line_id}) return {'type': 'ir.actions.act_window_close'} -account_payment_populate_statement() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_sequence/account_sequence.py b/addons/account_sequence/account_sequence.py index 5b344600599..3b8b2335068 100644 --- a/addons/account_sequence/account_sequence.py +++ b/addons/account_sequence/account_sequence.py @@ -40,7 +40,6 @@ class account_move(osv.osv): self.write(cr, uid, [move.id], {'internal_sequence_number': seq_no}) return res -account_move() class account_journal(osv.osv): _inherit = "account.journal" @@ -49,7 +48,6 @@ class account_journal(osv.osv): 'internal_sequence_id': fields.many2one('ir.sequence', 'Internal Sequence', help="This sequence will be used to maintain the internal number for the journal entries related to this journal."), } -account_journal() class account_move_line(osv.osv): _inherit = "account.move.line" @@ -58,6 +56,5 @@ class account_move_line(osv.osv): 'internal_sequence_number': fields.related('move_id','internal_sequence_number', type='char', relation='account.move', help='Internal Sequence Number', string='Internal Number'), } -account_move_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_sequence/account_sequence_installer.py b/addons/account_sequence/account_sequence_installer.py index e800bbad7ee..91316a61962 100644 --- a/addons/account_sequence/account_sequence_installer.py +++ b/addons/account_sequence/account_sequence_installer.py @@ -79,6 +79,5 @@ class account_sequence_installer(osv.osv_memory): ir_values_obj.set(cr, uid, key='default', key2=False, name='internal_sequence_id', models =[('account.journal', False)], value=ir_seq) return res -account_sequence_installer() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_test/account_test.py b/addons/account_test/account_test.py index da7bb8e308d..98e27380837 100644 --- a/addons/account_test/account_test.py +++ b/addons/account_test/account_test.py @@ -56,5 +56,4 @@ class accounting_assert_test(osv.osv): 'sequence': 10, } -accounting_assert_test() diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index c6f754ed18f..15664696bd5 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -40,7 +40,6 @@ class res_company(osv.osv): domain="[('type', '=', 'other')]",), } -res_company() class account_config_settings(osv.osv_memory): _inherit = 'account.config.settings' @@ -1488,7 +1487,6 @@ class account_voucher_line(osv.osv): 'type':ttype }) return values -account_voucher_line() class account_bank_statement(osv.osv): _inherit = 'account.bank.statement' @@ -1540,7 +1538,6 @@ class account_bank_statement(osv.osv): raise osv.except_osv(_('Unable to change journal !'), _('You can not change the journal as you already reconciled some statement lines!')) return super(account_bank_statement, self).write(cr, uid, ids, vals, context=context) -account_bank_statement() class account_bank_statement_line(osv.osv): _inherit = 'account.bank.statement.line' @@ -1594,7 +1591,6 @@ class account_bank_statement_line(osv.osv): voucher_obj.unlink(cr, uid, unlink_ids, context=context) return super(account_bank_statement_line, self).unlink(cr, uid, ids, context=context) -account_bank_statement_line() def resolve_o2m_operations(cr, uid, target_osv, operations, fields, context): results = [] diff --git a/addons/account_voucher/invoice.py b/addons/account_voucher/invoice.py index c0584ddbd52..03a3e5fab67 100644 --- a/addons/account_voucher/invoice.py +++ b/addons/account_voucher/invoice.py @@ -52,6 +52,5 @@ class invoice(osv.osv): } } -invoice() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_voucher/report/account_voucher_sales_receipt.py b/addons/account_voucher/report/account_voucher_sales_receipt.py index 2ab76c252f5..246cd8b47e8 100644 --- a/addons/account_voucher/report/account_voucher_sales_receipt.py +++ b/addons/account_voucher/report/account_voucher_sales_receipt.py @@ -126,6 +126,5 @@ class sale_receipt_report(osv.osv): ) """) -sale_receipt_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_voucher/wizard/account_statement_from_invoice.py b/addons/account_voucher/wizard/account_statement_from_invoice.py index fce251df175..de5121a819b 100644 --- a/addons/account_voucher/wizard/account_statement_from_invoice.py +++ b/addons/account_voucher/wizard/account_statement_from_invoice.py @@ -123,6 +123,5 @@ class account_statement_from_invoice_lines(osv.osv_memory): }, context=context) return {'type': 'ir.actions.act_window_close'} -account_statement_from_invoice_lines() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/analytic_contract_hr_expense/analytic_contract_hr_expense.py b/addons/analytic_contract_hr_expense/analytic_contract_hr_expense.py index 8b10381434d..a1bf43714ce 100644 --- a/addons/analytic_contract_hr_expense/analytic_contract_hr_expense.py +++ b/addons/analytic_contract_hr_expense/analytic_contract_hr_expense.py @@ -152,6 +152,5 @@ class account_analytic_account(osv.osv): 'nodestroy': True, } -account_analytic_account() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/audittrail/wizard/audittrail_view_log.py b/addons/audittrail/wizard/audittrail_view_log.py index d06da281933..4385970f8d9 100644 --- a/addons/audittrail/wizard/audittrail_view_log.py +++ b/addons/audittrail/wizard/audittrail_view_log.py @@ -61,6 +61,5 @@ class audittrail_view_log(osv.osv_memory): #End Loop return result -audittrail_view_log() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auth_ldap/users_ldap.py b/addons/auth_ldap/users_ldap.py index e8778449da5..8e7128ca91e 100644 --- a/addons/auth_ldap/users_ldap.py +++ b/addons/auth_ldap/users_ldap.py @@ -227,7 +227,6 @@ class CompanyLDAP(osv.osv): 'create_user': True, } -CompanyLDAP() class res_company(osv.osv): @@ -236,7 +235,6 @@ class res_company(osv.osv): 'ldaps': fields.one2many( 'res.company.ldap', 'company', 'LDAP Parameters'), } -res_company() class users(osv.osv): @@ -282,5 +280,4 @@ class users(osv.osv): cr.close() raise openerp.exceptions.AccessDenied() -users() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auth_openid/res_users.py b/addons/auth_openid/res_users.py index feea2d8d396..47e119f2a1e 100644 --- a/addons/auth_openid/res_users.py +++ b/addons/auth_openid/res_users.py @@ -91,7 +91,6 @@ class res_users(osv.osv): raise self._uid_cache.setdefault(db, {})[uid] = passwd -res_users() diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py index 9dac1c4d262..896349ec5e6 100644 --- a/addons/base_calendar/base_calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -632,7 +632,6 @@ property or property parameter."), res = super(calendar_attendee, self).create(cr, uid, vals, context=context) return res -calendar_attendee() class res_alarm(osv.osv): """Resource Alarm """ @@ -763,7 +762,6 @@ true, it will allow you to hide the event alarm information without removing it. where id=%%s' % model_obj._table,(data.id,)) return True -res_alarm() class calendar_alarm(osv.osv): _name = 'calendar.alarm' @@ -918,7 +916,6 @@ From: self.write(cr, uid, [alarm.id], update_vals) return True -calendar_alarm() class calendar_event(osv.osv): @@ -1610,7 +1607,6 @@ rule or repeating pattern of time to exclude from the recurring rule."), """ return self.write(cr, uid, ids, {'state': 'confirmed'}, context) -calendar_event() class calendar_todo(osv.osv): """ Calendar Task """ @@ -1659,7 +1655,6 @@ class calendar_todo(osv.osv): __attribute__ = {} -calendar_todo() class ir_values(osv.osv): @@ -1704,7 +1699,6 @@ class ir_values(osv.osv): return super(ir_values, self).get(cr, uid, key, key2, new_model, \ meta, context, res_id_req, without_user, key2_req) -ir_values() class ir_model(osv.osv): @@ -1730,7 +1724,6 @@ class ir_model(osv.osv): val['id'] = base_calendar_id2real_id(val['id']) return isinstance(ids, (str, int, long)) and data[0] or data -ir_model() original_exp_report = openerp.service.report.exp_report diff --git a/addons/base_iban/base_iban.py b/addons/base_iban/base_iban.py index 0872af2d0f3..d50ca33ff15 100644 --- a/addons/base_iban/base_iban.py +++ b/addons/base_iban/base_iban.py @@ -181,6 +181,5 @@ class res_partner_bank(osv.osv): (_check_bank, '\nPlease define BIC/Swift code on bank for bank type IBAN Account to make valid payments', ['bic']) ] -res_partner_bank() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/base_report_designer.py b/addons/base_report_designer/base_report_designer.py index cdfc7112d09..6a0a2722755 100644 --- a/addons/base_report_designer/base_report_designer.py +++ b/addons/base_report_designer/base_report_designer.py @@ -75,7 +75,6 @@ class report_xml(osv.osv): 'report_rml_content': rml_data and base64.encodestring(rml_data) or False } -report_xml() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/installer.py b/addons/base_report_designer/installer.py index bfda6e7a30f..0c0e6086df0 100644 --- a/addons/base_report_designer/installer.py +++ b/addons/base_report_designer/installer.py @@ -58,6 +58,5 @@ class base_report_designer_installer(osv.osv_memory): 4. if your connection success, A message appears like 'You can start creating your report in current document.'. """ } -base_report_designer_installer() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/wizard/base_report_designer_modify.py b/addons/base_report_designer/wizard/base_report_designer_modify.py index 838f591a2f4..e8ed45e7ce1 100644 --- a/addons/base_report_designer/wizard/base_report_designer_modify.py +++ b/addons/base_report_designer/wizard/base_report_designer_modify.py @@ -54,7 +54,6 @@ class base_report_sxw(osv.osv_memory): 'target': 'new', } -base_report_sxw() class base_report_file_sxw(osv.osv_memory): """Base Report File sxw """ @@ -116,7 +115,6 @@ class base_report_file_sxw(osv.osv_memory): 'type': 'ir.actions.act_window', 'target': 'new', } -base_report_file_sxw() class base_report_rml_save(osv.osv_memory): """Base Report file Save""" @@ -146,6 +144,5 @@ class base_report_rml_save(osv.osv_memory): 'file_rml':fields.binary('Save As'), } -base_report_rml_save() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_vat/base_vat.py b/addons/base_vat/base_vat.py index 616333e3b47..cfb2dbd04d0 100644 --- a/addons/base_vat/base_vat.py +++ b/addons/base_vat/base_vat.py @@ -243,6 +243,5 @@ class res_partner(osv.osv): return False return check == int(vat[8]) -res_partner() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/crm_segmentation.py b/addons/crm/crm_segmentation.py index b11fac31dcf..6e596b5fb9c 100644 --- a/addons/crm/crm_segmentation.py +++ b/addons/crm/crm_segmentation.py @@ -108,7 +108,6 @@ added to partners that match the segmentation criterions after computation.'), self.write(cr, uid, ids, {'state':'running', 'partner_id':0}) return self.process_continue(cr, uid, ids, start=True) -crm_segmentation() class crm_segmentation_line(osv.osv): """ Segmentation line """ @@ -180,7 +179,6 @@ class crm_segmentation_line(osv.osv): return True return True -crm_segmentation_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/report/crm_lead_report.py b/addons/crm/report/crm_lead_report.py index 323d6e4c3d6..d12facd66a0 100644 --- a/addons/crm/report/crm_lead_report.py +++ b/addons/crm/report/crm_lead_report.py @@ -145,6 +145,5 @@ class crm_lead_report(osv.osv): WHERE c.active = 'true' )""") -crm_lead_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/report/crm_phonecall_report.py b/addons/crm/report/crm_phonecall_report.py index c4b014bb86f..77195097965 100644 --- a/addons/crm/report/crm_phonecall_report.py +++ b/addons/crm/report/crm_phonecall_report.py @@ -98,6 +98,5 @@ class crm_phonecall_report(osv.osv): from crm_phonecall c )""") -crm_phonecall_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/res_partner.py b/addons/crm/res_partner.py index 2fdccda2e06..f25b1303c02 100644 --- a/addons/crm/res_partner.py +++ b/addons/crm/res_partner.py @@ -92,7 +92,6 @@ class res_partner(osv.osv): }, context=context) opportunity_ids[partner_id] = opportunity_id return opportunity_ids -res_partner() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/wizard/crm_opportunity_to_phonecall.py b/addons/crm/wizard/crm_opportunity_to_phonecall.py index ee7ed1fc31f..bb1ac2fdce6 100644 --- a/addons/crm/wizard/crm_opportunity_to_phonecall.py +++ b/addons/crm/wizard/crm_opportunity_to_phonecall.py @@ -73,6 +73,5 @@ class crm_opportunity2phonecall(osv.osv_memory): action=data.action, context=context) return {'type': 'ir.actions.act_window_close'} -crm_opportunity2phonecall() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/wizard/crm_phonecall_to_meeting.py b/addons/crm/wizard/crm_phonecall_to_meeting.py index 4e21e01b834..105ab113a71 100644 --- a/addons/crm/wizard/crm_phonecall_to_meeting.py +++ b/addons/crm/wizard/crm_phonecall_to_meeting.py @@ -59,6 +59,5 @@ class crm_phonecall2meeting(osv.osv_memory): } return res -crm_phonecall2meeting() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/wizard/crm_phonecall_to_phonecall.py b/addons/crm/wizard/crm_phonecall_to_phonecall.py index d0bcd12dbb7..7e1da41a29f 100644 --- a/addons/crm/wizard/crm_phonecall_to_phonecall.py +++ b/addons/crm/wizard/crm_phonecall_to_phonecall.py @@ -96,6 +96,5 @@ class crm_phonecall2phonecall(osv.osv_memory): res.update({'partner_id': phonecall.partner_id and phonecall.partner_id.id or False}) return res -crm_phonecall2phonecall() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_claim/report/crm_claim_report.py b/addons/crm_claim/report/crm_claim_report.py index ad56fa5e34e..2ed87505d9c 100644 --- a/addons/crm_claim/report/crm_claim_report.py +++ b/addons/crm_claim/report/crm_claim_report.py @@ -114,6 +114,5 @@ class crm_claim_report(osv.osv): c.priority,c.type_action,c.date_deadline,c.date_closed,c.id )""") -crm_claim_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_helpdesk/report/crm_helpdesk_report.py b/addons/crm_helpdesk/report/crm_helpdesk_report.py index 8d535fa07a0..8b54e30ddd3 100644 --- a/addons/crm_helpdesk/report/crm_helpdesk_report.py +++ b/addons/crm_helpdesk/report/crm_helpdesk_report.py @@ -108,6 +108,5 @@ class crm_helpdesk_report(osv.osv): c.categ_id,c.channel_id,c.planned_cost,c.id )""") -crm_helpdesk_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_partner_assign/report/crm_lead_report.py b/addons/crm_partner_assign/report/crm_lead_report.py index 2c208131b3a..676a8536b74 100644 --- a/addons/crm_partner_assign/report/crm_lead_report.py +++ b/addons/crm_partner_assign/report/crm_lead_report.py @@ -118,6 +118,5 @@ class crm_lead_report_assign(osv.osv): left join res_partner p on (c.partner_assigned_id=p.id) )""") -crm_lead_report_assign() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_partner_assign/report/crm_partner_report.py b/addons/crm_partner_assign/report/crm_partner_report.py index 4611fdd06e4..6f07a8ce03a 100644 --- a/addons/crm_partner_assign/report/crm_partner_report.py +++ b/addons/crm_partner_assign/report/crm_partner_report.py @@ -67,6 +67,5 @@ class crm_partner_report_assign(osv.osv): on (i.partner_id=p.id and i.type in ('out_invoice','out_refund') and i.state in ('open','paid')) )""") -crm_partner_report_assign() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_profiling/crm_profiling.py b/addons/crm_profiling/crm_profiling.py index 8ea08601c9a..7ae9d146bdd 100644 --- a/addons/crm_profiling/crm_profiling.py +++ b/addons/crm_profiling/crm_profiling.py @@ -150,7 +150,6 @@ class question(osv.osv): 'answers_ids': fields.one2many("crm_profiling.answer","question_id","Avalaible Answers",), } -question() class questionnaire(osv.osv): @@ -166,7 +165,6 @@ class questionnaire(osv.osv): 'questionnaire', 'question', "Questions"), } -questionnaire() class answer(osv.osv): @@ -176,7 +174,6 @@ class answer(osv.osv): "name": fields.char("Answer",size=128, required=True), "question_id": fields.many2one('crm_profiling.question',"Question"), } -answer() class partner(osv.osv): @@ -214,7 +211,6 @@ class partner(osv.osv): vals['category_id']=[[6, 0, _recompute_categ(self, cr, uid, ids[0], vals['answers_ids'][0][2])]] return super(partner, self).write(cr, uid, ids, vals, context=context) -partner() class crm_segmentation(osv.osv): @@ -289,7 +285,6 @@ class crm_segmentation(osv.osv): self.write(cr, uid, [id], {'state':'not running', 'partner_id':0}) return True -crm_segmentation() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_profiling/wizard/open_questionnaire.py b/addons/crm_profiling/wizard/open_questionnaire.py index be0d2ef54af..979e9809d09 100644 --- a/addons/crm_profiling/wizard/open_questionnaire.py +++ b/addons/crm_profiling/wizard/open_questionnaire.py @@ -31,7 +31,6 @@ class open_questionnaire_line(osv.osv_memory): 'wizard_id': fields.many2one('open.questionnaire', 'Questionnaire'), } -open_questionnaire_line() class open_questionnaire(osv.osv_memory): _name = 'open.questionnaire' @@ -84,6 +83,5 @@ class open_questionnaire(osv.osv_memory): 'context': context } -open_questionnaire() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/decimal_precision/decimal_precision.py b/addons/decimal_precision/decimal_precision.py index ab0979291bd..b237f053ebb 100644 --- a/addons/decimal_precision/decimal_precision.py +++ b/addons/decimal_precision/decimal_precision.py @@ -63,7 +63,6 @@ class decimal_precision(osv.osv): col.digits_change(cr) return res -decimal_precision() def get_precision(application): def change_digit(cr): diff --git a/addons/delivery/delivery.py b/addons/delivery/delivery.py index 15a17b36775..76750212edd 100644 --- a/addons/delivery/delivery.py +++ b/addons/delivery/delivery.py @@ -166,7 +166,6 @@ class delivery_carrier(osv.osv): self.create_grid_lines(cr, uid, [res_id], vals, context=context) return res_id -delivery_carrier() class delivery_grid(osv.osv): _name = "delivery.grid" @@ -223,7 +222,6 @@ class delivery_grid(osv.osv): return price -delivery_grid() class delivery_grid_line(osv.osv): _name = "delivery.grid.line" @@ -249,6 +247,5 @@ class delivery_grid_line(osv.osv): } _order = 'list_price' -delivery_grid_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/delivery/partner.py b/addons/delivery/partner.py index e4b0ba204ac..477315dfc9b 100644 --- a/addons/delivery/partner.py +++ b/addons/delivery/partner.py @@ -32,7 +32,6 @@ class res_partner(osv.osv): view_load=True, help="This delivery method will be used when invoicing from picking."), } -res_partner() diff --git a/addons/delivery/sale.py b/addons/delivery/sale.py index 98229f13c36..86a518ebca9 100644 --- a/addons/delivery/sale.py +++ b/addons/delivery/sale.py @@ -76,7 +76,6 @@ class sale_order(osv.osv): return self.write(cr, uid, ids, {'carrier_id': False}, context=context) #return {'type': 'ir.actions.act_window_close'} action reload? -sale_order() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/delivery/stock.py b/addons/delivery/stock.py index 95b17a8ba68..95e87eb45ab 100644 --- a/addons/delivery/stock.py +++ b/addons/delivery/stock.py @@ -140,7 +140,6 @@ class stock_picking(osv.osv): 'weight_uom_id': lambda self,cr,uid,c: self._get_default_uom(cr,uid,c) } -stock_picking() class stock_move(osv.osv): _inherit = 'stock.move' @@ -184,7 +183,6 @@ class stock_move(osv.osv): _defaults = { 'weight_uom_id': lambda self,cr,uid,c: self._get_default_uom(cr,uid,c) } -stock_move() # Redefinition of the new fields in order to update the model stock.picking.out in the orm # FIXME: this is a temporary workaround because of a framework bug (ref: lp996816). It should be removed as soon as @@ -215,7 +213,6 @@ class stock_picking_out(osv.osv): 'carrier_tracking_ref': fields.char('Carrier Tracking Ref', size=32), 'number_of_packages': fields.integer('Number of Packages'), } -stock_picking_out() class stock_picking_in(osv.osv): _inherit = 'stock.picking.in' @@ -238,7 +235,6 @@ class stock_picking_in(osv.osv): 'stock.move': (_get_picking_line, ['product_id','product_qty','product_uom','product_uos_qty'], 20), }), } -stock_picking_in() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/wizard/document_configuration.py b/addons/document/wizard/document_configuration.py index aec7f9b75a4..c846f288112 100644 --- a/addons/document/wizard/document_configuration.py +++ b/addons/document/wizard/document_configuration.py @@ -109,6 +109,5 @@ class document_configuration(osv.osv_memory): 'domain': '[]', 'ressource_tree': 1 }) -document_configuration() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_ftp/wizard/ftp_browse.py b/addons/document_ftp/wizard/ftp_browse.py index ceb7d1a60e5..ee8f897ca20 100644 --- a/addons/document_ftp/wizard/ftp_browse.py +++ b/addons/document_ftp/wizard/ftp_browse.py @@ -60,6 +60,5 @@ class document_ftp_browse(osv.osv_memory): 'target': 'new' } -document_ftp_browse() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_ftp/wizard/ftp_configuration.py b/addons/document_ftp/wizard/ftp_configuration.py index 87aaa2331b4..1dee9495a95 100644 --- a/addons/document_ftp/wizard/ftp_configuration.py +++ b/addons/document_ftp/wizard/ftp_configuration.py @@ -47,6 +47,5 @@ class document_ftp_configuration(osv.osv_memory): self.pool.get('ir.actions.act_url').write(cr, uid, [aid], {'url': 'ftp://'+(conf.host or 'localhost:8021')+'/' + cr.dbname+'/'}) -document_ftp_configuration() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/event/event.py b/addons/event/event.py index 9e50128c592..eb18afd747c 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -41,7 +41,6 @@ class event_type(osv.osv): 'default_registration_max': 0, } -event_type() class event_event(osv.osv): """Event""" diff --git a/addons/event/report/report_event_registration.py b/addons/event/report/report_event_registration.py index 481b86f032c..0e33e892432 100644 --- a/addons/event/report/report_event_registration.py +++ b/addons/event/report/report_event_registration.py @@ -99,6 +99,5 @@ class report_event_registration(osv.osv): ) """) -report_event_registration() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/event/res_partner.py b/addons/event/res_partner.py index 88249c5a7cd..fc4afa56e69 100644 --- a/addons/event/res_partner.py +++ b/addons/event/res_partner.py @@ -31,6 +31,5 @@ class res_partner(osv.osv): } -res_partner() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/event/wizard/event_confirm.py b/addons/event/wizard/event_confirm.py index 8611a066801..5fb2cd67c87 100644 --- a/addons/event/wizard/event_confirm.py +++ b/addons/event/wizard/event_confirm.py @@ -32,6 +32,5 @@ class event_confirm(osv.osv_memory): self.pool.get('event.event').do_confirm(cr, uid, context.get('event_ids', []), context=context) return {'type': 'ir.actions.act_window_close'} -event_confirm() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/event_moodle/event_moodle.py b/addons/event_moodle/event_moodle.py index 5c7373d1adb..44d2de4bdd5 100644 --- a/addons/event_moodle/event_moodle.py +++ b/addons/event_moodle/event_moodle.py @@ -150,7 +150,6 @@ class event_moodle(osv.osv): name_user = "moodle_" + "%d" % (response_courses,) + "%d" % (random.randint(1,999999),) return name_user -event_moodle() class event_event(osv.osv): _inherit = "event.event" @@ -221,7 +220,6 @@ class event_event(osv.osv): moodle_pool.moodle_enrolled(cr, uid, moodle_config_wiz_id, enrolled, context=context) return res -event_event() class event_registration(osv.osv): @@ -286,4 +284,3 @@ class event_registration(osv.osv): 'city': reg.city, 'street': reg.street}} return res -event_registration() diff --git a/addons/event_sale/event_sale.py b/addons/event_sale/event_sale.py index 4f32620e667..ec583a58cbf 100644 --- a/addons/event_sale/event_sale.py +++ b/addons/event_sale/event_sale.py @@ -32,7 +32,6 @@ class product(osv.osv): def onchange_event_ok(self, cr, uid, ids, event_ok, context=None): return {'value': {'type': event_ok and 'service' or False}} -product() class sale_order_line(osv.osv): _inherit = 'sale.order.line' diff --git a/addons/google_base_account/google_base_account.py b/addons/google_base_account/google_base_account.py index 46b1757a7b3..06e5643344c 100644 --- a/addons/google_base_account/google_base_account.py +++ b/addons/google_base_account/google_base_account.py @@ -27,7 +27,6 @@ class res_users(osv.osv): 'gmail_user': fields.char('Username', size=64,), 'gmail_password': fields.char('Password', size=64), } -res_users() # vim:expandtab:smartindent:toabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/google_base_account/wizard/google_login.py b/addons/google_base_account/wizard/google_login.py index f4464976aee..1771d99b51e 100644 --- a/addons/google_base_account/wizard/google_login.py +++ b/addons/google_base_account/wizard/google_login.py @@ -81,6 +81,5 @@ class google_login(osv.osv_memory): def _get_next_action(self, cr, uid, context=None): return {'type': 'ir.actions.act_window_close'} -google_login() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py index 3b060e199c0..2fd1976ae3b 100644 --- a/addons/google_docs/google_docs.py +++ b/addons/google_docs/google_docs.py @@ -191,4 +191,3 @@ This is the id of the template document, on google side. You can find it thanks _defaults = { 'name_template': 'gdoc_%(name)s', } -config() diff --git a/addons/hr/hr.py b/addons/hr/hr.py index 467f34f708b..b8d4bfb4267 100644 --- a/addons/hr/hr.py +++ b/addons/hr/hr.py @@ -67,7 +67,6 @@ class hr_employee_category(osv.osv): (_check_recursion, 'Error! You cannot create recursive Categories.', ['parent_id']) ] -hr_employee_category() class hr_job(osv.osv): @@ -144,7 +143,6 @@ class hr_job(osv.osv): self.write(cr, uid, ids, {'state': 'open', 'no_of_recruitment': 0}) return True -hr_job() class hr_employee(osv.osv): _name = "hr.employee" @@ -284,7 +282,6 @@ class hr_employee(osv.osv): (_check_recursion, 'Error! You cannot create recursive hierarchy of Employee(s).', ['parent_id']), ] -hr_employee() class hr_department(osv.osv): _description = "Department" @@ -326,7 +323,6 @@ class res_users(osv.osv): 'employee_ids': fields.one2many('hr.employee', 'user_id', 'Related employees'), } -res_users() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr/hr_department.py b/addons/hr/hr_department.py index 185e9f73a45..dded3241b91 100644 --- a/addons/hr/hr_department.py +++ b/addons/hr/hr_department.py @@ -79,7 +79,6 @@ class hr_department(osv.osv): (_check_recursion, 'Error! You cannot create recursive departments.', ['parent_id']) ] -hr_department() class ir_action_window(osv.osv): _inherit = 'ir.actions.act_window' @@ -103,7 +102,6 @@ class ir_action_window(osv.osv): return False return res -ir_action_window() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_attendance/hr_attendance.py b/addons/hr_attendance/hr_attendance.py index ce3dc00d258..dcff0ad5085 100644 --- a/addons/hr_attendance/hr_attendance.py +++ b/addons/hr_attendance/hr_attendance.py @@ -35,7 +35,6 @@ class hr_action_reason(osv.osv): 'action_type': 'sign_in', } -hr_action_reason() def _employee_get(obj, cr, uid, context=None): ids = obj.pool.get('hr.employee').search(cr, uid, [('user_id', '=', uid)], context=context) @@ -86,7 +85,6 @@ class hr_attendance(osv.osv): _constraints = [(_altern_si_so, 'Error ! Sign in (resp. Sign out) must follow Sign out (resp. Sign in)', ['action'])] _order = 'name desc' -hr_attendance() class hr_employee(osv.osv): _inherit = "hr.employee" @@ -166,6 +164,5 @@ class hr_employee(osv.osv): hr_attendance.create(cr, uid, vals, context=context) return True -hr_employee() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_attendance/wizard/hr_attendance_bymonth.py b/addons/hr_attendance/wizard/hr_attendance_bymonth.py index 6994bc5f906..93868bb2379 100644 --- a/addons/hr_attendance/wizard/hr_attendance_bymonth.py +++ b/addons/hr_attendance/wizard/hr_attendance_bymonth.py @@ -48,6 +48,5 @@ class hr_attendance_bymonth(osv.osv_memory): 'datas': datas, } -hr_attendance_bymonth() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_attendance/wizard/hr_attendance_byweek.py b/addons/hr_attendance/wizard/hr_attendance_byweek.py index 7fcfc175f0e..963a2946ffa 100644 --- a/addons/hr_attendance/wizard/hr_attendance_byweek.py +++ b/addons/hr_attendance/wizard/hr_attendance_byweek.py @@ -49,6 +49,5 @@ class hr_attendance_byweek(osv.osv_memory): 'datas': datas, } -hr_attendance_byweek() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_attendance/wizard/hr_attendance_error.py b/addons/hr_attendance/wizard/hr_attendance_error.py index 066f4a56e07..137bac30215 100644 --- a/addons/hr_attendance/wizard/hr_attendance_error.py +++ b/addons/hr_attendance/wizard/hr_attendance_error.py @@ -64,6 +64,5 @@ class hr_attendance_error(osv.osv_memory): 'datas': datas, } -hr_attendance_error() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_contract/hr_contract.py b/addons/hr_contract/hr_contract.py index faf8b015a48..0cd31d66bcf 100644 --- a/addons/hr_contract/hr_contract.py +++ b/addons/hr_contract/hr_contract.py @@ -49,7 +49,6 @@ class hr_employee(osv.osv): 'contract_id':fields.function(_get_latest_contract, string='Contract', type='many2one', relation="hr.contract", help='Latest contract of the employee'), } -hr_employee() class hr_contract_type(osv.osv): _name = 'hr.contract.type' @@ -57,7 +56,6 @@ class hr_contract_type(osv.osv): _columns = { 'name': fields.char('Contract Type', size=32, required=True), } -hr_contract_type() class hr_contract(osv.osv): _name = 'hr.contract' @@ -99,6 +97,5 @@ class hr_contract(osv.osv): _constraints = [ (_check_dates, 'Error! Contract start-date must be less than contract end-date.', ['date_start', 'date_end']) ] -hr_contract() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_evaluation/hr_evaluation.py b/addons/hr_evaluation/hr_evaluation.py index d4ee28aff68..09c47b89153 100644 --- a/addons/hr_evaluation/hr_evaluation.py +++ b/addons/hr_evaluation/hr_evaluation.py @@ -45,7 +45,6 @@ class hr_evaluation_plan(osv.osv): 'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'account.account', context=c), } -hr_evaluation_plan() class hr_evaluation_plan_phase(osv.osv): _name = "hr_evaluation.plan.phase" @@ -98,7 +97,6 @@ Thanks, '''), } -hr_evaluation_plan_phase() class hr_employee(osv.osv): _name = "hr.employee" @@ -272,7 +270,6 @@ class hr_evaluation(osv.osv): obj_hr_eval_iterview.write(cr, uid, [survey_req.id], new_vals, context=context) return super(hr_evaluation, self).write(cr, uid, ids, vals, context=context) -hr_evaluation() class survey_request(osv.osv): _inherit = "survey.request" @@ -280,7 +277,6 @@ class survey_request(osv.osv): 'is_evaluation': fields.boolean('Is Appraisal?'), } -survey_request() class hr_evaluation_interview(osv.osv): _name = 'hr.evaluation.interview' @@ -357,6 +353,5 @@ class hr_evaluation_interview(osv.osv): value = self.pool.get("survey").action_print_survey(cr, uid, ids, context=context) return value -hr_evaluation_interview() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:1 diff --git a/addons/hr_evaluation/report/hr_evaluation_report.py b/addons/hr_evaluation/report/hr_evaluation_report.py index 62a5e4abd89..36353b65dfb 100644 --- a/addons/hr_evaluation/report/hr_evaluation_report.py +++ b/addons/hr_evaluation/report/hr_evaluation_report.py @@ -97,7 +97,6 @@ class hr_evaluation_report(osv.osv): ) """) -hr_evaluation_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_expense/hr_expense.py b/addons/hr_expense/hr_expense.py index dc3c159463f..c422a2d4948 100644 --- a/addons/hr_expense/hr_expense.py +++ b/addons/hr_expense/hr_expense.py @@ -377,7 +377,6 @@ class hr_expense_expense(osv.osv): } return result -hr_expense_expense() class product_product(osv.osv): _inherit = "product.product" @@ -385,7 +384,6 @@ class product_product(osv.osv): 'hr_expense_ok': fields.boolean('Can be Expensed', help="Specify if the product can be selected in an HR expense line."), } -product_product() class hr_expense_line(osv.osv): _name = "hr.expense.line" @@ -444,6 +442,5 @@ class hr_expense_line(osv.osv): res['value'].update({'uom_id': product.uom_id.id}) return res -hr_expense_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_expense/report/hr_expense_report.py b/addons/hr_expense/report/hr_expense_report.py index 2adc11535ff..b29605a8e31 100644 --- a/addons/hr_expense/report/hr_expense_report.py +++ b/addons/hr_expense/report/hr_expense_report.py @@ -117,6 +117,5 @@ class hr_expense_report(osv.osv): ) """) -hr_expense_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 6dddcaeb015..c4b26f0ec3a 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -454,7 +454,6 @@ class resource_calendar_leaves(osv.osv): 'holiday_id': fields.many2one("hr.holidays", "Leave Request"), } -resource_calendar_leaves() class hr_employee(osv.osv): @@ -543,6 +542,5 @@ class hr_employee(osv.osv): 'leave_date_to': fields.function(_get_leave_status, multi='leave_status', type='date', string='To Date'), } -hr_employee() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_holidays/report/hr_holidays_report.py b/addons/hr_holidays/report/hr_holidays_report.py index 394575d765d..0e5d6fe773c 100644 --- a/addons/hr_holidays/report/hr_holidays_report.py +++ b/addons/hr_holidays/report/hr_holidays_report.py @@ -55,6 +55,5 @@ class hr_holidays_remaining_leaves_user(osv.osv): ) """) -hr_holidays_remaining_leaves_user() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_holidays/wizard/hr_holidays_summary_department.py b/addons/hr_holidays/wizard/hr_holidays_summary_department.py index ef1cb8f9e6f..8a204389572 100644 --- a/addons/hr_holidays/wizard/hr_holidays_summary_department.py +++ b/addons/hr_holidays/wizard/hr_holidays_summary_department.py @@ -53,6 +53,5 @@ class hr_holidays_summary_dept(osv.osv_memory): 'datas': datas, } -hr_holidays_summary_dept() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_holidays/wizard/hr_holidays_summary_employees.py b/addons/hr_holidays/wizard/hr_holidays_summary_employees.py index 1897d82c882..1ec08eb2c86 100644 --- a/addons/hr_holidays/wizard/hr_holidays_summary_employees.py +++ b/addons/hr_holidays/wizard/hr_holidays_summary_employees.py @@ -50,6 +50,5 @@ class hr_holidays_summary_employee(osv.osv_memory): 'datas': datas, } -hr_holidays_summary_employee() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_payroll/hr_payroll.py b/addons/hr_payroll/hr_payroll.py index a3d3da04f0e..e08e8db5623 100644 --- a/addons/hr_payroll/hr_payroll.py +++ b/addons/hr_payroll/hr_payroll.py @@ -107,7 +107,6 @@ class hr_payroll_structure(osv.osv): parent = self._get_parent_structure(cr, uid, parent, context) return parent + struct_ids -hr_payroll_structure() class hr_contract(osv.osv): """ @@ -143,7 +142,6 @@ class hr_contract(osv.osv): structure_ids = [contract.struct_id.id for contract in self.browse(cr, uid, contract_ids, context=context)] return list(set(self.pool.get('hr.payroll.structure')._get_parent_structure(cr, uid, structure_ids, context=context))) -hr_contract() class contrib_register(osv.osv): ''' @@ -166,7 +164,6 @@ class contrib_register(osv.osv): context=context).company_id.id, } -contrib_register() class hr_salary_rule_category(osv.osv): """ @@ -190,7 +187,6 @@ class hr_salary_rule_category(osv.osv): context=context).company_id.id, } -hr_salary_rule_category() class one2many_mod2(fields.one2many): @@ -234,7 +230,6 @@ class hr_payslip_run(osv.osv): def close_payslip_run(self, cr, uid, ids, context=None): return self.write(cr, uid, ids, {'state': 'close'}, context=context) -hr_payslip_run() class hr_payslip(osv.osv): ''' @@ -714,7 +709,6 @@ class hr_payslip(osv.osv): res['value'].update({'struct_id': False}) return self.onchange_employee_id(cr, uid, ids, date_from=date_from, date_to=date_to, employee_id=employee_id, contract_id=contract_id, context=context) -hr_payslip() class hr_payslip_worked_days(osv.osv): ''' @@ -736,7 +730,6 @@ class hr_payslip_worked_days(osv.osv): _defaults = { 'sequence': 10, } -hr_payslip_worked_days() class hr_payslip_input(osv.osv): ''' @@ -759,7 +752,6 @@ class hr_payslip_input(osv.osv): 'amount': 0.0, } -hr_payslip_input() class hr_salary_rule(osv.osv): @@ -897,7 +889,6 @@ result = rules.NET > categories.NET * 0.10''', except: raise osv.except_osv(_('Error!'), _('Wrong python condition defined for salary rule %s (%s).')% (rule.name, rule.code)) -hr_salary_rule() class hr_rule_input(osv.osv): ''' @@ -912,7 +903,6 @@ class hr_rule_input(osv.osv): 'input_id': fields.many2one('hr.salary.rule', 'Salary Rule Input', required=True) } -hr_rule_input() class hr_payslip_line(osv.osv): ''' @@ -947,7 +937,6 @@ class hr_payslip_line(osv.osv): 'rate': 100.0, } -hr_payslip_line() class hr_payroll_structure(osv.osv): @@ -956,7 +945,6 @@ class hr_payroll_structure(osv.osv): 'rule_ids':fields.many2many('hr.salary.rule', 'hr_structure_salary_rule_rel', 'struct_id', 'rule_id', 'Salary Rules'), } -hr_payroll_structure() class hr_employee(osv.osv): ''' @@ -989,6 +977,5 @@ class hr_employee(osv.osv): 'total_wage': fields.function(_calculate_total_wage, method=True, type='float', string='Total Basic Salary', digits_compute=dp.get_precision('Payroll'), help="Sum of all current contract's wage of employee."), } -hr_employee() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_payroll/wizard/hr_payroll_contribution_register_report.py b/addons/hr_payroll/wizard/hr_payroll_contribution_register_report.py index 716a5060f14..ff078b09a67 100644 --- a/addons/hr_payroll/wizard/hr_payroll_contribution_register_report.py +++ b/addons/hr_payroll/wizard/hr_payroll_contribution_register_report.py @@ -50,6 +50,5 @@ class payslip_lines_contribution_register(osv.osv_memory): 'datas': datas, } -payslip_lines_contribution_register() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py b/addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py index aa36d223406..5837472be5f 100644 --- a/addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py +++ b/addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py @@ -68,6 +68,5 @@ class hr_payslip_employees(osv.osv_memory): slip_pool.compute_sheet(cr, uid, slip_ids, context=context) return {'type': 'ir.actions.act_window_close'} -hr_payslip_employees() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_payroll_account/hr_payroll_account.py b/addons/hr_payroll_account/hr_payroll_account.py index 07aff9001b6..ccab06c0dc1 100644 --- a/addons/hr_payroll_account/hr_payroll_account.py +++ b/addons/hr_payroll_account/hr_payroll_account.py @@ -187,7 +187,6 @@ class hr_payslip(osv.osv): move_pool.post(cr, uid, [move_id], context=context) return super(hr_payslip, self).process_sheet(cr, uid, [slip.id], context=context) -hr_payslip() class hr_salary_rule(osv.osv): _inherit = 'hr.salary.rule' @@ -197,7 +196,6 @@ class hr_salary_rule(osv.osv): 'account_debit': fields.many2one('account.account', 'Debit Account'), 'account_credit': fields.many2one('account.account', 'Credit Account'), } -hr_salary_rule() class hr_contract(osv.osv): @@ -207,7 +205,6 @@ class hr_contract(osv.osv): 'analytic_account_id':fields.many2one('account.analytic.account', 'Analytic Account'), 'journal_id': fields.many2one('account.journal', 'Salary Journal'), } -hr_contract() class hr_payslip_run(osv.osv): @@ -228,6 +225,5 @@ class hr_payslip_run(osv.osv): 'journal_id': _get_default_journal, } -hr_payslip_run() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_payroll_account/wizard/hr_payroll_payslips_by_employees.py b/addons/hr_payroll_account/wizard/hr_payroll_payslips_by_employees.py index 76d197a17ec..053fab16e84 100644 --- a/addons/hr_payroll_account/wizard/hr_payroll_payslips_by_employees.py +++ b/addons/hr_payroll_account/wizard/hr_payroll_payslips_by_employees.py @@ -36,6 +36,5 @@ class hr_payslip_employees(osv.osv_memory): if journal_id: context.update({'journal_id': journal_id}) return super(hr_payslip_employees, self).compute_sheet(cr, uid, ids, context=context) -hr_payslip_employees() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_recruitment/report/hr_recruitment_report.py b/addons/hr_recruitment/report/hr_recruitment_report.py index 62fa1badc41..8c365b10070 100644 --- a/addons/hr_recruitment/report/hr_recruitment_report.py +++ b/addons/hr_recruitment/report/hr_recruitment_report.py @@ -116,6 +116,5 @@ class hr_recruitment_report(osv.osv): s.department_id ) """) -hr_recruitment_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_recruitment/wizard/hr_recruitment_create_partner_job.py b/addons/hr_recruitment/wizard/hr_recruitment_create_partner_job.py index 82dd534d81b..b0d4aebe09a 100644 --- a/addons/hr_recruitment/wizard/hr_recruitment_create_partner_job.py +++ b/addons/hr_recruitment/wizard/hr_recruitment_create_partner_job.py @@ -80,6 +80,5 @@ class hr_recruitment_partner_create(osv.osv_memory): 'search_view_id': res['res_id'] } -hr_recruitment_partner_create() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py b/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py index 58fb706a09e..60d31e74eee 100644 --- a/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py +++ b/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py @@ -50,6 +50,5 @@ class hired_employee(osv.osv_memory): context = {} return self.pool.get('hr.applicant').case_close_with_emp(cr, uid,context.get('active_ids', [])) -hired_employee() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet/hr_timesheet.py b/addons/hr_timesheet/hr_timesheet.py index cc9c0653a85..22dfb7b9552 100644 --- a/addons/hr_timesheet/hr_timesheet.py +++ b/addons/hr_timesheet/hr_timesheet.py @@ -56,7 +56,6 @@ class hr_employee(osv.osv): 'journal_id': _getAnalyticJournal, 'product_id': _getEmployeeProduct } -hr_employee() class hr_analytic_timesheet(osv.osv): diff --git a/addons/hr_timesheet/wizard/hr_timesheet_print_employee.py b/addons/hr_timesheet/wizard/hr_timesheet_print_employee.py index 1523756aae0..efffa6acd5f 100644 --- a/addons/hr_timesheet/wizard/hr_timesheet_print_employee.py +++ b/addons/hr_timesheet/wizard/hr_timesheet_print_employee.py @@ -62,6 +62,5 @@ class analytical_timesheet_employee(osv.osv_memory): 'report_name': 'hr.analytical.timesheet', 'datas': datas, } -analytical_timesheet_employee() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet/wizard/hr_timesheet_print_users.py b/addons/hr_timesheet/wizard/hr_timesheet_print_users.py index 8d9f0b01f68..d7dda927111 100644 --- a/addons/hr_timesheet/wizard/hr_timesheet_print_users.py +++ b/addons/hr_timesheet/wizard/hr_timesheet_print_users.py @@ -52,6 +52,5 @@ class analytical_timesheet_employees(osv.osv_memory): 'datas': datas, } -analytical_timesheet_employees() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py b/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py index 054e797a884..d0cbdc78c31 100644 --- a/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py +++ b/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py @@ -103,7 +103,6 @@ class hr_so_project(osv.osv_memory): self._write(cr, uid, data, emp_id, context=context) return {'type': 'ir.actions.act_window_close'} -hr_so_project() class hr_si_project(osv.osv_memory): @@ -168,6 +167,5 @@ class hr_si_project(osv.osv_memory): res.update({'name': employee.name, 'state': employee.state, 'emp_id': emp_id[0], 'server_date':time.strftime('%Y-%m-%d %H:%M:%S')}) return res -hr_si_project() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py index 828c7230ddf..f8c27bded5e 100644 --- a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py +++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py @@ -37,7 +37,6 @@ class hr_timesheet_invoice_factor(osv.osv): 'factor': lambda *a: 0.0, } -hr_timesheet_invoice_factor() class account_analytic_account(osv.osv): @@ -286,7 +285,6 @@ class account_analytic_line(osv.osv): invoice_obj.button_reset_taxes(cr, uid, [last_invoice], context) return invoices -account_analytic_line() class hr_analytic_timesheet(osv.osv): @@ -314,7 +312,6 @@ class hr_analytic_timesheet(osv.osv): return super(hr_analytic_timesheet, self).copy(cursor, user, obj_id, default, context=context) -hr_analytic_timesheet() class account_invoice(osv.osv): @@ -334,7 +331,6 @@ class account_invoice(osv.osv): il['analytic_lines'][0][2]['to_invoice'] = to_invoice[0] return iml -account_invoice() class account_move_line(osv.osv): @@ -353,6 +349,5 @@ class account_move_line(osv.osv): }, context=context) return res -account_move_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report.py b/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report.py index 02b46b71b20..3ea7e209051 100644 --- a/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report.py +++ b/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report.py @@ -71,7 +71,6 @@ class report_timesheet_line(osv.osv): l.invoice_id ) """) -report_timesheet_line() @@ -107,7 +106,6 @@ class report_timesheet_user(osv.osv): group by l.date, to_char(l.date,'YYYY'),to_char(l.date,'MM'), l.user_id ) """) -report_timesheet_user() class report_timesheet_account(osv.osv): _name = "report_timesheet.account" @@ -140,7 +138,6 @@ class report_timesheet_account(osv.osv): to_char(create_date, 'YYYY'),to_char(create_date, 'MM'), user_id, account_id ) """) -report_timesheet_account() class report_timesheet_account_date(osv.osv): @@ -174,7 +171,6 @@ class report_timesheet_account_date(osv.osv): to_char(date,'YYYY'),to_char(date,'MM'), user_id, account_id ) """) -report_timesheet_account_date() class report_timesheet_invoice(osv.osv): @@ -215,7 +211,6 @@ class report_timesheet_invoice(osv.osv): a.user_id ) """) -report_timesheet_invoice() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet_invoice/report/report_analytic.py b/addons/hr_timesheet_invoice/report/report_analytic.py index 53912fcb1d6..c620b2f9584 100644 --- a/addons/hr_timesheet_invoice/report/report_analytic.py +++ b/addons/hr_timesheet_invoice/report/report_analytic.py @@ -60,7 +60,6 @@ class report_analytic_account_close(osv.osv): (a.quantity_max>0 and (sum(l.unit_amount)>=a.quantity_max)) or a.date <= current_date )""") -report_analytic_account_close() class report_account_analytic_line_to_invoice(osv.osv): _name = "report.account.analytic.line.to.invoice" @@ -105,7 +104,6 @@ class report_account_analytic_line_to_invoice(osv.osv): to_char(l.date, 'YYYY'), to_char(l.date,'MM'), product_id, product_uom_id, account_id ) """) -report_account_analytic_line_to_invoice() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_analytic_profit.py b/addons/hr_timesheet_invoice/wizard/hr_timesheet_analytic_profit.py index 6c6523f93f9..2675556e8ac 100644 --- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_analytic_profit.py +++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_analytic_profit.py @@ -70,6 +70,5 @@ class account_analytic_profit(osv.osv_memory): 'datas': datas, } -account_analytic_profit() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py b/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py index 1977d6cccc5..8d5f0c4067c 100644 --- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py +++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py @@ -58,6 +58,5 @@ class final_invoice_create(osv.osv_memory): act_win['name'] = _('Invoices') return act_win -final_invoice_create() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py index 6aa8b0f9d8d..874370fea22 100644 --- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py +++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py @@ -69,7 +69,6 @@ class hr_timesheet_invoice_create(osv.osv_memory): return act_win -hr_timesheet_invoice_create() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py index 4be032ba99b..156732ba33d 100644 --- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py +++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py @@ -327,7 +327,6 @@ class hr_timesheet_line(osv.osv): return dict([(el, self.on_change_account_id(cr, uid, ids, el, context.get('user_id', uid))) for el in account_ids]) -hr_timesheet_line() class hr_attendance(osv.osv): _inherit = "hr.attendance" @@ -425,7 +424,6 @@ class hr_attendance(osv.osv): raise osv.except_osv(_('Error!'), _('You cannot modify an entry in a confirmed timesheet')) return True -hr_attendance() class hr_timesheet_sheet_sheet_day(osv.osv): _name = "hr_timesheet_sheet.sheet.day" @@ -505,7 +503,6 @@ class hr_timesheet_sheet_sheet_day(osv.osv): GROUP BY name, sheet_id )) AS bar""") -hr_timesheet_sheet_sheet_day() class hr_timesheet_sheet_sheet_account(osv.osv): @@ -539,7 +536,6 @@ class hr_timesheet_sheet_sheet_account(osv.osv): group by l.account_id, s.id, l.to_invoice )""") -hr_timesheet_sheet_sheet_account() @@ -558,7 +554,6 @@ class res_company(osv.osv): 'timesheet_max_difference': lambda *args: 0.0 } -res_company() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet_sheet/report/hr_timesheet_report.py b/addons/hr_timesheet_sheet/report/hr_timesheet_report.py index 49b66b63c0f..61c2b9e53da 100644 --- a/addons/hr_timesheet_sheet/report/hr_timesheet_report.py +++ b/addons/hr_timesheet_sheet/report/hr_timesheet_report.py @@ -79,6 +79,5 @@ class hr_timesheet_report(osv.osv): l.currency_id ) """) -hr_timesheet_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet_sheet/report/timesheet_report.py b/addons/hr_timesheet_sheet/report/timesheet_report.py index 31255a3a6b2..16889253a68 100644 --- a/addons/hr_timesheet_sheet/report/timesheet_report.py +++ b/addons/hr_timesheet_sheet/report/timesheet_report.py @@ -114,6 +114,5 @@ class timesheet_report(osv.osv): htss.user_id ) """) -timesheet_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py b/addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py index c2d5167c179..62511f4575b 100644 --- a/addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py +++ b/addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py @@ -58,6 +58,5 @@ class hr_timesheet_current_open(osv.osv_memory): value['res_id'] = ids[0] return value -hr_timesheet_current_open() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_at/account_wizard.py b/addons/l10n_at/account_wizard.py index 278837322ac..0aec5392a8a 100644 --- a/addons/l10n_at/account_wizard.py +++ b/addons/l10n_at/account_wizard.py @@ -30,7 +30,6 @@ class AccountWizard_cd(osv.osv_memory): 'code_digits' : 0, } -AccountWizard_cd() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py b/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py index d89d427ef6b..b74cfa21b8a 100644 --- a/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py +++ b/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py @@ -209,6 +209,5 @@ class l10n_be_vat_declaration(osv.osv_memory): 'target': 'new', } -l10n_be_vat_declaration() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py b/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py index 7aa612d95ff..29a1a1508a4 100644 --- a/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py +++ b/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py @@ -39,7 +39,6 @@ class vat_listing_clients(osv.osv_memory): 'vat_amount': fields.float('VAT Amount'), } -vat_listing_clients() class partner_vat(osv.osv_memory): """ Vat Listing """ @@ -116,7 +115,6 @@ class partner_vat(osv.osv_memory): 'limit_amount': 250, } -partner_vat() class partner_vat_list(osv.osv_memory): """ Partner Vat Listing """ @@ -321,7 +319,6 @@ class partner_vat_list(osv.osv_memory): 'datas': datas, } -partner_vat_list() class partner_vat_listing_print(report_sxw.rml_parse): diff --git a/addons/l10n_be/wizard/l10n_be_vat_intra.py b/addons/l10n_be/wizard/l10n_be_vat_intra.py index ffd42290ed0..703ab9db59b 100644 --- a/addons/l10n_be/wizard/l10n_be_vat_intra.py +++ b/addons/l10n_be/wizard/l10n_be_vat_intra.py @@ -282,7 +282,6 @@ class partner_vat_intra(osv.osv_memory): 'datas': datas, } -partner_vat_intra() class vat_intra_print(report_sxw.rml_parse): def __init__(self, cr, uid, name, context): diff --git a/addons/l10n_be_hr_payroll/l10n_be_hr_payroll.py b/addons/l10n_be_hr_payroll/l10n_be_hr_payroll.py index 79909cf79af..e62ea076079 100644 --- a/addons/l10n_be_hr_payroll/l10n_be_hr_payroll.py +++ b/addons/l10n_be_hr_payroll/l10n_be_hr_payroll.py @@ -39,7 +39,6 @@ class hr_contract_be(osv.osv): 'retained_net_amount': fields.float('Net retained ', digits_compute=dp.get_precision('Payroll')), } -hr_contract_be() class hr_employee_be(osv.osv): _inherit = 'hr.employee' @@ -52,6 +51,5 @@ class hr_employee_be(osv.osv): 'disabled_children_number': fields.integer('Number of disabled children'), } -hr_employee_be() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_be_invoice_bba/partner.py b/addons/l10n_be_invoice_bba/partner.py index 9e0eec10713..8ae54617b98 100644 --- a/addons/l10n_be_invoice_bba/partner.py +++ b/addons/l10n_be_invoice_bba/partner.py @@ -47,6 +47,5 @@ class res_partner(osv.osv): _default = { 'out_inv_comm_type': 'none', } -res_partner() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_fr/l10n_fr.py b/addons/l10n_fr/l10n_fr.py index c995b44a614..676121b4292 100644 --- a/addons/l10n_fr/l10n_fr.py +++ b/addons/l10n_fr/l10n_fr.py @@ -33,7 +33,6 @@ class l10n_fr_report(osv.osv): ('code_uniq', 'unique (code)','The code report must be unique !') ] -l10n_fr_report() class l10n_fr_line(osv.osv): _name = 'l10n.fr.line' @@ -48,7 +47,6 @@ class l10n_fr_line(osv.osv): ('code_uniq', 'unique (code)', 'The variable name must be unique !') ] -l10n_fr_line() class res_company(osv.osv): _inherit = 'res.company' @@ -58,6 +56,5 @@ class res_company(osv.osv): 'ape': fields.char('APE', size=64), } -res_company() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_fr/wizard/fr_report_bilan.py b/addons/l10n_fr/wizard/fr_report_bilan.py index 90e97389eed..291557f8fba 100644 --- a/addons/l10n_fr/wizard/fr_report_bilan.py +++ b/addons/l10n_fr/wizard/fr_report_bilan.py @@ -52,6 +52,5 @@ class account_bilan_report(osv.osv_memory): data['form']['fiscalyear_id'] = self.browse(cr, uid, ids)[0].fiscalyear_id.id return {'type': 'ir.actions.report.xml', 'report_name': 'l10n.fr.bilan', 'datas': data} -account_bilan_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_fr/wizard/fr_report_compute_resultant.py b/addons/l10n_fr/wizard/fr_report_compute_resultant.py index eff52189bc9..8d8aed8baff 100644 --- a/addons/l10n_fr/wizard/fr_report_compute_resultant.py +++ b/addons/l10n_fr/wizard/fr_report_compute_resultant.py @@ -52,6 +52,5 @@ class account_cdr_report(osv.osv_memory): data['form']['fiscalyear_id'] = self.browse(cr, uid, ids)[0].fiscalyear_id.id return { 'type': 'ir.actions.report.xml', 'report_name': 'l10n.fr.compute_resultant', 'datas': data} -account_cdr_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_fr_hr_payroll/l10n_fr_hr_payroll.py b/addons/l10n_fr_hr_payroll/l10n_fr_hr_payroll.py index 0519fd86a47..ec17792dacd 100644 --- a/addons/l10n_fr_hr_payroll/l10n_fr_hr_payroll.py +++ b/addons/l10n_fr_hr_payroll/l10n_fr_hr_payroll.py @@ -34,7 +34,6 @@ class res_company(osv.osv): 'conv_coll': fields.char('Convention collective', size=64), } -res_company() class hr_contract(osv.osv): _inherit = 'hr.contract' @@ -44,7 +43,6 @@ class hr_contract(osv.osv): 'niveau': fields.char('Niveau', size=64), 'coef': fields.char('Coefficient', size=64), } -hr_contract() class hr_payslip(osv.osv): _inherit = 'hr.payslip' @@ -52,6 +50,5 @@ class hr_payslip(osv.osv): _columns = { 'payment_mode': fields.char('Mode de paiement', size=64), } -hr_payslip() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_fr_rib/bank.py b/addons/l10n_fr_rib/bank.py index 26e10053141..1f5264ef5ac 100644 --- a/addons/l10n_fr_rib/bank.py +++ b/addons/l10n_fr_rib/bank.py @@ -80,7 +80,6 @@ class res_partner_bank(osv.osv): _constraints = [(_check_key, 'The RIB and/or IBAN is not valid', ['rib_acc_number', 'bank_code', 'office', 'key'])] -res_partner_bank() class res_bank(osv.osv): """Add the bank code to make it easier to enter RIB data""" @@ -102,6 +101,5 @@ class res_bank(osv.osv): _columns = { 'rib_code': fields.char('RIB Bank Code', size=64), } -res_bank() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py index 6a7638d919a..348bb71c95e 100644 --- a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py +++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py @@ -48,7 +48,6 @@ class hr_contract(osv.osv): 'supplementary_allowance': fields.float('Supplementary Allowance', digits_compute=dp.get_precision('Payroll')), } -hr_contract() class payroll_advice(osv.osv): ''' @@ -157,7 +156,6 @@ class payroll_advice(osv.osv): return { 'value':res } -payroll_advice() class hr_payslip_run(osv.osv): @@ -216,7 +214,6 @@ class hr_payslip_run(osv.osv): advice_line_pool.create(cr, uid, advice_line, context=context) return self.write(cr, uid, ids, {'available_advice' : True}) -hr_payslip_run() class payroll_advice_line(osv.osv): ''' @@ -247,7 +244,6 @@ class payroll_advice_line(osv.osv): 'debit_credit': 'C', } -payroll_advice_line() class hr_payslip(osv.osv): ''' @@ -265,7 +261,6 @@ class hr_payslip(osv.osv): default.update({'advice_id' : False}) return super(hr_payslip, self).copy(cr, uid, id, default, context=context) -hr_payslip() class res_company(osv.osv): @@ -277,6 +272,5 @@ class res_company(osv.osv): 'dearness_allowance': True, } -res_company() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_in_hr_payroll/report/payment_advice_report.py b/addons/l10n_in_hr_payroll/report/payment_advice_report.py index 59456b13b55..32c589d2a90 100644 --- a/addons/l10n_in_hr_payroll/report/payment_advice_report.py +++ b/addons/l10n_in_hr_payroll/report/payment_advice_report.py @@ -82,6 +82,5 @@ class payment_advice_report(osv.osv): l.employee_id,l.advice_id,l.bysal,l.ifsc_code, l.name ) """) -payment_advice_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_in_hr_payroll/report/payslip_report.py b/addons/l10n_in_hr_payroll/report/payslip_report.py index b44f123547b..2e1a543a80a 100644 --- a/addons/l10n_in_hr_payroll/report/payslip_report.py +++ b/addons/l10n_in_hr_payroll/report/payslip_report.py @@ -83,6 +83,5 @@ class payslip_report(osv.osv): l.employee_id,p.struct_id,l.category_id ) """) -payslip_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth.py b/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth.py index 62d332ea5b8..93594e1dff8 100644 --- a/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth.py +++ b/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth.py @@ -66,6 +66,5 @@ class hr_salary_employee_bymonth(osv.osv_memory): 'datas': datas, } -hr_salary_employee_bymonth() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail.py b/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail.py index ed2a02e8d42..de3680f2dd3 100644 --- a/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail.py +++ b/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail.py @@ -61,6 +61,5 @@ class yearly_salary_detail(osv.osv_memory): 'datas': datas, } -yearly_salary_detail() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_lu/wizard/print_vat.py b/addons/l10n_lu/wizard/print_vat.py index abd5c7ce298..79213026496 100644 --- a/addons/l10n_lu/wizard/print_vat.py +++ b/addons/l10n_lu/wizard/print_vat.py @@ -92,6 +92,5 @@ class vat_declaration_report(osv.osv_memory): data['form']['period_id'] = self.browse(cr, uid, ids)[0].period_id.id return { 'type': 'ir.actions.report.xml', 'report_name': 'l10n_lu.tax.report.print', 'datas': data} -vat_declaration_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_ma/l10n_ma.py b/addons/l10n_ma/l10n_ma.py index 6321516cf0f..a2a28a21f82 100644 --- a/addons/l10n_ma/l10n_ma.py +++ b/addons/l10n_ma/l10n_ma.py @@ -33,7 +33,6 @@ class l10n_ma_report(osv.osv): _sql_constraints = [ ('code_uniq', 'unique (code)','The code report must be unique !') ] -l10n_ma_report() class l10n_ma_line(osv.osv): _name = 'l10n.ma.line' @@ -47,6 +46,5 @@ class l10n_ma_line(osv.osv): _sql_constraints = [ ('code_uniq', 'unique (code)', 'The variable name must be unique !') ] -l10n_ma_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_multilang/account.py b/addons/l10n_multilang/account.py index 4cb0e28b672..55770c5ec14 100644 --- a/addons/l10n_multilang/account.py +++ b/addons/l10n_multilang/account.py @@ -31,21 +31,18 @@ class account_account_template(osv.osv): _columns = { 'name': fields.char('Name', size=128, required=True, select=True, translate=True), } -account_account_template() class account_account(osv.osv): _inherit = 'account.account' _columns = { 'name': fields.char('Name', size=128, required=True, select=True, translate=True), } -account_account() class account_tax(osv.osv): _inherit = 'account.tax' _columns = { 'name': fields.char('Tax Name', size=128, required=True, select=True, translate=True), } -account_tax() class account_tax_template(osv.osv): @@ -53,7 +50,6 @@ class account_tax_template(osv.osv): _columns = { 'name': fields.char('Tax Name', size=128, required=True, select=True, translate=True), } -account_tax_template() class account_tax_code_template(osv.osv): @@ -61,7 +57,6 @@ class account_tax_code_template(osv.osv): _columns = { 'name': fields.char('Tax Case Name', size=64, required=True, translate=True), } -account_tax_code_template() class account_chart_template(osv.osv): @@ -71,7 +66,6 @@ class account_chart_template(osv.osv): 'spoken_languages': fields.char('Spoken Languages', size=64, help="State here the languages for which the translations of templates could be loaded at the time of installation of this localization module and copied in the final object when generating them from templates. You must provide the language codes separated by ';'"), } _order = 'name' -account_chart_template() class account_fiscal_position(osv.osv): @@ -79,7 +73,6 @@ class account_fiscal_position(osv.osv): _columns = { 'name': fields.char('Fiscal Position', size=64, required=True, translate=True), } -account_fiscal_position() class account_fiscal_position_template(osv.osv): @@ -87,7 +80,6 @@ class account_fiscal_position_template(osv.osv): _columns = { 'name': fields.char('Fiscal Position Template', size=64, required=True, translate=True), } -account_fiscal_position_template() class account_journal(osv.osv): @@ -95,7 +87,6 @@ class account_journal(osv.osv): _columns = { 'name': fields.char('Journal Name', size=64, required=True, translate=True), } -account_journal() class account_analytic_account(osv.osv): @@ -103,7 +94,6 @@ class account_analytic_account(osv.osv): _columns = { 'name': fields.char('Account Name', size=128, required=True, translate=True), } -account_analytic_account() class account_analytic_journal(osv.osv): @@ -111,4 +101,3 @@ class account_analytic_journal(osv.osv): _columns = { 'name': fields.char('Journal Name', size=64, required=True, translate=True), } -account_analytic_journal() diff --git a/addons/l10n_multilang/l10n_multilang.py b/addons/l10n_multilang/l10n_multilang.py index b94ff303eae..b7564a9960a 100644 --- a/addons/l10n_multilang/l10n_multilang.py +++ b/addons/l10n_multilang/l10n_multilang.py @@ -150,6 +150,5 @@ class wizard_multi_charts_accounts(osv.osv_memory): out_ids = obj_fiscal_position.search(cr, uid, [('company_id', '=', company_id)], order='id') return self.process_translations(cr, uid, langs, obj_fiscal_position_template, field, in_ids, obj_fiscal_position, out_ids, force_write=False, context=context) -wizard_multi_charts_accounts() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_ro/res_partner.py b/addons/l10n_ro/res_partner.py index 1cfe7390a77..2f1cc26faa8 100755 --- a/addons/l10n_ro/res_partner.py +++ b/addons/l10n_ro/res_partner.py @@ -32,6 +32,5 @@ class res_partner(osv.osv): ('vat_uniq', 'unique (vat)', 'The vat of the partner must be unique !'), ('nrc_uniq', 'unique (nrc)', 'The code of the partner must be unique !') ] -res_partner() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/lunch/report/report_lunch_order.py b/addons/lunch/report/report_lunch_order.py index 3a439a4a4dd..13c885e7896 100644 --- a/addons/lunch/report/report_lunch_order.py +++ b/addons/lunch/report/report_lunch_order.py @@ -60,6 +60,5 @@ class report_lunch_order(osv.osv): lo.date,lo.user_id,lo.note ) """) -report_lunch_order() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/marketing_campaign/marketing_campaign.py b/addons/marketing_campaign/marketing_campaign.py index 4aa340d7a14..fdec2fb39e0 100644 --- a/addons/marketing_campaign/marketing_campaign.py +++ b/addons/marketing_campaign/marketing_campaign.py @@ -236,7 +236,6 @@ Normal - the campaign runs normally and automatically sends all emails and repor return Workitems.search(cr, uid, duplicate_workitem_domain, context=context) -marketing_campaign() class marketing_campaign_segment(osv.osv): _name = "marketing.campaign.segment" @@ -383,7 +382,6 @@ class marketing_campaign_segment(osv.osv): Workitems.process_all(cr, uid, list(campaigns), context=context) return True -marketing_campaign_segment() class marketing_campaign_activity(osv.osv): _name = "marketing.campaign.activity" @@ -510,7 +508,6 @@ class marketing_campaign_activity(osv.osv): workitem = workitem_obj.browse(cr, uid, wi_id, context=context) return action(cr, uid, activity, workitem, context=context) -marketing_campaign_activity() class marketing_campaign_transition(osv.osv): _name = "marketing.campaign.transition" @@ -582,7 +579,6 @@ class marketing_campaign_transition(osv.osv): ('interval_positive', 'CHECK(interval_nbr >= 0)', 'The interval must be positive or zero') ] -marketing_campaign_transition() class marketing_campaign_workitem(osv.osv): _name = "marketing.campaign.workitem" @@ -818,7 +814,6 @@ class marketing_campaign_workitem(osv.osv): raise osv.except_osv(_('No preview'),_('The current step for this item has no email or report to preview.')) return res -marketing_campaign_workitem() class email_template(osv.osv): _inherit = "email.template" @@ -828,7 +823,6 @@ class email_template(osv.osv): # TODO: add constraint to prevent disabling / disapproving an email account used in a running campaign -email_template() class report_xml(osv.osv): _inherit = 'ir.actions.report.xml' @@ -841,7 +835,6 @@ class report_xml(osv.osv): args.append(('model', '=', model)) return super(report_xml, self).search(cr, uid, args, offset, limit, order, context, count) -report_xml() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/marketing_campaign/report/campaign_analysis.py b/addons/marketing_campaign/report/campaign_analysis.py index 1fc8a5f1dc7..f09ed966857 100644 --- a/addons/marketing_campaign/report/campaign_analysis.py +++ b/addons/marketing_campaign/report/campaign_analysis.py @@ -98,6 +98,5 @@ class campaign_analysis(osv.osv): wi.date::date ) """) -campaign_analysis() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/marketing_campaign/res_partner.py b/addons/marketing_campaign/res_partner.py index c151c2f4050..b012cbb7181 100644 --- a/addons/marketing_campaign/res_partner.py +++ b/addons/marketing_campaign/res_partner.py @@ -36,7 +36,6 @@ class res_partner(osv.osv): }) return super(res_partner, self).copy(cr, uid, id, default=default, context=context) -res_partner() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/membership/membership.py b/addons/membership/membership.py index ae7f4948d72..b75284637c9 100644 --- a/addons/membership/membership.py +++ b/addons/membership/membership.py @@ -169,7 +169,6 @@ class membership_line(osv.osv): (_check_membership_date, 'Error, this membership product is out of date', []) ] -membership_line() class Partner(osv.osv): @@ -442,7 +441,6 @@ class Partner(osv.osv): self.pool.get('res.partner').write(cr, uid, ids, {}) return invoice_list -Partner() class Product(osv.osv): @@ -476,7 +474,6 @@ class Product(osv.osv): 'membership': False, } -Product() class Invoice(osv.osv): @@ -494,7 +491,6 @@ class Invoice(osv.osv): member_line_obj.write(cr, uid, mlines, {'date_cancel': today}) return super(Invoice, self).action_cancel(cr, uid, ids, context=context) -Invoice() class account_invoice_line(osv.osv): _inherit='account.invoice.line' @@ -561,6 +557,5 @@ class account_invoice_line(osv.osv): }, context=context) return result -account_invoice_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/membership/report/report_membership.py b/addons/membership/report/report_membership.py index f68e52992af..081a2f0d8a5 100644 --- a/addons/membership/report/report_membership.py +++ b/addons/membership/report/report_membership.py @@ -139,6 +139,5 @@ class report_membership(osv.osv): membership_amount )""") -report_membership() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/membership/wizard/membership_invoice.py b/addons/membership/wizard/membership_invoice.py index 2425cd648ea..a1e07146da0 100644 --- a/addons/membership/wizard/membership_invoice.py +++ b/addons/membership/wizard/membership_invoice.py @@ -73,6 +73,5 @@ class membership_invoice(osv.osv_memory): 'search_view_id': search_view_id, } -membership_invoice() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp/company.py b/addons/mrp/company.py index af8a21f4934..375a318c9d0 100644 --- a/addons/mrp/company.py +++ b/addons/mrp/company.py @@ -30,7 +30,6 @@ class company(osv.osv): _defaults = { 'manufacturing_lead': lambda *a: 1.0, } -company() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index 58fcacaa1f5..7fb40ce12af 100644 --- a/addons/mrp/mrp.py +++ b/addons/mrp/mrp.py @@ -70,7 +70,6 @@ class mrp_workcenter(osv.osv): value = {'costs_hour': cost.standard_price} return {'value': value} -mrp_workcenter() class mrp_routing(osv.osv): @@ -98,7 +97,6 @@ class mrp_routing(osv.osv): 'active': lambda *a: 1, 'company_id': lambda self, cr, uid, context: self.pool.get('res.company')._company_default_get(cr, uid, 'mrp.routing', context=context) } -mrp_routing() class mrp_routing_workcenter(osv.osv): """ @@ -124,7 +122,6 @@ class mrp_routing_workcenter(osv.osv): 'cycle_nbr': lambda *a: 1.0, 'hour_nbr': lambda *a: 0.0, } -mrp_routing_workcenter() class mrp_bom(osv.osv): """ diff --git a/addons/mrp/procurement.py b/addons/mrp/procurement.py index 1f94f0034ad..3ad7155dad6 100644 --- a/addons/mrp/procurement.py +++ b/addons/mrp/procurement.py @@ -122,6 +122,5 @@ class procurement_order(osv.osv): body = _("Manufacturing Order %s created.") % ( procurement.production_id.name,) self.message_post(cr, uid, [procurement.id], body=body, context=context) -procurement_order() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp/product.py b/addons/mrp/product.py index f5e29a1d103..d7a19c718fa 100644 --- a/addons/mrp/product.py +++ b/addons/mrp/product.py @@ -37,6 +37,5 @@ class product_product(osv.osv): return super(product_product, self).copy(cr, uid, id, default, context=context) -product_product() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp/report/mrp_report.py b/addons/mrp/report/mrp_report.py index 7dff886a4ba..76474ccb6ab 100644 --- a/addons/mrp/report/mrp_report.py +++ b/addons/mrp/report/mrp_report.py @@ -52,7 +52,6 @@ class report_workcenter_load(osv.osv): to_char(p.date_planned,'YYYY:mm:dd') )""") -report_workcenter_load() class report_mrp_inout(osv.osv): @@ -97,7 +96,6 @@ class report_mrp_inout(osv.osv): to_char(sm.date,'YYYY:IW') )""") -report_mrp_inout() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp/stock.py b/addons/mrp/stock.py index 2feffee94a1..0ebc7bd199d 100644 --- a/addons/mrp/stock.py +++ b/addons/mrp/stock.py @@ -145,7 +145,6 @@ class StockMove(osv.osv): res.append(new_move) return res -StockMove() class StockPicking(osv.osv): @@ -162,7 +161,6 @@ class StockPicking(osv.osv): todo.extend(move_obj._action_explode(cr, uid, move)) return list(set(todo)) -StockPicking() class split_in_production_lot(osv.osv_memory): @@ -179,6 +177,5 @@ class split_in_production_lot(osv.osv_memory): production_obj.write(cr, uid, production_ids, {'move_lines': [(4, m) for m in new_moves]}) return new_moves -split_in_production_lot() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp/wizard/change_production_qty.py b/addons/mrp/wizard/change_production_qty.py index 74309b50825..41b6022a178 100644 --- a/addons/mrp/wizard/change_production_qty.py +++ b/addons/mrp/wizard/change_production_qty.py @@ -101,6 +101,5 @@ class change_production_qty(osv.osv_memory): self._update_product_to_produce(cr, uid, prod, wiz_qty.product_qty, context=context) return {} -change_production_qty() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp/wizard/mrp_price.py b/addons/mrp/wizard/mrp_price.py index 08506ccf0e2..70b4482b019 100644 --- a/addons/mrp/wizard/mrp_price.py +++ b/addons/mrp/wizard/mrp_price.py @@ -52,6 +52,5 @@ class mrp_price(osv.osv_memory): 'datas' : datas, } -mrp_price() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp/wizard/mrp_product_produce.py b/addons/mrp/wizard/mrp_product_produce.py index 3a3c5961d1e..0851657587c 100644 --- a/addons/mrp/wizard/mrp_product_produce.py +++ b/addons/mrp/wizard/mrp_product_produce.py @@ -67,6 +67,5 @@ class mrp_product_produce(osv.osv_memory): data.product_qty, data.mode, context=context) return {} -mrp_product_produce() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp/wizard/mrp_workcenter_load.py b/addons/mrp/wizard/mrp_workcenter_load.py index 265c6ddcea0..79905673a6b 100644 --- a/addons/mrp/wizard/mrp_workcenter_load.py +++ b/addons/mrp/wizard/mrp_workcenter_load.py @@ -51,6 +51,5 @@ class mrp_workcenter_load(osv.osv_memory): 'datas' : datas, } -mrp_workcenter_load() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp_byproduct/mrp_byproduct.py b/addons/mrp_byproduct/mrp_byproduct.py index 22bbface59d..2425c2d8fea 100644 --- a/addons/mrp_byproduct/mrp_byproduct.py +++ b/addons/mrp_byproduct/mrp_byproduct.py @@ -64,7 +64,6 @@ class mrp_subproduct(osv.osv): res['value'].update({'product_uom': product.uom_id.id}) return res -mrp_subproduct() class mrp_bom(osv.osv): _name = 'mrp.bom' @@ -75,7 +74,6 @@ class mrp_bom(osv.osv): 'sub_products':fields.one2many('mrp.subproduct', 'bom_id', 'Byproducts'), } -mrp_bom() class mrp_production(osv.osv): _description = 'Production' @@ -143,7 +141,6 @@ class mrp_production(osv.osv): return subproduct_factor return super(mrp_production, self)._get_subproduct_factor(cr, uid, production_id, move_id, context=context) -mrp_production() class change_production_qty(osv.osv_memory): _inherit = 'change.production.qty' diff --git a/addons/mrp_operations/mrp_operations.py b/addons/mrp_operations/mrp_operations.py index c069def7554..d6f026530dc 100644 --- a/addons/mrp_operations/mrp_operations.py +++ b/addons/mrp_operations/mrp_operations.py @@ -46,7 +46,6 @@ class stock_move(osv.osv): }) return super(stock_move, self).copy(cr, uid, id, default, context) -stock_move() class mrp_production_workcenter_line(osv.osv): @@ -371,7 +370,6 @@ class mrp_production(osv.osv): self._compute_planned_workcenter(cr, uid, ids, context=context) return result -mrp_production() class mrp_operations_operation_code(osv.osv): _name="mrp_operations.operation.code" @@ -380,7 +378,6 @@ class mrp_operations_operation_code(osv.osv): 'code': fields.char('Code', size=16, required=True), 'start_stop': fields.selection([('start','Start'),('pause','Pause'),('resume','Resume'),('cancel','Cancelled'),('done','Done')], 'Status', required=True), } -mrp_operations_operation_code() class mrp_operations_operation(osv.osv): _name="mrp_operations.operation" @@ -560,6 +557,5 @@ class mrp_operations_operation(osv.osv): 'date_start': lambda *a:datetime.now().strftime('%Y-%m-%d %H:%M:%S') } -mrp_operations_operation() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp_operations/report/mrp_workorder_analysis.py b/addons/mrp_operations/report/mrp_workorder_analysis.py index 73982b09f8b..f91961ad74c 100644 --- a/addons/mrp_operations/report/mrp_workorder_analysis.py +++ b/addons/mrp_operations/report/mrp_workorder_analysis.py @@ -71,6 +71,5 @@ class mrp_workorder(osv.osv): w.costs_hour, mp.product_id, mp.name, wl.state, wl.date_planned, wl.production_id, wl.workcenter_id )""") -mrp_workorder() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp_repair/mrp_repair.py b/addons/mrp_repair/mrp_repair.py index 6c3f0ce21e1..43ee34b0c05 100644 --- a/addons/mrp_repair/mrp_repair.py +++ b/addons/mrp_repair/mrp_repair.py @@ -699,7 +699,6 @@ class mrp_repair_line(osv.osv, ProductChangeMixin): 'location_dest_id': scrap_location_ids and scrap_location_ids[0] or False, }} -mrp_repair_line() class mrp_repair_fee(osv.osv, ProductChangeMixin): _name = 'mrp.repair.fee' @@ -741,5 +740,4 @@ class mrp_repair_fee(osv.osv, ProductChangeMixin): 'to_invoice': lambda *a: True, } -mrp_repair_fee() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp_repair/wizard/cancel_repair.py b/addons/mrp_repair/wizard/cancel_repair.py index 12b85efd202..4c60f6c3251 100644 --- a/addons/mrp_repair/wizard/cancel_repair.py +++ b/addons/mrp_repair/wizard/cancel_repair.py @@ -81,7 +81,6 @@ class repair_cancel(osv.osv_memory): """ return res -repair_cancel() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp_repair/wizard/make_invoice.py b/addons/mrp_repair/wizard/make_invoice.py index 9442746d68e..f9c84cb7bdb 100644 --- a/addons/mrp_repair/wizard/make_invoice.py +++ b/addons/mrp_repair/wizard/make_invoice.py @@ -68,7 +68,6 @@ class make_invoice(osv.osv_memory): 'type': 'ir.actions.act_window' } -make_invoice() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/account_bank_statement.py b/addons/point_of_sale/account_bank_statement.py index 31415bb847c..9275b975d46 100644 --- a/addons/point_of_sale/account_bank_statement.py +++ b/addons/point_of_sale/account_bank_statement.py @@ -34,7 +34,6 @@ class account_journal(osv.osv): 'self_checkout_payment_method' : False, } -account_journal() class account_cash_statement(osv.osv): _inherit = 'account.bank.statement' @@ -42,6 +41,5 @@ class account_cash_statement(osv.osv): 'pos_session_id' : fields.many2one('pos.session'), } -account_cash_statement() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 2185f372caa..f51bff920fa 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -1128,7 +1128,6 @@ class account_bank_statement(osv.osv): _defaults = { 'user_id': lambda self,cr,uid,c={}: uid } -account_bank_statement() class account_bank_statement_line(osv.osv): _inherit = 'account.bank.statement.line' @@ -1136,7 +1135,6 @@ class account_bank_statement_line(osv.osv): 'pos_statement_id': fields.many2one('pos.order', ondelete='cascade'), } -account_bank_statement_line() class pos_order_line(osv.osv): _name = "pos.order.line" diff --git a/addons/point_of_sale/report/pos_order_report.py b/addons/point_of_sale/report/pos_order_report.py index 62250f11e17..f4df5f0f5f6 100644 --- a/addons/point_of_sale/report/pos_order_report.py +++ b/addons/point_of_sale/report/pos_order_report.py @@ -84,6 +84,5 @@ class pos_order_report(osv.osv): having sum(l.qty * u.factor) != 0)""") -pos_order_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/report/pos_report.py b/addons/point_of_sale/report/pos_report.py index 0179c7bcf45..96b056fb0fc 100644 --- a/addons/point_of_sale/report/pos_report.py +++ b/addons/point_of_sale/report/pos_report.py @@ -74,7 +74,6 @@ class report_transaction_pos(osv.osv): """) #to_char(date_trunc('day',absl.create_date),'YYYY-MM-DD') #to_char(date_trunc('day',absl.create_date),'YYYY-MM-DD')::text as date_create, -report_transaction_pos() class report_sales_by_user_pos(osv.osv): _name = "report.sales.by.user.pos" @@ -107,7 +106,6 @@ class report_sales_by_user_pos(osv.osv): ) """) -report_sales_by_user_pos() class report_sales_by_user_pos_month(osv.osv): _name = "report.sales.by.user.pos.month" @@ -140,7 +138,6 @@ class report_sales_by_user_pos_month(osv.osv): ) """) -report_sales_by_user_pos_month() class report_sales_by_margin_pos(osv.osv): _name = "report.sales.by.margin.pos" @@ -187,7 +184,6 @@ class report_sales_by_margin_pos(osv.osv): ) """) -report_sales_by_margin_pos() class report_sales_by_margin_pos_month(osv.osv): _name = "report.sales.by.margin.pos.month" @@ -233,6 +229,5 @@ class report_sales_by_margin_pos_month(osv.osv): ) """) -report_sales_by_margin_pos_month() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_box_entries.py b/addons/point_of_sale/wizard/pos_box_entries.py index ff6af8e1f62..8ca4f01b006 100644 --- a/addons/point_of_sale/wizard/pos_box_entries.py +++ b/addons/point_of_sale/wizard/pos_box_entries.py @@ -141,7 +141,6 @@ class pos_box_entries(osv.osv_memory): bank_statement.create(cr, uid, vals, context=context) return {} -pos_box_entries() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_box_out.py b/addons/point_of_sale/wizard/pos_box_out.py index 6b0b9ee4755..51c3993183b 100644 --- a/addons/point_of_sale/wizard/pos_box_out.py +++ b/addons/point_of_sale/wizard/pos_box_out.py @@ -100,7 +100,6 @@ class pos_box_out(osv.osv_memory): statement_line_obj.create(cr, uid, vals, context=context) return {} -pos_box_out() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_confirm.py b/addons/point_of_sale/wizard/pos_confirm.py index f37bdd9f8b8..6a031f54f61 100644 --- a/addons/point_of_sale/wizard/pos_confirm.py +++ b/addons/point_of_sale/wizard/pos_confirm.py @@ -48,7 +48,6 @@ class pos_confirm(osv.osv_memory): data_lines += [x.id for x in move.line_id if x.account_id.id == invoice.account_id.id] self.pool.get('account.move.line').reconcile(cr, uid, data_lines, context=context) return {} -pos_confirm() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_details.py b/addons/point_of_sale/wizard/pos_details.py index 3f06dc57a46..bfd6e7c4ca7 100644 --- a/addons/point_of_sale/wizard/pos_details.py +++ b/addons/point_of_sale/wizard/pos_details.py @@ -60,7 +60,6 @@ class pos_details(osv.osv_memory): 'datas': datas, } -pos_details() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_discount.py b/addons/point_of_sale/wizard/pos_discount.py index d2703b21ad7..d60b2766644 100644 --- a/addons/point_of_sale/wizard/pos_discount.py +++ b/addons/point_of_sale/wizard/pos_discount.py @@ -68,6 +68,5 @@ class pos_discount(osv.osv_memory): order_line_ref.write(cr, uid, [x.id for x in order.lines], {'discount':this.discount}, context=context) return {} -pos_discount() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_open_statement.py b/addons/point_of_sale/wizard/pos_open_statement.py index 750a5519865..97ffad805b7 100644 --- a/addons/point_of_sale/wizard/pos_open_statement.py +++ b/addons/point_of_sale/wizard/pos_open_statement.py @@ -86,6 +86,5 @@ class pos_open_statement(osv.osv_memory): 'search_view_id': search_id, } -pos_open_statement() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_payment.py b/addons/point_of_sale/wizard/pos_payment.py index 47814761b20..02223153290 100644 --- a/addons/point_of_sale/wizard/pos_payment.py +++ b/addons/point_of_sale/wizard/pos_payment.py @@ -128,7 +128,6 @@ class pos_make_payment(osv.osv_memory): 'amount': _default_amount, } -pos_make_payment() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_payment_report.py b/addons/point_of_sale/wizard/pos_payment_report.py index b28af5a3fff..a591fd4ce5f 100644 --- a/addons/point_of_sale/wizard/pos_payment_report.py +++ b/addons/point_of_sale/wizard/pos_payment_report.py @@ -43,7 +43,6 @@ class pos_payment_report(osv.osv_memory): 'datas': datas, } -pos_payment_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_payment_report_user.py b/addons/point_of_sale/wizard/pos_payment_report_user.py index 06e224f39bc..37a62783ed2 100644 --- a/addons/point_of_sale/wizard/pos_payment_report_user.py +++ b/addons/point_of_sale/wizard/pos_payment_report_user.py @@ -49,7 +49,6 @@ class pos_payment_report_user(osv.osv_memory): 'user_id': fields.many2many('res.users', 'res_user_sale', 'user_id', 'sale_id', 'Salesperson') } -pos_payment_report_user() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_receipt.py b/addons/point_of_sale/wizard/pos_receipt.py index 2a62b74bb30..3e6714f3ac7 100644 --- a/addons/point_of_sale/wizard/pos_receipt.py +++ b/addons/point_of_sale/wizard/pos_receipt.py @@ -55,6 +55,5 @@ class pos_receipt(osv.osv_memory): 'datas': datas, } -pos_receipt() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_return.py b/addons/point_of_sale/wizard/pos_return.py index b4e0e7b2041..f0624948ed5 100644 --- a/addons/point_of_sale/wizard/pos_return.py +++ b/addons/point_of_sale/wizard/pos_return.py @@ -171,7 +171,6 @@ class pos_return(osv.osv_memory): } return act -pos_return() class add_product(osv.osv_memory): _inherit = 'pos.add.product' @@ -321,5 +320,4 @@ class add_product(osv.osv_memory): } return True -add_product() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_sales_user.py b/addons/point_of_sale/wizard/pos_sales_user.py index f2f56d6e35c..e8ece7a7953 100644 --- a/addons/point_of_sale/wizard/pos_sales_user.py +++ b/addons/point_of_sale/wizard/pos_sales_user.py @@ -55,7 +55,6 @@ class pos_sale_user(osv.osv_memory): 'datas': datas, } -pos_sale_user() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_sales_user_current_user.py b/addons/point_of_sale/wizard/pos_sales_user_current_user.py index d3da6a9ad42..d6178ff6a50 100644 --- a/addons/point_of_sale/wizard/pos_sales_user_current_user.py +++ b/addons/point_of_sale/wizard/pos_sales_user_current_user.py @@ -53,7 +53,6 @@ class pos_sales_user_today_current_user(osv.osv_memory): 'datas': datas, } -pos_sales_user_today_current_user() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_sales_user_today.py b/addons/point_of_sale/wizard/pos_sales_user_today.py index dfc40c863b0..65e4182daed 100644 --- a/addons/point_of_sale/wizard/pos_sales_user_today.py +++ b/addons/point_of_sale/wizard/pos_sales_user_today.py @@ -52,7 +52,6 @@ class pos_sales_user_today(osv.osv_memory): 'datas': datas, } -pos_sales_user_today() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_session_opening.py b/addons/point_of_sale/wizard/pos_session_opening.py index e0135de0cdb..039dd90ae6b 100644 --- a/addons/point_of_sale/wizard/pos_session_opening.py +++ b/addons/point_of_sale/wizard/pos_session_opening.py @@ -115,4 +115,3 @@ class pos_session_opening(osv.osv_memory): 'pos_config_id' : result, 'show_config' : show_config, } -pos_session_opening() diff --git a/addons/portal/wizard/share_wizard.py b/addons/portal/wizard/share_wizard.py index d983bf11ee1..0ffae804f07 100644 --- a/addons/portal/wizard/share_wizard.py +++ b/addons/portal/wizard/share_wizard.py @@ -179,7 +179,6 @@ class share_wizard_portal(osv.TransientModel): super(share_wizard_portal,self)._finish_result_lines(cr, uid, wizard_data, share_group_id, context=context) self.copy_share_group_access_and_delete(cr, wizard_data, share_group_id, context=context) -share_wizard_portal() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/process/process.py b/addons/process/process.py index 30a1865af4b..d6a72148fa6 100644 --- a/addons/process/process.py +++ b/addons/process/process.py @@ -288,7 +288,6 @@ class process_process(osv.osv): }) return super(process_process, self).copy(cr, uid, id, default, context) -process_process() class process_node(osv.osv): _name = 'process.node' @@ -323,7 +322,6 @@ class process_node(osv.osv): }) return super(process_node, self).copy_data(cr, uid, id, default, context=context) -process_node() class process_node_condition(osv.osv): _name = 'process.condition' @@ -334,7 +332,6 @@ class process_node_condition(osv.osv): 'model_id': fields.many2one('ir.model', 'Object', ondelete='set null'), 'model_states': fields.char('Expression', required=True, size=128) } -process_node_condition() class process_transition(osv.osv): _name = 'process.transition' @@ -348,7 +345,6 @@ class process_transition(osv.osv): 'group_ids': fields.many2many('res.groups', 'process_transition_group_rel', 'tid', 'rid', string='Required Groups'), 'note': fields.text('Description', translate=True), } -process_transition() class process_transition_action(osv.osv): _name = 'process.transition.action' @@ -381,6 +377,5 @@ class process_transition_action(osv.osv): return super(process_transition_action, self).copy_data(cr, uid, id, default, context) -process_transition_action() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/procurement/company.py b/addons/procurement/company.py index 60e2db873e2..1fd08d967f1 100644 --- a/addons/procurement/company.py +++ b/addons/procurement/company.py @@ -33,6 +33,5 @@ class company(osv.osv): 'schedule_range': 730.0, } -company() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/procurement/wizard/make_procurement_product.py b/addons/procurement/wizard/make_procurement_product.py index aab49bf8e80..bf83bc73f1a 100644 --- a/addons/procurement/wizard/make_procurement_product.py +++ b/addons/procurement/wizard/make_procurement_product.py @@ -126,6 +126,5 @@ class make_procurement(osv.osv_memory): return res -make_procurement() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/procurement/wizard/mrp_procurement.py b/addons/procurement/wizard/mrp_procurement.py index 56386bf234e..fd5a9b530b6 100644 --- a/addons/procurement/wizard/mrp_procurement.py +++ b/addons/procurement/wizard/mrp_procurement.py @@ -46,7 +46,6 @@ class procurement_compute(osv.osv_memory): threaded_calculation.start() return {} -procurement_compute() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/procurement/wizard/orderpoint_procurement.py b/addons/procurement/wizard/orderpoint_procurement.py index 2d5b91d4c81..afc8e2a721f 100644 --- a/addons/procurement/wizard/orderpoint_procurement.py +++ b/addons/procurement/wizard/orderpoint_procurement.py @@ -68,6 +68,5 @@ class procurement_compute(osv.osv_memory): threaded_calculation.start() return {'type': 'ir.actions.act_window_close'} -procurement_compute() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/procurement/wizard/schedulers_all.py b/addons/procurement/wizard/schedulers_all.py index c60ac989274..aab9657ae5d 100644 --- a/addons/procurement/wizard/schedulers_all.py +++ b/addons/procurement/wizard/schedulers_all.py @@ -65,6 +65,5 @@ class procurement_compute_all(osv.osv_memory): threaded_calculation.start() return {'type': 'ir.actions.act_window_close'} -procurement_compute_all() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/product/partner.py b/addons/product/partner.py index 1d11e909346..159c687bedf 100644 --- a/addons/product/partner.py +++ b/addons/product/partner.py @@ -36,7 +36,6 @@ class res_partner(osv.osv): help="This pricelist will be used, instead of the default one, for sales to the current partner"), } -res_partner() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/product/pricelist.py b/addons/product/pricelist.py index 757cce2ae95..ef5b42aef02 100644 --- a/addons/product/pricelist.py +++ b/addons/product/pricelist.py @@ -64,7 +64,6 @@ class price_type(osv.osv): "currency_id": _get_currency } -price_type() #---------------------------------------------------------- # Price lists @@ -77,7 +76,6 @@ class product_pricelist_type(osv.osv): 'name': fields.char('Name',size=64, required=True, translate=True), 'key': fields.char('Key', size=64, required=True, help="Used in the code to select specific prices based on the context. Keep unchanged."), } -product_pricelist_type() class product_pricelist(osv.osv): @@ -305,7 +303,6 @@ class product_pricelist(osv.osv): res.update({'item_id': {ids[-1]: res_multi.get('item_id', ids[-1])}}) return res -product_pricelist() class product_pricelist_version(osv.osv): @@ -363,7 +360,6 @@ class product_pricelist_version(osv.osv): ['date_start', 'date_end']) ] -product_pricelist_version() class product_pricelist_item(osv.osv): def _price_field_get(self, cr, uid, context=None): @@ -443,7 +439,6 @@ class product_pricelist_item(osv.osv): if prod[0]['code']: return {'value': {'name': prod[0]['code']}} return {} -product_pricelist_item() diff --git a/addons/product/product.py b/addons/product/product.py index 82b37f7b9e8..fdcbee20cb4 100644 --- a/addons/product/product.py +++ b/addons/product/product.py @@ -84,7 +84,6 @@ class product_uom_categ(osv.osv): _columns = { 'name': fields.char('Name', size=64, required=True, translate=True), } -product_uom_categ() class product_uom(osv.osv): _name = 'product.uom' @@ -208,7 +207,6 @@ class product_uom(osv.osv): raise osv.except_osv(_('Warning!'),_("Cannot change the category of existing Unit of Measure '%s'.") % (uom.name,)) return super(product_uom, self).write(cr, uid, ids, vals, context=context) -product_uom() class product_ul(osv.osv): @@ -218,7 +216,6 @@ class product_ul(osv.osv): 'name' : fields.char('Name', size=64,select=True, required=True, translate=True), 'type' : fields.selection([('unit','Unit'),('pack','Pack'),('box', 'Box'), ('pallet', 'Pallet')], 'Type', required=True), } -product_ul() #---------------------------------------------------------- @@ -283,7 +280,6 @@ class product_category(osv.osv): def child_get(self, cr, uid, ids): return [ids] -product_category() #---------------------------------------------------------- @@ -401,7 +397,6 @@ class product_template(osv.osv): pass return super(product_template, self).name_get(cr, user, ids, context) -product_template() class product_product(osv.osv): def view_header_get(self, cr, uid, view_id, view_type, context=None): @@ -753,7 +748,6 @@ class product_product(osv.osv): args.append((('categ_id', 'child_of', context['search_default_categ_id']))) return super(product_product, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=False) -product_product() class product_packaging(osv.osv): _name = "product.packaging" @@ -819,7 +813,6 @@ class product_packaging(osv.osv): return (10 - (sum % 10)) % 10 checksum = staticmethod(checksum) -product_packaging() class product_supplierinfo(osv.osv): @@ -893,7 +886,6 @@ class product_supplierinfo(osv.osv): res[supplier.id] = price return res _order = 'sequence' -product_supplierinfo() class pricelist_partnerinfo(osv.osv): @@ -905,7 +897,6 @@ class pricelist_partnerinfo(osv.osv): 'price': fields.float('Unit Price', required=True, digits_compute=dp.get_precision('Product Price'), help="This price will be considered as a price for the supplier Unit of Measure if any or the default Unit of Measure of the product otherwise"), } _order = 'min_quantity asc' -pricelist_partnerinfo() class res_currency(osv.osv): _inherit = 'res.currency' diff --git a/addons/product/wizard/product_price.py b/addons/product/wizard/product_price.py index 8989e97d656..5b5c4ccd834 100644 --- a/addons/product/wizard/product_price.py +++ b/addons/product/wizard/product_price.py @@ -60,6 +60,5 @@ class product_price_list(osv.osv_memory): 'report_name': 'product.pricelist', 'datas': datas, } -product_price_list() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/product_expiry/product_expiry.py b/addons/product_expiry/product_expiry.py index 457b4428522..4d8fd49ec4f 100644 --- a/addons/product_expiry/product_expiry.py +++ b/addons/product_expiry/product_expiry.py @@ -74,7 +74,6 @@ class stock_production_lot(osv.osv): 'removal_date': _get_date('removal_time'), 'alert_date': _get_date('alert_time'), } -stock_production_lot() class product_product(osv.osv): _inherit = 'product.product' @@ -88,5 +87,4 @@ class product_product(osv.osv): 'alert_time': fields.integer('Product Alert Time', help='When a new a Serial Number is issued, this is the number of days before an alert should be notified.'), } -product_product() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/product_manufacturer/product_manufacturer.py b/addons/product_manufacturer/product_manufacturer.py index fdd25133433..ea7acf66670 100644 --- a/addons/product_manufacturer/product_manufacturer.py +++ b/addons/product_manufacturer/product_manufacturer.py @@ -28,7 +28,6 @@ class product_product(osv.osv): 'manufacturer_pref' : fields.char('Manufacturer Product Code', size=64), 'attribute_ids': fields.one2many('product.manufacturer.attribute', 'product_id', 'Attributes'), } -product_product() class product_attribute(osv.osv): _name = "product.manufacturer.attribute" @@ -38,6 +37,5 @@ class product_attribute(osv.osv): 'value' : fields.char('Value', size=64), 'product_id': fields.many2one('product.product', 'Product', ondelete='cascade'), } -product_attribute() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/product_margin/product_margin.py b/addons/product_margin/product_margin.py index f9187647f35..1bbfe8c285b 100644 --- a/addons/product_margin/product_margin.py +++ b/addons/product_margin/product_margin.py @@ -128,6 +128,5 @@ class product_product(osv.osv): help="Expected margin * 100 / Expected Sale"), } -product_product() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/product_margin/wizard/product_margin.py b/addons/product_margin/wizard/product_margin.py index 6c54bd72be3..7a56ed2e13d 100644 --- a/addons/product_margin/wizard/product_margin.py +++ b/addons/product_margin/wizard/product_margin.py @@ -81,6 +81,5 @@ class product_margin(osv.osv_memory): 'search_view_id': id['res_id'] } -product_margin() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/product_visible_discount/product_visible_discount.py b/addons/product_visible_discount/product_visible_discount.py index 3928c2e4676..4f8a7b0b9cc 100644 --- a/addons/product_visible_discount/product_visible_discount.py +++ b/addons/product_visible_discount/product_visible_discount.py @@ -33,7 +33,6 @@ class product_pricelist(osv.osv): 'visible_discount': True, } -product_pricelist() class sale_order_line(osv.osv): _inherit = "sale.order.line" @@ -95,7 +94,6 @@ class sale_order_line(osv.osv): result['discount'] = 0.0 return res -sale_order_line() class account_invoice_line(osv.osv): _inherit = "account.invoice.line" @@ -161,6 +159,5 @@ class account_invoice_line(osv.osv): result['discount']=0.0 return res -account_invoice_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project/company.py b/addons/project/company.py index 459c24e7b8a..19f40436070 100644 --- a/addons/project/company.py +++ b/addons/project/company.py @@ -31,7 +31,6 @@ class res_company(osv.osv): "forget to setup the right unit of measure in your employees.", ), } -res_company() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project/report/project_report.py b/addons/project/report/project_report.py index 8e7dca059f9..006aae1085c 100644 --- a/addons/project/report/project_report.py +++ b/addons/project/report/project_report.py @@ -117,5 +117,4 @@ class report_project_task_user(osv.osv): """) -report_project_task_user() diff --git a/addons/project/res_partner.py b/addons/project/res_partner.py index 97fca8c459f..e4ca63d79d8 100644 --- a/addons/project/res_partner.py +++ b/addons/project/res_partner.py @@ -29,7 +29,6 @@ class res_partner(osv.osv): 'task_ids': fields.one2many('project.task', 'partner_id', 'Tasks'), } -res_partner() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project/wizard/project_task_delegate.py b/addons/project/wizard/project_task_delegate.py index bbea5ce2d8f..6a26868557e 100644 --- a/addons/project/wizard/project_task_delegate.py +++ b/addons/project/wizard/project_task_delegate.py @@ -132,6 +132,5 @@ class project_task_delegate(osv.osv_memory): action['help'] = False return action -project_task_delegate() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project/wizard/project_task_reevaluate.py b/addons/project/wizard/project_task_reevaluate.py index 1cbea397d5e..eeb8cccc5d2 100644 --- a/addons/project/wizard/project_task_reevaluate.py +++ b/addons/project/wizard/project_task_reevaluate.py @@ -80,6 +80,5 @@ class project_task_reevaluate(osv.osv_memory): if context.get('button_reactivate'): task_pool.do_reopen(cr, uid, [task_id], context=context) return {'type': 'ir.actions.act_window_close'} -project_task_reevaluate() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_gtd/project_gtd.py b/addons/project_gtd/project_gtd.py index 715544cf4fc..47569e863aa 100644 --- a/addons/project_gtd/project_gtd.py +++ b/addons/project_gtd/project_gtd.py @@ -37,7 +37,6 @@ class project_gtd_context(osv.osv): } _order = "sequence, name" -project_gtd_context() class project_gtd_timebox(osv.osv): @@ -49,7 +48,6 @@ class project_gtd_timebox(osv.osv): 'icon': fields.selection(tools.icons, 'Icon', size=64), } -project_gtd_timebox() class project_task(osv.osv): _inherit = "project.task" @@ -120,6 +118,5 @@ class project_task(osv.osv): return res -project_task() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_gtd/wizard/project_gtd_empty.py b/addons/project_gtd/wizard/project_gtd_empty.py index 26e438b789e..36c64cbc224 100644 --- a/addons/project_gtd/wizard/project_gtd_empty.py +++ b/addons/project_gtd/wizard/project_gtd_empty.py @@ -62,6 +62,5 @@ class project_timebox_empty(osv.osv_memory): obj_task.write(cr, uid, close, {'timebox_id':False}) return {} -project_timebox_empty() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_gtd/wizard/project_gtd_fill.py b/addons/project_gtd/wizard/project_gtd_fill.py index ae8fea61e1c..121bd7efdac 100644 --- a/addons/project_gtd/wizard/project_gtd_fill.py +++ b/addons/project_gtd/wizard/project_gtd_fill.py @@ -56,6 +56,5 @@ class project_timebox_fill(osv.osv_memory): self.pool.get('project.task').write(cr, uid, data[0]['task_ids'], {'timebox_id':data[0]['timebox_to_id'][0]}) return {'type': 'ir.actions.act_window_close'} -project_timebox_fill() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index 7aa408a99aa..69792322ab3 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -40,7 +40,6 @@ class project_issue_version(osv.osv): _defaults = { 'active': 1, } -project_issue_version() class project_issue(base_stage, osv.osv): _name = "project.issue" diff --git a/addons/project_issue/report/project_issue_report.py b/addons/project_issue/report/project_issue_report.py index 199a971c4ad..5cca0ff8689 100644 --- a/addons/project_issue/report/project_issue_report.py +++ b/addons/project_issue/report/project_issue_report.py @@ -105,6 +105,5 @@ class project_issue_report(osv.osv): WHERE c.active= 'true' )""") -project_issue_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_issue_sheet/project_issue_sheet.py b/addons/project_issue_sheet/project_issue_sheet.py index 8fe645e19fe..551ef3c8194 100644 --- a/addons/project_issue_sheet/project_issue_sheet.py +++ b/addons/project_issue_sheet/project_issue_sheet.py @@ -58,7 +58,6 @@ class project_issue(osv.osv): return result -project_issue() class account_analytic_line(osv.osv): _inherit = 'account.analytic.line' @@ -67,7 +66,6 @@ class account_analytic_line(osv.osv): 'create_date' : fields.datetime('Create Date', readonly=True), } -account_analytic_line() class hr_analytic_issue(osv.osv): @@ -77,6 +75,5 @@ class hr_analytic_issue(osv.osv): 'issue_id' : fields.many2one('project.issue', 'Issue'), } -hr_analytic_issue() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py index 109f0c03c6f..a950907fb69 100644 --- a/addons/project_long_term/project_long_term.py +++ b/addons/project_long_term/project_long_term.py @@ -198,7 +198,6 @@ class project_phase(osv.osv): result += "\n" return result -project_phase() class project_user_allocation(osv.osv): _name = 'project.user.allocation' @@ -211,7 +210,6 @@ class project_user_allocation(osv.osv): 'date_start': fields.datetime('Start Date', help="Starting Date"), 'date_end': fields.datetime('End Date', help="Ending Date"), } -project_user_allocation() class project(osv.osv): _inherit = "project.project" @@ -267,7 +265,6 @@ class project(osv.osv): 'date_end': p.end.strftime('%Y-%m-%d %H:%M:%S') }, context=context) return True -project() class account_analytic_account(osv.osv): _inherit = 'account.analytic.account' @@ -289,13 +286,11 @@ class account_analytic_account(osv.osv): res = super(account_analytic_account, self)._trigger_project_creation(cr, uid, vals, context=context) return res or (vals.get('use_phases') and not 'project_creation_in_progress' in context) -account_analytic_account() class project_task(osv.osv): _inherit = "project.task" _columns = { 'phase_id': fields.many2one('project.phase', 'Project Phase', domain="[('project_id', '=', project_id)]"), } -project_task() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_long_term/wizard/project_compute_phases.py b/addons/project_long_term/wizard/project_compute_phases.py index c9aa7eb3573..5ac89e2def2 100644 --- a/addons/project_long_term/wizard/project_compute_phases.py +++ b/addons/project_long_term/wizard/project_compute_phases.py @@ -71,6 +71,5 @@ class project_compute_phases(osv.osv_memory): result['context'] = {"search_default_project_id":project_id, "default_project_id":project_id, "search_default_current": 1} return result -project_compute_phases() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_long_term/wizard/project_compute_tasks.py b/addons/project_long_term/wizard/project_compute_tasks.py index f21dab8a6d2..d442aee7790 100644 --- a/addons/project_long_term/wizard/project_compute_tasks.py +++ b/addons/project_long_term/wizard/project_compute_tasks.py @@ -59,6 +59,5 @@ class project_compute_tasks(osv.osv_memory): result['target'] = 'current' return result -project_compute_tasks() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_mrp/project_mrp.py b/addons/project_mrp/project_mrp.py index a6f0495a962..bb25b4aae24 100644 --- a/addons/project_mrp/project_mrp.py +++ b/addons/project_mrp/project_mrp.py @@ -45,14 +45,12 @@ class project_task(osv.osv): res = super(project_task, self).do_cancel(cr, uid, ids, *args, **kwargs) self._validate_subflows(cr, uid, ids) return res -project_task() class product_product(osv.osv): _inherit = "product.product" _columns = { 'project_id': fields.many2one('project.project', 'Project', ondelete='set null',) } -product_product() class sale_order(osv.osv): _inherit ='sale.order' @@ -108,5 +106,4 @@ class sale_order(osv.osv): 'picked_rate': fields.function(_picked_rate, method=True, string='Picked', type='float'), } -sale_order() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_mrp/project_procurement.py b/addons/project_mrp/project_procurement.py index 79228fe3285..f4b4a28db46 100644 --- a/addons/project_mrp/project_procurement.py +++ b/addons/project_mrp/project_procurement.py @@ -94,6 +94,5 @@ class procurement_order(osv.osv): if procurement.sale_line_id and procurement.sale_line_id.order_id: procurement.sale_line_id.order_id.message_post(body=body) -procurement_order() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_timesheet/project_timesheet.py b/addons/project_timesheet/project_timesheet.py index 6c2b2b0e13b..ffee600f5a7 100644 --- a/addons/project_timesheet/project_timesheet.py +++ b/addons/project_timesheet/project_timesheet.py @@ -69,7 +69,6 @@ class project_project(osv.osv): result['help'] = help return result -project_project() class project_work(osv.osv): _inherit = "project.task.work" @@ -218,7 +217,6 @@ class project_work(osv.osv): 'hr_analytic_timesheet_id':fields.many2one('hr.analytic.timesheet','Related Timeline Id', ondelete='set null'), } -project_work() class task(osv.osv): _inherit = "project.task" @@ -254,7 +252,6 @@ class task(osv.osv): hr_anlytic_timesheet.write(cr, uid, [line_id], vals_line, {}) return super(task,self).write(cr, uid, ids, vals, context) -task() class res_partner(osv.osv): _inherit = 'res.partner' @@ -266,7 +263,6 @@ class res_partner(osv.osv): return super(res_partner,self).unlink(cursor, user, ids, context=context) -res_partner() class account_analytic_line(osv.osv): _inherit = "account.analytic.line" @@ -293,6 +289,5 @@ class account_analytic_line(osv.osv): raise osv.except_osv(_('Invalid Analytic Account !'), _('You cannot select a Analytic Account which is in Close or Cancelled state.')) return res -account_analytic_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_timesheet/report/task_report.py b/addons/project_timesheet/report/task_report.py index c4945e942f6..3411a73a239 100644 --- a/addons/project_timesheet/report/task_report.py +++ b/addons/project_timesheet/report/task_report.py @@ -79,6 +79,5 @@ class report_timesheet_task_user(osv.osv): to_char(to_date(months.name, 'YYYY/MM/DD'),'MM') ) """) -report_timesheet_task_user() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/purchase/company.py b/addons/purchase/company.py index 7a5d26a1b52..cc98c200458 100644 --- a/addons/purchase/company.py +++ b/addons/purchase/company.py @@ -34,7 +34,6 @@ class company(osv.osv): _defaults = { 'po_lead': lambda *a: 1.0, } -company() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/purchase/partner.py b/addons/purchase/partner.py index 56eaf288fe6..ad17a1dbae9 100644 --- a/addons/purchase/partner.py +++ b/addons/purchase/partner.py @@ -55,7 +55,6 @@ class res_partner(osv.osv): 'purchase_order_count': fields.function(_purchase_order_count, string='# of Purchase Order', type='integer'), 'purchase_order_ids': fields.one2many('purchase.order','partner_id','Purchase Order') } -res_partner() diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 7e95a64fcee..26e34048b40 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -1015,7 +1015,6 @@ class purchase_order_line(osv.osv): self.write(cr, uid, ids, {'state': 'confirmed'}, context=context) return True -purchase_order_line() class procurement_order(osv.osv): _inherit = 'procurement.order' diff --git a/addons/purchase/report/purchase_report.py b/addons/purchase/report/purchase_report.py index 1855ed173ca..5af74b23495 100644 --- a/addons/purchase/report/purchase_report.py +++ b/addons/purchase/report/purchase_report.py @@ -136,7 +136,6 @@ class purchase_report(osv.osv): u2.factor ) """) -purchase_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/purchase/stock.py b/addons/purchase/stock.py index 60b439a2097..e64c12a2359 100644 --- a/addons/purchase/stock.py +++ b/addons/purchase/stock.py @@ -29,7 +29,6 @@ class stock_move(osv.osv): readonly=True), } -stock_move() # # Inherit of picking to add the link to the PO diff --git a/addons/purchase/wizard/purchase_line_invoice.py b/addons/purchase/wizard/purchase_line_invoice.py index 12dbf4a09f6..f97d82a8456 100644 --- a/addons/purchase/wizard/purchase_line_invoice.py +++ b/addons/purchase/wizard/purchase_line_invoice.py @@ -142,7 +142,6 @@ class purchase_line_invoice(osv.osv_memory): 'context': "{'type':'in_invoice', 'journal_type': 'purchase'}", 'type': 'ir.actions.act_window' } -purchase_line_invoice() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/purchase/wizard/purchase_order_group.py b/addons/purchase/wizard/purchase_order_group.py index f9b68c1fe11..243f27efea4 100644 --- a/addons/purchase/wizard/purchase_order_group.py +++ b/addons/purchase/wizard/purchase_order_group.py @@ -83,6 +83,5 @@ class purchase_order_group(osv.osv_memory): 'search_view_id': id['res_id'] } -purchase_order_group() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/purchase_analytic_plans/purchase_analytic_plans.py b/addons/purchase_analytic_plans/purchase_analytic_plans.py index c80beddd20f..a654de83253 100644 --- a/addons/purchase_analytic_plans/purchase_analytic_plans.py +++ b/addons/purchase_analytic_plans/purchase_analytic_plans.py @@ -29,7 +29,6 @@ class purchase_order_line(osv.osv): 'analytics_id':fields.many2one('account.analytic.plan.instance','Analytic Distribution'), } -purchase_order_line() class purchase_order(osv.osv): _name='purchase.order' @@ -40,6 +39,5 @@ class purchase_order(osv.osv): res['analytics_id'] = order_line.analytics_id.id return res -purchase_order() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py index b213f958736..c5d32136a7a 100644 --- a/addons/purchase_requisition/purchase_requisition.py +++ b/addons/purchase_requisition/purchase_requisition.py @@ -194,7 +194,6 @@ class purchase_requisition_line(osv.osv): _defaults = { 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'purchase.requisition.line', context=c), } -purchase_requisition_line() class purchase_order(osv.osv): _inherit = "purchase.order" @@ -216,7 +215,6 @@ class purchase_order(osv.osv): po.requisition_id.tender_done(context=context) return res -purchase_order() class product_product(osv.osv): _inherit = 'product.product' @@ -228,7 +226,6 @@ class product_product(osv.osv): 'purchase_requisition': False } -product_product() class procurement_order(osv.osv): @@ -261,6 +258,5 @@ class procurement_order(osv.osv): res = super(procurement_order, self).make_po(cr, uid, ids, context=context) return res -procurement_order() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/purchase_requisition/wizard/purchase_requisition_partner.py b/addons/purchase_requisition/wizard/purchase_requisition_partner.py index 58a72556b22..0fee8745931 100644 --- a/addons/purchase_requisition/wizard/purchase_requisition_partner.py +++ b/addons/purchase_requisition/wizard/purchase_requisition_partner.py @@ -47,7 +47,6 @@ class purchase_requisition_partner(osv.osv_memory): self.pool.get('purchase.requisition').make_purchase_order(cr, uid, active_ids, data.partner_id.id, context=context) return {'type': 'ir.actions.act_window_close'} -purchase_requisition_partner() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_intrastat/report_intrastat.py b/addons/report_intrastat/report_intrastat.py index 2d11151cb5b..003aaec8447 100644 --- a/addons/report_intrastat/report_intrastat.py +++ b/addons/report_intrastat/report_intrastat.py @@ -34,7 +34,6 @@ class res_country(osv.osv): 'intrastat': lambda *a: False, } -res_country() class report_intrastat_code(osv.osv): @@ -45,7 +44,6 @@ class report_intrastat_code(osv.osv): 'description': fields.char('Description', size=64), } -report_intrastat_code() class product_template(osv.osv): @@ -55,7 +53,6 @@ class product_template(osv.osv): 'intrastat_id': fields.many2one('report.intrastat.code', 'Intrastat code'), } -product_template() class report_intrastat(osv.osv): _name = "report.intrastat" @@ -122,6 +119,5 @@ class report_intrastat(osv.osv): group by to_char(inv.create_date, 'YYYY'), to_char(inv.create_date, 'MM'),intrastat.id,inv.type,pt.intrastat_id, inv_country.code,inv.number, inv.currency_id )""") -report_intrastat() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_webkit/header.py b/addons/report_webkit/header.py index 71deb57c370..9713efc5382 100644 --- a/addons/report_webkit/header.py +++ b/addons/report_webkit/header.py @@ -87,7 +87,6 @@ class HeaderHTML(osv.osv): help="Select Proper Paper size" ) } -HeaderHTML() class HeaderImage(osv.osv): """Logo allows you to define multiple logo per company""" @@ -98,6 +97,5 @@ class HeaderImage(osv.osv): 'name' : fields.char('Name', size=128, required =True, help="Name of Image"), 'type' : fields.char('Type', size=32, required =True, help="Image type(png,gif,jpeg)") } -HeaderImage() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_webkit/wizard/report_webkit_actions.py b/addons/report_webkit/wizard/report_webkit_actions.py index 4080d0a4034..5f91d05d671 100644 --- a/addons/report_webkit/wizard/report_webkit_actions.py +++ b/addons/report_webkit/wizard/report_webkit_actions.py @@ -138,6 +138,5 @@ class report_webkit_actions(osv.osv_memory): 'type': 'ir.actions.act_window', } -report_webkit_actions() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/resource/resource.py b/addons/resource/resource.py index 73a6e2a3ec8..944c90a3749 100644 --- a/addons/resource/resource.py +++ b/addons/resource/resource.py @@ -317,7 +317,6 @@ class resource_calendar(osv.osv): # return timedelta converted to hours return (hours_timedelta.days * 24.0 + hours_timedelta.seconds / 3600.0) -resource_calendar() class resource_calendar_attendance(osv.osv): _name = "resource.calendar.attendance" @@ -337,7 +336,6 @@ class resource_calendar_attendance(osv.osv): _defaults = { 'dayofweek' : '0' } -resource_calendar_attendance() def hours_time_string(hours): """ convert a number of hours (float) into a string with format '%H:%M' """ @@ -475,7 +473,6 @@ class resource_resource(osv.osv): wktime_cal.append((non_working[:-1], time_range)) return wktime_cal -resource_resource() class resource_calendar_leaves(osv.osv): _name = "resource.calendar.leaves" @@ -508,6 +505,5 @@ class resource_calendar_leaves(osv.osv): return {'value': result} return {'value': {'calendar_id': []}} -resource_calendar_leaves() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale/report/sale_report.py b/addons/sale/report/sale_report.py index 070e9c4336f..80143379247 100644 --- a/addons/sale/report/sale_report.py +++ b/addons/sale/report/sale_report.py @@ -110,6 +110,5 @@ class sale_report(osv.osv): s.project_id ) """) -sale_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 2efa571c265..76b0f9c2159 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -42,7 +42,6 @@ class sale_shop(osv.osv): 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'sale.shop', context=c), } -sale_shop() class sale_order(osv.osv): _name = "sale.order" diff --git a/addons/sale/wizard/sale_line_invoice.py b/addons/sale/wizard/sale_line_invoice.py index 656e21a2963..83b953cc4d5 100644 --- a/addons/sale/wizard/sale_line_invoice.py +++ b/addons/sale/wizard/sale_line_invoice.py @@ -128,6 +128,5 @@ class sale_order_line_make_invoice(osv.osv_memory): 'type': 'ir.actions.act_window', } -sale_order_line_make_invoice() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale/wizard/sale_make_invoice.py b/addons/sale/wizard/sale_make_invoice.py index 47716018caa..3712feda20b 100644 --- a/addons/sale/wizard/sale_make_invoice.py +++ b/addons/sale/wizard/sale_make_invoice.py @@ -67,6 +67,5 @@ class sale_make_invoice(osv.osv_memory): return result -sale_make_invoice() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale/wizard/sale_make_invoice_advance.py b/addons/sale/wizard/sale_make_invoice_advance.py index 5d3cc165b46..4cb00245ade 100644 --- a/addons/sale/wizard/sale_make_invoice_advance.py +++ b/addons/sale/wizard/sale_make_invoice_advance.py @@ -210,6 +210,5 @@ class sale_advance_payment_inv(osv.osv_memory): 'type': 'ir.actions.act_window', } -sale_advance_payment_inv() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale_analytic_plans/sale_analytic_plans.py b/addons/sale_analytic_plans/sale_analytic_plans.py index 2abbab7ab38..522f6b6f0fb 100644 --- a/addons/sale_analytic_plans/sale_analytic_plans.py +++ b/addons/sale_analytic_plans/sale_analytic_plans.py @@ -37,7 +37,6 @@ class sale_order_line(osv.osv): i = i + 1 return create_ids -sale_order_line() class sale_order(osv.osv): _inherit = "sale.order" diff --git a/addons/sale_crm/wizard/crm_make_sale.py b/addons/sale_crm/wizard/crm_make_sale.py index a052f47ca1f..6bea6286456 100644 --- a/addons/sale_crm/wizard/crm_make_sale.py +++ b/addons/sale_crm/wizard/crm_make_sale.py @@ -153,6 +153,5 @@ class crm_make_sale(osv.osv_memory): 'partner_id': _selectPartner, } -crm_make_sale() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale_journal/sale_journal.py b/addons/sale_journal/sale_journal.py index 8463ab3f3bd..32db3a7c86e 100644 --- a/addons/sale_journal/sale_journal.py +++ b/addons/sale_journal/sale_journal.py @@ -34,7 +34,6 @@ class sale_journal_invoice_type(osv.osv): 'active': True, 'invoicing_method': 'simple' } -sale_journal_invoice_type() #============================================== # sale journal inherit @@ -52,28 +51,24 @@ class res_partner(osv.osv): group_name = "Accounting Properties", help = "This invoicing type will be used, by default, to invoice the current partner."), } -res_partner() class picking(osv.osv): _inherit = "stock.picking" _columns = { 'invoice_type_id': fields.many2one('sale_journal.invoice.type', 'Invoice Type', readonly=True) } -picking() class stock_picking_in(osv.osv): _inherit = "stock.picking.in" _columns = { 'invoice_type_id': fields.many2one('sale_journal.invoice.type', 'Invoice Type', readonly=True) } -stock_picking_in() class stock_picking_out(osv.osv): _inherit = "stock.picking.out" _columns = { 'invoice_type_id': fields.many2one('sale_journal.invoice.type', 'Invoice Type', readonly=True) } -stock_picking_out() class sale(osv.osv): @@ -95,6 +90,5 @@ class sale(osv.osv): result['value']['invoice_type_id'] = itype.id return result -sale() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale_margin/sale_margin.py b/addons/sale_margin/sale_margin.py index dc8c4dfff3c..4c2e9ffc4f4 100644 --- a/addons/sale_margin/sale_margin.py +++ b/addons/sale_margin/sale_margin.py @@ -56,7 +56,6 @@ class sale_order_line(osv.osv): 'purchase_price': fields.float('Cost Price', digits=(16,2)) } -sale_order_line() class sale_order(osv.osv): _inherit = "sale.order" @@ -82,6 +81,5 @@ class sale_order(osv.osv): }), } -sale_order() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/sale_mrp/sale_mrp.py b/addons/sale_mrp/sale_mrp.py index a5043d3b7d5..77a35972638 100644 --- a/addons/sale_mrp/sale_mrp.py +++ b/addons/sale_mrp/sale_mrp.py @@ -74,6 +74,5 @@ class mrp_production(osv.osv): 'sale_ref': fields.function(_ref_calc, multi='sale_name', type='char', string='Sale Reference', help='Indicate the Customer Reference from sales order.'), } -mrp_production() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale_order_dates/sale_order_dates.py b/addons/sale_order_dates/sale_order_dates.py index d54eca88ca5..64b939de088 100644 --- a/addons/sale_order_dates/sale_order_dates.py +++ b/addons/sale_order_dates/sale_order_dates.py @@ -59,6 +59,5 @@ class sale_order_dates(osv.osv): 'effective_date': fields.function(_get_effective_date, type='date', store=True, string='Effective Date',help="Date on which picking is created."), } -sale_order_dates() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale_stock/company.py b/addons/sale_stock/company.py index eb2d644e57b..5be1dbd524d 100644 --- a/addons/sale_stock/company.py +++ b/addons/sale_stock/company.py @@ -34,6 +34,5 @@ class company(osv.osv): _defaults = { 'security_lead': 0.0, } -company() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale_stock/report/sale_report.py b/addons/sale_stock/report/sale_report.py index 1f1e4a625be..63641020d98 100644 --- a/addons/sale_stock/report/sale_report.py +++ b/addons/sale_stock/report/sale_report.py @@ -91,6 +91,5 @@ class sale_report(osv.osv): s.project_id ) """) -sale_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py index 15cb4d1e7e7..e71fb92f842 100644 --- a/addons/sale_stock/sale_stock.py +++ b/addons/sale_stock/sale_stock.py @@ -33,7 +33,6 @@ class sale_shop(osv.osv): 'warehouse_id': fields.many2one('stock.warehouse', 'Warehouse'), } -sale_shop() class sale_order(osv.osv): _inherit = "sale.order" diff --git a/addons/share/res_users.py b/addons/share/res_users.py index 25fd25c234f..30200133f8e 100644 --- a/addons/share/res_users.py +++ b/addons/share/res_users.py @@ -34,7 +34,6 @@ class res_groups(osv.osv): domain.append(('share', '=', False)) return super(res_groups, self).get_application_groups(cr, uid, domain=domain, context=context) -res_groups() class res_users(osv.osv): _name = 'res.users' @@ -43,6 +42,5 @@ class res_users(osv.osv): 'share': fields.boolean('Share User', readonly=True, help="External user with limited access, created only for the purpose of sharing data.") } -res_users() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py index 813a8a80e88..3a26dcb9e6b 100644 --- a/addons/share/wizard/share_wizard.py +++ b/addons/share/wizard/share_wizard.py @@ -902,7 +902,6 @@ class share_wizard(osv.TransientModel): options = dict(title=opt_title, search=opt_search) return {'value': {'embed_code': self._generate_embedded_code(wizard, options)}} -share_wizard() class share_result_line(osv.osv_memory): _name = 'share.wizard.result.line' diff --git a/addons/stock/partner.py b/addons/stock/partner.py index f5f02b7cd19..b8bad4faf95 100644 --- a/addons/stock/partner.py +++ b/addons/stock/partner.py @@ -41,6 +41,5 @@ class res_partner(osv.osv): help="This stock location will be used, instead of the default one, as the source location for goods you receive from the current partner"), } -res_partner() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/product.py b/addons/stock/product.py index 1d56ce64988..29445f671ee 100644 --- a/addons/stock/product.py +++ b/addons/stock/product.py @@ -479,7 +479,6 @@ class product_product(osv.osv): res['fields']['qty_available']['string'] = _('Produced Qty') return res -product_product() class product_template(osv.osv): _name = 'product.template' @@ -528,7 +527,6 @@ class product_template(osv.osv): _defaults = { 'sale_delay': 7, } -product_template() class product_category(osv.osv): @@ -558,6 +556,5 @@ class product_category(osv.osv): help="When real-time inventory valuation is enabled on a product, this account will hold the current value of the products.",), } -product_category() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/report/report_stock.py b/addons/stock/report/report_stock.py index 0aac0d6599b..d4bbb3ab127 100644 --- a/addons/stock/report/report_stock.py +++ b/addons/stock/report/report_stock.py @@ -77,7 +77,6 @@ class stock_report_prodlots(osv.osv): def unlink(self, cr, uid, ids, context=None): raise osv.except_osv(_('Error!'), _('You cannot delete any record!')) -stock_report_prodlots() class stock_report_tracklots(osv.osv): _name = "stock.report.tracklots" @@ -133,7 +132,6 @@ class stock_report_tracklots(osv.osv): def unlink(self, cr, uid, ids, context=None): raise osv.except_osv(_('Error!'), _('You cannot delete any record!')) -stock_report_tracklots() class report_stock_lines_date(osv.osv): _name = "report.stock.lines.date" @@ -162,6 +160,5 @@ class report_stock_lines_date(osv.osv): group by p.id )""") -report_stock_lines_date() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/report/report_stock_move.py b/addons/stock/report/report_stock_move.py index 7956699c113..b8c22062fa5 100644 --- a/addons/stock/report/report_stock_move.py +++ b/addons/stock/report/report_stock_move.py @@ -142,7 +142,6 @@ class report_stock_move(osv.osv): ) """) -report_stock_move() class report_stock_inventory(osv.osv): @@ -224,7 +223,6 @@ CREATE OR REPLACE view report_stock_inventory AS ( ) ); """) -report_stock_inventory() diff --git a/addons/stock/stock.py b/addons/stock/stock.py index d62ce7c2eaf..764d9de453e 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -49,7 +49,6 @@ class stock_incoterms(osv.osv): 'active': True, } -stock_incoterms() class stock_journal(osv.osv): _name = "stock.journal" @@ -62,7 +61,6 @@ class stock_journal(osv.osv): 'user_id': lambda s, c, u, ctx: u } -stock_journal() #---------------------------------------------------------- # Stock Location @@ -472,7 +470,6 @@ class stock_location(osv.osv): continue return False -stock_location() class stock_tracking(osv.osv): @@ -538,7 +535,6 @@ class stock_tracking(osv.osv): """ return self.pool.get('action.traceability').action_traceability(cr,uid,ids,context) -stock_tracking() #---------------------------------------------------------- # Stock Picking @@ -1491,7 +1487,6 @@ class stock_production_lot(osv.osv): default.update(date=time.strftime('%Y-%m-%d %H:%M:%S'), move_ids=[]) return super(stock_production_lot, self).copy(cr, uid, id, default=default, context=context) -stock_production_lot() class stock_production_lot_revision(osv.osv): _name = 'stock.production.lot.revision' @@ -1512,7 +1507,6 @@ class stock_production_lot_revision(osv.osv): 'date': fields.date.context_today, } -stock_production_lot_revision() # ---------------------------------------------------- # Move @@ -2737,7 +2731,6 @@ class stock_move(osv.osv): return [move.id for move in complete] -stock_move() class stock_inventory(osv.osv): _name = "stock.inventory" @@ -2860,7 +2853,6 @@ class stock_inventory(osv.osv): self.write(cr, uid, [inv.id], {'state': 'cancel'}, context=context) return True -stock_inventory() class stock_inventory_line(osv.osv): _name = "stock.inventory.line" @@ -2900,7 +2892,6 @@ class stock_inventory_line(osv.osv): result = {'product_qty': amount, 'product_uom': uom, 'prod_lot_id': False} return {'value': result} -stock_inventory_line() #---------------------------------------------------------- # Stock Warehouse @@ -2932,7 +2923,6 @@ class stock_warehouse(osv.osv): 'lot_output_id': _default_lot_output_id, } -stock_warehouse() #---------------------------------------------------------- # "Empty" Classes that are used to vary from the original stock.picking (that are dedicated to the internal pickings) diff --git a/addons/stock/wizard/stock_change_standard_price.py b/addons/stock/wizard/stock_change_standard_price.py index 881b5fd9af7..e6614724454 100644 --- a/addons/stock/wizard/stock_change_standard_price.py +++ b/addons/stock/wizard/stock_change_standard_price.py @@ -116,6 +116,5 @@ class change_standard_price(osv.osv_memory): prod_obj.do_change_standard_price(cr, uid, [rec_id], datas, context) return {'type': 'ir.actions.act_window_close'} -change_standard_price() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/wizard/stock_fill_inventory.py b/addons/stock/wizard/stock_fill_inventory.py index 237033bb7b0..e3341bd6a80 100644 --- a/addons/stock/wizard/stock_fill_inventory.py +++ b/addons/stock/wizard/stock_fill_inventory.py @@ -143,6 +143,5 @@ class stock_fill_inventory(osv.osv_memory): return {'type': 'ir.actions.act_window_close'} -stock_fill_inventory() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/wizard/stock_inventory_merge.py b/addons/stock/wizard/stock_inventory_merge.py index 171a193e173..e2b5cff513d 100644 --- a/addons/stock/wizard/stock_inventory_merge.py +++ b/addons/stock/wizard/stock_inventory_merge.py @@ -86,7 +86,6 @@ class stock_inventory_merge(osv.osv_memory): return {'type': 'ir.actions.act_window_close'} -stock_inventory_merge() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/wizard/stock_invoice_onshipping.py b/addons/stock/wizard/stock_invoice_onshipping.py index d742ede366d..c95508cd71b 100644 --- a/addons/stock/wizard/stock_invoice_onshipping.py +++ b/addons/stock/wizard/stock_invoice_onshipping.py @@ -146,6 +146,5 @@ class stock_invoice_onshipping(osv.osv_memory): context=context) return res -stock_invoice_onshipping() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/wizard/stock_location_product.py b/addons/stock/wizard/stock_location_product.py index 59d99167e6a..ef7c9848160 100644 --- a/addons/stock/wizard/stock_location_product.py +++ b/addons/stock/wizard/stock_location_product.py @@ -57,6 +57,5 @@ class stock_location_product(osv.osv_memory): 'domain': [('type', '<>', 'service')], } -stock_location_product() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/wizard/stock_move.py b/addons/stock/wizard/stock_move.py index 09f684aa691..a98d0ebda02 100644 --- a/addons/stock/wizard/stock_move.py +++ b/addons/stock/wizard/stock_move.py @@ -78,7 +78,6 @@ class stock_move_consume(osv.osv_memory): context=context) return {'type': 'ir.actions.act_window_close'} -stock_move_consume() class stock_move_scrap(osv.osv_memory): @@ -139,7 +138,6 @@ class stock_move_scrap(osv.osv_memory): context=context) return {'type': 'ir.actions.act_window_close'} -stock_move_scrap() class split_in_production_lot(osv.osv_memory): @@ -255,7 +253,6 @@ class split_in_production_lot(osv.osv_memory): return new_move -split_in_production_lot() class stock_move_split_lines_exist(osv.osv_memory): _name = "stock.move.split.lines" diff --git a/addons/stock/wizard/stock_return_picking.py b/addons/stock/wizard/stock_return_picking.py index e9bc0f7626f..c51e1415249 100644 --- a/addons/stock/wizard/stock_return_picking.py +++ b/addons/stock/wizard/stock_return_picking.py @@ -38,7 +38,6 @@ class stock_return_picking_memory(osv.osv_memory): } -stock_return_picking_memory() class stock_return_picking(osv.osv_memory): @@ -225,6 +224,5 @@ class stock_return_picking(osv.osv_memory): 'context':context, } -stock_return_picking() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/wizard/stock_splitinto.py b/addons/stock/wizard/stock_splitinto.py index 3485a6e8264..76a80595be6 100644 --- a/addons/stock/wizard/stock_splitinto.py +++ b/addons/stock/wizard/stock_splitinto.py @@ -80,7 +80,6 @@ class stock_split_into(osv.osv_memory): return {'type': 'ir.actions.act_window_close'} -stock_split_into() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/wizard/stock_traceability.py b/addons/stock/wizard/stock_traceability.py index 8d5fd1ed10d..c13fc1cf7a6 100644 --- a/addons/stock/wizard/stock_traceability.py +++ b/addons/stock/wizard/stock_traceability.py @@ -62,7 +62,6 @@ class action_traceability(osv.osv_memory): } return value -action_traceability() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock_invoice_directly/wizard/stock_invoice.py b/addons/stock_invoice_directly/wizard/stock_invoice.py index 5de6490dc0f..ba41de626da 100644 --- a/addons/stock_invoice_directly/wizard/stock_invoice.py +++ b/addons/stock_invoice_directly/wizard/stock_invoice.py @@ -45,6 +45,5 @@ class invoice_directly(osv.osv_memory): } return {'type': 'ir.actions.act_window_close'} -invoice_directly() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock_location/stock_location.py b/addons/stock_location/stock_location.py index 1258ddb529f..e22ccf80f8f 100644 --- a/addons/stock_location/stock_location.py +++ b/addons/stock_location/stock_location.py @@ -54,7 +54,6 @@ class stock_location_path(osv.osv): 'invoice_state': 'none', 'picking_type': 'internal', } -stock_location_path() class product_pulled_flow(osv.osv): _name = 'product.pulled.flow' @@ -85,7 +84,6 @@ class product_pulled_flow(osv.osv): 'invoice_state': 'none', 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'product.pulled.flow', context=c), } -product_pulled_flow() class product_product(osv.osv): _inherit = 'product.product' @@ -96,7 +94,6 @@ class product_product(osv.osv): help="These rules set the right path of the product in the "\ "whole location tree.") } -product_product() class stock_move(osv.osv): _inherit = 'stock.move' @@ -114,7 +111,6 @@ class stock_move(osv.osv): res = super(stock_move, self)._prepare_chained_picking(cr, uid, picking_name, picking, picking_type, moves_todo, context=context) res.update({'invoice_state': moves_todo[0][1][6] or 'none'}) return res -stock_move() class stock_location(osv.osv): _inherit = 'stock.location' @@ -124,5 +120,4 @@ class stock_location(osv.osv): if path.location_from_id.id == location.id: return path.location_dest_id, path.auto, path.delay, path.journal_id and path.journal_id.id or False, path.company_id and path.company_id.id or False, path.picking_type, path.invoice_state return super(stock_location, self).chained_location_get(cr, uid, location, partner, product, context) -stock_location() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock_no_autopicking/stock_no_autopicking.py b/addons/stock_no_autopicking/stock_no_autopicking.py index 904854f3533..dd8fb31f59f 100644 --- a/addons/stock_no_autopicking/stock_no_autopicking.py +++ b/addons/stock_no_autopicking/stock_no_autopicking.py @@ -29,12 +29,10 @@ class product(osv.osv): _defaults = { 'auto_pick': True } -product() class mrp_production(osv.osv): _inherit = "mrp.production" def _get_auto_picking(self, cr, uid, production): return production.product_id.auto_pick -mrp_production() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/subscription/subscription.py b/addons/subscription/subscription.py index 356ab78aadb..b7ae720c187 100644 --- a/addons/subscription/subscription.py +++ b/addons/subscription/subscription.py @@ -38,7 +38,6 @@ class subscription_document(osv.osv): _defaults = { 'active' : lambda *a: True, } -subscription_document() class subscription_document_fields(osv.osv): _name = "subscription.document.fields" @@ -50,7 +49,6 @@ class subscription_document_fields(osv.osv): 'document_id': fields.many2one('subscription.document', 'Subscription Document', ondelete='cascade'), } _defaults = {} -subscription_document_fields() def _get_document_types(self, cr, uid, context=None): cr.execute('select m.model, s.name from subscription_document s, ir_model m WHERE s.model = m.id order by s.name') @@ -157,7 +155,6 @@ class subscription_subscription(osv.osv): def set_draft(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'state':'draft'}) return True -subscription_subscription() class subscription_subscription_history(osv.osv): _name = "subscription.subscription.history" @@ -168,7 +165,6 @@ class subscription_subscription_history(osv.osv): 'subscription_id': fields.many2one('subscription.subscription', 'Subscription', ondelete='cascade'), 'document_id': fields.reference('Source Document', required=True, selection=_get_document_types, size=128), } -subscription_subscription_history() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/survey/survey.py b/addons/survey/survey.py index d0c59159a3d..ad96145741b 100644 --- a/addons/survey/survey.py +++ b/addons/survey/survey.py @@ -36,7 +36,6 @@ class survey_type(osv.osv): 'name': fields.char("Name", size=128, required=1, translate=True), 'code': fields.char("Code", size=64), } -survey_type() class survey(osv.osv): _name = 'survey' @@ -196,7 +195,6 @@ class survey(osv.osv): 'context': context } -survey() class survey_history(osv.osv): _name = 'survey.history' @@ -210,7 +208,6 @@ class survey_history(osv.osv): _defaults = { 'date': lambda * a: datetime.datetime.now() } -survey_history() class survey_page(osv.osv): _name = 'survey.page' @@ -260,7 +257,6 @@ class survey_page(osv.osv): vals.update({'title':title}) return super(survey_page, self).copy(cr, uid, ids, vals, context=context) -survey_page() class survey_question(osv.osv): _name = 'survey.question' @@ -561,7 +557,6 @@ class survey_question(osv.osv): data['page_id']= context.get('page_id', False) return data -survey_question() class survey_question_column_heading(osv.osv): @@ -594,7 +589,6 @@ class survey_question_column_heading(osv.osv): 'in_visible_rating_weight': _get_in_visible_rating_weight, 'in_visible_menu_choice': _get_in_visible_menu_choice, } -survey_question_column_heading() class survey_answer(osv.osv): _name = 'survey.answer' @@ -651,7 +645,6 @@ class survey_answer(osv.osv): data = super(survey_answer, self).default_get(cr, uid, fields, context) return data -survey_answer() class survey_response(osv.osv): _name = "survey.response" @@ -684,7 +677,6 @@ class survey_response(osv.osv): def copy(self, cr, uid, id, default=None, context=None): raise osv.except_osv(_('Warning!'),_('You cannot duplicate the resource!')) -survey_response() class survey_response_line(osv.osv): _name = 'survey.response.line' @@ -708,7 +700,6 @@ class survey_response_line(osv.osv): 'state' : lambda * a: "draft", } -survey_response_line() class survey_tbl_column_heading(osv.osv): _name = 'survey.tbl.column.heading' @@ -720,7 +711,6 @@ class survey_tbl_column_heading(osv.osv): 'response_table_id': fields.many2one('survey.response.line', 'Answer', ondelete='cascade'), } -survey_tbl_column_heading() class survey_response_answer(osv.osv): _name = 'survey.response.answer' @@ -736,7 +726,6 @@ class survey_response_answer(osv.osv): 'comment_field': fields.char('Comment', size = 255) } -survey_response_answer() class res_users(osv.osv): _inherit = "res.users" @@ -745,7 +734,6 @@ class res_users(osv.osv): 'survey_id': fields.many2many('survey', 'survey_users_rel', 'uid', 'sid', 'Groups'), } -res_users() class survey_request(osv.osv): _name = "survey.request" @@ -786,6 +774,5 @@ class survey_request(osv.osv): return {'value': {'email': user.email}} return {} -survey_request() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/survey/wizard/survey_answer.py b/addons/survey/wizard/survey_answer.py index a108388ac8e..181d6159109 100644 --- a/addons/survey/wizard/survey_answer.py +++ b/addons/survey/wizard/survey_answer.py @@ -1253,6 +1253,5 @@ class survey_question_wiz(osv.osv_memory): 'context': context } -survey_question_wiz() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/survey/wizard/survey_browse_answer.py b/addons/survey/wizard/survey_browse_answer.py index a37a4e4f7ca..1b461761bb5 100644 --- a/addons/survey/wizard/survey_browse_answer.py +++ b/addons/survey/wizard/survey_browse_answer.py @@ -55,6 +55,5 @@ class survey_browse_answer(osv.osv_memory): 'context' : context } -survey_browse_answer() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/survey/wizard/survey_print.py b/addons/survey/wizard/survey_print.py index 9f0b21affa6..f0e39f99cb9 100644 --- a/addons/survey/wizard/survey_print.py +++ b/addons/survey/wizard/survey_print.py @@ -63,6 +63,5 @@ class survey_print(osv.osv_memory): 'report_name': 'survey.form', 'datas': datas, } -survey_print() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/survey/wizard/survey_print_answer.py b/addons/survey/wizard/survey_print_answer.py index 0cadd6bf832..417d1bb732f 100644 --- a/addons/survey/wizard/survey_print_answer.py +++ b/addons/survey/wizard/survey_print_answer.py @@ -68,6 +68,5 @@ class survey_print_answer(osv.osv_memory): 'datas': datas, } -survey_print_answer() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/survey/wizard/survey_print_statistics.py b/addons/survey/wizard/survey_print_statistics.py index f2e25eb8d53..d005dbee31a 100644 --- a/addons/survey/wizard/survey_print_statistics.py +++ b/addons/survey/wizard/survey_print_statistics.py @@ -45,6 +45,5 @@ class survey_print_statistics(osv.osv_memory): 'datas': datas, } -survey_print_statistics() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/survey/wizard/survey_send_invitation.py b/addons/survey/wizard/survey_send_invitation.py index 5d96d0246f9..a188ab7ce83 100644 --- a/addons/survey/wizard/survey_send_invitation.py +++ b/addons/survey/wizard/survey_send_invitation.py @@ -220,7 +220,6 @@ Thanks,''') % (name, self.pool.get('ir.config_parameter').get_param(cr, uid, 'we 'target': 'new', 'context': context } -survey_send_invitation() class survey_send_invitation_log(osv.osv_memory): _name = 'survey.send.invitation.log' @@ -235,6 +234,5 @@ class survey_send_invitation_log(osv.osv_memory): data['note'] = context.get('note', '') return data -survey_send_invitation_log() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/warning/warning.py b/addons/warning/warning.py index 4bdada396bc..e9e9161bacb 100644 --- a/addons/warning/warning.py +++ b/addons/warning/warning.py @@ -50,7 +50,6 @@ class res_partner(osv.osv): 'invoice_warn' : 'no-message', } -res_partner() class sale_order(osv.osv): @@ -79,7 +78,6 @@ class sale_order(osv.osv): warning['message'] = message and message + ' ' + result['warning']['message'] or result['warning']['message'] return {'value': result.get('value',{}), 'warning':warning} -sale_order() class purchase_order(osv.osv): @@ -108,7 +106,6 @@ class purchase_order(osv.osv): return {'value': result.get('value',{}), 'warning':warning} -purchase_order() class account_invoice(osv.osv): @@ -145,7 +142,6 @@ class account_invoice(osv.osv): return {'value': result.get('value',{}), 'warning':warning} -account_invoice() class stock_picking(osv.osv): _inherit = 'stock.picking' @@ -173,7 +169,6 @@ class stock_picking(osv.osv): return {'value': result.get('value',{}), 'warning':warning} -stock_picking() # FIXME:(class stock_picking_in and stock_picking_out) this is a temporary workaround because of a framework bug (ref: lp:996816). # It should be removed as soon as the bug is fixed @@ -243,7 +238,6 @@ class product_product(osv.osv): 'purchase_line_warn' : 'no-message', } -product_product() class sale_order_line(osv.osv): _inherit = 'sale.order.line' @@ -279,7 +273,6 @@ class sale_order_line(osv.osv): return {'value': result.get('value',{}), 'warning':warning} -sale_order_line() class purchase_order_line(osv.osv): _inherit = 'purchase.order.line' @@ -311,7 +304,6 @@ class purchase_order_line(osv.osv): return {'value': result.get('value',{}), 'warning':warning} -purchase_order_line() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From ed46400a55401257aca6cbb6bd1a97f3b4d632a6 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Mon, 15 Apr 2013 12:30:41 +0200 Subject: [PATCH 130/160] [IMP] view_form: widget radio: clean code bzr revid: chm@openerp.com-20130415103041-8xogdacjx43v4cgk --- addons/web/static/src/css/base.css | 4 ---- addons/web/static/src/css/base.sass | 6 ------ addons/web/static/src/js/view_form.js | 28 +++++++++++++++------------ addons/web/static/src/xml/base.xml | 14 +++++++------- 4 files changed, 23 insertions(+), 29 deletions(-) diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index d84b19a867e..52107bc84d7 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -2315,10 +2315,6 @@ .openerp .oe_form_field_radio.oe_horizontal { white-space: nowrap; } -.openerp .oe_form_field_radio:not(.oe_readonly) .oe_radio_read_only, -.openerp .oe_form_field_radio.oe_readonly .oe_radio_edit_only { - display: none; -} .openerp .oe_form_field_radio.oe_form_required .oe_radio_input { border: 1px solid transparent; display: inline-block; diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index df157249d83..072fda44357 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -490,12 +490,6 @@ $sheet-padding: 16px &.oe_vertical label margin-left: 4px - &:not(.oe_readonly) - .oe_radio_read_only - display: none - &.oe_readonly - .oe_radio_read_only - display: none &.oe_form_required .oe_radio_input border: 2px solid transparent diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 2ffd80d5962..53a7425c036 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2815,8 +2815,6 @@ instance.web.form.FieldRadio = instance.web.form.AbstractField.extend(instance.w * - "no_radiolabel" don't display text values */ this._super(field_manager, node); - this.horizontal = +this.options.horizontal || false; - this.no_radiolabel = +this.options.no_radiolabel || false; this.selection = _.clone(this.field.selection) || []; this.domain = false; }, @@ -2828,7 +2826,7 @@ instance.web.form.FieldRadio = instance.web.form.AbstractField.extend(instance.w }, click_change_value: function (event) { var val = $(event.target).val(); - val = isNaN(+val) ? val : +val; + val = this.field.type == "selection" ? val : +val; if (val == this.get_value()) { this.set_value(false); } else { @@ -2856,6 +2854,9 @@ instance.web.form.FieldRadio = instance.web.form.AbstractField.extend(instance.w def.resolve(); }); }); + } else { + selection = self.selection; + def.resolve(); } } else if (self.field.type == "selection") { @@ -2865,17 +2866,19 @@ instance.web.form.FieldRadio = instance.web.form.AbstractField.extend(instance.w return def.then(function () { if (! _.isEqual(selection, self.selection)) { self.selection = _.clone(selection); - self.$el.html($(QWeb.render("FieldRadio", {'widget': self})).html()); + self.renderElement(); self.render_value(); } }); }, set_value: function (value_) { - if (this.field.type == "selection") { - value_ = _.find(this.field.selection, function (sel) { return sel[0] == value_}); - } - else if (!this.selection.length) { - this.selection = [value_]; + if (value_) { + if (this.field.type == "selection") { + value_ = _.find(this.field.selection, function (sel) { return sel[0] == value_}); + } + else if (!this.selection.length) { + this.selection = [value_]; + } } this._super(value_); }, @@ -2884,11 +2887,12 @@ instance.web.form.FieldRadio = instance.web.form.AbstractField.extend(instance.w return value instanceof Array ? value[0] : value; }, render_value: function () { + var self = this; this.$el.toggleClass("oe_readonly", this.get('effective_readonly')); - this.$("input[checked]").attr("checked", false); + this.$("input:checked").prop("checked", false); if (this.get_value()) { - this.$("input[value='" + this.get_value() + "']").attr("checked", true); - this.$(".oe_radio_read_only .oe_radio_header").text(this.get('value') ? this.get('value')[1] : ""); + this.$("input").filter(function () {return this.value == self.get_value()}).prop("checked", true); + this.$(".oe_radio_readonly").text(this.get('value') ? this.get('value')[1] : ""); } } }); diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index d501e76f875..943326f5011 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -1112,11 +1112,11 @@ - - - + + + - + @@ -1128,15 +1128,15 @@

          - +
          - +
          - +
          From 5fd1e56566d5ebc1157fa1832be1ffbd4efd1b2c Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 15 Apr 2013 12:57:44 +0200 Subject: [PATCH 131/160] [FIX] incorrect view in super() call super() finds the MRO parent of the provided class to resume the execution chain from there, so the class being defined should be provided. Here view called super(osv.osv, self).create so if osv.osv (Model) had a create() defined (which luckily it does not) it would've been skipped. bzr revid: xmo@openerp.com-20130415105744-cfx47t01oc7loyes --- openerp/addons/base/ir/ir_ui_view.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py index 09f73662070..46e08cc6f3a 100644 --- a/openerp/addons/base/ir/ir_ui_view.py +++ b/openerp/addons/base/ir/ir_ui_view.py @@ -100,7 +100,7 @@ class view(osv.osv): else: inferred_type = etree.fromstring(values['arch'].encode('utf8')).tag values['name'] = "%s %s" % (values['model'], inferred_type) - return super(osv.osv, self).create(cr, uid, values, context) + return super(view, self).create(cr, uid, values, context) def _relaxng(self): if not self._relaxng_validator: From e07cf3891093fe0f737b1912a6659f7aca8f5c05 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Mon, 15 Apr 2013 13:45:45 +0200 Subject: [PATCH 132/160] [FIX] web_kanban: hide the counter on the top of column to display option drop down when the mouse is hover. bzr revid: chm@openerp.com-20130415114545-e557dsr4y0qkh8ff --- addons/web_kanban/static/src/css/kanban.css | 3 +++ addons/web_kanban/static/src/css/kanban.sass | 2 ++ 2 files changed, 5 insertions(+) diff --git a/addons/web_kanban/static/src/css/kanban.css b/addons/web_kanban/static/src/css/kanban.css index a8ed25694ba..cb88255c18c 100644 --- a/addons/web_kanban/static/src/css/kanban.css +++ b/addons/web_kanban/static/src/css/kanban.css @@ -16,6 +16,9 @@ top: 8px; font-weight: bold; } +.openerp .oe_kanban_view .oe_kanban_header:hover .oe_kanban_group_length { + display: none; +} .openerp .oe_kanban_view .ui-sortable-placeholder { border: 1px solid rgba(0, 0, 0, 0.1); visibility: visible !important; diff --git a/addons/web_kanban/static/src/css/kanban.sass b/addons/web_kanban/static/src/css/kanban.sass index 2182fb693ea..7c15db32b0e 100644 --- a/addons/web_kanban/static/src/css/kanban.sass +++ b/addons/web_kanban/static/src/css/kanban.sass @@ -61,6 +61,8 @@ position: relative top: +8px font-weight: bold + .oe_kanban_header:hover .oe_kanban_group_length + display: none .ui-sortable-placeholder border: 1px solid rgba(0,0,0,0.1) visibility: visible !important From e38a28a2b7ea4cd4cd1aa2e8e9ae8cb65581bbf0 Mon Sep 17 00:00:00 2001 From: Cedric Snauwaert Date: Mon, 15 Apr 2013 16:15:07 +0200 Subject: [PATCH 133/160] [FIX]crm_lead, crm_meeting: when creating a meeting from an opportunity, add a message in open chatter bzr revid: csn@openerp.com-20130415141507-m5arvgjcaf587a09 --- addons/crm/crm_lead.py | 8 ++++++++ addons/crm/crm_meeting.py | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index 7dd4d0e1064..9af36b4b18b 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -1045,6 +1045,14 @@ class crm_lead(base_stage, format_address, osv.osv): message = _("%s a call for %s.%s") % (prefix, phonecall.date, suffix) return self.message_post(cr, uid, ids, body=message, context=context) + def log_meeting(self, cr, uid, ids, meeting_subject, meeting_date, duration, context=None): + if not duration: + duration = 'unknow' + else: + duration = str(duration)+'h' + message = _("Meeting: '%s' has been scheduled at '%s'
          Duration: %s" % (meeting_subject, meeting_date, duration)) + return self.message_post(cr, uid, ids, body=message, context=context) + def onchange_state(self, cr, uid, ids, state_id, context=None): if state_id: country_id=self.pool.get('res.country.state').browse(cr, uid, state_id, context).country_id.id diff --git a/addons/crm/crm_meeting.py b/addons/crm/crm_meeting.py index 14b69ed0e11..eca77cd456e 100644 --- a/addons/crm/crm_meeting.py +++ b/addons/crm/crm_meeting.py @@ -34,6 +34,13 @@ class crm_meeting(osv.Model): 'opportunity_id': fields.many2one ('crm.lead', 'Opportunity', domain="[('type', '=', 'opportunity')]"), } + def create(self, cr, uid, vals, context=None): + res = super(crm_meeting,self).create(cr, uid, vals, context=context) + obj = self.browse(cr, uid, res, context=context) + if obj.opportunity_id: + self.pool.get('crm.lead').log_meeting(cr, uid, obj.opportunity_id.id, obj.name, obj.date, obj.duration, context=context) + return res + class calendar_attendee(osv.osv): """ Calendar Attendee """ From ef062c086b6bc1824469706d3d8784c105eb2ace Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Mon, 15 Apr 2013 16:47:08 +0200 Subject: [PATCH 134/160] [FIX] typo in method name in apps.js bzr revid: chs@openerp.com-20130415144708-ezj5xeuo3yylb5em --- openerp/addons/base/static/src/js/apps.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/static/src/js/apps.js b/openerp/addons/base/static/src/js/apps.js index 4ac01006256..eaaca6b13c3 100644 --- a/openerp/addons/base/static/src/js/apps.js +++ b/openerp/addons/base/static/src/js/apps.js @@ -44,7 +44,7 @@ openerp.base = function(instance) { } else { sessionStorage.removeItem('apps.login'); sessionStorage.removeItem('apps.access_token'); - client.bind_crendentials(client.dbname, 'anonymous', 'anonymous'); + client.bind_credentials(client.dbname, 'anonymous', 'anonymous'); client.authenticate().then( function() { /* done */ d.resolve(client); From 0110522b68191ed7ab5c44e2714e3aac011d145e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 15 Apr 2013 17:01:07 +0200 Subject: [PATCH 135/160] [FIX] project_issue, project_phase: fixed access rights on anonymous. bzr revid: tde@openerp.com-20130415150107-0vny927te0m1ylsi --- .../security/ir.model.access.csv | 1 + .../security/portal_security.xml | 7 ++++++ .../tests/test_access_rights.py | 7 +++--- .../security/ir.model.access.csv | 1 + .../security/portal_security.xml | 24 +++++++++++++------ 5 files changed, 30 insertions(+), 10 deletions(-) diff --git a/addons/portal_project_issue/security/ir.model.access.csv b/addons/portal_project_issue/security/ir.model.access.csv index 80a38366b51..7355f7a9b1d 100644 --- a/addons/portal_project_issue/security/ir.model.access.csv +++ b/addons/portal_project_issue/security/ir.model.access.csv @@ -1,3 +1,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_issues,project_issue,project_issue.model_project_issue,portal.group_portal,1,0,0,0 access_case_section,crm_case_section,crm.model_crm_case_section,portal.group_portal,1,0,0,0 +access_issues_anonymous,project_issue,project_issue.model_project_issue,portal.group_anonymous,1,0,0,0 \ No newline at end of file diff --git a/addons/portal_project_issue/security/portal_security.xml b/addons/portal_project_issue/security/portal_security.xml index 472c82e4705..f6cd8d89be7 100644 --- a/addons/portal_project_issue/security/portal_security.xml +++ b/addons/portal_project_issue/security/portal_security.xml @@ -28,5 +28,12 @@ ] + + Project/Issue: anonymous users: public only + + [('project_id.privacy_visibility', '=', 'public')] + + + diff --git a/addons/portal_project_issue/tests/test_access_rights.py b/addons/portal_project_issue/tests/test_access_rights.py index ef0cc62d4b8..28d337a4965 100644 --- a/addons/portal_project_issue/tests/test_access_rights.py +++ b/addons/portal_project_issue/tests/test_access_rights.py @@ -96,9 +96,10 @@ class TestPortalIssueProject(TestPortalProject): cr, self.user_chell_id, issue_ids, {'description': 'TestDescription'}) # Do: Donovan reads project -> ok (anonymous ok public) - # Test: no project issue visible (no read on project.issue) - self.assertRaises(except_orm, self.project_issue.search, - cr, self.user_donovan_id, [('project_id', '=', pigs_id)]) + # Test: all project issues visible + issue_ids = self.project_issue.search(cr, self.user_donovan_id, [('project_id', '=', pigs_id)]) + self.assertEqual(set(issue_ids), test_issue_ids, + 'access rights: project user cannot see all issues of a public project') # ---------------------------------------- # CASE2: portal project diff --git a/addons/portal_project_long_term/security/ir.model.access.csv b/addons/portal_project_long_term/security/ir.model.access.csv index 738c264a71c..efbc4fc2418 100644 --- a/addons/portal_project_long_term/security/ir.model.access.csv +++ b/addons/portal_project_long_term/security/ir.model.access.csv @@ -1,2 +1,3 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_issues,project_phase,project_long_term.model_project_phase,portal.group_portal,1,0,0,0 +access_issues_anonymous,project_phase_anonymous,project_long_term.model_project_phase,portal.group_anonymous,1,0,0,0 diff --git a/addons/portal_project_long_term/security/portal_security.xml b/addons/portal_project_long_term/security/portal_security.xml index b46d277e4ee..eab70ebe734 100644 --- a/addons/portal_project_long_term/security/portal_security.xml +++ b/addons/portal_project_long_term/security/portal_security.xml @@ -3,14 +3,24 @@ - Portal Personal Long term project - - ['|',('project_id.message_follower_ids','in', [user.partner_id.id]),('task_ids.message_follower_ids','in', [user.partner_id.id])] + Project/Phase: portal users: public or portal and following + + ['|', + ('project_id.privacy_visibility', '=', 'public'), + '&', + ('project_id.privacy_visibility', 'in', ['portal', 'followers']), + '|', + ('message_follower_ids','in', [user.partner_id.id]), + ('user_id', '=', user.id), + ] - - - - + + + + Project/Phase: anonymous users: public only + + [('project_id.privacy_visibility', '=', 'public')] + From 8efd16f25a07f142dc78e509cd3172124cd15591 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Mon, 15 Apr 2013 19:17:32 +0200 Subject: [PATCH 136/160] [FIX] res.partner, orm._check_recursion: prevent recursive partner structures + fix false positives in check_recursion() - res.partner must prevent creating loops in partner hierarchies, and this can be done easily with an extra _constraint using the ORM's builtin _check_recursion - _check_recursion's implementation incorrectly assumed that the provided 'ids' were unrelated (not part of a common hierarchy). - add tests for _check_recursion via extra tests on res.partner structure (explains why both patches are in the same commit) bzr revid: odo@openerp.com-20130415171732-aj3j2e2mycvzf4kp --- openerp/addons/base/res/res_partner.py | 4 +++ openerp/addons/base/tests/test_base.py | 39 +++++++++++++++++++++++++- openerp/osv/orm.py | 22 +++++++-------- 3 files changed, 52 insertions(+), 13 deletions(-) diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index 72c221c5534..be7434ff3d8 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -307,6 +307,10 @@ class res_partner(osv.osv, format_address): 'image': False, } + _constraints = [ + (osv.osv._check_recursion, 'You cannot create recursive Partner hierarchies.', ['parent_id']), + ] + def copy(self, cr, uid, id, default=None, context=None): if default is None: default = {} diff --git a/openerp/addons/base/tests/test_base.py b/openerp/addons/base/tests/test_base.py index 285af8fbf6e..a0c0b2eadb1 100644 --- a/openerp/addons/base/tests/test_base.py +++ b/openerp/addons/base/tests/test_base.py @@ -1,6 +1,7 @@ import unittest2 import openerp.tests.common as common +from openerp.osv.orm import except_orm class test_base(common.TransactionCase): @@ -39,5 +40,41 @@ class test_base(common.TransactionCase): self.assertTrue(new_id2 > new_id, 'find_or_create failed - should have created new one again') +class test_partner_recursion(common.TransactionCase): + + def setUp(self): + super(test_partner_recursion,self).setUp() + self.res_partner = self.registry('res.partner') + cr, uid = self.cr, self.uid + self.p1 = self.res_partner.name_create(cr, uid, 'Elmtree')[0] + self.p2 = self.res_partner.create(cr, uid, {'name': 'Elmtree Child 1', 'parent_id': self.p1}) + self.p3 = self.res_partner.create(cr, uid, {'name': 'Elmtree Grand-Child 1.1', 'parent_id': self.p2}) + + # split 101, 102, 103 tests to force SQL rollback between them + + def test_101_res_partner_recursion(self): + cr, uid, p1, p3 = self.cr, self.uid, self.p1, self.p3 + self.assertRaises(except_orm, self.res_partner.write, cr, uid, [p1], {'parent_id': p3}) + + def test_102_res_partner_recursion(self): + cr, uid, p2, p3 = self.cr, self.uid, self.p2, self.p3 + self.assertRaises(except_orm, self.res_partner.write, cr, uid, [p2], {'parent_id': p3}) + + def test_103_res_partner_recursion(self): + cr, uid, p3 = self.cr, self.uid, self.p3 + self.assertRaises(except_orm, self.res_partner.write, cr, uid, [p3], {'parent_id': p3}) + + def test_104_res_partner_recursion_indirect_cycle(self): + """ Indirect hacky write to create cycle in children """ + cr, uid, p2, p3 = self.cr, self.uid, self.p2, self.p3 + p3b = self.res_partner.create(cr, uid, {'name': 'Elmtree Grand-Child 1.2', 'parent_id': self.p2}) + self.assertRaises(except_orm, self.res_partner.write, cr, uid, [p2], + {'child_ids': [(1, p3, {'parent_id': p3b}), (1, p3b, {'parent_id': p3})]}) + + def test_110_res_partner_recursion_multi_update(self): + """ multi-write on several partners in same hierarchy must not trigger a false cycle detection """ + cr, uid, p1, p2, p3 = self.cr, self.uid, self.p1, self.p2, self.p3 + self.assertTrue(self.res_partner.write(cr, uid, [p1,p2,p3], {'phone': '123456'})) + if __name__ == '__main__': - unittest2.main() \ No newline at end of file + unittest2.main() diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 63892297578..1296472fd95 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -5063,20 +5063,18 @@ class BaseModel(object): :param parent: optional parent field name (default: ``self._parent_name = parent_id``) :return: **True** if the operation can proceed safely, or **False** if an infinite loop is detected. """ - if not parent: parent = self._parent_name - ids_parent = ids[:] - query = 'SELECT distinct "%s" FROM "%s" WHERE id IN %%s' % (parent, self._table) - while ids_parent: - ids_parent2 = [] - for i in range(0, len(ids), cr.IN_MAX): - sub_ids_parent = ids_parent[i:i+cr.IN_MAX] - cr.execute(query, (tuple(sub_ids_parent),)) - ids_parent2.extend(filter(None, map(lambda x: x[0], cr.fetchall()))) - ids_parent = ids_parent2 - for i in ids_parent: - if i in ids: + + # must ignore 'active' flag, ir.rules, etc. => direct SQL query + query = 'SELECT "%s" FROM "%s" WHERE id = %%s' % (parent, self._table) + for id in ids: + current_id = id + while current_id is not None: + cr.execute(query, (current_id,)) + result = cr.fetchone() + current_id = result[0] if result else None + if current_id == id: return False return True From 05d0c3cb48cb7c23c1eca1ea62a70097f1b6fddb Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Mon, 15 Apr 2013 19:39:01 +0200 Subject: [PATCH 137/160] [FIX] auth_signup: upon signup of new user, the company_id[s] of the corresponding partner must be used The default was to use those of the template user, which may not be correct in multi-company cases. bzr revid: odo@openerp.com-20130415173901-sevyy27244m6iks0 --- addons/auth_signup/res_users.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/auth_signup/res_users.py b/addons/auth_signup/res_users.py index 8d717ece113..4788092e965 100644 --- a/addons/auth_signup/res_users.py +++ b/addons/auth_signup/res_users.py @@ -200,6 +200,9 @@ class res_users(osv.Model): 'partner_id': partner.id, 'email': values.get('email') or values.get('login'), }) + if partner.company_id: + values['company_id'] = partner.company_id.id + values['company_ids'] = [(6,0,[partner.company_id.id])] self._signup_create_user(cr, uid, values, context=context) else: # no token, sign up an external user From 0cb5a703409a94848e3508042eda50d054ecdab4 Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Tue, 16 Apr 2013 04:37:49 +0000 Subject: [PATCH 138/160] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20130416043749-u2l62c4syfay8q48 --- addons/account/i18n/nl_BE.po | 264 ++- addons/account_analytic_default/i18n/nl_BE.po | 15 +- addons/account_asset/i18n/nl_BE.po | 19 +- addons/account_followup/i18n/nl_BE.po | 508 +++-- .../i18n/nl_BE.po | 72 + addons/auth_crypt/i18n/nl_BE.po | 44 +- addons/auth_oauth_signup/i18n/nl_BE.po | 23 + addons/auth_signup/i18n/zh_CN.po | 10 +- addons/base_crypt/i18n/nl_BE.po | 10 +- addons/base_status/i18n/nl_BE.po | 80 + addons/base_vat/i18n/nl_BE.po | 10 +- addons/claim_from_delivery/i18n/nl_BE.po | 12 +- addons/contacts/i18n/nl_BE.po | 46 + addons/edi/i18n/nl_BE.po | 18 +- addons/fleet/i18n/nl_BE.po | 1912 +++++++++++++++++ 15 files changed, 2809 insertions(+), 234 deletions(-) create mode 100644 addons/analytic_contract_hr_expense/i18n/nl_BE.po create mode 100644 addons/auth_oauth_signup/i18n/nl_BE.po create mode 100644 addons/base_status/i18n/nl_BE.po create mode 100644 addons/contacts/i18n/nl_BE.po create mode 100644 addons/fleet/i18n/nl_BE.po diff --git a/addons/account/i18n/nl_BE.po b/addons/account/i18n/nl_BE.po index 172dea460df..a3244945957 100644 --- a/addons/account/i18n/nl_BE.po +++ b/addons/account/i18n/nl_BE.po @@ -1,20 +1,20 @@ # Translation of OpenERP Server. # This file contains the translation of the following modules: # * account -# Els Van Vossel , 2012. +# Els Van Vossel , 2012, 2013. msgid "" msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2012-12-19 18:03+0000\n" +"PO-Revision-Date: 2013-04-15 23:02+0000\n" "Last-Translator: Els Van Vossel (Agaplan) \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: 2013-03-16 05:20+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" +"X-Generator: Launchpad (build 16564)\n" "Language: nl\n" #. module: account @@ -258,7 +258,7 @@ msgstr "Belgische rapporten" #. module: account #: model:mail.message.subtype,name:account.mt_invoice_validated msgid "Validated" -msgstr "" +msgstr "Goedgekeurd" #. module: account #: model:account.account.type,name:account.account_type_income_view1 @@ -473,14 +473,14 @@ msgstr "" #. module: account #: help:account.bank.statement.line,name:0 msgid "Originator to Beneficiary Information" -msgstr "" +msgstr "Informatie Afzender naar Begunstigde" #. module: account #. openerp-web #: code:addons/account/static/src/xml/account_move_line_quickadd.xml:8 #, python-format msgid "Period :" -msgstr "" +msgstr "Periode:" #. module: account #: field:account.account.template,chart_template_id:0 @@ -494,6 +494,7 @@ msgstr "Boekhoudplansjabloon" #: selection:account.invoice.refund,filter_refund:0 msgid "Modify: create refund, reconcile and create a new draft invoice" msgstr "" +"Wijzigen: factuur crediteren, afpunten en een nieuwe conceptfactuur maken" #. module: account #: help:account.config.settings,tax_calculation_rounding_method:0 @@ -803,7 +804,7 @@ msgstr "Stel de bankrekeningen van uw bedrijf in" #. module: account #: view:account.invoice.refund:0 msgid "Create Refund" -msgstr "" +msgstr "Creditnota maken" #. module: account #: constraint:account.move.line:0 @@ -833,7 +834,7 @@ msgstr "Bent u zeker dat u de boeking wilt uitvoeren?" #: code:addons/account/account_invoice.py:1330 #, python-format msgid "Invoice partially paid: %s%s of %s%s (%s%s remaining)." -msgstr "" +msgstr "Factuur is gedeeltelijk betaald: %s%s of %s%s (%s%s blijft open)" #. module: account #: view:account.invoice:0 @@ -1010,6 +1011,8 @@ msgid "" " opening/closing fiscal " "year process." msgstr "" +"U kunt geen afpunting ongedaan maken als deze afpunting voortkomt uit een " +"heropening." #. module: account #: model:ir.actions.act_window,name:account.action_subscription_form_new @@ -1052,7 +1055,7 @@ msgstr "Aankoopjournaal" #. module: account #: model:mail.message.subtype,description:account.mt_invoice_paid msgid "Invoice paid" -msgstr "" +msgstr "Factuur betaald" #. module: account #: view:validate.account.move:0 @@ -1375,6 +1378,8 @@ msgid "" "The amount expressed in the secondary currency must be positif when journal " "item are debit and negatif when journal item are credit." msgstr "" +"Het bedrag in secundaire munt moet positief zijn als de boekingslijn debet " +"is en negatief bij een creditbedrag." #. module: account #: view:account.invoice.cancel:0 @@ -1940,7 +1945,7 @@ msgstr "Verkopen per rekeningtype" #: model:account.payment.term,name:account.account_payment_term_15days #: model:account.payment.term,note:account.account_payment_term_15days msgid "15 Days" -msgstr "" +msgstr "15 dagen" #. module: account #: model:ir.ui.menu,name:account.periodical_processing_invoicing @@ -2084,7 +2089,7 @@ msgstr "Voorlopig rekeninguittreksel" #. module: account #: model:mail.message.subtype,description:account.mt_invoice_validated msgid "Invoice validated" -msgstr "" +msgstr "Factuur goedgekeurd" #. module: account #: field:account.config.settings,module_account_check_writing:0 @@ -2342,6 +2347,7 @@ msgid "" "You cannot change the type of account to '%s' type as it contains journal " "items!" msgstr "" +"U kunt het rekeningtype niet wijzigen in '%s' omdat er al boekingen zijn." #. module: account #: model:ir.model,name:account.model_account_aged_trial_balance @@ -2358,7 +2364,7 @@ msgstr "Boekjaar afsluiten" #: code:addons/account/static/src/xml/account_move_line_quickadd.xml:14 #, python-format msgid "Journal :" -msgstr "" +msgstr "Journaal:" #. module: account #: sql_constraint:account.fiscal.position.tax:0 @@ -2718,6 +2724,8 @@ msgid "" "You cannot change the type of account from 'Closed' to any other type as it " "contains journal items!" msgstr "" +"U kunt het rekeningtype niet wijzigen van 'Afgesloten' in een ander type als " +"er boekingen zijn." #. module: account #: field:account.invoice.report,account_line_id:0 @@ -2811,7 +2819,7 @@ msgstr "Rekeningeigenschappen" #. module: account #: selection:account.invoice.refund,filter_refund:0 msgid "Create a draft refund" -msgstr "" +msgstr "Maak een voorlopige creditnota" #. module: account #: view:account.partner.reconcile.process:0 @@ -3360,7 +3368,7 @@ msgstr "" #: view:account.unreconcile:0 #: view:account.unreconcile.reconcile:0 msgid "Unreconcile Transactions" -msgstr "" +msgstr "Afpuntingen ongedaan maken" #. module: account #: field:wizard.multi.charts.accounts,only_one_chart_template:0 @@ -3558,7 +3566,7 @@ msgstr "Aantal cijfers voor de rekeningcode" #. module: account #: field:res.partner,property_supplier_payment_term:0 msgid "Supplier Payment Term" -msgstr "" +msgstr "Betaaltermijn leverancier" #. module: account #: view:account.fiscalyear:0 @@ -3633,7 +3641,7 @@ msgstr "Elektronisch bestand" #. module: account #: field:account.move.line,reconcile:0 msgid "Reconcile Ref" -msgstr "" +msgstr "Afpuntingsreferentie" #. module: account #: field:account.config.settings,has_chart_of_accounts:0 @@ -3734,6 +3742,88 @@ msgid "" "
          \n" " " msgstr "" +"\n" +"
          \n" +"\n" +"

          Hallo ${object.partner_id.name},

          \n" +"\n" +"

          Er is een nieuwe factuur voor u:

          \n" +" \n" +"

          \n" +"   REFERENTIE
          \n" +"   Factuurnummer: ${object.number}
          \n" +"   Totaal: ${object.amount_total} " +"${object.currency_id.name}
          \n" +"   Datum: ${object.date_invoice}
          \n" +" % if object.origin:\n" +"   Referentie: ${object.origin}
          \n" +" % endif\n" +" % if object.user_id:\n" +"   Uw contactpersoon: ${object.user_id.name}\n" +" % endif\n" +"

          \n" +" \n" +" % if object.paypal_url:\n" +"
          \n" +"

          U kunt ook onmiddellijk 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 hebt gekozen voor ${object.company_id.name or " +"'ons'}!

          \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 #: view:account.period:0 @@ -3922,6 +4012,8 @@ msgid "" "You cannot create journal items with a secondary currency without recording " "both 'currency' and 'amount currency' field." msgstr "" +"U kunt geen boekingslijnen in een secundaire munt maken zonder beide velden " +"'valuta' en 'bedrag valuta' in te vullen." #. module: account #: field:account.financial.report,display_detail:0 @@ -4224,7 +4316,7 @@ msgstr "" #. module: account #: model:ir.model,name:account.model_account_journal_cashbox_line msgid "account.journal.cashbox.line" -msgstr "" +msgstr "account.journal.cashbox.line" #. module: account #: model:ir.model,name:account.model_account_partner_reconcile_process @@ -4498,7 +4590,7 @@ msgstr "Uw bankrekeningen instellen" #. module: account #: xsl:account.transfer:0 msgid "Partner ID" -msgstr "" +msgstr "Relatie-ID" #. module: account #: help:account.bank.statement,message_ids:0 @@ -4704,6 +4796,8 @@ msgid "" "This payment term will be used instead of the default one for sale orders " "and customer invoices" msgstr "" +"Deze betalingsvoorwaarde vervangt de standaardvoorwaarde van de huidige " +"relatie." #. module: account #: view:account.config.settings:0 @@ -4731,7 +4825,7 @@ msgstr "Geboekte lijnen" #. module: account #: field:account.move.line,blocked:0 msgid "No Follow-up" -msgstr "" +msgstr "Geen aanmaning" #. module: account #: view:account.tax.template:0 @@ -4858,6 +4952,7 @@ msgstr "Maand" #, python-format msgid "You cannot change the code of account which contains journal items!" msgstr "" +"U kunt de code van een rekening niet wijzigen als er al boekingen zijn." #. module: account #: field:account.config.settings,purchase_sequence_prefix:0 @@ -4895,7 +4990,7 @@ msgstr "Rek.type" #. module: account #: selection:account.journal,type:0 msgid "Bank and Checks" -msgstr "" +msgstr "Bank en cheques" #. module: account #: field:account.account.template,note:0 @@ -4977,7 +5072,7 @@ msgstr "Schakel dit in als u ook rekeningen met een nulsaldo wilt weergeven." #. module: account #: field:account.move.reconcile,opening_reconciliation:0 msgid "Opening Entries Reconciliation" -msgstr "" +msgstr "Afpunting openingsboekingen" #. module: account #. openerp-web @@ -5018,7 +5113,7 @@ msgstr "Boekhoudplan" #. module: account #: field:account.invoice,reference_type:0 msgid "Payment Reference" -msgstr "" +msgstr "Betaalreferentie" #. module: account #: selection:account.financial.report,style_overwrite:0 @@ -5092,7 +5187,7 @@ msgstr "Af te punten boekingen" #. module: account #: model:ir.model,name:account.model_account_tax_template msgid "Templates for Taxes" -msgstr "" +msgstr "Btw-sjablonen" #. module: account #: sql_constraint:account.period:0 @@ -5667,6 +5762,8 @@ msgstr "Doelbewegingen" msgid "" "Move cannot be deleted if linked to an invoice. (Invoice: %s - Move ID:%s)" msgstr "" +"Boeking kan niet worden verwijderd als deze is gekoppeld aan een factuur " +"(Factuur: %s - boeking: %s)" #. module: account #: view:account.bank.statement:0 @@ -6225,6 +6322,8 @@ msgid "" "This payment term will be used instead of the default one for purchase " "orders and supplier invoices" msgstr "" +"Deze betalingsvoorwaarde vervangt de standaardvoorwaarde van de huidige " +"relatie voor aankooporders en aankoopfacturen." #. module: account #: help:account.automatic.reconcile,power:0 @@ -6734,7 +6833,7 @@ msgstr "Analytische lijn" #. module: account #: model:ir.ui.menu,name:account.menu_action_model_form msgid "Models" -msgstr "" +msgstr "Modellen" #. module: account #: code:addons/account/account_invoice.py:1091 @@ -7055,6 +7154,12 @@ msgid "" "due date, make sure that the payment term is not set on the invoice. If you " "keep the payment term and the due date empty, it means direct payment." msgstr "" +"Als u betalingstermijnen gebruikt, wordt de vervaldatum automatisch berekend " +"bij het maken van de boekingen. De betalingsvoorwaarde kan verschillende " +"vervaldatums berekenen, vb. 50% nu en 50% binnen een maand. Als u een " +"specifieke vervaldatum wilt instellen, gebruikt u beter geen " +"betalingstermijn. Als u zowel betalingstermijn als vervaldatum leeglaat, " +"gaat het om een contante betaling." #. module: account #: code:addons/account/account.py:414 @@ -7296,6 +7401,8 @@ msgid "" "If you unreconcile transactions, you must also verify all the actions that " "are linked to those transactions because they will not be disabled" msgstr "" +"Als u afgepunte transacties ongedaan maakt, moet u alle gekoppelde acties " +"nakijken, want deze worden niet ongedaan gemaakt." #. module: account #: view:account.account.template:0 @@ -7330,6 +7437,7 @@ msgid "" "You cannot provide a secondary currency if it is the same than the company " "one." msgstr "" +"U kunt geen secundaire munt ingeven die identiek is aan de firmamunt." #. module: account #: selection:account.tax.template,applicable_type:0 @@ -7467,7 +7575,7 @@ msgstr "Manueel" #. module: account #: selection:account.invoice.refund,filter_refund:0 msgid "Cancel: create refund and reconcile" -msgstr "" +msgstr "Annuleren: maak een creditnota en punt af" #. module: account #: code:addons/account/wizard/account_report_aged_partner_balance.py:58 @@ -7564,7 +7672,7 @@ msgstr "Alle boekingen" #. module: account #: constraint:account.move.reconcile:0 msgid "You can only reconcile journal items with the same partner." -msgstr "" +msgstr "U kunt enkel boekingen met dezelfde relatie afpunten." #. module: account #: view:account.journal.select:0 @@ -7682,7 +7790,7 @@ msgstr "" #. module: account #: field:account.invoice,paypal_url:0 msgid "Paypal Url" -msgstr "" +msgstr "Paypal-url" #. module: account #: field:account.config.settings,module_account_voucher:0 @@ -8390,7 +8498,7 @@ msgstr "" #. module: account #: field:account.move.line,amount_residual_currency:0 msgid "Residual Amount in Currency" -msgstr "" +msgstr "Restbedrag in valuta" #. module: account #: field:account.config.settings,sale_refund_sequence_prefix:0 @@ -8444,6 +8552,8 @@ msgid "" "Refund 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 #: field:account.bank.statement.line,sequence:0 @@ -8461,7 +8571,7 @@ msgstr "Volgorde" #. module: account #: field:account.config.settings,paypal_account:0 msgid "Paypal account" -msgstr "" +msgstr "Paypal-rekening" #. module: account #: selection:account.print.journal,sort_selection:0 @@ -8730,7 +8840,7 @@ msgstr "Omgekeerde analytische balans -" #: help:account.move.reconcile,opening_reconciliation:0 msgid "" "Is this reconciliation produced by the opening of a new fiscal year ?." -msgstr "" +msgstr "Komt deze afpunting van een openingsboeking?" #. module: account #: view:account.analytic.line:0 @@ -9011,7 +9121,7 @@ msgstr "Eindbalans" #. module: account #: field:account.journal,centralisation:0 msgid "Centralized Counterpart" -msgstr "" +msgstr "Gecentraliseerde tegenboeking" #. module: account #: help:account.move.line,blocked:0 @@ -9047,6 +9157,12 @@ msgid "" "invoice will be created \n" " so that you can edit it." msgstr "" +"Gebruik deze optie als u een factuur wilt annuleren en een nieuwe maken.\n" +" De creditnota wordt gemaakt, goedgekeurd " +"en afgepunt\n" +" met de huidige factuur. Een nieuwe, " +"voorlopige factuur wordt gemaakt\n" +" die u kunt bewerken." #. module: account #: model:process.transition,name:account.process_transition_filestatement0 @@ -9079,7 +9195,7 @@ msgstr "Rekeningtypen" #. module: account #: model:email.template,subject:account.email_template_edi_invoice msgid "${object.company_id.name} Invoice (Ref ${object.number or 'n/a'})" -msgstr "" +msgstr "${object.company_id.name} Factuur (Ref. ${object.number or 'nvt' })" #. module: account #: code:addons/account/account_move_line.py:1213 @@ -9149,6 +9265,19 @@ msgid "" "

          \n" " " msgstr "" +"

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

          \n" +" Een journaal groepeert boekingen in functie\n" +" van de dagelijkse bezigheden.\n" +"

          \n" +" Een firma geruikt doorgaans een journaal per betaalmethode " +"(kas,\n" +" bankrekeningen, cheques), een aankoopdagboek, een " +"verkoopdagboek\n" +" en een diversendagboek.\n" +"

          \n" +" " #. module: account #: model:ir.model,name:account.model_account_fiscalyear_close_state @@ -9276,6 +9405,9 @@ msgid "" "computed. Because it is space consuming, we do not allow to use it while " "doing a comparison." msgstr "" +"Met deze optie krijgt u meer details over de manier waarop de saldi worden " +"berekend. Omdat dit ruimte inneemt, is deze optie niet mogelijk bij " +"vergelijkingen." #. module: account #: model:ir.model,name:account.model_account_fiscalyear_close @@ -9292,6 +9424,8 @@ msgstr "De code van de rekening moet uniek zijn per firma." #: help:product.template,property_account_expense:0 msgid "This account will be used to value outgoing stock using cost price." msgstr "" +"Deze rekening dient voor de voorraadwaardering van de uitgaande voorraad op " +"basis van de kostprijs." #. module: account #: view:account.invoice:0 @@ -9354,6 +9488,17 @@ msgid "" "

          \n" " " msgstr "" +"

          \n" +" Klik als u een nieuwe recurrente boeking wilt maken.\n" +"

          \n" +" Een terugkerende boeking wordt regelmatig op een bepaald " +"tijdstip herhaald,\n" +" vb. bij vervallen van een contract of overeenkomst met een\n" +" klant of een leverancier. U kunt dergelijke boekingen " +"voorbereiden\n" +" zodat deze automatisch worden geboekt.\n" +"

          \n" +" " #. module: account #: view:account.journal:0 @@ -9396,6 +9541,8 @@ msgid "" "This allows you to check writing and printing.\n" " This installs the module account_check_writing." msgstr "" +"Hiermee kunt u cheques schrijven en afdrukken.\n" +" Hiermee wordt de module account_check_writing geïnstalleerd." #. module: account #: model:res.groups,name:account.group_account_invoice @@ -9681,6 +9828,9 @@ msgid "" "chart\n" " of accounts." msgstr "" +"Bevestigde facturen kunnen niet meer\n" +" worden gewijzigd. Facturen krijgen een uniek nummer\n" +" en de boekingen worden gemaakt." #. module: account #: model:process.node,note:account.process_node_bankstatement0 @@ -9906,11 +10056,15 @@ msgid "" "payments.\n" " This installs the module account_payment." msgstr "" +"Hiermee kunt u betaalopdrachten maken\n" +" * die als basis dienen voor verdere automatisering,\n" +" * om efficiënter betalingen te kunnen uitvoeren.\n" +" Hiermee wordt de module account_payment geïnstalleerd." #. module: account #: xsl:account.transfer:0 msgid "Document" -msgstr "" +msgstr "Document" #. module: account #: view:account.chart.template:0 @@ -10132,7 +10286,7 @@ msgstr "Kan geen boekingen maken tussen verschillende firma's." #. module: account #: model:ir.ui.menu,name:account.menu_finance_periodical_processing msgid "Periodic Processing" -msgstr "" +msgstr "Periodieke verwerking" #. module: account #: view:account.invoice.report:0 @@ -10212,7 +10366,7 @@ msgstr "Vervaldatum" #: model:account.payment.term,name:account.account_payment_term_immediate #: model:account.payment.term,note:account.account_payment_term_immediate msgid "Immediate Payment" -msgstr "" +msgstr "Contante betaling" #. module: account #: code:addons/account/account.py:1464 @@ -10424,11 +10578,16 @@ msgid "" "analytic account.\n" " This installs the module account_budget." msgstr "" +"Hiermee kunnen accountants budgetten beheren.\n" +" Als de hoofdbudgetten zijn ingesteld, kunnen de " +"projectleiders\n" +" het geplande bedrag instellen per analytische rekening.\n" +" Hiermee wordt de module account_budget geïnstalleerd." #. module: account #: field:account.bank.statement.line,name:0 msgid "OBI" -msgstr "" +msgstr "Omschrijving" #. module: account #: help:res.partner,property_account_payable:0 @@ -10915,6 +11074,8 @@ msgid "" "If you unreconcile transactions, you must also verify all the actions that " "are linked to those transactions because they will not be disable" msgstr "" +"Als u afgepunte transacties ongedaan maakt, moet u alle gekoppelde acties " +"nakijken, want deze worden niet ongedaan gemaakt." #. module: account #: code:addons/account/account_move_line.py:1059 @@ -10949,6 +11110,9 @@ msgid "" "customer. The tool search can also be used to personalise your Invoices " "reports and so, match this analysis to your needs." msgstr "" +"Dit rapport biedt een overzicht van het bedrag gefactureerd aan uw klant. De " +"zoekfunctie kan worden aangepast om het overzicht van uw facturen te " +"personaliseren, zodat u de gewenste analyse krijgt." #. module: account #: view:account.partner.reconcile.process:0 @@ -11207,6 +11371,16 @@ msgid "" "

          \n" " " msgstr "" +"

          \n" +" Klik als u een nieuw btw-vak wilt toevoegen.\n" +"

          \n" +" Afhankelijk van uw land, dient een btw-vak om uw btw-" +"aangifte in te vullen.\n" +" In OpenERP kunt u een btw-structuur instellen en elke btw-" +"berekening\n" +" kan in een of meer btw-vakken worden opgenomen.\n" +"

          \n" +" " #. module: account #: selection:account.entries.report,month:0 @@ -11233,6 +11407,18 @@ msgid "" "

          \n" " " msgstr "" +"

          \n" +" Selecteer de periode en het journaal.\n" +"

          \n" +" Hiermee kan de boekhouder in een sneltempo boekingen " +"invoeren in\n" +" OpenERP. Als u een aankoopfactuur wilt inboeken,\n" +" begint u met de kostenrekening. OpenERP stelt automatisch\n" +" de betrokken btw voor die is gekoppeld aan deze rekening, " +"net\n" +" als de centralisatierekening.\n" +"

          \n" +" " #. module: account #: help:account.invoice.line,account_id:0 @@ -11403,7 +11589,7 @@ msgstr "Rekeningmodel" #: code:addons/account/account_cash_statement.py:292 #, python-format msgid "Loss" -msgstr "" +msgstr "Verlies" #. module: account #: selection:account.entries.report,month:0 @@ -11475,7 +11661,7 @@ msgstr "Kostenrekening van productsjabloon" #. module: account #: field:res.partner,property_payment_term:0 msgid "Customer Payment Term" -msgstr "" +msgstr "Betaaltermijn klant" #. module: account #: help:accounting.report,label_filter:0 diff --git a/addons/account_analytic_default/i18n/nl_BE.po b/addons/account_analytic_default/i18n/nl_BE.po index 4d7b5295f16..86fed1b535a 100644 --- a/addons/account_analytic_default/i18n/nl_BE.po +++ b/addons/account_analytic_default/i18n/nl_BE.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-11-27 13:19+0000\n" +"PO-Revision-Date: 2013-04-15 15:56+0000\n" "Last-Translator: Els Van Vossel (Agaplan) \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:28+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: account_analytic_default #: model:ir.actions.act_window,name:account_analytic_default.analytic_rule_action_partner @@ -40,6 +40,9 @@ msgid "" "default (e.g. create new customer invoice or Sales order if we select this " "product, it will automatically take this as an analytic account)" msgstr "" +"Kies een product voor de analytische rekening in analytische " +"standaardrekening (vb. maak een nieuwe verkoopfactuur of verkooporder: als " +"we dit product kiezen, wordt de analytische rekening voorgesteld)." #. module: account_analytic_default #: model:ir.model,name:account_analytic_default.model_stock_picking @@ -64,6 +67,9 @@ msgid "" "default (e.g. create new customer invoice or Sales order if we select this " "partner, it will automatically take this as an analytic account)" msgstr "" +"Kies een relatie voor de analytische rekening in analytische " +"standaardrekening (vb. maak een nieuwe verkoopfactuur of verkooporder: als " +"we deze relatie kiezen, wordt de analytische rekening voorgesteld)." #. module: account_analytic_default #: view:account.analytic.default:0 @@ -118,6 +124,9 @@ msgid "" "default (e.g. create new customer invoice or Sales order if we select this " "company, it will automatically take this as an analytic account)" msgstr "" +"Kies een firma voor de analytische rekening in analytische standaardrekening " +"(vb. maak een nieuwe verkoopfactuur of verkooporder: als we deze firma " +"kiezen, wordt de analytische rekening voorgesteld)." #. module: account_analytic_default #: view:account.analytic.default:0 diff --git a/addons/account_asset/i18n/nl_BE.po b/addons/account_asset/i18n/nl_BE.po index 5bee5f9bfd9..3413cf38ac8 100644 --- a/addons/account_asset/i18n/nl_BE.po +++ b/addons/account_asset/i18n/nl_BE.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2012-11-27 13:35+0000\n" +"PO-Revision-Date: 2013-04-15 15:59+0000\n" "Last-Translator: Els Van Vossel (Agaplan) \n" "Language-Team: Dutch (Belgium) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:50+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: account_asset #: view:account.asset.asset:0 @@ -148,7 +148,7 @@ msgstr "Dit is het bedrag dat u niet kunt afschrijven." #. module: account_asset #: help:account.asset.asset,method_period:0 msgid "The amount of time between two depreciations, in months" -msgstr "" +msgstr "De tijd tussen twee afschrijvingen, in maanden" #. module: account_asset #: field:account.asset.depreciation.line,depreciation_date:0 @@ -265,7 +265,7 @@ msgstr "Duur wijzigen" #: help:account.asset.category,method_number:0 #: help:account.asset.history,method_number:0 msgid "The number of depreciations needed to depreciate your asset" -msgstr "" +msgstr "Het aantal keer dat er moet worden afgeschreven." #. module: account_asset #: view:account.asset.category:0 @@ -295,7 +295,7 @@ msgstr "" #. module: account_asset #: field:account.asset.depreciation.line,remaining_value:0 msgid "Next Period Depreciation" -msgstr "" +msgstr "Volgende afschrijvingsperiode" #. module: account_asset #: help:account.asset.history,method_period:0 @@ -346,7 +346,7 @@ msgstr "Investeringscategorie zoeken" #. module: account_asset #: view:asset.modify:0 msgid "months" -msgstr "" +msgstr "maanden" #. module: account_asset #: model:ir.model,name:account_asset.model_account_invoice_line @@ -608,7 +608,7 @@ msgstr "Afschrijvingsmethode" #. module: account_asset #: field:account.asset.depreciation.line,amount:0 msgid "Current Depreciation" -msgstr "" +msgstr "Huidige afschrijving" #. module: account_asset #: field:account.asset.asset,name:0 @@ -653,6 +653,9 @@ msgid "" " * Linear: Calculated on basis of: Gross Value / Number of Depreciations\n" " * Degressive: Calculated on basis of: Residual Value * Degressive Factor" msgstr "" +"Kies de methode om het aantal afschrijvingsregels te berekenen.\n" +" * Lineair: op basis van: brutowaarde / aantal afschrijvingen\n" +" * Degressief: op basis van: restwaarde * degressieve factor" #. module: account_asset #: field:account.asset.depreciation.line,move_check:0 diff --git a/addons/account_followup/i18n/nl_BE.po b/addons/account_followup/i18n/nl_BE.po index 1a92e60dfc9..5125f27f2ff 100644 --- a/addons/account_followup/i18n/nl_BE.po +++ b/addons/account_followup/i18n/nl_BE.po @@ -1,20 +1,21 @@ # Translation of OpenERP Server. # This file contains the translation of the following modules: -# * account_followup -# +# * account_followup +# Els Van Vossel , 2013. msgid "" msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-12-17 09:57+0000\n" -"Last-Translator: Niels Huylebroeck \n" -"Language-Team: \n" +"PO-Revision-Date: 2013-04-15 23:02+0000\n" +"Last-Translator: Els Van Vossel (Agaplan) \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: 2013-03-16 05:11+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" +"X-Generator: Launchpad (build 16564)\n" +"Language: nl\n" #. module: account_followup #: model:email.template,subject:account_followup.email_template_account_followup_default @@ -22,12 +23,12 @@ msgstr "" #: model:email.template,subject:account_followup.email_template_account_followup_level1 #: model:email.template,subject:account_followup.email_template_account_followup_level2 msgid "${user.company_id.name} Payment Reminder" -msgstr "" +msgstr "${user.company_id.name} Aanmaning" #. module: account_followup #: help:res.partner,latest_followup_level_id:0 msgid "The maximum follow-up level" -msgstr "" +msgstr "Het maximale aanmaningsniveau" #. module: account_followup #: view:account_followup.stat:0 @@ -43,33 +44,33 @@ msgstr "Aanmanen" #. module: account_followup #: view:account_followup.followup.line:0 msgid "%(date)s" -msgstr "" +msgstr "%(date)s" #. module: account_followup #: field:res.partner,payment_next_action_date:0 msgid "Next Action Date" -msgstr "" +msgstr "Volgende actiedatum" #. module: account_followup #: view:account_followup.followup.line:0 #: field:account_followup.followup.line,manual_action:0 msgid "Manual Action" -msgstr "" +msgstr "Manuele actie" #. module: account_followup #: field:account_followup.sending.results,needprinting:0 msgid "Needs Printing" -msgstr "" +msgstr "Moet worden afgedrukt" #. module: account_followup #: view:res.partner:0 msgid "⇾ Mark as Done" -msgstr "" +msgstr "⇾ Als Gedaan markeren" #. module: account_followup #: field:account_followup.followup.line,manual_action_note:0 msgid "Action To Do" -msgstr "" +msgstr "Uit te voeren actie" #. module: account_followup #: field:account_followup.followup,company_id:0 @@ -89,39 +90,39 @@ msgstr "Factuurdatum" #. module: account_followup #: field:account_followup.print,email_subject:0 msgid "Email Subject" -msgstr "E-mail onderwerp" +msgstr "E-mailonderwerp" #. module: account_followup #: view:account_followup.followup.line:0 msgid "%(user_signature)s" -msgstr "" +msgstr "%(user_signature)s" #. module: account_followup #: view:account_followup.followup.line:0 msgid "days overdue, do the following actions:" -msgstr "" +msgstr "dagen vervallen, voer volgende acties uit:" #. module: account_followup #: view:account_followup.followup.line:0 msgid "Follow-up Steps" -msgstr "" +msgstr "Aanmaningsstappen" #. module: account_followup #: field:account_followup.print,email_body:0 msgid "Email Body" -msgstr "" +msgstr "E-mailbericht" #. module: account_followup #: model:ir.actions.act_window,name:account_followup.action_account_followup_print msgid "Send Follow-Ups" -msgstr "" +msgstr "Aanmaningen versturen" #. module: account_followup #: report:account_followup.followup.print:0 #: code:addons/account_followup/account_followup.py:263 #, python-format msgid "Amount" -msgstr "" +msgstr "Bedrag" #. module: account_followup #: help:res.partner,payment_next_action:0 @@ -129,11 +130,14 @@ msgid "" "This is the next action to be taken. It will automatically be set when the " "partner gets a follow-up level that requires a manual action. " msgstr "" +"Dit is de volgende actie die moet worden ondernomen. Deze wordt automatisch " +"ingesteld als de relatie een aanmaningsniveau bereikt waarvoor een manuele " +"actie is vereist. " #. module: account_followup #: view:res.partner:0 msgid "No Responsible" -msgstr "" +msgstr "Niemand verantwoordelijk" #. module: account_followup #: model:account_followup.followup.line,description:account_followup.demo_followup_line2 @@ -158,6 +162,24 @@ msgid "" "\n" "Best Regards,\n" msgstr "" +"\n" +"Beste %(partner_name)s,\n" +"\n" +"Het spijt ons te moeten vaststellen dat, ondanks een eerdere aanmaning, u " +"nog steeds een openstaand saldo hebt.\n" +"\n" +"Wij verzoeken u dringend het openstaande saldo te betalen. Bij gebrek aan " +"betaling, zijn wij genoodzaakt de verdere levering van goederen en diensten " +"stop te zetten.\n" +"Gelieve de betalingen uit te voeren binnen de 8 dagen.\n" +"\n" +"Als er een probleem is rond de betaling waarvan wij niet op de hoogte zijn, " +"kunt u steeds contact opnemen met onze boekhouding, zodat dit snel kan " +"worden opgelost.\n" +"\n" +"Hierna vindt u een overzicht van de vervallen documenten.\n" +"\n" +"Hoogachtend,\n" #. module: account_followup #: model:email.template,body_html:account_followup.email_template_account_followup_level0 @@ -195,6 +217,38 @@ msgid "" "
          \n" " " msgstr "" +"\n" +"
          \n" +"\n" +"

          Beste ${object.name},

          \n" +"

          \n" +" Volgens onze informatie, heeft u nog een openstaand saldo. Wij verzoeken " +"u het nodige te doen om deze betaling binnen de 8 dagen over te schrijven op " +"onze rekening.\n" +"\n" +"Indien uw betaling deze e-mail heeft gekruist, mag u dit bericht als " +"onbestaand beschouwen. Neem gerust contact op met onze boekhouding mocht u " +"nog vragen hebben.\n" +"\n" +"

          \n" +"
          \n" +"Met vriendelijke groeten,\n" +"
          \n" +"
          \n" +"${user.name}\n" +"\n" +"
          \n" +"
          \n" +"\n" +"\n" +"${object.get_followup_table_html() | safe}\n" +"\n" +"
          \n" +"\n" +"
          \n" +" " #. module: account_followup #: view:account_followup.stat.by.partner:0 @@ -209,17 +263,17 @@ msgstr "Totaal debet" #. module: account_followup #: field:res.partner,payment_next_action:0 msgid "Next Action" -msgstr "" +msgstr "Volgende actie" #. module: account_followup #: view:account_followup.followup.line:0 msgid ": Partner Name" -msgstr "" +msgstr "Relatienaam" #. module: account_followup #: field:account_followup.followup.line,manual_action_responsible_id:0 msgid "Assign a Responsible" -msgstr "" +msgstr "Duid iemand aan die verantwoordelijk is" #. module: account_followup #: view:account_followup.followup:0 @@ -231,7 +285,7 @@ msgstr "Aanmaning" #. module: account_followup #: report:account_followup.followup.print:0 msgid "VAT:" -msgstr "BTW:" +msgstr "Btw:" #. module: account_followup #: view:account_followup.stat:0 @@ -255,11 +309,24 @@ msgid "" " same customer, the actions of the most \n" " overdue invoice will be executed." msgstr "" +"Om klanten aan te manen tot betaling, kunt u\n" +" verschillende acties instellen in functie van de " +"grootte\n" +" van het openstaand bedrag. Deze acties worden " +"samengevoegd\n" +" in aanmaningsniveaus die worden aangesproken als de\n" +" vervaldatum van een factuur een ingesteld aantal " +"dagen\n" +" overschrijdt. Als de klant ook andere openstaande " +"facturen heeft,\n" +" worden de acties uitgevoerd in functie van het " +"langst \n" +" openstaande document." #. module: account_followup #: report:account_followup.followup.print:0 msgid "Date :" -msgstr "Datum :" +msgstr "Datum:" #. module: account_followup #: field:account_followup.print,partner_ids:0 @@ -269,43 +336,43 @@ msgstr "Relaties" #. module: account_followup #: sql_constraint:account_followup.followup:0 msgid "Only one follow-up per company is allowed" -msgstr "" +msgstr "Per bedrijf is maar een aanmaningsniveau toegelaten." #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:254 #, python-format msgid "Invoices Reminder" -msgstr "Facturen aanmaning" +msgstr "Aanmaning facturen" #. module: account_followup #: help:account_followup.followup.line,send_letter:0 msgid "When processing, it will print a letter" -msgstr "" +msgstr "Bij verwerking wordt een brief gemaakt" #. module: account_followup #: field:res.partner,payment_earliest_due_date:0 msgid "Worst Due Date" -msgstr "" +msgstr "Slechtste vervaldatum" #. module: account_followup #: view:account_followup.stat:0 msgid "Not Litigation" -msgstr "" +msgstr "Geen betwisting" #. module: account_followup #: view:account_followup.print:0 msgid "Send emails and generate letters" -msgstr "" +msgstr "Verstuur e-mails en maak brieven" #. module: account_followup #: model:ir.actions.act_window,name:account_followup.action_customer_followup msgid "Manual Follow-Ups" -msgstr "" +msgstr "Manuele aanmaningen" #. module: account_followup #: view:account_followup.followup.line:0 msgid "%(partner_name)s" -msgstr "" +msgstr "%(partner_name)s" #. module: account_followup #: model:email.template,body_html:account_followup.email_template_account_followup_level1 @@ -347,6 +414,42 @@ msgid "" "
          \n" " " msgstr "" +"\n" +"
          \n" +" \n" +"

          Beste ${object.name},

          \n" +"

          \n" +" Het spijt ons te moeten vaststellen dat, ondanks een eerdere aanmaning, " +"u nog steeds een openstaand saldo hebt.\n" +"Wij verzoeken u dringend het openstaande saldo te betalen. Bij gebrek aan " +"betaling, zijn wij genoodzaakt de verdere levering van goederen en diensten " +"stop te zetten.\n" +"Gelieve de betalingen uit te voeren binnen de 8 dagen.\n" +"\n" +"Als er een probleem is rond de betaling waarvan wij niet op de hoogte zijn, " +"kunt u steeds contact opnemen met onze boekhouding, zodat dit snel kan " +"worden opgelost.\n" +"\n" +"Hierna vindt u een overzicht van de vervallen documenten.\n" +"

          \n" +"
          \n" +"Hoogachtend,\n" +" \n" +"
          \n" +"
          \n" +"${user.name}\n" +" \n" +"
          \n" +"
          \n" +"\n" +"${object.get_followup_table_html() | safe}\n" +"\n" +"
          \n" +"\n" +"
          \n" +" " #. module: account_followup #: field:account_followup.stat,debit:0 @@ -356,49 +459,49 @@ msgstr "Debet" #. module: account_followup #: model:ir.model,name:account_followup.model_account_followup_stat msgid "Follow-up Statistics" -msgstr "" +msgstr "Aanmaningsstatistieken" #. module: account_followup #: view:res.partner:0 msgid "Send Overdue Email" -msgstr "" +msgstr "Aanmaningsmail sturen" #. module: account_followup #: model:ir.model,name:account_followup.model_account_followup_followup_line msgid "Follow-up Criteria" -msgstr "" +msgstr "Aanmaningscriteria" #. module: account_followup #: help:account_followup.followup.line,sequence:0 msgid "Gives the sequence order when displaying a list of follow-up lines." -msgstr "Bepaalt de volgorde bij het afbeelden van de aanmaningregels" +msgstr "Bepaalt de volgorde bij het weergeven van de aanmaningslijnen." #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:166 #, python-format msgid " will be sent" -msgstr "" +msgstr " wordt verstuurd" #. module: account_followup #: view:account_followup.followup.line:0 msgid ": User's Company Name" -msgstr "" +msgstr "Bedrijfsnaam van gebruiker" #. module: account_followup #: view:account_followup.followup.line:0 #: field:account_followup.followup.line,send_letter:0 msgid "Send a Letter" -msgstr "" +msgstr "Brief sturen" #. module: account_followup #: model:ir.actions.act_window,name:account_followup.action_account_followup_definition_form msgid "Payment Follow-ups" -msgstr "" +msgstr "Aanmaningen" #. module: account_followup #: field:account_followup.followup.line,delay:0 msgid "Due Days" -msgstr "" +msgstr "Dagen vervallen" #. module: account_followup #: field:account.move.line,followup_line_id:0 @@ -414,48 +517,48 @@ msgstr "Laatste aanmaning" #. module: account_followup #: model:ir.ui.menu,name:account_followup.menu_manual_reconcile_followup msgid "Reconcile Invoices & Payments" -msgstr "" +msgstr "Facturen en betalingen afpunten" #. module: account_followup #: model:ir.ui.menu,name:account_followup.account_followup_s msgid "Do Manual Follow-Ups" -msgstr "" +msgstr "Manuele aanmaningen uitvoeren" #. module: account_followup #: report:account_followup.followup.print:0 msgid "Li." -msgstr "" +msgstr "Bt." #. module: account_followup #: field:account_followup.print,email_conf:0 msgid "Send Email Confirmation" -msgstr "" +msgstr "Bevestiging per e-mail sturen" #. module: account_followup #: view:account_followup.stat:0 msgid "Follow-up Entries with period in current year" -msgstr "" +msgstr "Aanmaningen met periode in huidig jaar" #. module: account_followup #: field:account_followup.stat.by.partner,date_followup:0 msgid "Latest follow-up" -msgstr "" +msgstr "Laatste aanmaning" #. module: account_followup #: field:account_followup.print,partner_lang:0 msgid "Send Email in Partner Language" -msgstr "Stuur email-bericht in taal relatie" +msgstr "Stuur e-mail in taal relatie" #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:169 #, python-format msgid " email(s) sent" -msgstr "" +msgstr " e-mail(s) verstuurd" #. module: account_followup #: model:ir.model,name:account_followup.model_account_followup_print msgid "Print Follow-up & Send Mail to Customers" -msgstr "" +msgstr "Aanmaningen afdrukken & mail sturen naar klanten" #. module: account_followup #: field:account_followup.followup.line,description:0 @@ -466,12 +569,12 @@ msgstr "Afgedrukt bericht" #: code:addons/account_followup/wizard/account_followup_print.py:155 #, python-format msgid "Anybody" -msgstr "" +msgstr "Iedereen" #. module: account_followup #: help:account_followup.followup.line,send_email:0 msgid "When processing, it will send an email" -msgstr "" +msgstr "Bij verwerking wordt een e-mail verstuurd" #. module: account_followup #: view:account_followup.stat.by.partner:0 @@ -481,7 +584,7 @@ msgstr "Relatie voor aanmaning" #. module: account_followup #: view:res.partner:0 msgid "Print Overdue Payments" -msgstr "" +msgstr "Vervallen documenten afdrukken" #. module: account_followup #: field:account_followup.followup.line,followup_id:0 @@ -494,11 +597,13 @@ msgstr "Aanmaningen" #, python-format msgid "Email not sent because of email address of partner not filled in" msgstr "" +"E-mail is niet verstuurd, omdat er voor de relatie geen e-mailadres is " +"ingevuld." #. module: account_followup #: model:ir.model,name:account_followup.model_account_followup_followup msgid "Account Follow-up" -msgstr "" +msgstr "Aanmaningen" #. module: account_followup #: help:res.partner,payment_responsible_id:0 @@ -506,11 +611,13 @@ msgid "" "Optionally you can assign a user to this field, which will make him " "responsible for the action." msgstr "" +"U kunt eventueel een gebruiker toewijzen aan dit veld. Dit betekent dat hij " +"verantwoordelijk is voor deze actie." #. module: account_followup #: model:ir.model,name:account_followup.model_account_followup_sending_results msgid "Results from the sending of the different letters and emails" -msgstr "" +msgstr "Resultaten van het versturen van brieven en e-mails" #. module: account_followup #: constraint:account_followup.followup.line:0 @@ -518,43 +625,45 @@ msgid "" "Your description is invalid, use the right legend or %% if you want to use " "the percent character." msgstr "" +"Uw beschrijving is niet geldig. Gebruik de juiste parameter of %% als u het " +"percentageteken wilt gebruiken." #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:172 #, python-format msgid " manual action(s) assigned:" -msgstr "" +msgstr " manuele actie(s) toegewezen" #. module: account_followup #: view:res.partner:0 msgid "Search Partner" -msgstr "" +msgstr "Relatie zoeken" #. module: account_followup #: model:ir.ui.menu,name:account_followup.account_followup_print_menu msgid "Send Letters and Emails" -msgstr "" +msgstr "Brieven en e-mails sturen" #. module: account_followup #: view:account_followup.followup:0 msgid "Search Follow-up" -msgstr "" +msgstr "Aanmaningen zoeken" #. module: account_followup #: view:res.partner:0 msgid "Account Move line" -msgstr "" +msgstr "Boeking" #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:237 #, python-format msgid "Send Letters and Emails: Actions Summary" -msgstr "" +msgstr "Brieven en e-mails sturen: overzicht acties" #. module: account_followup #: view:account_followup.print:0 msgid "or" -msgstr "" +msgstr "of" #. module: account_followup #: view:res.partner:0 @@ -562,21 +671,23 @@ msgid "" "If not specified by the latest follow-up level, it will send from the " "default email template" msgstr "" +"Indien dit niet is ingesteld via de laatste aanmaning, dan wordt de " +"standaard e-mailsjabloon gebruikt." #. module: account_followup #: sql_constraint:account_followup.followup.line:0 msgid "Days of the follow-up levels must be different" -msgstr "" +msgstr "De dagen moeten verschillen per aanmaningsniveau." #. module: account_followup #: view:res.partner:0 msgid "Click to mark the action as done." -msgstr "" +msgstr "Klik om de actie als Gedaan te markeren." #. module: account_followup #: model:ir.ui.menu,name:account_followup.menu_action_followup_stat_follow msgid "Follow-Ups Analysis" -msgstr "" +msgstr "Aanmaningsanalyse" #. module: account_followup #: help:res.partner,payment_next_action_date:0 @@ -586,11 +697,15 @@ msgid "" "action. Can be practical to set manually e.g. to see if he keeps his " "promises." msgstr "" +"Dit is als er manuele opvolging nodig is. De datum wordt ingesteld op de " +"huidige datum als de relatie een aanmaningsniveau bereikt waarvoor een " +"manuele handeling nodig is. Kan handig zijn om dit als manueel in te " +"stellen, vb. om na te gaan of beloften worden nagekomen." #. module: account_followup #: view:res.partner:0 msgid "Print overdue payments report independent of follow-up line" -msgstr "" +msgstr "Aanmaningen afdrukken onafgezien van de aanmaningslijn." #. module: account_followup #: help:account_followup.print,date:0 @@ -609,7 +724,7 @@ msgstr "Verzenddatum aanmaning" #: view:res.partner:0 #: field:res.partner,payment_responsible_id:0 msgid "Follow-up Responsible" -msgstr "" +msgstr "Verantwoordelijk voor aanmaning" #. module: account_followup #: model:email.template,body_html:account_followup.email_template_account_followup_level2 @@ -646,16 +761,48 @@ msgid "" "\n" " " msgstr "" +"\n" +"
          \n" +" \n" +"

          Beste ${object.name},

          \n" +"

          \n" +" Ondanks het feit dat wij u meerdere aanmaningen hebben gestuurd, is uw " +"openstaand saldo nog steeds niet betaald.\n" +"Indien de betaling ervan niet binnen de 8 dagen op onze rekening staat, " +"schakelen wij een advocaat in om het verschuldigde saldo bij u te innen. U " +"ontvangt hierover geen verdere communicatie.\n" +"Wij gaan ervan uit dat deze stap niet nodig zal zijn. De details van de " +"openstaande betalingen vindt u hierna.\n" +"Aarzel niet contact op te nemen met onze boekhouding als u nog vragen " +"heeft.\n" +"

          \n" +"
          \n" +"Hoogachtend,\n" +"
          \n" +"
          \n" +"${user.name}\n" +"
          \n" +"
          \n" +"\n" +"\n" +"${object.get_followup_table_html() | safe}\n" +"\n" +"
          \n" +"\n" +"
          \n" +" " #. module: account_followup #: report:account_followup.followup.print:0 msgid "Document : Customer account statement" -msgstr "" +msgstr "Document: Rekeninguittreksel" #. module: account_followup #: model:ir.ui.menu,name:account_followup.account_followup_menu msgid "Follow-up Levels" -msgstr "" +msgstr "Aanmaningsniveaus" #. module: account_followup #: model:account_followup.followup.line,description:account_followup.demo_followup_line4 @@ -678,11 +825,27 @@ msgid "" "Best Regards,\n" " " msgstr "" +"\n" +"Beste %(partner_name)s,\n" +"\n" +"Ondanks meerdere aanmaningen, merken wij dat uw saldo nog steeds openstaat.\n" +"\n" +"Indien het openstaande saldo niet binnen 8 dagen op onze rekening is gestort " +", zullen wij een advocaat inschakelen. Wij sturen in dat verband geen " +"bericht meer.\n" +"\n" +"Wij gaan ervan uit dat deze actie niet nodig zal zijn. Details van de " +"openstaande documenten vindt u hierbij.\n" +"\n" +"Aarzel niet contact op te nemen met de boekhouding als u nog vragen heeft.\n" +"\n" +"Hoogachtend,\n" +" " #. module: account_followup #: field:res.partner,payment_amount_due:0 msgid "Amount Due" -msgstr "" +msgstr "Vervallen bedrag" #. module: account_followup #: field:account.move.line,followup_date:0 @@ -692,19 +855,19 @@ msgstr "Laatste aanmaning" #. module: account_followup #: view:account_followup.sending.results:0 msgid "Download Letters" -msgstr "" +msgstr "Brieven downloaden" #. module: account_followup #: field:account_followup.print,company_id:0 #: field:res.partner,unreconciled_aml_ids:0 msgid "unknown" -msgstr "" +msgstr "onbekend" #. module: account_followup #: code:addons/account_followup/account_followup.py:314 #, python-format msgid "Printed overdue payments report" -msgstr "" +msgstr "Afgedrukt aanmaningsrapport" #. module: account_followup #: help:account_followup.followup.line,manual_action:0 @@ -712,6 +875,7 @@ msgid "" "When processing, it will set the manual action to be taken for that " "customer. " msgstr "" +"Bij verwerking zal de manuele actie voor die klant worden ingesteld. " #. module: account_followup #: view:res.partner:0 @@ -721,18 +885,25 @@ msgid "" " order to exclude it from the next follow-up " "actions." msgstr "" +"Hieronder vindt u een overzicht van de transacties voor deze\n" +" klant. U kunt \"Stuur geen aanmaning\" kiezen " +"om\n" +" de factuur uit te sluiten van volgende " +"aanmaningsacties." #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:171 #, python-format msgid " email(s) should have been sent, but " -msgstr "" +msgstr " e-mail(s) zouden moeten zijn verstuurd, maar " #. module: account_followup #: help:account_followup.print,test_print:0 msgid "" "Check if you want to print follow-ups without changing follow-ups level." msgstr "" +"Schakel dit veld in als u aanmaningen wilt afdrukken zonder het niveau te " +"veranderen." #. module: account_followup #: model:ir.model,name:account_followup.model_account_move_line @@ -742,23 +913,23 @@ msgstr "Boekingen" #. module: account_followup #: report:account_followup.followup.print:0 msgid "Total:" -msgstr "" +msgstr "Totaal:" #. module: account_followup #: field:account_followup.followup.line,email_template_id:0 msgid "Email Template" -msgstr "" +msgstr "E-mailsjabloon" #. module: account_followup #: field:account_followup.print,summary:0 msgid "Summary" -msgstr "" +msgstr "Overzicht" #. module: account_followup #: view:account_followup.followup.line:0 #: field:account_followup.followup.line,send_email:0 msgid "Send an Email" -msgstr "" +msgstr "E-mail versturen" #. module: account_followup #: field:account_followup.stat,credit:0 @@ -768,7 +939,7 @@ msgstr "Krediet" #. module: account_followup #: field:res.partner,payment_amount_overdue:0 msgid "Amount Overdue" -msgstr "" +msgstr "Vervallen bedrag" #. module: account_followup #: help:res.partner,latest_followup_level_id_without_lit:0 @@ -776,12 +947,14 @@ msgid "" "The maximum follow-up level without taking into account the account move " "lines with litigation" msgstr "" +"Het maximale aanmaningsniveau, zonder rekening te houden met boekingen die " +"worden betwist." #. module: account_followup #: view:account_followup.stat:0 #: field:res.partner,latest_followup_date:0 msgid "Latest Follow-up Date" -msgstr "" +msgstr "Datum laatste aanmaning" #. module: account_followup #: model:email.template,body_html:account_followup.email_template_account_followup_default @@ -814,6 +987,33 @@ msgid "" "\n" " " msgstr "" +"\n" +"
          \n" +" \n" +"

          Beste ${object.name},

          \n" +"

          \n" +" Volgens onze administratie hebben wij het onderstaande bedrag nog niet " +"ontvangen. Wij verzoeken\n" +"u het verschuldigde bedrag uiterlijk binnen 8 dagen over te maken.\n" +"Indien dit schrijven uw betaling heeft gekruist, kunt u deze herinnering als " +"niet verzonden beschouwen.\n" +"Voor meer info kunt u steeds contact opnemen met onze boekhouding.\n" +"

          \n" +"
          \n" +"Hoogachtend,\n" +"
          \n" +"
          \n" +"${user.name}\n" +"
          \n" +"
          \n" +"\n" +"${object.get_followup_table_html() | safe}\n" +"\n" +"
          \n" +"
          \n" +" " #. module: account_followup #: field:account.move.line,result:0 @@ -826,17 +1026,17 @@ msgstr "Saldo" #. module: account_followup #: help:res.partner,payment_note:0 msgid "Payment Note" -msgstr "" +msgstr "Betalingsbewijs" #. module: account_followup #: view:res.partner:0 msgid "My Follow-ups" -msgstr "" +msgstr "Mijn aanmaningen" #. module: account_followup #: view:account_followup.followup.line:0 msgid "%(company_name)s" -msgstr "" +msgstr "%(company_name)s" #. module: account_followup #: model:account_followup.followup.line,description:account_followup.demo_followup_line1 @@ -854,28 +1054,40 @@ msgid "" "\n" "Best Regards,\n" msgstr "" +"\n" +"Beste %(partner_name)s,\n" +"\n" +"Volgens onze administratie hebben wij het onderstaande bedrag nog niet " +"ontvangen. Wij verzoeken u het verschuldigde bedrag binnen 8 dagen over te " +"maken.\n" +"\n" +"Indien dit schrijven uw betaling heeft gekruist, kunt u deze herinnering als " +"niet verzonden beschouwen.\n" +"Voor meer info kunt u steeds contact opnemen met onze boekhouding.\n" +"\n" +"Hoogachtend,\n" #. module: account_followup #: field:account_followup.stat,date_move_last:0 #: field:account_followup.stat.by.partner,date_move_last:0 msgid "Last move" -msgstr "" +msgstr "Laatste boeking" #. module: account_followup #: field:account_followup.stat,period_id:0 msgid "Period" -msgstr "" +msgstr "Periode" #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:228 #, python-format msgid "%s partners have no credits and as such the action is cleared" -msgstr "" +msgstr "%s relaties hebben geen schulden en de actie wordt gewist" #. module: account_followup #: model:ir.actions.report.xml,name:account_followup.account_followup_followup_report msgid "Follow-up Report" -msgstr "" +msgstr "Aanmaningsrapport" #. module: account_followup #: view:res.partner:0 @@ -883,48 +1095,50 @@ msgid "" ", the latest payment follow-up\n" " was:" msgstr "" +", het laatste aanmaningsniveau\n" +" was:" #. module: account_followup #: view:account_followup.print:0 msgid "Cancel" -msgstr "" +msgstr "Annuleren" #. module: account_followup #: view:account_followup.sending.results:0 msgid "Close" -msgstr "" +msgstr "Afsluiten" #. module: account_followup #: view:account_followup.stat:0 msgid "Litigation" -msgstr "" +msgstr "Betwist" #. module: account_followup #: field:account_followup.stat.by.partner,max_followup_id:0 msgid "Max Follow Up Level" -msgstr "" +msgstr "Max. aanmaningsniveau" #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:171 #, python-format msgid " had unknown email address(es)" -msgstr "" +msgstr " had een onbekend e-mailadres" #. module: account_followup #: view:res.partner:0 msgid "Responsible" -msgstr "" +msgstr "Verantwoordelijke" #. module: account_followup #: model:ir.ui.menu,name:account_followup.menu_finance_followup #: view:res.partner:0 msgid "Payment Follow-up" -msgstr "" +msgstr "Aanmaningen" #. module: account_followup #: view:account_followup.followup.line:0 msgid ": Current Date" -msgstr "" +msgstr ": Huidige datum" #. module: account_followup #: view:account_followup.print:0 @@ -933,16 +1147,19 @@ msgid "" " set the manual actions per customer, according to " "the follow-up levels defined." msgstr "" +"Met deze actie stuurt u aanmaningsmails, kunt u brieven afdrukken en\n" +" manuele acties instellen per klant, in functie van " +"de ingestelde aanmaningsniveaus." #. module: account_followup #: field:account_followup.followup.line,name:0 msgid "Follow-Up Action" -msgstr "" +msgstr "Aanmaningsactie" #. module: account_followup #: view:account_followup.stat:0 msgid "Including journal entries marked as a litigation" -msgstr "" +msgstr "Inclusief betwiste boekingen" #. module: account_followup #: report:account_followup.followup.print:0 @@ -955,7 +1172,7 @@ msgstr "Omschrijving" #. module: account_followup #: view:account_followup.sending.results:0 msgid "Summary of actions" -msgstr "" +msgstr "Overzicht van acties" #. module: account_followup #: report:account_followup.followup.print:0 @@ -965,17 +1182,17 @@ msgstr "Ref" #. module: account_followup #: view:account_followup.followup.line:0 msgid "After" -msgstr "" +msgstr "Na" #. module: account_followup #: view:account_followup.stat:0 msgid "This Fiscal year" -msgstr "" +msgstr "Dit boekjaar" #. module: account_followup #: field:res.partner,latest_followup_level_id_without_lit:0 msgid "Latest Follow-up Level without litigation" -msgstr "" +msgstr "Laatste aanmaningsniveau met betwisting" #. module: account_followup #: model:ir.actions.act_window,help:account_followup.action_account_manual_reconcile_receivable @@ -985,16 +1202,20 @@ msgid "" "

          \n" " " msgstr "" +"

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

          \n" +" " #. module: account_followup #: view:account.move.line:0 msgid "Partner entries" -msgstr "" +msgstr "Relatieboekingen" #. module: account_followup #: view:account_followup.stat:0 msgid "Follow-up lines" -msgstr "" +msgstr "Aanmaningsregels" #. module: account_followup #: model:account_followup.followup.line,description:account_followup.demo_followup_line3 @@ -1015,6 +1236,21 @@ msgid "" "\n" "Best Regards,\n" msgstr "" +"\n" +"Beste %(partner_name)s,\n" +"\n" +"Ondanks eerdere aanmaningen, heeft u nog steeds een openstaand saldo.\n" +"\n" +"Als uw betaling binnen de 8 dagen opnieuw uitblijft, zijn wij genoodzaakt de " +"vordering definitief uit handen te geven.\n" +"\n" +"Wij vertrouwen erop dat u het niet zover zult laten komen. Details van hety " +"openstaande saldo vindt u hierna.\n" +"\n" +"Indien u nog vragen heeft, kunt u steeds contact opnemen met onze " +"boekhouding.\n" +"\n" +"Hoogachtend,\n" #. module: account_followup #: help:account_followup.print,partner_lang:0 @@ -1022,6 +1258,8 @@ msgid "" "Do not change message text, if you want to send email in partner language, " "or configure from company" msgstr "" +"Wijzig de tekst niet als u de e-mail in de taal van de relatie wilt sturen, " +"of stel de tekst in op firma." #. module: account_followup #: view:account_followup.followup.line:0 @@ -1034,12 +1272,18 @@ msgid "" "installed\n" " using to top right icon." msgstr "" +"Schrijf hier de inleiding van uw brief,\n" +" in functie van het aanmaningsniveau. U kunt\n" +" de volgende parameters in de tekst gebruiken. " +"Vergeet\n" +" niet all geïnstalleerde talen te vertalen via " +"het pictogram in de rechterbovenhoek." #. module: account_followup #: view:account_followup.stat:0 #: model:ir.actions.act_window,name:account_followup.action_followup_stat msgid "Follow-ups Sent" -msgstr "" +msgstr "Verstuurde aanmaningen" #. module: account_followup #: field:account_followup.followup,name:0 @@ -1049,34 +1293,34 @@ msgstr "Naam:" #. module: account_followup #: field:res.partner,latest_followup_level_id:0 msgid "Latest Follow-up Level" -msgstr "" +msgstr "Laatste aanmaningsniveau" #. module: account_followup #: field:account_followup.stat,date_move:0 #: field:account_followup.stat.by.partner,date_move:0 msgid "First move" -msgstr "" +msgstr "Eerste boeking" #. module: account_followup #: model:ir.model,name:account_followup.model_account_followup_stat_by_partner msgid "Follow-up Statistics by Partner" -msgstr "" +msgstr "Aanmaningsstatistieken per relatie" #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:172 #, python-format msgid " letter(s) in report" -msgstr "" +msgstr " brieven in rapport" #. module: account_followup #: view:res.partner:0 msgid "Partners with Overdue Credits" -msgstr "" +msgstr "Klanten met openstaande facturen" #. module: account_followup #: view:res.partner:0 msgid "Customer Followup" -msgstr "" +msgstr "Aanmaningen" #. module: account_followup #: model:ir.actions.act_window,help:account_followup.action_account_followup_definition_form @@ -1092,42 +1336,52 @@ msgid "" "

          \n" " " msgstr "" +"

          \n" +" Klik als u de aanmaningsniveaus wilt instellen met de " +"daaraan gekoppelde acties.\n" +"

          \n" +" Per stap kunt u de acties opgeven en ook de dagen vervallen. " +"U kunt\n" +" brieven en e-mailsjablonen maken om specifieke berichten " +"naar de klant te sturen.\n" +"

          \n" +" " #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:166 #, python-format msgid "Follow-up letter of " -msgstr "" +msgstr "Aanmaningsbrief van " #. module: account_followup #: view:res.partner:0 msgid "The" -msgstr "" +msgstr "De" #. module: account_followup #: view:account_followup.print:0 msgid "Send follow-ups" -msgstr "" +msgstr "Aanmaningen versturen" #. module: account_followup #: view:account.move.line:0 msgid "Total credit" -msgstr "" +msgstr "Totaal credit" #. module: account_followup #: field:account_followup.followup.line,sequence:0 msgid "Sequence" -msgstr "" +msgstr "Volgorde" #. module: account_followup #: view:res.partner:0 msgid "Follow-ups To Do" -msgstr "" +msgstr "Te versturen aanmaningen" #. module: account_followup #: report:account_followup.followup.print:0 msgid "Customer Ref :" -msgstr "" +msgstr "Klantenref.:" #. module: account_followup #: report:account_followup.followup.print:0 @@ -1141,26 +1395,30 @@ msgid "" "the reminder. Could be negative if you want to send a polite alert " "beforehand." msgstr "" +"Het aantal dagen dat de vervaldatum van de factuur moet zijn overschreden " +"voordat een aanmaning wordt verstuurd. Kan negatief zijn als u vooraf een " +"vriendelijk bericht wilt sturen." #. module: account_followup #: help:res.partner,latest_followup_date:0 msgid "Latest date that the follow-up level of the partner was changed" msgstr "" +"Laatste datum waarop het aanmaningsniveau van de relatie is gewijzigd." #. module: account_followup #: field:account_followup.print,test_print:0 msgid "Test Print" -msgstr "" +msgstr "Testafdruk" #. module: account_followup #: view:account_followup.followup.line:0 msgid ": User Name" -msgstr "" +msgstr ": Gberuikersnaam" #. module: account_followup #: view:res.partner:0 msgid "Accounting" -msgstr "" +msgstr "Boekhouding" #. module: account_followup #: field:account_followup.stat,blocked:0 @@ -1170,7 +1428,7 @@ msgstr "Geblokkeerd" #. module: account_followup #: field:res.partner,payment_note:0 msgid "Customer Payment Promise" -msgstr "" +msgstr "Betalingsbelofte klant" #~ msgid "All payable entries" #~ msgstr "Alle crediteuren" diff --git a/addons/analytic_contract_hr_expense/i18n/nl_BE.po b/addons/analytic_contract_hr_expense/i18n/nl_BE.po new file mode 100644 index 00000000000..4bc0cc559e5 --- /dev/null +++ b/addons/analytic_contract_hr_expense/i18n/nl_BE.po @@ -0,0 +1,72 @@ +# Dutch (Belgium) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-04-15 16:33+0000\n" +"Last-Translator: Els Van Vossel (Agaplan) \n" +"Language-Team: Dutch (Belgium) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" +"X-Generator: Launchpad (build 16564)\n" + +#. module: analytic_contract_hr_expense +#: view:account.analytic.account:0 +msgid "or view" +msgstr "of bekijk" + +#. module: analytic_contract_hr_expense +#: view:account.analytic.account:0 +msgid "Nothing to invoice, create" +msgstr "Niets te factureren, aanmaken" + +#. module: analytic_contract_hr_expense +#: view:account.analytic.account:0 +msgid "expenses" +msgstr "onkosten" + +#. module: analytic_contract_hr_expense +#: model:ir.model,name:analytic_contract_hr_expense.model_account_analytic_account +msgid "Analytic Account" +msgstr "Analytische rekening" + +#. module: analytic_contract_hr_expense +#: code:addons/analytic_contract_hr_expense/analytic_contract_hr_expense.py:129 +#, python-format +msgid "Expenses to Invoice of %s" +msgstr "Te factureren onkosten van %s" + +#. module: analytic_contract_hr_expense +#: code:addons/analytic_contract_hr_expense/analytic_contract_hr_expense.py:121 +#, python-format +msgid "Expenses of %s" +msgstr "Onkosten van %s" + +#. module: analytic_contract_hr_expense +#: field:account.analytic.account,expense_invoiced:0 +#: field:account.analytic.account,expense_to_invoice:0 +#: field:account.analytic.account,remaining_expense:0 +msgid "unknown" +msgstr "onbekend" + +#. module: analytic_contract_hr_expense +#: field:account.analytic.account,est_expenses:0 +msgid "Estimation of Expenses to Invoice" +msgstr "Te verwachten te factureren onkosten" + +#. module: analytic_contract_hr_expense +#: field:account.analytic.account,charge_expenses:0 +msgid "Charge Expenses" +msgstr "Onkosten doorrekenen" + +#. module: analytic_contract_hr_expense +#: view:account.analytic.account:0 +msgid "⇒ Invoice" +msgstr "⇒ Factuur" diff --git a/addons/auth_crypt/i18n/nl_BE.po b/addons/auth_crypt/i18n/nl_BE.po index b9477ece5dc..abb65c8700f 100644 --- a/addons/auth_crypt/i18n/nl_BE.po +++ b/addons/auth_crypt/i18n/nl_BE.po @@ -1,42 +1,28 @@ # Dutch (Belgium) translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. +# FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-03 16:03+0000\n" -"PO-Revision-Date: 2012-07-26 17:52+0000\n" -"Last-Translator: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-04-15 16:02+0000\n" +"Last-Translator: Els Van Vossel (Agaplan) \n" "Language-Team: Dutch (Belgium) \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:53+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" +"X-Generator: Launchpad (build 16564)\n" -#. module: base_crypt -#: model:ir.model,name:base_crypt.model_res_users +#. module: auth_crypt +#: field:res.users,password_crypt:0 +msgid "Encrypted Password" +msgstr "Geëncrypteerd wachtwoord" + +#. module: auth_crypt +#: model:ir.model,name:auth_crypt.model_res_users msgid "Users" -msgstr "" - -#~ msgid "You can not have two users with the same login !" -#~ msgstr "U kunt geen twee gebruikers met dezelfde login maken." - -#, python-format -#~ msgid "Please specify the password !" -#~ msgstr "Gelieve een wachtwoord op te geven" - -#~ msgid "The chosen company is not in the allowed companies for this user" -#~ msgstr "" -#~ "De gekozen firma behoort niet tot de toegelaten bedrijven voor deze " -#~ "gebruiker." - -#~ msgid "res.users" -#~ msgstr "res.users" - -#, python-format -#~ msgid "Error" -#~ msgstr "Fout" +msgstr "Gebruikers" diff --git a/addons/auth_oauth_signup/i18n/nl_BE.po b/addons/auth_oauth_signup/i18n/nl_BE.po new file mode 100644 index 00000000000..04d5034d029 --- /dev/null +++ b/addons/auth_oauth_signup/i18n/nl_BE.po @@ -0,0 +1,23 @@ +# Dutch (Belgium) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-04-15 16:01+0000\n" +"Last-Translator: Els Van Vossel (Agaplan) \n" +"Language-Team: Dutch (Belgium) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" +"X-Generator: Launchpad (build 16564)\n" + +#. module: auth_oauth_signup +#: model:ir.model,name:auth_oauth_signup.model_res_users +msgid "Users" +msgstr "Gebruikers" diff --git a/addons/auth_signup/i18n/zh_CN.po b/addons/auth_signup/i18n/zh_CN.po index 333dd1be2dc..9beb3a044d3 100644 --- a/addons/auth_signup/i18n/zh_CN.po +++ b/addons/auth_signup/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-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-04 20:16+0000\n" -"Last-Translator: 盈通 ccdos \n" +"PO-Revision-Date: 2013-04-16 04:33+0000\n" +"Last-Translator: Key \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: 2013-03-16 05:52+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: auth_signup #: field:res.partner,signup_type:0 @@ -73,7 +73,7 @@ msgstr "重置密码" #: code:addons/auth_signup/static/src/js/auth_signup.js:117 #, python-format msgid "Please enter a password and confirm it." -msgstr "" +msgstr "请输入密码并确认。" #. module: auth_signup #: view:res.users:0 diff --git a/addons/base_crypt/i18n/nl_BE.po b/addons/base_crypt/i18n/nl_BE.po index 7ad3faa1ef5..d77a3f14b47 100644 --- a/addons/base_crypt/i18n/nl_BE.po +++ b/addons/base_crypt/i18n/nl_BE.po @@ -8,19 +8,19 @@ 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-07-26 17:52+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-04-15 16:02+0000\n" +"Last-Translator: Els Van Vossel (Agaplan) \n" "Language-Team: Dutch (Belgium) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:49+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: base_crypt #: model:ir.model,name:base_crypt.model_res_users msgid "Users" -msgstr "" +msgstr "Gebruikers" #~ msgid "You can not have two users with the same login !" #~ msgstr "U kunt geen twee gebruikers met dezelfde login maken." diff --git a/addons/base_status/i18n/nl_BE.po b/addons/base_status/i18n/nl_BE.po new file mode 100644 index 00000000000..6a3c2d83fc7 --- /dev/null +++ b/addons/base_status/i18n/nl_BE.po @@ -0,0 +1,80 @@ +# Dutch (Belgium) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-04-15 16:40+0000\n" +"Last-Translator: Els Van Vossel (Agaplan) \n" +"Language-Team: Dutch (Belgium) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" +"X-Generator: Launchpad (build 16564)\n" + +#. module: base_status +#: code:addons/base_status/base_state.py:107 +#, python-format +msgid "Error !" +msgstr "Fout" + +#. module: base_status +#: code:addons/base_status/base_state.py:166 +#, python-format +msgid "%s has been opened." +msgstr "%s is geopend." + +#. module: base_status +#: code:addons/base_status/base_state.py:199 +#, python-format +msgid "%s has been renewed." +msgstr "%s is vernieuwd." + +#. module: base_status +#: code:addons/base_status/base_stage.py:210 +#, python-format +msgid "Error!" +msgstr "Fout" + +#. module: base_status +#: code:addons/base_status/base_state.py:107 +#, python-format +msgid "" +"You can not escalate, you are already at the top level regarding your sales-" +"team category." +msgstr "" +"U kunt niet escaleren; u heeft het hoogste niveau in de verkoopteams al " +"bereikt." + +#. module: base_status +#: code:addons/base_status/base_state.py:193 +#, python-format +msgid "%s is now pending." +msgstr "%s is wachtend." + +#. module: base_status +#: code:addons/base_status/base_state.py:187 +#, python-format +msgid "%s has been canceled." +msgstr "%s is geannuleerd." + +#. module: base_status +#: code:addons/base_status/base_stage.py:210 +#, python-format +msgid "" +"You are already at the top level of your sales-team category.\n" +"Therefore you cannot escalate furthermore." +msgstr "" +"U bent al op het hoogste niveau van uw verkoopteam.\n" +"U kunt dus niet verder escaleren." + +#. module: base_status +#: code:addons/base_status/base_state.py:181 +#, python-format +msgid "%s has been closed." +msgstr "%s is gesloten." diff --git a/addons/base_vat/i18n/nl_BE.po b/addons/base_vat/i18n/nl_BE.po index 39966dc58ef..a2fe05c5705 100644 --- a/addons/base_vat/i18n/nl_BE.po +++ b/addons/base_vat/i18n/nl_BE.po @@ -7,19 +7,19 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-10-01 11:23+0000\n" +"PO-Revision-Date: 2013-04-15 16:03+0000\n" "Last-Translator: Els Van Vossel (Agaplan) \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: base_vat #: view:res.partner:0 msgid "Check Validity" -msgstr "" +msgstr "Geldigheid controleren" #. module: base_vat #: code:addons/base_vat/base_vat.py:147 @@ -45,7 +45,7 @@ msgstr "Bedrijven" #: code:addons/base_vat/base_vat.py:111 #, python-format msgid "Error!" -msgstr "" +msgstr "Fout" #. module: base_vat #: help:res.partner,vat_subjected:0 diff --git a/addons/claim_from_delivery/i18n/nl_BE.po b/addons/claim_from_delivery/i18n/nl_BE.po index a8793109b5f..38aab39e523 100644 --- a/addons/claim_from_delivery/i18n/nl_BE.po +++ b/addons/claim_from_delivery/i18n/nl_BE.po @@ -8,29 +8,29 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-10-01 11:24+0000\n" +"PO-Revision-Date: 2013-04-15 16:38+0000\n" "Last-Translator: Els Van Vossel (Agaplan) \n" "Language-Team: Dutch (Belgium) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:41+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: claim_from_delivery #: view:stock.picking.out:0 msgid "Claims" -msgstr "" +msgstr "Klachten" #. module: claim_from_delivery #: model:res.request.link,name:claim_from_delivery.request_link_claim_from_delivery msgid "Delivery Order" -msgstr "" +msgstr "Leveringsorder" #. module: claim_from_delivery #: model:ir.actions.act_window,name:claim_from_delivery.action_claim_from_delivery msgid "Claim From Delivery" -msgstr "" +msgstr "Klachten van levering" #~ msgid "Claim" #~ msgstr "Klacht" diff --git a/addons/contacts/i18n/nl_BE.po b/addons/contacts/i18n/nl_BE.po new file mode 100644 index 00000000000..78fdb540ad6 --- /dev/null +++ b/addons/contacts/i18n/nl_BE.po @@ -0,0 +1,46 @@ +# Dutch (Belgium) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-04-15 16:01+0000\n" +"Last-Translator: Els Van Vossel (Agaplan) \n" +"Language-Team: Dutch (Belgium) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" +"X-Generator: Launchpad (build 16564)\n" + +#. module: contacts +#: model:ir.actions.act_window,help:contacts.action_contacts +msgid "" +"

          \n" +" Click to add a contact in your address book.\n" +"

          \n" +" OpenERP helps you easily track all activities related to\n" +" a customer; discussions, history of business opportunities,\n" +" documents, etc.\n" +"

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

          \n" +" Klik hier om een contactpersoon toe te voegen aan het " +"adresboek.\n" +"

          \n" +" Met OpenERP kunt u eenvoudig alle activiteiten registreren met " +"betrekking tot \n" +" een klant, discussies, opportuniteiten, documenten, enz. \n" +"

          \n" +" " + +#. module: contacts +#: model:ir.actions.act_window,name:contacts.action_contacts +#: model:ir.ui.menu,name:contacts.menu_contacts +msgid "Contacts" +msgstr "Contactpersonen" diff --git a/addons/edi/i18n/nl_BE.po b/addons/edi/i18n/nl_BE.po index f5fc80a6fcc..aa96f26d13b 100644 --- a/addons/edi/i18n/nl_BE.po +++ b/addons/edi/i18n/nl_BE.po @@ -8,35 +8,35 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-10-02 08:10+0000\n" +"PO-Revision-Date: 2013-04-15 16:04+0000\n" "Last-Translator: Els Van Vossel (Agaplan) \n" "Language-Team: Dutch (Belgium) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:50+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: edi #. openerp-web #: code:addons/edi/static/src/js/edi.js:67 #, python-format msgid "Reason:" -msgstr "" +msgstr "Reden:" #. module: edi #. openerp-web #: code:addons/edi/static/src/js/edi.js:60 #, python-format msgid "The document has been successfully imported!" -msgstr "" +msgstr "Het document is met succes geïmporteerd" #. module: edi #. openerp-web #: code:addons/edi/static/src/js/edi.js:65 #, python-format msgid "Sorry, the document could not be imported." -msgstr "" +msgstr "Sorry, het document kan niet worden geïmporteerd" #. module: edi #: model:ir.model,name:edi.model_res_company @@ -53,13 +53,13 @@ msgstr "Munt" #: code:addons/edi/static/src/js/edi.js:71 #, python-format msgid "Document Import Notification" -msgstr "" +msgstr "Documentimportbericht" #. module: edi #: code:addons/edi/models/edi.py:130 #, python-format msgid "Missing application." -msgstr "" +msgstr "Ontbrekend programma" #. module: edi #: code:addons/edi/models/edi.py:131 @@ -87,7 +87,7 @@ msgstr "Relatie" #. module: edi #: model:ir.model,name:edi.model_edi_edi msgid "EDI Subsystem" -msgstr "" +msgstr "EDI-subsysteem" #~ msgid "The currency code must be unique per company!" #~ msgstr "De munt moet uniek zijn per firma." diff --git a/addons/fleet/i18n/nl_BE.po b/addons/fleet/i18n/nl_BE.po new file mode 100644 index 00000000000..380de8a945e --- /dev/null +++ b/addons/fleet/i18n/nl_BE.po @@ -0,0 +1,1912 @@ +# Dutch (Belgium) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:06+0000\n" +"PO-Revision-Date: 2013-04-15 16:40+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Dutch (Belgium) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" +"X-Generator: Launchpad (build 16564)\n" + +#. module: fleet +#: selection:fleet.vehicle,fuel_type:0 +msgid "Hybrid" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_compact +msgid "Compact" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_1 +msgid "A/C Compressor Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,vin_sn:0 +msgid "Unique number written on the vehicle motor (VIN/SN number)" +msgstr "" + +#. module: fleet +#: selection:fleet.service.type,category:0 +#: view:fleet.vehicle.log.contract:0 +#: view:fleet.vehicle.log.services:0 +msgid "Service" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Monthly" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:62 +#, python-format +msgid "Unknown" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_20 +msgid "Engine/Drive Belt(s) Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Vehicle costs" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,fuel_type:0 +msgid "Diesel" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:421 +#, python-format +msgid "License Plate: from '%s' to '%s'" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_38 +msgid "Resurface Rotors" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +#: view:fleet.vehicle.model:0 +msgid "Group By..." +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_32 +msgid "Oil Pump Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_18 +msgid "Engine Belt Inspection" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,cost_frequency:0 +msgid "No" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,power:0 +msgid "Power in kW of the vehicle" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_2 +msgid "Depreciation and Interests" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,insurer_id:0 +#: field:fleet.vehicle.log.fuel,vendor_id:0 +#: field:fleet.vehicle.log.services,vendor_id:0 +msgid "Supplier" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_35 +msgid "Power Steering Hose Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Odometer details" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "Has Alert(s)" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.fuel,liter:0 +msgid "Liter" +msgstr "" + +#. module: fleet +#: model:ir.actions.client,name:fleet.action_fleet_menu +msgid "Open Fleet Menu" +msgstr "" + +#. module: fleet +#: view:board.board:0 +msgid "Fuel Costs" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_9 +msgid "Battery Inspection" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,company_id:0 +msgid "Company" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Invoice Date" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +msgid "Refueling Details" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:669 +#, python-format +msgid "%s contract(s) need(s) to be renewed and/or closed!" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Indicative Costs" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_16 +msgid "Charging System Diagnosis" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,car_value:0 +msgid "Value of the bought vehicle" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_44 +msgid "Tie Rod End Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_24 +msgid "Head Gasket(s) Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +#: selection:fleet.vehicle.cost,cost_type:0 +msgid "Services" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,odometer:0 +#: 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 "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +#: field:fleet.vehicle.log.contract,notes:0 +msgid "Terms and Conditions" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_kanban +msgid "Vehicles with alerts" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.fleet_vehicle_costs_act +#: model:ir.ui.menu,name:fleet.fleet_vehicle_costs_menu +msgid "Vehicle Costs" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Total Cost" +msgstr "" + +#. module: fleet +#: selection:fleet.service.type,category:0 +msgid "Both" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,cost_id:0 +#: field:fleet.vehicle.log.fuel,cost_id:0 +#: field:fleet.vehicle.log.services,cost_id:0 +msgid "Automatically created field to link to parent fleet.vehicle.cost" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Terminate Contract" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,parent_id:0 +msgid "Parent cost to this current cost" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Frequency of the recuring cost" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_1 +msgid "Calculation Benefit In Kind" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,expiration_date:0 +msgid "" +"Date when the coverage of the contract expirates (by default, one year after " +"begin date)" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +#: field:fleet.vehicle.log.fuel,notes:0 +#: view:fleet.vehicle.log.services:0 +#: field:fleet.vehicle.log.services,notes:0 +msgid "Notes" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:47 +#, python-format +msgid "Operation not allowed!" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: fleet +#: model:res.groups,name:fleet.group_fleet_user +msgid "User" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,vehicle_id:0 +msgid "Vehicle concerned by this log" +msgstr "" + +#. 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 "" + +#. module: fleet +#: field:fleet.vehicle,message_unread:0 +msgid "Unread Messages" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_6 +msgid "Air Filter Replacement" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_tag +msgid "fleet.vehicle.tag" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "show the services logs for this vehicle" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,contract_renewal_name:0 +msgid "Name of contract to renew soon" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_senior +msgid "Senior" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,state:0 +msgid "Choose wheter the contract is still valid or not" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,transmission:0 +msgid "Automatic" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:414 +#, python-format +msgid "Driver: from '%s' to '%s'" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "and" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.model.brand,image_medium:0 +msgid "Medium-sized photo" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_34 +msgid "Oxygen Sensor Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.services:0 +msgid "Service Type" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,transmission:0 +msgid "Transmission Used by the vehicle" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:740 +#: view:fleet.vehicle.log.contract:0 +#: model:ir.actions.act_window,name:fleet.act_renew_contract +#, python-format +msgid "Renew Contract" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "show the odometer logs for this vehicle" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,odometer_unit:0 +msgid "Unit of the odometer " +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.services:0 +msgid "Services Costs Per Month" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Effective Costs" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_8 +msgid "Repair and maintenance" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,purchaser_id:0 +msgid "Person to which the contract is signed for" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_log_contract_act +msgid "" +"

          \n" +" Click to create a new contract. \n" +"

          \n" +" Manage all your contracts (leasing, insurances, etc.) with\n" +" their related services, costs. OpenERP will automatically " +"warn\n" +" you when some contracts have to be renewed.\n" +"

          \n" +" Each contract (e.g.: leasing) may include several services\n" +" (reparation, insurances, periodic maintenance).\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_service_type +msgid "Type of services available on a vehicle" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.fleet_vehicle_service_types_act +#: model:ir.ui.menu,name:fleet.fleet_vehicle_service_types_menu +msgid "Service Types" +msgstr "" + +#. module: fleet +#: view:board.board:0 +msgid "Contracts Costs" +msgstr "" + +#. 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 "" + +#. 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 "" + +#. module: fleet +#: view:fleet.vehicle.model.brand:0 +msgid "" +"$('.oe_picture').load(function() { if($(this).width() > $(this).height()) { " +"$(this).addClass('oe_employee_picture_wide') } });" +msgstr "" + +#. module: fleet +#: view:board.board:0 +msgid "Vehicles With Alerts" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_costs_act +msgid "" +"

          \n" +" Click to create a new cost.\n" +"

          \n" +" OpenERP helps you managing the costs for your different\n" +" vehicles. Costs are created automatically from services,\n" +" contracts (fixed or recurring) and fuel logs.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "show the fuel logs for this vehicle" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,purchaser_id:0 +msgid "Contractor" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,license_plate:0 +msgid "License Plate" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,state:0 +msgid "To Close" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Recurring Cost Frequency" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.fuel,inv_ref:0 +#: field:fleet.vehicle.log.services,inv_ref:0 +msgid "Invoice Reference" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,message_follower_ids:0 +msgid "Followers" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,location:0 +msgid "Location" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Costs Per Month" +msgstr "" + +#. module: fleet +#: field:fleet.contract.state,name:0 +msgid "Contract Status" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,contract_renewal_total:0 +msgid "Total of contracts due or overdue minus one" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,cost_subtype_id:0 +msgid "Type" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,contract_renewal_overdue:0 +msgid "Has Contracts Overdued" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,amount:0 +msgid "Total Price" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_27 +msgid "Heater Core Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_14 +msgid "Car Wash" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,driver_id:0 +msgid "Driver of the vehicle" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "other(s)" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_refueling +msgid "Refueling" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,message_summary:0 +msgid "" +"Holds the Chatter summary (number of messages, ...). This summary is " +"directly in html format in order to be inserted in kanban views." +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_5 +msgid "A/C Recharge" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_log_fuel +msgid "Fuel log for vehicles" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "Engine Options" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +msgid "Fuel Costs Per Month" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_sedan +msgid "Sedan" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,seats:0 +msgid "Seats Number" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_convertible +msgid "Convertible" +msgstr "" + +#. module: fleet +#: model:ir.ui.menu,name:fleet.fleet_configuration +msgid "Configuration" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +#: field:fleet.vehicle.log.contract,sum_cost:0 +msgid "Indicative Costs Total" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_junior +msgid "Junior" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,model_id:0 +msgid "Model of the vehicle" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_state_act +msgid "" +"

          \n" +" Click to create a vehicule status.\n" +"

          \n" +" You can customize available status to track the evolution " +"of\n" +" each vehicule. Example: Active, Being Repaired, Sold.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +#: field:fleet.vehicle,log_fuel:0 +#: view:fleet.vehicle.log.fuel:0 +msgid "Fuel Logs" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:409 +#: code:addons/fleet/fleet.py:413 +#: code:addons/fleet/fleet.py:417 +#: code:addons/fleet/fleet.py:420 +#, python-format +msgid "None" +msgstr "" + +#. module: fleet +#: 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 "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_12 +msgid "Brake Inspection" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,state_id:0 +msgid "Current state of the vehicle" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,transmission:0 +msgid "Manual" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_52 +msgid "Wheel Bearing Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,cost_subtype_id:0 +msgid "Cost type purchased with this cost" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,fuel_type:0 +msgid "Gasoline" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_model_brand_act +msgid "" +"

          \n" +" Click to create a new brand.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,start_date:0 +msgid "Contract Start Date" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,odometer_unit:0 +msgid "Odometer Unit" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_30 +msgid "Intake Manifold Gasket Replacement" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Daily" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_6 +msgid "Snow tires" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,date:0 +msgid "Date when the cost has been executed" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +#: view:fleet.vehicle.model:0 +msgid "Vehicles costs" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_log_services +msgid "Services for vehicles" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Indicative Cost" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_26 +msgid "Heater Control Valve Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +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 "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,state:0 +msgid "Terminated" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_cost +msgid "Cost related to a vehicle" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_33 +msgid "Other Maintenance" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +#: field:fleet.vehicle.cost,parent_id:0 +msgid "Parent" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,state_id:0 +#: view:fleet.vehicle.state:0 +msgid "State" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,cost_generated:0 +msgid "Recurring Cost Amount" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_49 +msgid "Transmission Replacement" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_log_fuel_act +msgid "" +"

          \n" +" Click to create a new fuel log. \n" +"

          \n" +" Here you can add refuelling entries for all vehicles. You " +"can\n" +" also filter logs of a particular vehicle using the search\n" +" field.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_11 +msgid "Brake Caliper Replacement" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,odometer:0 +msgid "Last Odometer" +msgstr "" + +#. 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 "" + +#. module: fleet +#: field:fleet.vehicle,doors:0 +msgid "Doors Number" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,acquisition_date:0 +msgid "Date when the vehicle has been bought" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.model:0 +msgid "Models" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "amount" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,fuel_type:0 +msgid "Fuel Used by the vehicle" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Set Contract In Progress" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,odometer_unit:0 +#: field:fleet.vehicle.odometer,unit:0 +msgid "Unit" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,horsepower:0 +msgid "Horsepower" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,image:0 +#: field:fleet.vehicle,image_medium:0 +#: field:fleet.vehicle,image_small:0 +#: field:fleet.vehicle.model,image:0 +#: field:fleet.vehicle.model,image_medium:0 +#: field:fleet.vehicle.model,image_small:0 +#: field:fleet.vehicle.model.brand,image:0 +msgid "Logo" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,horsepower_tax:0 +msgid "Horsepower Taxation" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,log_services:0 +#: view:fleet.vehicle.log.services:0 +msgid "Services Logs" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.model:0 +msgid "Brand" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_43 +msgid "Thermostat Replacement" +msgstr "" + +#. module: fleet +#: field:fleet.service.type,category:0 +msgid "Category" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_log_fuel_graph +msgid "Fuel Costs by Month" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.model.brand,image:0 +msgid "" +"This field holds the image used as logo for the brand, limited to " +"1024x1024px." +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_11 +msgid "Management Fee" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "All vehicles" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +#: view:fleet.vehicle.log.services:0 +msgid "Additional Details" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_log_services_graph +msgid "Services Costs by Month" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_9 +msgid "Assistance" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.fuel,price_per_liter:0 +msgid "Price Per Liter" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_17 +msgid "Door Window Motor/Regulator Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_46 +msgid "Tire Service" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_8 +msgid "Ball Joint Replacement" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,fuel_type:0 +msgid "Fuel Type" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_22 +msgid "Fuel Injector Replacement" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.fleet_vehicle_state_act +#: model:ir.ui.menu,name:fleet.fleet_vehicle_state_menu +msgid "Vehicle Status" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_50 +msgid "Water Pump Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,location:0 +msgid "Location of the vehicle (garage, ...)" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_28 +msgid "Heater Hose Replacement" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,state:0 +msgid "Status" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_40 +msgid "Rotor Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.model,brand_id:0 +msgid "Brand of the vehicle" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,start_date:0 +msgid "Date when the coverage of the contract begins" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,fuel_type:0 +msgid "Electric" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,tag_ids:0 +msgid "Tags" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +#: field:fleet.vehicle,log_contracts:0 +msgid "Contracts" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_13 +msgid "Brake Pad(s) Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +#: view:fleet.vehicle.log.services:0 +msgid "Odometer Details" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,driver_id:0 +msgid "Driver" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.model.brand,image_small:0 +msgid "" +"Small-sized photo of the brand. It is automatically resized as a 64x64px " +"image, with aspect ratio preserved. Use this field anywhere a small image is " +"required." +msgstr "" + +#. module: fleet +#: view:board.board:0 +msgid "Fleet Dashboard" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_break +msgid "Break" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_contract_omnium +msgid "Omnium" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.services:0 +msgid "Services Details" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_15 +msgid "Residual value (Excluding VAT)" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_7 +msgid "Alternator Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_3 +msgid "A/C Diagnosis" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_23 +msgid "Fuel Pump Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Activation Cost" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Cost Type" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_4 +msgid "A/C Evaporator Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "show all the costs for this vehicle" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.odometer:0 +msgid "Odometer Values Per Month" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_model_act +msgid "" +"

          \n" +" Click to create a new model.\n" +"

          \n" +" You can define several models (e.g. A3, A4) for each brand " +"(Audi).\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_act +msgid "" +"

          \n" +" Click to create a new vehicle. \n" +"

          \n" +" You will be able to manage your fleet by keeping track of " +"the\n" +" contracts, services, fixed and recurring costs, odometers " +"and\n" +" fuel logs associated to each vehicle.\n" +"

          \n" +" OpenERP will warn you when services or contract have to be\n" +" renewed.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_13 +msgid "Entry into service tax" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,expiration_date:0 +msgid "Contract Expiration Date" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Cost Subtype" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.open_board_fleet +msgid "" +"
          \n" +"

          \n" +" Fleet dashboard is empty.\n" +"

          \n" +" To add your first report into this dashboard, go to any\n" +" menu, switch to list or graph view, and click 'Add " +"to\n" +" Dashboard' in the extended search options.\n" +"

          \n" +" You can filter and group data before inserting into the\n" +" dashboard using the search options.\n" +"

          \n" +"
          \n" +" " +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_12 +msgid "Rent (Excluding VAT)" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,odometer_unit:0 +msgid "Kilometers" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +msgid "Vehicle Details" +msgstr "" + +#. 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 "" + +#. 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 "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_10 +msgid "Battery Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +#: field:fleet.vehicle.cost,date:0 +#: field:fleet.vehicle.odometer,date:0 +msgid "Date" +msgstr "" + +#. 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 "" + +#. module: fleet +#: selection:fleet.vehicle,odometer_unit:0 +msgid "Miles" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,cost_generated:0 +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 "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_17 +msgid "Emissions" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_model +msgid "Model of a vehicle" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.action_fleet_reporting_costs +#: model:ir.actions.act_window,help:fleet.action_fleet_reporting_costs_non_effective +msgid "" +"

          \n" +" OpenERP helps you managing the costs for your different vehicles\n" +" Costs are generally created from services and contract and appears " +"here.\n" +"

          \n" +"

          \n" +" Thanks to the different filters, OpenERP can only print the " +"effective\n" +" costs, sort them by type and by vehicle.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,car_value:0 +msgid "Car Value" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.open_board_fleet +#: model:ir.module.category,name:fleet.module_fleet_category +#: model:ir.ui.menu,name:fleet.menu_fleet_dashboard +#: model:ir.ui.menu,name:fleet.menu_fleet_reporting +#: model:ir.ui.menu,name:fleet.menu_root +msgid "Fleet" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_14 +msgid "Total expenses (Excluding VAT)" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,odometer_id:0 +msgid "Odometer" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_45 +msgid "Tire Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.service.type:0 +msgid "Service types" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.fuel,purchaser_id:0 +#: field:fleet.vehicle.log.services,purchaser_id:0 +msgid "Purchaser" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_3 +msgid "Tax roll" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.model:0 +#: field:fleet.vehicle.model,vendors:0 +msgid "Vendors" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_contract_leasing +msgid "Leasing" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.model.brand,image_medium:0 +msgid "" +"Medium-sized logo of the brand. It is automatically resized as a 128x128px " +"image, with aspect ratio preserved. Use this field in form views or some " +"kanban views." +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Weekly" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +#: view:fleet.vehicle.odometer:0 +msgid "Odometer Logs" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,acquisition_date:0 +msgid "Acquisition Date" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_odometer +msgid "Odometer log for a vehicle" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,cost_type:0 +msgid "Category of the cost" +msgstr "" + +#. 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 "" + +#. module: fleet +#: field:fleet.vehicle,contract_renewal_due_soon:0 +msgid "Has Contracts to renew" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_31 +msgid "Oil Change" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.model.brand,image_small:0 +msgid "Smal-sized photo" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_model_brand +msgid "Brand model of the vehicle" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_51 +msgid "Wheel Alignment" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_purchased +msgid "Purchased" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_odometer_act +msgid "" +"

          \n" +" Here you can add various odometer entries for all vehicles.\n" +" You can also show odometer value for a particular vehicle " +"using\n" +" the search field.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.model,brand_id:0 +#: view:fleet.vehicle.model.brand:0 +msgid "Model Brand" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "General Properties" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_21 +msgid "Exhaust Manifold Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_47 +msgid "Transmission Filter Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_10 +msgid "Replacement Vehicle" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,state:0 +msgid "In Progress" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Yearly" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.model,modelname:0 +msgid "Model name" +msgstr "" + +#. module: fleet +#: view:board.board:0 +#: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_costs_graph +msgid "Costs by Month" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_18 +msgid "Touring Assistance" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,power:0 +msgid "Power (kW)" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:418 +#, python-format +msgid "State: from '%s' to '%s'" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_2 +msgid "A/C Condenser Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_19 +msgid "Engine Coolant Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Cost Details" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:410 +#, python-format +msgid "Model: from '%s' to '%s'" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.cost,cost_type:0 +msgid "Other" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Contract details" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_leasing +msgid "Employee Car" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,auto_generated:0 +msgid "Automatically Generated" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.cost,cost_type:0 +msgid "Fuel" +msgstr "" + +#. module: fleet +#: sql_constraint:fleet.vehicle.state:0 +msgid "State name already exists" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_37 +msgid "Radiator Repair" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_log_contract +msgid "Contract information on a vehicle" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,days_left:0 +msgid "Warning Date" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_19 +msgid "Residual value in %" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "Additional Properties" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_state +msgid "fleet.vehicle.state" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Contract Costs Per Month" +msgstr "" + +#. 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 "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_48 +msgid "Transmission Fluid Replacement" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.model.brand,name:0 +msgid "Brand Name" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_36 +msgid "Power Steering Pump Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,contract_id:0 +msgid "Contract attached to this cost" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:397 +#, python-format +msgid "Vehicle %s has been added to the fleet!" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +#: view:fleet.vehicle.log.fuel:0 +#: view:fleet.vehicle.log.services:0 +msgid "Price" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,odometer:0 +#: field:fleet.vehicle.odometer,value:0 +msgid "Odometer Value" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +#: view:fleet.vehicle.cost:0 +#: field:fleet.vehicle.cost,vehicle_id:0 +#: field:fleet.vehicle.odometer,vehicle_id:0 +msgid "Vehicle" +msgstr "" + +#. 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 "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.action_fleet_vehicle_kanban +msgid "" +"

          \n" +" Here are displayed vehicles for which one or more contracts need " +"to be renewed. If you see this message, then there is no contracts to " +"renew.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_15 +msgid "Catalytic Converter Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_25 +msgid "Heater Blower Motor Replacement" +msgstr "" + +#. 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 "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,notes:0 +msgid "Write here all supplementary informations relative to this contract" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_29 +msgid "Ignition Coil Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_16 +msgid "Options" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_contract_repairing +msgid "Repairing" +msgstr "" + +#. 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 "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,ins_ref:0 +msgid "Contract Reference" +msgstr "" + +#. module: fleet +#: field:fleet.service.type,name:0 +#: field:fleet.vehicle,name:0 +#: field:fleet.vehicle.cost,name:0 +#: field:fleet.vehicle.log.contract,name:0 +#: field:fleet.vehicle.model,name:0 +#: field:fleet.vehicle.odometer,name:0 +#: field:fleet.vehicle.state,name:0 +#: field:fleet.vehicle.tag,name:0 +msgid "Name" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,doors:0 +msgid "Number of doors of the vehicle" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,transmission:0 +msgid "Transmission" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,vin_sn:0 +msgid "Chassis Number" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,color:0 +msgid "Color of the vehicle" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_log_services_act +msgid "" +"

          \n" +" Click to create a new service entry. \n" +"

          \n" +" OpenERP helps you keeping track of all the services done\n" +" on your vehicle. Services can be of many type: occasional\n" +" repair, fixed maintenance, etc.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,co2:0 +msgid "CO2 Emissions" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Contract logs" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "Costs" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_log_contract_graph +msgid "Contracts Costs by Month" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,model_id:0 +#: view:fleet.vehicle.model:0 +msgid "Model" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_41 +msgid "Spark Plug Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle +msgid "Information on a vehicle" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,co2:0 +msgid "CO2 emissions of the vehicle" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_53 +msgid "Windshield Wiper(s) Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +#: field:fleet.vehicle.log.contract,generated_cost_ids:0 +msgid "Generated Costs" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.state,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,color:0 +msgid "Color" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_service_types_act +msgid "" +"

          \n" +" Click to create a new type of service.\n" +"

          \n" +" Each service can used in contracts, as a standalone service " +"or both.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: view:board.board:0 +msgid "Services Costs" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:47 +#, python-format +msgid "Emptying the odometer value of a vehicle is not allowed." +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,seats:0 +msgid "Number of seats of the vehicle" +msgstr "" + +#. module: fleet +#: model:res.groups,name:fleet.group_fleet_manager +msgid "Manager" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.services:0 +msgid "Cost" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_39 +msgid "Rotate Tires" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_42 +msgid "Starter Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +#: field:fleet.vehicle.cost,year:0 +msgid "Year" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,license_plate:0 +msgid "License plate number of the vehicle (ie: plate number for a car)" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_contract_state +msgid "Contains the different possible status of a leasing contract" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "show the contract for this vehicle" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.services:0 +msgid "Total" +msgstr "" + +#. module: fleet +#: help:fleet.service.type,category:0 +msgid "" +"Choose wheter the service refer to contracts, vehicle services or both" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,cost_type:0 +msgid "For internal purpose only" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.state,sequence:0 +msgid "Used to order the note stages" +msgstr "" From 46e5767367c58a9901d9795b3bd7e50e6427d30b Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Tue, 16 Apr 2013 05:27:14 +0000 Subject: [PATCH 139/160] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20130416052714-8akmv4r170byjx0k --- openerp/addons/base/i18n/he.po | 12 ++++++------ openerp/addons/base/i18n/ru.po | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/openerp/addons/base/i18n/he.po b/openerp/addons/base/i18n/he.po index cf7f6254fd8..a8bbce6e864 100644 --- a/openerp/addons/base/i18n/he.po +++ b/openerp/addons/base/i18n/he.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-server\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:36+0000\n" -"PO-Revision-Date: 2013-03-30 16:54+0000\n" -"Last-Translator: sef \n" +"PO-Revision-Date: 2013-04-15 11:25+0000\n" +"Last-Translator: Liron Achdut \n" "Language-Team: Hebrew \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-31 05:57+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-16 05:27+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -29,12 +29,12 @@ msgstr "" #. module: base #: view:res.partner.bank:0 msgid "e.g. GEBABEBB" -msgstr "" +msgstr "לדוגמא: GEBABEBB" #. module: base #: model:res.country,name:base.sh msgid "Saint Helena" -msgstr "סנט הלנה" +msgstr "סיינט הלנה" #. module: base #: view:ir.actions.report.xml:0 diff --git a/openerp/addons/base/i18n/ru.po b/openerp/addons/base/i18n/ru.po index 41341841f86..b0bdfb52870 100644 --- a/openerp/addons/base/i18n/ru.po +++ b/openerp/addons/base/i18n/ru.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openobject-server\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:36+0000\n" -"PO-Revision-Date: 2013-04-12 11:45+0000\n" -"Last-Translator: Rinat Karimov \n" +"PO-Revision-Date: 2013-04-15 09:15+0000\n" +"Last-Translator: Paul Korotkov \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-13 06:31+0000\n" +"X-Launchpad-Export-Date: 2013-04-16 05:27+0000\n" "X-Generator: Launchpad (build 16564)\n" #. module: base @@ -26,7 +26,7 @@ msgid "" " " msgstr "" "\n" -"Модуль для проверки написания и проверки печати.\n" +"Модуль для составления и распечатки квитанций.\n" "================================================\n" " " @@ -720,7 +720,7 @@ msgstr "Продажи и закупки" #. module: base #: view:res.partner:0 msgid "Put an internal note..." -msgstr "" +msgstr "Поместите внутреннюю заметку..." #. module: base #: view:ir.translation:0 @@ -1105,7 +1105,7 @@ msgstr "Обновление модуля" #: view:res.partner.bank:0 #: view:res.users:0 msgid "ZIP" -msgstr "" +msgstr "Индекс" #. module: base #: selection:base.language.install,lang:0 From e8e6f434f4cc3521a02cf03a96404ead4113b41a Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Tue, 16 Apr 2013 05:27:41 +0000 Subject: [PATCH 140/160] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20130416052741-3au0bx7ha7of6lzg --- addons/account/i18n/fr.po | 11 +- addons/account/i18n/nl.po | 12 +- .../i18n/nl_BE.po | 72 + addons/auth_crypt/i18n/nl_BE.po | 42 +- addons/auth_oauth_signup/i18n/nl_BE.po | 23 + addons/base_calendar/i18n/zh_CN.po | 18 +- addons/base_status/i18n/nl_BE.po | 80 + addons/contacts/i18n/nl_BE.po | 46 + addons/fleet/i18n/nl_BE.po | 1927 +++++++++++++++++ addons/mrp/i18n/fr.po | 14 +- addons/purchase/i18n/fr.po | 12 +- 11 files changed, 2200 insertions(+), 57 deletions(-) create mode 100644 addons/analytic_contract_hr_expense/i18n/nl_BE.po create mode 100644 addons/auth_oauth_signup/i18n/nl_BE.po create mode 100644 addons/base_status/i18n/nl_BE.po create mode 100644 addons/contacts/i18n/nl_BE.po create mode 100644 addons/fleet/i18n/nl_BE.po diff --git a/addons/account/i18n/fr.po b/addons/account/i18n/fr.po index f99e7033a54..d6676248e19 100644 --- a/addons/account/i18n/fr.po +++ b/addons/account/i18n/fr.po @@ -8,14 +8,15 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-04-10 02:55+0000\n" -"Last-Translator: sulliwane \n" +"PO-Revision-Date: 2013-04-15 08:33+0000\n" +"Last-Translator: Frederic Clementi - Camptocamp.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: 2013-04-11 14:43+0000\n" -"X-Generator: Launchpad (build 16550)\n" +"X-Launchpad-Export-Date: 2013-04-16 05:27+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -10436,7 +10437,7 @@ msgstr "" #. module: account #: field:account.bank.statement.line,name:0 msgid "OBI" -msgstr "" +msgstr "Libellé" #. module: account #: help:res.partner,property_account_payable:0 diff --git a/addons/account/i18n/nl.po b/addons/account/i18n/nl.po index e3d775b9a8c..512772c4469 100644 --- a/addons/account/i18n/nl.po +++ b/addons/account/i18n/nl.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-04-14 17:39+0000\n" +"PO-Revision-Date: 2013-04-15 07:58+0000\n" "Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-15 06:06+0000\n" +"X-Launchpad-Export-Date: 2013-04-16 05:27+0000\n" "X-Generator: Launchpad (build 16564)\n" #. module: account @@ -803,7 +803,7 @@ msgstr "" #: code:addons/account/report/account_partner_balance.py:297 #, python-format msgid "Receivable Accounts" -msgstr "Debiteuren" +msgstr "Debiteuren rekening" #. module: account #: view:account.config.settings:0 @@ -1643,7 +1643,7 @@ msgstr "Bankafschrift" #. module: account #: field:res.partner,property_account_receivable:0 msgid "Account Receivable" -msgstr "Debiteuren" +msgstr "Debiteuren rekening" #. module: account #: code:addons/account/account.py:612 @@ -7131,7 +7131,7 @@ msgstr "Annuleer" #: model:account.account.type,name:account.data_account_type_receivable #: selection:account.entries.report,type:0 msgid "Receivable" -msgstr "Debiteuren" +msgstr "Debiteuren rekening" #. module: account #: constraint:account.move.line:0 @@ -11396,7 +11396,7 @@ msgstr "Afgeletterde transacties" #. module: account #: model:ir.model,name:account.model_report_account_receivable msgid "Receivable accounts" -msgstr "Debiteuren" +msgstr "Debiteuren rekening" #. module: account #: selection:account.model.line,date_maturity:0 diff --git a/addons/analytic_contract_hr_expense/i18n/nl_BE.po b/addons/analytic_contract_hr_expense/i18n/nl_BE.po new file mode 100644 index 00000000000..87523e7f977 --- /dev/null +++ b/addons/analytic_contract_hr_expense/i18n/nl_BE.po @@ -0,0 +1,72 @@ +# Dutch (Belgium) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-03-07 08:37+0000\n" +"PO-Revision-Date: 2013-04-15 16:33+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Dutch (Belgium) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-04-16 05:27+0000\n" +"X-Generator: Launchpad (build 16564)\n" + +#. module: analytic_contract_hr_expense +#: view:account.analytic.account:0 +msgid "or view" +msgstr "of bekijk" + +#. module: analytic_contract_hr_expense +#: view:account.analytic.account:0 +msgid "Nothing to invoice, create" +msgstr "Niets te factureren, aanmaken" + +#. module: analytic_contract_hr_expense +#: view:account.analytic.account:0 +msgid "expenses" +msgstr "onkosten" + +#. module: analytic_contract_hr_expense +#: model:ir.model,name:analytic_contract_hr_expense.model_account_analytic_account +msgid "Analytic Account" +msgstr "Analytische rekening" + +#. module: analytic_contract_hr_expense +#: code:addons/analytic_contract_hr_expense/analytic_contract_hr_expense.py:129 +#, python-format +msgid "Expenses to Invoice of %s" +msgstr "Te factureren onkosten van %s" + +#. module: analytic_contract_hr_expense +#: code:addons/analytic_contract_hr_expense/analytic_contract_hr_expense.py:121 +#, python-format +msgid "Expenses of %s" +msgstr "Onkosten van %s" + +#. module: analytic_contract_hr_expense +#: field:account.analytic.account,expense_invoiced:0 +#: field:account.analytic.account,expense_to_invoice:0 +#: field:account.analytic.account,remaining_expense:0 +msgid "unknown" +msgstr "onbekend" + +#. module: analytic_contract_hr_expense +#: field:account.analytic.account,est_expenses:0 +msgid "Estimation of Expenses to Invoice" +msgstr "Te verwachten te factureren onkosten" + +#. module: analytic_contract_hr_expense +#: field:account.analytic.account,charge_expenses:0 +msgid "Charge Expenses" +msgstr "Onkosten doorrekenen" + +#. module: analytic_contract_hr_expense +#: view:account.analytic.account:0 +msgid "⇒ Invoice" +msgstr "⇒ Factuur" diff --git a/addons/auth_crypt/i18n/nl_BE.po b/addons/auth_crypt/i18n/nl_BE.po index b9477ece5dc..0a618f88bf9 100644 --- a/addons/auth_crypt/i18n/nl_BE.po +++ b/addons/auth_crypt/i18n/nl_BE.po @@ -1,42 +1,28 @@ # Dutch (Belgium) translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. +# FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-03 16:03+0000\n" -"PO-Revision-Date: 2012-07-26 17:52+0000\n" +"POT-Creation-Date: 2013-03-07 08:37+0000\n" +"PO-Revision-Date: 2013-04-15 16:02+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Dutch (Belgium) \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:53+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2013-04-16 05:27+0000\n" +"X-Generator: Launchpad (build 16564)\n" -#. module: base_crypt -#: model:ir.model,name:base_crypt.model_res_users +#. module: auth_crypt +#: field:res.users,password_crypt:0 +msgid "Encrypted Password" +msgstr "Geëncrypteerd wachtwoord" + +#. module: auth_crypt +#: model:ir.model,name:auth_crypt.model_res_users msgid "Users" -msgstr "" - -#~ msgid "You can not have two users with the same login !" -#~ msgstr "U kunt geen twee gebruikers met dezelfde login maken." - -#, python-format -#~ msgid "Please specify the password !" -#~ msgstr "Gelieve een wachtwoord op te geven" - -#~ msgid "The chosen company is not in the allowed companies for this user" -#~ msgstr "" -#~ "De gekozen firma behoort niet tot de toegelaten bedrijven voor deze " -#~ "gebruiker." - -#~ msgid "res.users" -#~ msgstr "res.users" - -#, python-format -#~ msgid "Error" -#~ msgstr "Fout" +msgstr "Gebruikers" diff --git a/addons/auth_oauth_signup/i18n/nl_BE.po b/addons/auth_oauth_signup/i18n/nl_BE.po new file mode 100644 index 00000000000..20b3f4a2b06 --- /dev/null +++ b/addons/auth_oauth_signup/i18n/nl_BE.po @@ -0,0 +1,23 @@ +# Dutch (Belgium) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-03-07 08:37+0000\n" +"PO-Revision-Date: 2013-04-15 16:01+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Dutch (Belgium) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-04-16 05:27+0000\n" +"X-Generator: Launchpad (build 16564)\n" + +#. module: auth_oauth_signup +#: model:ir.model,name:auth_oauth_signup.model_res_users +msgid "Users" +msgstr "Gebruikers" diff --git a/addons/base_calendar/i18n/zh_CN.po b/addons/base_calendar/i18n/zh_CN.po index ded9288824c..a767b77c822 100644 --- a/addons/base_calendar/i18n/zh_CN.po +++ b/addons/base_calendar/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: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2012-12-21 23:00+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-04-16 04:47+0000\n" +"Last-Translator: Xinwen Li \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: 2013-03-28 05:33+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-16 05:27+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: base_calendar #: selection:calendar.alarm,trigger_related:0 @@ -295,7 +295,7 @@ msgstr "与会者的参与状况" #. module: base_calendar #: view:crm.meeting:0 msgid "Mail To" -msgstr "" +msgstr "收信人" #. module: base_calendar #: field:crm.meeting,name:0 @@ -525,21 +525,21 @@ msgstr "" #. module: base_calendar #: field:crm.meeting,create_date:0 msgid "Creation Date" -msgstr "" +msgstr "创建日期" #. module: base_calendar #: view:crm.meeting:0 #: model:ir.model,name:base_calendar.model_crm_meeting #: model:res.request.link,name:base_calendar.request_link_meeting msgid "Meeting" -msgstr "" +msgstr "会议" #. module: base_calendar #: selection:calendar.event,rrule_type:0 #: selection:calendar.todo,rrule_type:0 #: selection:crm.meeting,rrule_type:0 msgid "Month(s)" -msgstr "" +msgstr "月" #. module: base_calendar #: view:calendar.event:0 @@ -596,7 +596,7 @@ msgstr "代表人" #: code:addons/base_calendar/crm_meeting.py:102 #, python-format msgid "The following contacts have no email address :" -msgstr "" +msgstr "下列联系人没有电子邮件地址:" #. module: base_calendar #: selection:calendar.event,rrule_type:0 diff --git a/addons/base_status/i18n/nl_BE.po b/addons/base_status/i18n/nl_BE.po new file mode 100644 index 00000000000..da6e519a290 --- /dev/null +++ b/addons/base_status/i18n/nl_BE.po @@ -0,0 +1,80 @@ +# Dutch (Belgium) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-03-07 08:38+0000\n" +"PO-Revision-Date: 2013-04-15 16:40+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Dutch (Belgium) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-04-16 05:27+0000\n" +"X-Generator: Launchpad (build 16564)\n" + +#. module: base_status +#: code:addons/base_status/base_state.py:107 +#, python-format +msgid "Error !" +msgstr "Fout" + +#. module: base_status +#: code:addons/base_status/base_state.py:166 +#, python-format +msgid "%s has been opened." +msgstr "%s is geopend." + +#. module: base_status +#: code:addons/base_status/base_state.py:199 +#, python-format +msgid "%s has been renewed." +msgstr "%s is vernieuwd." + +#. module: base_status +#: code:addons/base_status/base_stage.py:210 +#, python-format +msgid "Error!" +msgstr "Fout" + +#. module: base_status +#: code:addons/base_status/base_state.py:107 +#, python-format +msgid "" +"You can not escalate, you are already at the top level regarding your sales-" +"team category." +msgstr "" +"U kunt niet escaleren; u heeft het hoogste niveau in de verkoopteams al " +"bereikt." + +#. module: base_status +#: code:addons/base_status/base_state.py:193 +#, python-format +msgid "%s is now pending." +msgstr "%s is wachtend." + +#. module: base_status +#: code:addons/base_status/base_state.py:187 +#, python-format +msgid "%s has been canceled." +msgstr "%s is geannuleerd." + +#. module: base_status +#: code:addons/base_status/base_stage.py:210 +#, python-format +msgid "" +"You are already at the top level of your sales-team category.\n" +"Therefore you cannot escalate furthermore." +msgstr "" +"U bent al op het hoogste niveau van uw verkoopteam.\n" +"U kunt dus niet verder escaleren." + +#. module: base_status +#: code:addons/base_status/base_state.py:181 +#, python-format +msgid "%s has been closed." +msgstr "%s is gesloten." diff --git a/addons/contacts/i18n/nl_BE.po b/addons/contacts/i18n/nl_BE.po new file mode 100644 index 00000000000..c8d2c3a14d3 --- /dev/null +++ b/addons/contacts/i18n/nl_BE.po @@ -0,0 +1,46 @@ +# Dutch (Belgium) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-03-07 08:38+0000\n" +"PO-Revision-Date: 2013-04-15 16:01+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Dutch (Belgium) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-04-16 05:27+0000\n" +"X-Generator: Launchpad (build 16564)\n" + +#. module: contacts +#: model:ir.actions.act_window,help:contacts.action_contacts +msgid "" +"

          \n" +" Click to add a contact in your address book.\n" +"

          \n" +" OpenERP helps you easily track all activities related to\n" +" a customer; discussions, history of business opportunities,\n" +" documents, etc.\n" +"

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

          \n" +" Klik hier om een contactpersoon toe te voegen aan het " +"adresboek.\n" +"

          \n" +" Met OpenERP kunt u eenvoudig alle activiteiten registreren met " +"betrekking tot \n" +" een klant, discussies, opportuniteiten, documenten, enz. \n" +"

          \n" +" " + +#. module: contacts +#: model:ir.actions.act_window,name:contacts.action_contacts +#: model:ir.ui.menu,name:contacts.menu_contacts +msgid "Contacts" +msgstr "Contactpersonen" diff --git a/addons/fleet/i18n/nl_BE.po b/addons/fleet/i18n/nl_BE.po new file mode 100644 index 00000000000..5b37606609f --- /dev/null +++ b/addons/fleet/i18n/nl_BE.po @@ -0,0 +1,1927 @@ +# Dutch (Belgium) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-03-07 08:39+0000\n" +"PO-Revision-Date: 2013-04-15 16:40+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Dutch (Belgium) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-04-16 05:27+0000\n" +"X-Generator: Launchpad (build 16564)\n" + +#. module: fleet +#: selection:fleet.vehicle,fuel_type:0 +msgid "Hybrid" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_compact +msgid "Compact" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_1 +msgid "A/C Compressor Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,vin_sn:0 +msgid "Unique number written on the vehicle motor (VIN/SN number)" +msgstr "" + +#. module: fleet +#: selection:fleet.service.type,category:0 +#: view:fleet.vehicle.log.contract:0 +#: view:fleet.vehicle.log.services:0 +msgid "Service" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Monthly" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:62 +#, python-format +msgid "Unknown" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_20 +msgid "Engine/Drive Belt(s) Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Vehicle costs" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,fuel_type:0 +msgid "Diesel" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:421 +#, python-format +msgid "License Plate: from '%s' to '%s'" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_38 +msgid "Resurface Rotors" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +#: view:fleet.vehicle.model:0 +msgid "Group By..." +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_32 +msgid "Oil Pump Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_18 +msgid "Engine Belt Inspection" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,cost_frequency:0 +msgid "No" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,power:0 +msgid "Power in kW of the vehicle" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_2 +msgid "Depreciation and Interests" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,insurer_id:0 +#: field:fleet.vehicle.log.fuel,vendor_id:0 +#: field:fleet.vehicle.log.services,vendor_id:0 +msgid "Supplier" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +msgid "Write here any other information" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_35 +msgid "Power Steering Hose Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Odometer details" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "Has Alert(s)" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.fuel,liter:0 +msgid "Liter" +msgstr "" + +#. module: fleet +#: model:ir.actions.client,name:fleet.action_fleet_menu +msgid "Open Fleet Menu" +msgstr "" + +#. module: fleet +#: view:board.board:0 +msgid "Fuel Costs" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_9 +msgid "Battery Inspection" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,company_id:0 +msgid "Company" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Invoice Date" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +msgid "Refueling Details" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:669 +#, python-format +msgid "%s contract(s) need(s) to be renewed and/or closed!" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Indicative Costs" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_16 +msgid "Charging System Diagnosis" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,car_value:0 +msgid "Value of the bought vehicle" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_44 +msgid "Tie Rod End Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_24 +msgid "Head Gasket(s) Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +#: selection:fleet.vehicle.cost,cost_type:0 +msgid "Services" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,odometer:0 +#: 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 "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +#: field:fleet.vehicle.log.contract,notes:0 +msgid "Terms and Conditions" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_kanban +msgid "Vehicles with alerts" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.fleet_vehicle_costs_act +#: model:ir.ui.menu,name:fleet.fleet_vehicle_costs_menu +msgid "Vehicle Costs" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Total Cost" +msgstr "" + +#. module: fleet +#: selection:fleet.service.type,category:0 +msgid "Both" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,cost_id:0 +#: field:fleet.vehicle.log.fuel,cost_id:0 +#: field:fleet.vehicle.log.services,cost_id:0 +msgid "Automatically created field to link to parent fleet.vehicle.cost" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Terminate Contract" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,parent_id:0 +msgid "Parent cost to this current cost" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Frequency of the recuring cost" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_1 +msgid "Calculation Benefit In Kind" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,expiration_date:0 +msgid "" +"Date when the coverage of the contract expirates (by default, one year after " +"begin date)" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +#: field:fleet.vehicle.log.fuel,notes:0 +#: view:fleet.vehicle.log.services:0 +#: field:fleet.vehicle.log.services,notes:0 +msgid "Notes" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:47 +#, python-format +msgid "Operation not allowed!" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: fleet +#: model:res.groups,name:fleet.group_fleet_user +msgid "User" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,vehicle_id:0 +msgid "Vehicle concerned by this log" +msgstr "" + +#. 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 "" + +#. module: fleet +#: field:fleet.vehicle,message_unread:0 +msgid "Unread Messages" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_6 +msgid "Air Filter Replacement" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_tag +msgid "fleet.vehicle.tag" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "show the services logs for this vehicle" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,contract_renewal_name:0 +msgid "Name of contract to renew soon" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_senior +msgid "Senior" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,state:0 +msgid "Choose wheter the contract is still valid or not" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,transmission:0 +msgid "Automatic" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:414 +#, python-format +msgid "Driver: from '%s' to '%s'" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "and" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.model.brand,image_medium:0 +msgid "Medium-sized photo" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_34 +msgid "Oxygen Sensor Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.services:0 +msgid "Service Type" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,transmission:0 +msgid "Transmission Used by the vehicle" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:740 +#: view:fleet.vehicle.log.contract:0 +#: model:ir.actions.act_window,name:fleet.act_renew_contract +#, python-format +msgid "Renew Contract" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "show the odometer logs for this vehicle" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,odometer_unit:0 +msgid "Unit of the odometer " +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.services:0 +msgid "Services Costs Per Month" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Effective Costs" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_8 +msgid "Repair and maintenance" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,purchaser_id:0 +msgid "Person to which the contract is signed for" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_log_contract_act +msgid "" +"

          \n" +" Click to create a new contract. \n" +"

          \n" +" Manage all your contracts (leasing, insurances, etc.) with\n" +" their related services, costs. OpenERP will automatically " +"warn\n" +" you when some contracts have to be renewed.\n" +"

          \n" +" Each contract (e.g.: leasing) may include several services\n" +" (reparation, insurances, periodic maintenance).\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_service_type +msgid "Type of services available on a vehicle" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.fleet_vehicle_service_types_act +#: model:ir.ui.menu,name:fleet.fleet_vehicle_service_types_menu +msgid "Service Types" +msgstr "" + +#. module: fleet +#: view:board.board:0 +msgid "Contracts Costs" +msgstr "" + +#. 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 "" + +#. 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 "" + +#. module: fleet +#: view:fleet.vehicle.model.brand:0 +msgid "" +"$('.oe_picture').load(function() { if($(this).width() > $(this).height()) { " +"$(this).addClass('oe_employee_picture_wide') } });" +msgstr "" + +#. module: fleet +#: view:board.board:0 +msgid "Vehicles With Alerts" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_costs_act +msgid "" +"

          \n" +" Click to create a new cost.\n" +"

          \n" +" OpenERP helps you managing the costs for your different\n" +" vehicles. Costs are created automatically from services,\n" +" contracts (fixed or recurring) and fuel logs.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "show the fuel logs for this vehicle" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,purchaser_id:0 +msgid "Contractor" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,license_plate:0 +msgid "License Plate" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,state:0 +msgid "To Close" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Recurring Cost Frequency" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.fuel,inv_ref:0 +#: field:fleet.vehicle.log.services,inv_ref:0 +msgid "Invoice Reference" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,message_follower_ids:0 +msgid "Followers" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,location:0 +msgid "Location" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Costs Per Month" +msgstr "" + +#. module: fleet +#: field:fleet.contract.state,name:0 +msgid "Contract Status" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,contract_renewal_total:0 +msgid "Total of contracts due or overdue minus one" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,cost_subtype_id:0 +msgid "Type" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,contract_renewal_overdue:0 +msgid "Has Contracts Overdued" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,amount:0 +msgid "Total Price" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_27 +msgid "Heater Core Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_14 +msgid "Car Wash" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,driver_id:0 +msgid "Driver of the vehicle" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "other(s)" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_refueling +msgid "Refueling" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,message_summary:0 +msgid "" +"Holds the Chatter summary (number of messages, ...). This summary is " +"directly in html format in order to be inserted in kanban views." +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_5 +msgid "A/C Recharge" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_log_fuel +msgid "Fuel log for vehicles" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.services:0 +msgid "Write here any other information related to the service completed." +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "Engine Options" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +msgid "Fuel Costs Per Month" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_sedan +msgid "Sedan" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,seats:0 +msgid "Seats Number" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_convertible +msgid "Convertible" +msgstr "" + +#. module: fleet +#: model:ir.ui.menu,name:fleet.fleet_configuration +msgid "Configuration" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +#: field:fleet.vehicle.log.contract,sum_cost:0 +msgid "Indicative Costs Total" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_junior +msgid "Junior" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,model_id:0 +msgid "Model of the vehicle" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_state_act +msgid "" +"

          \n" +" Click to create a vehicule status.\n" +"

          \n" +" You can customize available status to track the evolution " +"of\n" +" each vehicule. Example: Active, Being Repaired, Sold.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +#: field:fleet.vehicle,log_fuel:0 +#: view:fleet.vehicle.log.fuel:0 +msgid "Fuel Logs" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:409 +#: code:addons/fleet/fleet.py:413 +#: code:addons/fleet/fleet.py:417 +#: code:addons/fleet/fleet.py:420 +#, python-format +msgid "None" +msgstr "" + +#. module: fleet +#: 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 "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_12 +msgid "Brake Inspection" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,state_id:0 +msgid "Current state of the vehicle" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,transmission:0 +msgid "Manual" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_52 +msgid "Wheel Bearing Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,cost_subtype_id:0 +msgid "Cost type purchased with this cost" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,fuel_type:0 +msgid "Gasoline" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_model_brand_act +msgid "" +"

          \n" +" Click to create a new brand.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,start_date:0 +msgid "Contract Start Date" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,odometer_unit:0 +msgid "Odometer Unit" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_30 +msgid "Intake Manifold Gasket Replacement" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Daily" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_6 +msgid "Snow tires" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,date:0 +msgid "Date when the cost has been executed" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +#: view:fleet.vehicle.model:0 +msgid "Vehicles costs" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_log_services +msgid "Services for vehicles" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Indicative Cost" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_26 +msgid "Heater Control Valve Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +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 "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,state:0 +msgid "Terminated" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_cost +msgid "Cost related to a vehicle" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_33 +msgid "Other Maintenance" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +#: field:fleet.vehicle.cost,parent_id:0 +msgid "Parent" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,state_id:0 +#: view:fleet.vehicle.state:0 +msgid "State" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,cost_generated:0 +msgid "Recurring Cost Amount" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_49 +msgid "Transmission Replacement" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_log_fuel_act +msgid "" +"

          \n" +" Click to create a new fuel log. \n" +"

          \n" +" Here you can add refuelling entries for all vehicles. You " +"can\n" +" also filter logs of a particular vehicle using the search\n" +" field.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_11 +msgid "Brake Caliper Replacement" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,odometer:0 +msgid "Last Odometer" +msgstr "" + +#. 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 "" + +#. module: fleet +#: field:fleet.vehicle,doors:0 +msgid "Doors Number" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,acquisition_date:0 +msgid "Date when the vehicle has been bought" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.model:0 +msgid "Models" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "amount" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,fuel_type:0 +msgid "Fuel Used by the vehicle" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Set Contract In Progress" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,odometer_unit:0 +#: field:fleet.vehicle.odometer,unit:0 +msgid "Unit" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,horsepower:0 +msgid "Horsepower" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,image:0 +#: field:fleet.vehicle,image_medium:0 +#: field:fleet.vehicle,image_small:0 +#: field:fleet.vehicle.model,image:0 +#: field:fleet.vehicle.model,image_medium:0 +#: field:fleet.vehicle.model,image_small:0 +#: field:fleet.vehicle.model.brand,image:0 +msgid "Logo" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,horsepower_tax:0 +msgid "Horsepower Taxation" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,log_services:0 +#: view:fleet.vehicle.log.services:0 +msgid "Services Logs" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.model:0 +msgid "Brand" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_43 +msgid "Thermostat Replacement" +msgstr "" + +#. module: fleet +#: field:fleet.service.type,category:0 +msgid "Category" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_log_fuel_graph +msgid "Fuel Costs by Month" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.model.brand,image:0 +msgid "" +"This field holds the image used as logo for the brand, limited to " +"1024x1024px." +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_11 +msgid "Management Fee" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "All vehicles" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +#: view:fleet.vehicle.log.services:0 +msgid "Additional Details" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_log_services_graph +msgid "Services Costs by Month" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_9 +msgid "Assistance" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.fuel,price_per_liter:0 +msgid "Price Per Liter" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_17 +msgid "Door Window Motor/Regulator Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_46 +msgid "Tire Service" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_8 +msgid "Ball Joint Replacement" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,fuel_type:0 +msgid "Fuel Type" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_22 +msgid "Fuel Injector Replacement" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.fleet_vehicle_state_act +#: model:ir.ui.menu,name:fleet.fleet_vehicle_state_menu +msgid "Vehicle Status" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_50 +msgid "Water Pump Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,location:0 +msgid "Location of the vehicle (garage, ...)" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_28 +msgid "Heater Hose Replacement" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,state:0 +msgid "Status" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_40 +msgid "Rotor Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.model,brand_id:0 +msgid "Brand of the vehicle" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,start_date:0 +msgid "Date when the coverage of the contract begins" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,fuel_type:0 +msgid "Electric" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,tag_ids:0 +msgid "Tags" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +#: field:fleet.vehicle,log_contracts:0 +msgid "Contracts" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_13 +msgid "Brake Pad(s) Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +#: view:fleet.vehicle.log.services:0 +msgid "Odometer Details" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,driver_id:0 +msgid "Driver" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.model.brand,image_small:0 +msgid "" +"Small-sized photo of the brand. It is automatically resized as a 64x64px " +"image, with aspect ratio preserved. Use this field anywhere a small image is " +"required." +msgstr "" + +#. module: fleet +#: view:board.board:0 +msgid "Fleet Dashboard" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_break +msgid "Break" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_contract_omnium +msgid "Omnium" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.services:0 +msgid "Services Details" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_15 +msgid "Residual value (Excluding VAT)" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_7 +msgid "Alternator Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_3 +msgid "A/C Diagnosis" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_23 +msgid "Fuel Pump Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Activation Cost" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Cost Type" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_4 +msgid "A/C Evaporator Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "show all the costs for this vehicle" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.odometer:0 +msgid "Odometer Values Per Month" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_model_act +msgid "" +"

          \n" +" Click to create a new model.\n" +"

          \n" +" You can define several models (e.g. A3, A4) for each brand " +"(Audi).\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_act +msgid "" +"

          \n" +" Click to create a new vehicle. \n" +"

          \n" +" You will be able to manage your fleet by keeping track of " +"the\n" +" contracts, services, fixed and recurring costs, odometers " +"and\n" +" fuel logs associated to each vehicle.\n" +"

          \n" +" OpenERP will warn you when services or contract have to be\n" +" renewed.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_13 +msgid "Entry into service tax" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,expiration_date:0 +msgid "Contract Expiration Date" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Cost Subtype" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.open_board_fleet +msgid "" +"
          \n" +"

          \n" +" Fleet dashboard is empty.\n" +"

          \n" +" To add your first report into this dashboard, go to any\n" +" menu, switch to list or graph view, and click 'Add " +"to\n" +" Dashboard' in the extended search options.\n" +"

          \n" +" You can filter and group data before inserting into the\n" +" dashboard using the search options.\n" +"

          \n" +"
          \n" +" " +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_12 +msgid "Rent (Excluding VAT)" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,odometer_unit:0 +msgid "Kilometers" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +msgid "Vehicle Details" +msgstr "" + +#. 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 "" + +#. 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 "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_10 +msgid "Battery Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +#: field:fleet.vehicle.cost,date:0 +#: field:fleet.vehicle.odometer,date:0 +msgid "Date" +msgstr "" + +#. 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 "" + +#. module: fleet +#: selection:fleet.vehicle,odometer_unit:0 +msgid "Miles" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,cost_generated:0 +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 "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_17 +msgid "Emissions" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_model +msgid "Model of a vehicle" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.action_fleet_reporting_costs +#: model:ir.actions.act_window,help:fleet.action_fleet_reporting_costs_non_effective +msgid "" +"

          \n" +" OpenERP helps you managing the costs for your different vehicles\n" +" Costs are generally created from services and contract and appears " +"here.\n" +"

          \n" +"

          \n" +" Thanks to the different filters, OpenERP can only print the " +"effective\n" +" costs, sort them by type and by vehicle.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,car_value:0 +msgid "Car Value" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.open_board_fleet +#: model:ir.module.category,name:fleet.module_fleet_category +#: model:ir.ui.menu,name:fleet.menu_fleet_dashboard +#: model:ir.ui.menu,name:fleet.menu_fleet_reporting +#: model:ir.ui.menu,name:fleet.menu_root +msgid "Fleet" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_14 +msgid "Total expenses (Excluding VAT)" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,odometer_id:0 +msgid "Odometer" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_45 +msgid "Tire Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.service.type:0 +msgid "Service types" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.fuel,purchaser_id:0 +#: field:fleet.vehicle.log.services,purchaser_id:0 +msgid "Purchaser" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_3 +msgid "Tax roll" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.model:0 +#: field:fleet.vehicle.model,vendors:0 +msgid "Vendors" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_contract_leasing +msgid "Leasing" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.model.brand,image_medium:0 +msgid "" +"Medium-sized logo of the brand. It is automatically resized as a 128x128px " +"image, with aspect ratio preserved. Use this field in form views or some " +"kanban views." +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Weekly" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +#: view:fleet.vehicle.odometer:0 +msgid "Odometer Logs" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,acquisition_date:0 +msgid "Acquisition Date" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_odometer +msgid "Odometer log for a vehicle" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,cost_type:0 +msgid "Category of the cost" +msgstr "" + +#. 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 "" + +#. module: fleet +#: field:fleet.vehicle,contract_renewal_due_soon:0 +msgid "Has Contracts to renew" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_31 +msgid "Oil Change" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.model.brand,image_small:0 +msgid "Smal-sized photo" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_model_brand +msgid "Brand model of the vehicle" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_51 +msgid "Wheel Alignment" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_purchased +msgid "Purchased" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Write here all other information relative to this contract" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_odometer_act +msgid "" +"

          \n" +" Here you can add various odometer entries for all vehicles.\n" +" You can also show odometer value for a particular vehicle " +"using\n" +" the search field.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.model,brand_id:0 +#: view:fleet.vehicle.model.brand:0 +msgid "Model Brand" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "General Properties" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_21 +msgid "Exhaust Manifold Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_47 +msgid "Transmission Filter Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_10 +msgid "Replacement Vehicle" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,state:0 +msgid "In Progress" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Yearly" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.model,modelname:0 +msgid "Model name" +msgstr "" + +#. module: fleet +#: view:board.board:0 +#: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_costs_graph +msgid "Costs by Month" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_18 +msgid "Touring Assistance" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,power:0 +msgid "Power (kW)" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:418 +#, python-format +msgid "State: from '%s' to '%s'" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_2 +msgid "A/C Condenser Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_19 +msgid "Engine Coolant Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Cost Details" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:410 +#, python-format +msgid "Model: from '%s' to '%s'" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.cost,cost_type:0 +msgid "Other" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Contract details" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_leasing +msgid "Employee Car" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,auto_generated:0 +msgid "Automatically Generated" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.cost,cost_type:0 +msgid "Fuel" +msgstr "" + +#. module: fleet +#: sql_constraint:fleet.vehicle.state:0 +msgid "State name already exists" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_37 +msgid "Radiator Repair" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_log_contract +msgid "Contract information on a vehicle" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,days_left:0 +msgid "Warning Date" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_19 +msgid "Residual value in %" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "Additional Properties" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_state +msgid "fleet.vehicle.state" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Contract Costs Per Month" +msgstr "" + +#. 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 "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_48 +msgid "Transmission Fluid Replacement" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.model.brand,name:0 +msgid "Brand Name" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_36 +msgid "Power Steering Pump Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,contract_id:0 +msgid "Contract attached to this cost" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:397 +#, python-format +msgid "Vehicle %s has been added to the fleet!" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +#: view:fleet.vehicle.log.fuel:0 +#: view:fleet.vehicle.log.services:0 +msgid "Price" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,odometer:0 +#: field:fleet.vehicle.odometer,value:0 +msgid "Odometer Value" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +#: view:fleet.vehicle.cost:0 +#: field:fleet.vehicle.cost,vehicle_id:0 +#: field:fleet.vehicle.odometer,vehicle_id:0 +msgid "Vehicle" +msgstr "" + +#. 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 "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.action_fleet_vehicle_kanban +msgid "" +"

          \n" +" Here are displayed vehicles for which one or more contracts need " +"to be renewed. If you see this message, then there is no contracts to " +"renew.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_15 +msgid "Catalytic Converter Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_25 +msgid "Heater Blower Motor Replacement" +msgstr "" + +#. 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 "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,notes:0 +msgid "Write here all supplementary informations relative to this contract" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_29 +msgid "Ignition Coil Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_16 +msgid "Options" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_contract_repairing +msgid "Repairing" +msgstr "" + +#. 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 "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,ins_ref:0 +msgid "Contract Reference" +msgstr "" + +#. module: fleet +#: field:fleet.service.type,name:0 +#: field:fleet.vehicle,name:0 +#: field:fleet.vehicle.cost,name:0 +#: field:fleet.vehicle.log.contract,name:0 +#: field:fleet.vehicle.model,name:0 +#: field:fleet.vehicle.odometer,name:0 +#: field:fleet.vehicle.state,name:0 +#: field:fleet.vehicle.tag,name:0 +msgid "Name" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,doors:0 +msgid "Number of doors of the vehicle" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,transmission:0 +msgid "Transmission" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,vin_sn:0 +msgid "Chassis Number" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,color:0 +msgid "Color of the vehicle" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_log_services_act +msgid "" +"

          \n" +" Click to create a new service entry. \n" +"

          \n" +" OpenERP helps you keeping track of all the services done\n" +" on your vehicle. Services can be of many type: occasional\n" +" repair, fixed maintenance, etc.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,co2:0 +msgid "CO2 Emissions" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Contract logs" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "Costs" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_log_contract_graph +msgid "Contracts Costs by Month" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,model_id:0 +#: view:fleet.vehicle.model:0 +msgid "Model" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_41 +msgid "Spark Plug Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle +msgid "Information on a vehicle" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,co2:0 +msgid "CO2 emissions of the vehicle" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_53 +msgid "Windshield Wiper(s) Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +#: field:fleet.vehicle.log.contract,generated_cost_ids:0 +msgid "Generated Costs" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.state,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,color:0 +msgid "Color" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_service_types_act +msgid "" +"

          \n" +" Click to create a new type of service.\n" +"

          \n" +" Each service can used in contracts, as a standalone service " +"or both.\n" +"

          \n" +" " +msgstr "" + +#. module: fleet +#: view:board.board:0 +msgid "Services Costs" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:47 +#, python-format +msgid "Emptying the odometer value of a vehicle is not allowed." +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,seats:0 +msgid "Number of seats of the vehicle" +msgstr "" + +#. module: fleet +#: model:res.groups,name:fleet.group_fleet_manager +msgid "Manager" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.services:0 +msgid "Cost" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_39 +msgid "Rotate Tires" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_42 +msgid "Starter Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +#: field:fleet.vehicle.cost,year:0 +msgid "Year" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,license_plate:0 +msgid "License plate number of the vehicle (ie: plate number for a car)" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_contract_state +msgid "Contains the different possible status of a leasing contract" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "show the contract for this vehicle" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.services:0 +msgid "Total" +msgstr "" + +#. module: fleet +#: help:fleet.service.type,category:0 +msgid "" +"Choose wheter the service refer to contracts, vehicle services or both" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,cost_type:0 +msgid "For internal purpose only" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.state,sequence:0 +msgid "Used to order the note stages" +msgstr "" diff --git a/addons/mrp/i18n/fr.po b/addons/mrp/i18n/fr.po index 8ac5d7e4be3..5b9d63a9362 100644 --- a/addons/mrp/i18n/fr.po +++ b/addons/mrp/i18n/fr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-01-07 08:58+0000\n" +"PO-Revision-Date: 2013-04-15 08:07+0000\n" "Last-Translator: WANTELLET Sylvain \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-28 05:49+0000\n" -"X-Generator: Launchpad (build 16546)\n" +"X-Launchpad-Export-Date: 2013-04-16 05:27+0000\n" +"X-Generator: Launchpad (build 16564)\n" #. module: mrp #: help:mrp.config.settings,module_mrp_repair:0 @@ -152,6 +152,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 "" +"Contient le résumé de la discussion (nombre de messages, ...). Ce résumé est " +"au format HTML pour permettre son utilisation dans la vue kanban." #. module: mrp #: model:process.transition,name:mrp.process_transition_servicerfq0 @@ -307,6 +309,8 @@ msgid "" " will contain the raw materials, instead of " "the finished product." msgstr "" +"Lors du traitement de la commande de ce produit, le bon de livraison\n" +"contiendra les matières premières au lieu du produit fini." #. module: mrp #: report:mrp.production.order:0 @@ -1974,7 +1978,7 @@ msgstr "Temps pour 1 cycle (en heures)" #. module: mrp #: view:mrp.production:0 msgid "Cancel Production" -msgstr "" +msgstr "Annuler la production" #. module: mrp #: model:ir.actions.report.xml,name:mrp.report_mrp_production_report @@ -2364,6 +2368,8 @@ msgid "" " The delivery order will be ready once the production " "is done." msgstr "" +"en utilisant la nomenclature associée à ce produit.\n" +"Le bon de livraison sera prêt à l'issue de la production." #. module: mrp #: field:mrp.config.settings,module_stock_no_autopicking:0 diff --git a/addons/purchase/i18n/fr.po b/addons/purchase/i18n/fr.po index 0ee069c790f..278706d8a78 100644 --- a/addons/purchase/i18n/fr.po +++ b/addons/purchase/i18n/fr.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-04-12 08:06+0000\n" +"PO-Revision-Date: 2013-04-15 08:15+0000\n" "Last-Translator: WANTELLET Sylvain \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-13 06:31+0000\n" +"X-Launchpad-Export-Date: 2013-04-16 05:27+0000\n" "X-Generator: Launchpad (build 16564)\n" #. module: purchase @@ -804,7 +804,7 @@ msgstr "Le montant des taxes" #. module: purchase #: field:purchase.order,shipped_rate:0 msgid "Received Ratio" -msgstr "" +msgstr "Ratio réception" #. module: purchase #: selection:purchase.report,month:0 @@ -1347,13 +1347,15 @@ msgid "" "received the\n" " products." msgstr "" +"pour acheter les quantités requises auprès du fournisseur.\n" +"Le bon de livraison sera prêt après avoir reçu ces articles." #. module: purchase #: view:product.product:0 msgid "" "a draft\n" " purchase order" -msgstr "" +msgstr "un bon de commande d'achat brouillon" #. module: purchase #: code:addons/purchase/purchase.py:320 @@ -1674,7 +1676,7 @@ msgstr "" #. module: purchase #: field:purchase.order,invoiced:0 msgid "Invoice Received" -msgstr "" +msgstr "Facture reçue" #. module: purchase #: field:purchase.order,invoice_method:0 From 6ca07702572daa51fd364465aae6e7a0a44ed447 Mon Sep 17 00:00:00 2001 From: Cedric Snauwaert Date: Tue, 16 Apr 2013 09:43:35 +0200 Subject: [PATCH 141/160] [REF]crm_lead, crm_meeting: minor changes to follow pep8 standard bzr revid: csn@openerp.com-20130416074335-qx8c6f4fjueknjk9 --- addons/crm/crm_lead.py | 6 +++--- addons/crm/crm_meeting.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index 9af36b4b18b..5eb2a50c162 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -1047,10 +1047,10 @@ class crm_lead(base_stage, format_address, osv.osv): def log_meeting(self, cr, uid, ids, meeting_subject, meeting_date, duration, context=None): if not duration: - duration = 'unknow' + duration = _('unknown') else: - duration = str(duration)+'h' - message = _("Meeting: '%s' has been scheduled at '%s'
          Duration: %s" % (meeting_subject, meeting_date, duration)) + duration = str(duration) + 'h' + message = _("Meeting scheduled at '%s'
          Subject: %s
          Duration: %s" % (meeting_date, meeting_subject, duration)) return self.message_post(cr, uid, ids, body=message, context=context) def onchange_state(self, cr, uid, ids, state_id, context=None): diff --git a/addons/crm/crm_meeting.py b/addons/crm/crm_meeting.py index eca77cd456e..c31907bebe2 100644 --- a/addons/crm/crm_meeting.py +++ b/addons/crm/crm_meeting.py @@ -35,10 +35,10 @@ class crm_meeting(osv.Model): } def create(self, cr, uid, vals, context=None): - res = super(crm_meeting,self).create(cr, uid, vals, context=context) + res = super(crm_meeting, self).create(cr, uid, vals, context=context) obj = self.browse(cr, uid, res, context=context) if obj.opportunity_id: - self.pool.get('crm.lead').log_meeting(cr, uid, obj.opportunity_id.id, obj.name, obj.date, obj.duration, context=context) + self.pool.get('crm.lead').log_meeting(cr, uid, [obj.opportunity_id.id], obj.name, obj.date, obj.duration, context=context) return res From a455d6c2b27fb8a90c8993abb176da64c0952b5c Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 16 Apr 2013 11:23:44 +0200 Subject: [PATCH 142/160] [FIX] correctly handle group_by_no_leaf when no grouping applied If there are no grouping field specified *but* group_by_no_leaf is specified, should call read_group with no grouping fields: will generate a single group (which can not be opened) for all of the model. Necessary for analysis views since individual "records" make no sense. bzr revid: xmo@openerp.com-20130416092344-2pqog8f7xprn6hsh --- addons/web/__openerp__.py | 1 + addons/web/static/src/js/data.js | 21 +++++---- addons/web/static/test/data.js | 76 ++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 9 deletions(-) create mode 100644 addons/web/static/test/data.js diff --git a/addons/web/__openerp__.py b/addons/web/__openerp__.py index 937442d13c5..f335c52bb10 100644 --- a/addons/web/__openerp__.py +++ b/addons/web/__openerp__.py @@ -77,6 +77,7 @@ This module provides the core of the OpenERP Web Client. "static/test/class.js", "static/test/registry.js", "static/test/form.js", + "static/test/data.js", "static/test/list-utils.js", "static/test/formats.js", "static/test/rpc.js", diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index cfcd86307ba..a36441add1c 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -112,24 +112,27 @@ instance.web.Query = instance.web.Class.extend({ * @returns {jQuery.Deferred> | null} */ group_by: function (grouping) { - if (grouping === undefined) { - return null; + var ctx = instance.web.pyeval.eval( + 'context', this._model.context(this._context)); + + // undefined passed in explicitly (!) + if (_.isUndefined(grouping)) { + grouping = []; } if (!(grouping instanceof Array)) { grouping = _.toArray(arguments); } - if (_.isEmpty(grouping)) { return null; } + if (_.isEmpty(grouping) && !ctx['group_by_no_leaf']) { + return null; + } var self = this; - - var ctx = instance.web.pyeval.eval( - 'context', this._model.context(this._context)); return this._model.call('read_group', { groupby: grouping, fields: _.uniq(grouping.concat(this._fields || [])), domain: this._model.domain(this._filter), - context: this._model.context(this._context), + context: ctx, offset: this._offset, limit: this._limit, orderby: instance.web.serialize_sort(this._order_by) || false @@ -325,7 +328,7 @@ instance.web.Model = instance.web.Class.extend({ * Fetches the model's domain, combined with the provided domain if any * * @param {Array} [domain] to combine with the model's internal domain - * @returns The model's internal domain, or the AND-ed union of the model's internal domain and the provided domain + * @returns {instance.web.CompoundDomain} The model's internal domain, or the AND-ed union of the model's internal domain and the provided domain */ domain: function (domain) { if (!domain) { return this._domain; } @@ -337,7 +340,7 @@ instance.web.Model = instance.web.Class.extend({ * combined with the provided context if any * * @param {Object} [context] to combine with the model's internal context - * @returns The union of the user's context and the model's internal context, as well as the provided context if any. In that order. + * @returns {instance.web.CompoundContext} The union of the user's context and the model's internal context, as well as the provided context if any. In that order. */ context: function (context) { return new instance.web.CompoundContext( diff --git a/addons/web/static/test/data.js b/addons/web/static/test/data.js new file mode 100644 index 00000000000..6f1e5184063 --- /dev/null +++ b/addons/web/static/test/data.js @@ -0,0 +1,76 @@ +openerp.testing.section('data.model.group_by', { + rpc: 'mock', + dependencies: ['web.data'], +}, function (test) { + var group_result = [{ + bar: 3, bar_count: 5, __context: {}, __domain: [['bar', '=', 3]], + }, { + bar: 5, bar_count: 3, __context: {}, __domain: [['bar', '=', 5]], + }, { + bar: 8, bar_count: 0, __context: {}, __domain: [['bar', '=', 8]], + }]; + test('basic', {asserts: 7}, function (instance, $fix, mock) { + var m = new instance.web.Model('foo'); + mock('foo:read_group', function (args, kwargs) { + deepEqual(kwargs.fields, ['bar'], + "should read grouping field"); + deepEqual(kwargs.groupby, ['bar'], + "should have single grouping field"); + return group_result; + }); + mock('/web/dataset/search_read', function (args) { + deepEqual(args.params.domain, [['bar', '=', 3]], + "should have domain matching that of group_by result"); + return {records: [ + {bar: 3, id: 1}, + {bar: 3, id: 2}, + {bar: 3, id: 4}, + {bar: 3, id: 8}, + {bar: 3, id: 16} + ], length: 5}; + }); + + return m.query().group_by('bar') + .then(function (groups) { + ok(groups, "should have data"); + equal(groups.length, 3, "should have three results"); + var first = groups[0]; + ok(first.attributes.has_children, "should have children"); + return first.query().all(); + }).done(function (first) { + equal(first.length, 5, "should have 5 records") + }); + }); + test('noleaf', {asserts: 5}, function (instance, $fix, mock) { + var m = new instance.web.Model('foo', {group_by_no_leaf: true}); + mock('foo:read_group', function (args, kwargs) { + deepEqual(kwargs.fields, ['bar'], + "should read grouping field"); + deepEqual(kwargs.groupby, ['bar'], + "should have single grouping field"); + + return group_result; + }); + return m.query().group_by('bar') + .then(function (groups) { + ok(groups, "should have data"); + equal(groups.length, 3, "should have three results"); + ok(!groups[0].attributes.has_children, + "should not have children because no_leaf"); + }) + }); + test('nogroup', {rpc: false}, function (instance, $f, mock) { + var m = new instance.web.Model('foo'); + strictEqual(m.query().group_by(), null, "should not group"); + }); + test('empty.noleaf', {asserts: 1}, function (instance, $f, mock) { + var m = new instance.web.Model('foo', {group_by_no_leaf: true}); + mock('foo:read_group', function (args, kwargs) { + return [{__context: [], __domain: []}]; + }); + return m.query().group_by().done(function (groups) { + strictEqual(groups.length, 1, + "should generate a single fake-ish group"); + }); + }); +}); From 0cae5cb0474340a8f92b950536252f358997e369 Mon Sep 17 00:00:00 2001 From: Cedric Snauwaert Date: Tue, 16 Apr 2013 11:56:22 +0200 Subject: [PATCH 143/160] [FIX]purchase: remove default filter that prevent to see quotations that have been sent but not yet validated bzr revid: csn@openerp.com-20130416095622-gxmxb5gpfqgs30eh --- addons/purchase/purchase_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index 63735b090dd..d0cb795ba5d 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -334,7 +334,7 @@ Quotations ir.actions.act_window purchase.order - {'search_default_draft': 1, 'search_default_to_approve': 1} + {'search_default_to_approve': 1} [('state','in',('draft','sent','confirmed'))] tree,form,graph,calendar From 39c88d09229dbd7cfb3b13b823afe00dcd638f80 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Tue, 16 Apr 2013 15:26:21 +0200 Subject: [PATCH 144/160] [IMP] account: cash.box.in defines its _columns, do the same for cash.box.out. This is needed to solve an inheritance problem when adding a superclass `base.model` (I guess this is related to the fact some code in the orm does a copy from the class to the instance). bzr revid: vmt@openerp.com-20130416132621-xo0lckimczqpvyos --- addons/account/wizard/pos_box.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/account/wizard/pos_box.py b/addons/account/wizard/pos_box.py index 1d6d13e140b..874a8e3b7c9 100644 --- a/addons/account/wizard/pos_box.py +++ b/addons/account/wizard/pos_box.py @@ -67,6 +67,8 @@ class CashBoxIn(CashBox): class CashBoxOut(CashBox): _name = 'cash.box.out' + _columns = CashBox._columns.copy() + def _compute_values_for_statement_line(self, cr, uid, box, record, context=None): amount = box.amount or 0.0 return { From 3fe1f535148deedf4295b51c348104db7fa3662b Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Tue, 16 Apr 2013 17:18:44 +0200 Subject: [PATCH 145/160] [REF] get_module_resource() must imported from openerp.modules (instead of openerp.addons). bzr revid: vmt@openerp.com-20130416151844-gatbo4s2l2e6reme --- .../base_report_designer/base_report_designer.py | 15 ++++++++------- addons/base_report_designer/installer.py | 4 ++-- addons/crm/test/crm_lead_message.yml | 3 +-- addons/crm_claim/test/process/claim.yml | 3 +-- addons/document_webdav/test/webdav_test1.yml | 5 ++--- addons/document_webdav/webdav_server.py | 2 +- addons/hr/hr.py | 6 ++++-- addons/survey/wizard/survey_answer.py | 9 +++++---- addons/survey/wizard/survey_send_invitation.py | 9 +++++---- 9 files changed, 29 insertions(+), 27 deletions(-) diff --git a/addons/base_report_designer/base_report_designer.py b/addons/base_report_designer/base_report_designer.py index 6a0a2722755..bc7959a17df 100644 --- a/addons/base_report_designer/base_report_designer.py +++ b/addons/base_report_designer/base_report_designer.py @@ -20,12 +20,13 @@ ############################################################################## import base64 +from StringIO import StringIO + +from openerp.modules.module import get_module_resource import openerp.modules.registry from openerp.osv import osv from openerp_sxw2rml import sxw2rml -from StringIO import StringIO -from openerp import addons - + class report_xml(osv.osv): _inherit = 'ir.actions.report.xml' @@ -36,9 +37,9 @@ class report_xml(osv.osv): ''' sxwval = StringIO(base64.decodestring(file_sxw)) if file_type=='sxw': - fp = open(addons.get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_oo2rml.xsl'),'rb') + fp = open(get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_oo2rml.xsl'),'rb') if file_type=='odt': - fp = open(addons.get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_odt2rml.xsl'),'rb') + fp = open(get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_odt2rml.xsl'),'rb') return {'report_rml_content': str(sxw2rml(sxwval, xsl=fp.read()))} def upload_report(self, cr, uid, report_id, file_sxw, file_type, context=None): @@ -47,9 +48,9 @@ class report_xml(osv.osv): ''' sxwval = StringIO(base64.decodestring(file_sxw)) if file_type=='sxw': - fp = open(addons.get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_oo2rml.xsl'),'rb') + fp = open(get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_oo2rml.xsl'),'rb') if file_type=='odt': - fp = open(addons.get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_odt2rml.xsl'),'rb') + fp = open(get_module_resource('base_report_designer','openerp_sxw2rml', 'normalized_odt2rml.xsl'),'rb') report = self.pool['ir.actions.report.xml'].write(cr, uid, [report_id], { 'report_sxw_content': base64.decodestring(file_sxw), 'report_rml_content': str(sxw2rml(sxwval, xsl=fp.read())), diff --git a/addons/base_report_designer/installer.py b/addons/base_report_designer/installer.py index 0c0e6086df0..a21b6655af7 100644 --- a/addons/base_report_designer/installer.py +++ b/addons/base_report_designer/installer.py @@ -23,7 +23,7 @@ from openerp.osv import fields from openerp.osv import osv import base64 from openerp.tools.translate import _ -from openerp import addons +from openerp.modules.module import get_module_resource class base_report_designer_installer(osv.osv_memory): _name = 'base_report_designer.installer' @@ -31,7 +31,7 @@ class base_report_designer_installer(osv.osv_memory): def default_get(self, cr, uid, fields, context=None): data = super(base_report_designer_installer, self).default_get(cr, uid, fields, context=context) - plugin_file = open(addons.get_module_resource('base_report_designer','plugin', 'openerp_report_designer.zip'),'rb') + plugin_file = open(get_module_resource('base_report_designer','plugin', 'openerp_report_designer.zip'),'rb') data['plugin_file'] = base64.encodestring(plugin_file.read()) return data diff --git a/addons/crm/test/crm_lead_message.yml b/addons/crm/test/crm_lead_message.yml index 221a4ab634f..0f7d4655398 100644 --- a/addons/crm/test/crm_lead_message.yml +++ b/addons/crm/test/crm_lead_message.yml @@ -4,8 +4,7 @@ Mail script will fetch his request from mail server. Then I process that mail after read EML file. - !python {model: mail.thread}: | - from openerp import addons - request_file = open(addons.get_module_resource('crm','test', 'customer_request.eml'),'rb') + request_file = open(openerp.modules.module.get_module_resource('crm','test', 'customer_request.eml'),'rb') request_message = request_file.read() self.message_process(cr, uid, 'crm.lead', request_message) - diff --git a/addons/crm_claim/test/process/claim.yml b/addons/crm_claim/test/process/claim.yml index bacb073b4b9..a843372956e 100644 --- a/addons/crm_claim/test/process/claim.yml +++ b/addons/crm_claim/test/process/claim.yml @@ -4,8 +4,7 @@ Mail script will be fetched him request from mail server. so I process that mail after read EML file - !python {model: mail.thread}: | - from openerp import addons - request_file = open(addons.get_module_resource('crm_claim','test', 'customer_claim.eml'),'rb') + request_file = open(openerp.modules.module.get_module_resource('crm_claim','test', 'customer_claim.eml'),'rb') request_message = request_file.read() self.message_process(cr, uid, 'crm.claim', request_message) - diff --git a/addons/document_webdav/test/webdav_test1.yml b/addons/document_webdav/test/webdav_test1.yml index 82236f63846..ae91d7cd4a8 100644 --- a/addons/document_webdav/test/webdav_test1.yml +++ b/addons/document_webdav/test/webdav_test1.yml @@ -47,10 +47,9 @@ - !python {model: ir.attachment}: | from document_webdav import test_davclient as te - import addons dc = te.DAVClient() dc.get_creds(self, cr, uid) - tdp = addons.get_module_resource('document_webdav', 'test_davclient.py') + tdp = openerp.modules.module.get_module_resource('document_webdav', 'test_davclient.py') res = dc.gd_put(path=cr.dbname+'/Documents/test_davclient.py', srcpath=tdp) - I will try to get the file from the root @@ -60,5 +59,5 @@ import addons dc = te.DAVClient() dc.get_creds(self, cr, uid) - tdp = addons.get_module_resource('document_webdav', 'test_davclient.py') + tdp = openerp.modules.module.get_module_resource('document_webdav', 'test_davclient.py') res = dc.gd_get(path=cr.dbname+'/Documents/test_davclient.py', crange=(4,508), compare=tdp) diff --git a/addons/document_webdav/webdav_server.py b/addons/document_webdav/webdav_server.py index 1804b9bfdb2..f67de272e29 100644 --- a/addons/document_webdav/webdav_server.py +++ b/addons/document_webdav/webdav_server.py @@ -608,7 +608,7 @@ try: if base_path and base_path == '/': dir_path = config.get_misc('static-http', 'dir_path', False) else: - dir_path = openerp.addons.get_module_resource('document_webdav','public_html') + dir_path = openerp.modules.module.get_module_resource('document_webdav','public_html') # an _ugly_ hack: we put that dir back in tools.config.misc, so that # the StaticHttpHandler can find its dir_path. config.misc.setdefault('static-http',{})['dir_path'] = dir_path diff --git a/addons/hr/hr.py b/addons/hr/hr.py index 59e472b3717..585e5ce81a4 100644 --- a/addons/hr/hr.py +++ b/addons/hr/hr.py @@ -19,10 +19,12 @@ # ############################################################################## -from openerp import addons import logging + +from openerp.modules.module import get_module_resource from openerp.osv import fields, osv from openerp import tools + _logger = logging.getLogger(__name__) class hr_employee_category(osv.osv): @@ -259,7 +261,7 @@ class hr_employee(osv.osv): return {'value': {'work_email' : work_email}} def _get_default_image(self, cr, uid, context=None): - image_path = addons.get_module_resource('hr', 'static/src/img', 'default_image.png') + image_path = get_module_resource('hr', 'static/src/img', 'default_image.png') return tools.image_resize_image_big(open(image_path, 'rb').read().encode('base64')) _defaults = { diff --git a/addons/survey/wizard/survey_answer.py b/addons/survey/wizard/survey_answer.py index 181d6159109..6d473754988 100644 --- a/addons/survey/wizard/survey_answer.py +++ b/addons/survey/wizard/survey_answer.py @@ -25,7 +25,8 @@ from lxml import etree import os from time import strftime -from openerp import addons, tools +from openerp import tools +from openerp.modules.module import get_module_resource from openerp.osv import fields, osv import openerp.report from openerp.tools import to_xml @@ -412,7 +413,7 @@ class survey_question_wiz(osv.osv_memory): response_id = surv_name_wiz.read(cr, uid, context.get('sur_name_id',False))['response'] report = self.create_report(cr, uid, [survey_id], 'report.survey.browse.response', survey_data.title,context) attachments = {} - pdf_filename = addons.get_module_resource('survey', 'report') + survey_data.title + ".pdf" + pdf_filename = get_module_resource('survey', 'report') + survey_data.title + ".pdf" if os.path.exists(pdf_filename): file = open(pdf_filename) file_data = "" @@ -424,7 +425,7 @@ class survey_question_wiz(osv.osv_memory): attachments[survey_data.title + ".pdf"] = file_data file.close() - os.remove(addons.get_module_resource('survey', 'report') + survey_data.title + ".pdf") + os.remove(get_module_resource('survey', 'report') + survey_data.title + ".pdf") context.update({'response_id':response_id}) user_email = user_obj.browse(cr, uid, uid, context).email resp_email = survey_data.responsible_id and survey_data.responsible_id.email or False @@ -466,7 +467,7 @@ class survey_question_wiz(osv.osv_memory): try: uid = 1 result, format = openerp.report.render_report(cr, uid, res_ids, report_name[len('report.'):], {}, context) - ret_file_name = addons.get_module_resource('survey', 'report') + file_name + '.pdf' + ret_file_name = get_module_resource('survey', 'report') + file_name + '.pdf' fp = open(ret_file_name, 'wb+'); fp.write(result); fp.close(); diff --git a/addons/survey/wizard/survey_send_invitation.py b/addons/survey/wizard/survey_send_invitation.py index a188ab7ce83..ca6a8e4b15d 100644 --- a/addons/survey/wizard/survey_send_invitation.py +++ b/addons/survey/wizard/survey_send_invitation.py @@ -26,7 +26,8 @@ import os import datetime import socket -from openerp import addons, tools +from openerp import tools +from openerp.modules.module import get_module_resource from openerp.osv import fields, osv import openerp.report from openerp.tools.translate import _ @@ -85,7 +86,7 @@ Thanks,''') % (name, self.pool.get('ir.config_parameter').get_param(cr, uid, 'we if not report_name or not res_ids: return (False, Exception('Report name and Resources ids are required !!!')) try: - ret_file_name = addons.get_module_resource('survey', 'report') + file_name + '.pdf' + ret_file_name = get_module_resource('survey', 'report') + file_name + '.pdf' result, format = openerp.report.render_report(cr, uid, res_ids, report_name[len('report.'):], {}, {}) fp = open(ret_file_name, 'wb+'); fp.write(result); @@ -128,7 +129,7 @@ Thanks,''') % (name, self.pool.get('ir.config_parameter').get_param(cr, uid, 'we new_user.append(use.id) for id in survey_ref.browse(cr, uid, survey_ids): report = self.create_report(cr, uid, [id.id], 'report.survey.form', id.title) - file = open(addons.get_module_resource('survey', 'report') + id.title +".pdf") + file = open(get_module_resource('survey', 'report') + id.title +".pdf") file_data = "" while 1: line = file.readline() @@ -137,7 +138,7 @@ Thanks,''') % (name, self.pool.get('ir.config_parameter').get_param(cr, uid, 'we break file.close() attachments[id.title +".pdf"] = file_data - os.remove(addons.get_module_resource('survey', 'report') + id.title +".pdf") + os.remove(get_module_resource('survey', 'report') + id.title +".pdf") for partner in self.pool.get('res.partner').browse(cr, uid, partner_ids): if not partner.email: From c19bc506484d162d7d85beab6d2c0efbbf474035 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 16 Apr 2013 17:20:00 +0200 Subject: [PATCH 146/160] [FIX] ids of deleted records living in shared dataset when clicking on list row When a record is activated, the listview will do some jiggling around assigning the ids of internal dataset to the one shared between all views, this is mostly for the case where one switches from a "grouped" list view, so the form view only cycles on the "current" group. Problem is, that internal dataset is not correctly synchronized with the shared one, so when the id is removed from the shared dataset it is *not* removed from the internal one(s), and when the switch is made the ids from the internal dataset are set on the shared one and reintroduce the deleted record, leading to the form view's incorrect state. Fix the issue by updating the dataset's ids list when a record is deleted from the records tree. Also extracted some stuff from DataSetSearch's unlink callback so it can be overridden and is more stable across datasets. lp bug: https://launchpad.net/bugs/1161210 fixed bzr revid: xmo@openerp.com-20130416152000-06dbwkgdb8zlf9pc --- addons/web/static/src/js/data.js | 25 +++++++++++++++++-------- addons/web/static/src/js/view_list.js | 5 +++-- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index a36441add1c..d60f72c6577 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -607,6 +607,9 @@ instance.web.DataSet = instance.web.Class.extend(instance.web.PropertiesMixin, alter_ids: function(n_ids) { this.ids = n_ids; }, + remove_ids: function (ids) { + this.alter_ids(_(this.ids).difference(ids)); + }, /** * Resequence records. * @@ -704,17 +707,23 @@ instance.web.DataSetSearch = instance.web.DataSet.extend({ get_domain: function (other_domain) { this._model.domain(other_domain); }, + alter_ids: function (ids) { + this._super(ids); + if (this.index !== null && this.index >= this.ids.length) { + this.index = this.ids.length > 0 ? this.ids.length - 1 : 0; + } + }, + remove_ids: function (ids) { + var before = this.ids.length; + this._super(ids); + if (this._length) { + this._length -= (before - this.ids.length); + } + }, unlink: function(ids, callback, error_callback) { var self = this; return this._super(ids).done(function(result) { - self.ids = _(self.ids).difference(ids); - if (self._length) { - self._length -= 1; - } - if (self.index !== null) { - self.index = self.index <= self.ids.length - 1 ? - self.index : (self.ids.length > 0 ? self.ids.length -1 : 0); - } + self.remove_ids( ids); self.trigger("dataset_changed", ids, callback, error_callback); }); }, diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 3c89ef7126e..b96079d2051 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -895,8 +895,9 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web. this.record_callbacks = { 'remove': function (event, record) { - var $row = self.$current.children( - '[data-id=' + record.get('id') + ']'); + var id = record.get('id'); + self.dataset.remove_ids([id]) + var $row = self.$current.children('[data-id=' + id + ']'); var index = $row.data('index'); $row.remove(); }, From d92f8821ef7db35311f23206b40a1d78b3b535d4 Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Wed, 17 Apr 2013 05:15:50 +0000 Subject: [PATCH 147/160] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20130417051550-7yf32ngvesfbrxyn --- addons/account/i18n/nl_BE.po | 4 ++-- addons/account_followup/i18n/nl_BE.po | 4 ++-- addons/auth_signup/i18n/zh_CN.po | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/account/i18n/nl_BE.po b/addons/account/i18n/nl_BE.po index a3244945957..139807ab49b 100644 --- a/addons/account/i18n/nl_BE.po +++ b/addons/account/i18n/nl_BE.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" -"X-Generator: Launchpad (build 16564)\n" +"X-Launchpad-Export-Date: 2013-04-17 05:15+0000\n" +"X-Generator: Launchpad (build 16567)\n" "Language: nl\n" #. module: account diff --git a/addons/account_followup/i18n/nl_BE.po b/addons/account_followup/i18n/nl_BE.po index 5125f27f2ff..64a73d776ef 100644 --- a/addons/account_followup/i18n/nl_BE.po +++ b/addons/account_followup/i18n/nl_BE.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" -"X-Generator: Launchpad (build 16564)\n" +"X-Launchpad-Export-Date: 2013-04-17 05:15+0000\n" +"X-Generator: Launchpad (build 16567)\n" "Language: nl\n" #. module: account_followup diff --git a/addons/auth_signup/i18n/zh_CN.po b/addons/auth_signup/i18n/zh_CN.po index 9beb3a044d3..aa8d9f952c1 100644 --- a/addons/auth_signup/i18n/zh_CN.po +++ b/addons/auth_signup/i18n/zh_CN.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n" -"X-Generator: Launchpad (build 16564)\n" +"X-Launchpad-Export-Date: 2013-04-17 05:15+0000\n" +"X-Generator: Launchpad (build 16567)\n" #. module: auth_signup #: field:res.partner,signup_type:0 From f203d2426b0f7e480bedf34224e4cacfb9a4e8aa Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Wed, 17 Apr 2013 05:57:42 +0000 Subject: [PATCH 148/160] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20130417055707-rpdalm7k5efoagz6 bzr revid: launchpad_translations_on_behalf_of_openerp-20130417055742-p9nxg3t2tb0553wn --- addons/account/i18n/nl.po | 8 ++++---- addons/base_calendar/i18n/zh_CN.po | 4 ++-- addons/fleet/i18n/tr.po | 13 ++++++++++--- addons/product/i18n/tr.po | 10 +++++----- openerp/addons/base/i18n/he.po | 8 ++++---- 5 files changed, 25 insertions(+), 18 deletions(-) diff --git a/addons/account/i18n/nl.po b/addons/account/i18n/nl.po index 512772c4469..d1b10df8122 100644 --- a/addons/account/i18n/nl.po +++ b/addons/account/i18n/nl.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:37+0000\n" -"PO-Revision-Date: 2013-04-15 07:58+0000\n" +"PO-Revision-Date: 2013-04-16 11:34+0000\n" "Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-16 05:27+0000\n" -"X-Generator: Launchpad (build 16564)\n" +"X-Launchpad-Export-Date: 2013-04-17 05:57+0000\n" +"X-Generator: Launchpad (build 16567)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -1349,7 +1349,7 @@ msgstr "Begin van de periode" #. module: account #: view:account.tax:0 msgid "Refunds" -msgstr "Credits" +msgstr "Credit facturen" #. module: account #: model:process.transition,name:account.process_transition_confirmstatementfromdraft0 diff --git a/addons/base_calendar/i18n/zh_CN.po b/addons/base_calendar/i18n/zh_CN.po index a767b77c822..a748cf1c85c 100644 --- a/addons/base_calendar/i18n/zh_CN.po +++ b/addons/base_calendar/i18n/zh_CN.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-16 05:27+0000\n" -"X-Generator: Launchpad (build 16564)\n" +"X-Launchpad-Export-Date: 2013-04-17 05:57+0000\n" +"X-Generator: Launchpad (build 16567)\n" #. module: base_calendar #: selection:calendar.alarm,trigger_related:0 diff --git a/addons/fleet/i18n/tr.po b/addons/fleet/i18n/tr.po index 96981da6e5a..fe2f1be9f49 100644 --- a/addons/fleet/i18n/tr.po +++ b/addons/fleet/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:39+0000\n" -"PO-Revision-Date: 2013-04-13 17:55+0000\n" +"PO-Revision-Date: 2013-04-16 19:13+0000\n" "Last-Translator: Ayhan KIZILTAN \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-14 05:49+0000\n" -"X-Generator: Launchpad (build 16564)\n" +"X-Launchpad-Export-Date: 2013-04-17 05:57+0000\n" +"X-Generator: Launchpad (build 16567)\n" #. module: fleet #: selection:fleet.vehicle,fuel_type:0 @@ -703,6 +703,13 @@ msgid "" "

          \n" " " msgstr "" +"

          \n" +" Bir araç durumu oluşturmak için tıklayın.\n" +"

          \n" +" Her aracın durumunu izlemek için geçerli durumunu\n" +" özelleştirebilirsiniz. Örnek: Etkin, Onarımda, Satıldı.\n" +"

          \n" +" " #. module: fleet #: view:fleet.vehicle:0 diff --git a/addons/product/i18n/tr.po b/addons/product/i18n/tr.po index 00dd92b6583..1efdf997ff1 100644 --- a/addons/product/i18n/tr.po +++ b/addons/product/i18n/tr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:38+0000\n" -"PO-Revision-Date: 2013-04-13 18:15+0000\n" -"Last-Translator: Ayhan KIZILTAN \n" +"PO-Revision-Date: 2013-04-16 19:03+0000\n" +"Last-Translator: elbruz \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-14 05:50+0000\n" -"X-Generator: Launchpad (build 16564)\n" +"X-Launchpad-Export-Date: 2013-04-17 05:57+0000\n" +"X-Generator: Launchpad (build 16567)\n" #. module: product #: field:product.packaging,rows:0 @@ -1848,7 +1848,7 @@ msgstr "Değişkeler" #: model:ir.actions.act_window,name:product.product_category_action #: model:ir.ui.menu,name:product.menu_products_category msgid "Products by Category" -msgstr "Kategoriye göre Ürünler" +msgstr "Ürün Kategorileri" #. module: product #: model:product.template,name:product.product_product_16_product_template diff --git a/openerp/addons/base/i18n/he.po b/openerp/addons/base/i18n/he.po index a8bbce6e864..fc76958df2f 100644 --- a/openerp/addons/base/i18n/he.po +++ b/openerp/addons/base/i18n/he.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-server\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-03-07 08:36+0000\n" -"PO-Revision-Date: 2013-04-15 11:25+0000\n" +"PO-Revision-Date: 2013-04-16 08:22+0000\n" "Last-Translator: Liron Achdut \n" "Language-Team: Hebrew \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-16 05:27+0000\n" -"X-Generator: Launchpad (build 16564)\n" +"X-Launchpad-Export-Date: 2013-04-17 05:57+0000\n" +"X-Generator: Launchpad (build 16567)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -101,7 +101,7 @@ msgstr "" #: help:ir.cron,model:0 msgid "" "Model name on which the method to be called is located, e.g. 'res.partner'." -msgstr "" +msgstr "שם המודול שבו נמצאת המתודה שלה קוראים, למשל: 'res.partner'." #. module: base #: view:ir.module.module:0 From d248aa30ba5ab3ce2c61390fffb3b696c359bc9a Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Wed, 17 Apr 2013 08:40:51 +0200 Subject: [PATCH 149/160] [REF] get_module_resource() must imported from openerp.modules (instead of openerp.addons). bzr revid: vmt@openerp.com-20130417064051-dvtgaya0kzyryvac --- addons/crm_helpdesk/test/process/help-desk.yml | 3 +-- addons/hr_recruitment/test/recruitment_process.yml | 3 +-- addons/l10n_lu/wizard/print_vat.py | 4 ++-- addons/project_issue/test/subscribe_issue.yml | 5 ++--- addons/report_webkit/webkit_report.py | 6 +++--- 5 files changed, 9 insertions(+), 12 deletions(-) diff --git a/addons/crm_helpdesk/test/process/help-desk.yml b/addons/crm_helpdesk/test/process/help-desk.yml index e2be4a64ca3..95536b1c8dd 100644 --- a/addons/crm_helpdesk/test/process/help-desk.yml +++ b/addons/crm_helpdesk/test/process/help-desk.yml @@ -4,8 +4,7 @@ Mail script will be fetched him request from mail server. so I process that mail after read EML file - !python {model: mail.thread}: | - from openerp import addons - request_file = open(addons.get_module_resource('crm_helpdesk','test', 'customer_question.eml'),'rb') + request_file = open(openerp.modules.module.get_module_resource('crm_helpdesk','test', 'customer_question.eml'),'rb') request_message = request_file.read() self.message_process(cr, uid, 'crm.helpdesk', request_message) - diff --git a/addons/hr_recruitment/test/recruitment_process.yml b/addons/hr_recruitment/test/recruitment_process.yml index f2d4e4736fa..335edc71892 100644 --- a/addons/hr_recruitment/test/recruitment_process.yml +++ b/addons/hr_recruitment/test/recruitment_process.yml @@ -4,8 +4,7 @@ An applicant is interested in the job position. So he sends a resume by email. - !python {model: mail.thread}: | - from openerp import addons - request_file = open(addons.get_module_resource('hr_recruitment','test', 'resume.eml'),'rb') + request_file = open(openerp.modules.module.get_module_resource('hr_recruitment','test', 'resume.eml'),'rb') request_message = request_file.read() self.message_process(cr, uid, 'hr.applicant', request_message) - diff --git a/addons/l10n_lu/wizard/print_vat.py b/addons/l10n_lu/wizard/print_vat.py index 79213026496..bfa058720d3 100644 --- a/addons/l10n_lu/wizard/print_vat.py +++ b/addons/l10n_lu/wizard/print_vat.py @@ -9,10 +9,10 @@ from __future__ import with_statement import openerp from openerp.osv import fields, osv from openerp import tools +from openerp.modules.module import get_module_resource from openerp.tools.translate import _ from openerp.report.render import render from openerp.report.interface import report_int -from openerp import addons import tempfile import os @@ -53,7 +53,7 @@ class report_custom(report_int): try: tmp_file = tempfile.mkstemp(".pdf")[1] try: - tools.pdf_utils.fill_pdf(addons.get_module_resource('l10n_lu','wizard', '2008_DECL_F_M10.pdf'), tmp_file, result) + tools.pdf_utils.fill_pdf(get_module_resource('l10n_lu','wizard', '2008_DECL_F_M10.pdf'), tmp_file, result) with open(tmp_file, "r") as ofile: self.obj = external_pdf(ofile.read()) finally: diff --git a/addons/project_issue/test/subscribe_issue.yml b/addons/project_issue/test/subscribe_issue.yml index 9f16dc80b97..af81ff4d295 100644 --- a/addons/project_issue/test/subscribe_issue.yml +++ b/addons/project_issue/test/subscribe_issue.yml @@ -2,8 +2,7 @@ In Order to test process of Issue in OpenERP, Custmer send the issue by email. - !python {model: mail.thread}: | - from openerp import addons - request_file = open(addons.get_module_resource('project_issue','test', 'issue.eml'),'rb') + request_file = open(openerp.modules.module.get_module_resource('project_issue','test', 'issue.eml'),'rb') request_message = request_file.read() self.message_process(cr, uid, 'project.issue', request_message) - @@ -14,4 +13,4 @@ assert issue_ids and len(issue_ids), "issue is not created after getting request" issue = self.browse(cr, uid, issue_ids[0], context=context) assert not issue.partner_id, "Customer should be a new" - assert issue.name == "Error in the account module", "Subject does not match" \ No newline at end of file + assert issue.name == "Error in the account module", "Subject does not match" diff --git a/addons/report_webkit/webkit_report.py b/addons/report_webkit/webkit_report.py index 01536f471fe..3d8e41c42ff 100644 --- a/addons/report_webkit/webkit_report.py +++ b/addons/report_webkit/webkit_report.py @@ -40,8 +40,8 @@ import logging from report_helper import WebKitHelper import openerp +from openerp.modules.module import get_module_resource from openerp.report.report_sxw import * -from openerp import addons from openerp import tools from openerp.tools.translate import _ from openerp.osv.osv import except_osv @@ -280,7 +280,7 @@ class WebKitParser(report_sxw): template = False if report_xml.report_file : - path = addons.get_module_resource(*report_xml.report_file.split(os.path.sep)) + path = get_module_resource(*report_xml.report_file.split(os.path.sep)) if path and os.path.exists(path) : template = file(path).read() if not template and report_xml.report_webkit_data : @@ -296,7 +296,7 @@ class WebKitParser(report_sxw): ) if not report_xml.header : header = '' - default_head = addons.get_module_resource('report_webkit', 'default_header.html') + default_head = get_module_resource('report_webkit', 'default_header.html') with open(default_head,'r') as f: header = f.read() css = report_xml.webkit_header.css From 95415292154584aaa59c9d3449ab07f2f041cfe2 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Wed, 17 Apr 2013 09:55:46 +0200 Subject: [PATCH 150/160] [FIX] _auto_init(): when _auto_init() is overridden it does not return the super() result, which might brake functional fields initialization. bzr revid: vmt@openerp.com-20130417075546-e3crirzk1trl9yr1 --- addons/account/account_move_line.py | 3 ++- addons/hr_recruitment/hr_recruitment.py | 3 ++- addons/mail/mail_alias.py | 4 +++- addons/mail/res_users.py | 3 ++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index b0b7815ad3c..48b2591485d 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -559,10 +559,11 @@ class account_move_line(osv.osv): ] def _auto_init(self, cr, context=None): - super(account_move_line, self)._auto_init(cr, context=context) + res = super(account_move_line, self)._auto_init(cr, context=context) cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'account_move_line_journal_id_period_id_index\'') if not cr.fetchone(): cr.execute('CREATE INDEX account_move_line_journal_id_period_id_index ON account_move_line (journal_id, period_id)') + return res def _check_no_view(self, cr, uid, ids, context=None): lines = self.browse(cr, uid, ids, context=context) diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index b0b60db6bd5..e41d80fb348 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -510,8 +510,9 @@ class hr_job(osv.osv): def _auto_init(self, cr, context=None): """Installation hook to create aliases for all jobs and avoid constraint errors.""" - self.pool.get('mail.alias').migrate_to_alias(cr, self._name, self._table, super(hr_job,self)._auto_init, + res = self.pool.get('mail.alias').migrate_to_alias(cr, self._name, self._table, super(hr_job,self)._auto_init, self._columns['alias_id'], 'name', alias_prefix='job+', alias_defaults={'job_id': 'id'}, context=context) + return res def create(self, cr, uid, vals, context=None): mail_alias = self.pool.get('mail.alias') diff --git a/addons/mail/mail_alias.py b/addons/mail/mail_alias.py index f806b325291..8730599ad72 100644 --- a/addons/mail/mail_alias.py +++ b/addons/mail/mail_alias.py @@ -160,7 +160,7 @@ class mail_alias(osv.Model): alias_id_column.required = False # call _auto_init - child_model_auto_init_fct(cr, context=context) + res = child_model_auto_init_fct(cr, context=context) registry = RegistryManager.get(cr.dbname) mail_alias = registry.get('mail.alias') @@ -188,6 +188,8 @@ class mail_alias(osv.Model): # set back the unique alias_id constraint alias_id_column.required = True + return res + def create_unique_alias(self, cr, uid, vals, model_name=None, context=None): """Creates an email.alias record according to the values provided in ``vals``, with 2 alterations: the ``alias_name`` value may be suffixed in order to diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py index f7c91939b98..5545745b235 100644 --- a/addons/mail/res_users.py +++ b/addons/mail/res_users.py @@ -60,8 +60,9 @@ class res_users(osv.Model): def _auto_init(self, cr, context=None): """ Installation hook: aliases, partner following themselves """ # create aliases for all users and avoid constraint errors - self.pool.get('mail.alias').migrate_to_alias(cr, self._name, self._table, super(res_users, self)._auto_init, + res = self.pool.get('mail.alias').migrate_to_alias(cr, self._name, self._table, super(res_users, self)._auto_init, self._columns['alias_id'], 'login', alias_force_key='id', context=context) + return res def create(self, cr, uid, data, context=None): # create default alias same as the login From 912d45de5162f1d66e58537d13b09c390a5dc1c8 Mon Sep 17 00:00:00 2001 From: Cedric Snauwaert Date: Wed, 17 Apr 2013 10:05:50 +0200 Subject: [PATCH 151/160] [FIX]base-report-designer-plugin: when downloading plugin, file didn't have .zip extension, move zip file to static folder bzr revid: csn@openerp.com-20130417080550-duen03d70s4tryr1 --- .../base_report_designer_installer.xml | 2 +- addons/base_report_designer/installer.py | 8 ++++---- .../openerp_report_designer.zip | Bin 3 files changed, 5 insertions(+), 5 deletions(-) rename addons/base_report_designer/{plugin => static/base-report-designer-plugin}/openerp_report_designer.zip (100%) diff --git a/addons/base_report_designer/base_report_designer_installer.xml b/addons/base_report_designer/base_report_designer_installer.xml index 657eae8fd63..99898f5a703 100644 --- a/addons/base_report_designer/base_report_designer_installer.xml +++ b/addons/base_report_designer/base_report_designer_installer.xml @@ -20,7 +20,7 @@ - + diff --git a/addons/base_report_designer/installer.py b/addons/base_report_designer/installer.py index a21b6655af7..c75e13d662c 100644 --- a/addons/base_report_designer/installer.py +++ b/addons/base_report_designer/installer.py @@ -23,7 +23,6 @@ from openerp.osv import fields from openerp.osv import osv import base64 from openerp.tools.translate import _ -from openerp.modules.module import get_module_resource class base_report_designer_installer(osv.osv_memory): _name = 'base_report_designer.installer' @@ -31,13 +30,13 @@ class base_report_designer_installer(osv.osv_memory): def default_get(self, cr, uid, fields, context=None): data = super(base_report_designer_installer, self).default_get(cr, uid, fields, context=context) - plugin_file = open(get_module_resource('base_report_designer','plugin', 'openerp_report_designer.zip'),'rb') - data['plugin_file'] = base64.encodestring(plugin_file.read()) + base_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url') + data['plugin_file'] = base_url + '/base_report_designer/static/base-report-designer-plugin/openerp_report_designer.zip' return data _columns = { 'name':fields.char('File name', size=34), - 'plugin_file':fields.binary('OpenObject Report Designer Plug-in', readonly=True, help="OpenObject Report Designer plug-in file. Save as this file and install this plug-in in OpenOffice."), + 'plugin_file':fields.char('OpenObject Report Designer Plug-in', size=256, readonly=True, help="OpenObject Report Designer plug-in file. Save as this file and install this plug-in in OpenOffice."), 'description':fields.text('Description', readonly=True) } @@ -58,5 +57,6 @@ class base_report_designer_installer(osv.osv_memory): 4. if your connection success, A message appears like 'You can start creating your report in current document.'. """ } +base_report_designer_installer() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer.zip b/addons/base_report_designer/static/base-report-designer-plugin/openerp_report_designer.zip similarity index 100% rename from addons/base_report_designer/plugin/openerp_report_designer.zip rename to addons/base_report_designer/static/base-report-designer-plugin/openerp_report_designer.zip From 96dd64e31f02410e6bd94096463d423450b3591b Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 17 Apr 2013 10:14:10 +0200 Subject: [PATCH 152/160] [REVERT] mail: undo model-level change that can cause issue for stable deployments Failing to force a manual update of the mail module would cause all composer wizards to display html contents without the WYSIWYG editor, making it mostly unusable for regular users. Users are not expected to always force an update of all modules after updating to the latest source code. bzr revid: odo@openerp.com-20130417081410-dwc33ymizlihvbng --- addons/email_template/tests/test_mail.py | 2 +- addons/mail/wizard/mail_compose_message.py | 7 ------- addons/mail/wizard/mail_compose_message_view.xml | 2 +- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/addons/email_template/tests/test_mail.py b/addons/email_template/tests/test_mail.py index 68ddbe7dbbd..a4ecb9b6f91 100644 --- a/addons/email_template/tests/test_mail.py +++ b/addons/email_template/tests/test_mail.py @@ -155,7 +155,7 @@ class test_message_compose(TestMailBase): message_pids = [partner.id for partner in compose.partner_ids] partner_ids = [p_a_id] self.assertEqual(compose.subject, '${object.name}', 'mail.compose.message subject incorrect') - self.assertEqual(compose.body, '${object.description}', 'mail.compose.message body incorrect') + self.assertEqual(compose.body, '

          ${object.description}

          ', 'mail.compose.message body incorrect') self.assertEqual(set(message_pids), set(partner_ids), 'mail.compose.message partner_ids incorrect') # 2. Post the comment, get created message diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py index 3a12920c951..301dff515b3 100644 --- a/addons/mail/wizard/mail_compose_message.py +++ b/addons/mail/wizard/mail_compose_message.py @@ -116,13 +116,6 @@ class mail_compose_message(osv.TransientModel): 'mail_compose_message_ir_attachments_rel', 'wizard_id', 'attachment_id', 'Attachments'), 'filter_id': fields.many2one('ir.filters', 'Filters'), - - # Replace `body` with a text field because html fields are sanitized - # just before saving data into the database. This cause the - # sanitization of the templated messages (for mass mailing messages) - # before the rendering, forbidding the use of templated html links. - # The html of the message will be sanitized by message_post() - 'body': fields.text('Contents'), } _defaults = { diff --git a/addons/mail/wizard/mail_compose_message_view.xml b/addons/mail/wizard/mail_compose_message_view.xml index 73c16713718..00ba33a6d6f 100644 --- a/addons/mail/wizard/mail_compose_message_view.xml +++ b/addons/mail/wizard/mail_compose_message_view.xml @@ -30,7 +30,7 @@ - +