Files
odoo_source/addons/account_sequence/models/sequence_mixin.py
T
Andrea Grazioso (agr-odoo) f0d1bcd816 [FIX] account, account_sequence: psycopg2 errors class missing
Traceback when starting odoo server
ImportError: cannot import name 'errors' from 'psycopg2'

Exception management update in commit
4b430f8e30efb15f06982e4673cd73531a2119b3
would require psycopg2 version 2.8 minimum but version in
requirements is 2.7.7

closes odoo/odoo#106369

X-original-commit: b21fdf115e855d2383603e67343012bfe346cfd9
Signed-off-by: William André (wan) <wan@odoo.com>
2022-11-23 21:56:09 +01:00

46 lines
1.8 KiB
Python

from psycopg2 import DatabaseError
from odoo import models
from odoo.tools import mute_logger
class SequenceMixin(models.AbstractModel):
_inherit = 'sequence.mixin'
def _get_last_sequence(self, relaxed=False, with_prefix=None, lock=True):
return super()._get_last_sequence(relaxed, with_prefix, False)
def _set_next_sequence(self):
# OVERRIDE
self.ensure_one()
last_sequence = self._get_last_sequence()
new = not last_sequence
if new:
last_sequence = self._get_last_sequence(relaxed=True) or self._get_starting_sequence()
format_string, format_values = self._get_sequence_format_param(last_sequence)
if new:
format_values['seq'] = 0
format_values['year'] = self[self._sequence_date_field].year % (10 ** format_values['year_length'])
format_values['month'] = self[self._sequence_date_field].month
# before flushing inside the savepoint (which may be rolled back!), make sure everything
# is already flushed, otherwise we could lose non-sequence fields values, as the ORM believes
# them to be flushed.
self.flush_recordset()
while True:
format_values['seq'] = format_values['seq'] + 1
sequence = format_string.format(**format_values)
try:
with self.env.cr.savepoint(flush=False), mute_logger('odoo.sql_db'):
self[self._sequence_field] = sequence
self.flush_recordset([self._sequence_field])
break
except DatabaseError as e:
# 23P01 ExclusionViolation
# 23505 UniqueViolation
if e.pgcode not in ('23P01', '23505'):
raise e
self._compute_split_sequence()
self.flush_recordset(['sequence_prefix', 'sequence_number'])