From 27f38edb258a6f327c90863f16397126cc269c9b Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 25 Mar 2014 11:07:22 +0100 Subject: [PATCH 01/65] [FIX] dirty saas-3 fix for url lang switching with model converters bzr revid: fme@openerp.com-20140325100722-temaci88fowcr2m5 --- addons/website/models/ir_http.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py index 46b9efc15a8..696734b5f05 100644 --- a/addons/website/models/ir_http.py +++ b/addons/website/models/ir_http.py @@ -65,7 +65,7 @@ class ir_http(orm.AbstractModel): def reroute(self, path): if not hasattr(request, 'rerouting'): - request.rerouting = [] + request.rerouting = [request.httprequest.path] if path in request.rerouting: raise Exception("Rerouting loop is forbidden") request.rerouting.append(path) @@ -79,7 +79,11 @@ class ir_http(orm.AbstractModel): return self._dispatch() def _postprocess_args(self, arguments): - url = request.httprequest.url + if hasattr(request, 'rerouting'): + url = request.rerouting[0] + else: + url = request.httprequest.url + original_url = url for arg in arguments.itervalues(): if isinstance(arg, orm.browse_record) and isinstance(arg._uid, RequestUID): placeholder = arg._uid @@ -91,7 +95,7 @@ class ir_http(orm.AbstractModel): url = url.replace(placeholder.value, good_slug) except KeyError: return self._handle_exception(werkzeug.exceptions.NotFound()) - if url != request.httprequest.url: + if url != original_url: werkzeug.exceptions.abort(werkzeug.utils.redirect(url)) def _handle_exception(self, exception=None, code=500): From 062ee7485c2a3f98a2bb44901096b42472e67df0 Mon Sep 17 00:00:00 2001 From: Kersten Jeremy Date: Tue, 25 Mar 2014 18:21:47 +0100 Subject: [PATCH 02/65] [FIX] IE9 - Catch error when we try to load a new stylesheet but that we have already reached the max number of sheet in IE9 : 31 bzr revid: jke@openerp.com-20140325172147-6ymq1ixebawj4ce2 --- .../static/lib/jquery.sparkline/jquery.sparkline.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/web_kanban_sparkline/static/lib/jquery.sparkline/jquery.sparkline.js b/addons/web_kanban_sparkline/static/lib/jquery.sparkline/jquery.sparkline.js index 43b24c080a6..56498763549 100644 --- a/addons/web_kanban_sparkline/static/lib/jquery.sparkline/jquery.sparkline.js +++ b/addons/web_kanban_sparkline/static/lib/jquery.sparkline/jquery.sparkline.js @@ -582,7 +582,11 @@ var tag; //if ('\v' == 'v') /* ie only */ { if (document.createStyleSheet) { - document.createStyleSheet().cssText = css; + try { + document.createStyleSheet().cssText = css; + } catch(err) { + console.log('Failed - IE9 limit 31 sheets CSS'); + } } else { tag = document.createElement('style'); tag.type = 'text/css'; From b2ea875f4ca3f4a9f3032057e19c58f080fa1073 Mon Sep 17 00:00:00 2001 From: Kersten Jeremy Date: Tue, 25 Mar 2014 18:32:05 +0100 Subject: [PATCH 03/65] [FIX] IE9 - Move the placeholder in base_import from view to js, to use the mechanism of select2 and not the jquery.placeholder. Else, jq.placeholder override the select2 value, because the style option is in reality an input in dom. bzr revid: jke@openerp.com-20140325173205-n2q0dw1kynlkint7 --- addons/base_import/static/src/js/import.js | 2 +- addons/base_import/static/src/xml/import.xml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/addons/base_import/static/src/js/import.js b/addons/base_import/static/src/js/import.js index 1238bc9570f..78cb09001a9 100644 --- a/addons/base_import/static/src/js/import.js +++ b/addons/base_import/static/src/js/import.js @@ -285,7 +285,7 @@ openerp.base_import = function (instance) { callback(item_finder(default_value)); }, - + placeholder: _t('Don\'t import'), width: 'resolve', dropdownCssClass: 'oe_import_selector' }); diff --git a/addons/base_import/static/src/xml/import.xml b/addons/base_import/static/src/xml/import.xml index 97bf3e66f7a..8d7155912e6 100644 --- a/addons/base_import/static/src/xml/import.xml +++ b/addons/base_import/static/src/xml/import.xml @@ -347,8 +347,7 @@ - + From ebb14f776a54c3494d9205e091422f98321ad1e0 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Wed, 26 Mar 2014 16:47:38 +0100 Subject: [PATCH 04/65] [FIX] crm_partner_assign: custom next client is not anymore usefull, cases where the record was no more readable after write (due to security changes) are now handled by the web client bzr revid: dle@openerp.com-20140326154738-jocgzfjpiucdfxki --- .../crm_partner_assign/static/src/js/next.js | 19 ------------------- .../wizard/crm_channel_interested.py | 5 +---- 2 files changed, 1 insertion(+), 23 deletions(-) delete mode 100644 addons/crm_partner_assign/static/src/js/next.js diff --git a/addons/crm_partner_assign/static/src/js/next.js b/addons/crm_partner_assign/static/src/js/next.js deleted file mode 100644 index b3a4fff2732..00000000000 --- a/addons/crm_partner_assign/static/src/js/next.js +++ /dev/null @@ -1,19 +0,0 @@ -openerp.crm_partner_assign = function (instance) { - instance.crm_partner_assign = instance.crm_partner_assign || {}; - instance.crm_partner_assign.next_or_list = function(parent) { - var view = parent.inner_widget.active_view; - var controller = parent.inner_widget.views[view].controller; - if (view === "form"){ - if (controller.dataset.size()) { - controller.execute_pager_action('next'); - } else { - controller.do_action('history_back'); - } - } - controller.do_action({ type: 'ir.actions.act_window_close' }); - if (view === "list"){ - controller.records.remove(controller.records.get(parent.dialog_widget.action.context.active_id)); - } - }; - instance.web.client_actions.add("next_or_list", "instance.crm_partner_assign.next_or_list"); -} \ No newline at end of file diff --git a/addons/crm_partner_assign/wizard/crm_channel_interested.py b/addons/crm_partner_assign/wizard/crm_channel_interested.py index a407ca7b910..87fd5669008 100644 --- a/addons/crm_partner_assign/wizard/crm_channel_interested.py +++ b/addons/crm_partner_assign/wizard/crm_channel_interested.py @@ -70,8 +70,5 @@ class crm_lead_forward_to_partner(osv.TransientModel): for lead in lead_obj.browse(cr, uid, context.get('active_ids', []), context=context): lead_obj.convert_opportunity(cr, SUPERUSER_ID, [lead.id], lead.partner_id and lead.partner_id.id or None, context=None) return { - 'type': 'ir.actions.client', - 'tag': 'next_or_list', - 'params': { - }, + 'type': 'ir.actions.act_window_close', } From e80a179d021d88419555c7d371a2850ea37b92fa Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 26 Mar 2014 18:08:18 +0100 Subject: [PATCH 05/65] [FIX] search widgets: m2o autocompletion had been disabled when @operator or @filter_domain were set, but it was actually useful Was disabled at rev 3878 revid:xmo@openerp.com-20131107111231-nkrllqv0afqdmix6 bzr revid: odo@openerp.com-20140326170818-sc5hqnmq89ayufso --- addons/web/static/src/js/search.js | 3 --- addons/web/static/test/search.js | 38 +++++++++++++++++------------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index 7c04ad40149..04bb1a61d99 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -1560,9 +1560,6 @@ instance.web.search.ManyToOneField = instance.web.search.CharField.extend({ this.model = new instance.web.Model(this.attrs.relation); }, complete: function (needle) { - if (this.attrs.operator || this.attrs.filter_domain) { - return this._super(needle); - } var self = this; // FIXME: "concurrent" searches (multiple requests, mis-ordered responses) var context = instance.web.pyeval.eval( diff --git a/addons/web/static/test/search.js b/addons/web/static/test/search.js index 9874795e1c9..96bbb660103 100644 --- a/addons/web/static/test/search.js +++ b/addons/web/static/test/search.js @@ -620,29 +620,33 @@ openerp.testing.section('search.completions', { {relation: 'dummy.model'}, view); return f.complete("bob"); }); - test("M2O custom operator", {asserts: 6}, function (instance) { - var view = { inputs: [], }; + test("M2O custom operator", {asserts: 10}, function (instance, $s, mock) { + mock('dummy.model:name_search', function (args, kwargs) { + deepEqual(args, [], "should have no positional arguments"); + // the operator is meant for the final search term generation, not the autocompletion + equal(kwargs.operator, undefined, "operator should not be used for autocompletion") + strictEqual(kwargs.name, 'bob'); + return [[42, "Match"]]; + }); + var view = {inputs: [], dataset: {get_context: function () {}}}; var f = new instance.web.search.ManyToOneField( - {attrs: {string: 'Dummy', operator:'ilike'}}, + {attrs: {string: 'Dummy', operator: 'ilike'}}, {relation: 'dummy.model'}, view); return f.complete('bob') - .done(function (completions) { - equal(completions.length, 1, "should provide a single completion"); - var c = completions[0]; - equal(c.label, "Search Dummy for: bob", - "should propose fuzzy searching of the value"); - ok(c.facet, "should have a facet"); + .done(function (c) { + equal(c.length, 2, "should return result + title"); + var title = c[0]; + equal(title.label, f.attrs.string, "title should match field name"); + ok(!title.facet, "title should not have a facet"); - var facet = new instance.web.search.Facet(c.facet); - equal(facet.get('category'), f.attrs.string, - "completion facet should bear the field's name"); - strictEqual(facet.get('field'), f, - "completion facet should yield the field"); - deepEqual(facet.values.toJSON(), [{label: 'bob', value: 'bob'}], - "facet should have a single value using the completion item"); + var f1 = new instance.web.search.Facet(c[1].facet); + equal(c[1].label, "Match"); + equal(f1.get('category'), f.attrs.string); + equal(f1.get('field'), f); + deepEqual(f1.values.toJSON(), [{label: 'Match', value: 42}]); }); -}); + }); test('Integer: invalid', {asserts: 1}, function (instance) { var view = {inputs: []}; var f = new instance.web.search.IntegerField( From f652402dd786eff52f7a34a0ca2bf48c3b9c8331 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Thu, 27 Mar 2014 12:24:56 +0100 Subject: [PATCH 06/65] [FIX] web: read_ids of data.js use method search_read if check_access_rule option is true. This fix is related to revision 3985 revid:dle@openerp.com-20140326142040-pls0dk2kd03z55ro, which did not worked for buffered dataset (virtual one2many line in view form search_read is used instead of read to not return records for which we lose the access rights bzr revid: dle@openerp.com-20140327112456-iyceuf9dnn07hwke --- addons/web/static/src/js/data.js | 14 +++++++++++--- addons/web/static/src/js/view_form.js | 18 +++++++----------- addons/web/static/src/js/view_list.js | 10 +++++----- addons/web/static/test/list-editable.js | 4 ++-- addons/web/static/test/list.js | 3 ++- 5 files changed, 27 insertions(+), 22 deletions(-) diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index 517afa7f5c2..b31de507be4 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -457,9 +457,17 @@ instance.web.DataSet = instance.web.Class.extend(instance.web.PropertiesMixin, return $.Deferred().resolve([]); options = options || {}; - return this._model.call('read', - [ids, fields || false], - {context: this.get_context(options.context)}) + var method = 'read'; + var ids_arg = ids; + var context = this.get_context(options.context); + if (options.check_access_rule === true){ + method = 'search_read'; + ids_arg = [['id', 'in', ids]]; + context.active_test = false; + } + return this._model.call(method, + [ids_arg, fields || false], + {context: context}) .then(function (records) { if (records.length <= 1) { return records; } var indexes = {}; diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 8b68e3ec730..fd838686ba9 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -962,21 +962,17 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM } else { var fields = _.keys(self.fields_view.fields); fields.push('display_name'); - // Use of search_read instead of read to check if we can still read the record (security rules) - return self.dataset.call('search_read', [[['id', '=', self.dataset.ids[self.dataset.index]]], fields], + return self.dataset.read_index(fields, { context: { 'bin_size': true, - 'future_display_name': true, - 'active_test': false - } + 'future_display_name': true + }, + check_access_rule: true }).then(function(r) { - if (_.isEmpty(r)){ - self.do_action('history_back'); - } - else{ - self.trigger('load_record', r[0]); - } + self.trigger('load_record', r); + }).fail(function (){ + self.do_action('history_back'); }); } }); diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 7b12300ec78..cdb9ff8302f 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -533,14 +533,14 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi }, reload_record: function (record) { var self = this; - // Use of search_read instead of read to check if we can still read the record (security rules) - return this.dataset.call('search_read', [ - [['id', '=', record.get('id')]], + return this.dataset.read_ids( + [record.get('id')], _.pluck(_(this.columns).filter(function (r) { return r.tag === 'field'; - }), 'name')] + }), 'name'), + {check_access_rule: true} ).done(function (records) { - var values = _.isEmpty(records) ? undefined : records[0]; + var values = records[0]; if (!values) { self.records.remove(record); return; diff --git a/addons/web/static/test/list-editable.js b/addons/web/static/test/list-editable.js index c6985875b6f..e73249549b8 100644 --- a/addons/web/static/test/list-editable.js +++ b/addons/web/static/test/list-editable.js @@ -329,9 +329,9 @@ openerp.testing.section('list.edition.onwrite', { throw new Error(JSON.stringify(_.toArray(arguments))); }); mock('demo:search_read', function (args, kwargs) { - if (_.isEqual(args[0], [['id', '=', 1]])) { + if (_.isEqual(args[0], [['id', 'in', [1]]])) { return [{id: 1, a: 'some value'}]; - } else if (_.isEqual(args[0], [['id', '=', 42]])) { + } else if (_.isEqual(args[0], [['id', 'in', [42]]])) { return [ {id: 42, a: 'foo'} ]; } throw new Error(JSON.stringify(_.toArray(arguments))); diff --git a/addons/web/static/test/list.js b/addons/web/static/test/list.js index 33f6534bf9a..2ea8790a694 100644 --- a/addons/web/static/test/list.js +++ b/addons/web/static/test/list.js @@ -22,7 +22,8 @@ openerp.testing.section('list.buttons', { throw new Error(JSON.stringify(_.toArray(arguments))); }); mock('demo:search_read', function (args, kwargs) { - if (_.isEqual(args[0], [['id', '=', 2]])) { + console.log(args); + if (_.isEqual(args[0], [['id', 'in', [2]]])) { return []; } throw new Error(JSON.stringify(_.toArray(arguments))); From 9379dc0312ef4597e72d6429079791c02a6884ab Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Fri, 28 Mar 2014 15:23:09 +0100 Subject: [PATCH 07/65] [FIX] chrome.js: detect correct error type for session expired bzr revid: odo@openerp.com-20140328142309-apraiq42f3xavqda --- addons/web/static/src/js/chrome.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 19981069cd9..add30866111 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -256,7 +256,7 @@ instance.web.CrashManager = instance.web.Class.extend({ new (handler)(this, error).display(); return; } - if (error.data.name === "openerp.http.SessionExpiredException") { + if (error.data.name === "openerp.http.SessionExpiredException" || error.data.name === "werkzeug.exceptions.Forbidden") { this.show_warning({type: "Session Expired", data: { message: _t("Your OpenERP session expired. Please refresh the current web page.") }}); return; } From 8809c77f6088c140355fba5f862c0335b1d90c4e Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Fri, 28 Mar 2014 15:27:48 +0100 Subject: [PATCH 08/65] [FIX] http,ir.http: refactor exception handling to allow request-specific handling Typically an exception during a JSON-RPC request must be handled specifically and return a JSON-RPC error in all cases. Previously the _authenticate() step could fail during ir_http.dispatch() and bubble up to werkzeug, yielding a dumb "Internal Server Error 500" even for a JSON-RPC request. bzr revid: odo@openerp.com-20140328142748-00haplmkc3fv6f9y --- openerp/addons/base/ir/ir_http.py | 4 +- openerp/http.py | 79 ++++++++++++++++++------------- 2 files changed, 48 insertions(+), 35 deletions(-) diff --git a/openerp/addons/base/ir/ir_http.py b/openerp/addons/base/ir/ir_http.py index 93dc4d84e76..bd211d14cb8 100644 --- a/openerp/addons/base/ir/ir_http.py +++ b/openerp/addons/base/ir/ir_http.py @@ -85,8 +85,8 @@ class ir_http(osv.AbstractModel): return auth_method def _handle_exception(self, exception): - # If handle exception return something different than None, it will be used as a response - raise + # If handle_exception returns something different than None, it will be used as a response + return request._handle_exception(exception) def _dispatch(self): # locate the controller method diff --git a/openerp/http.py b/openerp/http.py index 61c90929aa2..24f538f3828 100644 --- a/openerp/http.py +++ b/openerp/http.py @@ -202,6 +202,13 @@ class WebRequest(object): self.func_arguments = arguments self.auth_method = auth + + def _handle_exception(self, exception): + """Called within an except block to allow converting exceptions + to abitrary responses. Anything returned (except None) will + be used as response.""" + raise + def _call_function(self, *args, **kwargs): request = self if self.func_request_type != self._request_type: @@ -338,37 +345,15 @@ class JsonRequest(WebRequest): self.params = dict(self.jsonrequest.get("params", {})) self.context = self.params.pop('context', dict(self.session.context)) - def dispatch(self): - """ Calls the method asked for by the JSON-RPC2 or JSONP request - """ - if self.jsonp_handler: - return self.jsonp_handler() - response = {"jsonrpc": "2.0" } - error = None - - try: - response['id'] = self.jsonrequest.get('id') - response["result"] = self._call_function(**self.params) - except AuthenticationError, e: - _logger.exception("Exception during JSON request handling.") - se = serialize_exception(e) - error = { - 'code': 100, - 'message': "OpenERP Session Invalid", - 'data': se - } - self._failed = e # prevent tx commit - except Exception, e: - _logger.exception("Exception during JSON request handling.") - se = serialize_exception(e) - error = { - 'code': 200, - 'message': "OpenERP Server Error", - 'data': se - } - self._failed = e # prevent tx commit - if error: - response["error"] = error + def _json_response(self, result=None, error=None): + response = { + 'jsonrpc': '2.0', + 'id': self.jsonrequest.get('id') + } + if error is not None: + response['error'] = error + if result is not None: + response['result'] = result if self.jsonp: # If we use jsonp, that's mean we are called from another host @@ -381,8 +366,36 @@ class JsonRequest(WebRequest): mime = 'application/json' body = simplejson.dumps(response) - r = werkzeug.wrappers.Response(body, headers=[('Content-Type', mime), ('Content-Length', len(body))]) - return r + return werkzeug.wrappers.Response( + body, headers=[('Content-Type', mime), + ('Content-Length', len(body))]) + + def _handle_exception(self, exception): + """Called within an except block to allow converting exceptions + to abitrary responses. Anything returned (except None) will + be used as response.""" + _logger.exception("Exception during JSON request handling.") + self._failed = exception # prevent tx commit + error = { + 'code': 200, + 'message': "OpenERP Server Error", + 'data': serialize_exception(exception) + } + if isinstance(exception, AuthenticationError): + error['code'] = 100 + error['message'] = "OpenERP Session Invalid" + return self._json_response(error=error) + + def dispatch(self): + """ Calls the method asked for by the JSON-RPC2 or JSONP request + """ + if self.jsonp_handler: + return self.jsonp_handler() + try: + result = self._call_function(**self.params) + return self._json_response(result) + except Exception, e: + return self._handle_exception(e) def serialize_exception(e): tmp = { From 2d0d19849848dfe8c4988e6bab5200dd4bb815e4 Mon Sep 17 00:00:00 2001 From: Kersten Jeremy Date: Fri, 28 Mar 2014 16:47:04 +0100 Subject: [PATCH 09/65] [TYPO] Remove duplicated field "supplier" from view view_partner_form bzr revid: jke@openerp.com-20140328154704-88nph9tlkd48kd1y --- openerp/addons/base/res/res_partner_view.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/openerp/addons/base/res/res_partner_view.xml b/openerp/addons/base/res/res_partner_view.xml index a0e32ab83bd..5880b91e259 100644 --- a/openerp/addons/base/res/res_partner_view.xml +++ b/openerp/addons/base/res/res_partner_view.xml @@ -287,7 +287,6 @@ - From 37c469c5cd4f49c4f816db190caf6e64b19a4222 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Sat, 29 Mar 2014 15:41:46 +0100 Subject: [PATCH 10/65] [FIX] hw_{scanner,escpos}: ensure we always release the lock. [FIX] hw_scanner: mark the thread as deamon. bzr revid: chs@openerp.com-20140329144146-utr8gexna4un65u1 --- addons/hw_escpos/controllers/main.py | 9 ++++----- addons/hw_scanner/controllers/main.py | 8 ++++---- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/addons/hw_escpos/controllers/main.py b/addons/hw_escpos/controllers/main.py index 58c02ebf59f..886b3a96431 100644 --- a/addons/hw_escpos/controllers/main.py +++ b/addons/hw_escpos/controllers/main.py @@ -51,11 +51,10 @@ class EscposDriver(Thread): return connected def lockedstart(self): - self.lock.acquire() - if not self.isAlive(): - self.daemon = True - self.start() - self.lock.release() + with self.lock: + if not self.isAlive(): + self.daemon = True + self.start() def get_escpos_printer(self): try: diff --git a/addons/hw_scanner/controllers/main.py b/addons/hw_scanner/controllers/main.py index 8fbdae62db6..5c9cb50e906 100644 --- a/addons/hw_scanner/controllers/main.py +++ b/addons/hw_scanner/controllers/main.py @@ -88,10 +88,10 @@ class Scanner(Thread): } def lockedstart(self): - self.lock.acquire() - if not self.isAlive(): - self.start() - self.lock.release() + with self.lock: + if not self.isAlive(): + self.daemon = True + self.start() def set_status(self, status, message = None): if status == self.status['status']: From 328ea1762504507fcdf2860be721d532ad2eb28f Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Tue, 1 Apr 2014 11:22:54 +0200 Subject: [PATCH 11/65] [REVERT] rev. 5097 jke@openerp.com-20140328154704-88nph9tlkd48kd1y: This field has been removed from the view because was suspected to be twice included in the view, while it isnt, this is a form view inside an other formview bzr revid: dle@openerp.com-20140401092254-tyu2040tf90ijc49 --- openerp/addons/base/res/res_partner_view.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/openerp/addons/base/res/res_partner_view.xml b/openerp/addons/base/res/res_partner_view.xml index 5880b91e259..a0e32ab83bd 100644 --- a/openerp/addons/base/res/res_partner_view.xml +++ b/openerp/addons/base/res/res_partner_view.xml @@ -287,6 +287,7 @@ + From c65ae9f055e33199fc5369da4cc0f4d605f4bc1a Mon Sep 17 00:00:00 2001 From: Kersten Jeremy Date: Tue, 1 Apr 2014 11:45:56 +0200 Subject: [PATCH 12/65] [FIX] rml2pdf : fix loading of font where mode are not strict. Now we compare always a lower and with serveral mode similar. That fix the usage of some font in report where accent and bold was ignored bzr revid: jke@openerp.com-20140401094556-h1ybpqf989qt5h60 --- openerp/report/render/rml2pdf/trml2pdf.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/openerp/report/render/rml2pdf/trml2pdf.py b/openerp/report/render/rml2pdf/trml2pdf.py index 21a20031a04..87ec7fae3ef 100644 --- a/openerp/report/render/rml2pdf/trml2pdf.py +++ b/openerp/report/render/rml2pdf/trml2pdf.py @@ -283,6 +283,9 @@ class _rml_doc(object): from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont + if mode: + mode = mode.lower() + if fontname not in pdfmetrics._fonts: pdfmetrics.registerFont(TTFont(fontname, filename)) if mode == 'all': @@ -290,14 +293,14 @@ class _rml_doc(object): addMapping(face, 0, 1, fontname) #italic addMapping(face, 1, 0, fontname) #bold addMapping(face, 1, 1, fontname) #italic and bold - elif (mode== 'normal') or (mode == 'regular') or (mode == 'book'): - addMapping(face, 0, 0, fontname) #normal - elif mode == 'italic': + elif mode in ['italic', 'oblique']: addMapping(face, 0, 1, fontname) #italic elif mode == 'bold': addMapping(face, 1, 0, fontname) #bold - elif mode == 'bolditalic': + elif mode in ('bolditalic', 'bold italic','boldoblique', 'bold oblique'): addMapping(face, 1, 1, fontname) #italic and bold + else: + addMapping(face, 0, 0, fontname) #normal def _textual_image(self, node): rc = '' From 11af46b2b13bd3c2c3f343b005c391cdb40a8665 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Tue, 1 Apr 2014 17:44:17 +0200 Subject: [PATCH 13/65] [FIX] resize_image: auto convert BMP images to PNG bzr revid: chs@openerp.com-20140401154417-c8buuqybdsihn3om --- openerp/tools/image.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/openerp/tools/image.py b/openerp/tools/image.py index 08c2fd91f21..93458fb9408 100644 --- a/openerp/tools/image.py +++ b/openerp/tools/image.py @@ -70,7 +70,11 @@ def image_resize_image(base64_source, size=(1024, 1024), encoding='base64', file image_stream = StringIO.StringIO(base64_source.decode(encoding)) image = Image.open(image_stream) # store filetype here, as Image.new below will lose image.format - filetype = filetype or image.format + filetype = (filetype or image.format).upper() + + filetype = { + 'BMP': 'PNG', + }.get(filetype, filetype) asked_width, asked_height = size if asked_width is None: From f22169ebfb3ba1c76cfd2685299f756948648afa Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Wed, 2 Apr 2014 11:37:21 +0200 Subject: [PATCH 14/65] [FIX] website_mail: overwritten _search method created domains syntactically not correct + security rule was applied on superuser bzr revid: dle@openerp.com-20140402093721-hwcdwltbkict4oz4 --- addons/website_mail/models/mail_message.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/addons/website_mail/models/mail_message.py b/addons/website_mail/models/mail_message.py index 12c35f3e83f..e9e06794523 100644 --- a/addons/website_mail/models/mail_message.py +++ b/addons/website_mail/models/mail_message.py @@ -19,9 +19,9 @@ # ############################################################################## +from openerp import SUPERUSER_ID from openerp.tools.translate import _ -from openerp.osv import osv, fields - +from openerp.osv import osv, fields, expression class MailMessage(osv.Model): _inherit = 'mail.message' @@ -48,10 +48,11 @@ class MailMessage(osv.Model): context=None, count=False, access_rights_uid=None): """ Override that adds specific access rights of mail.message, to restrict messages to published messages for public users. """ - group_ids = self.pool.get('res.users').browse(cr, uid, uid, context=context).groups_id - group_user_id = self.pool.get("ir.model.data").get_object_reference(cr, uid, 'base', 'group_public')[1] - if group_user_id in [group.id for group in group_ids]: - args = ['&', ('website_published', '=', True)] + list(args) + if uid != SUPERUSER_ID: + group_ids = self.pool.get('res.users').browse(cr, uid, uid, context=context).groups_id + group_user_id = self.pool.get("ir.model.data").get_object_reference(cr, uid, 'base', 'group_public')[1] + if group_user_id in [group.id for group in group_ids]: + args = expression.AND([[('website_published', '=', True)], list(args)]) return super(MailMessage, self)._search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=count, access_rights_uid=access_rights_uid) From 166c4d2751b2fffbe4ba344172d63dbf81697cbb Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Wed, 2 Apr 2014 13:48:15 +0200 Subject: [PATCH 15/65] [FIX] website_sale_delivery: avoid displaying or choosing non available delivery methods for torder bzr revid: dle@openerp.com-20140402114815-b42pvgk914r0at1d --- addons/website_sale_delivery/controllers/main.py | 3 ++- addons/website_sale_delivery/models/sale_order.py | 8 ++++++++ addons/website_sale_delivery/models/website.py | 9 ++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/addons/website_sale_delivery/controllers/main.py b/addons/website_sale_delivery/controllers/main.py index 73da87b549d..5be0fcfd00a 100644 --- a/addons/website_sale_delivery/controllers/main.py +++ b/addons/website_sale_delivery/controllers/main.py @@ -10,10 +10,11 @@ class Ecommerce(Ecommerce): @http.route(['/shop/payment/'], type='http', auth="public", website=True, multilang=True) def payment(self, **post): cr, uid, context = request.cr, request.uid, request.context + carrier_obj = request.registry.get('delivery.carrier') order = self.get_order() carrier_id = post.get('carrier_id') - if order and carrier_id: + if order and carrier_id or not carrier_obj.grid_get(cr, uid, [order.carrier_id.id], order.partner_shipping_id.id): # recompute delivery costs request.registry['website']._check_carrier_quotation(cr,uid,order,carrier_id,context=context) return request.redirect("/shop/payment/") diff --git a/addons/website_sale_delivery/models/sale_order.py b/addons/website_sale_delivery/models/sale_order.py index 9074e6768ea..b935e728412 100644 --- a/addons/website_sale_delivery/models/sale_order.py +++ b/addons/website_sale_delivery/models/sale_order.py @@ -69,6 +69,14 @@ class SaleOrder(orm.Model): delivery_ctx = dict(context, order_id=order.id) DeliveryCarrier = self.pool.get('delivery.carrier') + carrier_obj = self.pool.get('delivery.carrier') delivery_ids = DeliveryCarrier.search(cr, uid, [('website_published','=',True)], context=context) + # Following loop is done to avoid displaying delivery methods who are not available for this order + # This can surely be done in a more efficient way, but at the moment, it mimics the way it's + # done in delivery_set method of sale.py, from delivery module + for delivery_id in delivery_ids: + grid_id = carrier_obj.grid_get(cr, uid, [delivery_id], order.partner_shipping_id.id) + if not grid_id: + delivery_ids.remove(delivery_id) values['deliveries'] = DeliveryCarrier.browse(cr, SUPERUSER_ID, delivery_ids, context=delivery_ctx) return values diff --git a/addons/website_sale_delivery/models/website.py b/addons/website_sale_delivery/models/website.py index 5c4585de17f..50ee038ed4b 100644 --- a/addons/website_sale_delivery/models/website.py +++ b/addons/website_sale_delivery/models/website.py @@ -21,6 +21,7 @@ class Website(orm.Model): def _check_carrier_quotation(self, cr, uid, order, force_carrier_id=None, context=None): # check to add or remove carrier_id + carrier_obj = self.pool.get('delivery.carrier') carrier_id = False for line in order.website_order_line: if line.product_id.type != "service": @@ -36,7 +37,13 @@ class Website(orm.Model): self.pool['sale.order']._delivery_unset(cr, SUPERUSER_ID, order, context=context) carrier_ids = self.pool.get('delivery.carrier').search(cr, uid, [('website_published','=',True)], context=context) - carrier_id = force_carrier_id or (carrier_ids and carrier_ids[0]) + if force_carrier_id: + carrier_ids.insert(0, force_carrier_id) + for delivery_id in set(carrier_ids): + grid_id = carrier_obj.grid_get(cr, uid, [delivery_id], order.partner_shipping_id.id) + if grid_id: + carrier_id = delivery_id + break order.write({'carrier_id': carrier_id}, context=context) #If carrier_id have no grid, we don't have delivery ! if carrier_id: From 9553c48a8ba682b20ffc7091f57123dcc263ef96 Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Wed, 2 Apr 2014 14:37:07 +0200 Subject: [PATCH 16/65] [FIX] website_mail: force the copy method not to copy website_message_ids field, we do not want duplicated emails (opw 605975). bzr revid: mat@openerp.com-20140402123707-r3e38b64zsheq0tn --- addons/website_mail/models/mail_thread.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/website_mail/models/mail_thread.py b/addons/website_mail/models/mail_thread.py index c88fd032271..d7f750872ca 100644 --- a/addons/website_mail/models/mail_thread.py +++ b/addons/website_mail/models/mail_thread.py @@ -21,7 +21,7 @@ from openerp.osv import osv, fields - +# TODO for trunk, remove me class MailThread(osv.Model): _inherit = 'mail.thread' @@ -35,3 +35,7 @@ class MailThread(osv.Model): help="Website communication history", ), } + + def copy(self, cr, uid, id, default=None, context=None): + default['website_message_ids'] = [] + return super(MailThread, self).copy(cr, uid, id, default=default, context=context) \ No newline at end of file From ad680380b8833ffff65ec4d9877afb283b9f608b Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Wed, 2 Apr 2014 16:45:20 +0200 Subject: [PATCH 17/65] [FIX] website_sale*: not possible to process order if no delivery methods available bzr revid: dle@openerp.com-20140402144520-ulfex2r3q9wwd3ig --- addons/website_sale/controllers/main.py | 45 ++++++++------- addons/website_sale/models/sale_order.py | 3 + addons/website_sale/views/website_sale.xml | 8 ++- .../website_sale_delivery/controllers/main.py | 8 +-- .../models/sale_order.py | 55 ++++++++++++++++--- .../website_sale_delivery/models/website.py | 38 +------------ 6 files changed, 86 insertions(+), 71 deletions(-) diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index b345b810e32..94f0577abb7 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -584,6 +584,7 @@ class Ecommerce(http.Controller): """ cr, uid, context = request.cr, request.uid, request.context payment_obj = request.registry.get('payment.acquirer') + sale_order_obj = request.registry['sale.order'] # if no sale order at this stage: back to checkout beginning order = self.get_order() @@ -603,29 +604,31 @@ class Ecommerce(http.Controller): shipping_partner_id = order.partner_invoice_id.id values = { - 'order': request.registry['sale.order'].browse(cr, SUPERUSER_ID, order.id, context=context) + 'order': sale_order_obj.browse(cr, SUPERUSER_ID, order.id, context=context) } - values.update(request.registry.get('sale.order')._get_website_data(cr, uid, order, context)) + values['errors'] = sale_order_obj._get_errors(cr, uid, order, context=context) + values.update(sale_order_obj._get_website_data(cr, uid, order, context=context)) - # fetch all registered payment means - if tx: - acquirer_ids = [tx.acquirer_id.id] - else: - acquirer_ids = payment_obj.search(cr, SUPERUSER_ID, [('website_published', '=', True), '|', ('company_id', '=', order.company_id.id), ('company_id', '=', False)], context=context) - values['acquirers'] = payment_obj.browse(cr, uid, acquirer_ids, context=context) - render_ctx = dict(context, submit_class='btn btn-primary', submit_txt='Pay Now') - for acquirer in values['acquirers']: - render_ctx['tx_url'] = '/shop/payment/transaction/%s' % acquirer.id - acquirer.button = payment_obj.render( - cr, SUPERUSER_ID, acquirer.id, - order.name, - order.amount_total, - order.pricelist_id.currency_id.id, - partner_id=shipping_partner_id, - tx_values={ - 'return_url': '/shop/payment/validate', - }, - context=render_ctx) + if not values['errors']: + # fetch all registered payment means + if tx: + acquirer_ids = [tx.acquirer_id.id] + else: + acquirer_ids = payment_obj.search(cr, SUPERUSER_ID, [('website_published', '=', True), '|', ('company_id', '=', order.company_id.id), ('company_id', '=', False)], context=context) + values['acquirers'] = payment_obj.browse(cr, uid, acquirer_ids, context=context) + render_ctx = dict(context, submit_class='btn btn-primary', submit_txt='Pay Now') + for acquirer in values['acquirers']: + render_ctx['tx_url'] = '/shop/payment/transaction/%s' % acquirer.id + acquirer.button = payment_obj.render( + cr, SUPERUSER_ID, acquirer.id, + order.name, + order.amount_total, + order.pricelist_id.currency_id.id, + partner_id=shipping_partner_id, + tx_values={ + 'return_url': '/shop/payment/validate', + }, + context=render_ctx) return request.website.render("website_sale.payment", values) diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py index 577005212c3..af5ff650ab2 100644 --- a/addons/website_sale/models/sale_order.py +++ b/addons/website_sale/models/sale_order.py @@ -16,6 +16,9 @@ class SaleOrder(osv.Model): ), } + def _get_errors(self, cr, uid, order, context=None): + return [] + def _get_website_data(self, cr, uid, order, context): return { 'partner': order.partner_id.id, diff --git a/addons/website_sale/views/website_sale.xml b/addons/website_sale/views/website_sale.xml index 599b7e556d9..446dfb4567e 100644 --- a/addons/website_sale/views/website_sale.xml +++ b/addons/website_sale/views/website_sale.xml @@ -883,6 +883,12 @@
  • Confirmation
  • Validate Order

    + +
    +

    + +
    +
    @@ -970,7 +976,7 @@ -
    +
    diff --git a/addons/website_sale_delivery/controllers/main.py b/addons/website_sale_delivery/controllers/main.py index 5be0fcfd00a..e096cd12c79 100644 --- a/addons/website_sale_delivery/controllers/main.py +++ b/addons/website_sale_delivery/controllers/main.py @@ -10,13 +10,13 @@ class Ecommerce(Ecommerce): @http.route(['/shop/payment/'], type='http', auth="public", website=True, multilang=True) def payment(self, **post): cr, uid, context = request.cr, request.uid, request.context - carrier_obj = request.registry.get('delivery.carrier') order = self.get_order() carrier_id = post.get('carrier_id') + if carrier_id: + carrier_id = int(carrier_id) - if order and carrier_id or not carrier_obj.grid_get(cr, uid, [order.carrier_id.id], order.partner_shipping_id.id): - # recompute delivery costs - request.registry['website']._check_carrier_quotation(cr,uid,order,carrier_id,context=context) + request.registry['sale.order']._check_carrier_quotation(cr, uid, order, force_carrier_id=carrier_id, context=context) + if order and carrier_id: return request.redirect("/shop/payment/") res = super(Ecommerce, self).payment(**post) diff --git a/addons/website_sale_delivery/models/sale_order.py b/addons/website_sale_delivery/models/sale_order.py index b935e728412..2ebe3d7fbd5 100644 --- a/addons/website_sale_delivery/models/sale_order.py +++ b/addons/website_sale_delivery/models/sale_order.py @@ -56,6 +56,50 @@ class SaleOrder(orm.Model): ), } + def _check_carrier_quotation(self, cr, uid, order, force_carrier_id=None, context=None): + carrier_obj = self.pool.get('delivery.carrier') + + # check to add or remove carrier_id + if all(line.product_id.type == "service" for line in order.website_order_line): + order.write({'carrier_id': None}, context=context) + self.pool['sale.order']._delivery_unset(cr, SUPERUSER_ID, order, context=context) + return True + else: + carrier_id = force_carrier_id or order.carrier_id.id + if force_carrier_id or not carrier_id or not carrier_id in self._get_delivery_methods(cr, uid, order, context=context): + self.pool['sale.order']._delivery_unset(cr, SUPERUSER_ID, order, context=context) + carrier_ids = self.pool.get('delivery.carrier').search(cr, uid, [('website_published','=',True)], context=context) + if force_carrier_id: + carrier_ids.insert(0, force_carrier_id) + for delivery_id in carrier_ids: + grid_id = carrier_obj.grid_get(cr, uid, [delivery_id], order.partner_shipping_id.id) + if grid_id: + carrier_id = delivery_id + break + order.write({'carrier_id': carrier_id}, context=context) + if carrier_id: + order.delivery_set(context=context) + + return bool(carrier_id) + + def _get_delivery_methods(self, cr, uid, order, context=None): + carrier_obj = self.pool.get('delivery.carrier') + delivery_ids = carrier_obj.search(cr, uid, [('website_published','=',True)], context=context) + # Following loop is done to avoid displaying delivery methods who are not available for this order + # This can surely be done in a more efficient way, but at the moment, it mimics the way it's + # done in delivery_set method of sale.py, from delivery module + for delivery_id in list(delivery_ids): + grid_id = carrier_obj.grid_get(cr, uid, [delivery_id], order.partner_shipping_id.id) + if not grid_id: + delivery_ids.remove(delivery_id) + return delivery_ids + + def _get_errors(self, cr, uid, order, context=None): + errors = super(SaleOrder, self)._get_errors(cr, uid, order, context=context) + if not self._get_delivery_methods(cr, uid, order, context=context): + errors.append(('No delivery method available', 'There is no available delivery method for your order')) + return errors + def _get_website_data(self, cr, uid, order, context=None): """ Override to add delivery-related website data. """ values = super(SaleOrder, self)._get_website_data(cr, uid, order, context=context) @@ -69,14 +113,7 @@ class SaleOrder(orm.Model): delivery_ctx = dict(context, order_id=order.id) DeliveryCarrier = self.pool.get('delivery.carrier') - carrier_obj = self.pool.get('delivery.carrier') - delivery_ids = DeliveryCarrier.search(cr, uid, [('website_published','=',True)], context=context) - # Following loop is done to avoid displaying delivery methods who are not available for this order - # This can surely be done in a more efficient way, but at the moment, it mimics the way it's - # done in delivery_set method of sale.py, from delivery module - for delivery_id in delivery_ids: - grid_id = carrier_obj.grid_get(cr, uid, [delivery_id], order.partner_shipping_id.id) - if not grid_id: - delivery_ids.remove(delivery_id) + delivery_ids = self._get_delivery_methods(cr, uid, order, context=context) + values['deliveries'] = DeliveryCarrier.browse(cr, SUPERUSER_ID, delivery_ids, context=delivery_ctx) return values diff --git a/addons/website_sale_delivery/models/website.py b/addons/website_sale_delivery/models/website.py index 50ee038ed4b..efd8b2233d2 100644 --- a/addons/website_sale_delivery/models/website.py +++ b/addons/website_sale_delivery/models/website.py @@ -9,7 +9,7 @@ class Website(orm.Model): def _ecommerce_create_quotation(self, cr, uid, context=None): order_id = super(Website, self)._ecommerce_create_quotation(cr, uid, context=context) order = self.pool['sale.order'].browse(cr, SUPERUSER_ID, order_id, context=context) - self._check_carrier_quotation(cr, uid, order, force_carrier_id=None, context=context) + self.pool['sale.order']._check_carrier_quotation(cr, uid, order, force_carrier_id=None, context=context) return order_id def _ecommerce_add_product_to_cart(self, cr, uid, product_id=0, order_line_id=0, number=1, set_number=-1, context=None): @@ -17,38 +17,4 @@ class Website(orm.Model): product_id=product_id, order_line_id=order_line_id, number=number, set_number=set_number, context=context) order = self.ecommerce_get_current_order(cr, uid, context=context) - return self._check_carrier_quotation(cr, uid, order, force_carrier_id=None, context=context) and quantity or None - - def _check_carrier_quotation(self, cr, uid, order, force_carrier_id=None, context=None): - # check to add or remove carrier_id - carrier_obj = self.pool.get('delivery.carrier') - carrier_id = False - for line in order.website_order_line: - if line.product_id.type != "service": - carrier_id = True - break - - if not carrier_id: - order.write({'carrier_id': None}, context=context) - self.pool['sale.order']._delivery_unset(cr, SUPERUSER_ID, order, context=context) - return True - else: - if order.carrier_id: - self.pool['sale.order']._delivery_unset(cr, SUPERUSER_ID, order, context=context) - - carrier_ids = self.pool.get('delivery.carrier').search(cr, uid, [('website_published','=',True)], context=context) - if force_carrier_id: - carrier_ids.insert(0, force_carrier_id) - for delivery_id in set(carrier_ids): - grid_id = carrier_obj.grid_get(cr, uid, [delivery_id], order.partner_shipping_id.id) - if grid_id: - carrier_id = delivery_id - break - order.write({'carrier_id': carrier_id}, context=context) - #If carrier_id have no grid, we don't have delivery ! - if carrier_id: - order.delivery_set(context=context) - else: - self.pool['sale.order']._delivery_unset(cr, SUPERUSER_ID, order, context=context) - - return bool(carrier_id) + return self.pool['sale.order']._check_carrier_quotation(cr, uid, order, force_carrier_id=None, context=context) and quantity or None From 39633b3933c60a4755eb5beba7db2530c95cc844 Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Wed, 2 Apr 2014 16:28:23 +0200 Subject: [PATCH 18/65] [FIX] website_quote: skip onchange method when specify no sale.quote.template (opw 605992) bzr revid: mat@openerp.com-20140402142823-btyutrctuc3jh8l3 --- addons/website_quote/models/order.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/website_quote/models/order.py b/addons/website_quote/models/order.py index f515ef0fd05..3614fd63919 100644 --- a/addons/website_quote/models/order.py +++ b/addons/website_quote/models/order.py @@ -131,6 +131,8 @@ class sale_order(osv.osv): } def onchange_template_id(self, cr, uid, ids, template_id, partner=False, fiscal_position=False, context=None): + if not template_id: + return True lines = [] quote_template = self.pool.get('sale.quote.template').browse(cr, uid, template_id, context=context) for line in quote_template.quote_line: From e3f90b739911e8556c4a0d90a66408a58de65621 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Wed, 2 Apr 2014 17:20:43 +0200 Subject: [PATCH 19/65] [FIX] website_sale: do not try to check order if order is nontype bzr revid: dle@openerp.com-20140402152043-2vl7pwlwso4tf2dp --- addons/website_sale_delivery/controllers/main.py | 8 ++++---- addons/website_sale_delivery/models/sale_order.py | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/addons/website_sale_delivery/controllers/main.py b/addons/website_sale_delivery/controllers/main.py index e096cd12c79..9f77d7f67b3 100644 --- a/addons/website_sale_delivery/controllers/main.py +++ b/addons/website_sale_delivery/controllers/main.py @@ -14,10 +14,10 @@ class Ecommerce(Ecommerce): carrier_id = post.get('carrier_id') if carrier_id: carrier_id = int(carrier_id) - - request.registry['sale.order']._check_carrier_quotation(cr, uid, order, force_carrier_id=carrier_id, context=context) - if order and carrier_id: - return request.redirect("/shop/payment/") + if order: + request.registry['sale.order']._check_carrier_quotation(cr, uid, order, force_carrier_id=carrier_id, context=context) + if carrier_id: + return request.redirect("/shop/payment/") res = super(Ecommerce, self).payment(**post) return res diff --git a/addons/website_sale_delivery/models/sale_order.py b/addons/website_sale_delivery/models/sale_order.py index 2ebe3d7fbd5..964fce6346e 100644 --- a/addons/website_sale_delivery/models/sale_order.py +++ b/addons/website_sale_delivery/models/sale_order.py @@ -60,6 +60,8 @@ class SaleOrder(orm.Model): carrier_obj = self.pool.get('delivery.carrier') # check to add or remove carrier_id + if not order: + return False if all(line.product_id.type == "service" for line in order.website_order_line): order.write({'carrier_id': None}, context=context) self.pool['sale.order']._delivery_unset(cr, SUPERUSER_ID, order, context=context) From 9e92e40da3323147fa4b8136973b197418461138 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Wed, 2 Apr 2014 17:28:14 +0200 Subject: [PATCH 20/65] [FIX] websit_sale: checking grid need some more access rights, therefore need to using superuser_id bzr revid: dle@openerp.com-20140402152814-0x90lrp05houblqh --- addons/website_sale_delivery/models/sale_order.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/website_sale_delivery/models/sale_order.py b/addons/website_sale_delivery/models/sale_order.py index 964fce6346e..9826d2105f6 100644 --- a/addons/website_sale_delivery/models/sale_order.py +++ b/addons/website_sale_delivery/models/sale_order.py @@ -74,7 +74,7 @@ class SaleOrder(orm.Model): if force_carrier_id: carrier_ids.insert(0, force_carrier_id) for delivery_id in carrier_ids: - grid_id = carrier_obj.grid_get(cr, uid, [delivery_id], order.partner_shipping_id.id) + grid_id = carrier_obj.grid_get(cr, SUPERUSER_ID, [delivery_id], order.partner_shipping_id.id) if grid_id: carrier_id = delivery_id break @@ -91,7 +91,7 @@ class SaleOrder(orm.Model): # This can surely be done in a more efficient way, but at the moment, it mimics the way it's # done in delivery_set method of sale.py, from delivery module for delivery_id in list(delivery_ids): - grid_id = carrier_obj.grid_get(cr, uid, [delivery_id], order.partner_shipping_id.id) + grid_id = carrier_obj.grid_get(cr, SUPERUSER_ID, [delivery_id], order.partner_shipping_id.id) if not grid_id: delivery_ids.remove(delivery_id) return delivery_ids From 9b19c1a33733eedc20e73b5f8621ae447b1cea6b Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Thu, 3 Apr 2014 09:41:34 +0200 Subject: [PATCH 21/65] [FIX] orm: add missing pooler in call bzr revid: mat@openerp.com-20140403074134-fav63w1k6hm1b8ar --- openerp/osv/orm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index b862a6670c3..5413570930d 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -1903,7 +1903,7 @@ class BaseModel(object): return result def _view_look_dom_arch(self, cr, uid, node, view_id, context=None): - return self['ir.ui.view'].postprocess_and_fields( + return self.pool['ir.ui.view'].postprocess_and_fields( cr, uid, self._name, node, view_id, context=context) def search_count(self, cr, user, args, context=None): From 0a80f598538e2a73a083956a726a174efd06476f Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Thu, 3 Apr 2014 11:23:55 +0200 Subject: [PATCH 22/65] [FIX] calendar: render template even if context values are not set bzr revid: dle@openerp.com-20140403092355-cmnt5cv1ffdv19o8 --- addons/calendar/calendar_data.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/addons/calendar/calendar_data.xml b/addons/calendar/calendar_data.xml index 4435e8a4324..e1aad240292 100644 --- a/addons/calendar/calendar_data.xml +++ b/addons/calendar/calendar_data.xml @@ -212,7 +212,7 @@
    : % for attendee in object.event_id.attendee_ids: -
    +
    % if attendee.cn != object.cn: ${attendee.cn} % else: @@ -227,9 +227,9 @@
    @@ -345,7 +345,7 @@ : % for attendee in object.event_id.attendee_ids: -
    +
    % if attendee.cn != object.cn: ${attendee.cn} % else: @@ -360,9 +360,9 @@ @@ -477,7 +477,7 @@ : % for attendee in object.event_id.attendee_ids: -
    +
    % if attendee.cn != object.cn: ${attendee.cn} % else: From b5c0c3a5d2657136793a7bba841ee6d2142360d4 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Thu, 3 Apr 2014 13:25:11 +0200 Subject: [PATCH 23/65] [FIX] website_sale: order categories according to their sequence bzr revid: dle@openerp.com-20140403112511-h4yi8jimf9hjucyl --- addons/website_sale/controllers/main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 94f0577abb7..99f39a3c921 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -275,6 +275,7 @@ class Ecommerce(http.Controller): all_categories.add(parent) parent = parent.parent_id categories = list(all_categories) + categories.sort(key=lambda x: x.sequence) values = { 'products': products, From f120d6ffb77e08985de7b646f343f6bbb0073e02 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Tue, 1 Apr 2014 18:06:23 +0200 Subject: [PATCH 24/65] [FIX] ir.qweb: avoid errors with function fields of type datetime bzr revid: odo@openerp.com-20140401160623-loj5nsph7tfnn1us --- addons/website/models/ir_qweb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/website/models/ir_qweb.py b/addons/website/models/ir_qweb.py index 64aad94c83e..55c42d2253f 100644 --- a/addons/website/models/ir_qweb.py +++ b/addons/website/models/ir_qweb.py @@ -157,7 +157,7 @@ class DateTime(orm.AbstractModel): value = datetime.datetime.strptime( value, DEFAULT_SERVER_DATETIME_FORMAT) if value: - value = column.context_timestamp( + value = fields.datetime.context_timestamp( cr, uid, timestamp=value, context=context) value = value.strftime(openerp.tools.DEFAULT_SERVER_DATETIME_FORMAT) From 9f7ba142538fb3ab73691db0970b4348f66cbf93 Mon Sep 17 00:00:00 2001 From: Kersten Jeremy Date: Tue, 1 Apr 2014 18:14:40 +0200 Subject: [PATCH 25/65] [FIX] Calendar mail_message : check context before to use it bzr revid: jke@openerp.com-20140401161440-w2jjr0a5u49lwnsj --- addons/calendar/calendar.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/calendar/calendar.py b/addons/calendar/calendar.py index 3dc1fa75b8d..12a1cec79f4 100644 --- a/addons/calendar/calendar.py +++ b/addons/calendar/calendar.py @@ -1582,6 +1582,8 @@ class mail_message(osv.Model): return super(mail_message, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=count) def _find_allowed_model_wise(self, cr, uid, doc_model, doc_dict, context=None): + if context is None: + context = {} if doc_model == 'calendar.event': order = context.get('order', self._order) for virtual_id in self.pool[doc_model].get_recurrent_ids(cr, uid, doc_dict.keys(), [], order=order, context=context): From 0f5c2bda4aa99ef51a3480b6918a73b3b324a24a Mon Sep 17 00:00:00 2001 From: Kersten Jeremy Date: Wed, 2 Apr 2014 09:15:42 +0200 Subject: [PATCH 26/65] [FIX] Calendar - revert commit from forward port 9354. This has been already fixed in 9322. bzr revid: jke@openerp.com-20140402071542-cv7zz4t1t26riuuu --- addons/calendar/calendar.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/calendar/calendar.py b/addons/calendar/calendar.py index db37a7ac505..12a1cec79f4 100644 --- a/addons/calendar/calendar.py +++ b/addons/calendar/calendar.py @@ -1123,7 +1123,7 @@ class calendar_event(osv.Model): def get_end_date(data): if data.get('end_date'): - data['end_date_new'] = ''.join((re.compile('\d')).findall(data.get('end_date'))) + 'T235959' + data['end_date_new'] = ''.join((re.compile('\d')).findall(data.get('end_date'))) + 'T235959Z' return (data.get('end_type') == 'count' and (';COUNT=' + str(data.get('count'))) or '') +\ ((data.get('end_date_new') and data.get('end_type') == 'end_date' and (';UNTIL=' + data.get('end_date_new'))) or '') From 0aba30cbaa7406d55ab220d24eb34567239e9f53 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Wed, 2 Apr 2014 10:53:59 +0200 Subject: [PATCH 27/65] [FIX] web: data, read_ids, active_test false was mislocated. The context is no more altered, a new one is created bzr revid: dle@openerp.com-20140402085359-k7e9iy1vqcpgvcqu --- addons/web/static/src/js/data.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index b31de507be4..73f244bc6a3 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -463,7 +463,7 @@ instance.web.DataSet = instance.web.Class.extend(instance.web.PropertiesMixin, if (options.check_access_rule === true){ method = 'search_read'; ids_arg = [['id', 'in', ids]]; - context.active_test = false; + context = new instance.web.CompoundContext(context, {active_test: false}); } return this._model.call(method, [ids_arg, fields || false], From a6ed98c4c405647a747b4bf29bf61da5ea6756ac Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 2 Apr 2014 11:18:04 +0200 Subject: [PATCH 28/65] [FIX] res_partner: missing index on `display_name` bzr revid: odo@openerp.com-20140402091804-v5g7g8ys4zv562uk --- openerp/addons/base/res/res_partner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index 46f0218e21f..65ade8aee90 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -228,7 +228,7 @@ class res_partner(osv.osv, format_address): _order = "display_name" _columns = { 'name': fields.char('Name', size=128, required=True, select=True), - 'display_name': fields.function(_display_name, type='char', string='Name', store=_display_name_store_triggers), + 'display_name': fields.function(_display_name, type='char', string='Name', store=_display_name_store_triggers, select=True), 'date': fields.date('Date', select=1), 'title': fields.many2one('res.partner.title', 'Title'), 'parent_id': fields.many2one('res.partner', 'Related Company'), From c0db6aec56d383d173fa56b1a2dec2e42495911b Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Wed, 2 Apr 2014 18:50:08 +0200 Subject: [PATCH 29/65] [FIX] web: do not reload record on dialog close if the wizard return an action bzr revid: dle@openerp.com-20140402165008-y19pnbb35eerrnwx --- addons/web/static/src/js/chrome.js | 10 ++++------ addons/web/static/src/js/view_form.js | 6 ++++-- addons/web/static/src/js/views.js | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index add30866111..e893873a31e 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -105,9 +105,6 @@ instance.web.Dialog = instance.web.Widget.extend({ autoOpen: false, position: [false, 40], buttons: null, - beforeClose: function () { - self.trigger("closing"); - }, resizeStop: function() { self.trigger("resized"); }, @@ -208,8 +205,9 @@ instance.web.Dialog = instance.web.Widget.extend({ /** Closes the popup, if destroy_on_close was passed to the constructor, it is also destroyed. */ - close: function() { + close: function(reason) { if (this.dialog_inited && this.$el.is(":data(dialog)")) { + this.trigger("closing", reason); this.$el.dialog('close'); } }, @@ -225,14 +223,14 @@ instance.web.Dialog = instance.web.Widget.extend({ /** Destroys the popup, also closes it. */ - destroy: function () { + destroy: function (reason) { this.$buttons.remove(); _.each(this.getChildren(), function(el) { el.destroy(); }); if (! this.__tmp_dialog_closing) { this.__tmp_dialog_destroying = true; - this.close(); + this.close(reason); this.__tmp_dialog_destroying = undefined; } if (this.dialog_inited && !this.isDestroyed() && this.$el.is(":data(dialog)")) { diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index fd838686ba9..ce2de551e53 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1982,8 +1982,10 @@ instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({ return this.view.do_execute_action( _.extend({}, this.node.attrs, {context: context}), - this.view.dataset, this.view.datarecord.id, function () { - self.view.recursive_reload(); + this.view.dataset, this.view.datarecord.id, function (reason) { + if (!_.isObject(reason)) { + self.view.recursive_reload(); + } }); }, check_disable: function() { diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index b2bd33b393a..e3e91752f4d 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -25,9 +25,9 @@ instance.web.ActionManager = instance.web.Widget.extend({ this._super.apply(this, arguments); this.$el.on('click', 'a.oe_breadcrumb_item', this.on_breadcrumb_clicked); }, - dialog_stop: function () { + dialog_stop: function (reason) { if (this.dialog) { - this.dialog.destroy(); + this.dialog.destroy(reason); } this.dialog = null; }, @@ -408,7 +408,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ if (this.dialog_widget && !this.dialog_widget.isDestroyed()) { this.dialog_widget.destroy(); } - this.dialog_stop(); + this.dialog_stop(executor.action); this.dialog = new instance.web.Dialog(this, { dialogClass: executor.klass, }); @@ -426,7 +426,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.dialog.open(); return initialized; } else { - this.dialog_stop(); + this.dialog_stop(executor.action); this.inner_action = executor.action; this.inner_widget = widget; executor.post_process(widget); From b89d6d99c80e812295b4f6eaf9e9903ee4ebab06 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 3 Apr 2014 16:28:36 +0200 Subject: [PATCH 30/65] [FIX] product_email_template: typos bzr revid: odo@openerp.com-20140403142836-9na8qo7y7gqr0nmi --- addons/product_email_template/__openerp__.py | 2 +- addons/product_email_template/models/product.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/product_email_template/__openerp__.py b/addons/product_email_template/__openerp__.py index 2fdce7f2889..9b7af6f992b 100644 --- a/addons/product_email_template/__openerp__.py +++ b/addons/product_email_template/__openerp__.py @@ -10,7 +10,7 @@ Add email templates to products to be send on invoice confirmation ================================================================== With this module, link your products to a template to send complete information and tools to your customer. -For instance when invoicing a training, the training agenda and materials will automatically be send to your customers.' +For instance when invoicing a training, the training agenda and materials will automatically be sent to your customers.' """, 'website': 'http://www.openerp.com', 'demo': [ diff --git a/addons/product_email_template/models/product.py b/addons/product_email_template/models/product.py index cafdef7ab9d..6b463ffbeb5 100644 --- a/addons/product_email_template/models/product.py +++ b/addons/product_email_template/models/product.py @@ -13,7 +13,7 @@ class product_template(osv.Model): _columns = { 'email_template_id': fields.many2one( 'email.template', 'Product Email Template', - help='When validating an invoice, an email will be send to the customer' + help='When validating an invoice, an email will be sent to the customer' 'based on this template. The customer will receive an email for each' 'product linked to an email template.'), } From fba0d3da9a913fab43aeec719c9dd5f5b14a45af Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 3 Apr 2014 16:34:48 +0200 Subject: [PATCH 31/65] [REM] google_drive: remove unused (but sourced) Goggle API JS lib Should have been removed when Google Drive API was switched to server-side Python at revid:pga@tinyerp.com-20130523104155-83gmp2gucvackppv bzr revid: odo@openerp.com-20140403143448-vds7crizqed0l80a --- addons/google_drive/__openerp__.py | 1 - addons/google_drive/static/lib/gapi/client.js | 7 ------- 2 files changed, 8 deletions(-) delete mode 100644 addons/google_drive/static/lib/gapi/client.js diff --git a/addons/google_drive/__openerp__.py b/addons/google_drive/__openerp__.py index 8f135c5f9d1..e486c2c2d34 100644 --- a/addons/google_drive/__openerp__.py +++ b/addons/google_drive/__openerp__.py @@ -28,7 +28,6 @@ 'installable': True, 'auto_install': False, 'js': [ - 'static/lib/gapi/client.js', 'static/src/js/gdrive.js', ], 'data': [ diff --git a/addons/google_drive/static/lib/gapi/client.js b/addons/google_drive/static/lib/gapi/client.js deleted file mode 100644 index 7f40ec55ef9..00000000000 --- a/addons/google_drive/static/lib/gapi/client.js +++ /dev/null @@ -1,7 +0,0 @@ -var gapi=window.gapi=window.gapi||{};gapi._bs=new Date().getTime();(function(){var f=null,g=encodeURIComponent,k=window,m=decodeURIComponent,n="push",r="test",t="shift",u="replace",y="length",B="split",C="join";var D=k,E=document,aa=D.location,ba=function(){},ca=/\[native code\]/,G=function(a,b,c){return a[b]=a[b]||c},da=function(a){for(var b=0;bda.call(b,e)&&c[n](e)}return c},sa=function(a){"loading"!=E.readyState?Z(a):E.write("<"+X+' src="'+encodeURI(a)+'">")},Z=function(a){var b=E.createElement(X);b.setAttribute("src",a);b.async="true";(a=E.getElementsByTagName(X)[0])?a.parentNode.insertBefore(b,a):(E.head||E.body||E.documentElement).appendChild(b)},ta=function(a,b){var c=b&&b._c;if(c)for(var d=0;d Date: Thu, 3 Apr 2014 16:37:17 +0200 Subject: [PATCH 32/65] [FIX] res.partner: missing index on `parent_id` column bzr revid: odo@openerp.com-20140403143717-dy2bszaevsyivryo --- openerp/addons/base/res/res_partner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index d66c69daaa7..5d97311c01d 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -216,7 +216,7 @@ class res_partner(osv.osv, format_address): 'name': fields.char('Name', size=128, required=True, select=True), 'date': fields.date('Date', select=1), 'title': fields.many2one('res.partner.title', 'Title'), - 'parent_id': fields.many2one('res.partner', 'Related Company'), + 'parent_id': fields.many2one('res.partner', 'Related Company', select=True), 'child_ids': fields.one2many('res.partner', 'parent_id', 'Contacts', domain=[('active','=',True)]), # force "active_test" domain to bypass _search() override 'ref': fields.char('Reference', size=64, select=1), 'lang': fields.selection(_lang_get, 'Language', From 73b3c851da7c9dc371aa2aafbb896b4c617daa4b Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Thu, 3 Apr 2014 16:51:28 +0200 Subject: [PATCH 33/65] [FIX] website*: remove unusable demo links from manifests bzr revid: dle@openerp.com-20140403145128-9w92v4mmasz66mqj --- addons/hr_recruitment/static/description/index.html | 7 +------ addons/website_blog/static/description/index.html | 5 +---- addons/website_crm/static/description/index.html | 5 +---- addons/website_event/static/description/index.html | 5 +---- addons/website_event_track/static/description/index.html | 5 +---- .../website_hr_recruitment/static/description/index.html | 5 +---- 6 files changed, 6 insertions(+), 26 deletions(-) diff --git a/addons/hr_recruitment/static/description/index.html b/addons/hr_recruitment/static/description/index.html index e5196e488f8..6d3aaca308a 100644 --- a/addons/hr_recruitment/static/description/index.html +++ b/addons/hr_recruitment/static/description/index.html @@ -5,12 +5,7 @@

    Organize your vacancies and applications

    -
    - - - - -
    +

    diff --git a/addons/website_blog/static/description/index.html b/addons/website_blog/static/description/index.html index 1f198c11678..171fe942843 100644 --- a/addons/website_blog/static/description/index.html +++ b/addons/website_blog/static/description/index.html @@ -6,10 +6,7 @@

    - - - - +
    diff --git a/addons/website_crm/static/description/index.html b/addons/website_crm/static/description/index.html index 897bee4011e..334e6932bf4 100644 --- a/addons/website_crm/static/description/index.html +++ b/addons/website_crm/static/description/index.html @@ -6,10 +6,7 @@
    - - - - +
    diff --git a/addons/website_event/static/description/index.html b/addons/website_event/static/description/index.html index b47dfc493a8..34669aa4da8 100644 --- a/addons/website_event/static/description/index.html +++ b/addons/website_event/static/description/index.html @@ -6,10 +6,7 @@
    - - - - +
    diff --git a/addons/website_event_track/static/description/index.html b/addons/website_event_track/static/description/index.html index 2612f75d5d3..1bdcb1edd77 100644 --- a/addons/website_event_track/static/description/index.html +++ b/addons/website_event_track/static/description/index.html @@ -6,10 +6,7 @@
    - - - - +
    diff --git a/addons/website_hr_recruitment/static/description/index.html b/addons/website_hr_recruitment/static/description/index.html index 7af603b64dc..f1b255a0758 100644 --- a/addons/website_hr_recruitment/static/description/index.html +++ b/addons/website_hr_recruitment/static/description/index.html @@ -6,10 +6,7 @@
    - - - - +
    From a59b438ceb469857a75cff9c13d626dbf206a49d Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Thu, 3 Apr 2014 16:58:15 +0200 Subject: [PATCH 34/65] [FIX] share: at module init force re-generation of the user groups view without the shared groups bzr revid: chs@openerp.com-20140403145815-i3q3cprl2rvdfunf --- addons/share/res_users.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/addons/share/res_users.py b/addons/share/res_users.py index 25fd25c234f..9f0a47c6674 100644 --- a/addons/share/res_users.py +++ b/addons/share/res_users.py @@ -19,6 +19,7 @@ # ############################################################################## from openerp.osv import fields, osv +from openerp import SUPERUSER_ID class res_groups(osv.osv): _name = "res.groups" @@ -28,6 +29,10 @@ class res_groups(osv.osv): help="Group created to set access rights for sharing data with some users.") } + def init(self, cr): + # force re-generation of the user groups view without the shared groups + self.update_user_groups_view(cr, SUPERUSER_ID) + def get_application_groups(self, cr, uid, domain=None, context=None): if domain is None: domain = [] From c6b281c3f00599ca3d6e45bccdf62fbbca46262d Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Thu, 3 Apr 2014 17:31:29 +0200 Subject: [PATCH 35/65] [FIX] share: move inheritance from res.user before the one from res.groups because res.groups need the change on res.users in its init() function. [FIX] share: call parent init() if present in res.groups bzr revid: chs@openerp.com-20140403153129-jq9zc7ityoy25c73 --- addons/share/res_users.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/addons/share/res_users.py b/addons/share/res_users.py index 9f0a47c6674..fb0dd163b6e 100644 --- a/addons/share/res_users.py +++ b/addons/share/res_users.py @@ -21,6 +21,14 @@ from openerp.osv import fields, osv from openerp import SUPERUSER_ID +class res_users(osv.osv): + _name = 'res.users' + _inherit = 'res.users' + _columns = { + 'share': fields.boolean('Share User', readonly=True, + help="External user with limited access, created only for the purpose of sharing data.") + } + class res_groups(osv.osv): _name = "res.groups" _inherit = 'res.groups' @@ -32,6 +40,9 @@ class res_groups(osv.osv): def init(self, cr): # force re-generation of the user groups view without the shared groups self.update_user_groups_view(cr, SUPERUSER_ID) + parent_class = super(res_groups, self) + if hasattr(parent_class, 'init'): + parent_class.init(cr) def get_application_groups(self, cr, uid, domain=None, context=None): if domain is None: @@ -39,15 +50,5 @@ 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' - _inherit = 'res.users' - _columns = { - '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: From e98131e0cdc24858459d88187e6016074fd40ac9 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 3 Apr 2014 18:20:05 +0200 Subject: [PATCH 36/65] [FIX] ir.qweb: avoid errors with function fields of type datetime bzr revid: odo@openerp.com-20140403162005-i6lbbj6uco6dnrkq --- openerp/addons/base/ir/ir_qweb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py index e9e0386b4e2..f6387d8c2aa 100644 --- a/openerp/addons/base/ir/ir_qweb.py +++ b/openerp/addons/base/ir/ir_qweb.py @@ -602,7 +602,7 @@ class DateTimeConverter(osv.AbstractModel): if isinstance(value, basestring): value = datetime.datetime.strptime( value, openerp.tools.DEFAULT_SERVER_DATETIME_FORMAT) - value = column.context_timestamp( + value = fields.datetime.context_timestamp( cr, uid, timestamp=value, context=context) if options and 'format' in options: From effa87f79404f0100cf78bc65087fd1693732a20 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 3 Apr 2014 18:26:50 +0200 Subject: [PATCH 37/65] [IMP] ir.actions: add Warning in eval context for server actions This way one can do `raise Warning(Foo)` to abort a transaction and show a user-friendly warning to the user. bzr revid: odo@openerp.com-20140403162650-m7zmmr9dba7jnzxp --- openerp/addons/base/ir/ir_actions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openerp/addons/base/ir/ir_actions.py b/openerp/addons/base/ir/ir_actions.py index 2e95b3ee306..748e209bb54 100644 --- a/openerp/addons/base/ir/ir_actions.py +++ b/openerp/addons/base/ir/ir_actions.py @@ -935,6 +935,7 @@ class ir_actions_server(osv.osv): 'uid': uid, 'user': user, 'context': context, + 'Warning': openerp.exceptions.Warning, } return eval_context From 8f174e13bdb603065978419b67c32370ba1c3ea9 Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Fri, 4 Apr 2014 07:07:59 +0000 Subject: [PATCH 38/65] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20140404070722-99m3lomg172fzapc bzr revid: launchpad_translations_on_behalf_of_openerp-20140404070759-302tyo6k09v8arhz --- addons/account_asset/i18n/sv.po | 30 +++++-- addons/delivery/i18n/sv.po | 54 +++++++++--- addons/hr/i18n/sv.po | 8 +- addons/hr_attendance/i18n/sv.po | 31 ++++--- addons/hr_expense/i18n/sv.po | 47 ++++++---- addons/hr_holidays/i18n/sv.po | 112 +++++++++++++++--------- addons/hr_payroll/i18n/sv.po | 60 ++++++++----- addons/mail/i18n/sv.po | 61 ++++++++----- addons/sale/i18n/sv.po | 124 ++++++++++++++++++++++++--- addons/stock/i18n/zh_TW.po | 12 +-- openerp/addons/base/i18n/ab.po | 4 +- openerp/addons/base/i18n/af.po | 4 +- openerp/addons/base/i18n/am.po | 4 +- openerp/addons/base/i18n/ar.po | 4 +- openerp/addons/base/i18n/bg.po | 4 +- openerp/addons/base/i18n/bn.po | 4 +- openerp/addons/base/i18n/bs.po | 6 +- openerp/addons/base/i18n/ca.po | 4 +- openerp/addons/base/i18n/cs.po | 4 +- openerp/addons/base/i18n/da.po | 4 +- openerp/addons/base/i18n/de.po | 4 +- openerp/addons/base/i18n/el.po | 4 +- openerp/addons/base/i18n/en_GB.po | 4 +- openerp/addons/base/i18n/es.po | 4 +- openerp/addons/base/i18n/es_AR.po | 4 +- openerp/addons/base/i18n/es_BO.po | 4 +- openerp/addons/base/i18n/es_CL.po | 4 +- openerp/addons/base/i18n/es_CR.po | 4 +- openerp/addons/base/i18n/es_DO.po | 4 +- openerp/addons/base/i18n/es_EC.po | 4 +- openerp/addons/base/i18n/es_MX.po | 7 +- openerp/addons/base/i18n/es_PE.po | 6 +- openerp/addons/base/i18n/es_VE.po | 4 +- openerp/addons/base/i18n/et.po | 6 +- openerp/addons/base/i18n/eu.po | 4 +- openerp/addons/base/i18n/fa.po | 4 +- openerp/addons/base/i18n/fa_AF.po | 4 +- openerp/addons/base/i18n/fi.po | 4 +- openerp/addons/base/i18n/fr.po | 4 +- openerp/addons/base/i18n/fr_CA.po | 6 +- openerp/addons/base/i18n/gl.po | 4 +- openerp/addons/base/i18n/gu.po | 4 +- openerp/addons/base/i18n/he.po | 4 +- openerp/addons/base/i18n/hi.po | 4 +- openerp/addons/base/i18n/hr.po | 4 +- openerp/addons/base/i18n/hu.po | 40 ++++----- openerp/addons/base/i18n/hy.po | 4 +- openerp/addons/base/i18n/id.po | 4 +- openerp/addons/base/i18n/is.po | 4 +- openerp/addons/base/i18n/it.po | 6 +- openerp/addons/base/i18n/ja.po | 4 +- openerp/addons/base/i18n/ka.po | 4 +- openerp/addons/base/i18n/kk.po | 4 +- openerp/addons/base/i18n/ko.po | 4 +- openerp/addons/base/i18n/lt.po | 4 +- openerp/addons/base/i18n/lv.po | 4 +- openerp/addons/base/i18n/mk.po | 4 +- openerp/addons/base/i18n/mn.po | 4 +- openerp/addons/base/i18n/nb.po | 4 +- openerp/addons/base/i18n/nl.po | 4 +- openerp/addons/base/i18n/nl_BE.po | 4 +- openerp/addons/base/i18n/pl.po | 4 +- openerp/addons/base/i18n/pt.po | 4 +- openerp/addons/base/i18n/pt_BR.po | 4 +- openerp/addons/base/i18n/ro.po | 4 +- openerp/addons/base/i18n/ru.po | 4 +- openerp/addons/base/i18n/sk.po | 4 +- openerp/addons/base/i18n/sl.po | 4 +- openerp/addons/base/i18n/sq.po | 4 +- openerp/addons/base/i18n/sr.po | 4 +- openerp/addons/base/i18n/sr@latin.po | 4 +- openerp/addons/base/i18n/sv.po | 4 +- openerp/addons/base/i18n/th.po | 4 +- openerp/addons/base/i18n/tlh.po | 4 +- openerp/addons/base/i18n/tr.po | 4 +- openerp/addons/base/i18n/uk.po | 4 +- openerp/addons/base/i18n/ur.po | 4 +- openerp/addons/base/i18n/vi.po | 4 +- openerp/addons/base/i18n/zh_CN.po | 4 +- openerp/addons/base/i18n/zh_HK.po | 4 +- openerp/addons/base/i18n/zh_TW.po | 4 +- 81 files changed, 546 insertions(+), 326 deletions(-) diff --git a/addons/account_asset/i18n/sv.po b/addons/account_asset/i18n/sv.po index e95872c9ff0..83e412a1d42 100644 --- a/addons/account_asset/i18n/sv.po +++ b/addons/account_asset/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-03-27 12:09+0000\n" +"PO-Revision-Date: 2014-04-03 22:23+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-28 06:44+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: account_asset #: view:account.asset.asset:0 @@ -440,12 +440,17 @@ msgid "" "You can manually close an asset when the depreciation is over. If the last " "line of depreciation is posted, the asset automatically goes in that status." msgstr "" +"När en inventarie har skapats, är statusen \"Utkast\".\n" +"Om inventarien är bekräftad, går status i \"Aktiv\" och avskrivningslraderna " +"kan postas i redovisningen.\n" +"Du kan stänga manuellt en inventarie när avskrivningen är över. Om den sista " +"raden i avskrivning postas, går tillgången automatiskt i denna status." #. module: account_asset #: field:account.asset.asset,state:0 #: field:asset.asset.report,state:0 msgid "Status" -msgstr "" +msgstr "Status" #. module: account_asset #: field:account.asset.asset,partner_id:0 @@ -492,7 +497,7 @@ msgstr "Beräkna" #. module: account_asset #: view:account.asset.history:0 msgid "Asset History" -msgstr "" +msgstr "Inventariehistorik" #. module: account_asset #: model:ir.model,name:account_asset.model_asset_depreciation_confirmation_wizard @@ -605,6 +610,7 @@ msgstr "Aktuellt" #, python-format msgid "You cannot delete an asset that contains posted depreciation lines." msgstr "" +"Du kan inte ta bort en inventarie som innehåller bokförda avskrivningsrader." #. module: account_asset #: view:account.asset.category:0 @@ -614,12 +620,12 @@ msgstr "Avskrivningsmetod" #. module: account_asset #: field:account.asset.depreciation.line,amount:0 msgid "Current Depreciation" -msgstr "" +msgstr "Aktuell avskrivningsgrad" #. module: account_asset #: field:account.asset.asset,name:0 msgid "Asset Name" -msgstr "" +msgstr "Inventarienamn" #. module: account_asset #: field:account.asset.category,open_asset:0 @@ -679,6 +685,14 @@ msgid "" "

    \n" " " msgstr "" +"

    \n" +" Ur denna rapport kan du få en överblick på alla avskrivningar. " +"Den\n" +" verktygsökning kan också användas för att anpassa dina " +"inventarierapporter och\n" +" så, matcha denna analys till dina behov;\n" +" \n" +" " #. module: account_asset #: field:account.asset.asset,purchase_value:0 @@ -736,7 +750,7 @@ msgstr "" #. module: account_asset #: field:account.asset.depreciation.line,sequence:0 msgid "Sequence" -msgstr "" +msgstr "Nummerserie" #. module: account_asset #: help:account.asset.category,method_period:0 diff --git a/addons/delivery/i18n/sv.po b/addons/delivery/i18n/sv.po index 9067f5ea56c..36bc1f25b67 100644 --- a/addons/delivery/i18n/sv.po +++ b/addons/delivery/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-03-31 16:57+0000\n" +"PO-Revision-Date: 2014-04-03 10:23+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-01 06:52+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: delivery #: report:sale.shipping:0 @@ -30,7 +30,7 @@ msgstr "Leverans per post" #. module: delivery #: view:delivery.grid.line:0 msgid " in Function of " -msgstr "" +msgstr " är en funktion av " #. module: delivery #: view:delivery.carrier:0 @@ -93,6 +93,8 @@ msgstr "Utgående Leverans" #, python-format msgid "No line matched this product or order in the chosen delivery grid." msgstr "" +"Ingen rad matchade denna produkt eller order inom det valda " +"leveranskombinationen." #. module: delivery #: model:ir.actions.act_window,name:delivery.action_picking_tree4 @@ -132,6 +134,19 @@ msgid "" "

    \n" " " msgstr "" +"

    \n" +" Klicka för att skapa en leveransprislista för en viss " +"region.\n" +"

    \n" +" Med leveransprislistan kan du beräkna kostnaden och\n" +" försäljningspriset för leveransen baserat på produkternas " +"vikt\n" +" och andra kriterier. Du kan definiera flera prislistor\n" +" för varje leveransmetod: per land eller ett område i ett " +"visst\n" +" land som definieras av ett postnummerområde.\n" +"

    \n" +" " #. module: delivery #: report:sale.shipping:0 @@ -151,7 +166,7 @@ msgstr "Mängd" #. module: delivery #: view:sale.order:0 msgid "Add in Quote" -msgstr "" +msgstr "Lägg till på offert" #. module: delivery #: selection:delivery.grid.line,price_type:0 @@ -232,6 +247,8 @@ msgid "" "If you don't 'Add in Quote', the exact price will be computed when invoicing " "based on delivery order(s)." msgstr "" +"Om du inte \"Lägg i offert\", kommer det exakta priset beräknas vid " +"fakturering baserad på leveransordern." #. module: delivery #: field:delivery.carrier,partner_id:0 @@ -276,7 +293,7 @@ msgstr "Beloppsgräns för fri frakt i företagets valuta" #. module: delivery #: field:delivery.carrier,free_if_more_than:0 msgid "Free If Order Total Amount Is More Than" -msgstr "" +msgstr "Fritt vid ordertotal över" #. module: delivery #: field:delivery.grid.line,grid_id:0 @@ -432,6 +449,21 @@ msgid "" "

    \n" " " msgstr "" +"

    \n" +" Klicka för att definiera en ny leveransmetod.\n" +"

    \n" +" Varje transportör (t.ex. UPS) kan ha flera leveransmetoder " +"(t.ex.\n" +" UPS Express, UPS Standard) med en uppsättning av " +"prissättningsregler knuten\n" +" till varje metod.\n" +"

    \n" +" Dessa metoder gör det möjligt att automatiskt beräkna " +"leveranspriset\n" +" enligt dina inställningar; på kundordern (baserat på\n" +" offert) eller faktura (baserat på leveransorder).\n" +"

    \n" +" " #. module: delivery #: field:delivery.grid.line,max_value:0 @@ -465,7 +497,7 @@ msgstr "Fritt om det överstiger %.2f" #. module: delivery #: model:ir.model,name:delivery.model_stock_picking_in msgid "Incoming Shipments" -msgstr "" +msgstr "Inkommande leveranser" #. module: delivery #: selection:delivery.grid.line,operator:0 @@ -475,7 +507,7 @@ msgstr "<=" #. module: delivery #: help:stock.picking,weight_uom_id:0 msgid "Unit of measurement for Weight" -msgstr "" +msgstr "Viktsenhet" #. module: delivery #: report:sale.shipping:0 @@ -550,7 +582,7 @@ msgstr "Speditör" #: model:ir.actions.act_window,name:delivery.action_delivery_carrier_form #: model:ir.ui.menu,name:delivery.menu_action_delivery_carrier_form msgid "Delivery Methods" -msgstr "" +msgstr "Leveransmetoder" #. module: delivery #: code:addons/delivery/sale.py:57 @@ -577,7 +609,7 @@ msgstr "Försäljningspris" #. module: delivery #: view:stock.picking.out:0 msgid "Print Delivery Order" -msgstr "" +msgstr "Skriv ut leveransorder" #. module: delivery #: view:delivery.grid:0 @@ -589,7 +621,7 @@ msgstr "Tillstånd" #: help:stock.move,weight_uom_id:0 msgid "" "Unit of Measure (Unit of Measure) is the unit of measurement for Weight" -msgstr "" +msgstr "Enhet är måttenheten för vikt" #. module: delivery #: field:delivery.grid.line,price_type:0 diff --git a/addons/hr/i18n/sv.po b/addons/hr/i18n/sv.po index 2f08a0c9526..baa00de4231 100644 --- a/addons/hr/i18n/sv.po +++ b/addons/hr/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-04-02 13:01+0000\n" +"PO-Revision-Date: 2014-04-04 06:48+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-03 06:01+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: hr #: model:process.node,name:hr.process_node_openerpuser0 @@ -169,7 +169,7 @@ msgstr "Född" #: model:ir.actions.act_window,name:hr.open_view_categ_form #: model:ir.ui.menu,name:hr.menu_view_employee_category_form msgid "Employee Tags" -msgstr "Etiketter på anställda" +msgstr "Medarbetaretiketter" #. module: hr #: view:hr.job:0 diff --git a/addons/hr_attendance/i18n/sv.po b/addons/hr_attendance/i18n/sv.po index 5dd39961d5a..3d4c87f2592 100644 --- a/addons/hr_attendance/i18n/sv.po +++ b/addons/hr_attendance/i18n/sv.po @@ -8,19 +8,19 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:37+0000\n" -"PO-Revision-Date: 2014-03-19 07:45+0000\n" +"PO-Revision-Date: 2014-04-04 06:54+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-20 06:19+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: hr_attendance #: model:ir.model,name:hr_attendance.model_hr_attendance_month msgid "Print Monthly Attendance Report" -msgstr "Skriv månatlig närvarorapport" +msgstr "" #. module: hr_attendance #: view:hr.attendance:0 @@ -37,7 +37,7 @@ msgstr "Senaste stämpling" #: field:hr.employee,state:0 #: model:ir.model,name:hr_attendance.model_hr_attendance msgid "Attendance" -msgstr "Närvarande" +msgstr "Närvaro" #. module: hr_attendance #. openerp-web @@ -56,14 +56,15 @@ msgstr "" #. module: hr_attendance #: help:hr.action.reason,name:0 msgid "Specifies the reason for Signing In/Signing Out." -msgstr "Ange in/utloggningsorsak" +msgstr "Ange in/utstämplingsorsak" #. module: hr_attendance #: report:report.hr.timesheet.attendance.error:0 msgid "" "(*) A positive delay means that the employee worked less than recorded." msgstr "" -"(*) A positive delay means that the employee worked less than recorded." +"(*) Ett positiv uppehåll innebär att den anställde arbetat mindre än " +"registrerat." #. module: hr_attendance #: view:hr.attendance.month:0 @@ -127,7 +128,7 @@ msgstr "Utskrift" #: field:hr.attendance,employee_id:0 #: model:ir.model,name:hr_attendance.model_hr_employee msgid "Employee" -msgstr "Anställd" +msgstr "Medarbetare" #. module: hr_attendance #: field:hr.attendance.month,month:0 @@ -179,7 +180,7 @@ msgstr "Varning" #. module: hr_attendance #: help:hr.config.settings,group_hr_attendance:0 msgid "Allocates attendance group to all users." -msgstr "" +msgstr "Tilldela närvarogrupp till alla användare." #. module: hr_attendance #: view:hr.attendance:0 @@ -220,7 +221,7 @@ msgstr "Anledning" #. module: hr_attendance #: view:hr.attendance.error:0 msgid "Print Attendance Report Error" -msgstr "Skrivut delatagarrapportfel" +msgstr "Skriv ut närvarorapportfel" #. module: hr_attendance #: model:ir.actions.act_window,help:hr_attendance.open_view_attendance @@ -251,7 +252,7 @@ msgstr "Datum" #. module: hr_attendance #: field:hr.config.settings,group_hr_attendance:0 msgid "Track attendances for all employees" -msgstr "" +msgstr "Följ upp närvaro för alla anställda" #. module: hr_attendance #: selection:hr.attendance.month,month:0 @@ -309,7 +310,7 @@ msgstr "Anställds närvaro" #. module: hr_attendance #: view:hr.action.reason:0 msgid "Define attendance reason" -msgstr "Define attendance reason" +msgstr "Defniera frånvarorsak" #. module: hr_attendance #: selection:hr.action.reason,action_type:0 @@ -367,7 +368,7 @@ msgstr "Tidrapporter" #: model:ir.actions.act_window,name:hr_attendance.open_view_attendance_reason #: model:ir.ui.menu,name:hr_attendance.menu_open_view_attendance_reason msgid "Attendance Reasons" -msgstr "Närvaro Orsaker" +msgstr "Frånvaroorsaker" #. module: hr_attendance #: selection:hr.attendance.month,month:0 @@ -398,7 +399,7 @@ msgstr "september" #. module: hr_attendance #: view:hr.action.reason:0 msgid "Attendance reasons" -msgstr "Närvaro orsaker" +msgstr "Frånvaroorsaker" #. module: hr_attendance #: model:ir.model,name:hr_attendance.model_hr_attendance_week @@ -434,6 +435,8 @@ msgid "" "You tried to %s with a date anterior to another event !\n" "Try to contact the HR Manager to correct attendances." msgstr "" +"Du försökte %s med ett datum som föregår en annan händelse!\n" +"Försök att kontakta personalansvarig för att korrigera närvaro." #. module: hr_attendance #: selection:hr.attendance.month,month:0 diff --git a/addons/hr_expense/i18n/sv.po b/addons/hr_expense/i18n/sv.po index 8e6353ba5f3..c3647221266 100644 --- a/addons/hr_expense/i18n/sv.po +++ b/addons/hr_expense/i18n/sv.po @@ -8,20 +8,20 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-03-31 17:01+0000\n" +"PO-Revision-Date: 2014-04-04 06:12+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-01 06:52+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: hr_expense #: view:hr.expense.expense:0 #: model:process.node,name:hr_expense.process_node_confirmedexpenses0 msgid "Confirmed Expenses" -msgstr "Bekräftade utgifter" +msgstr "Bekräftade utlägg" #. module: hr_expense #: code:addons/hr_expense/hr_expense.py:349 @@ -181,7 +181,7 @@ msgstr "Produkter" #. module: hr_expense #: view:hr.expense.report:0 msgid "Confirm Expenses" -msgstr "Bekräfta utgifter" +msgstr "Bekräfta utlägg" #. module: hr_expense #: selection:hr.expense.report,state:0 @@ -266,7 +266,7 @@ msgstr "Totalt:" #. module: hr_expense #: model:process.transition,name:hr_expense.process_transition_refuseexpense0 msgid "Refuse expense" -msgstr "Avslagna utgifter" +msgstr "Avslagna utlägg" #. module: hr_expense #: field:hr.expense.report,price_average:0 @@ -340,7 +340,7 @@ msgstr "Följare" #: field:hr.expense.expense,employee_id:0 #: view:hr.expense.report:0 msgid "Employee" -msgstr "Anställd" +msgstr "Medarbetare" #. module: hr_expense #: view:hr.expense.expense:0 @@ -369,7 +369,7 @@ msgstr "Vissa kostnader kan faktureras kunden" #: code:addons/hr_expense/hr_expense.py:238 #, python-format msgid "The employee must have a home address." -msgstr "" +msgstr "Medarbetaren måste ha en hemadress" #. module: hr_expense #: view:board.board:0 @@ -386,7 +386,7 @@ msgstr "Skapad datum" #. module: hr_expense #: model:ir.actions.report.xml,name:hr_expense.hr_expenses msgid "HR expenses" -msgstr "Personalutgifter" +msgstr "Personalutlägg" #. module: hr_expense #: field:hr.expense.expense,id:0 @@ -447,7 +447,7 @@ msgstr "" #: code:addons/hr_expense/hr_expense.py:240 #, python-format msgid "The employee must have a payable account set on his home address." -msgstr "" +msgstr "Den anställde måste ha ett utgiftskonto anslutet till sin hemadress" #. module: hr_expense #: view:hr.expense.report:0 @@ -502,7 +502,7 @@ msgstr "Valuta" #. module: hr_expense #: field:hr.expense.expense,voucher_id:0 msgid "Employee's Receipt" -msgstr "" +msgstr "Medarbetarkvitto" #. module: hr_expense #: selection:hr.expense.expense,state:0 @@ -512,7 +512,7 @@ msgstr "Väntar på godkännande" #. module: hr_expense #: model:process.node,note:hr_expense.process_node_draftexpenses0 msgid "Employee encode all his expenses" -msgstr "Anställd koda alla hans utgifter" +msgstr "Medarbetare kodifierar alla sina utgifter" #. module: hr_expense #: view:hr.expense.expense:0 @@ -648,6 +648,17 @@ msgid "" "

    \n" " " msgstr "" +"

    \n" +" Klicka för att registrera nya utgifter.\n" +"

    \n" +" OpenERP kommer att se till att hela processen följs; " +"bekostnad\n" +" Bladet är validerat av chef (s), har arbetstagaren " +"ersättning\n" +" utlägg sina utlägg, vissa utlägg måste återfaktureras\n" +" kunder.\n" +"

    \n" +" " #. module: hr_expense #: view:hr.expense.expense:0 @@ -677,7 +688,7 @@ msgstr "" #. module: hr_expense #: model:product.template,name:hr_expense.car_travel_product_template msgid "Car Travel Expenses" -msgstr "Utgifter resor med bil" +msgstr "Bilutlägg" #. module: hr_expense #: view:hr.expense.expense:0 @@ -692,12 +703,12 @@ msgstr "" #. module: hr_expense #: model:process.node,note:hr_expense.process_node_confirmedexpenses0 msgid "The employee validates his expense sheet" -msgstr "Den anställde bekräftar sin kostnadsblankett" +msgstr "Medarbetaren granskar sin utläggsansökan" #. module: hr_expense #: view:hr.expense.expense:0 msgid "Expenses to Invoice" -msgstr "Utgifter att fakturera" +msgstr "Utlägg att fakturera" #. module: hr_expense #: model:process.node,name:hr_expense.process_node_supplierinvoice0 @@ -718,7 +729,7 @@ msgstr "" #. module: hr_expense #: view:hr.expense.report:0 msgid "Approved Expenses" -msgstr "Godkända utgifter" +msgstr "Godkända utlägg" #. module: hr_expense #: report:hr.expense:0 @@ -883,7 +894,7 @@ msgstr "Ref." #. module: hr_expense #: field:hr.expense.report,employee_id:0 msgid "Employee's Name" -msgstr "Anställds namn" +msgstr "Medarbetarens namn" #. module: hr_expense #: view:hr.expense.report:0 @@ -964,7 +975,7 @@ msgstr "Utlägg godkänt" #: model:ir.ui.menu,name:hr_expense.next_id_49 #: model:product.category,name:hr_expense.cat_expense msgid "Expenses" -msgstr "Utgifter" +msgstr "Utlägg" #. module: hr_expense #: help:product.product,hr_expense_ok:0 diff --git a/addons/hr_holidays/i18n/sv.po b/addons/hr_holidays/i18n/sv.po index 3bf5378ef53..6bbc5a77e5b 100644 --- a/addons/hr_holidays/i18n/sv.po +++ b/addons/hr_holidays/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-03-31 17:00+0000\n" +"PO-Revision-Date: 2014-04-03 07:21+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-01 06:52+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: hr_holidays #: selection:hr.holidays.status,color_name:0 @@ -39,6 +39,8 @@ msgid "" "You cannot modify a leave request that has been approved. Contact a human " "resource manager." msgstr "" +"Du kan inte ändra ett redan godkänt frånvaroönskemål. Kontakta " +"personalansvarig." #. module: hr_holidays #: help:hr.holidays.status,remaining_leaves:0 @@ -75,7 +77,7 @@ msgstr "Avdelning" #: model:ir.actions.act_window,name:hr_holidays.request_approve_allocation #: model:ir.ui.menu,name:hr_holidays.menu_request_approve_allocation msgid "Allocation Requests to Approve" -msgstr "" +msgstr "Frånvaroönskemål att godkänna" #. module: hr_holidays #: help:hr.holidays,category_id:0 @@ -112,12 +114,12 @@ msgstr "" #. module: hr_holidays #: model:mail.message.subtype,description:hr_holidays.mt_holidays_refused msgid "Request refused" -msgstr "" +msgstr "Önskemål tillbakavisat" #. module: hr_holidays #: field:hr.holidays,number_of_days_temp:0 msgid "Allocation" -msgstr "Allokering" +msgstr "Tilldelning" #. module: hr_holidays #: xsl:holidays.summary:0 @@ -132,7 +134,7 @@ msgstr "Ljus cyan" #. module: hr_holidays #: constraint:hr.holidays:0 msgid "You can not have 2 leaves that overlaps on same day!" -msgstr "" +msgstr "Du kan inte ha två ledigheter som överlappar samma dag!" #. module: hr_holidays #: selection:hr.holidays.status,color_name:0 @@ -233,7 +235,7 @@ msgstr "Granskning" #. module: hr_holidays #: help:hr.holidays,message_unread:0 msgid "If checked new messages require your attention." -msgstr "" +msgstr "Om ikryssad nya meddelanden som kräver din uppmärksamhet" #. module: hr_holidays #: field:hr.holidays.status,color_name:0 @@ -263,6 +265,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 "" +"Lagrar pladder-sammanfattning (antal meddelanden, ...). Denna sammanfattning " +"presenteras i html-format för att kunna sättas in i kanban vyer." #. module: hr_holidays #: code:addons/hr_holidays/hr_holidays.py:249 @@ -283,12 +287,12 @@ msgstr "Magenta" #. module: hr_holidays #: model:ir.actions.act_window,name:hr_holidays.act_hr_leave_request_to_meeting msgid "Leave Meetings" -msgstr "" +msgstr "Frånvaromöten" #. module: hr_holidays #: model:hr.holidays.status,name:hr_holidays.holiday_status_cl msgid "Legal Leaves 2013" -msgstr "" +msgstr "Lagstadgad ledighet 2013" #. module: hr_holidays #: selection:hr.holidays.summary.dept,holiday_type:0 @@ -322,7 +326,7 @@ msgstr "Summa" #: view:hr.holidays.status:0 #: model:ir.actions.act_window,name:hr_holidays.open_view_holiday_status msgid "Leave Types" -msgstr "" +msgstr "Frånvarotyper" #. module: hr_holidays #: field:hr.holidays.status,remaining_leaves:0 @@ -332,7 +336,7 @@ msgstr "Återstående ledighet" #. module: hr_holidays #: field:hr.holidays,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "Följare" #. module: hr_holidays #: model:ir.model,name:hr_holidays.model_hr_holidays_remaining_leaves_user @@ -395,6 +399,10 @@ msgid "" " \n" "The status is 'Approved', when holiday request is approved by manager." msgstr "" +"Statusen är satt till \"att skicka in\", när en semesterbegäran skapas.\n" +"Statusen är \"godkännd\", när semesterbegäran bekräftas av användaren.\n" +"Statusen \"Avvisad\", när semestern begäran avslås av chef.\n" +"Statusen \"Godkänd\", när semestern ansökan godkänns av chef." #. module: hr_holidays #: view:hr.holidays:0 @@ -417,10 +425,10 @@ msgstr "" "Funktionen bakom fältet 'Kvarvarande Semester' kan endast användas när det " "bara finns en ledighetstyp med alternativet 'Tillåt att överskrida gränsen' " "ej är markerad. (%s hittades). Annars är uppdateringen tvetydig eftersom vi " -"inte kan besluta om vilken ledighetstyp uppdateringen måste göras för.\n" -"Du kanske föredrar att använda de vanliga menyerna 'Ledighetsbegäran' och " +"inte kan besluta om vilken ledighetstyp uppdateringen måste göras för. \n" +"Du kanske föredrar att använda de klassiska menyer 'Ledighetsbegäran' och " "'Tilldela Ledighet' som ligger i 'Personal \\ Frånvaro' för att hantera " -"semesterdagar för de anställda, om konfigurationen inte tillåter att använda " +"semesterdagar för de anställda om konfigurationen inte tillåter att använda " "detta fält." #. module: hr_holidays @@ -436,7 +444,7 @@ msgstr "Väntar på godkännande" #. module: hr_holidays #: field:hr.holidays,category_id:0 msgid "Employee Tag" -msgstr "" +msgstr "Anställds etikett" #. module: hr_holidays #: field:hr.holidays.summary.employee,emp:0 @@ -460,6 +468,13 @@ msgid "" "

    \n" " " msgstr "" +"

    \n" +" Du kan tilldela återstående lagstadgad ledighetför varje " +"anställd, OpenERP\n" +" kommer automatiskt att skapa och validera " +"ledighetsförfrågningar.\n" +"

    \n" +" " #. module: hr_holidays #: help:hr.holidays.status,categ_id:0 @@ -472,7 +487,7 @@ msgstr "" #: code:addons/hr_holidays/wizard/hr_holidays_summary_department.py:44 #, python-format msgid "You have to select at least one Department. And try again." -msgstr "" +msgstr "Åtminstonde en avdelning måste vara vald, försök igen." #. module: hr_holidays #: field:hr.holidays,parent_id:0 @@ -492,7 +507,7 @@ msgstr "Månad" #. module: hr_holidays #: field:hr.holidays,message_unread:0 msgid "Unread Messages" -msgstr "" +msgstr "Olästa meddelanden" #. module: hr_holidays #: view:hr.holidays:0 @@ -524,7 +539,7 @@ msgstr "" #: view:hr.holidays.summary.dept:0 #: view:hr.holidays.summary.employee:0 msgid "or" -msgstr "" +msgstr "eller" #. module: hr_holidays #: model:ir.actions.act_window,help:hr_holidays.open_ask_holidays @@ -539,6 +554,16 @@ msgid "" "

    \n" " " msgstr "" +"

    \n" +" Klicka för att skapa en ny ledighetsbegäran.\n" +"

    \n" +" När du har spelat in din ledighetsförfrågan, skickas det\n" +" till en chef för validering. Se till att ställa rätt " +"frånvarotyp\n" +" typ (återhämtning, helgdagar, sjukdom) och den exakta\n" +" antal öppna dagar relaterade till din frånvaro.\n" +"

    \n" +" " #. module: hr_holidays #: view:hr.holidays:0 @@ -565,7 +590,7 @@ msgstr "" #. module: hr_holidays #: view:hr.holidays:0 msgid "Reset to New" -msgstr "" +msgstr "Återställ till ny" #. module: hr_holidays #: sql_constraint:hr.holidays:0 @@ -580,7 +605,7 @@ msgstr "Ljus Coral" #. module: hr_holidays #: field:hr.employee,leave_date_to:0 msgid "To Date" -msgstr "" +msgstr "Till datum" #. module: hr_holidays #: selection:hr.holidays.status,color_name:0 @@ -595,7 +620,7 @@ msgstr "Tilldela ledighet för personal" #. module: hr_holidays #: model:ir.ui.menu,name:hr_holidays.menu_open_view_holiday_status msgid "Leaves Types" -msgstr "" +msgstr "Frånvarotyp" #. module: hr_holidays #: field:hr.holidays,meeting_id:0 @@ -613,7 +638,7 @@ msgstr "" #: view:hr.holidays:0 #: field:hr.holidays,state:0 msgid "Status" -msgstr "" +msgstr "Status" #. module: hr_holidays #: selection:hr.holidays.status,color_name:0 @@ -638,7 +663,7 @@ msgstr "Ledigheten redan förbrukad" #. module: hr_holidays #: field:hr.holidays,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "Är en följare" #. module: hr_holidays #: field:hr.holidays,user_id:0 @@ -661,7 +686,7 @@ msgstr "" #. module: hr_holidays #: view:hr.holidays:0 msgid "Add a reason..." -msgstr "" +msgstr "Lägg till orsak..." #. module: hr_holidays #: field:hr.holidays,manager_id:0 @@ -671,7 +696,7 @@ msgstr "Första godkännande" #. module: hr_holidays #: field:hr.holidays,message_summary:0 msgid "Summary" -msgstr "" +msgstr "Sammandrag" #. module: hr_holidays #: model:hr.holidays.status,name:hr_holidays.holiday_status_unpaid @@ -692,7 +717,7 @@ msgstr "Ledighetssummering" #. module: hr_holidays #: view:hr.holidays:0 msgid "Submit to Manager" -msgstr "" +msgstr "Skicka till chef" #. module: hr_holidays #: view:hr.employee:0 @@ -775,7 +800,7 @@ msgstr "" #: view:hr.holidays:0 #: selection:hr.holidays,type:0 msgid "Allocation Request" -msgstr "Ledighetstilldelning" +msgstr "Ledighetsönskemål" #. module: hr_holidays #: help:hr.holidays,holiday_type:0 @@ -799,7 +824,7 @@ msgstr "Applicera Dubbel validering" #: view:hr.employee:0 #: view:hr.holidays:0 msgid "days" -msgstr "" +msgstr "dagar" #. module: hr_holidays #: view:hr.holidays.summary.dept:0 @@ -827,7 +852,7 @@ msgstr "Avdelning(ar)" #. module: hr_holidays #: selection:hr.holidays,state:0 msgid "To Submit" -msgstr "" +msgstr "Att skicka" #. module: hr_holidays #: code:addons/hr_holidays/hr_holidays.py:354 @@ -853,7 +878,7 @@ msgstr "Återstående Semester" #. module: hr_holidays #: selection:hr.holidays,holiday_type:0 msgid "By Employee Tag" -msgstr "" +msgstr "Per anställdsetikett" #. module: hr_holidays #: selection:hr.employee,current_leave_state:0 @@ -865,7 +890,7 @@ msgstr "Nekad" #. module: hr_holidays #: field:hr.holidays.status,categ_id:0 msgid "Meeting Type" -msgstr "" +msgstr "Mötestyp" #. module: hr_holidays #: field:hr.holidays.remaining.leaves.user,no_of_leaves:0 @@ -875,7 +900,7 @@ msgstr "Återstående ledighet" #. module: hr_holidays #: view:hr.holidays:0 msgid "Allocated Days" -msgstr "" +msgstr "Dagar med frånvaro" #. module: hr_holidays #: view:hr.holidays:0 @@ -924,13 +949,13 @@ msgstr "Läge" #: selection:hr.holidays.summary.dept,holiday_type:0 #: selection:hr.holidays.summary.employee,holiday_type:0 msgid "Both Approved and Confirmed" -msgstr "" +msgstr "Både godkända och bekräftade" #. module: hr_holidays #: code:addons/hr_holidays/hr_holidays.py:451 #, python-format msgid "Request approved, waiting second validation." -msgstr "" +msgstr "Förfrågan godkänd, väntar sekundär validering." #. module: hr_holidays #: view:hr.holidays:0 @@ -940,7 +965,7 @@ msgstr "Godkänn" #. module: hr_holidays #: help:hr.holidays,message_ids:0 msgid "Messages and communication history" -msgstr "" +msgstr "Meddelande- och kommunikationshistorik" #. module: hr_holidays #: code:addons/hr_holidays/hr_holidays.py:260 @@ -948,7 +973,7 @@ msgstr "" #: sql_constraint:hr.holidays:0 #, python-format msgid "The start date must be anterior to the end date." -msgstr "" +msgstr "Startdatum måste föregå slutdatum." #. module: hr_holidays #: xsl:holidays.summary:0 @@ -967,7 +992,7 @@ msgstr "" #: model:ir.actions.act_window,name:hr_holidays.open_allocation_holidays #: model:ir.ui.menu,name:hr_holidays.menu_open_allocation_holidays msgid "Allocation Requests" -msgstr "Ledighetstilldening" +msgstr "Ledighetsönskemål" #. module: hr_holidays #: xsl:holidays.summary:0 @@ -981,6 +1006,9 @@ msgid "" "to create allocation/leave request. Total based on all the leave types " "without overriding limit." msgstr "" +"Totalt antal lagstadgad ledighet för den anställde, ändra detta värde för " +"att skapa frånvaro / ledighetsbegäran. Totalt baserat på alla frånvarotyper " +"utan tvingande gräns." #. module: hr_holidays #: selection:hr.holidays.status,color_name:0 @@ -990,7 +1018,7 @@ msgstr "Ljusrosa" #. module: hr_holidays #: xsl:holidays.summary:0 msgid "leaves." -msgstr "" +msgstr "Frånvaro" #. module: hr_holidays #: view:hr.holidays:0 @@ -1010,7 +1038,7 @@ msgstr "År" #. module: hr_holidays #: view:hr.holidays:0 msgid "Duration" -msgstr "" +msgstr "Varaktighet" #. module: hr_holidays #: view:hr.holidays:0 @@ -1022,7 +1050,7 @@ msgstr "Att godkänna" #. module: hr_holidays #: model:mail.message.subtype,description:hr_holidays.mt_holidays_approved msgid "Request approved" -msgstr "" +msgstr "Önskemål accepterat" #. module: hr_holidays #: field:hr.holidays,notes:0 @@ -1032,4 +1060,4 @@ msgstr "Anledningar" #. module: hr_holidays #: field:hr.holidays.summary.employee,holiday_type:0 msgid "Select Leave Type" -msgstr "" +msgstr "Välj frånvarotyp" diff --git a/addons/hr_payroll/i18n/sv.po b/addons/hr_payroll/i18n/sv.po index cc19058ecf4..2b10ef92876 100644 --- a/addons/hr_payroll/i18n/sv.po +++ b/addons/hr_payroll/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-03-31 16:55+0000\n" +"PO-Revision-Date: 2014-04-03 07:50+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-01 06:52+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: hr_payroll #: field:hr.payslip.line,condition_select:0 @@ -102,7 +102,7 @@ msgstr "Överordnad" #: field:hr.salary.rule,company_id:0 #: field:hr.salary.rule.category,company_id:0 msgid "Company" -msgstr "Företag" +msgstr "Bolag" #. module: hr_payroll #: view:hr.payslip:0 @@ -234,7 +234,7 @@ msgstr "Övrig information" #. module: hr_payroll #: field:hr.config.settings,module_hr_payroll_account:0 msgid "Link your payroll to accounting system" -msgstr "" +msgstr "Länka lönesystemet till bokföringen" #. module: hr_payroll #: help:hr.payslip.line,amount_select:0 @@ -313,7 +313,7 @@ msgstr "Totalt Arbetsdagar" #. module: hr_payroll #: constraint:hr.payroll.structure:0 msgid "Error ! You cannot create a recursive Salary Structure." -msgstr "" +msgstr "Fel! Du kan inte skapa rekursiva ersättningsstrukturer." #. module: hr_payroll #: help:hr.payslip.line,code:0 @@ -354,6 +354,17 @@ msgid "" "

    \n" " " msgstr "" +"

    \n" +" Klicka för att lägga till ett nytt medarbetarregister.\n" +"

    \n" +" Ett medarbetarregister är en tredje part inblandad i " +"ersättningssystemet\n" +" för de anställda. Det kan vara Skattemyndighet, " +"Försäkringskassan, Arbetsförmedlingen, pensionsstöd, löntagarorganisation " +"eller vilken den organisation/kassa som tillför eller drar pengar på " +"lönebeskeden.\n" +"

    \n" +" " #. module: hr_payroll #: help:hr.payslip.line,condition_range_max:0 @@ -446,7 +457,7 @@ msgstr "%s (kopia)" #. module: hr_payroll #: help:hr.config.settings,module_hr_payroll_account:0 msgid "Create journal entries from payslips" -msgstr "" +msgstr "Skapa journalverifikat från lönebesked." #. module: hr_payroll #: field:hr.payslip,paid:0 @@ -456,7 +467,7 @@ msgstr "Tillverkade betalningsorder? " #. module: hr_payroll #: report:contribution.register.lines:0 msgid "PaySlip Lines by Contribution Register" -msgstr "Lönespecifikationsrader från Bidrags Register" +msgstr "Lönespecifikationsrader från medarbetarregistret" #. module: hr_payroll #: view:hr.payslip:0 @@ -494,7 +505,7 @@ msgstr "Återbetalning: " #. module: hr_payroll #: model:ir.model,name:hr_payroll.model_payslip_lines_contribution_register msgid "PaySlip Lines by Contribution Registers" -msgstr "Lönespecifikationsrader genom Bidrags Register" +msgstr "Lönespecifikationsrader via medarbetarregistret" #. module: hr_payroll #: view:hr.payslip:0 @@ -630,7 +641,7 @@ msgstr "Lönespecifikation Computation Detaljer" #: help:hr.payslip.line,appears_on_payslip:0 #: help:hr.salary.rule,appears_on_payslip:0 msgid "Used to display the salary rule on payslip." -msgstr "" +msgstr "Används för att visa löneregler på lönebeskedet." #. module: hr_payroll #: model:ir.model,name:hr_payroll.model_hr_payslip_input @@ -647,7 +658,7 @@ msgstr "Lön Rule Kategorier" #. module: hr_payroll #: view:hr.payslip:0 msgid "Cancel Payslip" -msgstr "" +msgstr "Avbryt lönebesked" #. module: hr_payroll #: help:hr.payslip.input,contract_id:0 @@ -664,7 +675,7 @@ msgstr "Beräkning" #: code:addons/hr_payroll/hr_payroll.py:899 #, python-format msgid "Wrong range condition defined for salary rule %s (%s)." -msgstr "" +msgstr "Fel omfångsvillkor definierat för löneregeln %s (%s)." #. module: hr_payroll #: help:hr.payslip.input,amount:0 @@ -694,7 +705,7 @@ msgstr "Kategori" #. module: hr_payroll #: view:hr.salary.rule:0 msgid "Company Contribution" -msgstr "" +msgstr "Bolagets bidrag" #. module: hr_payroll #: help:hr.payslip.run,credit_note:0 @@ -709,7 +720,7 @@ msgstr "" #: code:addons/hr_payroll/hr_payroll.py:876 #, python-format msgid "Wrong percentage base or quantity defined for salary rule %s (%s)." -msgstr "" +msgstr "Fel procentbas eller kvantitet definierad för löneregeln %s (%s)." #. module: hr_payroll #: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payroll_structure_list_form @@ -767,7 +778,7 @@ msgstr "Procent (%)" #: code:addons/hr_payroll/hr_payroll.py:871 #, python-format msgid "Wrong quantity defined for salary rule %s (%s)." -msgstr "" +msgstr "Fel kvantitet definierad för löneregeln %s (%s)." #. module: hr_payroll #: view:hr.payslip:0 @@ -852,7 +863,7 @@ msgstr "Avtal" #: code:addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py:52 #, python-format msgid "You must select employee(s) to generate payslip(s)." -msgstr "" +msgstr "Du måste välja anställda för att skapa lönebesked" #. module: hr_payroll #: report:paylip.details:0 @@ -1026,7 +1037,7 @@ msgstr "hr.config.settings" #: field:hr.salary.rule,register_id:0 #: model:ir.model,name:hr_payroll.model_hr_contribution_register msgid "Contribution Register" -msgstr "Bidrags Register" +msgstr "Medarbetarregister" #. module: hr_payroll #: view:payslip.lines.contribution.register:0 @@ -1081,7 +1092,7 @@ msgstr "Totala grundlönen" #: model:ir.actions.act_window,name:hr_payroll.action_contribution_register_form #: model:ir.ui.menu,name:hr_payroll.menu_action_hr_contribution_register_form msgid "Contribution Registers" -msgstr "Bidrags Register" +msgstr "Medarbetarregister" #. module: hr_payroll #: model:ir.ui.menu,name:hr_payroll.menu_hr_payroll_reporting @@ -1093,13 +1104,14 @@ msgstr "Lön" #. module: hr_payroll #: model:ir.actions.report.xml,name:hr_payroll.contribution_register msgid "PaySlip Lines By Conribution Register" -msgstr "Lönespecifikationsrader från Bidragsregistret" +msgstr "Lönespecifikationsrader från medarbetarergistret" #. module: hr_payroll #: code:addons/hr_payroll/hr_payroll.py:370 #, python-format msgid "You cannot delete a payslip which is not draft or cancelled!" msgstr "" +"Du kan inte radera ett lönebesked som inte är i \"Utkast\" eller \"Avbruten\"" #. module: hr_payroll #: report:paylip.details:0 @@ -1171,6 +1183,10 @@ msgid "" "* If the payslip is confirmed then status is set to 'Done'. \n" "* When user cancel payslip the status is 'Rejected'." msgstr "" +"* När lönebesked skapas statusen är \"Utkast\".\n" +"* Om lönebesked är under kontroll, är statusen \"Väntar\".\n" +"* Om lönebesked bekräftas då status är inställd på \"Klar\".\n" +"* När användaren avbryter lönespecifikation statusen är \"Avvisad\"." #. module: hr_payroll #: help:hr.payslip.line,condition_range:0 @@ -1197,7 +1213,7 @@ msgstr "Lönespecifikation indata" #. module: hr_payroll #: view:hr.payslip:0 msgid "Other Inputs" -msgstr "" +msgstr "Övriga indata" #. module: hr_payroll #: model:ir.actions.act_window,name:hr_payroll.action_hr_salary_rule_category_tree_view @@ -1209,7 +1225,7 @@ msgstr "Lön Regel Kategorier Hierarki" #: code:addons/hr_payroll/hr_payroll.py:882 #, python-format msgid "Wrong python code defined for salary rule %s (%s)." -msgstr "" +msgstr "Fel i python-koden definierat för löneregeln %s (%s)." #. module: hr_payroll #: report:contribution.register.lines:0 @@ -1240,7 +1256,7 @@ msgstr "Den kod som kan användas i lön reglerna" #: code:addons/hr_payroll/hr_payroll.py:905 #, python-format msgid "Wrong python condition defined for salary rule %s (%s)." -msgstr "" +msgstr "Fel i python-villkoret definierat för löneregeln %s (%s)." #. module: hr_payroll #: view:hr.payslip.run:0 diff --git a/addons/mail/i18n/sv.po b/addons/mail/i18n/sv.po index a5add364ac0..71301cbf59f 100644 --- a/addons/mail/i18n/sv.po +++ b/addons/mail/i18n/sv.po @@ -9,14 +9,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-04-03 05:29+0000\n" +"PO-Revision-Date: 2014-04-03 10:13+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Svenska \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-03 06:02+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: mail #: view:mail.followers:0 @@ -368,6 +368,8 @@ msgid "" "Message type: email for email message, notification for system message, " "comment for other messages such as user replies" msgstr "" +"Meddelandetyp: e-post för e-postmeddelande, avisering för systemmeddelande, " +"kommentar är andra meddelanden som till exempel användarsvar" #. module: mail #: help:mail.message.subtype,relation_field:0 @@ -391,7 +393,7 @@ msgstr "Svar till" #: code:addons/mail/wizard/invite.py:37 #, python-format msgid "
    You have been invited to follow %s.
    " -msgstr "" +msgstr "
    Du har blivit inbjuden att följa %s.
    " #. module: mail #. openerp-web @@ -492,6 +494,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 "" +"Lagrar pladder-sammanfattning (antal meddelanden, ...). Denna sammanfattning " +"presenteras i html-format för att kunna sättas in i kanban vyer." #. module: mail #: help:mail.alias,alias_model_id:0 @@ -705,6 +709,9 @@ msgid "" "image, with aspect ratio preserved. Use this field anywhere a small image is " "required." msgstr "" +"Liten bild som representerar gruppen. Det är storleksändras automatiskt till " +"64x64px, men med bevarat bildförhållande. Använd det här fältet när helst en " +"liten bild krävs." #. module: mail #: view:mail.compose.message:0 @@ -745,7 +752,7 @@ msgstr "läs mer" #: code:addons/mail/wizard/invite.py:40 #, python-format msgid "
    You have been invited to follow a new document.
    " -msgstr "" +msgstr "
    Du har blivit inbjuden att följa ett nytt dokument.
    " #. module: mail #: field:mail.compose.message,parent_id:0 @@ -757,6 +764,7 @@ msgstr "Överliggande meddelande" #: selection:res.partner,notification_email_send:0 msgid "All Messages (discussions, emails, followed system notifications)" msgstr "" +"Alla meddelanden (diskussioner, e-post, prenumeration på systemaviseringar)" #. module: mail #. openerp-web @@ -826,12 +834,14 @@ msgid "" "You may not create a user. To create new users, you should use the " "\"Settings > Users\" menu." msgstr "" +"Du kan inte skapa en användare. För att skapa nya användare används " +"\"Inställningar > Användare\"-menyn" #. module: mail #: help:mail.followers,res_model:0 #: help:mail.wizard.invite,res_model:0 msgid "Model of the followed resource" -msgstr "" +msgstr "Modell för den prenumererade resursen" #. module: mail #. openerp-web @@ -870,7 +880,7 @@ msgstr "Kontakt" msgid "" "Only the invited followers can read the\n" " discussions on this group." -msgstr "" +msgstr "Endast inbjudna följare kan läsa denna grupps diskussioner" #. module: mail #: model:ir.model,name:mail.model_ir_ui_menu @@ -894,6 +904,7 @@ msgid "" "The following partners chosen as recipients for the email have no email " "address linked :" msgstr "" +"Följande företag är valda mottagare för e-post som saknar länkad adress:" #. module: mail #: help:mail.alias,alias_defaults:0 @@ -901,11 +912,13 @@ msgid "" "A Python dictionary that will be evaluated to provide default values when " "creating new records for this alias." msgstr "" +"Ett Python-dictionary som används för standardvärden när nya poster skapas " +"för detta alias." #. module: mail #: model:ir.model,name:mail.model_mail_message_subtype msgid "Message subtypes" -msgstr "" +msgstr "Undertyper till meddelande" #. module: mail #. openerp-web @@ -970,6 +983,8 @@ msgstr "Skicka nu" msgid "" "Unable to send email, please configure the sender's email address or alias." msgstr "" +"Kunde inte skicka e-post, vänligen konfigurera avsändarens e-postadress " +"eller alias." #. module: mail #: help:res.users,alias_id:0 @@ -987,7 +1002,7 @@ msgstr "Foto" #: help:mail.compose.message,vote_user_ids:0 #: help:mail.message,vote_user_ids:0 msgid "Users that voted for this message" -msgstr "" +msgstr "Användare som röstat på detta meddelande" #. module: mail #: help:mail.group,alias_id:0 @@ -1077,6 +1092,7 @@ msgstr "Gruppera" #: help:mail.message,starred:0 msgid "Current user has a starred notification linked to this message" msgstr "" +"Aktuell användare har en blockerad avisering länkad till detta meddelande" #. module: mail #: field:mail.group,public:0 @@ -1229,7 +1245,7 @@ msgstr "Ta emot meddelanden per e-post" #. module: mail #: model:mail.group,name:mail.group_best_sales_practices msgid "Best Sales Practices" -msgstr "" +msgstr "Marknadsföringspraxis" #. module: mail #: selection:mail.group,public:0 @@ -1442,7 +1458,7 @@ msgstr "Kopia" #. module: mail #: help:mail.notification,starred:0 msgid "Starred message that goes into the todo mailbox" -msgstr "" +msgstr "Blockerade meddelanden som sorteras in i att-göra-boxen" #. module: mail #: view:mail.group:0 @@ -1517,11 +1533,12 @@ msgstr "Registreringsmånad" msgid "" "Partners that have a notification pushing this message in their mailboxes" msgstr "" +"Företag som har en aviseringsknuff av detta meddelande till sina e-postlådor" #. module: mail #: view:mail.message:0 msgid "Show already read messages" -msgstr "" +msgstr "Visa lästa meddelanden" #. module: mail #: view:mail.message:0 @@ -1560,6 +1577,8 @@ msgid "" "This group is visible by non members. Invisible groups can add " "members through the invite button." msgstr "" +"Denna grupp är synlig för icke medlemmar. Osynliga grupper kan lägga till " +"medlemmar via den \"osynliga\" knappen." #. module: mail #: model:mail.group,name:mail.group_board @@ -1569,7 +1588,7 @@ msgstr "Styrelsemöten" #. module: mail #: field:mail.alias,alias_model_id:0 msgid "Aliased Model" -msgstr "" +msgstr "Aliasobjekt" #. module: mail #: help:mail.compose.message,message_id:0 @@ -1609,7 +1628,7 @@ msgstr "Utgående e-postserver" #: code:addons/mail/mail_message.py:930 #, python-format msgid "Partners email addresses not found" -msgstr "" +msgstr "Företagets e-postadress saknas" #. module: mail #: view:mail.mail:0 @@ -1620,7 +1639,7 @@ msgstr "Skickat" #. module: mail #: field:mail.mail,body_html:0 msgid "Rich-text Contents" -msgstr "" +msgstr "Utsmyckat innehåll" #. module: mail #: help:mail.compose.message,to_read:0 @@ -1667,6 +1686,9 @@ msgid "" "installed\n" " the portal module." msgstr "" +"Denna grupp är synlig för alla,\n" +" även dina kunder i de fall du " +"installerat portalmodulen." #. module: mail #. openerp-web @@ -1680,7 +1702,7 @@ msgstr "Backa till Att göra" #: code:addons/mail/static/src/xml/mail.xml:154 #, python-format msgid "Attach a note that will not be sent to the followers" -msgstr "" +msgstr "Bilägg en notering som inte kommer skickas till prenumeranterna" #. module: mail #. openerp-web @@ -1839,7 +1861,7 @@ msgstr "Alias domän" #: code:addons/mail/update.py:93 #, python-format msgid "Error during communication with the publisher warranty server." -msgstr "" +msgstr "Fel vid kommunikation med servern för 'utgivarens underhållsavtal'." #. module: mail #: selection:mail.group,public:0 @@ -1888,7 +1910,7 @@ msgstr "Inledande meddelande i tråd." #. module: mail #: model:mail.group,name:mail.group_hr_policies msgid "HR Policies" -msgstr "" +msgstr "Personalpolicies" #. module: mail #. openerp-web @@ -1935,6 +1957,3 @@ msgstr "Litet fotografi" #: help:mail.mail,reply_to:0 msgid "Preferred response address for the message" msgstr "Föredragen svarsadress för meddelandet" - -#~ msgid "Invitation to follow %s" -#~ msgstr "Invitation to follow %s" diff --git a/addons/sale/i18n/sv.po b/addons/sale/i18n/sv.po index 8863ff16091..1848dec5270 100644 --- a/addons/sale/i18n/sv.po +++ b/addons/sale/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-04-03 05:30+0000\n" +"PO-Revision-Date: 2014-04-03 10:44+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-03 06:02+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: sale #: model:ir.model,name:sale.model_account_config_settings @@ -65,7 +65,7 @@ msgstr "Felaktiga data" #: code:addons/sale/wizard/sale_make_invoice_advance.py:102 #, python-format msgid "The value of Advance Amount must be positive." -msgstr "" +msgstr "Värdet på förskotterat belopp måste vara positivt." #. module: sale #: help:sale.config.settings,group_discount_per_so_line:0 @@ -97,6 +97,10 @@ msgid "" "The 'Waiting Schedule' status is set when the invoice is confirmed " " but waiting for the scheduler to run on the order date." msgstr "" +"Ger status för offert eller kundorder. Status Undantag ställs in automatiskt " +"när faktura- (Faktura i undantag) eller plockningsprocessen (Levarans i " +"undantag). Status 'Planerad väntan' \"ställs in när fakturan är bekräftad, " +"men väntar på planeringsscheduleringskörningen på orderdagen." #. module: sale #: view:sale.report:0 @@ -291,7 +295,7 @@ msgstr "Namn på försäljningsställe" #: code:addons/sale/sale.py:598 #, python-format msgid "You cannot confirm a sales order which has no line." -msgstr "" +msgstr "Du kan inte bekräfta en kundorder som saknar rader." #. module: sale #: model:ir.actions.act_window,help:sale.action_order_line_tree2 @@ -307,6 +311,15 @@ msgid "" "

    \n" " " msgstr "" +"

    \n" +" Här är en lista på varje fakturerbar kundorderrad. Du kan\n" +" göra partiella faktureringar via kundorderrader. Denna " +"listan är onödig \n" +" i de fall du valt att fakturera med leveransorder som " +"underlag eller du alltid\n" +" fakturerar kundordern i sin helhet.\n" +" \n" +" " #. module: sale #: view:sale.order:0 @@ -724,6 +737,14 @@ msgid "" " \n" "* The 'Cancelled' status is set when a user cancel the sales order related." msgstr "" +"* Status \"Utkast\" ställs in när den relaterade kundorder i utkast status.\n" +"* Status \"Bekräftat\" ställs in när den relaterade " +"försäljningsorderläggningen .\n" +"* Status \"Undantag\" ställs in när den relaterade kundorder in som " +"undantag.\n" +"* Status \"Klar\" ställs in när försäljningsorderraden har plockats.\n" +"* Status \"Inställd\" ställs in när en användare avbryter kundorder " +"relaterade." #. module: sale #: code:addons/sale/wizard/sale_make_invoice_advance.py:92 @@ -1565,6 +1586,91 @@ msgid "" "

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

    Hej ${object.partner_id.name},

    \n" +" \n" +"

    Här kommer din ${object.state in ('draft', 'sent') and 'offert' or " +"'orderbekräftelse'} från ${object.company_id.name}:

    \n" +"\n" +"

    \n" +"   UPPGIFTER
    \n" +"   Ordernummer: ${object.name}
    \n" +"   Ordertotal: ${object.amount_total} " +"${object.pricelist_id.currency_id.name}
    \n" +"   Orderdatum: ${object.date_order}
    \n" +" % if object.origin:\n" +"   Orderreferens: ${object.origin}
    \n" +" % endif\n" +" % if object.client_order_ref:\n" +"   Er referens: ${object.client_order_ref}
    \n" +" % endif\n" +" % if object.user_id:\n" +"   Din kontaktperson: ${object.user_id.name}\n" +" % endif\n" +"

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

    Det är även möjligt att betala direkt via Paypal:

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

    Vid eventuella frågot, tveka inte att kontakta oss.

    \n" +"

    Tack för att ni väljer ${object.company_id.name or 'oss'}!

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

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

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

    \n" +"
    \n" +"
    \n" +" " #. module: sale #: view:sale.order.line:0 @@ -2282,11 +2388,3 @@ msgstr "Plockad" #: field:sale.report,year:0 msgid "Year" msgstr "År" - -#~ msgid "" -#~ "In order to delete a confirmed sales order, you must cancel it before!" -#~ msgstr "" -#~ "In order to delete a confirmed sales order, you must cancel it before!" - -#~ msgid "No Customer Defined!" -#~ msgstr "Kund saknas!" diff --git a/addons/stock/i18n/zh_TW.po b/addons/stock/i18n/zh_TW.po index a4cdb73814d..51050def38b 100644 --- a/addons/stock/i18n/zh_TW.po +++ b/addons/stock/i18n/zh_TW.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2014-02-06 15:56+0000\n" -"PO-Revision-Date: 2014-03-30 12:01+0000\n" +"PO-Revision-Date: 2014-04-03 11:14+0000\n" "Last-Translator: Andy Cheng \n" "Language-Team: Chinese (Traditional) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-31 06:40+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: stock #: field:stock.inventory.line.split,line_exist_ids:0 @@ -4360,7 +4360,7 @@ msgstr "入庫產品" #. module: stock #: view:product.product:0 msgid "update" -msgstr "" +msgstr "更新" #. module: stock #: view:stock.change.product.qty:0 @@ -4379,7 +4379,7 @@ msgstr "" #: view:stock.return.picking:0 #: view:stock.split.into:0 msgid "or" -msgstr "" +msgstr "或" #. module: stock #: selection:stock.picking,invoice_state:0 @@ -4399,7 +4399,7 @@ msgstr "資訊" #: code:addons/stock/stock.py:1213 #, python-format msgid "You cannot remove the picking which is in %s state!" -msgstr "" +msgstr "您不能移除 %s 狀態的提貨單" #. module: stock #: help:res.partner,property_stock_customer:0 diff --git a/openerp/addons/base/i18n/ab.po b/openerp/addons/base/i18n/ab.po index f3ab57c8078..ba58f36d5d1 100644 --- a/openerp/addons/base/i18n/ab.po +++ b/openerp/addons/base/i18n/ab.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:09+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:47+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/af.po b/openerp/addons/base/i18n/af.po index bfa9c43edd6..3014e1b0fe4 100644 --- a/openerp/addons/base/i18n/af.po +++ b/openerp/addons/base/i18n/af.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-11 06:26+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:47+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/am.po b/openerp/addons/base/i18n/am.po index e4bbf993586..347a0aee8a0 100644 --- a/openerp/addons/base/i18n/am.po +++ b/openerp/addons/base/i18n/am.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-19 05:58+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:48+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ar.po b/openerp/addons/base/i18n/ar.po index efa03372573..8959e8d5167 100644 --- a/openerp/addons/base/i18n/ar.po +++ b/openerp/addons/base/i18n/ar.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:09+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:48+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/bg.po b/openerp/addons/base/i18n/bg.po index abcfa36dce1..4c2bfb23d55 100644 --- a/openerp/addons/base/i18n/bg.po +++ b/openerp/addons/base/i18n/bg.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-10-08 06:10+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:49+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/bn.po b/openerp/addons/base/i18n/bn.po index 8048ec219a1..b32a1099d08 100644 --- a/openerp/addons/base/i18n/bn.po +++ b/openerp/addons/base/i18n/bn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-16 06:03+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:49+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/bs.po b/openerp/addons/base/i18n/bs.po index 0223635ee89..03fc2baf6af 100644 --- a/openerp/addons/base/i18n/bs.po +++ b/openerp/addons/base/i18n/bs.po @@ -9,13 +9,13 @@ msgstr "" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:35+0000\n" "PO-Revision-Date: 2013-10-25 21:35+0000\n" -"Last-Translator: Bosko Stojakovic \n" +"Last-Translator: Boško Stojaković \n" "Language-Team: Bosnian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-26 06:24+0000\n" -"X-Generator: Launchpad (build 16810)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:49+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ca.po b/openerp/addons/base/i18n/ca.po index b083939b88d..08aa7ff7c1b 100644 --- a/openerp/addons/base/i18n/ca.po +++ b/openerp/addons/base/i18n/ca.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:10+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:50+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/cs.po b/openerp/addons/base/i18n/cs.po index 1de34103c72..ee177307785 100644 --- a/openerp/addons/base/i18n/cs.po +++ b/openerp/addons/base/i18n/cs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-08 06:53+0000\n" -"X-Generator: Launchpad (build 16948)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:50+0000\n" +"X-Generator: Launchpad (build 16976)\n" "X-Language: cs_CZ\n" "X-Source-Language: en\n" diff --git a/openerp/addons/base/i18n/da.po b/openerp/addons/base/i18n/da.po index a6b9257fe30..c53ed207f77 100644 --- a/openerp/addons/base/i18n/da.po +++ b/openerp/addons/base/i18n/da.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:10+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:50+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/de.po b/openerp/addons/base/i18n/de.po index 0f1d9fb1448..75509253e98 100644 --- a/openerp/addons/base/i18n/de.po +++ b/openerp/addons/base/i18n/de.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-03 05:55+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:52+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/el.po b/openerp/addons/base/i18n/el.po index 1d0d44913dc..7f21ca27f04 100644 --- a/openerp/addons/base/i18n/el.po +++ b/openerp/addons/base/i18n/el.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-10-08 06:11+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/en_GB.po b/openerp/addons/base/i18n/en_GB.po index a484df07700..9a542d5b49c 100644 --- a/openerp/addons/base/i18n/en_GB.po +++ b/openerp/addons/base/i18n/en_GB.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-31 05:47+0000\n" -"X-Generator: Launchpad (build 16820)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:03+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es.po b/openerp/addons/base/i18n/es.po index 41190b960e1..c30d913bc6e 100644 --- a/openerp/addons/base/i18n/es.po +++ b/openerp/addons/base/i18n/es.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-04 06:18+0000\n" -"X-Generator: Launchpad (build 16877)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:59+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: help:ir.actions.act_window,res_id:0 diff --git a/openerp/addons/base/i18n/es_AR.po b/openerp/addons/base/i18n/es_AR.po index b7b436aa1ea..c2481140984 100644 --- a/openerp/addons/base/i18n/es_AR.po +++ b/openerp/addons/base/i18n/es_AR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:16+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:02+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_BO.po b/openerp/addons/base/i18n/es_BO.po index da9875971d6..6fed8dd8daa 100644 --- a/openerp/addons/base/i18n/es_BO.po +++ b/openerp/addons/base/i18n/es_BO.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:17+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:04+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_CL.po b/openerp/addons/base/i18n/es_CL.po index 7fa6da27fe9..57aa90de6cb 100644 --- a/openerp/addons/base/i18n/es_CL.po +++ b/openerp/addons/base/i18n/es_CL.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-10-08 06:16+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:03+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_CR.po b/openerp/addons/base/i18n/es_CR.po index 49e7ed3757b..34cca753860 100644 --- a/openerp/addons/base/i18n/es_CR.po +++ b/openerp/addons/base/i18n/es_CR.po @@ -15,8 +15,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-10-08 06:17+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:05+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_DO.po b/openerp/addons/base/i18n/es_DO.po index e8410f4474a..7e9abea2dd9 100644 --- a/openerp/addons/base/i18n/es_DO.po +++ b/openerp/addons/base/i18n/es_DO.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:16+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:03+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_EC.po b/openerp/addons/base/i18n/es_EC.po index 635a2937665..f22b8fe915b 100644 --- a/openerp/addons/base/i18n/es_EC.po +++ b/openerp/addons/base/i18n/es_EC.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-10-08 06:17+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:06+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_MX.po b/openerp/addons/base/i18n/es_MX.po index 993a6924a3f..eee4e3ed746 100644 --- a/openerp/addons/base/i18n/es_MX.po +++ b/openerp/addons/base/i18n/es_MX.po @@ -9,14 +9,13 @@ msgstr "" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:35+0000\n" "PO-Revision-Date: 2013-07-26 23:36+0000\n" -"Last-Translator: Federico Manuel Echeverri Choux - ( Vauxoo ) " -"\n" +"Last-Translator: Federico Manuel Echeverri Choux \n" "Language-Team: Spanish (Mexico) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:17+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:06+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_PE.po b/openerp/addons/base/i18n/es_PE.po index 8bb9e5a91c3..fba0940742c 100644 --- a/openerp/addons/base/i18n/es_PE.po +++ b/openerp/addons/base/i18n/es_PE.po @@ -9,13 +9,13 @@ msgstr "" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:35+0000\n" "PO-Revision-Date: 2013-12-09 16:08+0000\n" -"Last-Translator: Pepe B. @TelFast Peru Partner \n" +"Last-Translator: Pepe B. @TelFast Perú \n" "Language-Team: Spanish (Peru) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-12-11 06:27+0000\n" -"X-Generator: Launchpad (build 16869)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:06+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_VE.po b/openerp/addons/base/i18n/es_VE.po index 9ae70ae9c12..e697ac64074 100644 --- a/openerp/addons/base/i18n/es_VE.po +++ b/openerp/addons/base/i18n/es_VE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:16+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:02+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/et.po b/openerp/addons/base/i18n/et.po index 4f88f067db2..41c768d2648 100644 --- a/openerp/addons/base/i18n/et.po +++ b/openerp/addons/base/i18n/et.po @@ -9,13 +9,13 @@ msgstr "" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:35+0000\n" "PO-Revision-Date: 2013-10-08 18:24+0000\n" -"Last-Translator: Rait Helmrosin \n" +"Last-Translator: Rait \n" "Language-Team: Estonian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-09 05:48+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:51+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/eu.po b/openerp/addons/base/i18n/eu.po index a5423fbb437..ab8ae66fc47 100644 --- a/openerp/addons/base/i18n/eu.po +++ b/openerp/addons/base/i18n/eu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:10+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:49+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/fa.po b/openerp/addons/base/i18n/fa.po index fdbebaa55a8..1490a2fd95f 100644 --- a/openerp/addons/base/i18n/fa.po +++ b/openerp/addons/base/i18n/fa.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-10-08 06:13+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:57+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/fa_AF.po b/openerp/addons/base/i18n/fa_AF.po index 2a3d77a8b18..d3ce5fcfed8 100644 --- a/openerp/addons/base/i18n/fa_AF.po +++ b/openerp/addons/base/i18n/fa_AF.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:18+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/fi.po b/openerp/addons/base/i18n/fi.po index 9cd36c2b7b3..06913c1c5a1 100644 --- a/openerp/addons/base/i18n/fi.po +++ b/openerp/addons/base/i18n/fi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-01 05:51+0000\n" -"X-Generator: Launchpad (build 16948)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:51+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/fr.po b/openerp/addons/base/i18n/fr.po index 06bcdcfc70b..b83844eb5f6 100644 --- a/openerp/addons/base/i18n/fr.po +++ b/openerp/addons/base/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: 2014-03-27 08:12+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:52+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/fr_CA.po b/openerp/addons/base/i18n/fr_CA.po index 49a5fc8820b..0cac409f7a1 100644 --- a/openerp/addons/base/i18n/fr_CA.po +++ b/openerp/addons/base/i18n/fr_CA.po @@ -9,13 +9,13 @@ msgstr "" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:35+0000\n" "PO-Revision-Date: 2014-03-19 20:37+0000\n" -"Last-Translator: Philippe Latouche - Savoir-faire Linux \n" +"Last-Translator: Philippe Latouche \n" "Language-Team: French (Canada) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-20 06:19+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:04+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/gl.po b/openerp/addons/base/i18n/gl.po index 3ca2bf41ca0..6242959f6d7 100644 --- a/openerp/addons/base/i18n/gl.po +++ b/openerp/addons/base/i18n/gl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-11-16 06:24+0000\n" -"X-Generator: Launchpad (build 16831)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/gu.po b/openerp/addons/base/i18n/gu.po index d000b1ba293..9319ff98c2a 100644 --- a/openerp/addons/base/i18n/gu.po +++ b/openerp/addons/base/i18n/gu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:11+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/he.po b/openerp/addons/base/i18n/he.po index eb302e64b53..1e045cbe540 100644 --- a/openerp/addons/base/i18n/he.po +++ b/openerp/addons/base/i18n/he.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-02 05:45+0000\n" -"X-Generator: Launchpad (build 16877)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\n" "Language: he\n" #. module: base diff --git a/openerp/addons/base/i18n/hi.po b/openerp/addons/base/i18n/hi.po index ed7a065d9e2..c025913d659 100644 --- a/openerp/addons/base/i18n/hi.po +++ b/openerp/addons/base/i18n/hi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:12+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/hr.po b/openerp/addons/base/i18n/hr.po index aeda7907a8f..2491143651b 100644 --- a/openerp/addons/base/i18n/hr.po +++ b/openerp/addons/base/i18n/hr.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-11-17 05:44+0000\n" -"X-Generator: Launchpad (build 16831)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:58+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/hu.po b/openerp/addons/base/i18n/hu.po index b26b1fc044a..b87bd83d522 100644 --- a/openerp/addons/base/i18n/hu.po +++ b/openerp/addons/base/i18n/hu.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-10-08 06:12+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:54+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -6329,18 +6329,18 @@ msgid "" msgstr "" "\n" "Ez a modul hozzáad állapotot, start_dátumot, stop_dátumot a gyártási " -"megrendelés végrehalytási soraihoz (a 'Gyártási megrendelések' fülön).\n" +"megrendelés végrehajtási soraihoz (a 'Gyártási megrendelések' fülön).\n" "=============================================================================" "===================================\n" "\n" -"Állapot: terv, leigazolt, elvégzett, érévnytelenített\n" -"Ha elvégzett/visszaigazolt, érévnytelenített a gyártási rendelés akkor " +"Állapot: terv, leigazolt, elvégzett, érvénytelenített\n" +"Ha elvégzett/visszaigazolt, érvénytelenített a gyártási rendelés akkor " "megfelelő állapot sorokat\n" "be kell állítani az állapothoz.\n" "\n" "Menük létrehozás:\n" "-------------\n" -" **Gyátás** > **Gyártás** > **Gyártási megrendelések**\n" +" **Gyártás** > **Gyártás** > **Gyártási megrendelések**\n" "\n" "Megtalálható a 'Gyártási megrendelések' soraiban a gyártási " "megrendeléseknél.\n" @@ -6351,8 +6351,8 @@ msgstr "" " * start (állítsa be a visszaigazolt állapotot), állítsa be az " "indulási_dátumot\n" " * stop (állítsa be az elvégzett állapotot), állítsa be a stop_dátumot\n" -" * Tervezettr állít (állítsa be a tervezett állapotot)\n" -" * érévnytelenít (állítsa be az érvénytelenít állapotot)\n" +" * Tervezetet állít (állítsa be a tervezett állapotot)\n" +" * érvénytelenít (állítsa be az érvénytelenít állapotot)\n" "\n" "Ha egy gyártási rendelés 'elvégezhetővé' válik, akkor 'visszaigazoltnak' " "kell lennie.\n" @@ -6397,7 +6397,7 @@ msgstr "Kenya" #: model:ir.actions.act_window,name:base.action_translation #: model:ir.ui.menu,name:base.menu_action_translation msgid "Translated Terms" -msgstr "Lefordított feltételek" +msgstr "Lefordított kifejezések" #. module: base #: selection:base.language.install,lang:0 @@ -9358,7 +9358,7 @@ msgid "" msgstr "" "\n" "Hosszú távú projekt szervezés modul mely nyomon követi a tervezést, " -"ütemtervet, erőforrás kiosztás.\n" +"ütemtervet, erőforrás kiosztást.\n" "=============================================================================" "==============\n" "\n" @@ -9372,7 +9372,7 @@ msgstr "" " feladat megadva akkor az összesre terv, nyitott és folyamatban állapot " "lesz választva.\n" " * Ügy ütemterv számítás: Ez ugyanúgy működik mint az ütemezés gomb a \n" -" project.phase project.fázis-on. Ez alapul veszi a projectet és " +" projekt.projekt fázis.fázis-on. Ez alapul veszi a projektet és " "kiszámítja az összes nyitott,\n" " tervet és elintézetlen ügyeket.\n" " * Ütemezett ügyek: Minden ügy, mely terv, elintézetlen és nyitott " @@ -11437,7 +11437,7 @@ msgstr "" "\n" "Beállítás:\n" "--------------\n" -"A madul telepítése után konfigurálni kell az LDAP paramétereket a vállalat " +"A modul telepítése után konfigurálni kell az LDAP paramétereket a vállalat " "részletei\n" "beállítás fülön. Különböző vállalatoknak különböző LDAP szerverei vannak,\n" "amíg egyedi felhasználó nevei vannak (a felhasználó neveknek az OpenERP-ben\n" @@ -11533,7 +11533,7 @@ msgstr "Réunion (Francia)" msgid "" "New column name must still start with x_ , because it is a custom field!" msgstr "" -"Az új oszlopnévnek még mindig x_-sal kell kezdődnie, mert ez egy egyéni mező!" +"Az új oszlopnévnek még mindig x_-al kell kezdődnie, mert ez egy egyéni mező!" #. module: base #: model:ir.module.module,shortdesc:base.module_mrp_repair @@ -12429,8 +12429,8 @@ msgid "" " " msgstr "" "\n" -"Ez a modul kiegészíti a Raktárház alkalmazást, hatásosan beágyazva a Belökés " -"& Kihúzás raktár folyamatokat.\n" +"Ez a modul kiegészíti a Raktárépület alkalmazást, hatásosan beágyazva a " +"Belökés & Kihúzás raktár folyamatokat.\n" "=============================================================================" "===============================\n" "\n" @@ -12844,7 +12844,7 @@ msgstr "This method does not exist anymore" #: model:ir.actions.act_window,name:base.action_wizard_update_translations #: model:ir.ui.menu,name:base.menu_wizard_update_translations msgid "Synchronize Terms" -msgstr "Feltételek szinkronizáása" +msgstr "Kifejezések szinkronizáása" #. module: base #: field:res.lang,thousands_sep:0 @@ -14008,7 +14008,7 @@ msgstr "Érvénytelen adatbázis azonosító '%s' ehhez a mezőhöz '%%(field)s' #. module: base #: view:res.lang:0 msgid "Update Languague Terms" -msgstr "Nyelvi feltételek frissítése" +msgstr "Nyelvi kifejezések frissítése" #. module: base #: field:workflow.activity,join_mode:0 @@ -14099,7 +14099,7 @@ msgstr "Normál" #. module: base #: model:ir.module.module,shortdesc:base.module_purchase_double_validation msgid "Double Validation on Purchases" -msgstr "A vásárlásokra kétszeres jóváhagyás" +msgstr "Kkétszeres jóváhagyás a beszerzésekre" #. module: base #: field:res.bank,street2:0 @@ -18559,8 +18559,8 @@ msgstr "" "Az Elválasztó formátumnak olyannak kell lennie [,n] ahol 0 < n :egység " "számjegytől indul. A -1 fogja jelezni az elválasztás végét. Pl. a [3,2,-1] " "fogja jelölni a 106500-nál, hogy 1,06,500 lehessen; az [1,2,-1] fogja " -"lehetővé tenni, hogy a szám 106,50,0 legyen. Ebben az esetben mindig a ',' " -"az ezres elválasztó." +"lehetővé tenni, hogy a szám 106,50,0 legyen;[3] fogja jelölni mint 106,500. " +"Ebben az esetben mindig a ',' az ezres elválasztó." #. module: base #: field:ir.module.module,auto_install:0 diff --git a/openerp/addons/base/i18n/hy.po b/openerp/addons/base/i18n/hy.po index a96eabcf7a7..fdc7f61cdcb 100644 --- a/openerp/addons/base/i18n/hy.po +++ b/openerp/addons/base/i18n/hy.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-10-08 06:09+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:48+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/id.po b/openerp/addons/base/i18n/id.po index 7d8cc6a4f14..e906a03f03f 100644 --- a/openerp/addons/base/i18n/id.po +++ b/openerp/addons/base/i18n/id.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-11 06:08+0000\n" -"X-Generator: Launchpad (build 16948)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:54+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/is.po b/openerp/addons/base/i18n/is.po index 824538b219d..b466386bf6d 100644 --- a/openerp/addons/base/i18n/is.po +++ b/openerp/addons/base/i18n/is.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:12+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:54+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/it.po b/openerp/addons/base/i18n/it.po index 47f95f75c39..090b0c6c16a 100644 --- a/openerp/addons/base/i18n/it.po +++ b/openerp/addons/base/i18n/it.po @@ -9,13 +9,13 @@ msgstr "" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:35+0000\n" "PO-Revision-Date: 2013-01-19 09:34+0000\n" -"Last-Translator: Davide Corio \n" +"Last-Translator: Davide Corio @ LS \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:12+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:54+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ja.po b/openerp/addons/base/i18n/ja.po index 288297863a1..624110f0d5e 100644 --- a/openerp/addons/base/i18n/ja.po +++ b/openerp/addons/base/i18n/ja.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-07 07:22+0000\n" -"X-Generator: Launchpad (build 16948)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:55+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ka.po b/openerp/addons/base/i18n/ka.po index 4c83165c302..12f724f8fc2 100644 --- a/openerp/addons/base/i18n/ka.po +++ b/openerp/addons/base/i18n/ka.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:11+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:52+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/kk.po b/openerp/addons/base/i18n/kk.po index c615c2fca92..f893af8ac41 100644 --- a/openerp/addons/base/i18n/kk.po +++ b/openerp/addons/base/i18n/kk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:12+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:55+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ko.po b/openerp/addons/base/i18n/ko.po index dd7f1b00510..6b6b7957605 100644 --- a/openerp/addons/base/i18n/ko.po +++ b/openerp/addons/base/i18n/ko.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:13+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:55+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/lt.po b/openerp/addons/base/i18n/lt.po index 07ee4ad23a7..7069722d47d 100644 --- a/openerp/addons/base/i18n/lt.po +++ b/openerp/addons/base/i18n/lt.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-10-08 06:13+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:56+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/lv.po b/openerp/addons/base/i18n/lv.po index 396435687cb..65ecd2e72be 100644 --- a/openerp/addons/base/i18n/lv.po +++ b/openerp/addons/base/i18n/lv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-12-08 05:45+0000\n" -"X-Generator: Launchpad (build 16869)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:56+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/mk.po b/openerp/addons/base/i18n/mk.po index dafa062e849..31d0c02d729 100644 --- a/openerp/addons/base/i18n/mk.po +++ b/openerp/addons/base/i18n/mk.po @@ -16,8 +16,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-10-08 06:13+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:56+0000\n" +"X-Generator: Launchpad (build 16976)\n" "Language: mk\n" #. module: base diff --git a/openerp/addons/base/i18n/mn.po b/openerp/addons/base/i18n/mn.po index 2e114731dc8..4a1b14f5d5d 100644 --- a/openerp/addons/base/i18n/mn.po +++ b/openerp/addons/base/i18n/mn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-09 06:50+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:56+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/nb.po b/openerp/addons/base/i18n/nb.po index 1c6cd39af30..fe0ceb8fb9c 100644 --- a/openerp/addons/base/i18n/nb.po +++ b/openerp/addons/base/i18n/nb.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:13+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:57+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/nl.po b/openerp/addons/base/i18n/nl.po index b3e5afffd5c..a68358a9799 100644 --- a/openerp/addons/base/i18n/nl.po +++ b/openerp/addons/base/i18n/nl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-14 06:58+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:51+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/nl_BE.po b/openerp/addons/base/i18n/nl_BE.po index 6dc8f15506f..bd154c4e340 100644 --- a/openerp/addons/base/i18n/nl_BE.po +++ b/openerp/addons/base/i18n/nl_BE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:17+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:04+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/pl.po b/openerp/addons/base/i18n/pl.po index eeca9b28a53..28d26b4bac4 100644 --- a/openerp/addons/base/i18n/pl.po +++ b/openerp/addons/base/i18n/pl.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-11-17 05:44+0000\n" -"X-Generator: Launchpad (build 16831)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:57+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/pt.po b/openerp/addons/base/i18n/pt.po index 76afbde170b..7f1f2e9764f 100644 --- a/openerp/addons/base/i18n/pt.po +++ b/openerp/addons/base/i18n/pt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-21 06:51+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:57+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/pt_BR.po b/openerp/addons/base/i18n/pt_BR.po index 9649e050f0a..277788aeb64 100644 --- a/openerp/addons/base/i18n/pt_BR.po +++ b/openerp/addons/base/i18n/pt_BR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:16+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:02+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ro.po b/openerp/addons/base/i18n/ro.po index 5eb162874eb..a68c6c5ae5f 100644 --- a/openerp/addons/base/i18n/ro.po +++ b/openerp/addons/base/i18n/ro.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-23 07:44+0000\n" -"X-Generator: Launchpad (build 16926)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:58+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ru.po b/openerp/addons/base/i18n/ru.po index de07ddc1135..a2547c4bba0 100644 --- a/openerp/addons/base/i18n/ru.po +++ b/openerp/addons/base/i18n/ru.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-12-23 05:47+0000\n" -"X-Generator: Launchpad (build 16872)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:58+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sk.po b/openerp/addons/base/i18n/sk.po index 931bd362f9c..ae674fbafa0 100644 --- a/openerp/addons/base/i18n/sk.po +++ b/openerp/addons/base/i18n/sk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-06 05:04+0000\n" -"X-Generator: Launchpad (build 16877)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:59+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sl.po b/openerp/addons/base/i18n/sl.po index 61771677c61..06f3ce60f19 100644 --- a/openerp/addons/base/i18n/sl.po +++ b/openerp/addons/base/i18n/sl.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-10-08 06:14+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:59+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sq.po b/openerp/addons/base/i18n/sq.po index 83131c5fc2e..db8099cca7e 100644 --- a/openerp/addons/base/i18n/sq.po +++ b/openerp/addons/base/i18n/sq.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-10-08 06:09+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:48+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sr.po b/openerp/addons/base/i18n/sr.po index ada202d9d5c..a6257f16089 100644 --- a/openerp/addons/base/i18n/sr.po +++ b/openerp/addons/base/i18n/sr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:14+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:58+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sr@latin.po b/openerp/addons/base/i18n/sr@latin.po index e5ef8917437..d0195138102 100644 --- a/openerp/addons/base/i18n/sr@latin.po +++ b/openerp/addons/base/i18n/sr@latin.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:18+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sv.po b/openerp/addons/base/i18n/sv.po index 693da2b8573..08be224f6a1 100644 --- a/openerp/addons/base/i18n/sv.po +++ b/openerp/addons/base/i18n/sv.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-11-02 06:23+0000\n" -"X-Generator: Launchpad (build 16820)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:59+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/th.po b/openerp/addons/base/i18n/th.po index bda5cd25c3e..ac4eaaf9574 100644 --- a/openerp/addons/base/i18n/th.po +++ b/openerp/addons/base/i18n/th.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-06 06:23+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:00+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/tlh.po b/openerp/addons/base/i18n/tlh.po index cbe11af13b9..4648ba2476c 100644 --- a/openerp/addons/base/i18n/tlh.po +++ b/openerp/addons/base/i18n/tlh.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-10-08 06:15+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:00+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/tr.po b/openerp/addons/base/i18n/tr.po index 7ce54b2dee2..df8d3d15374 100644 --- a/openerp/addons/base/i18n/tr.po +++ b/openerp/addons/base/i18n/tr.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-10-08 06:15+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:00+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/uk.po b/openerp/addons/base/i18n/uk.po index 345604b4398..f180ead7cda 100644 --- a/openerp/addons/base/i18n/uk.po +++ b/openerp/addons/base/i18n/uk.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-10-08 06:15+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:00+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ur.po b/openerp/addons/base/i18n/ur.po index 4ecaa9081b0..3d3756ebfb0 100644 --- a/openerp/addons/base/i18n/ur.po +++ b/openerp/addons/base/i18n/ur.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:15+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:01+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/vi.po b/openerp/addons/base/i18n/vi.po index 5b26bb5eb0f..c08fb723378 100644 --- a/openerp/addons/base/i18n/vi.po +++ b/openerp/addons/base/i18n/vi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:15+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:01+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/zh_CN.po b/openerp/addons/base/i18n/zh_CN.po index 409a866bb55..082b665b9c7 100644 --- a/openerp/addons/base/i18n/zh_CN.po +++ b/openerp/addons/base/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-11-27 05:39+0000\n" -"X-Generator: Launchpad (build 16845)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:05+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/zh_HK.po b/openerp/addons/base/i18n/zh_HK.po index 0d411f962b9..df3c6a70e63 100644 --- a/openerp/addons/base/i18n/zh_HK.po +++ b/openerp/addons/base/i18n/zh_HK.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-08 06:16+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:01+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/zh_TW.po b/openerp/addons/base/i18n/zh_TW.po index 2a8b1bac99e..fa5e47ab6a1 100644 --- a/openerp/addons/base/i18n/zh_TW.po +++ b/openerp/addons/base/i18n/zh_TW.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-12-02 05:51+0000\n" -"X-Generator: Launchpad (build 16856)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:05+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing From 96beccc05ae24c36865bc4ef1639a073f17bf9c7 Mon Sep 17 00:00:00 2001 From: "Foram Katharotiya (OpenERP)" Date: Fri, 4 Apr 2014 11:24:09 +0200 Subject: [PATCH 39/65] [IMP] bring back the tests - backported from little after v7.0 in the trunk lp bug: https://launchpad.net/bugs/1182515 fixed bzr revid: ls@numerigraphe.com-20140404092409-q1c2cwg5m2fav7tn --- addons/stock/__openerp__.py | 9 +- addons/stock/security/stock_security.xml | 2 +- addons/stock/stock_demo.yml | 128 ++++---- addons/stock/test/opening_stock.yml | 92 ++++-- addons/stock/test/shipment.yml | 356 ++++++++++++----------- addons/stock/test/stock_report.yml | 35 ++- addons/stock/test/stock_users.yml | 30 ++ 7 files changed, 372 insertions(+), 280 deletions(-) create mode 100644 addons/stock/test/stock_users.yml diff --git a/addons/stock/__openerp__.py b/addons/stock/__openerp__.py index b3d7e30f1ce..dd2a996f6dd 100644 --- a/addons/stock/__openerp__.py +++ b/addons/stock/__openerp__.py @@ -59,7 +59,6 @@ Dashboard / Reports for Warehouse Management will include: 'sequence': 16, 'demo': [ 'stock_demo.xml', -# 'stock_demo.yml', ], 'data': [ 'security/stock_security.xml', @@ -91,9 +90,11 @@ Dashboard / Reports for Warehouse Management will include: 'res_config_view.xml', ], 'test': [ -# 'test/opening_stock.yml', -# 'test/shipment.yml', -# 'test/stock_report.yml', + 'test/stock_users.yml', + 'stock_demo.yml', + 'test/opening_stock.yml', + 'test/shipment.yml', + 'test/stock_report.yml', ], 'installable': True, 'application': True, diff --git a/addons/stock/security/stock_security.xml b/addons/stock/security/stock_security.xml index 10ae6a16d59..e51f20c67c9 100644 --- a/addons/stock/security/stock_security.xml +++ b/addons/stock/security/stock_security.xml @@ -10,7 +10,7 @@ Manager - + diff --git a/addons/stock/stock_demo.yml b/addons/stock/stock_demo.yml index 99565f0c08c..d925ba4dc8e 100644 --- a/addons/stock/stock_demo.yml +++ b/addons/stock/stock_demo.yml @@ -1,99 +1,107 @@ - - !record {model: stock.location, id: location_refrigerator}: - name: Refrigerator + Only stock manager can create location,warehouse and product, so let's check data with giving the access rights of manager +- + !context + uid: 'res_users_stock_manager' +- + !record {model: stock.location, id: location_monitor}: + name: chicago shop usage: internal - - !record {model: stock.location, id: location_delivery_counter}: - name: Delivery Counter + !record {model: stock.location, id: stock_location_output}: + name: Output usage: internal - - !record {model: stock.location, id: location_refrigerator_small}: - name: Small Refrigerator + !record {model: stock.location, id: location_monitor_small}: + name: Small chicago shop usage: internal - location_id: location_refrigerator + location_id: location_monitor - !record {model: stock.location, id: location_opening}: name: opening usage: inventory - - !record {model: stock.location, id: location_convenience_shop}: - name: Convenient Store + !record {model: stock.location, id: stock_location_3}: + name: IT Suppliers usage: supplier - - !record {model: stock.warehouse, id: warehouse_icecream}: - name: Ice Cream Shop - lot_input_id: location_refrigerator - lot_stock_id: location_refrigerator - lot_output_id: location_delivery_counter + !record {model: stock.warehouse, id: stock_warehouse_shop0}: + name: Chicago Warehouse + lot_input_id: location_monitor + lot_stock_id: location_monitor + lot_output_id: stock_location_output - - !record {model: product.product, id: product_icecream}: - default_code: 001 - name: Ice Cream - type: product - categ_id: product.product_category_1 - list_price: 100.0 - standard_price: 70.0 - uom_id: product.product_uom_kgm - uom_po_id: product.product_uom_kgm - procure_method: make_to_stock + !record {model: product.product, id: product_product_6}: + default_code: LCD15 + name: 15” LCD Monitor + type: consu + categ_id: product.product_category_8 + list_price: 1200.0 + standard_price: 800.0 + uom_id: product.product_uom_unit + uom_po_id: product.product_uom_unit property_stock_inventory: location_opening valuation: real_time cost_method: average - property_stock_account_input: account.o_expense - property_stock_account_output: account.o_income - description: Ice cream can be mass-produced and thus is widely available in developed parts of the world. Ice cream can be purchased in large cartons (vats and squrounds) from supermarkets and grocery stores, in smaller quantities from ice cream shops, convenience stores, and milk bars, and in individual servings from small carts or vans at public events. - + property_stock_account_input: account.conf_o_income + property_stock_account_output: account.a_expense - - !record {model: stock.production.lot, id: lot_icecream_0}: - name: Lot0 for Ice cream - product_id: product_icecream + Stock user can handled production lot,inventory and picking, so let's check data with giving the access rights of user - - !record {model: stock.production.lot, id: lot_icecream_1}: - name: Lot1 for Ice cream - product_id: product_icecream + !context + uid: 'res_users_stock_user' - - !record {model: stock.inventory, id: stock_inventory_icecream}: - name: Inventory for icecream + !record {model: stock.production.lot, id: lot_monitor_0}: + name: Lot0 for LCD Monitor + product_id: product_product_6 - - !record {model: stock.inventory.line, id: stock_inventory_line_icecream_lot0}: - product_id: product_icecream - product_uom: product.product_uom_kgm - inventory_id: stock_inventory_icecream + !record {model: stock.production.lot, id: lot_monitor_1}: + name: Lot1 for LCD Monitor + product_id: product_product_6 +- + !record {model: stock.inventory, id: stock_inventory_0}: + name: Starting Inventory + state: draft +- + !record {model: stock.inventory.line, id: stock_inventory_line_3}: + product_id: product_product_6 + product_uom: product.product_uom_unit + inventory_id: stock_inventory_0 product_qty: 50.0 - prod_lot_id: lot_icecream_0 - location_id: location_refrigerator + prod_lot_id: lot_monitor_0 + location_id: location_monitor - - !record {model: stock.inventory.line, id: stock_inventory_line_icecream_lot1}: - product_id: product_icecream - product_uom: product.product_uom_kgm - inventory_id: stock_inventory_icecream + !record {model: stock.inventory.line, id: stock_inventory_line_monitor}: + product_id: product_product_6 + product_uom: product.product_uom_unit + inventory_id: stock_inventory_0 product_qty: 40.0 - prod_lot_id: lot_icecream_1 - location_id: location_refrigerator + prod_lot_id: lot_monitor_1 + location_id: location_monitor - !record {model: stock.picking, id: outgoing_shipment}: type: out - location_dest_id: location_delivery_counter + location_dest_id: stock_location_output - - !record {model: stock.move, id: outgoing_shipment_icecream}: + !record {model: stock.move, id: outgoing_shipment_monitor}: picking_id: outgoing_shipment - product_id: product_icecream - product_uom: product.product_uom_kgm + product_id: product_product_6 + product_uom: product.product_uom_unit product_qty: 130.0 - location_id: location_refrigerator - location_dest_id: location_delivery_counter + location_id: location_monitor + location_dest_id: stock_location_output - !record {model: stock.picking, id: incomming_shipment}: type: in invoice_state: 2binvoiced partner_id: base.res_partner_address_9 - location_dest_id: location_refrigerator + location_dest_id: location_monitor - - !record {model: stock.move, id: incomming_shipment_icecream}: + !record {model: stock.move, id: incomming_shipment_monitor}: picking_id: incomming_shipment - product_id: product_icecream - product_uom: product.product_uom_kgm + product_id: product_product_6 + product_uom: product.product_uom_unit product_qty: 50.0 - location_id: location_convenience_shop - location_dest_id: location_refrigerator + location_id: stock_location_3 + location_dest_id: location_monitor diff --git a/addons/stock/test/opening_stock.yml b/addons/stock/test/opening_stock.yml index 2e3eaeadc74..9efcfd3af99 100644 --- a/addons/stock/test/opening_stock.yml +++ b/addons/stock/test/opening_stock.yml @@ -1,67 +1,87 @@ - - I update the price of the Ice-cream. + Only stock manager can change the price and update stock of products, so let's check data with giving the access rights of manager +- + !context + uid: 'res_users_stock_manager' +- + I update the price of the 15” LCD Monitor. - !python {model: stock.change.standard.price}: | - context.update({'active_model':'product.product', 'active_id': ref('product_icecream'), 'active_ids':[ref('product_icecream')]}) + context.update({'active_model':'product.product', 'active_id': ref('product_product_6'), 'active_ids':[ref('product_product_6')]}) - !record {model: stock.change.standard.price, id: change_price}: - new_price: 120 + new_price: 1500 - !python {model: stock.change.standard.price}: | self.change_price(cr, uid, [ref('change_price')], context=context) - - I check price of Ice-cream after update price. + I check price of 15” LCD Monitor after update price. - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_icecream'), context=context) - assert product.standard_price == 120, "Price is not updated." + product = self.browse(cr, uid, ref('product_product_6'), context=context) + assert product.standard_price == 1500, "Price is not updated." - - I update the current stock of the Ice-cream with 10 kgm in Small Refrigerator in lot0. + I update the current stock of the 15” LCD Monitor with 10 unit in stock location shop1 in lot0. - !record {model: stock.change.product.qty, id: change_qty}: - location_id: location_refrigerator_small + location_id: location_monitor_small new_quantity: 10 - product_id: product_icecream - prodlot_id: lot_icecream_1 + product_id: product_product_6 + prodlot_id: lot_monitor_1 - !python {model: stock.change.product.qty}: | self.change_product_qty(cr, uid, [ref('change_qty')], context=context) - - I check available stock of Ice-cream after update stock. + I check available stock of 15” LCD Monitor after update stock. - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_icecream'), context=context) + product = self.browse(cr, uid, ref('product_product_6'), context=context) assert product.qty_available == 10, "Stock is not updated." +- + Stock user can merge inventory, so let's check data with giving the access rights of user. +- + !context + uid: 'res_users_stock_user' - I merge inventory. - !python {model: stock.inventory.merge }: | - context.update({'active_model': 'stock.inventory', 'active_id': ref('stock_inventory_icecream'), 'active_ids': [ref('stock_inventory_icecream')]}) + context.update({'active_model': 'stock.inventory', 'active_id': ref('stock_inventory_0'), 'active_ids': [ref('stock_inventory_0')]}) - !record {model: stock.inventory.merge, id: merge_inventory}: - !python {model: stock.inventory.merge }: | self.do_merge(cr, uid, [ref('merge_inventory')], context=context) +- + Only stock manager cancelled inventory, so let's check data with giving the access rights of manager +- + !context + uid: 'res_users_stock_manager' - I cancel inventory. - !python {model: stock.inventory}: | - self.action_cancel_inventory(cr, uid, [ref('stock_inventory_icecream')]) + self.action_cancel_inventory(cr, uid, [ref('stock_inventory_0')]) +- + stock user can reset inventory, so let's check data with giving the access rights of user +- + !context + uid: 'res_users_stock_user' - I reset to draft inventory. - !python {model: stock.inventory}: | - self.action_cancel_draft(cr, uid, [ref('stock_inventory_icecream')]) + self.action_cancel_draft(cr, uid, [ref('stock_inventory_0')]) - - I confirm physical inventory of Ice-cream which are came in different lots. + I confirm physical inventory of 15” LCD Monitor which are came in different lots. - !python {model: stock.inventory}: | - self.action_confirm(cr, uid, [ref('stock_inventory_icecream')], context=context) + self.action_confirm(cr, uid, [ref('stock_inventory_0')], context=context) - I check move details after confirmed physical inventory. - !python {model: stock.inventory}: | - inventory = self.browse(cr, uid, ref('stock_inventory_icecream'), context=context) + inventory = self.browse(cr, uid, ref('stock_inventory_0'), context=context) assert len(inventory.move_ids) == len(inventory.inventory_line_id), "moves are not correspond." for move_line in inventory.move_ids: for line in inventory.inventory_line_id: @@ -77,15 +97,15 @@ I split inventory line. - !python {model: stock.inventory.line.split}: | - context.update({'active_model': 'stock.inventory.line', 'active_id': ref('stock_inventory_line_icecream_lot0'), 'active_ids': [ref('stock_inventory_line_icecream_lot0')]}) + context.update({'active_model': 'stock.inventory.line', 'active_id': ref('stock_inventory_line_3'), 'active_ids': [ref('stock_inventory_line_3')]}) - !record {model: stock.inventory.line.split, id: split_inventory_lot0}: use_exist: True line_exist_ids: - quantity: 6 - prodlot_id: lot_icecream_0 + prodlot_id: lot_monitor_0 - quantity: 4 - prodlot_id: lot_icecream_0 + prodlot_id: lot_monitor_0 - !python {model: stock.inventory.line.split }: | self.split_lot(cr, uid, [ref('split_inventory_lot0')], context=context) @@ -93,39 +113,49 @@ I fill inventory line. - !python {model: stock.fill.inventory}: | - context.update({'active_model': 'stock.inventory', 'active_id': ref('stock_inventory_icecream'), 'active_ids': [ref('stock_inventory_icecream')]}) + context.update({'active_model': 'stock.inventory', 'active_id': ref('stock_inventory_0'), 'active_ids': [ref('stock_inventory_0')]}) - !record {model: stock.fill.inventory, id: fill_inventory}: - location_id: location_refrigerator + location_id: location_monitor recursive: True - !python {model: stock.fill.inventory }: | self.fill_inventory(cr, uid, [ref('fill_inventory')], context=context) - - Now I check vitual stock of Ice-cream after confirmed physical inventory. + Now I check vitual stock of 15” LCD Monitor after confirmed physical inventory. - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_icecream'), context=context) + product = self.browse(cr, uid, ref('product_product_6'), context=context) assert product.virtual_available == 100, "Vitual stock is not updated." - - I close physical inventory of Ice-cream. + Only stock manager can close physical inventory, so let's check data with giving the access rights of manager +- + !context + uid: 'res_users_stock_manager' +- + I close physical inventory of 15” LCD Monitor. - !python {model: stock.inventory}: | - self.action_done(cr, uid, [ref('stock_inventory_icecream')], context=context) + self.action_done(cr, uid, [ref('stock_inventory_0')], context=context) - - I check closed move and real stock of Ice-cream after closed physical inventory. + Stock user can check closed move and real stock, so let's check data with giving the access rights of user +- + !context + uid: 'res_users_stock_user' +- + I check closed move and real stock of 15” LCD Monitor after closed physical inventory. - !python {model: stock.inventory}: | - inventory = self.browse(cr, uid, ref('stock_inventory_icecream'), context=context) + inventory = self.browse(cr, uid, ref('stock_inventory_0'), context=context) assert inventory.state == 'done', "inventory is not closed." for move_line in inventory.move_ids: assert move_line.state == 'done', "Move is not closed." - product = self.pool.get('product.product').browse(cr, uid, ref('product_icecream'), context=context) + product = self.pool.get('product.product').browse(cr, uid, ref('product_product_6'), context=context) product.qty_available == 100, "Real stock is not updated." - I check stock in lot. - !python {model: stock.production.lot}: | - lot = self.browse(cr, uid, ref('lot_icecream_0'), context=context) + lot = self.browse(cr, uid, ref('lot_monitor_0'), context=context) assert lot.stock_available == 50, "Stock in lot is not correspond." diff --git a/addons/stock/test/shipment.yml b/addons/stock/test/shipment.yml index b30feccdacf..5f2f4686621 100644 --- a/addons/stock/test/shipment.yml +++ b/addons/stock/test/shipment.yml @@ -1,9 +1,14 @@ - - I confirm outgoing shipment of 130 kgm Ice-cream. + Stock manager can only test whole process related to Shipment, so let's check data with stock manager. +- + !context + uid: 'res_users_stock_manager' +- + I confirm outgoing shipment of 130 Unit 15” LCD Monitor. - !workflow {model: stock.picking, action: button_confirm, ref: outgoing_shipment} - - I check shipment details after confirmed. + I check shipment details after confirmation. - !python {model: stock.picking}: | shipment = self.browse(cr, uid, ref("outgoing_shipment")) @@ -12,121 +17,25 @@ assert move_line.state == "confirmed", "Move should be confirmed." - - Now I check vitual stock of Ice-cream after confirmed outgoing shipment. + Now, I check virtual stock of 15” LCD Monitor after confirming outgoing shipment. - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_icecream'), context=context) - product.virtual_available == -30, "Vitual stock is not updated." + product = self.browse(cr, uid, ref('product_product_6'), context=context) + assert product.virtual_available == -30, "Virtual stock is not updated." - - I confirm incomming shipment of 50 kgm Ice-cream. + I confirm incoming shipment of 50 Unit 15” LCD Monitor. - !workflow {model: stock.picking, action: button_confirm, ref: incomming_shipment} - - I receive 40kgm Ice-cream so I make backorder of incomming shipment for 40 kgm. -- - !python {model: stock.partial.picking}: | - context.update({'active_model': 'stock.picking', 'active_id': ref('incomming_shipment'), 'active_ids': [ref('incomming_shipment')]}) -- - !record {model: stock.partial.picking, id: partial_incomming}: - move_ids: - - quantity: 40 - product_id: product_icecream - product_uom: product.product_uom_kgm - move_id: incomming_shipment_icecream - location_id: location_convenience_shop - location_dest_id: location_refrigerator -- - !python {model: stock.partial.picking }: | - self.do_partial(cr, uid, [ref('partial_incomming')], context=context) -- - I check backorder shipment after received partial shipment. + I split incoming shipment into lots. each lot contain 10 Unit 15” LCD Monitor. - !python {model: stock.picking}: | shipment = self.browse(cr, uid, ref("incomming_shipment")) - backorder = shipment.backorder_id - assert backorder, "Backorder should be created after partial shipment." - assert backorder.state == 'done', "Backorder should be close after received." - for move_line in backorder.move_lines: - assert move_line.product_qty == 40, "Qty in backorder does not correspond." - assert move_line.state == 'done', "Move line of backorder should be closed." -- - I receive another 10kgm Ice-cream. -- - !record {model: stock.partial.picking, id: partial_incomming}: - move_ids: - - quantity: 10 - product_id: product_icecream - product_uom: product.product_uom_kgm - move_id: incomming_shipment_icecream - location_id: location_convenience_shop - location_dest_id: location_refrigerator -- - !python {model: stock.partial.picking }: | - self.do_partial(cr, uid, [ref('partial_incomming')], context=context) - -- - I check incomming shipment after received. -- - !python {model: stock.picking}: | - shipment = self.browse(cr, uid, ref("incomming_shipment")) - assert shipment.state == 'done', "shipment should be close after received." - for move_line in shipment.move_lines: - assert move_line.product_qty == 10, "Qty does not correspond." - assert move_line.product_id.virtual_available == 20, "Virtual stock does not correspond." - assert move_line.state == 'done', "Move line should be closed." - -- - I return last incomming shipment for 10 kgm Ice-cream. -- - !record {model: stock.return.picking, id: return_incomming}: - invoice_state: none -- - !python {model: stock.return.picking }: | - # this work without giving the id of the picking to return, magically, thanks to the context - self.create_returns(cr, uid, [ref('return_incomming')], context=context) -- - I cancel incomming shipment after return it. -- - !python {model: stock.picking}: | - # the cancel is not on the return, but on the incomming shipment (which now has a quantity of 10, thanks to the - # backorder). This situation is a little weird as we returned a move that we finally cancelled... As result, only - # 30Kg from the original 50Kg will be counted in the stock (50 - 10 (cancelled quantity) - 10 (returned quantity)) - self.action_cancel(cr, uid, [ref("incomming_shipment")], context=context) -- - I make invoice of backorder of incomming shipment. -- - !python {model: stock.invoice.onshipping}: | - shipment = self.pool.get('stock.picking').browse(cr, uid, ref("incomming_shipment")) - context.update({'active_model': 'stock.picking', 'active_id': shipment.backorder_id.id, 'active_ids': [shipment.backorder_id.id]}) -- - !record {model: stock.invoice.onshipping, id: invoice_incomming}: - group: False -- - !python {model: stock.invoice.onshipping }: | - self.create_invoice(cr, uid, [ref('invoice_incomming')], context=context) -- - I check invoice state of backorder of incomming shipment. -- - !python {model: stock.picking}: | - shipment = self.browse(cr, uid, ref("incomming_shipment")) - assert shipment.backorder_id.invoice_state == 'invoiced', 'Invoice state is not upadted.' -- - I check available stock after received incomming shipping. -- - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_icecream'), context=context) - assert product.qty_available == 140, "Stock does not correspond." - assert product.virtual_available == 0, "Vitual stock does not correspond." -- - I split incomming shipment into lots. each lot contain 10 kgm Ice-cream. -- - !python {model: stock.picking}: | - shipment = self.browse(cr, uid, ref("incomming_shipment")) - move_ids = [x.id for x in shipment.backorder_id.move_lines] + move_ids = [x.id for x in shipment.move_lines] context.update({'active_model': 'stock.move', 'active_id': move_ids[0], 'active_ids': move_ids}) - - !record {model: stock.move.split, id: split_lot_incomming}: + !record {model: stock.move.split, id: split_lot_incoming}: line_ids: - name: incoming_lot0 quantity: 10 @@ -136,23 +45,123 @@ quantity: 10 - name: incoming_lot3 quantity: 10 - - !python {model: stock.move.split }: | - self.split_lot(cr, uid, [ref('split_lot_incomming')], context=context) + self.split_lot(cr, uid, [ref('split_lot_incoming')], context=context) - - I check move lines after spliting + I check move lines after splitting. - !python {model: stock.move}: | - lot = self.pool.get('stock.move.split').browse(cr, uid, ref('split_lot_incomming'), context=context) + mm = self.browse(cr, uid, ref("incomming_shipment_monitor")) + lot = self.pool.get('stock.move.split').browse(cr, uid, ref('split_lot_incoming'), context=context) lot_ids = self.pool.get('stock.production.lot').search(cr, uid, [('name','in',[x.name for x in lot.line_ids])]) - assert len(lot_ids) == 4, 'lots of incomming shipment are not correspond.' - move_ids = self.search(cr, uid, [('location_dest_id','=',ref('location_refrigerator')),('prodlot_id','in',lot_ids)]) - assert len(move_ids) == 4, 'move lines are not correspond per prodcution lot after splited.' + assert len(lot_ids) == 4, 'lots of incoming shipment are not correspond.' + move_ids = self.search(cr, uid, [('location_dest_id','=',ref('location_monitor')),('prodlot_id','in',lot_ids)]) + assert len(move_ids) == 4, 'move lines are not correspond per production lot after splitting.' for move in self.browse(cr, uid, move_ids, context=context): assert move.prodlot_id.name in ['incoming_lot0', 'incoming_lot1', 'incoming_lot2', 'incoming_lot3'], "lot does not correspond." assert move.product_qty == 10, "qty does not correspond per production lot." - context.update({'active_model':'stock.move', 'active_id':move_ids[0],'active_ids': move_ids}) +- + I receive 40 units of 15” LCD Monitor. +- + !python {model: stock.partial.picking}: | + context.update({'active_model': 'stock.picking', 'active_id': ref('incomming_shipment'), 'active_ids': [ref('incomming_shipment')]}) +- + !python {model: stock.partial.picking}: | + partial = [] + for move in self.pool.get('stock.picking').browse(cr, uid, ref("incomming_shipment")).move_lines: + if move.prodlot_id: + partial.append((0, 0, { + 'quantity': move.product_qty, + 'product_id': move.product_id.id, + 'product_uom': move.product_uom.id, + 'move_id': move.id, + 'location_id': move.location_id.id, + 'location_dest_id': move.location_dest_id.id, + 'prodlot_id': move.prodlot_id.id, + 'cost': move.product_id.standard_price + })) + partial_id = self.create(cr, uid, {'move_ids': partial}, context=context) + self.do_partial(cr, uid, [partial_id], context=context) +- + I check backorder shipment after receiving partial shipment. +- + !python {model: stock.picking}: | + shipment = self.browse(cr, uid, ref("incomming_shipment")) + backorder = shipment.backorder_id + assert backorder, "Backorder should be created after partial shipment." + assert backorder.state == 'done', "Backorder should be closed after received." + qty = 0 + for move_line in backorder.move_lines: + assert move_line.state == 'done', "Move line of backorder should be closed." + qty += move_line.product_qty + assert qty == 40, "Qty in backorder does not correspond." +- + I receive another 10 units of 15” LCD Monitor. +- + !record {model: stock.partial.picking, id: partial_incoming}: + move_ids: + - quantity: 10 + product_id: product_product_6 + product_uom: product.product_uom_unit + move_id: incomming_shipment_monitor + location_id: stock_location_3 + location_dest_id: location_monitor +- + !python {model: stock.partial.picking }: | + self.do_partial(cr, uid, [ref('partial_incoming')], context=context) +- + I check incoming shipment after receiving it. +- + !python {model: stock.picking}: | + shipment = self.browse(cr, uid, ref("incomming_shipment")) + assert shipment.state == 'done', "shipment should be closed after receiving." + for move_line in shipment.move_lines: + assert move_line.product_qty == 10, "Qty does not correspond." + assert move_line.product_id.virtual_available == 20, "Virtual stock does not correspond." + assert move_line.state == 'done', "Move line should be closed." +- + I return last incoming shipment for 10 Unit 15” LCD Monitor. +- + !record {model: stock.return.picking, id: return_incoming}: + invoice_state: none +- + !python {model: stock.return.picking }: | + # this work without giving the id of the picking to return, magically, thanks to the context + self.create_returns(cr, uid, [ref('return_incoming')], context=context) +- + I cancel incoming shipment after returning it. +- + !python {model: stock.picking}: | + # the cancel is not on the return, but on the incoming shipment (which now has a quantity of 10, thanks to the + # backorder). This situation is a little weird as we returned a move that we finally cancelled... As result, only + # 30Unit from the original 50Unit will be counted in the stock (50 - 10 (cancelled quantity) - 10 (returned quantity)) + self.action_cancel(cr, uid, [ref("incomming_shipment")], context=context) +- + I make invoice of backorder of incoming shipment. +- + !python {model: stock.invoice.onshipping}: | + shipment = self.pool.get('stock.picking').browse(cr, uid, ref("incomming_shipment")) + context.update({'active_model': 'stock.picking', 'active_id': shipment.backorder_id.id, 'active_ids': [shipment.backorder_id.id]}) +- + !record {model: stock.invoice.onshipping, id: invoice_incoming}: + group: False +- + !python {model: stock.invoice.onshipping }: | + self.create_invoice(cr, uid, [ref('invoice_incoming')], context=context) +- + I check invoice status of backorder of incoming shipment. +- + !python {model: stock.picking}: | + shipment = self.browse(cr, uid, ref("incomming_shipment")) + assert shipment.backorder_id.invoice_state == 'invoiced', 'Invoice state is not updated.' +- + I check available stock after receiving incoming shipping. +- + !python {model: product.product}: | + product = self.browse(cr, uid, ref('product_product_6'), context=context) + assert product.qty_available == 140, "Stock does not correspond." + assert product.virtual_available == 0, "Virtual stock does not correspond." - I check the stock valuation account entries. - @@ -161,91 +170,90 @@ account_move_ids = self.search(cr, uid, [('ref','=',incomming_shipment.name)]) assert len(account_move_ids), "account move should be created." account_move = self.browse(cr, uid, account_move_ids[0], context=context) - assert len(account_move.line_id) == len(incomming_shipment.move_lines) + 1, 'accuont entries are not correspond.' + assert len(account_move.line_id) == len(incomming_shipment.move_lines) + 1, 'Accounting entries does not correspond.' for account_move_line in account_move.line_id: for stock_move in incomming_shipment.move_lines: if account_move_line.account_id.id == stock_move.product_id.property_stock_account_input.id: - assert account_move_line.credit == 800.0, "Credit amount does not correspond." + assert account_move_line.credit == 14000.0, "Credit amount does not correspond." assert account_move_line.debit == 0.0, "Debit amount does not correspond." else: assert account_move_line.credit == 0.0, "Credit amount does not correspond." - assert account_move_line.debit == 800.0, "Debit amount does not correspond." -- - I consume 1 kgm ice-cream from each incoming lots into internal production. -- - !record {model: stock.move.consume, id: consume_lot_incomming}: - product_qty: 1 - location_id: location_refrigerator -- - !python {model: stock.move.consume}: | - self.do_move_consume(cr, uid, [ref('consume_lot_incomming')], context=context) -- - I scrap 10 gm ice-cream from each incoming lots into scrap location. -- - !record {model: stock.move.scrap, id: scrap_lot_incomming}: - product_qty: 0.010 -- - !python {model: stock.move.scrap}: | - self.move_scrap(cr, uid, [ref('scrap_lot_incomming')], context=context) -- - I check stock in scrap location and refrigerator location. -- - !python {model: stock.location}: | - ctx = {'product_id': ref('product_icecream')} - refrigerator_location = self.pool.get('stock.location').browse(cr, uid, ref('location_refrigerator'), context=ctx) - assert refrigerator_location.stock_real == 135.96, 'stock does not correspond in refrigerator location.' - scrapped_location = self.browse(cr, uid, ref('stock_location_scrapped'), context=ctx) - assert scrapped_location.stock_real == 0.010*4, 'scraped stock does not correspond in scrap location.' - -- - I check availabile stock after consumed and scraped. -- - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_icecream'), context=context) - assert product.qty_available == 135.96, "Stock does not correspond." - assert round(product.virtual_available, 2) == -4.04, "Vitual stock does not correspond." + assert account_move_line.debit == 14000.0, "Debit amount does not correspond." - I trace all incoming lots. - !python {model: stock.production.lot }: | - lot = self.pool.get('stock.move.split').browse(cr, uid, ref('split_lot_incomming'), context=context) + lot = self.pool.get('stock.move.split').browse(cr, uid, ref('split_lot_incoming'), context=context) lot_ids = self.search(cr, uid, [('name', 'in', [x.name for x in lot.line_ids])]) self.action_traceability(cr, uid, lot_ids, context=context) - - I check outgoing shipment after stock availablity in refrigerator. + I check outgoing shipment after stock availability in Chicago shop. - !python {model: stock.picking}: | shipment = self.browse(cr, uid, ref("outgoing_shipment"), context=context) - self.pool.get('stock.move').action_assign(cr, uid, [x.id for x in shipment.move_lines]) #TOFIX: assignment of move lines should be call before testing assigment otherwise picking never gone in assign state - #TOFIX: shipment should be assigned if stock available - #assert shipment.state == "assigned", "Shipment should be assigned." - #for move_line in shipment.move_lines: - # assert move_line.state == "assigned", "Move should be assigned." + self.pool.get('stock.move').action_assign(cr, uid, [x.id for x in shipment.move_lines]) + assert shipment.state == "assigned", "Shipment should be assigned." + for move_line in shipment.move_lines: + assert move_line.state == "assigned", "Move should be assigned." self.force_assign(cr, uid, [shipment.id]) + context.update({'active_model':'stock.move', 'active_id':shipment.move_lines[0].id,'active_ids': [shipment.move_lines[0].id]}) - - I deliver 5kgm Ice-cream to customer so I make partial deliver + I scrap 4 units of 15” LCD Monitor into scrap location. +- + !record {model: stock.move.scrap, id: scrap_monitor1}: + product_qty: 4 +- + !python {model: stock.move.scrap}: | + self.move_scrap(cr, uid, [ref('scrap_monitor1')], context=context) +- + I consume 4 units of 15” LCD Monitor. +- + !record {model: stock.move.consume, id: consume_monitor1}: + product_qty: 4 + location_id: location_monitor +- + !python {model: stock.move.consume}: | + self.do_move_consume(cr, uid, [ref('consume_monitor1')], context=context) +- + I check stock in scrap location and stock location. +- + !python {model: stock.location}: | + ctx = {'product_id': ref('product_product_6')} + monitor_location = self.pool.get('stock.location').browse(cr, uid, ref('location_monitor'), context=ctx) + assert monitor_location.stock_real == 132.0, 'stock does not correspond in stock location shop0.' + scrapped_location = self.browse(cr, uid, ref('stock_location_scrapped'), context=ctx) + assert scrapped_location.stock_real == 4, 'scraped stock does not correspond in scrap location.' +- + I check available stock after consumed and scraped move. +- + !python {model: product.product}: | + product = self.browse(cr, uid, ref('product_product_6'), context=context) + assert product.qty_available == 132.0, "Stock does not correspond." + assert round(product.virtual_available, 2) == -4.00, "Virtual stock does not correspond." +- + I deliver 5 Unit 15” LCD Monitor to customer partially. - !python {model: stock.partial.move}: | - context.update({'active_model': 'stock.move', 'active_id': ref('outgoing_shipment_icecream'), 'active_ids': [ref('outgoing_shipment_icecream')]}) + context.update({'active_model': 'stock.move', 'active_id': ref('outgoing_shipment_monitor'), 'active_ids': [ref('outgoing_shipment_monitor')]}) - - !record {model: stock.partial.move, id: partial_outgoing_icecream}: + !record {model: stock.partial.move, id: partial_outgoing_monitor}: move_ids: - quantity: 5 - product_id: product_icecream - product_uom: product.product_uom_kgm - move_id: outgoing_shipment_icecream - location_id: location_refrigerator - location_dest_id: location_delivery_counter + product_id: product_product_6 + product_uom: product.product_uom_unit + move_id: outgoing_shipment_monitor + location_id: location_monitor + location_dest_id: stock_location_output - !python {model: stock.partial.move }: | - self.do_partial(cr, uid, [ref('partial_outgoing_icecream')], context=context) + self.do_partial(cr, uid, [ref('partial_outgoing_monitor')], context=context) - - I packing outgoing shipment into box per 10kgm with unique tracking lot. + I pack outgoing shipment into box of 10 Unit with unique tracking lot. - !python {model: stock.move}: | stock_split = self.pool.get('stock.split.into') - move = self.browse(cr, uid, ref('outgoing_shipment_icecream'), context=context) + move = self.browse(cr, uid, ref('outgoing_shipment_monitor'), context=context) context.update({'active_model': 'stock.move', 'active_id': move.id, 'active_ids': [move.id]}) total_qty = move.product_qty split_qty = 10 @@ -254,7 +262,7 @@ stock_split.split(cr, uid, [split_id], context=context) total_qty -= split_qty - - I deliver outgoing shipment. + I deliver the outgoing shipment. - !python {model: stock.partial.picking}: | context.update({'active_model': 'stock.picking', 'active_id': ref('outgoing_shipment'), 'active_ids': [ref('outgoing_shipment')]}) @@ -266,7 +274,7 @@ self.do_partial(cr, uid, [ref('partial_outgoing')], context=context) - - I check outgoing shipment after deliver. + I check outgoing shipment after delivery. - !python {model: stock.picking}: | shipment = self.browse(cr, uid, ref("outgoing_shipment"), context=context) @@ -274,9 +282,9 @@ for move_line in shipment.move_lines: assert move_line.state == "done", "Move should be closed." - - I check availaible stock after deliver. + I check available stock after delivery. - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_icecream'), context=context) - assert round(product.qty_available, 2) == 5.96, "Stock does not correspond." - assert round(product.virtual_available, 2) == -4.04, "Vitual stock does not correspond." + product = self.browse(cr, uid, ref('product_product_6'), context=context) + assert round(product.qty_available, 2) == 6, "Stock does not correspond." + assert round(product.virtual_available, 2) == -4.00, "Virtual stock does not correspond." diff --git a/addons/stock/test/stock_report.yml b/addons/stock/test/stock_report.yml index 5c5932446eb..21ed6046805 100644 --- a/addons/stock/test/stock_report.yml +++ b/addons/stock/test/stock_report.yml @@ -1,41 +1,56 @@ +- + Stock user can print all reports related to stock, so let's check data with giving the access rights of user. +- + !context + uid: 'res_users_stock_user' - I print a stock overview report of location. - !python {model: stock.location}: | - import netsvc, tools, os - (data, format) = netsvc.LocalService('report.lot.stock.overview').create(cr, uid, [ref('location_refrigerator')], {}, {}) + import os + import openerp.report + from openerp import tools + data, format = openerp.report.render_report(cr, uid, [ref('location_monitor')], 'lot.stock.overview', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-overview'+format), 'wb+').write(data) - I print a Stock Overview report of location with child location. - !python {model: stock.location}: | - import netsvc, tools, os - (data, format) = netsvc.LocalService('report.lot.stock.overview_all').create(cr, uid, [ref('location_refrigerator')], {}, {}) + import os + import openerp.report + from openerp import tools + data, format = openerp.report.render_report(cr, uid, [ref('location_monitor')], 'lot.stock.overview_all', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-overviewall'+format), 'wb+').write(data) - I print a Stock Inventory report. - !python {model: stock.inventory}: | - import netsvc, tools, os - (data, format) = netsvc.LocalService('report.stock.inventory.move').create(cr, uid, [ref('stock_inventory_icecream')], {}, {}) + import os + import openerp.report + from openerp import tools + data, format = openerp.report.render_report(cr, uid, [ref('stock_inventory_0')], 'stock.inventory.move', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-stock_inventory_move.'+format), 'wb+').write(data) - I print a outgoing shipment report. - !python {model: stock.picking}: | - import netsvc, tools, os - (data, format) = netsvc.LocalService('report.stock.picking.list').create(cr, uid, [ref('outgoing_shipment')], {}, {}) + import os + import openerp.report + from openerp import tools + data, format = openerp.report.render_report(cr, uid, [ref('outgoing_shipment')], 'stock.picking.list', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-picking_list'+format), 'wb+').write(data) - I print stock Report. - !python {model: product.product}: | - import netsvc, tools, os - (data, format) = netsvc.LocalService('report.stock.product.history').create(cr, uid, [ref('product_icecream')], {}, {}) + import os + import openerp.report + from openerp import tools + data, format = openerp.report.render_report(cr, uid, [ref('product_product_6')], 'stock.product.history', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-product_stock_report.'+format), 'wb+').write(data) diff --git a/addons/stock/test/stock_users.yml b/addons/stock/test/stock_users.yml new file mode 100644 index 00000000000..d0c09dc745d --- /dev/null +++ b/addons/stock/test/stock_users.yml @@ -0,0 +1,30 @@ +- + Create a user as 'Stock Manager' +- + !record {model: res.users, id: res_users_stock_manager}: + company_id: base.main_company + name: Stock Manager + login: sam + password: sam + email: stockmanager@yourcompany.com +- + I added groups for Stock Manager. +- + !record {model: res.users, id: res_users_stock_manager}: + groups_id: + - stock.group_stock_manager +- + Create a user as 'Stock User' +- + !record {model: res.users, id: res_users_stock_user}: + company_id: base.main_company + name: Stock User + login: sau + password: sau + email: stockuser@yourcompany.com +- + I added groups for Stock User. +- + !record {model: res.users, id: res_users_stock_user}: + groups_id: + - stock.group_stock_user From 90ddb9f8975d9d99fadd864538f6e9f285d63b79 Mon Sep 17 00:00:00 2001 From: Lionel Sausin Date: Fri, 4 Apr 2014 11:52:02 +0200 Subject: [PATCH 40/65] [FIX] revert to v7 report API bzr revid: ls@numerigraphe.com-20140404095202-wwegxz9qp00o8yuw --- addons/stock/test/stock_report.yml | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/addons/stock/test/stock_report.yml b/addons/stock/test/stock_report.yml index 21ed6046805..effbf2affe2 100644 --- a/addons/stock/test/stock_report.yml +++ b/addons/stock/test/stock_report.yml @@ -7,50 +7,40 @@ I print a stock overview report of location. - !python {model: stock.location}: | - import os - import openerp.report - from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref('location_monitor')], 'lot.stock.overview', {}, {}) + import netsvc, tools, os + (data, format) = netsvc.LocalService('report.lot.stock.overview').create(cr, uid, [ref('location_monitor')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-overview'+format), 'wb+').write(data) - I print a Stock Overview report of location with child location. - !python {model: stock.location}: | - import os - import openerp.report - from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref('location_monitor')], 'lot.stock.overview_all', {}, {}) + import netsvc, tools, os + (data, format) = netsvc.LocalService('report.lot.stock.overview_all').create(cr, uid, [ref('location_monitor')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-overviewall'+format), 'wb+').write(data) - I print a Stock Inventory report. - !python {model: stock.inventory}: | - import os - import openerp.report - from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref('stock_inventory_0')], 'stock.inventory.move', {}, {}) + import netsvc, tools, os + (data, format) = netsvc.LocalService('report.stock.inventory.move').create(cr, uid, [ref('stock_inventory_0')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-stock_inventory_move.'+format), 'wb+').write(data) - I print a outgoing shipment report. - !python {model: stock.picking}: | - import os - import openerp.report - from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref('outgoing_shipment')], 'stock.picking.list', {}, {}) + import netsvc, tools, os + (data, format) = netsvc.LocalService('report.stock.picking.list').create(cr, uid, [ref('outgoing_shipment')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-picking_list'+format), 'wb+').write(data) - I print stock Report. - !python {model: product.product}: | - import os - import openerp.report - from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref('product_product_6')], 'stock.product.history', {}, {}) + import netsvc, tools, os + (data, format) = netsvc.LocalService('report.stock.product.history').create(cr, uid, [ref('product_product_6')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-product_stock_report.'+format), 'wb+').write(data) From 368afae722724520097390dc77d928f72e2cddc4 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Fri, 4 Apr 2014 12:25:12 +0200 Subject: [PATCH 41/65] [FIX] website_sale: order data refresh problem bzr revid: dle@openerp.com-20140404102512-72x74ys4k6whk8ss --- addons/delivery/sale.py | 12 +++++------- addons/website_sale/controllers/main.py | 5 ++--- addons/website_sale/views/website_sale.xml | 2 +- addons/website_sale_delivery/models/sale_order.py | 15 +++++++++------ 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/addons/delivery/sale.py b/addons/delivery/sale.py index dbebd01ef1e..c5d032ca8a8 100644 --- a/addons/delivery/sale.py +++ b/addons/delivery/sale.py @@ -58,20 +58,18 @@ class sale_order(osv.Model): result.update(carrier_id=order.carrier_id.id) return result - def _delivery_unset(self, cr, uid, order, context=None): - line_ids = [line.id for line in order.order_line if line.is_delivery] - self.pool['sale.order.line'].unlink(cr, uid, line_ids, context=context) - order.refresh() - return True + def _delivery_unset(self, cr, uid, ids, context=None): + sale_obj = self.pool['sale.order.line'] + line_ids = sale_obj.search(cr, uid, [('order_id', 'in', ids), ('is_delivery', '=', True)],context=context) + sale_obj.unlink(cr, uid, line_ids, context=context) def delivery_set(self, cr, uid, ids, context=None): line_obj = self.pool.get('sale.order.line') grid_obj = self.pool.get('delivery.grid') carrier_obj = self.pool.get('delivery.carrier') acc_fp_obj = self.pool.get('account.fiscal.position') - + self._delivery_unset(cr, uid, ids, context=context) for order in self.browse(cr, uid, ids, context=context): - self._delivery_unset(cr, uid, order, context=context) grid_id = carrier_obj.grid_get(cr, uid, [order.carrier_id.id], order.partner_shipping_id.id) if not grid_id: raise osv.except_osv(_('No Grid Available!'), _('No grid matching for this carrier!')) diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 99f39a3c921..78ae0beb7a2 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -604,9 +604,8 @@ class Ecommerce(http.Controller): else: shipping_partner_id = order.partner_invoice_id.id - values = { - 'order': sale_order_obj.browse(cr, SUPERUSER_ID, order.id, context=context) - } + values = {} + values['website_sale_order'] = values['order'] = sale_order_obj.browse(cr, SUPERUSER_ID, order.id, context=context) values['errors'] = sale_order_obj._get_errors(cr, uid, order, context=context) values.update(sale_order_obj._get_website_data(cr, uid, order, context=context)) diff --git a/addons/website_sale/views/website_sale.xml b/addons/website_sale/views/website_sale.xml index 446dfb4567e..350d9acdac0 100644 --- a/addons/website_sale/views/website_sale.xml +++ b/addons/website_sale/views/website_sale.xml @@ -885,7 +885,7 @@

    Validate Order

    -

    +

    diff --git a/addons/website_sale_delivery/models/sale_order.py b/addons/website_sale_delivery/models/sale_order.py index 9826d2105f6..e8b34591940 100644 --- a/addons/website_sale_delivery/models/sale_order.py +++ b/addons/website_sale_delivery/models/sale_order.py @@ -64,15 +64,16 @@ class SaleOrder(orm.Model): return False if all(line.product_id.type == "service" for line in order.website_order_line): order.write({'carrier_id': None}, context=context) - self.pool['sale.order']._delivery_unset(cr, SUPERUSER_ID, order, context=context) + self.pool['sale.order']._delivery_unset(cr, SUPERUSER_ID, [order.id], context=context) return True else: carrier_id = force_carrier_id or order.carrier_id.id - if force_carrier_id or not carrier_id or not carrier_id in self._get_delivery_methods(cr, uid, order, context=context): - self.pool['sale.order']._delivery_unset(cr, SUPERUSER_ID, order, context=context) - carrier_ids = self.pool.get('delivery.carrier').search(cr, uid, [('website_published','=',True)], context=context) - if force_carrier_id: - carrier_ids.insert(0, force_carrier_id) + carrier_ids = self._get_delivery_methods(cr, uid, order, context=context) + if carrier_id not in carrier_ids: + carrier_id = False + else: + carrier_ids.insert(0, carrier_ids.pop(carrier_id)) + if force_carrier_id or not carrier_id or not carrier_id in carrier_ids: for delivery_id in carrier_ids: grid_id = carrier_obj.grid_get(cr, SUPERUSER_ID, [delivery_id], order.partner_shipping_id.id) if grid_id: @@ -81,6 +82,8 @@ class SaleOrder(orm.Model): order.write({'carrier_id': carrier_id}, context=context) if carrier_id: order.delivery_set(context=context) + else: + order._delivery_unset(context=context) return bool(carrier_id) From bae4c6ce408c3cd9cb7491b94e20a0082eb60f40 Mon Sep 17 00:00:00 2001 From: "Foram Katharotiya (OpenERP)" Date: Fri, 4 Apr 2014 14:30:03 +0200 Subject: [PATCH 42/65] [IMP] bring back the tests for MRP - backported from little after v7.0 in the trunk lp bug: https://launchpad.net/bugs/1182515 fixed bzr revid: ls@numerigraphe.com-20140404123003-cdt5zz1vmupbgd1j --- addons/mrp/__openerp__.py | 9 ++++----- addons/mrp/security/ir.model.access.csv | 1 + addons/mrp/security/mrp_security.xml | 1 + addons/mrp/test/cancel_order.yml | 5 +++++ addons/mrp/test/mrp_users.yml | 20 ++++++++++++++++++++ addons/mrp/test/order_demo.yml | 5 +++++ addons/mrp/test/order_process.yml | 5 +++++ 7 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 addons/mrp/test/mrp_users.yml diff --git a/addons/mrp/__openerp__.py b/addons/mrp/__openerp__.py index d33fa4d2622..3157eee57bc 100644 --- a/addons/mrp/__openerp__.py +++ b/addons/mrp/__openerp__.py @@ -74,13 +74,12 @@ Dashboard / Reports for MRP will include: 'res_config_view.xml', ], 'demo': ['mrp_demo.xml'], - #TODO: This yml tests are needed to be completely reviewed again because the product wood panel is removed in product demo as it does not suit for new demo context of computer and consultant company - # so the ymls are too complex to change at this stage 'test': [ 'test/bom_with_service_type_product.yml', -# 'test/order_demo.yml', -# 'test/order_process.yml', -# 'test/cancel_order.yml', + 'test/mrp_users.yml', + 'test/order_demo.yml', + 'test/order_process.yml', + 'test/cancel_order.yml', ], 'installable': True, 'application': True, diff --git a/addons/mrp/security/ir.model.access.csv b/addons/mrp/security/ir.model.access.csv index 7a94b1a660c..2d0a478c33d 100644 --- a/addons/mrp/security/ir.model.access.csv +++ b/addons/mrp/security/ir.model.access.csv @@ -1,4 +1,5 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_account_analytic_line_user,account.analytic.line,account.model_account_analytic_line,group_mrp_user,1,1,1,0 access_mrp_workcenter,mrp.workcenter,model_mrp_workcenter,mrp.group_mrp_user,1,0,0,0 access_mrp_routing,mrp.routing,model_mrp_routing,mrp.group_mrp_user,1,0,0,0 access_mrp_routing_workcenter,mrp.routing.workcenter,model_mrp_routing_workcenter,mrp.group_mrp_user,1,0,0,0 diff --git a/addons/mrp/security/mrp_security.xml b/addons/mrp/security/mrp_security.xml index 35aae42b53d..9e5dc919720 100644 --- a/addons/mrp/security/mrp_security.xml +++ b/addons/mrp/security/mrp_security.xml @@ -4,6 +4,7 @@ User + diff --git a/addons/mrp/test/cancel_order.yml b/addons/mrp/test/cancel_order.yml index 9e197156b15..2f721b6c653 100644 --- a/addons/mrp/test/cancel_order.yml +++ b/addons/mrp/test/cancel_order.yml @@ -1,3 +1,8 @@ +- + MRP user can cancelled Production Order, so let's check data with giving the access rights of user. +- + !context + uid: 'res_users_mrp_user' - I first confirm order for PC Assemble SC349. - diff --git a/addons/mrp/test/mrp_users.yml b/addons/mrp/test/mrp_users.yml new file mode 100644 index 00000000000..d18cc51e8e6 --- /dev/null +++ b/addons/mrp/test/mrp_users.yml @@ -0,0 +1,20 @@ +- + Create a user as 'MRP Manager' +- + !record {model: res.users, id: res_users_mrp_manager}: + company_id: base.main_company + name: MRP Manager + login: mam + password: mam + groups_id: + - mrp.group_mrp_manager +- + Create a user as 'MRP User' +- + !record {model: res.users, id: res_users_mrp_user}: + company_id: base.main_company + name: MRP User + login: mau + password: mau + groups_id: + - mrp.group_mrp_user diff --git a/addons/mrp/test/order_demo.yml b/addons/mrp/test/order_demo.yml index ee21fee96df..0e4914390fb 100644 --- a/addons/mrp/test/order_demo.yml +++ b/addons/mrp/test/order_demo.yml @@ -1,3 +1,8 @@ +- + MRP user can create Production Order, so let's check data with giving the access rights of user. +- + !context + uid: 'res_users_mrp_user' - I create Production Order of PC Assemble SC349 to produce 5.0 Unit. - diff --git a/addons/mrp/test/order_process.yml b/addons/mrp/test/order_process.yml index e672517c5a0..32eee92bac0 100644 --- a/addons/mrp/test/order_process.yml +++ b/addons/mrp/test/order_process.yml @@ -1,3 +1,8 @@ +- + MRP user can doing all process related to Production Order, so let's check data with giving the access rights of user. +- + !context + uid: 'res_users_mrp_user' - I compute the production order. - From af64d6cc970c1ac64868e05839e4461ea174ab1f Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Fri, 4 Apr 2014 14:36:55 +0200 Subject: [PATCH 43/65] [FIX] changes made at merge time into the trunk - remove offending test bzr revid: ls@numerigraphe.com-20140404123655-9ihrychuho6n6qt2 --- addons/mrp/test/mrp_users.yml | 13 +++++++- addons/mrp/test/order_process.yml | 52 ++++++++++++++++++++----------- 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/addons/mrp/test/mrp_users.yml b/addons/mrp/test/mrp_users.yml index d18cc51e8e6..05c4889cf28 100644 --- a/addons/mrp/test/mrp_users.yml +++ b/addons/mrp/test/mrp_users.yml @@ -6,8 +6,14 @@ name: MRP Manager login: mam password: mam + email: mrp_manager@yourcompany.com +- + I added groups for MRP Manager. +- + !record {model: res.users, id: res_users_mrp_manager}: groups_id: - mrp.group_mrp_manager + - account.group_account_user - Create a user as 'MRP User' - @@ -16,5 +22,10 @@ name: MRP User login: mau password: mau + email: mrp_user@yourcompany.com +- + I added groups for MRP User. +- + !record {model: res.users, id: res_users_mrp_user}: groups_id: - - mrp.group_mrp_user + - mrp.group_mrp_user \ No newline at end of file diff --git a/addons/mrp/test/order_process.yml b/addons/mrp/test/order_process.yml index 32eee92bac0..c4050208570 100644 --- a/addons/mrp/test/order_process.yml +++ b/addons/mrp/test/order_process.yml @@ -1,5 +1,5 @@ - - MRP user can doing all process related to Production Order, so let's check data with giving the access rights of user. + MRP user can doing all process related to Production Order, so let's check data with giving the access rights of user. - !context uid: 'res_users_mrp_user' @@ -19,7 +19,7 @@ Now I check workcenter lines. - !python {model: mrp.production}: | - from tools import float_compare + from openerp.tools import float_compare def assert_equals(value1, value2, msg, float_compare=float_compare): assert float_compare(value1, value2, precision_digits=2) == 0, msg order = self.browse(cr, uid, ref("mrp_production_test1"), context=context) @@ -28,6 +28,7 @@ I confirm the Production Order. - !workflow {model: mrp.production, action: button_confirm, ref: mrp_production_test1} + - I check details of Produce Move of Production Order to trace Final Product. - @@ -63,6 +64,16 @@ assert move_line.product_uos.id == order_line.product_uos.id, "UOS is not correspond in 'To consume line'." assert move_line.location_id.id == routing_loc or order.location_src_id.id, "Source location is not correspond in 'To consume line'." assert move_line.location_dest_id.id == source_location_id, "Destination Location is not correspond in 'To consume line'." +- + I consume raw materials and put one material in scrap location due to waste it. +- + !python {model: mrp.production}: | + scrap_location_ids = self.pool.get('stock.location').search(cr, uid, [('scrap_location','=',True)]) + scrap_location_id = scrap_location_ids[0] + order = self.browse(cr, uid, ref("mrp_production_test1")) + for move in order.move_lines: + if move.product_id.id == ref("product.product_product_6"): + move.action_scrap(5.0, scrap_location_id) - I check details of an Internal Shipment after confirmed production order to bring components in Raw Materials Location. - @@ -99,6 +110,11 @@ procurement_ids = procurement.search(cr, uid, [('move_id','=',move_line.id)]) assert procurement_ids, "Procurement should be created for shipment line of raw materials." shipment_procurement = procurement.browse(cr, uid, procurement_ids[0], context=context) + # procurement state should be `confirmed` at this stage, except if mrp_jit is installed, in which + # case it could already be in `running` or `exception` state (not enough stock) + expected_states = ('confirmed', 'running', 'exception') + assert shipment_procurement.state in expected_states, 'Procurement state is `%s` for %s, expected one of %s' % \ + (shipment_procurement.state, shipment_procurement.product_id.name, expected_states) assert shipment_procurement.date_planned == date_planned, "Planned date is not correspond in procurement." assert shipment_procurement.product_id.id == order_line.product_id.id, "Product is not correspond in procurement." assert shipment_procurement.product_qty == order_line.product_qty, "Qty is not correspond in procurement." @@ -155,17 +171,7 @@ order = self.browse(cr, uid, ref("mrp_production_test1")) assert order.state == 'in_production', 'Production order should be in production State.' - - I consume raw materials and put one material in scrap location due to waste it. -- - !python {model: mrp.production}: | - scrap_location_ids = self.pool.get('stock.location').search(cr, uid, [('scrap_location','=',True)]) - scrap_location_id = scrap_location_ids[0] - order = self.browse(cr, uid, ref("mrp_production_test1")) - for move in order.move_lines: move.action_consume(move.product_qty) - if move.product_id.id == ref("product.product_product_6"): - move.action_scrap(5.0, scrap_location_id) -- I produce product. - !python {model: mrp.product.produce}: | @@ -183,7 +189,10 @@ order = self.browse(cr, uid, ref("mrp_production_test1")) assert order.state == 'done', "Production order should be closed." - - I check Total Costs at End of Production. + I check Total Costs at End of Production as a manager. +- + !context + uid: 'res_users_mrp_manager' - !python {model: mrp.production}: | order = self.browse(cr, uid, ref("mrp_production_test1")) @@ -217,19 +226,26 @@ assert line.product_uom_id.id == wc.product_id.uom_id.id, "UOM is not correspond." - I print a "BOM Structure". +- + !context + uid: 'res_users_mrp_user' - !python {model: mrp.production}: | - import netsvc, tools, os + import os + import openerp.report + from openerp import tools order = self.browse(cr, uid, ref("mrp_production_test1")) - (data, format) = netsvc.LocalService('report.bom.structure').create(cr, uid, [order.bom_id.id], {}, {}) + data, format = openerp.report.render_report(cr, uid, [order.bom_id.id], 'bom.structure', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'mrp-bom_structure_report.'+format), 'wb+').write(data) - I print "Production Order". - !python {model: mrp.production}: | - import netsvc, tools, os - (data, format) = netsvc.LocalService('report.mrp.production.order').create(cr, uid, [ref("mrp_production_test1")], {}, {}) + import os + import openerp.report + from openerp import tools + data, format = openerp.report.render_report(cr, uid, [ref("mrp_production_test1")], 'mrp.production.order', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'mrp-production_order_report.'+format), 'wb+').write(data) - @@ -239,6 +255,6 @@ ctx = context.copy() ctx.update({'model': 'mrp.workcenter','active_ids': [ref('mrp_workcenter_0'),ref('mrp_workcenter_1')]}) data_dict = {'time_unit': 'day', 'measure_unit': 'hours'} - from tools import test_reports + from openerp.tools import test_reports test_reports.try_report_action(cr, uid, 'action_mrp_workcenter_load_wizard',wiz_data=data_dict, context=ctx, our_module='mrp') From a386aea7d3790f15337fc4a55ea14f635bd4ab5e Mon Sep 17 00:00:00 2001 From: Lionel Sausin Date: Fri, 4 Apr 2014 14:40:36 +0200 Subject: [PATCH 44/65] [FIX] revert to v7 report API bzr revid: ls@numerigraphe.com-20140404124036-1vt0fkakfllj1qax --- addons/mrp/test/order_process.yml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/addons/mrp/test/order_process.yml b/addons/mrp/test/order_process.yml index c4050208570..bbafe5b6b27 100644 --- a/addons/mrp/test/order_process.yml +++ b/addons/mrp/test/order_process.yml @@ -231,21 +231,17 @@ uid: 'res_users_mrp_user' - !python {model: mrp.production}: | - import os - import openerp.report - from openerp import tools + import netsvc, tools, os order = self.browse(cr, uid, ref("mrp_production_test1")) - data, format = openerp.report.render_report(cr, uid, [order.bom_id.id], 'bom.structure', {}, {}) + (data, format) = netsvc.LocalService('report.bom.structure').create(cr, uid, [order.bom_id.id], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'mrp-bom_structure_report.'+format), 'wb+').write(data) - I print "Production Order". - !python {model: mrp.production}: | - import os - import openerp.report - from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref("mrp_production_test1")], 'mrp.production.order', {}, {}) + import netsvc, tools, os + (data, format) = netsvc.LocalService('report.mrp.production.order').create(cr, uid, [ref("mrp_production_test1")], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'mrp-production_order_report.'+format), 'wb+').write(data) - @@ -255,6 +251,6 @@ ctx = context.copy() ctx.update({'model': 'mrp.workcenter','active_ids': [ref('mrp_workcenter_0'),ref('mrp_workcenter_1')]}) data_dict = {'time_unit': 'day', 'measure_unit': 'hours'} - from openerp.tools import test_reports + from tools import test_reports test_reports.try_report_action(cr, uid, 'action_mrp_workcenter_load_wizard',wiz_data=data_dict, context=ctx, our_module='mrp') From 1adc0b785a2e1d6020ecc084eb443096eddf58a9 Mon Sep 17 00:00:00 2001 From: "Foram Katharotiya (OpenERP)" Date: Fri, 4 Apr 2014 14:45:18 +0200 Subject: [PATCH 45/65] [IMP] bring back the tests for mrp_operations - backported from little after v7.0 in the trunk lp bug: https://launchpad.net/bugs/1182515 fixed bzr revid: ls@numerigraphe.com-20140404124518-jv77xw4z0ouoaqlz --- addons/mrp_operations/__openerp__.py | 2 +- .../test/workcenter_operations.yml | 24 ++++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/addons/mrp_operations/__openerp__.py b/addons/mrp_operations/__openerp__.py index 7fedb426edd..12d86e0b532 100644 --- a/addons/mrp_operations/__openerp__.py +++ b/addons/mrp_operations/__openerp__.py @@ -70,7 +70,7 @@ So, that we can compare the theoretic delay and real delay. 'mrp_operations_demo.yml' ], 'test': [ -# 'test/workcenter_operations.yml', + 'test/workcenter_operations.yml', ], 'installable': True, 'auto_install': False, diff --git a/addons/mrp_operations/test/workcenter_operations.yml b/addons/mrp_operations/test/workcenter_operations.yml index c1449657967..f402e1cddd4 100644 --- a/addons/mrp_operations/test/workcenter_operations.yml +++ b/addons/mrp_operations/test/workcenter_operations.yml @@ -1,6 +1,24 @@ +- + Create a user as 'MRP User' +- + !record {model: res.users, id: res_mrp_operation_user}: + company_id: base.main_company + name: MRP User + login: maou + password: maou + email: mrp_operation_user@yourcompany.com +- + I added groups for MRP User. +- + !record {model: res.users, id: res_mrp_operation_user}: + groups_id: + - mrp.group_mrp_user - In order to test mrp_operations with OpenERP, I refer created production order of PC Assemble SC349 - with routing - Manual Component's Assembly to test complete production process with respect of workcenter. + with routing - Manual Component's Assembly to test complete production process with respect of workcenter with giving access rights of MRP User. +- + !context + uid: 'res_mrp_operation_user' - I compute the production order. - @@ -106,7 +124,7 @@ I print a Barcode Report of Operation line. - !python {model: mrp_operations.operation.code}: | - import netsvc, tools, os + from openerp import netsvc, tools (data, format) = netsvc.LocalService('report.mrp.code.barcode').create(cr, uid, [ref('mrp_operations.mrp_op_1'),ref('mrp_operations.mrp_op_2'),ref('mrp_operations.mrp_op_3'),ref('mrp_operations.mrp_op_4'),ref('mrp_operations.mrp_op_5')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'mrp_operations-barcode_report.'+format), 'wb+').write(data) @@ -115,7 +133,7 @@ I print Workcenter's Barcode Report. - !python {model: mrp.workcenter}: | - import netsvc, tools, os + from openerp import netsvc, tools (data, format) = netsvc.LocalService('report.mrp.wc.barcode').create(cr, uid, [ref('mrp.mrp_workcenter_0'),ref('mrp.mrp_workcenter_1')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'mrp_operations-workcenter_barcode_report.'+format), 'wb+').write(data) From 5759df7befefc4ca33a779dafa22cef476f88f0f Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Fri, 4 Apr 2014 14:54:50 +0200 Subject: [PATCH 46/65] [FIX] crm_partner_assign: add discussion subtype to interested/disintered messages, so portal users can see it bzr revid: dle@openerp.com-20140404125450-v94rjpuuse9gkibr --- addons/crm_partner_assign/wizard/crm_channel_interested.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/crm_partner_assign/wizard/crm_channel_interested.py b/addons/crm_partner_assign/wizard/crm_channel_interested.py index 87fd5669008..a23de29d766 100644 --- a/addons/crm_partner_assign/wizard/crm_channel_interested.py +++ b/addons/crm_partner_assign/wizard/crm_channel_interested.py @@ -63,7 +63,7 @@ class crm_lead_forward_to_partner(osv.TransientModel): if wizard.comment: message += '

    %s

    ' % wizard.comment for active_id in context.get('active_ids', []): - lead_obj.message_post(cr, uid, active_id, body=message, context=context) + lead_obj.message_post(cr, uid, active_id, body=message, subtype="mail.mt_comment", context=context) if values: lead_obj.write(cr, SUPERUSER_ID, context.get('active_ids', []), values) if wizard.interested: From 3b821e085491f60b986336f64bad0d5699b2707c Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Fri, 4 Apr 2014 15:03:02 +0200 Subject: [PATCH 47/65] [FIX] website_sale_delivery: list pop actually takes as arg the index in the list, not the item (+ check that carrier id is not false) bzr revid: dle@openerp.com-20140404130302-mvm2tzhsc2a58p11 --- addons/website_sale_delivery/models/sale_order.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/addons/website_sale_delivery/models/sale_order.py b/addons/website_sale_delivery/models/sale_order.py index e8b34591940..c6ac851d9d4 100644 --- a/addons/website_sale_delivery/models/sale_order.py +++ b/addons/website_sale_delivery/models/sale_order.py @@ -69,10 +69,12 @@ class SaleOrder(orm.Model): else: carrier_id = force_carrier_id or order.carrier_id.id carrier_ids = self._get_delivery_methods(cr, uid, order, context=context) - if carrier_id not in carrier_ids: - carrier_id = False - else: - carrier_ids.insert(0, carrier_ids.pop(carrier_id)) + if carrier_id: + if carrier_id not in carrier_ids: + carrier_id = False + else: + carrier_ids.remove(carrier_id) + carrier_ids.insert(0, carrier_id) if force_carrier_id or not carrier_id or not carrier_id in carrier_ids: for delivery_id in carrier_ids: grid_id = carrier_obj.grid_get(cr, SUPERUSER_ID, [delivery_id], order.partner_shipping_id.id) From 63b8fe0d337b52a95fc20e99fc06cb862669520e Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Fri, 4 Apr 2014 15:38:27 +0200 Subject: [PATCH 48/65] [FIX] domain parsing: better heuristic when a domain uses a date value for a datetime field This comparison is flawed by nature but can be a useful shortcut sometimes. It was using wrong boundaries and would also loop for operators not explicitly handled by the code (there was no `else` block). It is still not possible to handle time zone conversions properly, so this is only an experimental feature. bzr revid: odo@openerp.com-20140404133827-5owdendpsr083a17 --- openerp/osv/expression.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openerp/osv/expression.py b/openerp/osv/expression.py index c01f4c96ba2..70a28413aeb 100644 --- a/openerp/osv/expression.py +++ b/openerp/osv/expression.py @@ -1012,10 +1012,10 @@ class expression(object): else: if field._type == 'datetime' and right and len(right) == 10: - if operator in ('>', '>=', '='): - right += ' 00:00:00' - elif operator in ('<', '<='): + if operator in ('>', '<='): right += ' 23:59:59' + else: + right += ' 00:00:00' push(create_substitution_leaf(leaf, (left, operator, right), working_model)) elif field.translate and right: From aa0f70f5ae6f58e32ec0f70d6dc9502a898dc094 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Fri, 4 Apr 2014 15:39:58 +0200 Subject: [PATCH 49/65] [FIX] project: do not overwrite start date is specifically set by the user bzr revid: dle@openerp.com-20140404133958-fyw309i5cem11jm1 --- addons/project/project.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/project/project.py b/addons/project/project.py index 12b1569f025..b91c61d5f21 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -1048,7 +1048,7 @@ class task(osv.osv): if vals.get('project_id') and not context.get('default_project_id'): context['default_project_id'] = vals.get('project_id') # user_id change: update date_start - if vals.get('user_id'): + if vals.get('user_id') and not vals.get('start_date'): vals['date_start'] = fields.datetime.now() # context: no_log, because subtype already handle this @@ -1065,7 +1065,7 @@ class task(osv.osv): if 'stage_id' in vals: vals['date_last_stage_update'] = fields.datetime.now() # user_id change: update date_start - if vals.get('user_id'): + if vals.get('user_id') and 'date_start' not in vals: vals['date_start'] = fields.datetime.now() # Overridden to reset the kanban_state to normal whenever From 92266424368ac7d41363ed36a7f1ca5cf58bc970 Mon Sep 17 00:00:00 2001 From: Kersten Jeremy Date: Fri, 4 Apr 2014 15:50:05 +0200 Subject: [PATCH 50/65] [FIX] Ecomm - login to post a comment if not logged bzr revid: jke@openerp.com-20140404135005-4uz7qtzyke58sgy2 --- addons/website_sale/views/website_sale.xml | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/addons/website_sale/views/website_sale.xml b/addons/website_sale/views/website_sale.xml index 350d9acdac0..3a3979c12aa 100644 --- a/addons/website_sale/views/website_sale.xml +++ b/addons/website_sale/views/website_sale.xml @@ -440,14 +440,20 @@
    - - -
    - - Post -
    - + + Log in to post comments + + +
    + +
    + + + Post +
    +
    +
    From bcf36e6deb06a3ae9a5ee4adb3f3b7d148308bef Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Fri, 4 Apr 2014 16:15:59 +0200 Subject: [PATCH 51/65] [IMP] expression: new helper for generating unaccent aware sql queries. Adapt _auto_join tests to use it. bzr revid: chs@openerp.com-20140404141559-d2sn68lruik9hz81 --- openerp/addons/base/tests/test_expression.py | 32 +++++++++++++++---- openerp/osv/expression.py | 33 ++++++++++---------- 2 files changed, 42 insertions(+), 23 deletions(-) diff --git a/openerp/addons/base/tests/test_expression.py b/openerp/addons/base/tests/test_expression.py index 9c0cd01cb5a..a89ae193f5c 100644 --- a/openerp/addons/base/tests/test_expression.py +++ b/openerp/addons/base/tests/test_expression.py @@ -1,4 +1,6 @@ import unittest2 + +from openerp.osv.expression import get_unaccent_wrapper from openerp.osv.orm import BaseModel import openerp.tests.common as common @@ -123,6 +125,7 @@ class test_expression(common.TransactionCase): def test_20_auto_join(self): registry, cr, uid = self.registry, self.cr, self.uid + unaccent = get_unaccent_wrapper(cr) # Get models partner_obj = registry('res.partner') @@ -179,8 +182,11 @@ class test_expression(common.TransactionCase): sql_query = self.query_list[0].get_sql() self.assertIn('res_partner_bank', sql_query[0], "_auto_join off: ('bank_ids.name', 'like', '..') first query incorrect main table") - self.assertIn('"res_partner_bank"."name" like %s', sql_query[1], + + expected = "%s like %s" % (unaccent('"res_partner_bank"."name"'), unaccent('%s')) + self.assertIn(expected, sql_query[1], "_auto_join off: ('bank_ids.name', 'like', '..') first query incorrect where condition") + self.assertEqual(set(['%' + name_test + '%']), set(sql_query[2]), "_auto_join off: ('bank_ids.name', 'like', '..') first query incorrect parameter") sql_query = self.query_list[2].get_sql() @@ -216,8 +222,11 @@ class test_expression(common.TransactionCase): "_auto_join on: ('bank_ids.name', 'like', '..') query incorrect main table") self.assertIn('"res_partner_bank" as "res_partner__bank_ids"', sql_query[0], "_auto_join on: ('bank_ids.name', 'like', '..') query incorrect join") - self.assertIn('"res_partner__bank_ids"."name" like %s', sql_query[1], + + expected = "%s like %s" % (unaccent('"res_partner__bank_ids"."name"'), unaccent('%s')) + self.assertIn(expected, sql_query[1], "_auto_join on: ('bank_ids.name', 'like', '..') query incorrect where condition") + self.assertIn('"res_partner"."id"="res_partner__bank_ids"."partner_id"', sql_query[1], "_auto_join on: ('bank_ids.name', 'like', '..') query incorrect join condition") self.assertEqual(set(['%' + name_test + '%']), set(sql_query[2]), @@ -295,8 +304,11 @@ class test_expression(common.TransactionCase): sql_query = self.query_list[0].get_sql() self.assertIn('"res_country"', sql_query[0], "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect main table") - self.assertIn('"res_country"."code" like %s', sql_query[1], + + expected = "%s like %s" % (unaccent('"res_country"."code"'), unaccent('%s')) + self.assertIn(expected, sql_query[1], "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect where condition") + self.assertEqual(['%' + name_test + '%'], sql_query[2], "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect parameter") sql_query = self.query_list[1].get_sql() @@ -326,8 +338,11 @@ class test_expression(common.TransactionCase): "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect main table") self.assertIn('"res_country" as "res_country_state__country_id"', sql_query[0], "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect join") - self.assertIn('"res_country_state__country_id"."code" like %s', sql_query[1], + + expected = "%s like %s" % (unaccent('"res_country_state__country_id"."code"'), unaccent('%s')) + self.assertIn(expected, sql_query[1], "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect where condition") + self.assertIn('"res_country_state"."country_id"="res_country_state__country_id"."id"', sql_query[1], "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect join condition") self.assertEqual(['%' + name_test + '%'], sql_query[2], @@ -357,8 +372,11 @@ class test_expression(common.TransactionCase): "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect join") self.assertIn('"res_country" as "res_partner__state_id__country_id"', sql_query[0], "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect join") - self.assertIn('"res_partner__state_id__country_id"."code" like %s', sql_query[1], + + expected = "%s like %s" % (unaccent('"res_partner__state_id__country_id"."code"'), unaccent('%s')) + self.assertIn(expected, sql_query[1], "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect where condition") + self.assertIn('"res_partner"."state_id"="res_partner__state_id"."id"', sql_query[1], "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect join condition") self.assertIn('"res_partner__state_id"."country_id"="res_partner__state_id__country_id"."id"', sql_query[1], @@ -384,7 +402,9 @@ class test_expression(common.TransactionCase): "_auto_join on one2many with domains incorrect result") # Test produced queries that domains effectively present sql_query = self.query_list[0].get_sql() - self.assertIn('"res_partner__child_ids__bank_ids"."acc_number" like %s', sql_query[1], + + expected = "%s like %s" % (unaccent('"res_partner__child_ids__bank_ids"."acc_number"'), unaccent('%s')) + self.assertIn(expected, sql_query[1], "_auto_join on one2many with domains incorrect result") # TDE TODO: check first domain has a correct table name self.assertIn('"res_partner__child_ids"."name" = %s', sql_query[1], diff --git a/openerp/osv/expression.py b/openerp/osv/expression.py index 93e28dcccb3..da49ae12850 100644 --- a/openerp/osv/expression.py +++ b/openerp/osv/expression.py @@ -430,6 +430,10 @@ def select_distinct_from_where_not_null(cr, select_field, from_table): cr.execute('SELECT distinct("%s") FROM "%s" where "%s" is not null' % (select_field, from_table, select_field)) return [r[0] for r in cr.fetchall()] +def get_unaccent_wrapper(cr): + if openerp.modules.registry.RegistryManager.get(cr.dbname).has_unaccent: + return lambda x: "unaccent(%s)" % (x,) + return lambda x: x # -------------------------------------------------- # ExtendedLeaf class for managing leafs and contexts @@ -631,7 +635,7 @@ class expression(object): :attr list expression: the domain expression, that will be normalized and prepared """ - self.has_unaccent = openerp.modules.registry.RegistryManager.get(cr.dbname).has_unaccent + self._unaccent = get_unaccent_wrapper(cr) self.joins = [] self.root_model = table @@ -1020,7 +1024,6 @@ class expression(object): push(create_substitution_leaf(leaf, (left, operator, right), working_model)) elif field.translate and right: - field = left need_wildcard = operator in ('like', 'ilike', 'not like', 'not ilike') sql_operator = {'=like': 'like', '=ilike': 'ilike'}.get(operator, operator) if need_wildcard: @@ -1032,16 +1035,13 @@ class expression(object): sql_operator = sql_operator[4:] if sql_operator[:3] == 'not' else '=' inselect_operator = 'not inselect' - trans_left = 'value' - left = '"%s"' % (left,) - instr = '%s' + unaccent = self._unaccent if sql_operator.endswith('like') else lambda x: x - if self.has_unaccent and sql_operator.endswith('like'): - assert isinstance(right, basestring) - trans_left = 'unaccent(value)' - left = 'unaccent(%s)' % (left,) - instr = 'unaccent(%s)' - elif sql_operator == 'in': + trans_left = unaccent('value') + quote_left = unaccent(_quote(left)) + instr = unaccent('%s') + + if sql_operator == 'in': # params will be flatten by to_sql() => expand the placeholders instr = '(%s)' % ', '.join(['%s'] * len(right)) @@ -1057,10 +1057,10 @@ class expression(object): WHERE {left} {operator} {right} ) """.format(trans_left=trans_left, operator=sql_operator, - right=instr, table=working_model._table, left=left) + right=instr, table=working_model._table, left=quote_left) params = ( - working_model._name + ',' + field, + working_model._name + ',' + left, context.get('lang') or 'en_US', 'model', right, @@ -1184,10 +1184,9 @@ class expression(object): if left in model._columns: format = need_wildcard and '%s' or model._columns[left]._symbol_set[0] - if self.has_unaccent and sql_operator.endswith('like'): - query = '(unaccent(%s."%s") %s unaccent(%s))' % (table_alias, left, sql_operator, format) - else: - query = '(%s."%s" %s %s)' % (table_alias, left, sql_operator, format) + unaccent = self._unaccent if sql_operator.endswith('like') else lambda x: x + column = '%s.%s' % (table_alias, _quote(left)) + query = '(%s %s %s)' % (unaccent(column), sql_operator, unaccent(format)) elif left in MAGIC_COLUMNS: query = "(%s.\"%s\" %s %%s)" % (table_alias, left, sql_operator) params = right From 53d8055cd8ad38e0fd135ae58afb713b7c16f48f Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Fri, 4 Apr 2014 16:16:11 +0200 Subject: [PATCH 52/65] [FIX] res.partner: name_search: respect unaccent flag bzr revid: chs@openerp.com-20140404141611-qi1yagltvkd9q8ji --- openerp/addons/base/res/res_partner.py | 36 +++++++++++++++----------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index 5d97311c01d..d43028d68ef 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -29,6 +29,7 @@ import openerp from openerp import SUPERUSER_ID from openerp import pooler, tools from openerp.osv import osv, fields +from openerp.osv.expression import get_unaccent_wrapper from openerp.tools.translate import _ from openerp.tools.yaml_import import is_comment @@ -610,27 +611,32 @@ class res_partner(osv.osv, format_address): if operator in ('=ilike', '=like'): operator = operator[1:] + unaccent = get_unaccent_wrapper(cr) + # TODO: simplify this in trunk with `display_name`, once it is stored # Perf note: a CTE expression (WITH ...) seems to have an even higher cost # than this query with duplicated CASE expressions. The bulk of # the cost is the ORDER BY, and it is inevitable if we want # relevant results for the next step, otherwise we'd return # a random selection of `limit` results. - query = ('''SELECT res_partner.id FROM res_partner - LEFT JOIN res_partner company - ON res_partner.parent_id = company.id''' - + where_str + ''' (res_partner.email ''' + operator + ''' %s OR - CASE - WHEN company.id IS NULL OR res_partner.is_company - THEN res_partner.name - ELSE company.name || ', ' || res_partner.name - END ''' + operator + ''' %s) - ORDER BY - CASE - WHEN company.id IS NULL OR res_partner.is_company - THEN res_partner.name - ELSE company.name || ', ' || res_partner.name - END''') + + display_name = """CASE WHEN company.id IS NULL OR res_partner.is_company + THEN {partner_name} + ELSE {company_name} || ', ' || {partner_name} + END""".format(partner_name=unaccent('res_partner.name'), + company_name=unaccent('company.name')) + + query = """SELECT res_partner.id + FROM res_partner + LEFT JOIN res_partner company + ON res_partner.parent_id = company.id + {where} ({email} {operator} {percent} + OR {display_name} {operator} {percent}) + ORDER BY {display_name} + """.format(where=where_str, operator=operator, + email=unaccent('res_partner.email'), + percent=unaccent('%s'), + display_name=display_name) where_clause_params += [search_name, search_name] if limit: From 4335ff0712e4b7da4f78c708b348c5442aa774da Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Fri, 4 Apr 2014 17:46:58 +0200 Subject: [PATCH 53/65] [FIX] force suppression of pidfile at exit of openerp. [IMP] only write/delete pidfile in non-evented mode [FIX] check if evented mode before checking in worker mode when starting server service bzr revid: chs@openerp.com-20140404154658-6x5rxyq12guej43q --- openerp/cli/server.py | 14 ++++++++------ openerp/service/server.py | 8 ++++---- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/openerp/cli/server.py b/openerp/cli/server.py index eec85756469..0d346f160c4 100644 --- a/openerp/cli/server.py +++ b/openerp/cli/server.py @@ -29,6 +29,7 @@ GNU Public Licence. (c) 2003-TODAY, Fabien Pinckaers - OpenERP SA """ +import atexit import logging import os import signal @@ -78,16 +79,22 @@ def report_configuration(): ('database user', config['db_user'])]: _logger.info("%s: %s", name, value) +def rm_pid_file(): + config = openerp.tools.config + if not openerp.evented and os.path.exists(config['pidfile']): + os.unlink(config['pidfile']) + def setup_pid_file(): """ Create a file with the process id written in it. This function assumes the configuration has been initialized. """ config = openerp.tools.config - if config['pidfile']: + if not openerp.evented and config['pidfile']: with open(config['pidfile'], 'w') as fd: pidtext = "%d" % (os.getpid()) fd.write(pidtext) + atexit.register(rm_pid_file) def preload_registry(dbname): """ Preload a registry, and start the cron.""" @@ -189,14 +196,9 @@ def main(args): if not config["stop_after_init"]: setup_pid_file() openerp.service.server.start() - if config['pidfile']: - os.unlink(config['pidfile']) else: sys.exit(rc) - _logger.info('OpenERP server is running, waiting for connections...') - quit_on_signals() - class Server(Command): def run(self, args): main(args) diff --git a/openerp/service/server.py b/openerp/service/server.py index 6a558a24e91..6a87c85e56b 100644 --- a/openerp/service/server.py +++ b/openerp/service/server.py @@ -429,7 +429,7 @@ class PreforkServer(CommonServer): sys.exit(0) def long_polling_spawn(self): - nargs = stripped_sys_argv('--pidfile','--workers') + nargs = stripped_sys_argv() cmd = nargs[0] cmd = os.path.join(os.path.dirname(cmd), "openerp-gevent") nargs[0] = cmd @@ -814,10 +814,10 @@ def start(): """ global server load_server_wide_modules() - if config['workers']: - server = PreforkServer(openerp.service.wsgi_server.application) - elif openerp.evented: + if openerp.evented: server = GeventServer(openerp.service.wsgi_server.application) + elif config['workers']: + server = PreforkServer(openerp.service.wsgi_server.application) else: server = ThreadedServer(openerp.service.wsgi_server.application) From ec975900def49e06ebed8a92224147f5955912c4 Mon Sep 17 00:00:00 2001 From: Kersten Jeremy Date: Sat, 5 Apr 2014 12:42:54 +0200 Subject: [PATCH 54/65] [FIX] Typo - add missing label for checkbox speaker. bzr revid: jke@openerp.com-20140405104254-2rpf239vb6wvk8hd --- addons/event/res_partner_view.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/event/res_partner_view.xml b/addons/event/res_partner_view.xml index 7e97f80e30d..19eb2517131 100644 --- a/addons/event/res_partner_view.xml +++ b/addons/event/res_partner_view.xml @@ -10,6 +10,7 @@ +
    From f7ea5d00e1d1182794029ec1c9708cbc25de4634 Mon Sep 17 00:00:00 2001 From: Kersten Jeremy Date: Sat, 5 Apr 2014 14:53:20 +0200 Subject: [PATCH 55/65] [FIX] base_vat : improve log when a vat code is not valid to display which code is wrong in constraint message. bzr revid: jke@openerp.com-20140405125320-ps1atos24yyc2uwj --- addons/base_vat/base_vat.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/base_vat/base_vat.py b/addons/base_vat/base_vat.py index e9ecf70b39b..9b3862508b0 100644 --- a/addons/base_vat/base_vat.py +++ b/addons/base_vat/base_vat.py @@ -126,6 +126,7 @@ class res_partner(osv.osv): continue vat_country, vat_number = self._split_vat(partner.vat) if not check_func(cr, uid, vat_country, vat_number, context=context): + _logger.info(_("Importing VAT Number [%s] is not valid !" % vat_number)) return False return True @@ -149,7 +150,9 @@ class res_partner(osv.osv): vat_no = "'CC##' (CC=Country Code, ##=VAT Number)" if default_vat_check(vat_country, vat_number): vat_no = _ref_vat[vat_country] if vat_country in _ref_vat else vat_no - return '\n' + _('This VAT number does not seem to be valid.\nNote: the expected format is %s') % vat_no + #Retrieve the current partner for wich the VAT is not valid + error_partner = self.browse(cr, uid, ids, context=context) + return '\n' + _('The VAT number [%s] for partner [%s] does not seem to be valid. \nNote: the expected format is %s') % (error_partner[0].vat, error_partner[0].name, vat_no) _constraints = [(check_vat, _construct_constraint_msg, ["vat"])] From bb8560f779459dc9231f0091cf88d05b01f959cc Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Mon, 7 Apr 2014 06:53:16 +0000 Subject: [PATCH 56/65] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20140405061904-60l019fp9qbl890t bzr revid: launchpad_translations_on_behalf_of_openerp-20140406065319-1cr9ypow2w870fbo bzr revid: launchpad_translations_on_behalf_of_openerp-20140407065316-8z3pm4a79uff45z5 --- addons/account/i18n/de.po | 12 +- addons/account/i18n/nl.po | 8 +- addons/account/i18n/sl.po | 8 +- addons/account_budget/i18n/de.po | 26 +- addons/account_followup/i18n/de.po | 10 +- addons/account_payment/i18n/de.po | 10 +- addons/account_voucher/i18n/de.po | 12 +- .../analytic_contract_hr_expense/i18n/de.po | 8 +- addons/analytic_user_function/i18n/hr.po | 26 +- addons/email_template/i18n/de.po | 10 +- addons/hr/i18n/am.po | 8 +- addons/hr/i18n/sv.po | 2 +- addons/hr_attendance/i18n/sv.po | 2 +- addons/hr_expense/i18n/de.po | 13 +- addons/hr_expense/i18n/es.po | 10 +- addons/hr_expense/i18n/sv.po | 2 +- addons/hr_recruitment/i18n/sv.po | 88 ++++-- addons/l10n_be/i18n/nl_BE.po | 273 +++++++++--------- addons/purchase/i18n/ar.po | 10 +- 19 files changed, 303 insertions(+), 235 deletions(-) diff --git a/addons/account/i18n/de.po b/addons/account/i18n/de.po index 861b0ae2929..1af16cc0eec 100644 --- a/addons/account/i18n/de.po +++ b/addons/account/i18n/de.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-14 22:29+0000\n" -"PO-Revision-Date: 2014-01-25 11:32+0000\n" -"Last-Translator: Ralf Hilgenstock \n" +"PO-Revision-Date: 2014-04-05 20:42+0000\n" +"Last-Translator: Rudolf Schnapka \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-26 05:15+0000\n" -"X-Generator: Launchpad (build 16914)\n" +"X-Launchpad-Export-Date: 2014-04-06 06:52+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -2165,7 +2165,7 @@ msgstr "Rechnung bestätigt" #. module: account #: field:account.config.settings,module_account_check_writing:0 msgid "Pay your suppliers by check" -msgstr "" +msgstr "Lieferantenzahlung per Scheck" #. module: account #: field:account.move.line.reconcile,credit:0 @@ -10850,7 +10850,7 @@ msgstr "" #. module: account #: field:account.bank.statement.line,name:0 msgid "OBI" -msgstr "" +msgstr "Zweck" #. module: account #: help:res.partner,property_account_payable:0 diff --git a/addons/account/i18n/nl.po b/addons/account/i18n/nl.po index ed8418b88ee..2ef093ec17e 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-06-14 22:29+0000\n" -"PO-Revision-Date: 2014-03-30 11:13+0000\n" +"PO-Revision-Date: 2014-04-05 08:09+0000\n" "Last-Translator: Erwin van der Ploeg (BAS 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: 2014-03-31 06:39+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-06 06:52+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -5062,7 +5062,7 @@ msgstr "Rek. type" #. module: account #: selection:account.journal,type:0 msgid "Bank and Checks" -msgstr "Bank en Giro." +msgstr "Bank en Giro" #. module: account #: field:account.account.template,note:0 diff --git a/addons/account/i18n/sl.po b/addons/account/i18n/sl.po index 5aa3cf8f9c8..540bcb7c74c 100644 --- a/addons/account/i18n/sl.po +++ b/addons/account/i18n/sl.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-14 22:29+0000\n" -"PO-Revision-Date: 2013-12-07 07:36+0000\n" +"PO-Revision-Date: 2014-04-04 11:12+0000\n" "Last-Translator: Dušan Laznik (Mentis) \n" "Language-Team: Slovenian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-12-08 05:46+0000\n" -"X-Generator: Launchpad (build 16869)\n" +"X-Launchpad-Export-Date: 2014-04-05 06:18+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -4884,7 +4884,7 @@ msgstr "Zaključek poslovnega leta" #. module: account #: selection:account.move.line,state:0 msgid "Balanced" -msgstr "Uklajeno" +msgstr "Usklajeno" #. module: account #: model:process.node,note:account.process_node_importinvoice0 diff --git a/addons/account_budget/i18n/de.po b/addons/account_budget/i18n/de.po index 08bf459b6e7..82f184be2d3 100644 --- a/addons/account_budget/i18n/de.po +++ b/addons/account_budget/i18n/de.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-01-25 15:28+0000\n" -"Last-Translator: Ralf Hilgenstock \n" +"PO-Revision-Date: 2014-04-05 21:37+0000\n" +"Last-Translator: Rudolf Schnapka \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-26 05:15+0000\n" -"X-Generator: Launchpad (build 16914)\n" +"X-Launchpad-Export-Date: 2014-04-06 06:52+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: account_budget #: view:account.budget.analytic:0 @@ -147,6 +147,24 @@ msgid "" "

    \n" " " msgstr "" +"

    \n" +" Klicken um neues Budget festzusetzen.\n" +"

    \n" +" Ein Budget ist eine Vorhersage über erwartete Einnahmen und/ \n" +" oder Ausgaben des Unternehmens in einem zukünftigen \n" +" Zeitraum. Ein Budget wird für bestimmte Finanzkonten oder \n" +" Kostenstellen festgelegt.\n" +" (Kostenstellen können Projekte, Abteilungen, Warengruppen, etc. \n" +" repräsentieren.)\n" +"

    \n" +" Durch das Nachverfolgen Ihres Geldes, ist eine übermäßige\n" +" Belastung unwahrscheinlicher und die Erreichung Ihrer\n" +" finanziellen Ziele wahrscheinlicher. Legen Sie Ihre Budgets \n" +" durch Abschätzung der Erlöse je Kostenstelle fest und\n" +" überwachen Sie die Entwicklung an Hand der Ist-Zahlen\n" +" der entsprechenden Periode.\n" +"

    \n" +" " #. module: account_budget #: report:account.budget:0 diff --git a/addons/account_followup/i18n/de.po b/addons/account_followup/i18n/de.po index 7398a3c4334..a32ede49919 100644 --- a/addons/account_followup/i18n/de.po +++ b/addons/account_followup/i18n/de.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-01-25 15:54+0000\n" +"PO-Revision-Date: 2014-04-05 21:40+0000\n" "Last-Translator: Ralf Hilgenstock \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-26 05:15+0000\n" -"X-Generator: Launchpad (build 16914)\n" +"X-Launchpad-Export-Date: 2014-04-06 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: account_followup #: model:email.template,subject:account_followup.email_template_account_followup_default @@ -901,7 +901,7 @@ msgstr "Letzte Mahnung" #. module: account_followup #: view:account_followup.sending.results:0 msgid "Download Letters" -msgstr "Herunterladen Abschreiben" +msgstr "Schreiben herunterladen" #. module: account_followup #: field:account_followup.print,company_id:0 @@ -986,7 +986,7 @@ msgstr "E-Mail senden" #. module: account_followup #: field:account_followup.stat,credit:0 msgid "Credit" -msgstr "Punkte" +msgstr "Kredit" #. module: account_followup #: field:res.partner,payment_amount_overdue:0 diff --git a/addons/account_payment/i18n/de.po b/addons/account_payment/i18n/de.po index 79ec3aa35f2..f0261cd72b9 100644 --- a/addons/account_payment/i18n/de.po +++ b/addons/account_payment/i18n/de.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-01-25 16:16+0000\n" +"PO-Revision-Date: 2014-04-05 21:42+0000\n" "Last-Translator: Ralf Hilgenstock \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-26 05:15+0000\n" -"X-Generator: Launchpad (build 16914)\n" +"X-Launchpad-Export-Date: 2014-04-06 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: account_payment #: model:ir.actions.act_window,help:account_payment.action_payment_order_tree @@ -305,7 +305,7 @@ msgstr "Erzeugt" #. module: account_payment #: view:payment.order:0 msgid "Select Invoices to Pay" -msgstr "Wähle Rechnungen" +msgstr "Rechnungen zur Zahlung wählen" #. module: account_payment #: view:payment.line:0 @@ -320,7 +320,7 @@ msgstr "Zahlungsvorschlag verbuchen" #. module: account_payment #: field:payment.line,state:0 msgid "Communication Type" -msgstr "Betreffzeile Empfänger" +msgstr "Kommunikationsart" #. module: account_payment #: field:payment.line,partner_id:0 diff --git a/addons/account_voucher/i18n/de.po b/addons/account_voucher/i18n/de.po index a0450200c49..d95bc7ad97b 100644 --- a/addons/account_voucher/i18n/de.po +++ b/addons/account_voucher/i18n/de.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-01-27 06:29+0000\n" -"Last-Translator: Ralf Hilgenstock \n" +"PO-Revision-Date: 2014-04-05 21:45+0000\n" +"Last-Translator: Rudolf Schnapka \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-28 07:02+0000\n" -"X-Generator: Launchpad (build 16914)\n" +"X-Launchpad-Export-Date: 2014-04-06 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: account_voucher #: field:account.bank.statement.line,voucher_id:0 @@ -123,7 +123,9 @@ msgstr "Zuordnung" msgid "" "This sentence helps you to know how to specify the payment rate by giving " "you the direct effect it has" -msgstr "Dieser Satz hilft dabei, die spezifische Payment Rate festzulegen." +msgstr "" +"Dieser Satz hilft dabei, die richtige Zahlweise auszuwählen, indem die " +"Auswirkung direkt dargestellt wird." #. module: account_voucher #: view:sale.receipt.report:0 diff --git a/addons/analytic_contract_hr_expense/i18n/de.po b/addons/analytic_contract_hr_expense/i18n/de.po index f53eca6e932..b16dee1b812 100644 --- a/addons/analytic_contract_hr_expense/i18n/de.po +++ b/addons/analytic_contract_hr_expense/i18n/de.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-01-26 16:25+0000\n" +"PO-Revision-Date: 2014-04-05 21:49+0000\n" "Last-Translator: Ralf Hilgenstock \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-27 05:45+0000\n" -"X-Generator: Launchpad (build 16914)\n" +"X-Launchpad-Export-Date: 2014-04-06 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: analytic_contract_hr_expense #: view:account.analytic.account:0 @@ -63,7 +63,7 @@ msgstr "Spesen Abrechnung zu %s" #: code:addons/analytic_contract_hr_expense/analytic_contract_hr_expense.py:136 #, python-format msgid "Expenses of %s" -msgstr "Spesen zu %s" +msgstr "Spesen von %s" #. module: analytic_contract_hr_expense #: view:account.analytic.account:0 diff --git a/addons/analytic_user_function/i18n/hr.po b/addons/analytic_user_function/i18n/hr.po index e0c6936c940..a91348289fd 100644 --- a/addons/analytic_user_function/i18n/hr.po +++ b/addons/analytic_user_function/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-06-07 19:36+0000\n" -"PO-Revision-Date: 2012-12-21 23:00+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2014-04-04 17:23+0000\n" +"Last-Translator: Davor Bojkić \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-11-21 06:00+0000\n" -"X-Generator: Launchpad (build 16831)\n" +"X-Launchpad-Export-Date: 2014-04-05 06:18+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: analytic_user_function #: model:ir.model,name:analytic_user_function.model_account_analytic_line msgid "Analytic Line" -msgstr "" +msgstr "Stavka analitike" #. module: analytic_user_function #: view:account.analytic.account:0 @@ -30,7 +30,7 @@ msgstr "" #. module: analytic_user_function #: field:analytic.user.funct.grid,product_id:0 msgid "Service" -msgstr "" +msgstr "Usluga" #. module: analytic_user_function #: model:ir.model,name:analytic_user_function.model_analytic_user_funct_grid @@ -40,30 +40,30 @@ msgstr "" #. module: analytic_user_function #: field:analytic.user.funct.grid,price:0 msgid "Price" -msgstr "" +msgstr "Cijena" #. module: analytic_user_function #: help:analytic.user.funct.grid,price:0 msgid "Price per hour for this user." -msgstr "" +msgstr "Cijena po satu za ovog korisnika" #. module: analytic_user_function #: field:analytic.user.funct.grid,account_id:0 #: model:ir.model,name:analytic_user_function.model_account_analytic_account msgid "Analytic Account" -msgstr "Analitički Konto" +msgstr "Konto analitike" #. module: analytic_user_function #: code:addons/analytic_user_function/analytic_user_function.py:106 #: code:addons/analytic_user_function/analytic_user_function.py:135 #, python-format msgid "Error!" -msgstr "" +msgstr "Greška!" #. module: analytic_user_function #: view:analytic.user.funct.grid:0 msgid "Invoicing Data" -msgstr "" +msgstr "Podaci računa" #. module: analytic_user_function #: field:account.analytic.account,user_product_ids:0 @@ -83,7 +83,7 @@ msgstr "" #. module: analytic_user_function #: field:analytic.user.funct.grid,uom_id:0 msgid "Unit of Measure" -msgstr "" +msgstr "Jedinica mjere" #. module: analytic_user_function #: code:addons/analytic_user_function/analytic_user_function.py:107 @@ -95,7 +95,7 @@ msgstr "nije definiran konto troška za ovaj proizvod: \"%s\" (id:%d)" #. module: analytic_user_function #: model:ir.model,name:analytic_user_function.model_hr_analytic_timesheet msgid "Timesheet Line" -msgstr "" +msgstr "Stavka evidencije rada" #. module: analytic_user_function #: view:account.analytic.account:0 diff --git a/addons/email_template/i18n/de.po b/addons/email_template/i18n/de.po index 68a052c34b0..d774f5d0f27 100644 --- a/addons/email_template/i18n/de.po +++ b/addons/email_template/i18n/de.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:37+0000\n" -"PO-Revision-Date: 2014-01-25 17:53+0000\n" -"Last-Translator: Ralf Hilgenstock \n" +"PO-Revision-Date: 2014-04-05 22:03+0000\n" +"Last-Translator: Rudolf Schnapka \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-26 05:15+0000\n" -"X-Generator: Launchpad (build 16914)\n" +"X-Launchpad-Export-Date: 2014-04-06 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: email_template #: field:email.template,email_from:0 @@ -494,7 +494,7 @@ msgstr "" #. module: email_template #: view:res.partner:0 msgid "Suppliers" -msgstr "" +msgstr "Lieferanten" #. module: email_template #: field:email.template,user_signature:0 diff --git a/addons/hr/i18n/am.po b/addons/hr/i18n/am.po index eca04d8af75..ef3a8d4cd65 100644 --- a/addons/hr/i18n/am.po +++ b/addons/hr/i18n/am.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-04-01 09:20+0000\n" +"PO-Revision-Date: 2014-04-05 07:23+0000\n" "Last-Translator: biniyam \n" "Language-Team: Amharic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-02 06:44+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-06 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: hr #: model:process.node,name:hr.process_node_openerpuser0 @@ -522,7 +522,7 @@ msgstr "ተመሳሳይ ሰራተኞች" #. module: hr #: field:hr.config.settings,module_hr_holidays:0 msgid "Manage holidays, leaves and allocation requests" -msgstr "የባእልና ያረፍት ቀኖችን መቆጣጠር" +msgstr "የባዕልና የረፍት ቀኖች መቆጣጠር" #. module: hr #: field:hr.department,child_ids:0 diff --git a/addons/hr/i18n/sv.po b/addons/hr/i18n/sv.po index baa00de4231..54fd74a5609 100644 --- a/addons/hr/i18n/sv.po +++ b/addons/hr/i18n/sv.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Launchpad-Export-Date: 2014-04-05 06:18+0000\n" "X-Generator: Launchpad (build 16976)\n" #. module: hr diff --git a/addons/hr_attendance/i18n/sv.po b/addons/hr_attendance/i18n/sv.po index 3d4c87f2592..0d2c92066b9 100644 --- a/addons/hr_attendance/i18n/sv.po +++ b/addons/hr_attendance/i18n/sv.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Launchpad-Export-Date: 2014-04-05 06:18+0000\n" "X-Generator: Launchpad (build 16976)\n" #. module: hr_attendance diff --git a/addons/hr_expense/i18n/de.po b/addons/hr_expense/i18n/de.po index c21193bdb3b..18b400da9ff 100644 --- a/addons/hr_expense/i18n/de.po +++ b/addons/hr_expense/i18n/de.po @@ -8,15 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2013-01-06 21:00+0000\n" -"Last-Translator: Thorsten Vocks (OpenBig.org) \n" +"PO-Revision-Date: 2014-04-05 22:16+0000\n" +"Last-Translator: Rudolf Schnapka \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-11-21 06:11+0000\n" -"X-Generator: Launchpad (build 16831)\n" +"X-Launchpad-Export-Date: 2014-04-06 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: hr_expense #: view:hr.expense.expense:0 @@ -559,7 +558,7 @@ msgstr "Entwurf" #. module: hr_expense #: selection:hr.expense.expense,state:0 msgid "Paid" -msgstr "" +msgstr "Bezahlt" #. module: hr_expense #: code:addons/hr_expense/hr_expense.py:353 @@ -695,7 +694,7 @@ msgstr "Zusammenfassung" #. module: hr_expense #: model:ir.model,name:hr_expense.model_account_move_line msgid "Journal Items" -msgstr "" +msgstr "Journalbuchungen" #. module: hr_expense #: model:product.template,name:hr_expense.car_travel_product_template diff --git a/addons/hr_expense/i18n/es.po b/addons/hr_expense/i18n/es.po index 4917edcc801..6980b0145f8 100644 --- a/addons/hr_expense/i18n/es.po +++ b/addons/hr_expense/i18n/es.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2013-06-18 07:37+0000\n" +"PO-Revision-Date: 2014-04-04 18:02+0000\n" "Last-Translator: Pedro Manuel Baeza \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-11-21 06:11+0000\n" -"X-Generator: Launchpad (build 16831)\n" +"X-Launchpad-Export-Date: 2014-04-05 06:18+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: hr_expense #: view:hr.expense.expense:0 @@ -201,7 +201,7 @@ msgstr "" #. module: hr_expense #: view:hr.expense.expense:0 msgid "Open Accounting Entries" -msgstr "Apuntes abiertos" +msgstr "Abrir asiento contable" #. module: hr_expense #: help:hr.expense.expense,message_unread:0 @@ -943,7 +943,7 @@ msgstr "¡Sólo puede borrar gastos en borrador!" #. module: hr_expense #: field:hr.expense.expense,account_move_id:0 msgid "Ledger Posting" -msgstr "Fijado libro contable" +msgstr "Asiento contable" #. module: hr_expense #: model:process.transition,note:hr_expense.process_transition_approveinvoice0 diff --git a/addons/hr_expense/i18n/sv.po b/addons/hr_expense/i18n/sv.po index c3647221266..92f25fb5d77 100644 --- a/addons/hr_expense/i18n/sv.po +++ b/addons/hr_expense/i18n/sv.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Launchpad-Export-Date: 2014-04-05 06:18+0000\n" "X-Generator: Launchpad (build 16976)\n" #. module: hr_expense diff --git a/addons/hr_recruitment/i18n/sv.po b/addons/hr_recruitment/i18n/sv.po index 29b4c002738..42e24232510 100644 --- a/addons/hr_recruitment/i18n/sv.po +++ b/addons/hr_recruitment/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-03-31 16:41+0000\n" +"PO-Revision-Date: 2014-04-04 08:45+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-01 06:52+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-05 06:18+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: hr_recruitment #: help:hr.applicant,active:0 @@ -35,12 +35,12 @@ msgstr "Krav" #. module: hr_recruitment #: view:hr.applicant:0 msgid "Application Summary" -msgstr "" +msgstr "Summering av ansökningar" #. module: hr_recruitment #: view:hr.applicant:0 msgid "Start Interview" -msgstr "" +msgstr "Starta intervju" #. module: hr_recruitment #: view:hr.applicant:0 @@ -53,6 +53,8 @@ msgid "" "This stage is not visible, for example in status bar or kanban view, when " "there are no records in that stage to display." msgstr "" +"Denna etapp är inte synlig, t.ex. i statusfältet eller kanbanvyn, i de fall " +"etappen saknar poster." #. module: hr_recruitment #: model:hr.recruitment.degree,name:hr_recruitment.degree_graduate @@ -95,7 +97,7 @@ msgstr "Jobb" #. module: hr_recruitment #: view:hr.applicant:0 msgid "Extra advantages..." -msgstr "" +msgstr "Extra förmåner..." #. module: hr_recruitment #: view:hr.applicant:0 @@ -159,6 +161,22 @@ msgid "" "

    \n" " " msgstr "" +"

    \n" +" Klicka för att lägga till en ny jobbsökande.\n" +" \n" +" OpenERP hjälper dig att spåra de sökande i " +"rekryteringsprocessen\n" +" och följa upp all verksamhet: möten, intervjuer etc.\n" +"

    \n" +" Om du ställer in den e-postbrygga sökande och deras " +"bifogade\n" +" CV skapas automatiskt när en e-post skickas till\n" +" jobs@yourcompany.com. Om du installerar dokumenthantering\n" +" moduler är alla meritförteckningar automatiskt indexerade, " +"så att du kan\n" +" enkelt söka igenom deras innehåll.\n" +"

    \n" +" " #. module: hr_recruitment #: model:ir.actions.act_window,name:hr_recruitment.crm_case_categ0_act_job @@ -179,7 +197,7 @@ msgstr "anställd" #. module: hr_recruitment #: field:hr.config.settings,fetchmail_applicants:0 msgid "Create applicants from an incoming email account" -msgstr "" +msgstr "Skapa en ansökan från inkommande e-post" #. module: hr_recruitment #: view:hr.recruitment.report:0 @@ -351,7 +369,7 @@ msgstr "Rekryteringsstatistik" #. module: hr_recruitment #: view:hr.applicant:0 msgid "Print interview report" -msgstr "" +msgstr "Skriv ut intervjurapport" #. module: hr_recruitment #: view:hr.recruitment.report:0 @@ -408,6 +426,16 @@ msgid "" "

    \n" " " msgstr "" +"

    \n" +" Klicka för att lägga till en ny fas i rekryteringsprocessen.\n" +"

    \n" +" Här definierar du dina etapper i rekryteringsprocessen, till " +"exempel:\n" +" kvalificeringssamtal, första intervjun, andra intervju, " +"avslag,\n" +" anställd.\n" +"

    \n" +" " #. module: hr_recruitment #: view:hr.recruitment.report:0 @@ -547,6 +575,9 @@ msgid "" "the case needs to be reviewed then the status is set " "to 'Pending'." msgstr "" +"Statusen är satt till \"Utkast\", när ett ärende skapas. Om ärendet pågår är " +"status inställd på \"Öppna\". När fallet är över, sätts status till " +"\"Klar\". Om ärendet måste granskas är status \"Väntar\"." #. module: hr_recruitment #: selection:hr.recruitment.report,month:0 @@ -578,12 +609,12 @@ msgstr "Pågående" #. module: hr_recruitment #: view:hr.applicant:0 msgid "Hire & Create Employee" -msgstr "" +msgstr "Anställ och skapa medarbetare" #. module: hr_recruitment #: model:mail.message.subtype,description:hr_recruitment.mt_applicant_hired msgid "Applicant hired" -msgstr "" +msgstr "Sökande anställd" #. module: hr_recruitment #: view:hr.applicant:0 @@ -624,12 +655,12 @@ msgstr "Etiketter" #. module: hr_recruitment #: model:ir.model,name:hr_recruitment.model_hr_applicant_category msgid "Category of applicant" -msgstr "" +msgstr "Sökandekategori" #. module: hr_recruitment #: view:hr.applicant:0 msgid "e.g. Call for interview" -msgstr "" +msgstr "eg Kalla till intervju" #. module: hr_recruitment #: view:hr.recruitment.report:0 @@ -672,7 +703,7 @@ msgstr "eller" #. module: hr_recruitment #: model:mail.message.subtype,name:hr_recruitment.mt_applicant_refused msgid "Applicant Refused" -msgstr "" +msgstr "Sökande avslagen" #. module: hr_recruitment #: view:hr.applicant:0 @@ -782,7 +813,7 @@ msgstr "" #: code:addons/hr_recruitment/hr_recruitment.py:397 #, python-format msgid "Applicant created" -msgstr "" +msgstr "Sökande skapad" #. module: hr_recruitment #: view:hr.applicant:0 @@ -812,7 +843,7 @@ msgstr "Dagar i behandling" #. module: hr_recruitment #: field:hr.applicant,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "Är en följare" #. module: hr_recruitment #: field:hr.recruitment.report,user_id:0 @@ -834,7 +865,7 @@ msgstr "Aktiva" #: view:hr.recruitment.report:0 #: field:hr.recruitment.report,nbr:0 msgid "# of Applications" -msgstr "" +msgstr "# sökanden" #. module: hr_recruitment #: model:ir.actions.act_window,help:hr_recruitment.hr_recruitment_stage_act @@ -848,6 +879,13 @@ msgid "" "

    \n" " " msgstr "" +"

    \n" +" Klicka för att lägga till en ny etapp i rekryteringsprocessen.\n" +"

    \n" +" Glöm inte att ange vilken avdelning om din rekryteringsprocess\n" +" skiljer sig beroende på befattning.\n" +"

    \n" +" " #. module: hr_recruitment #: field:hr.applicant,response:0 @@ -878,7 +916,7 @@ msgstr "januari" #: code:addons/hr_recruitment/wizard/hr_recruitment_create_partner_job.py:56 #, python-format msgid "A contact is already existing with the same name." -msgstr "" +msgstr "Kontakt med samma namn finns redan" #. module: hr_recruitment #: model:ir.actions.act_window,name:hr_recruitment.hr_recruitment_stage_form_installer @@ -1025,7 +1063,7 @@ msgstr "LinkedIn" #. module: hr_recruitment #: model:mail.message.subtype,name:hr_recruitment.mt_job_new_applicant msgid "New Applicant" -msgstr "" +msgstr "Ny sökande" #. module: hr_recruitment #: model:ir.model,name:hr_recruitment.model_hr_recruitment_stage @@ -1070,7 +1108,7 @@ msgstr "Beskrivning" #. module: hr_recruitment #: model:mail.message.subtype,name:hr_recruitment.mt_stage_changed msgid "Stage Changed" -msgstr "" +msgstr "Etapp ändrad" #. module: hr_recruitment #: selection:hr.recruitment.report,month:0 @@ -1125,7 +1163,7 @@ msgstr "Hänvisad av" #. module: hr_recruitment #: view:hr.applicant:0 msgid "Departement:" -msgstr "" +msgstr "Avdelning:" #. module: hr_recruitment #: selection:hr.applicant,priority:0 @@ -1141,7 +1179,7 @@ msgstr "Första intervjuen" #. module: hr_recruitment #: field:hr.recruitment.report,salary_prop_avg:0 msgid "Avg. Proposed Salary" -msgstr "" +msgstr "Erbjuden lön i medeltal" #. module: hr_recruitment #: view:hr.applicant:0 @@ -1199,7 +1237,7 @@ msgstr "Alias" #. module: hr_recruitment #: view:hr.applicant:0 msgid "Feedback of interviews..." -msgstr "" +msgstr "Återkoppling från intervjuer..." #. module: hr_recruitment #: view:hr.recruitment.report:0 @@ -1224,7 +1262,7 @@ msgstr "Meddelande- och kommunikationshistorik" #. module: hr_recruitment #: model:mail.message.subtype,description:hr_recruitment.mt_applicant_refused msgid "Applicant refused" -msgstr "" +msgstr "Ansökan avslagen" #. module: hr_recruitment #: field:hr.recruitment.stage,department_id:0 @@ -1255,7 +1293,7 @@ msgstr "Icke tilldelade rekryteringar" #. module: hr_recruitment #: model:ir.model,name:hr_recruitment.model_hr_config_settings msgid "hr.config.settings" -msgstr "" +msgstr "hr.config.settings" #. module: hr_recruitment #: help:hr.recruitment.stage,state:0 @@ -1289,4 +1327,4 @@ msgstr "" #. module: hr_recruitment #: view:hr.applicant:0 msgid "Schedule Interview" -msgstr "" +msgstr "Planerad intervju" diff --git a/addons/l10n_be/i18n/nl_BE.po b/addons/l10n_be/i18n/nl_BE.po index f9200a32c6c..bff7c4560a6 100644 --- a/addons/l10n_be/i18n/nl_BE.po +++ b/addons/l10n_be/i18n/nl_BE.po @@ -8,34 +8,34 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-24 02:53+0000\n" -"PO-Revision-Date: 2012-12-21 23:00+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2014-04-04 16:52+0000\n" +"Last-Translator: Els Van Vossel (Foxy) \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-11-21 06:15+0000\n" -"X-Generator: Launchpad (build 16831)\n" +"X-Launchpad-Export-Date: 2014-04-05 06:18+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_appro_mbsd3 msgid "Approvisionnements, marchandises, services et biens divers" -msgstr "" +msgstr "Handelsgoederen, grond- en hulpstoffen, diensten en diverse goederen" #. module: l10n_be #: field:vat.listing.clients,turnover:0 msgid "Base Amount" -msgstr "" +msgstr "Grondslag" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_rmunrationschargessocialesetpensions2 msgid "Rémunérations, charges sociales et pensions" -msgstr "" +msgstr "Bezoldigingen, sociale lasten en pensioenen" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_locationfinancementetdroitssimilaires2 msgid "Location-financement et droits similaires" -msgstr "" +msgstr "Leasing en soortgelijke rechten" #. module: l10n_be #: field:l1on_be.vat.declaration,tax_code_id:0 @@ -45,12 +45,12 @@ msgstr "Btw-code" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_produitsetchargesdexploitation1 msgid "Produits et charges d'exploitation" -msgstr "" +msgstr "Bedrijfsopbrengsten en bedrijfskosten" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_chargesfinancires1 msgid "Charges financières" -msgstr "" +msgstr "Financiële kosten" #. module: l10n_be #: view:l1on_be.vat.declaration:0 @@ -60,33 +60,33 @@ msgstr "" #: view:partner.vat.list:0 #: field:partner.vat.list,comments:0 msgid "Comments" -msgstr "" +msgstr "Opmerkingen" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_primesdmission2 msgid "Primes d'émission" -msgstr "" +msgstr "Uitgiftepremies" #. module: l10n_be #: model:ir.actions.act_window,name:l10n_be.action_account_report_be_pl msgid "Comptes de Charges" -msgstr "" +msgstr "Kostenrekeningen" #. module: l10n_be #: help:l1on_be.vat.declaration,ask_payment:0 msgid "It indicates whether a payment is to make or not?" -msgstr "" +msgstr "Duidt aan of er een betaling moet worden uitgevoerd." #. module: l10n_be #: model:ir.model,name:l10n_be.model_vat_listing_clients msgid "vat.listing.clients" -msgstr "" +msgstr "Klantenlisting" #. module: l10n_be #: model:ir.model,name:l10n_be.model_partner_vat_intra #: model:ir.ui.menu,name:l10n_be.l10_be_vat_intra msgid "Partner VAT Intra" -msgstr "Intracommunautaire opgave" +msgstr "Intracommunautaire aangifte" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_ammo2 @@ -94,16 +94,18 @@ msgid "" "Amortissements et réductions de valeur sur frais d'établissement, sur " "immobilisations incorporelles et corporelles" msgstr "" +"Afschrijvingen en waardeverminderingen op oprichtingskosten, op immateriële " +"en materiële vaste activa" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_prlvementssurlesimptsdiffrs1 msgid "Prélèvements sur les impôts différés" -msgstr "" +msgstr "Onttrekking aan de uitgestelde belastingen" #. module: l10n_be #: model:ir.ui.menu,name:l10n_be.menu_account_report_be_bs msgid "Balance Sheet" -msgstr "" +msgstr "Balans" #. module: l10n_be #: view:l1on_be.vat.declaration:0 @@ -115,33 +117,33 @@ msgstr "Bedrijf" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_immobilisationsincorporelles1 msgid "Immobilisations incorporelles" -msgstr "" +msgstr "Immateriële vaste activa" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_rservesimmunises3 msgid "Réserves immunisées" -msgstr "" +msgstr "Belastingvrije reserves" #. module: l10n_be #: code:addons/l10n_be/wizard/l10n_be_partner_vat_listing.py:317 #, python-format msgid "No record to print." -msgstr "" +msgstr "Geen record om af te drukken" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_rserves2 msgid "Réserves" -msgstr "" +msgstr "Reserves" #. module: l10n_be #: help:partner.vat.intra,mand_id:0 msgid "Reference given by the Representative of the sending company." -msgstr "" +msgstr "Referentie van de vertegenwoordiger van de afzender" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_installationsmachinesetoutillage2 msgid "Installations, machines et outillage" -msgstr "" +msgstr "Installaties, machines en uitrusting" #. module: l10n_be #: help:l1on_be.vat.declaration,client_nihil:0 @@ -149,6 +151,9 @@ msgid "" "Tick this case only if it concerns only the last statement on the civil or " "cessation of activity: no clients to be included in the client listing." msgstr "" +"Schakel dit vakje enkel in als het gaat om de laatste aangifte van het jaar " +"of bij staking van de activiteiten: geen klanten op te nemen in " +"klantenlisting" #. module: l10n_be #: view:partner.vat.intra:0 @@ -158,13 +163,13 @@ msgstr "XML opslaan" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_placementsdetrsorerie1 msgid "Placements de trésorerie" -msgstr "" +msgstr "Geldbeleggingen" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_autresdettes6 #: model:account.financial.report,name:l10n_be.account_financial_report_autresdettes8 msgid "Autres dettes" -msgstr "" +msgstr "Overige schulden" #. module: l10n_be #: view:partner.vat.intra:0 @@ -178,14 +183,14 @@ msgstr "_XML maken" #: code:addons/l10n_be/wizard/l10n_be_vat_intra.py:111 #, python-format msgid "insufficient data!" -msgstr "" +msgstr "Onvoldoende gegevens" #. module: l10n_be #: code:addons/l10n_be/wizard/l10n_be_partner_vat_listing.py:317 #: code:addons/l10n_be/wizard/l10n_be_vat_intra.py:116 #, python-format msgid "Error!" -msgstr "" +msgstr "Fout" #. module: l10n_be #: code:addons/l10n_be/wizard/l10n_be_account_vat_declaration.py:112 @@ -200,12 +205,12 @@ msgstr "" #: code:addons/l10n_be/wizard/l10n_be_vat_intra.py:246 #, python-format msgid "Insufficient Data!" -msgstr "" +msgstr "Onvoldoende gegevens" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_effetspayer4 msgid "Effets à payer" -msgstr "" +msgstr "Te betalen wissels" #. module: l10n_be #: view:l1on_be.vat.declaration:0 @@ -215,22 +220,22 @@ msgstr "Laatste aangifte" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_imptsdiffrs2 msgid "Impôts différés" -msgstr "" +msgstr "Uitgestelde belastingen" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_produitsfinanciers1 msgid "Produits financiers" -msgstr "" +msgstr "Financiële opbrengsten" #. module: l10n_be #: field:vat.listing.clients,vat:0 msgid "VAT" -msgstr "" +msgstr "Btw" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_transfertauximptsdiffrs1 msgid "Transfert aux impôts différés" -msgstr "" +msgstr "Overboeking naar de uitgestelde belastingen" #. module: l10n_be #: help:partner.vat.intra,period_ids:0 @@ -241,12 +246,12 @@ msgstr "Kies hier de periode(n) voor uw intracommunautaire opgave" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_stocketcommandesencoursdexcution1 msgid "Stock et commandes en cours d'exécution" -msgstr "" +msgstr "Voorraden en bestellingen in uitvoering" #. module: l10n_be #: field:partner.vat.intra,mand_id:0 msgid "Reference" -msgstr "" +msgstr "Referentie" #. module: l10n_be #: help:partner.vat.intra,period_code:0 @@ -274,12 +279,12 @@ msgstr "" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_dettesunanauplus2 msgid "Dettes à un an au plus" -msgstr "" +msgstr "Schulden op ten hoogste één jaar" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_imptssurlersultat1 msgid "Impôts sur le résultat" -msgstr "" +msgstr "Belastingen op het resultaat" #. module: l10n_be #: field:partner.vat.intra,period_code:0 @@ -290,7 +295,7 @@ msgstr "Periodecode" #: model:account.financial.report,name:l10n_be.account_financial_report_dettescommerciales5 #: model:account.financial.report,name:l10n_be.account_financial_report_dettescommerciales7 msgid "Dettes commerciales" -msgstr "" +msgstr "Handelsschulden" #. module: l10n_be #: field:partner.vat.intra,period_ids:0 @@ -301,33 +306,33 @@ msgstr "Periode(n)" #: code:addons/l10n_be/wizard/l10n_be_partner_vat_listing.py:94 #, python-format msgid "No data found for the selected year." -msgstr "" +msgstr "Geen gegevens gevonden voor het geselecteerde jaar." #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_actifsimmobilises0 msgid "ACTIFS IMMOBILISES" -msgstr "" +msgstr "VASTE ACTIVA" #. module: l10n_be #: model:account.account.type,name:l10n_be.user_type_stock msgid "Stock et Encours" -msgstr "Voorraden in bestelling" +msgstr "Voorraden en bestellingen in uitvoering" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_autrescrances3 #: model:account.financial.report,name:l10n_be.account_financial_report_autrescrances5 msgid "Autres créances" -msgstr "" +msgstr "Overige vorderingen" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_fraisdtablissements1 msgid "Frais d'établissements" -msgstr "" +msgstr "Oprichtingskosten" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_immobilisationsencoursetacomptesverss2 msgid "Immobilisations en cours et acomptes versés" -msgstr "" +msgstr "Activa in aanbouw en vooruitbetalingen" #. module: l10n_be #: model:account.account.type,name:l10n_be.user_type_view @@ -345,16 +350,18 @@ msgstr "Onvoldoende gegevens" msgid "" "You can remove clients/partners which you do not want to show in xml file" msgstr "" +"Klanten/relaties die u niet in het xml-bestand wil opnemen, kunt u " +"verwijderen" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_bnficepertedelexcercice1 msgid "Bénéfice (Perte) de l'excercice" -msgstr "" +msgstr "Winst (Verlies) van het boekjaar" #. module: l10n_be #: field:l1on_be.vat.declaration,client_nihil:0 msgid "Last Declaration, no clients in client listing" -msgstr "" +msgstr "Laatste aangifte, geen klanten in klantenlisting" #. module: l10n_be #: code:addons/l10n_be/wizard/l10n_be_vat_intra.py:258 @@ -368,19 +375,21 @@ msgid "" "Réductions de valeur sur stocks, sur commandes en cours d'exécution et sur " "créances commerciales: dotations (reprises)" msgstr "" +"Waardeverminderingen op voorraden, op bestellingen in uitvoering en op " +"handelsvorderingen: toevoegingen (terugnemingen)" #. module: l10n_be #: code:addons/l10n_be/wizard/l10n_be_vat_intra.py:116 #, python-format msgid "Period code is not valid." -msgstr "" +msgstr "Periodecode is niet geldig" #. module: l10n_be #: help:partner.vat.intra,no_vat:0 msgid "" "The Partner whose VAT number is not defined and they are not included in " "XML File." -msgstr "" +msgstr "Relaties zonder btw-nummer worden niet opgenomen in het xml-bestand." #. module: l10n_be #: field:partner.vat.intra,no_vat:0 @@ -391,23 +400,23 @@ msgstr "Relatie zonder btw" #: model:account.financial.report,name:l10n_be.account_financial_report_acomptesreussurcommandes6 #: model:account.financial.report,name:l10n_be.account_financial_report_acomptesreussurcommandes8 msgid "Acomptes reçus sur commandes" -msgstr "" +msgstr "Ontvangen vooruitbetalingen op bestellingen" #. module: l10n_be #: code:addons/l10n_be/wizard/l10n_be_vat_intra.py:123 #, python-format msgid "No partner has a VAT number asociated with him." -msgstr "" +msgstr "Geen enkele relatie heeft een btw-nummer" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_provisionspourrisquesetcharges2 msgid "Provisions pour risques et charges" -msgstr "" +msgstr "Voorzieningen voor risico's en kosten" #. module: l10n_be #: model:ir.actions.act_window,name:l10n_be.action_account_report_be_bs msgid "Bilan" -msgstr "" +msgstr "Balans" #. module: l10n_be #: field:l1on_be.vat.declaration,file_save:0 @@ -419,12 +428,12 @@ msgstr "Bestand opslaan" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_rservesimmunises3_A msgid "Pour actions propres" -msgstr "" +msgstr "Voor eigen aandelen" #. module: l10n_be #: help:l1on_be.vat.declaration,ask_restitution:0 msgid "It indicates whether a restitution is to make or not?" -msgstr "" +msgstr "Duidt aan of er een terugbetaling moet gebeuren" #. module: l10n_be #: code:addons/l10n_be/wizard/l10n_be_vat_intra.py:119 @@ -446,12 +455,12 @@ msgstr "Maakt een testbestand in xml" #. module: l10n_be #: view:partner.vat.intra:0 msgid "Intracom VAT Declaration" -msgstr "" +msgstr "Intracommunautaire aangifte" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_bnficeperteencours0 msgid "Bénéfice (Perte) en cours, non affecté(e)" -msgstr "" +msgstr "Te bestemmen winst (verlies) van het boekjaar" #. module: l10n_be #: view:partner.vat.intra:0 @@ -462,22 +471,22 @@ msgstr "_Voorbeeld" #: model:account.financial.report,name:l10n_be.account_financial_report_dettesfinancires5 #: model:account.financial.report,name:l10n_be.account_financial_report_dettesfinancires7 msgid "Dettes financières" -msgstr "" +msgstr "Financiële schulden" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_bnficereporte0 msgid "Bénéfice reporté" -msgstr "" +msgstr "Overgedragen winst" #. module: l10n_be #: help:partner.vat.intra,tax_code_id:0 msgid "Keep empty to use the user's company" -msgstr "" +msgstr "Leeg laten voor het bedrijf van de gebruiker" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_actif msgid "ACTIF" -msgstr "" +msgstr "ACTIVA" #. module: l10n_be #: field:partner.vat.intra,test_xml:0 @@ -487,7 +496,7 @@ msgstr "Test XML-bestand" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_dettes1 msgid "DETTES" -msgstr "" +msgstr "SCHULDEN" #. module: l10n_be #: view:l1on_be.vat.declaration:0 @@ -500,34 +509,34 @@ msgstr "Xml opslaan" #: code:addons/l10n_be/wizard/l10n_be_vat_intra.py:149 #, python-format msgid "No phone associated with the company." -msgstr "" +msgstr "Voor uw bedrijf is geen telefoonnummer ingesteld" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_dettesplusdunan2 msgid "Dettes à plus d'un an" -msgstr "" +msgstr "Schulden op meer dan één jaar" #. module: l10n_be #: code:addons/l10n_be/wizard/l10n_be_account_vat_declaration.py:87 #: code:addons/l10n_be/wizard/l10n_be_vat_intra.py:111 #, python-format msgid "No VAT number associated with your company." -msgstr "" +msgstr "Uw bedrijf heeft geen btw-nummer" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_rservesimmunises3_B msgid "Autres" -msgstr "" +msgstr "Overige" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_crancesplusdunan1 msgid "Créances à plus d'un an" -msgstr "" +msgstr "Vorderingen op meer dan één jaar" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_bnficepertedelexcerciceavantimpts1 msgid "Bénéfice (Perte) de l'excercice avant impôts" -msgstr "" +msgstr "Winst (Verlies) van het boekjaar vóór belasting" #. module: l10n_be #: view:partner.vat.intra:0 @@ -541,7 +550,7 @@ msgstr "Europese landen" #: view:partner.vat.intra:0 #: view:partner.vat.list:0 msgid "or" -msgstr "" +msgstr "of" #. module: l10n_be #: view:partner.vat.intra:0 @@ -552,54 +561,55 @@ msgstr "Intracommunautaire opgave" #: model:account.financial.report,name:l10n_be.account_financial_report_comptesdergularisation1 #: model:account.financial.report,name:l10n_be.account_financial_report_comptesdergularisation2 msgid "Comptes de régularisation" -msgstr "" +msgstr "Overlopende rekeningen" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_immobilisationscorporelles1 msgid "Immobilisations corporelles" -msgstr "" +msgstr "Materiële vaste activa" #. module: l10n_be #: field:vat.listing.clients,vat_amount:0 msgid "VAT Amount" -msgstr "" +msgstr "Btw-bedrag" #. module: l10n_be #: code:addons/l10n_be/wizard/l10n_be_vat_intra.py:246 #, python-format msgid "No vat number defined for %s." -msgstr "" +msgstr "Geen btw-nummer ingesteld voor %s." #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_bnficepertereporte2 msgid "Bénéfice (Perte) reporté(e)" -msgstr "" +msgstr "Overgedragen winst (verlies)" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_plusvaluesdervaluation2 msgid "Plus-values de réévaluation" -msgstr "" +msgstr "Herwaarderingsmeerwaarden" #. module: l10n_be #: model:ir.model,name:l10n_be.model_partner_vat_list msgid "partner.vat.list" -msgstr "" +msgstr "Jaarlijkse klantenlisting" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_rservelgale3 msgid "Réserve légale" -msgstr "" +msgstr "Wettelijke reserve" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_capitauxpropres1 msgid "CAPITAUX PROPRES" -msgstr "" +msgstr "EIGEN VERMOGEN" #. module: l10n_be #: code:addons/l10n_be/wizard/l10n_be_partner_vat_listing.py:69 #, python-format msgid "No belgian contact with a VAT number in your database." msgstr "" +"Er is geen Belgische contactpersoon met een btw-nummer in uw database." #. module: l10n_be #: field:l1on_be.vat.declaration,msg:0 @@ -615,28 +625,28 @@ msgstr "Klanten" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_chargesexceptionnelles1 msgid "Charges exceptionnelles" -msgstr "" +msgstr "Uitzonderlijke kosten" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_chiffredaffaires3 msgid "Chiffre d'affaires" -msgstr "" +msgstr "Omzet" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_autreschargesdexploitation2 msgid "Autres charges d'exploitation" -msgstr "" +msgstr "Andere bedrijfskosten" #. module: l10n_be #: code:addons/l10n_be/wizard/l10n_be_partner_vat_listing.py:296 #, python-format msgid "XML File has been Created" -msgstr "" +msgstr "XML-bestand is aangemaakt." #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_belgium_bs msgid "Belgium Balance Sheet" -msgstr "" +msgstr "BALANS NA WINSTVERDELING" #. module: l10n_be #: field:l1on_be.vat.declaration,ask_restitution:0 @@ -647,59 +657,59 @@ msgstr "Teruggave" #: model:account.financial.report,name:l10n_be.account_financial_report_prov_pr_chargesetdotations2 msgid "" "Provisions pour riques et charges: dotations (utilisations et reprises)" -msgstr "" +msgstr "Voorzieningen voor risico's en kosten: toevoegingen (terugnemingen)" #. module: l10n_be #: view:l1on_be.vat.declaration:0 msgid "Advanced Options" -msgstr "" +msgstr "Geavanceerde opties" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_produitsexceptionnels1 msgid "Produits exceptionnels" -msgstr "" +msgstr "Uitzonderlijke opbrengsten" #. module: l10n_be #: view:vat.listing.clients:0 msgid "VAT listing" -msgstr "" +msgstr "Jaarlijkse klantenlisting" #. module: l10n_be #: field:partner.vat.list,partner_ids:0 msgid "Clients" -msgstr "" +msgstr "Klanten" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_margebrutedexploitation2 msgid "Marge brute d'exploitation" -msgstr "" +msgstr "Brutomarge" #. module: l10n_be #: code:addons/l10n_be/wizard/l10n_be_partner_vat_listing.py:265 #, python-format msgid "No data available for the client." -msgstr "" +msgstr "Geen gegevens beschikbaar voor de klant" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_etablissementsdecrdit4 msgid "Etablissements de crédit" -msgstr "" +msgstr "Kredietinstellingen" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_terrainsetconstructions2 msgid "Terrains et constructions" -msgstr "" +msgstr "Terreinen en gebouwen" #. module: l10n_be #: code:addons/l10n_be/wizard/l10n_be_partner_vat_listing.py:69 #, python-format msgid "Error" -msgstr "" +msgstr "Fout" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_capitalsouscrit3 msgid "Capital souscrit" -msgstr "" +msgstr "Geplaatst kapitaal" #. module: l10n_be #: model:ir.actions.act_window,name:l10n_be.action_vat_intra @@ -709,12 +719,12 @@ msgstr "Intracommunautaire opgave" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_stocks2 msgid "Stocks" -msgstr "" +msgstr "Voorraden" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_valeursdisponibles1 msgid "Valeurs disponibles" -msgstr "" +msgstr "Liquide middelen" #. module: l10n_be #: field:l1on_be.vat.declaration,period_id:0 @@ -731,7 +741,7 @@ msgstr "Btw-aangifte" #: model:ir.actions.act_window,name:l10n_be.action_partner_vat_listing #: view:partner.vat:0 msgid "Partner VAT Listing" -msgstr "Intracommunautaire opgave" +msgstr "Jaarlijkse klantenlisting" #. module: l10n_be #: view:partner.vat.intra:0 @@ -741,7 +751,7 @@ msgstr "Algemene informatie" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_immobilisationsfinancires1 msgid "Immobilisations financières" -msgstr "" +msgstr "Financiële vaste activa" #. module: l10n_be #: view:partner.vat.intra:0 @@ -771,7 +781,7 @@ msgstr "Annuleren" #: code:addons/l10n_be/wizard/l10n_be_vat_intra.py:147 #, python-format msgid "No email address associated with the company." -msgstr "" +msgstr "Er is geen e-mailadres ingesteld voor uw bedrijf." #. module: l10n_be #: view:l1on_be.vat.declaration:0 @@ -782,12 +792,12 @@ msgstr "XML maken" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_pertereporte0 msgid "Perte reportée" -msgstr "" +msgstr "Overgedragen verlies" #. module: l10n_be #: field:vat.listing.clients,name:0 msgid "Client Name" -msgstr "" +msgstr "Klantennaam" #. module: l10n_be #: view:partner.vat.list:0 @@ -803,17 +813,17 @@ msgstr "Klanten bekijken" #: model:account.financial.report,name:l10n_be.account_financial_report_autresemprunts6 #: model:account.financial.report,name:l10n_be.account_financial_report_autresemprunts9 msgid "Autres emprunts" -msgstr "" +msgstr "Overige leningen" #. module: l10n_be #: model:ir.ui.menu,name:l10n_be.menu_account_report_be_pl msgid "Profit And Loss" -msgstr "" +msgstr "Winst en verlies" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_passif0 msgid "PASSIF" -msgstr "" +msgstr "PASSIVA" #. module: l10n_be #: view:partner.vat.list:0 @@ -823,17 +833,17 @@ msgstr "Afdrukken" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_fournisseurs4 msgid "Fournisseurs" -msgstr "" +msgstr "Leveranciers" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_commandesencoursdexcution2 msgid "Commandes en cours d'exécution" -msgstr "" +msgstr "Bestellingen in uitvoering" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_actifscirculants0 msgid "ACTIFS CIRCULANTS" -msgstr "" +msgstr "VLOTTENDE ACTIVA" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_capital2 @@ -851,32 +861,33 @@ msgstr "Bestand opslaan met '.xml'-extensie" #: model:account.financial.report,name:l10n_be.account_financial_report_dettesfiscalessalarialesetsociales3 msgid "Dettes fiscales, salariales et sociales" msgstr "" +"Schulden met betrekking tot belastingen, bezoldigingen en sociale lasten" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_autresimmobilisationscorporelles2 msgid "Autres immobilisations corporelles" -msgstr "" +msgstr "Overige materiële vaste activa" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_crancesunanauplus1 msgid "Créances à un an au plus" -msgstr "" +msgstr "Vorderingen op ten hoogste één jaar" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_impts4 msgid "Impôts" -msgstr "" +msgstr "Belastingen" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_charges_expl_pr_restruct2 msgid "" "Charges d'exploitation portées à l'actif au titre de frais de restructuration" -msgstr "" +msgstr "Als herstructureringskosten geactiveerde bedrijfskosten" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_rmunrationsetchargessociales4 msgid "Rémunérations et charges sociales" -msgstr "" +msgstr "Bezoldigingen en sociale lasten" #. module: l10n_be #: model:ir.ui.menu,name:l10n_be.partner_vat_listing @@ -886,7 +897,7 @@ msgstr "Jaarlijke klantenlisting" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_bnficepertecouranteavantimpts1 msgid "Bénéfice (Perte) courant(e) avant impôts" -msgstr "" +msgstr "Winst (Verlies) uit de gewone bedrijfsuitoefening vóór belasting" #. module: l10n_be #: view:partner.vat.intra:0 @@ -897,7 +908,7 @@ msgstr "Opmerking: " #: code:addons/l10n_be/wizard/l10n_be_partner_vat_listing.py:99 #, python-format msgid "Vat Listing" -msgstr "" +msgstr "Jaarlijkse klantenlisting" #. module: l10n_be #: model:ir.ui.menu,name:l10n_be.l10_be_vat_declaration @@ -909,7 +920,7 @@ msgstr "Periodieke btw-aangifte" #: code:addons/l10n_be/wizard/l10n_be_partner_vat_listing.py:64 #, python-format msgid "No data for the selected year." -msgstr "" +msgstr "Geen gegevens voor het gekozen jaar." #. module: l10n_be #: field:partner.vat,limit_amount:0 @@ -919,32 +930,32 @@ msgstr "Bestedingslimiet" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_provisionsetimpotsdifferes1 msgid "PROVISIONS ET IMPOTS DIFFERES" -msgstr "" +msgstr "VOORZIENINGEN EN UITGESTELDE BELASTINGEN" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_subsidesencapital2 msgid "Subsides en capital" -msgstr "" +msgstr "Kapitaalsubsidies" #. module: l10n_be #: view:partner.vat.list:0 msgid "Customer List" -msgstr "" +msgstr "Klantenlijst" #. module: l10n_be #: view:partner.vat.list:0 msgid "Annual Listing of VAT-Subjected Customers" -msgstr "" +msgstr "Jaarlijkse listing van btw-plichtige klanten" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_mobilieretmatrielroulant2 msgid "Mobilier et matériel roulant" -msgstr "" +msgstr "Meubilair en rollend materieel" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_capitalnonappel3 msgid "Capital non appelé" -msgstr "" +msgstr "Niet-opgevraagd kapitaal" #. module: l10n_be #: model:ir.ui.menu,name:l10n_be.menu_finance_belgian_statement @@ -954,18 +965,18 @@ msgstr "Belgische aangiften" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_belgiumpl0 msgid "Belgium P&L" -msgstr "" +msgstr "RESULTATENREKENING" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_crancescommerciales3 #: model:account.financial.report,name:l10n_be.account_financial_report_crancescommerciales5 msgid "Créances commerciales" -msgstr "" +msgstr "Handelsvorderingen" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_bnficepertedexploitation1 msgid "Bénéfice (Perte) d'exploitation" -msgstr "" +msgstr "Bedrijfswinst (Bedrijfsverlies)" #. module: l10n_be #: view:l1on_be.vat.declaration:0 @@ -975,18 +986,18 @@ msgstr "Periodieke btw-aangifte" #. module: l10n_be #: model:ir.model,name:l10n_be.model_partner_vat msgid "partner.vat" -msgstr "" +msgstr "Klantenlisting" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_dettesplusdunanchantdanslanne3 msgid "Dettes à plus d'un an échéant dans l'année" -msgstr "" +msgstr "Schulden op meer dan één jaar die binnen het jaar vervallen" #. module: l10n_be #: code:addons/l10n_be/wizard/l10n_be_partner_vat_listing.py:184 #, python-format msgid "No VAT number associated with the company." -msgstr "" +msgstr "Het bedrijf heeft geen btw-nummer" #. module: l10n_be #: field:l1on_be.vat.declaration,name:0 @@ -998,7 +1009,7 @@ msgstr "Bestandsnaam" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_etablissementcredits4 msgid "Etablissements de crédit, dettes de location-financement et assimilés" -msgstr "" +msgstr "Kredietinstellingen, leasingschulden en soortgelijke schulden" #. module: l10n_be #: field:l1on_be.vat.declaration,ask_payment:0 @@ -1013,14 +1024,14 @@ msgstr "Jaar" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_rservesindisponibles3 msgid "Réserves indisponibles" -msgstr "" +msgstr "Onbeschikbare reserves" #. module: l10n_be #: view:partner.vat.list:0 msgid "Free Comments to be Added to the Declaration" -msgstr "" +msgstr "Vrije opmerkingen m.b.t. de aangifte" #. module: l10n_be #: model:account.financial.report,name:l10n_be.account_financial_report_rservesdisponibles3 msgid "Réserves disponibles" -msgstr "" +msgstr "Beschikbare reserves" diff --git a/addons/purchase/i18n/ar.po b/addons/purchase/i18n/ar.po index 51d80c0a3b1..0d4afc162a1 100644 --- a/addons/purchase/i18n/ar.po +++ b/addons/purchase/i18n/ar.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2012-12-27 19:23+0000\n" -"Last-Translator: gehad shaat \n" +"PO-Revision-Date: 2014-04-06 09:15+0000\n" +"Last-Translator: Mohamed M. Hagag \n" "Language-Team: Arabic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-11-21 06:30+0000\n" -"X-Generator: Launchpad (build 16831)\n" +"X-Launchpad-Export-Date: 2014-04-07 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: purchase #: model:res.groups,name:purchase.group_analytic_accounting @@ -887,7 +887,7 @@ msgstr "" #: model:ir.ui.menu,name:purchase.menu_purchase_config #: view:res.partner:0 msgid "Purchases" -msgstr "المشتريات" +msgstr "مشتريات" #. module: purchase #: view:purchase.report:0 From ebb826a510382ac60299d5d39752267f8c54da01 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Mon, 7 Apr 2014 10:24:45 +0200 Subject: [PATCH 57/65] [FIX] web: applying display name temporary imp of read to search_read also bzr revid: dle@openerp.com-20140407082445-yjy17jnrw45d8mxg --- addons/web/controllers/main.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index b771f1f378e..84fd1ae93be 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -1206,11 +1206,14 @@ class DataSet(http.Controller): def _call_kw(self, model, method, args, kwargs): # Temporary implements future display_name special field for model#read() - if method == 'read' and kwargs.get('context', {}).get('future_display_name'): + if method in ('read', 'search_read') and kwargs.get('context', {}).get('future_display_name'): if 'display_name' in args[1]: - names = dict(request.session.model(model).name_get(args[0], **kwargs)) + if method == 'read': + names = dict(request.session.model(model).name_get(args[0], **kwargs)) + else: + names = dict(request.session.model(model).name_search(args=args[0], **kwargs)) args[1].remove('display_name') - records = request.session.model(model).read(*args, **kwargs) + records = getattr(request.session.model(model), method)(*args, **kwargs) for record in records: record['display_name'] = \ names.get(record['id']) or "%s#%d" % (model, (record['id'])) From 0695647c661b2b13457360cf176c86c6c51493f5 Mon Sep 17 00:00:00 2001 From: Kersten Jeremy Date: Mon, 7 Apr 2014 11:46:24 +0200 Subject: [PATCH 58/65] [FIX] Calendar - Add timezone in mail send for invitations. bzr revid: jke@openerp.com-20140407094624-bi8rtxqcdl1kqaal --- addons/calendar/calendar.py | 7 ++++++- addons/calendar/calendar_data.xml | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/addons/calendar/calendar.py b/addons/calendar/calendar.py index 12a1cec79f4..044e86cf223 100644 --- a/addons/calendar/calendar.py +++ b/addons/calendar/calendar.py @@ -1298,9 +1298,14 @@ class calendar_event(osv.Model): invitation['attendee'].append({'name': attendee.cn, 'status': attendee.state}) return invitation - def get_interval(self, cr, uid, ids, date, interval, context=None): + def get_interval(self, cr, uid, ids, date, interval, tz=None, context=None): #Function used only in calendar_event_data.xml for email template date = datetime.strptime(date.split('.')[0], DEFAULT_SERVER_DATETIME_FORMAT) + + if tz: + timezone = pytz.timezone(tz or 'UTC') + date = date.replace(tzinfo=pytz.timezone('UTC')).astimezone(timezone) + if interval == 'day': res = str(date.day) elif interval == 'month': diff --git a/addons/calendar/calendar_data.xml b/addons/calendar/calendar_data.xml index e1aad240292..822236b033e 100644 --- a/addons/calendar/calendar_data.xml +++ b/addons/calendar/calendar_data.xml @@ -147,7 +147,7 @@ ${object.event_id.get_interval(object.event_id.date,'day')}
    ${object.event_id.get_interval(object.event_id.date, 'month')}
    -
    ${object.event_id.get_interval(object.event_id.date, 'time')}
    +
    ${not object.event_id.allday and object.event_id.get_interval(object.event_id.date, 'time', tz=object.partner_id.tz) or ''}
    @@ -280,7 +280,7 @@ ${object.event_id.get_interval(object.event_id.date,'day')}
    ${object.event_id.get_interval(object.event_id.date, 'month')}
    -
    ${object.event_id.get_interval(object.event_id.date, 'time')}
    +
    ${not object.event_id.allday and object.event_id.get_interval(object.event_id.date, 'time', tz=object.partner_id.tz) or ''}
    @@ -412,7 +412,7 @@ ${object.event_id.get_interval(object.event_id.date,'day')}
    ${object.event_id.get_interval(object.event_id.date, 'month')}
    -
    ${object.event_id.get_interval(object.event_id.date, 'time')}
    +
    ${not object.event_id.allday and object.event_id.get_interval(object.event_id.date, 'time', tz=object.partner_id.tz) or ''}
    From 92b037be7ad5fb1a6efcc16163c35649130c3064 Mon Sep 17 00:00:00 2001 From: Kersten Jeremy Date: Mon, 7 Apr 2014 11:51:27 +0200 Subject: [PATCH 59/65] [FIX] Calendar - Typo remove useless whitespace bzr revid: jke@openerp.com-20140407095127-kxco10410n33l7h6 --- addons/calendar/calendar.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/calendar/calendar.py b/addons/calendar/calendar.py index 044e86cf223..e928432821b 100644 --- a/addons/calendar/calendar.py +++ b/addons/calendar/calendar.py @@ -714,7 +714,7 @@ class calendar_event(osv.Model): """ Return date and time (from to from) based on duration with timezone in string : eg. - 1) if user add duration for 2 hours, return : August-23-2013 at ( 04-30 To 06-30) (Europe/Brussels) + 1) if user add duration for 2 hours, return : August-23-2013 at (04-30 To 06-30) (Europe/Brussels) 2) if event all day ,return : AllDay, July-31-2013 """ if context is None: @@ -733,7 +733,7 @@ class calendar_event(osv.Model): time = _("AllDay , %s") % (event_date) elif meeting.duration < 24: duration = date + timedelta(hours=meeting.duration) - time = ("%s at ( %s To %s) (%s)") % (event_date, display_time, duration.strftime('%H-%M'), tz) + time = ("%s at (%s To %s) (%s)") % (event_date, display_time, duration.strftime('%H-%M'), tz) else: time = ("%s at %s To\n %s at %s (%s)") % (event_date, display_time, date_deadline.strftime('%B-%d-%Y'), date_deadline.strftime('%H-%M'), tz) return time From 13c0a74596468686a58e96178e674b6c1895032c Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Mon, 7 Apr 2014 12:10:16 +0200 Subject: [PATCH 60/65] [FIX] l10n_be: tax VAT-IN-V82-CAR-EXC-C1 should have as invoice and refund tax account the 'TVA non deductible' account bzr revid: dle@openerp.com-20140407101016-fqns4nwv65rras91 --- addons/l10n_be/account_tax_template.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/l10n_be/account_tax_template.xml b/addons/l10n_be/account_tax_template.xml index 7dfd37b2f40..6958673ae8b 100644 --- a/addons/l10n_be/account_tax_template.xml +++ b/addons/l10n_be/account_tax_template.xml @@ -2052,6 +2052,8 @@ VAT-IN-V82-CAR-EXC-C1 Frais de voiture - VAT 50% Non Deductible + + 0.105 percent From 2686f48dd9330728f8b7145ea91b413acf0c4a24 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Mon, 7 Apr 2014 12:13:24 +0200 Subject: [PATCH 61/65] [FIX] web: correct company info popup closing bzr revid: chs@openerp.com-20140407101324-vhm0d9r2nf0m7ve3 --- addons/web/static/src/js/chrome.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index e893873a31e..e4a985bc512 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -1262,9 +1262,9 @@ instance.web.WebClient = instance.web.Client.extend({ }; self.action_manager.do_action(result); var form = self.action_manager.dialog_widget.views.form.controller; - form.on("on_button_cancel", self.action_manager.dialog, self.action_manager.dialog.close); + form.on("on_button_cancel", self.action_manager, self.action_manager.dialog_stop); form.on('record_saved', self, function() { - self.action_manager.dialog.close(); + self.action_manager.dialog_stop(); self.update_logo(); }); }); From 5be8fc620e805adfa50935bd90fc2d1dd1d7c6dc Mon Sep 17 00:00:00 2001 From: Kersten Jeremy Date: Mon, 7 Apr 2014 12:44:02 +0200 Subject: [PATCH 62/65] [FIX] Purchase - Make type 'order' as default invoice method in 'Purchase Settings'. Purchase by default use 'order', once an user update a parameter in 'Purchase Setting' without changing the default type (which by default was set to manual and not to order) the behavior is changed bzr revid: jke@openerp.com-20140407104402-nlswdttmkmxznap2 --- addons/purchase/res_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/purchase/res_config.py b/addons/purchase/res_config.py index ae3a172ce3c..2b85e8f34c2 100644 --- a/addons/purchase/res_config.py +++ b/addons/purchase/res_config.py @@ -63,7 +63,7 @@ Example: Product: this product is deprecated, do not purchase more than 5. } _defaults = { - 'default_invoice_method': 'manual', + 'default_invoice_method': 'order', } def onchange_purchase_analytic_plans(self, cr, uid, ids, module_purchase_analytic_plans, context=None): From 5be9e5612f14916005c54226ee83e8510f3c12e4 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Mon, 7 Apr 2014 12:57:40 +0200 Subject: [PATCH 63/65] [FIX] browse()/browse_record: use iterables instead of forcing lists when constructing browse_lists This allows iterable list_class implementations bzr revid: odo@openerp.com-20140407105740-elbz311w5u9e8eos --- openerp/osv/orm.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 0a7849896fc..ac9e67b7876 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -466,7 +466,12 @@ class browse_record(object): else: new_data[field_name] = browse_null() elif field_column._type in ('one2many', 'many2many') and len(result_line[field_name]): - new_data[field_name] = self._list_class([browse_record(self._cr, self._uid, id, self._table.pool.get(field_column._obj), self._cache, context=self._context, list_class=self._list_class, fields_process=self._fields_process) for id in result_line[field_name]], self._context) + new_data[field_name] = self._list_class( + (browse_record(self._cr, self._uid, id, self._table.pool.get(field_column._obj), + self._cache, context=self._context, list_class=self._list_class, + fields_process=self._fields_process) + for id in result_line[field_name]), + context=self._context) elif field_column._type == 'reference': if result_line[field_name]: if isinstance(result_line[field_name], browse_record): @@ -4579,7 +4584,7 @@ class BaseModel(object): if isinstance(select, (int, long)): return browse_record(cr, uid, select, self, cache, context=context, list_class=self._list_class, fields_process=fields_process) elif isinstance(select, list): - return self._list_class([browse_record(cr, uid, id, self, cache, context=context, list_class=self._list_class, fields_process=fields_process) for id in select], context=context) + return self._list_class((browse_record(cr, uid, id, self, cache, context=context, list_class=self._list_class, fields_process=fields_process) for id in select), context=context) else: return browse_null() From 2372d305203deef40f19c075a8144113d3226a19 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Mon, 7 Apr 2014 13:09:19 +0200 Subject: [PATCH 64/65] [FIX] web: pass name arg to name_search, because it seems that one module (or more) wrongly overwritten the method bzr revid: dle@openerp.com-20140407110919-e0mvvhldkfe98qlq --- addons/web/controllers/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 84fd1ae93be..3015bb9c2e5 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -1211,7 +1211,7 @@ class DataSet(http.Controller): if method == 'read': names = dict(request.session.model(model).name_get(args[0], **kwargs)) else: - names = dict(request.session.model(model).name_search(args=args[0], **kwargs)) + names = dict(request.session.model(model).name_search('', args[0], **kwargs)) args[1].remove('display_name') records = getattr(request.session.model(model), method)(*args, **kwargs) for record in records: From f042113b6fcf713b1dcb2803721268fe099ea5ad Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Mon, 7 Apr 2014 14:10:15 +0200 Subject: [PATCH 65/65] [FIX] res.font: re-introduce substitution for builtin PDF fonts This substitution was removed when res.font was implemented based on the idea that it would be best to allow the use of the real Helvetica/Times/Courier font if really required. However the builtin ones are always available and crippled when it comes to Unicode supports. Combined with the fact that many RML/SXW reports had Helvetica hardcoded, this breaks unicode reports for many users. This patch re-introduces a mapping to replace the builtin fonts by a few common and free alternatives (DejaVu, Liberation and Free font families). When an actual Helvetica/Times/Courier font is installed no substitution takes place for it, in the hope that it comes with decent unicode support. bzr revid: odo@openerp.com-20140407121015-jq1qmg0hfu0dt31s --- openerp/addons/base/res/res_font.py | 40 +++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/openerp/addons/base/res/res_font.py b/openerp/addons/base/res/res_font.py index 47e49bf4d39..767fc3754c1 100644 --- a/openerp/addons/base/res/res_font.py +++ b/openerp/addons/base/res/res_font.py @@ -37,6 +37,23 @@ and Ubuntu distros, we have to override the search path, too. """ _logger = logging.getLogger(__name__) +# Alternatives for the [broken] builtin PDF fonts. Default order chosen to match +# the pre-v8 mapping from openerp.report.render.rml2pdf.customfonts.CustomTTFonts. +# Format: [ (BuiltinFontFamily, mode, [AlternativeFontName, ...]), ...] +BUILTIN_ALTERNATIVES = [ + ('Helvetica', "normal", ["DejaVuSans", "LiberationSans"]), + ('Helvetica', "bold", ["DejaVuSans-Bold", "LiberationSans-Bold"]), + ('Helvetica', 'italic', ["DejaVuSans-Oblique", "LiberationSans-Italic"]), + ('Helvetica', 'bolditalic', ["DejaVuSans-BoldOblique", "LiberationSans-BoldItalic"]), + ('Times', 'normal', ["LiberationSerif", "DejaVuSerif"]), + ('Times', 'bold', ["LiberationSerif-Bold", "DejaVuSerif-Bold"]), + ('Times', 'italic', ["LiberationSerif-Italic", "DejaVuSerif-Italic"]), + ('Times', 'bolditalic', ["LiberationSerif-BoldItalic", "DejaVuSerif-BoldItalic"]), + ('Courier', 'normal', ["FreeMono", "DejaVuSansMono"]), + ('Courier', 'bold', ["FreeMonoBold", "DejaVuSansMono-Bold"]), + ('Courier', 'italic', ["FreeMonoOblique", "DejaVuSansMono-Oblique"]), + ('Courier', 'bolditalic', ["FreeMonoBoldOblique", "DejaVuSansMono-BoldOblique"]), +] class res_font(osv.Model): _name = "res.font" @@ -113,9 +130,32 @@ class res_font(osv.Model): def _sync(self, cr, uid, context=None): """Set the customfonts.CustomTTFonts list to the content of the database""" customfonts.CustomTTFonts = [] + local_family_modes = set() + local_font_paths = {} found_fonts_ids = self.search(cr, uid, [('path', '!=', '/dev/null')], context=context) for font in self.browse(cr, uid, found_fonts_ids, context=None): + local_family_modes.add((font.family, font.mode)) + local_font_paths[font.name] = font.path customfonts.CustomTTFonts.append((font.family, font.name, font.path, font.mode)) + + # Attempt to remap the builtin fonts (Helvetica, Times, Courier) to better alternatives + # if available, because they only support a very small subset of unicode + # (missing 'č' for example) + for builtin_font_family, mode, alts in BUILTIN_ALTERNATIVES: + if (builtin_font_family, mode) not in local_family_modes: + # No local font exists with that name, try alternatives + for altern_font in alts: + if local_font_paths.get(altern_font): + altern_def = (builtin_font_family, altern_font, + local_font_paths[altern_font], mode) + customfonts.CustomTTFonts.append(altern_def) + _logger.debug("Builtin remapping %r", altern_def) + break + else: + _logger.warning("No local alternative found for builtin font `%s` (%s mode)." + "Consider installing the DejaVu fonts if you have problems " + "with unicode characters in RML reports", + builtin_font_family, mode) return True def clear_caches(self):