From aa99adcbc63eab8f089b751049400fee64120bc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sun, 16 May 2021 15:33:53 +0200 Subject: [PATCH] Raise a UserError when SQL sequence operations fail issue10235 review332771002 --- trytond/ir/message.xml | 3 +++ trytond/ir/sequence.py | 29 ++++++++++++++++++++++++----- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/trytond/ir/message.xml b/trytond/ir/message.xml index a9a9a241d6..c02359acac 100644 --- a/trytond/ir/message.xml +++ b/trytond/ir/message.xml @@ -267,6 +267,9 @@ this repository contains the full copyright notices and license terms. --> You cannot change the sequence type of a sequence instead create a new sequence. + + Invalid "Increment Number" (%s) or "Next Number" (%s) with exception "%(exception)s". + Invalid grouping "%(grouping)s" for language "%(language)s". diff --git a/trytond/ir/sequence.py b/trytond/ir/sequence.py index 43a7cd665f..cbe3657eff 100644 --- a/trytond/ir/sequence.py +++ b/trytond/ir/sequence.py @@ -29,6 +29,10 @@ class LastTimestampError(ValidationError): pass +class SQLSequenceError(ValidationError): + pass + + class SequenceType(ModelSQL, ModelView): "Sequence type" __name__ = 'ir.sequence.type' @@ -265,9 +269,16 @@ class Sequence(DeactivableMixin, ModelSQL, ModelView): return if number_next is None: number_next = self.number_next - if sql_sequence: - transaction.database.sequence_create(transaction.connection, - self._sql_sequence_name, self.number_increment, number_next) + try: + transaction.database.sequence_create( + transaction.connection, self._sql_sequence_name, + self.number_increment, number_next) + except Exception as exception: + raise SQLSequenceError( + gettext('ir.msg_sequence_invalid_number_increment_next', + number_increment=self.number_increment, + number_next=number_next, + exception=exception)) from exception def update_sql_sequence(self, number_next=None): 'Update the SQL sequence' @@ -284,8 +295,16 @@ class Sequence(DeactivableMixin, ModelSQL, ModelView): return if number_next is None: number_next = self.number_next - transaction.database.sequence_update(transaction.connection, - self._sql_sequence_name, self.number_increment, number_next) + try: + transaction.database.sequence_update( + transaction.connection, self._sql_sequence_name, + self.number_increment, number_next) + except Exception as exception: + raise SQLSequenceError( + gettext('ir.msg_sequence_invalid_number_increment_next', + number_increment=self.number_increment, + number_next=number_next, + exception=exception)) from exception def delete_sql_sequence(self): 'Delete the SQL sequence'