From 5393638610c2e64be6423b48dc0e5d95e41dfeac Mon Sep 17 00:00:00 2001 From: qdp-odoo Date: Mon, 18 Jan 2016 15:08:50 +0100 Subject: [PATCH] [FIX] account: when changing the number of digits for the account on the company settings, change all accounts. Was PR #10334 Previously we only changed the accounts of type liquidity and that had the prefix/suffix defined on the company settings. We added to that the other accounts with the following heuristic: if #digits > len(account.code): add 0 after account.code, if #digits < len(account.code): remove 0 from end of account.code (if possible). Behaviour for the accounts of type liquidity that start with prefix/suffix defined on the company settings does not change, except for a bug correction that did not remove 0 when we set a smaller number of digits. --- addons/account/models/company.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/addons/account/models/company.py b/addons/account/models/company.py index 1b638eac175..1a43f3c59f9 100644 --- a/addons/account/models/company.py +++ b/addons/account/models/company.py @@ -64,9 +64,7 @@ Best Regards,''') return {'date_from': date_from, 'date_to': date_to} def get_new_account_code(self, current_code, old_prefix, new_prefix, digits): - new_prefix_length = len(new_prefix) - number = current_code[len(old_prefix):] - return new_prefix + '0' * (digits - new_prefix_length - len(number)) + number + return new_prefix + current_code.replace(old_prefix, '', 1).lstrip('0').rjust(digits-len(new_prefix), '0') def reflect_code_prefix_change(self, old_code, new_code, digits): accounts = self.env['account.account'].search([('code', 'like', old_code), ('internal_type', '=', 'liquidity'), @@ -75,6 +73,11 @@ Best Regards,''') if account.code.startswith(old_code): account.write({'code': self.get_new_account_code(account.code, old_code, new_code, digits)}) + def reflect_code_digits_change(self, digits): + accounts = self.env['account.account'].search([('company_id', '=', self.id)], order='code asc') + for account in accounts: + account.write({'code': account.code.rstrip('0').ljust(digits, '0')}) + @api.multi def write(self, values): # Reflect the change on accounts @@ -86,4 +89,6 @@ Best Regards,''') if values.get('cash_account_code_prefix') or values.get('accounts_code_digits'): new_cash_code = values.get('cash_account_code_prefix') or company.cash_account_code_prefix company.reflect_code_prefix_change(company.cash_account_code_prefix, new_cash_code, digits) + if values.get('accounts_code_digits'): + company.reflect_code_digits_change(digits) return super(ResCompany, self).write(values)