From fa5ee6ed2634b1a5b4388efb2c6ab6ae80356f28 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Sat, 11 Nov 2017 01:01:48 +0100 Subject: [PATCH 1/4] [FIX] ir_sequence: add support for PG 10 PostgreSQL 10 move sequences' metadata fields into a new `pg_sequence` system catalog. As a result, selecting from a sequence relation now only return three fields, and does not include the `increment_by` metadata field anymore. This patch obtains the `increment_by` value from the new system catalog for PostgreSQL server versions >= 10. Fixes #20269 --- openerp/addons/base/ir/ir_sequence.py | 40 +++++++++++++++------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/openerp/addons/base/ir/ir_sequence.py b/openerp/addons/base/ir/ir_sequence.py index 2a0f3ab47b7..25728399b19 100644 --- a/openerp/addons/base/ir/ir_sequence.py +++ b/openerp/addons/base/ir/ir_sequence.py @@ -63,6 +63,24 @@ def _update_nogap(self, number_increment): self.invalidate_cache(['number_next'], [self.id]) return number_next +def _predict_nextval(self, seq_id): + """Predict next value for PostgreSQL sequence without consuming it""" + # Cannot use currval() as it requires prior call to nextval() + query = """SELECT last_value, + (SELECT increment_by + FROM pg_sequences + WHERE sequencename = 'ir_sequence_%(seq_id)s'), + is_called + FROM ir_sequence_%(seq_id)s""" + if self.env.cr._cnx.server_version < 100000: + query = "SELECT last_value, increment_by, is_called FROM ir_sequence_%(seq_id)s" + self.env.cr.execute(query % {'seq_id': seq_id}) + (last_value, increment_by, is_called) = self.env.cr.fetchone() + if is_called: + return last_value + increment_by + # sequence has just been RESTARTed to return last_value next time + return last_value + class ir_sequence(models.Model): """ Sequence model. @@ -82,15 +100,8 @@ class ir_sequence(models.Model): if element.implementation != 'standard': element.number_next_actual = element.number_next else: - # get number from postgres sequence. Cannot use currval, because that might give an error when - # not having used nextval before. - query = "SELECT last_value, increment_by, is_called FROM ir_sequence_%03d" % element.id - self.env.cr.execute(query) - (last_value, increment_by, is_called) = self.env.cr.fetchone() - if is_called: - element.number_next_actual = last_value + increment_by - else: - element.number_next_actual = last_value + seq_id = "%03d" % element.id + element.number_next_actual = _predict_nextval(self, seq_id) def _set_number_next_actual(self): for record in self: @@ -319,15 +330,8 @@ class ir_sequence_date_range(models.Model): if element.sequence_id.implementation != 'standard': element.number_next_actual = element.number_next else: - # get number from postgres sequence. Cannot use currval, because that might give an error when - # not having used nextval before. - query = "SELECT last_value, increment_by, is_called FROM ir_sequence_%03d_%03d" % (element.sequence_id.id, element.id) - self.env.cr.execute(query) - (last_value, increment_by, is_called) = self.env.cr.fetchone() - if is_called: - element.number_next_actual = last_value + increment_by - else: - element.number_next_actual = last_value + seq_id = "%03d_%03d" % (element.sequence_id.id, element.id) + element.number_next_actual = _predict_nextval(self, seq_id) def _set_number_next_actual(self): for record in self: From 9bea73514554a92dff65ca90a600a7be6ee7b009 Mon Sep 17 00:00:00 2001 From: Aaron Bohy Date: Mon, 13 Nov 2017 14:05:09 +0100 Subject: [PATCH 2/4] [FIX] web: search view: autocomplete on datetime fields ... gives wrong values due to the timezone. For instance, let's assume that the browser timezone of the user is UTC+2, and the user types 10/09/2017 10:00:00 in a searchview with a datetime field in its arch (i.e. which autocompletes on a datatime field). Before this rev., the suggested value was 10/09/2017 08:00:00, i.e. the timezone offset was substracted from the value. --- addons/web/static/src/js/views/search_inputs.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/js/views/search_inputs.js b/addons/web/static/src/js/views/search_inputs.js index edeffd874b0..e8b2c87baae 100644 --- a/addons/web/static/src/js/views/search_inputs.js +++ b/addons/web/static/src/js/views/search_inputs.js @@ -351,7 +351,8 @@ var DateField = Field.extend(/** @lends instance.web.search.DateField# */{ return $.when(null); } - var m = moment(v, t === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD'); + // THIS SHOULD BE FORWARDPORTED UP TO SAAS-15, NOT LATER + var m = moment.utc(v, t === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD'); if (!m.isValid()) { return $.when(null); } var d = m.toDate(); var date_string = formats.format_value(d, this.attrs); From d6c2906d447b18ff7949e064045c1aaed047d909 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20V=C3=A1zquez=20Acosta?= Date: Mon, 13 Nov 2017 10:41:03 -0500 Subject: [PATCH 3/4] [FIX] mail: access the super of TestMailGroup Instead of the parent of TestMail class Closes #20728 --- addons/mail/tests/test_mail_channel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mail/tests/test_mail_channel.py b/addons/mail/tests/test_mail_channel.py index 1c43f79edaf..e50f493426e 100644 --- a/addons/mail/tests/test_mail_channel.py +++ b/addons/mail/tests/test_mail_channel.py @@ -31,7 +31,7 @@ class TestMailGroup(TestMail): def mail_group_message_get_recipient_values(self, cr, uid, ids, notif_message=None, recipient_ids=None, context=None): return self.pool['mail.thread'].message_get_recipient_values(cr, uid, ids, notif_message=notif_message, recipient_ids=recipient_ids, context=context) cls.env['mail.channel']._patch_method('message_get_recipient_values', mail_group_message_get_recipient_values) - super(TestMail, cls).tearDownClass() + super(TestMailGroup, cls).tearDownClass() @mute_logger('openerp.addons.base.ir.ir_model', 'openerp.models') def test_access_rights_public(self): From d07f9c5ef534732288352f6e6559956a15907b1e Mon Sep 17 00:00:00 2001 From: mehdi-ghezal Date: Fri, 10 Nov 2017 11:24:54 +0100 Subject: [PATCH 4/4] [CLA] signature for mehdi-ghezal Backported to 9.0 cf comment Closes #20850 --- doc/cla/individual/mehdi-ghezal.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 doc/cla/individual/mehdi-ghezal.md diff --git a/doc/cla/individual/mehdi-ghezal.md b/doc/cla/individual/mehdi-ghezal.md new file mode 100644 index 00000000000..a5083336bfd --- /dev/null +++ b/doc/cla/individual/mehdi-ghezal.md @@ -0,0 +1,9 @@ +France, 2017-11-10 + +I hereby agree to the terms of the Odoo Individual Contributor License Agreement v1.0. + +I declare that I am authorized and able to make this agreement and sign this declaration. + +Signed, + +Mehdi GHEZAL mehdi.ghezal@gmail.com https://github.com/mehdi-ghezal