Skip to content

Instantly share code, notes, and snippets.

@alt-odoo
Last active March 12, 2021 11:41
Show Gist options
  • Select an option

  • Save alt-odoo/bbdf5cdad7782740d740948c989d1014 to your computer and use it in GitHub Desktop.

Select an option

Save alt-odoo/bbdf5cdad7782740d740948c989d1014 to your computer and use it in GitHub Desktop.
Fix 2 Sequence V14
# Specify the date where the sequence was broken (e.g. most probably the migration to prod date)
date_sequence = '20XX-XX-XX'
# Specify ID of concerned journals, leave empty to fix for all journals
journal_ids = []
corrected_moves=[]
query = """
SELECT id,journal_id, date, name
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY date_part('year',date), date_part('month',date), journal_id, move_type ORDER BY id DESC) rn
FROM account_move WHERE state = 'posted'
{company}
{journals}
{date}
) q
WHERE rn = 1
AND sequence_prefix IS NULL AND sequence_number IS NULL
ORDER BY journal_id, date DESC
""".format(company = " AND company_id = %(company_id)s",
journals = journal_ids and " AND journal_id in %(journal_ids)s" or "",
date = " AND create_date <= to_date(%(date_sequence)s, 'YYYY-MM-DD')")
env.cr.execute(query, {'company_id' : env.company.id, 'journal_ids' : tuple(journal_ids), 'date_sequence' : date_sequence})
previous_moves = env.cr.fetchall()
for move_rec in previous_moves:
move = env['account.move'].browse(move_rec[0])
prefix = move.name
number = ''
for x in prefix[::-1]:
try:
int(x)
prefix = prefix[:-1]
number = x + number
except:
break
move.write({'sequence_prefix' : prefix, 'sequence_number' : int(number)})
journals = journal_ids or env['account.journal'].search([]).ids
for journal in journals:
current_moves = env['account.move'].search([("journal_id","=",journal), ("name","!=","/"),
("create_date",">", date_sequence), ('id', 'not in', tuple(corrected_moves))], order="name")
if current_moves:
env.cr.execute("update account_move set name = '/', sequence_prefix = NULL, sequence_number = NULL where id in %s",[tuple([m.id for m in current_moves])])
for move in current_moves:
if move._get_last_sequence():
move._compute_name()
else:
raise Warning ('Please set manually the new sequence for move %s and add it to corrected_moves' % move.id)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment