diff options
40 files changed, 255 insertions, 269 deletions
diff --git a/addons/web/__openerp__.py b/addons/web/__openerp__.py index 269aa13d58e..48903312b44 100644 --- a/addons/web/__openerp__.py +++ b/addons/web/__openerp__.py @@ -1,7 +1,7 @@ { 'name': 'Web', 'category': 'Hidden', - 'version': '7.0.1.0', + 'version': '1.0', 'description': """ OpenERP Web core module. @@ -13,6 +13,7 @@ This module provides the core of the OpenERP Web Client. 'auto_install': True, 'post_load': 'wsgi_postload', 'js' : [ + "static/src/fixbind.js", "static/lib/datejs/globalization/en-US.js", "static/lib/datejs/core.js", "static/lib/datejs/parser.js", @@ -76,6 +77,7 @@ This module provides the core of the OpenERP Web Client. "static/test/class.js", "static/test/registry.js", "static/test/form.js", + "static/test/data.js", "static/test/list-utils.js", "static/test/formats.js", "static/test/rpc.js", diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index b7071eff9e2..8683ef177bc 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -310,7 +310,7 @@ def fs2web(path): """convert FS path into web path""" return '/'.join(path.split(os.path.sep)) -def manifest_glob(extension, addons=None, db=None): +def manifest_glob(extension, addons=None, db=None, include_remotes=False): if addons is None: addons = module_boot(db=db) else: @@ -324,8 +324,12 @@ def manifest_glob(extension, addons=None, db=None): addons_path = os.path.join(manifest['addons_path'], '')[:-1] globlist = manifest.get(extension, []) for pattern in globlist: - for path in glob.glob(os.path.normpath(os.path.join(addons_path, addon, pattern))): - r.append((path, fs2web(path[len(addons_path):]))) + if pattern.startswith(('http://', 'https://', '//')): + if include_remotes: + r.append((None, pattern)) + else: + for path in glob.glob(os.path.normpath(os.path.join(addons_path, addon, pattern))): + r.append((path, fs2web(path[len(addons_path):]))) return r def manifest_list(extension, mods=None, db=None): @@ -333,14 +337,16 @@ def manifest_list(extension, mods=None, db=None): mods: a comma separated string listing modules db: a database name (return all installed modules in that database) """ + files = manifest_glob(extension, addons=mods, db=db, include_remotes=True) if not req.debug: path = '/web/webclient/' + extension if mods is not None: path += '?' + urllib.urlencode({'mods': mods}) elif db: path += '?' + urllib.urlencode({'db': db}) - return [path] - files = manifest_glob(extension, addons=mods, db=db) + + remotes = [wp for fp, wp in files if fp is None] + return [path] + remotes return [wp for _fp, wp in files] def get_last_modified(files): @@ -1204,19 +1210,19 @@ class Binary(openerpweb.Controller): headers = [('Content-Type', 'image/png')] etag = req.httprequest.headers.get('If-None-Match') hashed_session = hashlib.md5(req.session_id).hexdigest() + retag = hashed_session id = None if not id else simplejson.loads(id) if type(id) is list: id = id[0] # m2o - if etag: - if not id and hashed_session == etag: - return werkzeug.wrappers.Response(status=304) - else: - date = Model.read([id], [last_update], req.context)[0].get(last_update) - if hashlib.md5(date).hexdigest() == etag: + try: + if etag: + if not id and hashed_session == etag: return werkzeug.wrappers.Response(status=304) + else: + date = Model.read([id], [last_update], req.context)[0].get(last_update) + if hashlib.md5(date).hexdigest() == etag: + return werkzeug.wrappers.Response(status=304) - retag = hashed_session - try: if not id: res = Model.default_get([field], req.context).get(field) image_base64 = res diff --git a/addons/web/http.py b/addons/web/http.py index 67d71ac7d37..2dc41c8cad9 100644 --- a/addons/web/http.py +++ b/addons/web/http.py @@ -121,6 +121,13 @@ class WebRequest(object): # we use _ as seprator where RFC2616 uses '-' self.lang = lang.replace('-', '_') + @contextlib.contextmanager + def registry_cr(self): + dbname = self.session._db or openerp.addons.web.controllers.main.db_monodb(self) + registry = openerp.modules.registry.RegistryManager.get(dbname.lower()) + with registry.cursor() as cr: + yield (registry, cr) + def reject_nonliteral(dct): if '__ref' in dct: raise ValueError( @@ -298,6 +305,8 @@ class HttpRequest(WebRequest): #_logger.debug("%s --> %s.%s %r", self.httprequest.method, method.im_class.__name__, method.__name__, akw) try: r = method(**self.params) + except werkzeug.exceptions.HTTPException, e: + r = e except Exception, e: _logger.exception("An exception occured during an http request") se = serialize_exception(e) @@ -307,11 +316,13 @@ class HttpRequest(WebRequest): 'data': se } r = werkzeug.exceptions.InternalServerError(cgi.escape(simplejson.dumps(error))) - if self.debug or 1: - if isinstance(r, (werkzeug.wrappers.BaseResponse, werkzeug.exceptions.HTTPException)): - _logger.debug('<-- %s', r) - else: - _logger.debug("<-- size: %s", len(r)) + else: + if not r: + r = werkzeug.wrappers.Response(status=204) # no content + if isinstance(r, (werkzeug.wrappers.BaseResponse, werkzeug.exceptions.HTTPException)): + _logger.debug('<-- %s', r) + else: + _logger.debug("<-- size: %s", len(r)) return r def make_response(self, data, headers=None, cookies=None): diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index f357f6ac2e6..884dc41a9f9 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -913,9 +913,7 @@ instance.web.Menu = instance.web.Widget.extend({ self.reflow(); // launch the fetch of needaction counters, asynchronous if (!_.isEmpty(menu_data.all_menu_ids)) { - this.rpc("/web/menu/load_needaction", {menu_ids: menu_data.all_menu_ids}).done(function(r) { - self.on_needaction_loaded(r); - }); + this.do_load_needaction(menu_data.all_menu_ids); } }); var lazyreflow = _.debounce(this.reflow.bind(this), 200); @@ -941,7 +939,7 @@ instance.web.Menu = instance.web.Widget.extend({ this.data = {data: data}; this.renderElement(); this.$secondary_menus.html(QWeb.render("Menu.secondary", { widget : this })); - this.$el.on('click', 'a[data-menu]', this.on_menu_click); + this.$el.on('click', 'a[data-menu]', this.on_top_menu_click); // Hide second level submenus this.$secondary_menus.find('.oe_menu_toggler').siblings('.oe_secondary_submenu').hide(); if (self.current_menu) { @@ -950,6 +948,16 @@ instance.web.Menu = instance.web.Widget.extend({ this.trigger('menu_loaded', data); this.has_been_loaded.resolve(); }, + do_load_needaction: function (menu_ids) { + var self = this; + menu_ids = _.reject(menu_ids, _.isEmpty); + if (_.isEmpty(menu_ids)) { + return $.when(); + } + return this.rpc("/web/menu/load_needaction", {'menu_ids': menu_ids}).done(function(r) { + self.on_needaction_loaded(r); + }); + }, on_needaction_loaded: function(data) { var self = this; this.needaction_data = data; @@ -1081,11 +1089,38 @@ instance.web.Menu = instance.web.Widget.extend({ } this.open_menu(id); }, + do_reload_needaction: function () { + var self = this; + if (self.current_menu) { + self.do_load_needaction([self.current_menu]).then(function () { + self.trigger("need_action_reloaded"); + }); + } + }, /** * Jquery event handler for menu click * * @param {Event} ev the jquery event */ + on_top_menu_click: function(ev) { + var self = this; + var id = $(ev.currentTarget).data('menu'); + var menu_ids = [id]; + var menu = _.filter(this.data.data.children, function (menu) {return menu.id == id;})[0]; + function add_menu_ids (menu) { + if (menu.children) { + _.each(menu.children, function (menu) { + menu_ids.push(menu.id); + add_menu_ids(menu); + }); + } + }; + add_menu_ids(menu); + self.do_load_needaction(menu_ids).then(function () { + self.trigger("need_action_reloaded"); + }); + this.on_menu_click(ev); + }, on_menu_click: function(ev) { ev.preventDefault(); var needaction = $(ev.target).is('div.oe_menu_counter'); diff --git a/addons/web/static/src/js/corelib.js b/addons/web/static/src/js/corelib.js index c4bb81117f8..116ddf2e8c2 100644 --- a/addons/web/static/src/js/corelib.js +++ b/addons/web/static/src/js/corelib.js @@ -1144,7 +1144,8 @@ instance.web.JsonRPC = instance.web.Class.extend(instance.web.PropertiesMixin, { } qs = '?' + $.param(params); } - return this.prefix + path + qs; + var prefix = _.any(['http://', 'https://', '//'], _.bind(_.str.startsWith, null, path)) ? '' : this.prefix; + return prefix + path + qs; }, }); diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 6a1dc019f95..32e86d69bed 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -91,6 +91,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM init: function(parent, dataset, view_id, options) { var self = this; this._super(parent); + this.ViewManager = parent; this.set_default_options(options); this.dataset = dataset; this.model = dataset.model; @@ -720,6 +721,8 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM return this.save().done(function(result) { self.trigger("save", result); self.to_view_mode(); + }).then(function(result) { + self.ViewManager.ActionManager.__parentedParent.menu.do_reload_needaction(); }); }, on_button_cancel: function(event) { @@ -2901,7 +2904,7 @@ instance.web.form.FieldRadio = instance.web.form.AbstractField.extend(instance.w var domain = instance.web.pyeval.eval('domain', this.build_domain()) || []; if (! _.isEqual(self.domain, domain)) { self.domain = domain; - var ds = new instance.web.DataSet(self, self.field.relation); + var ds = new instance.web.DataSetStatic(self, self.field.relation, self.build_context()); ds.call('search', [self.domain]) .then(function (records) { ds.name_get(records).then(function (records) { @@ -3151,6 +3154,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc instance.web.form.CompletionFieldMixin.init.call(this); this.set({'value': false}); this.display_value = {}; + this.display_value_backup = {}; this.last_search = []; this.floating = false; this.current_display = null; @@ -3234,6 +3238,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc ); pop.on('write_completed', self, function(){ self.display_value = {}; + self.display_value_backup = {}; self.render_value(); self.focus(); }); @@ -3284,6 +3289,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc if (self.last_search.length > 0) { if (self.last_search[0][0] != self.get("value")) { self.display_value = {}; + self.display_value_backup = {}; self.display_value["" + self.last_search[0][0]] = self.last_search[0][1]; self.reinit_value(self.last_search[0][0]); } else { @@ -3349,6 +3355,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc var item = ui.item; if (item.id) { self.display_value = {}; + self.display_value_backup = {}; self.display_value["" + item.id] = item.name; self.reinit_value(item.id); } else if (item.action) { @@ -3394,6 +3401,11 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc this.alive(dataset.name_get([self.get("value")])).done(function(data) { self.display_value["" + self.get("value")] = data[0][1]; self.render_value(true); + }).fail( function (data, event) { + // avoid displaying crash errors as many2One should be name_get compliant + event.preventDefault(); + self.display_value["" + self.get("value")] = self.display_value_backup["" + self.get("value")]; + self.render_value(true); }); } }, @@ -3437,9 +3449,13 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc var self = this; if (value_ instanceof Array) { this.display_value = {}; + this.display_value_backup = {} if (! this.options.always_reload) { this.display_value["" + value_[0]] = value_[1]; } + else { + this.display_value_backup["" + value_[0]] = value_[1]; + } value_ = value_[0]; } value_ = value_ || false; @@ -3450,6 +3466,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc }, add_id: function(id) { this.display_value = {}; + this.display_value_backup = {}; this.reinit_value(id); }, is_false: function() { diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 0737281e199..fdb2eeee329 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -522,6 +522,7 @@ instance.web.ViewManager = instance.web.Widget.extend({ return x; } }); + this.ActionManager = parent; this.views = {}; this.flags = flags || {}; this.registry = instance.web.views; @@ -1253,6 +1254,7 @@ instance.web.View = instance.web.Widget.extend({ view_type: undefined, init: function(parent, dataset, view_id, options) { this._super(parent); + this.ViewManager = parent; this.dataset = dataset; this.view_id = view_id; this.set_default_options(options); @@ -1324,7 +1326,6 @@ instance.web.View = instance.web.Widget.extend({ } }; var context = new instance.web.CompoundContext(dataset.get_context(), action_data.context || {}); - var handler = function (action) { if (action && action.constructor == Object) { var ncontext = new instance.web.CompoundContext(context); @@ -1361,7 +1362,11 @@ instance.web.View = instance.web.Widget.extend({ } } args.push(context); - return dataset.call_button(action_data.name, args).then(handler); + return dataset.call_button(action_data.name, args).then(handler).then(function () { + if (self.ViewManager.ActionManager) { + self.ViewManager.ActionManager.__parentedParent.menu.do_reload_needaction(); + } + }); } else if (action_data.type=="action") { return this.rpc('/web/action/load', { action_id: action_data.name, diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index d89700e9730..0600f68b94b 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -265,10 +265,13 @@ instance.web_kanban.KanbanView = instance.web.View.extend({ var remaining = groups.length - 1, groups_array = []; return $.when.apply(null, _.map(groups, function (group, index) { + var def = $.when([]); var dataset = new instance.web.DataSetSearch(self, self.dataset.model, new instance.web.CompoundContext(self.dataset.get_context(), group.model.context()), group.model.domain()); - return dataset.read_slice(self.fields_keys.concat(['__last_update']), { 'limit': self.limit }) - .then(function (records) { + if (group.attributes.length >= 1) { + def = dataset.read_slice(self.fields_keys.concat(['__last_update']), { 'limit': self.limit }); + } + return def.then(function(records) { self.nb_records += records.length; self.dataset.ids.push.apply(self.dataset.ids, dataset.ids); groups_array[index] = new instance.web_kanban.KanbanGroup(self, records, group, dataset); diff --git a/debian/copyright b/debian/copyright index f681d540a0a..e477adb524d 100644 --- a/debian/copyright +++ b/debian/copyright @@ -40,7 +40,7 @@ License: GPL-2+ . You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL-2 file. @@ -93,7 +93,7 @@ License: LGPL-2.1 . You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . On Debian systems, the complete text of the GNU Library General Public License can be found in /usr/share/common-licenses/LGPL-2.1 file. @@ -137,7 +137,7 @@ License: GPL-2+ . You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL-2 file. @@ -159,7 +159,7 @@ License: GPL-2+ . You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL-2 file. diff --git a/history/check_profile_l10n_all.py b/history/check_profile_l10n_all.py index 5c1c1fa9bca..e7b391a942a 100644 --- a/history/check_profile_l10n_all.py +++ b/history/check_profile_l10n_all.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python # -*- coding: utf-8 -*- ############################################################################## # diff --git a/history/gen_graph.sh b/history/gen_graph.sh index b052528eef4..7be31ed8061 100755 --- a/history/gen_graph.sh +++ b/history/gen_graph.sh @@ -24,7 +24,7 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ############################################################################## diff --git a/openerp-wsgi.py b/openerp-wsgi.py index 9ae18ffc69e..90f43ddab21 100644 --- a/openerp-wsgi.py +++ b/openerp-wsgi.py @@ -1,4 +1,3 @@ -#!/usr/bin/python # WSGI Handler sample configuration file. # # Change the appropriate settings below, in order to provide the parameters diff --git a/openerp/addons/base/currency_data.xml b/openerp/addons/base/currency_data.xml index 7173b8492ab..96ff81cc0d1 100644 --- a/openerp/addons/base/currency_data.xml +++ b/openerp/addons/base/currency_data.xml @@ -9,7 +9,6 @@ <field name="rounding">0.01</field> <field name="accuracy">4</field> <field name="position">before</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateUSD" model="res.currency.rate"> <field name="rate">1.2834</field> @@ -23,7 +22,6 @@ <field name="symbol">Bs.F</field> <field name="rounding">0.0001</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateVEF" model="res.currency.rate"> <field name="rate">5.864</field> @@ -36,7 +34,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateCAD" model="res.currency.rate"> <field name="rate">1.3388</field> @@ -50,7 +47,6 @@ <field name="symbol">CHF</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateCHF" model="res.currency.rate"> <field name="rate">1.3086</field> @@ -63,7 +59,6 @@ <field name="symbol">R$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateBRL" model="res.currency.rate"> <field name="rate">2.2344</field> @@ -76,7 +71,6 @@ <field name="symbol">¥</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateCNY" model="res.currency.rate"> <field name="rate">8.7556</field> @@ -90,7 +84,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateCOP" model="res.currency.rate"> <field name="rate">2933.8378</field> @@ -103,7 +96,6 @@ <field name="symbol">Kč</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateCZK" model="res.currency.rate"> <field name="rate">26.5634</field> @@ -116,7 +108,6 @@ <field name="symbol">kr</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateDKK" model="res.currency.rate"> <field name="rate">7.4445</field> @@ -130,7 +121,6 @@ <field name="symbol">Ft</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateHUF" model="res.currency.rate"> <field name="rate">271.5621</field> @@ -143,7 +133,6 @@ <field name="symbol">Rp</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateIDR1" model="res.currency.rate"> <field name="rate">14352.00</field> @@ -161,7 +150,6 @@ <field name="symbol">Ls</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateLVL" model="res.currency.rate"> <field name="rate">0.7086</field> @@ -174,7 +162,6 @@ <field name="symbol">kr</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateNOK" model="res.currency.rate"> <field name="rate">7.8668</field> @@ -187,7 +174,6 @@ <field name="symbol">XPF</field> <field name="rounding">1.00</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateXPF" model="res.currency.rate"> <field name="rate">119.331742</field> @@ -200,7 +186,6 @@ <field name="symbol">B/.</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="ratePAB" model="res.currency.rate"> <field name="rate">1.2676</field> @@ -213,7 +198,6 @@ <field name="symbol">zł</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="ratePLN" model="res.currency.rate"> <field name="rate">4.1005</field> @@ -226,7 +210,6 @@ <field name="symbol">kr</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateSEK" model="res.currency.rate"> <field name="rate">10.3004</field> @@ -239,7 +222,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateARS" model="res.currency.rate"> <field name="rate">5.0881</field> @@ -252,7 +234,6 @@ <field name="symbol">₹</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateINR" model="res.currency.rate"> <field name="rate">59.9739</field> @@ -265,7 +246,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateAUD" model="res.currency.rate"> <field name="rate">1.4070</field> @@ -278,7 +258,6 @@ <field name="symbol">₴</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateUAH" model="res.currency.rate"> <field name="rate">10.1969</field> @@ -291,7 +270,6 @@ <field name="symbol">₫</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateVND" model="res.currency.rate"> <field name="rate">26330.01</field> @@ -304,7 +282,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateHKD" model="res.currency.rate"> <field name="rate">11.1608</field> @@ -317,7 +294,6 @@ <field name="symbol">¥</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateJPY" model="res.currency.rate"> <field name="rate">133.62</field> @@ -330,7 +306,6 @@ <field name="symbol">лв</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateBGN" model="res.currency.rate"> <field name="rate">1.9558</field> @@ -343,7 +318,6 @@ <field name="symbol">Lt</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateLTL" model="res.currency.rate"> <field name="rate">3.4528</field> @@ -356,7 +330,6 @@ <field name="symbol">lei</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateRON" model="res.currency.rate"> <field name="rate">4.2253</field> @@ -369,7 +342,6 @@ <field name="symbol">kn</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateHRK" model="res.currency.rate"> <field name="rate">7.2936</field> @@ -382,7 +354,6 @@ <field name="symbol">руб</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateRUB" model="res.currency.rate"> <field name="rate">43.16</field> @@ -395,7 +366,6 @@ <field name="symbol">TL</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateTRY" model="res.currency.rate"> <field name="rate">2.1411</field> @@ -408,7 +378,6 @@ <field name="symbol">₩</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateKRW" model="res.currency.rate"> <field name="rate">1662.37</field> @@ -421,7 +390,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateMXN" model="res.currency.rate"> <field name="rate">18.6664</field> @@ -434,7 +402,6 @@ <field name="symbol">RM</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateMYR" model="res.currency.rate"> <field name="rate">4.8887</field> @@ -447,7 +414,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateNZD" model="res.currency.rate"> <field name="rate">1.9764</field> @@ -460,7 +426,6 @@ <field name="symbol">Php</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="ratePHP" model="res.currency.rate"> <field name="rate">66.1</field> @@ -473,7 +438,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateSGD" model="res.currency.rate"> <field name="rate">2.0126</field> @@ -486,7 +450,6 @@ <field name="symbol">R</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateZAR" model="res.currency.rate"> <field name="rate">10.5618</field> @@ -515,7 +478,6 @@ <field name="symbol">Rs</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateMUR" model="res.currency.rate"> <field name="rate">40.28</field> @@ -528,7 +490,6 @@ <field name="symbol">CFA</field> <field name="rounding">1</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateXOF" model="res.currency.rate"> <field name="rate">655.957</field> @@ -541,7 +502,6 @@ <field name="symbol">FCFA</field> <field name="rounding">1</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateXAF" model="res.currency.rate"> <field name="rate">655.957</field> @@ -554,7 +514,6 @@ <field name="symbol">USh</field> <field name="rounding">1</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateUGX" model="res.currency.rate"> <field name="rate">3401.91388</field> @@ -567,7 +526,6 @@ <field name="symbol">L</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateHNL" model="res.currency.rate"> <field name="rate">25</field> @@ -580,7 +538,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateCLP" model="res.currency.rate"> <field name="rate">710</field> @@ -593,7 +550,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateUYU" model="res.currency.rate"> <field name="currency_id" ref="UYU" /> @@ -606,7 +562,6 @@ <field name="symbol">Afs</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateAFN" model="res.currency.rate"> <field name="currency_id" ref="AFN" /> @@ -619,7 +574,6 @@ <field name="symbol">Kz</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateAOA" model="res.currency.rate"> <field name="currency_id" ref="AOA" /> @@ -632,7 +586,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateXCD" model="res.currency.rate"> <field name="currency_id" ref="XCD" /> @@ -645,7 +598,6 @@ <field name="symbol">դր.</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateAMD" model="res.currency.rate"> <field name="currency_id" ref="AMD" /> @@ -658,7 +610,6 @@ <field name="symbol">Afl.</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateAWG" model="res.currency.rate"> <field name="currency_id" ref="AWG" /> @@ -671,7 +622,6 @@ <field name="symbol">m</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateAZN" model="res.currency.rate"> <field name="currency_id" ref="AZN" /> @@ -684,7 +634,6 @@ <field name="symbol">B$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateBSD" model="res.currency.rate"> <field name="currency_id" ref="BSD" /> @@ -697,7 +646,6 @@ <field name="symbol">BD</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateBHD" model="res.currency.rate"> <field name="currency_id" ref="BHD" /> @@ -710,7 +658,6 @@ <field name="symbol">৳</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateBDT" model="res.currency.rate"> <field name="currency_id" ref="BDT" /> @@ -723,7 +670,6 @@ <field name="symbol">Bds$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateBBD" model="res.currency.rate"> <field name="currency_id" ref="BBD" /> @@ -736,7 +682,6 @@ <field name="symbol">BR</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateBYR" model="res.currency.rate"> <field name="currency_id" ref="BYR" /> @@ -749,7 +694,6 @@ <field name="symbol">BZ$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateBZD" model="res.currency.rate"> <field name="currency_id" ref="BZD" /> @@ -762,7 +706,6 @@ <field name="symbol">BD$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateBMD" model="res.currency.rate"> <field name="currency_id" ref="BMD" /> @@ -775,7 +718,6 @@ <field name="symbol">Nu.</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateBTN" model="res.currency.rate"> <field name="currency_id" ref="BTN" /> @@ -788,7 +730,6 @@ <field name="symbol">Bs.</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateBOB" model="res.currency.rate"> <field name="currency_id" ref="BOB" /> @@ -801,7 +742,6 @@ <field name="symbol">KM</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateBAM" model="res.currency.rate"> <field name="currency_id" ref="BAM" /> @@ -814,7 +754,6 @@ <field name="symbol">P</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateBWP" model="res.currency.rate"> <field name="currency_id" ref="BWP" /> @@ -827,7 +766,6 @@ <field name="symbol">FBu</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateBIF" model="res.currency.rate"> <field name="currency_id" ref="BIF" /> @@ -840,7 +778,6 @@ <field name="symbol">៛</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateKHR" model="res.currency.rate"> <field name="currency_id" ref="KHR" /> @@ -853,7 +790,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateKYD" model="res.currency.rate"> <field name="currency_id" ref="KYD" /> @@ -866,7 +802,6 @@ <field name="symbol">CF</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateKMF" model="res.currency.rate"> <field name="currency_id" ref="KMF" /> @@ -879,7 +814,6 @@ <field name="symbol">Fr</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateCDF" model="res.currency.rate"> <field name="currency_id" ref="CDF" /> @@ -892,7 +826,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateCUP" model="res.currency.rate"> <field name="currency_id" ref="CUP" /> @@ -905,7 +838,6 @@ <field name="symbol">ƒ</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateANG" model="res.currency.rate"> <field name="currency_id" ref="ANG" /> @@ -918,7 +850,6 @@ <field name="symbol">£</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateCYP" model="res.currency.rate"> <field name="currency_id" ref="CYP" /> @@ -931,7 +862,6 @@ <field name="symbol">Fdj</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateDJF" model="res.currency.rate"> <field name="currency_id" ref="DJF" /> @@ -944,7 +874,6 @@ <field name="symbol">RD$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateDOP" model="res.currency.rate"> <field name="currency_id" ref="DOP" /> @@ -957,7 +886,6 @@ <field name="name">TPE</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateTPE" model="res.currency.rate"> <field name="currency_id" ref="TPE" /> @@ -970,7 +898,6 @@ <field name="symbol">S/.</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateECS" model="res.currency.rate"> <field name="currency_id" ref="ECS" /> @@ -983,7 +910,6 @@ <field name="symbol">E£</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateEGP" model="res.currency.rate"> <field name="currency_id" ref="EGP" /> @@ -996,7 +922,6 @@ <field name="symbol">¢</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateSVC" model="res.currency.rate"> <field name="currency_id" ref="SVC" /> @@ -1009,7 +934,6 @@ <field name="symbol">Nfk</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateERN" model="res.currency.rate"> <field name="currency_id" ref="ERN" /> @@ -1022,7 +946,6 @@ <field name="symbol">kr</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateEEK" model="res.currency.rate"> <field name="currency_id" ref="EEK" /> @@ -1035,7 +958,6 @@ <field name="symbol">Br</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateEEB" model="res.currency.rate"> <field name="currency_id" ref="ETB" /> @@ -1048,7 +970,6 @@ <field name="symbol">£</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateFKP" model="res.currency.rate"> <field name="currency_id" ref="FKP" /> @@ -1061,7 +982,6 @@ <field name="symbol">FJ$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateFJD" model="res.currency.rate"> <field name="currency_id" ref="FJD" /> @@ -1074,7 +994,6 @@ <field name="symbol">ლ</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateGEL" model="res.currency.rate"> <field name="currency_id" ref="GEL" /> @@ -1087,7 +1006,6 @@ <field name="symbol">£</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateGIP" model="res.currency.rate"> <field name="currency_id" ref="GIP" /> @@ -1100,7 +1018,6 @@ <field name="symbol">Q</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateQTQ" model="res.currency.rate"> <field name="currency_id" ref="QTQ" /> @@ -1113,7 +1030,6 @@ <field name="symbol">FG</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateGNF" model="res.currency.rate"> <field name="currency_id" ref="GNF" /> @@ -1125,7 +1041,6 @@ <field name="name">GWP</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateGWP" model="res.currency.rate"> <field name="currency_id" ref="GWP" /> @@ -1138,7 +1053,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateGYD" model="res.currency.rate"> <field name="currency_id" ref="GYD" /> @@ -1151,7 +1065,6 @@ <field name="symbol">G</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateHTG" model="res.currency.rate"> <field name="currency_id" ref="HTG" /> @@ -1164,7 +1077,6 @@ <field name="symbol">kr</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateISK" model="res.currency.rate"> <field name="currency_id" ref="ISK" /> @@ -1177,7 +1089,6 @@ <field name="symbol">﷼</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateIRR" model="res.currency.rate"> <field name="currency_id" ref="IRR" /> @@ -1190,7 +1101,6 @@ <field name="symbol"> ع.د</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateIQD" model="res.currency.rate"> <field name="currency_id" ref="IQD" /> @@ -1203,7 +1113,6 @@ <field name="symbol">₪</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateILS" model="res.currency.rate"> <field name="currency_id" ref="ILS" /> @@ -1216,7 +1125,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateJMD" model="res.currency.rate"> <field name="currency_id" ref="JMD" /> @@ -1229,7 +1137,6 @@ <field name="symbol"> د.ا </field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateJOD" model="res.currency.rate"> <field name="currency_id" ref="JOD" /> @@ -1242,7 +1149,6 @@ <field name="symbol">лв</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateKZT" model="res.currency.rate"> <field name="currency_id" ref="KZT" /> @@ -1255,7 +1161,6 @@ <field name="symbol">KSh</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateKES" model="res.currency.rate"> <field name="currency_id" ref="KES" /> @@ -1268,7 +1173,6 @@ <field name="symbol"> د.ك </field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateKWD" model="res.currency.rate"> <field name="currency_id" ref="KWD" /> @@ -1281,7 +1185,6 @@ <field name="symbol">лв</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateKGS" model="res.currency.rate"> <field name="currency_id" ref="KGS" /> @@ -1294,7 +1197,6 @@ <field name="symbol">₭</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateLAK" model="res.currency.rate"> <field name="currency_id" ref="LAK" /> @@ -1307,7 +1209,6 @@ <field name="symbol">ل.ل</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateLBP" model="res.currency.rate"> <field name="currency_id" ref="LBP" /> @@ -1320,7 +1221,6 @@ <field name="symbol">L</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateLSL" model="res.currency.rate"> <field name="currency_id" ref="LSL" /> @@ -1333,7 +1233,6 @@ <field name="symbol">L$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateLRD" model="res.currency.rate"> <field name="currency_id" ref="LRD" /> @@ -1346,7 +1245,6 @@ <field name="symbol"> ل.د </field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateLYD" model="res.currency.rate"> <field name="currency_id" ref="LYD" /> @@ -1359,7 +1257,6 @@ <field name="symbol">MOP$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateMOP" model="res.currency.rate"> <field name="currency_id" ref="MOP" /> @@ -1372,7 +1269,6 @@ <field name="symbol">ден</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateMKD" model="res.currency.rate"> <field name="currency_id" ref="MKD" /> @@ -1385,7 +1281,6 @@ <field name="symbol">Ar</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateMGA" model="res.currency.rate"> <field name="currency_id" ref="MGA" /> @@ -1398,7 +1293,6 @@ <field name="symbol">MK</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateMWK" model="res.currency.rate"> <field name="currency_id" ref="MWK" /> @@ -1411,7 +1305,6 @@ <field name="symbol">.ރ</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateMVR" model="res.currency.rate"> <field name="currency_id" ref="MVR" /> @@ -1424,7 +1317,6 @@ <field name="symbol">UM</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateMRO" model="res.currency.rate"> <field name="currency_id" ref="MRO" /> @@ -1437,7 +1329,6 @@ <field name="symbol">L</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateMDL" model="res.currency.rate"> <field name="currency_id" ref="MDL" /> @@ -1450,7 +1341,6 @@ <field name="symbol">₮</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateMNT" model="res.currency.rate"> <field name="currency_id" ref="MNT" /> @@ -1463,7 +1353,6 @@ <field name="symbol"> د.م. </field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateMAD" model="res.currency.rate"> <field name="currency_id" ref="MAD" /> @@ -1476,7 +1365,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateBND" model="res.currency.rate"> <field name="currency_id" ref="BND" /> @@ -1489,7 +1377,6 @@ <field name="symbol">DZ</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateDZD" model="res.currency.rate"> <field name="currency_id" ref="DZD" /> @@ -1502,7 +1389,6 @@ <field name="symbol">GH¢</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateGHS" model="res.currency.rate"> <field name="currency_id" ref="GHS" /> @@ -1515,7 +1401,6 @@ <field name="symbol">D</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateGMD" model="res.currency.rate"> <field name="currency_id" ref="GMD" /> @@ -1528,7 +1413,6 @@ <field name="symbol">Ƶ</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateZRZ" model="res.currency.rate"> <field name="currency_id" ref="ZRZ" /> @@ -1541,7 +1425,6 @@ <field name="symbol">MT</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateMZN" model="res.currency.rate"> <field name="currency_id" ref="MZN" /> @@ -1554,7 +1437,6 @@ <field name="symbol">K</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateMMK" model="res.currency.rate"> <field name="currency_id" ref="MMK" /> @@ -1567,7 +1449,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateNAD" model="res.currency.rate"> <field name="currency_id" ref="NAD" /> @@ -1580,7 +1461,6 @@ <field name="symbol">₨</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateNPR" model="res.currency.rate"> <field name="currency_id" ref="NPR" /> @@ -1593,7 +1473,6 @@ <field name="symbol">L</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateALL" model="res.currency.rate"> <field name="currency_id" ref="ALL" /> @@ -1606,7 +1485,6 @@ <field name="symbol">C$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateNIO" model="res.currency.rate"> <field name="currency_id" ref="NIO" /> @@ -1619,7 +1497,6 @@ <field name="symbol">₦</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateNGN" model="res.currency.rate"> <field name="currency_id" ref="NGN" /> @@ -1632,7 +1509,6 @@ <field name="symbol">₩</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateKPW" model="res.currency.rate"> <field name="currency_id" ref="KPW" /> @@ -1645,7 +1521,6 @@ <field name="symbol">Z$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateZWD" model="res.currency.rate"> <field name="currency_id" ref="ZWD" /> @@ -1658,7 +1533,6 @@ <field name="symbol">ZK</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateZMK" model="res.currency.rate"> <field name="currency_id" ref="ZMK" /> @@ -1671,7 +1545,6 @@ <field name="symbol">﷼</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateYER" model="res.currency.rate"> <field name="currency_id" ref="YER" /> @@ -1684,7 +1557,6 @@ <field name="symbol">Bs</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateVUB" model="res.currency.rate"> <field name="currency_id" ref="VUB" /> @@ -1697,7 +1569,6 @@ <field name="symbol">€</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateEUR" model="res.currency.rate"> <field name="currency_id" ref="EUR" /> @@ -1710,7 +1581,6 @@ <field name="symbol">VT</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateVUV" model="res.currency.rate"> <field name="currency_id" ref="VUV" /> @@ -1723,7 +1593,6 @@ <field name="symbol">лв</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateUZS" model="res.currency.rate"> <field name="currency_id" ref="UZS" /> @@ -1736,7 +1605,6 @@ <field name="symbol">$U</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateUYP" model="res.currency.rate"> <field name="currency_id" ref="UYP" /> @@ -1749,7 +1617,6 @@ <field name="symbol">د.إ</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateAED" model="res.currency.rate"> <field name="currency_id" ref="AED" /> @@ -1762,7 +1629,6 @@ <field name="symbol">₴</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateUAG" model="res.currency.rate"> <field name="currency_id" ref="UAG" /> @@ -1775,7 +1641,6 @@ <field name="symbol">m</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateTMM" model="res.currency.rate"> <field name="currency_id" ref="TMM" /> @@ -1788,7 +1653,6 @@ <field name="symbol">TL</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateTRL" model="res.currency.rate"> <field name="currency_id" ref="TRL" /> @@ -1801,7 +1665,6 @@ <field name="symbol">DT</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateTND" model="res.currency.rate"> <field name="currency_id" ref="TND" /> @@ -1814,7 +1677,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateTTD" model="res.currency.rate"> <field name="currency_id" ref="TTD" /> @@ -1827,7 +1689,6 @@ <field name="symbol">T$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateTOP" model="res.currency.rate"> <field name="currency_id" ref="TOP" /> @@ -1840,7 +1701,6 @@ <field name="symbol">฿</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateTHB" model="res.currency.rate"> <field name="currency_id" ref="THB" /> @@ -1853,7 +1713,6 @@ <field name="symbol">x/y</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateTZS" model="res.currency.rate"> <field name="currency_id" ref="TZS" /> @@ -1865,7 +1724,6 @@ <field name="name">TJR</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateTJR" model="res.currency.rate"> <field name="currency_id" ref="TJR" /> @@ -1878,7 +1736,6 @@ <field name="symbol">NT$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateTWD" model="res.currency.rate"> <field name="currency_id" ref="TWD" /> @@ -1891,7 +1748,6 @@ <field name="symbol">£</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateSYP" model="res.currency.rate"> <field name="currency_id" ref="SYP" /> @@ -1904,7 +1760,6 @@ <field name="symbol">E</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateSZL" model="res.currency.rate"> <field name="currency_id" ref="SZL" /> @@ -1917,7 +1772,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateSRG" model="res.currency.rate"> <field name="currency_id" ref="SRG" /> @@ -1930,7 +1784,6 @@ <field name="symbol">£Sd</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateSDD" model="res.currency.rate"> <field name="currency_id" ref="SDD" /> @@ -1943,7 +1796,6 @@ <field name="symbol">Rs</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateLKR" model="res.currency.rate"> <field name="currency_id" ref="LKR" /> @@ -1956,7 +1808,6 @@ <field name="symbol">£</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateSSP" model="res.currency.rate"> <field name="currency_id" ref="SSP" /> @@ -1970,7 +1821,6 @@ <field name="rounding">0.01</field> <field name="accuracy">4</field> <field name="position">before</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateGBP" model="res.currency.rate"> <field name="currency_id" ref="GBP" /> @@ -1983,7 +1833,6 @@ <field name="symbol">Sh.</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateSOD" model="res.currency.rate"> <field name="currency_id" ref="SOD" /> @@ -1996,7 +1845,6 @@ <field name="symbol">SI$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateSBD" model="res.currency.rate"> <field name="currency_id" ref="SBD" /> @@ -2009,7 +1857,6 @@ <field name="symbol">Le</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateSLL" model="res.currency.rate"> <field name="currency_id" ref="SLL" /> @@ -2022,7 +1869,6 @@ <field name="symbol">SR</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateSCR" model="res.currency.rate"> <field name="currency_id" ref="SCR" /> @@ -2035,7 +1881,6 @@ <field name="symbol">din.</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateRSD" model="res.currency.rate"> <field name="currency_id" ref="RSD" /> @@ -2048,7 +1893,6 @@ <field name="symbol">SR</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateSAR" model="res.currency.rate"> <field name="currency_id" ref="SAR" /> @@ -2061,7 +1905,6 @@ <field name="symbol">Db</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateSTD" model="res.currency.rate"> <field name="currency_id" ref="STD" /> @@ -2074,7 +1917,6 @@ <field name="symbol">₤</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateITL" model="res.currency.rate"> <field name="currency_id" ref="ITL" /> @@ -2087,7 +1929,6 @@ <field name="symbol">WS$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateWST" model="res.currency.rate"> <field name="currency_id" ref="WST" /> @@ -2100,7 +1941,6 @@ <field name="symbol">£</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateSHP" model="res.currency.rate"> <field name="currency_id" ref="SHP" /> @@ -2113,7 +1953,6 @@ <field name="symbol">RF</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateRWF" model="res.currency.rate"> <field name="currency_id" ref="RWF" /> @@ -2126,7 +1965,6 @@ <field name="symbol">R</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateRUR" model="res.currency.rate"> <field name="currency_id" ref="RUR" /> @@ -2139,7 +1977,6 @@ <field name="symbol">L</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateROL" model="res.currency.rate"> <field name="currency_id" ref="ROL" /> @@ -2152,7 +1989,6 @@ <field name="symbol">QR</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateQAR" model="res.currency.rate"> <field name="currency_id" ref="QAR" /> @@ -2165,7 +2001,6 @@ <field name="symbol">zł</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="ratePLZ" model="res.currency.rate"> <field name="currency_id" ref="PLZ" /> @@ -2178,7 +2013,6 @@ <field name="symbol">S/.</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="ratePEN" model="res.currency.rate"> <field name="currency_id" ref="PEN" /> @@ -2191,7 +2025,6 @@ <field name="symbol">₲</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="ratePYG" model="res.currency.rate"> <field name="currency_id" ref="PYG" /> @@ -2204,7 +2037,6 @@ <field name="symbol">K</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="ratePGK" model="res.currency.rate"> <field name="currency_id" ref="PGK" /> @@ -2217,7 +2049,6 @@ <field name="symbol">Rs.</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="ratePKR" model="res.currency.rate"> <field name="currency_id" ref="PKR" /> @@ -2230,7 +2061,6 @@ <field name="symbol">ر.ع.</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateOMR" model="res.currency.rate"> <field name="currency_id" ref="OMR" /> @@ -2243,7 +2073,6 @@ <field name="symbol">$</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateCVE" model="res.currency.rate"> <field name="currency_id" ref="CVE" /> @@ -2256,7 +2085,6 @@ <field name="symbol">Sk</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateSKK" model="res.currency.rate"> <field name="currency_id" ref="SKK" /> @@ -2268,7 +2096,6 @@ <field name="name">SIT</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateSIT" model="res.currency.rate"> <field name="currency_id" ref="SIT" /> @@ -2281,7 +2108,6 @@ <field name="symbol">дин.</field> <field name="rounding">0.01</field> <field name="accuracy">4</field> - <field name="company_id" ref="main_company"/> </record> <record id="rateYUM" model="res.currency.rate"> <field name="currency_id" ref="YUM" /> diff --git a/openerp/addons/base/ir/ir_attachment.py b/openerp/addons/base/ir/ir_attachment.py index b4cb3a8c2cb..f00cc3f85ed 100644 --- a/openerp/addons/base/ir/ir_attachment.py +++ b/openerp/addons/base/ir/ir_attachment.py @@ -198,7 +198,7 @@ class ir_attachment(osv.osv): continue res_ids.setdefault(rmod,set()).add(rid) if values: - if 'res_model' in values and 'res_id' in values: + if values.get('res_model') and 'res_id' in values: res_ids.setdefault(values['res_model'],set()).add(values['res_id']) ima = self.pool.get('ir.model.access') diff --git a/openerp/addons/base/ir/ir_mail_server.py b/openerp/addons/base/ir/ir_mail_server.py index 0805a5f8891..79154a35f3b 100644 --- a/openerp/addons/base/ir/ir_mail_server.py +++ b/openerp/addons/base/ir/ir_mail_server.py @@ -31,6 +31,7 @@ import re import smtplib import threading +from openerp import SUPERUSER_ID from openerp.osv import osv, fields from openerp.tools.translate import _ from openerp.tools import html2text @@ -419,11 +420,11 @@ class ir_mail_server(osv.osv): # Get SMTP Server Details from Mail Server mail_server = None if mail_server_id: - mail_server = self.browse(cr, uid, mail_server_id) + mail_server = self.browse(cr, SUPERUSER_ID, mail_server_id) elif not smtp_server: - mail_server_ids = self.search(cr, uid, [], order='sequence', limit=1) + mail_server_ids = self.search(cr, SUPERUSER_ID, [], order='sequence', limit=1) if mail_server_ids: - mail_server = self.browse(cr, uid, mail_server_ids[0]) + mail_server = self.browse(cr, SUPERUSER_ID, mail_server_ids[0]) if mail_server: smtp_server = mail_server.smtp_host diff --git a/openerp/addons/base/ir/ir_sequence.py b/openerp/addons/base/ir/ir_sequence.py index 44c9e57af32..0f505814c0c 100644 --- a/openerp/addons/base/ir/ir_sequence.py +++ b/openerp/addons/base/ir/ir_sequence.py @@ -54,6 +54,34 @@ class ir_sequence(openerp.osv.osv.osv): """ _name = 'ir.sequence' _order = 'name' + + def _get_number_next_actual(self, cr, user, ids, field_name, arg, context=None): + '''Return number from ir_sequence row when no_gap implementation, + and number from postgres sequence when standard implementation.''' + res = dict.fromkeys(ids) + for element in self.browse(cr, user, ids, context=context): + if element.implementation != 'standard': + res[element.id] = element.number_next + else: + # get number from postgres sequence. Cannot use + # currval, because that might give an error when + # not having used nextval before. + statement = ( + "SELECT last_value, increment_by, is_called" + " FROM ir_sequence_%03d" + % element.id) + cr.execute(statement) + (last_value, increment_by, is_called) = cr.fetchone() + if is_called: + res[element.id] = last_value + increment_by + else: + res[element.id] = last_value + return res + + def _set_number_next_actual(self, cr, uid, id, name, value, args=None, context=None): + return self.write(cr, uid, id, {'number_next': value or 0}, context=context) + + _columns = { 'name': openerp.osv.fields.char('Name', size=64, required=True), 'code': openerp.osv.fields.selection(_code_get, 'Code', size=64), @@ -67,6 +95,7 @@ class ir_sequence(openerp.osv.osv.osv): 'prefix': openerp.osv.fields.char('Prefix', size=64, help="Prefix value of the record for the sequence"), 'suffix': openerp.osv.fields.char('Suffix', size=64, help="Suffix value of the record for the sequence"), 'number_next': openerp.osv.fields.integer('Next Number', required=True, help="Next number of this sequence"), + 'number_next_actual': openerp.osv.fields.function(_get_number_next_actual, fnct_inv=_set_number_next_actual, type='integer', required=True, string='Next Number', help='Next number that will be used. This number can be incremented frequently so the displayed value might already be obsolete'), 'number_increment': openerp.osv.fields.integer('Increment Number', required=True, help="The next number of the sequence will be incremented by this number"), 'padding' : openerp.osv.fields.integer('Number Padding', required=True, help="OpenERP will automatically adds some '0' on the left of the 'Next Number' to get the required padding size."), 'company_id': openerp.osv.fields.many2one('res.company', 'Company'), @@ -77,6 +106,7 @@ class ir_sequence(openerp.osv.osv.osv): 'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'ir.sequence', context=c), 'number_increment': 1, 'number_next': 1, + 'number_next_actual': 1, 'padding' : 0, } @@ -121,7 +151,7 @@ class ir_sequence(openerp.osv.osv.osv): # object depends on it. cr.execute("DROP SEQUENCE IF EXISTS %s RESTRICT " % names) - def _alter_sequence(self, cr, id, number_increment, number_next): + def _alter_sequence(self, cr, id, number_increment, number_next=None): """ Alter a PostreSQL sequence. There is no access rights check. @@ -129,9 +159,15 @@ class ir_sequence(openerp.osv.osv.osv): if number_increment == 0: raise osv.except_osv(_('Warning!'),_("Increment number must not be zero.")) assert isinstance(id, (int, long)) - cr.execute(""" - ALTER SEQUENCE ir_sequence_%03d INCREMENT BY %%s RESTART WITH %%s - """ % id, (number_increment, number_next)) + seq_name = 'ir_sequence_%03d' % (id,) + cr.execute("SELECT relname FROM pg_class WHERE relkind = %s AND relname=%s", ('S', seq_name)) + if not cr.fetchone(): + # sequence is not created yet, we're inside create() so ignore it, will be set later + return + statement = "ALTER SEQUENCE %s INCREMENT BY %d" % (seq_name, number_increment) + if number_next is not None: + statement += " RESTART WITH %d" % (number_next, ) + cr.execute(statement) def create(self, cr, uid, values, context=None): """ Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used. @@ -160,7 +196,13 @@ class ir_sequence(openerp.osv.osv.osv): n = values.get('number_next', row['number_next']) if row['implementation'] == 'standard': if new_implementation in ('standard', None): - self._alter_sequence(cr, row['id'], i, n) + # Implementation has NOT changed. + # Only change sequence if really requested. + if row['number_next'] != n: + self._alter_sequence(cr, row['id'], i, n) + else: + # Just in case only increment changed + self._alter_sequence(cr, row['id'], i) else: self._drop_sequence(cr, row['id']) else: @@ -200,7 +242,7 @@ class ir_sequence(openerp.osv.osv.osv): force_company = context.get('force_company') if not force_company: force_company = self.pool.get('res.users').browse(cr, uid, uid).company_id.id - sequences = self.read(cr, uid, seq_ids, ['company_id','implementation','number_next','prefix','suffix','padding']) + sequences = self.read(cr, uid, seq_ids, ['name','company_id','implementation','number_next','prefix','suffix','padding']) preferred_sequences = [s for s in sequences if s['company_id'] and s['company_id'][0] == force_company ] seq = preferred_sequences[0] if preferred_sequences else sequences[0] if seq['implementation'] == 'standard': @@ -210,8 +252,11 @@ class ir_sequence(openerp.osv.osv.osv): cr.execute("SELECT number_next FROM ir_sequence WHERE id=%s FOR UPDATE NOWAIT", (seq['id'],)) cr.execute("UPDATE ir_sequence SET number_next=number_next+number_increment WHERE id=%s ", (seq['id'],)) d = self._interpolation_dict() - interpolated_prefix = self._interpolate(seq['prefix'], d) - interpolated_suffix = self._interpolate(seq['suffix'], d) + try: + interpolated_prefix = self._interpolate(seq['prefix'], d) + interpolated_suffix = self._interpolate(seq['suffix'], d) + except ValueError: + raise osv.except_osv(_('Warning'), _('Invalid prefix or suffix for sequence \'%s\'') % (seq.get('name'))) return interpolated_prefix + '%%0%sd' % seq['padding'] % seq['number_next'] + interpolated_suffix def next_by_id(self, cr, uid, sequence_id, context=None): diff --git a/openerp/addons/base/ir/ir_sequence_view.xml b/openerp/addons/base/ir/ir_sequence_view.xml index 0fa46d61957..050eb9e2333 100644 --- a/openerp/addons/base/ir/ir_sequence_view.xml +++ b/openerp/addons/base/ir/ir_sequence_view.xml @@ -20,7 +20,7 @@ <field name="suffix"/> <field name="padding"/> <field name="number_increment"/> - <field name="number_next"/> + <field name="number_next_actual"/> <field name="implementation"/> </group> <group col="3" string="Legend (for prefix, suffix)"> @@ -57,7 +57,7 @@ <field name="prefix"/> <field name="padding"/> <field name="company_id" groups="base.group_multi_company"/> - <field name="number_next"/> + <field name="number_next_actual"/> <field name="number_increment"/> <field name="implementation"/> </tree> diff --git a/openerp/addons/base/res/res_company.py b/openerp/addons/base/res/res_company.py index 40b3b021751..02dfefe1e38 100644 --- a/openerp/addons/base/res/res_company.py +++ b/openerp/addons/base/res/res_company.py @@ -278,6 +278,10 @@ class res_company(osv.osv): <header> <pageTemplate> <frame id="first" x1="28.0" y1="28.0" width="%s" height="%s"/> + <stylesheet> + <!-- Set here the default font to use for all <para> tags --> + <parastyle name='Normal' fontName="DejaVu Sans"/> + </stylesheet> <pageGraphics> <fill color="black"/> <stroke color="black"/> @@ -287,6 +291,9 @@ class res_company(osv.osv): <drawCentredString x="%s" y="%s">[[ company.partner_id.name ]]</drawCentredString> <stroke color="#000000"/> <lines>%s</lines> + <!-- Set here the default font to use for all <drawString> tags --> + <!-- don't forget to change the 2 other occurence of <setFont> above if needed --> + <setFont name="DejaVu Sans" size="8"/> </pageGraphics> </pageTemplate> </header>""" @@ -310,13 +317,16 @@ class res_company(osv.osv): <pageTemplate> <frame id="first" x1="1.3cm" y1="3.0cm" height="%s" width="19.0cm"/> <stylesheet> - <paraStyle name="main_footer" fontName="DejaVu Sans" fontSize="8.0" alignment="CENTER"/> - <paraStyle name="main_header" fontName="DejaVu Sans" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <!-- Set here the default font to use for all <para> tags --> + <parastyle name='Normal' fontName="DejaVu Sans"/> + <paraStyle name="main_footer" fontSize="8.0" alignment="CENTER"/> + <paraStyle name="main_header" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> </stylesheet> <pageGraphics> + <!-- Set here the default font to use for all <drawString> tags --> + <setFont name="DejaVu Sans" size="8"/> <!-- You Logo - Change X,Y,Width and Height --> <image x="1.3cm" y="%s" height="40.0" >[[ company.logo or removeParentNode('image') ]]</image> - <setFont name="DejaVu Sans" size="8"/> <fill color="black"/> <stroke color="black"/> diff --git a/openerp/addons/base/res/res_currency.py b/openerp/addons/base/res/res_currency.py index 70bc8299dbe..efe33f32fd9 100644 --- a/openerp/addons/base/res/res_currency.py +++ b/openerp/addons/base/res/res_currency.py @@ -77,6 +77,7 @@ class res_currency(osv.osv): 'position' : 'after', 'rounding': 0.01, 'accuracy': 4, + 'company_id': False, } _sql_constraints = [ # this constraint does not cover all cases due to SQL NULL handling for company_id, diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index 01108939195..89b9448290e 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -74,7 +74,8 @@ class format_address(object): def _tz_get(self,cr,uid, context=None): - return [(x, x) for x in pytz.all_timezones] + # put POSIX 'Etc/*' entries at the end to avoid confusing users - see bug 1086728 + return [(tz,tz) for tz in sorted(pytz.all_timezones, key=lambda tz: tz if not tz.startswith('Etc/') else '_')] class res_partner_category(osv.osv): diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 4f76db03e82..72d9269487b 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -38,6 +38,7 @@ class groups(osv.osv): _name = "res.groups" _description = "Access Groups" _rec_name = 'full_name' + _order = 'name' def _get_full_name(self, cr, uid, ids, field, arg, context=None): res = {} diff --git a/openerp/addons/base/security/base_security.xml b/openerp/addons/base/security/base_security.xml index b0de06078af..4bd78e353cf 100644 --- a/openerp/addons/base/security/base_security.xml +++ b/openerp/addons/base/security/base_security.xml @@ -87,6 +87,12 @@ <field name="domain_force">['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)]</field> </record> + <record id="res_currency_rule" model="ir.rule"> + <field name="name">multi-company currency rule</field> + <field name="model_id" ref="model_res_currency"/> + <field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field> + </record> + </data> </openerp> diff --git a/openerp/addons/base/security/ir.model.access.csv b/openerp/addons/base/security/ir.model.access.csv index 35d5b82bc41..e3198abb8fa 100644 --- a/openerp/addons/base/security/ir.model.access.csv +++ b/openerp/addons/base/security/ir.model.access.csv @@ -114,7 +114,7 @@ "access_ir_filter employee","ir_filters employee","model_ir_filters","group_user",1,1,1,1 "access_ir_filters","ir_filters_all","model_ir_filters",,1,1,1,1 "access_ir_config_parameter","ir_config_parameter","model_ir_config_parameter",,1,0,0,0 -"access_ir_mail_server_all","ir_mail_server","model_ir_mail_server",,1,0,0,0 +"access_ir_mail_server","ir_mail_server","model_ir_mail_server","group_system",1,1,1,1 "access_ir_actions_client","ir_actions_client all","model_ir_actions_client",,1,0,0,0 "access_ir_needaction_mixin","ir_needaction_mixin","model_ir_needaction_mixin",,1,1,1,1 diff --git a/openerp/addons/base/test/test_osv_expression.yml b/openerp/addons/base/test/test_osv_expression.yml index f1610e8b3a4..1516f090e94 100644 --- a/openerp/addons/base/test/test_osv_expression.yml +++ b/openerp/addons/base/test/test_osv_expression.yml @@ -291,22 +291,22 @@ assert res_101 == [], 'res_101: expected %r, got %r' % ([], res_101) assert res_102 == company_ids, 'res_102: expected %r, got %r' % (company_ids, res_102) - - Property of the query (one2many != False). + Verify domain evaluation for `one2many != False` - - !python {model: res.currency }: | - ids = self.search(cr, uid, []) - referenced_companies = set([x.company_id.id for x in self.browse(cr, uid, ids)]) - companies = set(self.pool.get('res.company').search(cr, uid, [('currency_ids', '!=', False)])) - assert referenced_companies == companies + !python {model: res.partner.category }: | + all_ids = self.search(cr, uid, []) + parent_categs = set([c.parent_id.id for c in self.browse(cr, uid, all_ids) if c.parent_id]) + result = set(self.search(cr, uid, [('child_ids', '!=', False)])) + assert result and result == parent_categs, "Got %r, expected %r" % (result, parent_categs) - - Property of the query (one2many = False). + Verify domain evaluation for `one2many == False` - - !python {model: res.currency }: | - ids = self.search(cr, uid, []) - referenced_companies = set([x.company_id.id for x in self.browse(cr, uid, ids)]) - unreferenced_companies = set(self.pool.get('res.company').search(cr, uid, [])).difference(referenced_companies) - companies = set(self.pool.get('res.company').search(cr, uid, [('currency_ids', '=', False)])) - assert unreferenced_companies == companies + !python {model: res.partner.category }: | + all_ids = self.search(cr, uid, []) + parent_categs = set([c.parent_id.id for c in self.browse(cr, uid, all_ids) if c.parent_id]) + leaf_categs = set(all_ids) - parent_categs + result = set(self.search(cr, uid, [('child_ids', '=', False)])) + assert result and result == leaf_categs, "Got %r, expected %r" % (result, leaf_categs) - Equivalent queries. - diff --git a/openerp/cli/server.py b/openerp/cli/server.py index 0315468b7b2..2ee9e53b3ca 100644 --- a/openerp/cli/server.py +++ b/openerp/cli/server.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python # -*- coding: utf-8 -*- ############################################################################## # diff --git a/openerp/netsvc.py b/openerp/netsvc.py index 626d983a221..755f6513b25 100644 --- a/openerp/netsvc.py +++ b/openerp/netsvc.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python # -*- coding: utf-8 -*- ############################################################################## # diff --git a/openerp/osv/expression.py b/openerp/osv/expression.py index 55e286d33f2..ef02882422c 100644 --- a/openerp/osv/expression.py +++ b/openerp/osv/expression.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python # -*- coding: utf-8 -*- ############################################################################## # diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 03d6dddf973..f1c421af5c9 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -3857,11 +3857,12 @@ class BaseModel(object): # Attempt to distinguish record rule restriction vs deleted records, # to provide a more specific error message - check if the missinf cr.execute('SELECT id FROM ' + self._table + ' WHERE id IN %s', (tuple(missing_ids),)) - if cr.rowcount: + forbidden_ids = [x[0] for x in cr.fetchall()] + if forbidden_ids: # the missing ids are (at least partially) hidden by access rules if uid == SUPERUSER_ID: return - _logger.warning('Access Denied by record rules for operation: %s, uid: %s, model: %s', operation, uid, self._name) + _logger.warning('Access Denied by record rules for operation: %s on record ids: %r, uid: %s, model: %s', operation, forbidden_ids, uid, self._name) raise except_orm(_('Access Denied'), _('The requested operation cannot be completed due to security restrictions. Please contact your system administrator.\n\n(Document type: %s, Operation: %s)') % \ (self._description, operation)) diff --git a/openerp/report/render/rml2html/rml2html.py b/openerp/report/render/rml2html/rml2html.py index c80698150b8..9122d068e6e 100644 --- a/openerp/report/render/rml2html/rml2html.py +++ b/openerp/report/render/rml2html/rml2html.py @@ -16,7 +16,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ############################################################################## diff --git a/openerp/report/render/rml2html/utils.py b/openerp/report/render/rml2html/utils.py index c40118477f8..7c81a65a4e8 100644 --- a/openerp/report/render/rml2html/utils.py +++ b/openerp/report/render/rml2html/utils.py @@ -16,7 +16,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ############################################################################## diff --git a/openerp/report/render/rml2pdf/customfonts.py b/openerp/report/render/rml2pdf/customfonts.py index 0c0095b8818..85874f2b82f 100644 --- a/openerp/report/render/rml2pdf/customfonts.py +++ b/openerp/report/render/rml2pdf/customfonts.py @@ -3,7 +3,7 @@ # # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 P. Christeas, Tiny SPRL (<http://tiny.be>). -# Copyright (C) 2010 OpenERP SA. (http://www.openerp.com) +# Copyright (C) 2010-2013 OpenERP SA. (http://www.openerp.com) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -56,7 +56,11 @@ CustomTTFonts = [ ('Helvetica',"DejaVu Sans", "DejaVuSans.ttf", 'normal'), ('Courier',"FreeMono", "FreeMono.ttf", 'normal'), ('Courier',"FreeMono Bold", "FreeMonoBold.ttf", 'bold'), ('Courier',"FreeMono Oblique", "FreeMonoOblique.ttf", 'italic'), - ('Courier',"FreeMono BoldOblique", "FreeMonoBoldOblique.ttf", 'bolditalic'),] + ('Courier',"FreeMono BoldOblique", "FreeMonoBoldOblique.ttf", 'bolditalic'), + + # Sun-ExtA can be downloaded from http://okuc.net/SunWb/ + ('Sun-ExtA',"Sun-ExtA", "Sun-ExtA.ttf", 'normal'), +] TTFSearchPath_Linux = [ diff --git a/openerp/report/render/rml2pdf/trml2pdf.py b/openerp/report/render/rml2pdf/trml2pdf.py index e8d6375c98e..243cc02a0b3 100644 --- a/openerp/report/render/rml2pdf/trml2pdf.py +++ b/openerp/report/render/rml2pdf/trml2pdf.py @@ -160,9 +160,11 @@ class _rml_styles(object,): for style in node.findall('paraStyle'): sname = style.get('name') self.styles[sname] = self._para_style_update(style) - - self.styles_obj[sname] = reportlab.lib.styles.ParagraphStyle(sname, self.default_style["Normal"], **self.styles[sname]) - + if sname in self.default_style: + for key, value in self.styles[sname].items(): + setattr(self.default_style[sname], key, value) + else: + self.styles_obj[sname] = reportlab.lib.styles.ParagraphStyle(sname, self.default_style["Normal"], **self.styles[sname]) for variable in node.findall('initialize'): for name in variable.findall('name'): self.names[ name.get('id')] = name.get('value') @@ -269,6 +271,7 @@ class _rml_doc(object): from reportlab.pdfbase.ttfonts import TTFont for node in els: + for font in node.findall('registerFont'): name = font.get('fontName').encode('ascii') fname = font.get('fontFile').encode('ascii') diff --git a/openerp/report/render/rml2pdf/utils.py b/openerp/report/render/rml2pdf/utils.py index adca350c8d0..ae70cd46c94 100644 --- a/openerp/report/render/rml2pdf/utils.py +++ b/openerp/report/render/rml2pdf/utils.py @@ -16,7 +16,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ############################################################################## diff --git a/openerp/service/cron.py b/openerp/service/cron.py index fe57aa7186c..f21b27f7fea 100644 --- a/openerp/service/cron.py +++ b/openerp/service/cron.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python # -*- coding: utf-8 -*- ############################################################################## # diff --git a/openerp/service/http_server.py b/openerp/service/http_server.py index 63e8ce8338e..e25e75dba62 100644 --- a/openerp/service/http_server.py +++ b/openerp/service/http_server.py @@ -23,7 +23,7 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ############################################################################### diff --git a/openerp/service/websrv_lib.py b/openerp/service/websrv_lib.py index 7767cff2b30..9aeeff38828 100644 --- a/openerp/service/websrv_lib.py +++ b/openerp/service/websrv_lib.py @@ -21,7 +21,7 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ############################################################################### diff --git a/openerp/service/workers.py b/openerp/service/workers.py index 4106b69a632..9a6485b8fd3 100644 --- a/openerp/service/workers.py +++ b/openerp/service/workers.py @@ -353,6 +353,7 @@ class WorkerHTTP(Worker): def start(self): Worker.start(self) + self.multi.long_polling_socket.close() self.server = WorkerBaseWSGIServer(self.multi.app) class WorkerLongPolling(Worker): @@ -362,6 +363,15 @@ class WorkerLongPolling(Worker): # Disable the watchdog feature for this kind of worker. self.watchdog_timeout = None + def watch_parent(self): + import gevent + while True: + if self.ppid != os.getppid(): + _logger.info("WorkerLongPolling (%s) Parent changed", self.pid) + os.kill(os.getpid(), signal.SIGTERM) + return + gevent.sleep(self.multi.beat) + def start(self): openerp.evented = True _logger.info('Using gevent mode') @@ -369,20 +379,22 @@ class WorkerLongPolling(Worker): gevent.monkey.patch_all() import gevent_psycopg2 gevent_psycopg2.monkey_patch() + from openerp.modules.registry import RegistryManager + from gevent.coros import RLock + RegistryManager.registries_lock = RLock() Worker.start(self) - from gevent.wsgi import WSGIServer - self.server = WSGIServer(self.multi.long_polling_socket, self.multi.app) - self.server.start() + self.multi.socket.close() - def stop(self): - self.server.stop() + import gevent + watcher = gevent.spawn(self.watch_parent) - def sleep(self): - time.sleep(1) + log = _logger.getChild(self.__class__.__name__) + log.write = lambda msg: log.info(msg.strip()) - def process_work(self): - pass + from gevent.wsgi import WSGIServer + self.server = WSGIServer(self.multi.long_polling_socket, self.multi.app, log=log) + self.server.serve_forever() class WorkerBaseWSGIServer(werkzeug.serving.BaseWSGIServer): """ werkzeug WSGI Server patched to allow using an external listen socket @@ -456,6 +468,8 @@ class WorkerCron(Worker): def start(self): Worker.start(self) + self.multi.socket.close() + self.multi.long_polling_socket.close() openerp.service.start_internal() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/tests/test_mail.py b/openerp/tests/test_mail.py index ddb8fc4a195..ddb8fc4a195 100644..100755 --- a/openerp/tests/test_mail.py +++ b/openerp/tests/test_mail.py diff --git a/setup.nsi b/setup.nsi index 653a8798bb2..859ebdb39e2 100644 --- a/setup.nsi +++ b/setup.nsi @@ -21,7 +21,7 @@ #
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#####################################################################################
!include 'MUI2.nsh'
diff --git a/setup.py b/setup.py index 9f27e20a049..ff801a97933 100755..100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python # -*- coding: utf-8 -*- ############################################################################## # |
