Last active
March 12, 2021 11:41
-
-
Save alt-odoo/bbdf5cdad7782740d740948c989d1014 to your computer and use it in GitHub Desktop.
Fix 2 Sequence V14
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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