diff --git a/addons/account/models/account.py b/addons/account/models/account.py index 685ba74a486..396b1fc516c 100644 --- a/addons/account/models/account.py +++ b/addons/account/models/account.py @@ -597,15 +597,17 @@ class AccountJournal(models.Model): :return: mapping of field names and values :rtype: dict ''' - + digits = 6 + acc = self.env['account.account'].search([('company_id', '=', company.id)], limit=1) + if acc: + digits = len(acc.code) # Seek the next available number for the account code - code_digits = company.accounts_code_digits or 0 if type == 'bank': account_code_prefix = company.bank_account_code_prefix or '' else: account_code_prefix = company.cash_account_code_prefix or company.bank_account_code_prefix or '' for num in range(1, 100): - new_code = str(account_code_prefix.ljust(code_digits - 1, '0')) + str(num) + new_code = str(account_code_prefix.ljust(digits - 1, '0')) + str(num) rec = self.env['account.account'].search([('code', '=', new_code), ('company_id', '=', company.id)], limit=1) if not rec: break diff --git a/addons/account/models/chart_template.py b/addons/account/models/chart_template.py index 726ac830ccb..84782fd076b 100644 --- a/addons/account/models/chart_template.py +++ b/addons/account/models/chart_template.py @@ -885,7 +885,6 @@ class WizardMultiChartsAccounts(models.TransientModel): company = self.company_id self.company_id.write({'currency_id': self.currency_id.id, - 'accounts_code_digits': self.code_digits, 'anglo_saxon_accounting': self.use_anglo_saxon, 'bank_account_code_prefix': self.bank_account_code_prefix, 'cash_account_code_prefix': self.cash_account_code_prefix, diff --git a/addons/account/models/company.py b/addons/account/models/company.py index 7326f097eed..dc269c95f94 100644 --- a/addons/account/models/company.py +++ b/addons/account/models/company.py @@ -23,7 +23,6 @@ class ResCompany(models.Model): chart_template_id = fields.Many2one('account.chart.template', help='The chart template for the company (if any)') bank_account_code_prefix = fields.Char(string='Prefix of the bank accounts', oldname="bank_account_code_char") cash_account_code_prefix = fields.Char(string='Prefix of the cash accounts') - accounts_code_digits = fields.Integer(string='Number of digits in an account code') account_sale_tax_id = fields.Many2one('account.tax', string="Default Sale Tax") account_purchase_tax_id = fields.Many2one('account.tax', string="Default Purchase Tax") tax_cash_basis_journal_id = fields.Many2one('account.journal', string="Cash Basis Journal") @@ -97,20 +96,16 @@ Best Regards,''') date_from = date_from.replace(year=date_from.year - 1) return {'date_from': date_from, 'date_to': date_to} - def get_new_account_code(self, current_code, old_prefix, new_prefix, digits): + def get_new_account_code(self, current_code, old_prefix, new_prefix): + digits = len(current_code) 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): + def reflect_code_prefix_change(self, old_code, new_code): accounts = self.env['account.account'].search([('code', 'like', old_code), ('internal_type', '=', 'liquidity'), ('company_id', '=', self.id)], order='code asc') for account in accounts: 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')}) + account.write({'code': self.get_new_account_code(account.code, old_code, new_code)}) @api.multi def _validate_fiscalyear_lock(self, values): @@ -129,15 +124,12 @@ Best Regards,''') # Reflect the change on accounts for company in self: - digits = values.get('accounts_code_digits') or company.accounts_code_digits - if values.get('bank_account_code_prefix') or values.get('accounts_code_digits'): + if values.get('bank_account_code_prefix'): new_bank_code = values.get('bank_account_code_prefix') or company.bank_account_code_prefix - company.reflect_code_prefix_change(company.bank_account_code_prefix, new_bank_code, digits) - if values.get('cash_account_code_prefix') or values.get('accounts_code_digits'): + company.reflect_code_prefix_change(company.bank_account_code_prefix, new_bank_code) + if values.get('cash_account_code_prefix'): 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) + company.reflect_code_prefix_change(company.cash_account_code_prefix, new_cash_code) return super(ResCompany, self).write(values) @api.model diff --git a/addons/account/models/res_config_settings.py b/addons/account/models/res_config_settings.py index e6e637e3b0e..304fc0d54a3 100644 --- a/addons/account/models/res_config_settings.py +++ b/addons/account/models/res_config_settings.py @@ -19,7 +19,6 @@ class ResConfigSettings(models.TransientModel): has_chart_of_accounts = fields.Boolean(compute='_compute_has_chart_of_accounts', string='Company has a chart of accounts') chart_template_id = fields.Many2one('account.chart.template', string='Template', domain="[('visible','=', True)]") - code_digits = fields.Integer(string='# of Digits *', related='company_id.accounts_code_digits', help="No. of digits to use for account code") sale_tax_id = fields.Many2one('account.tax', string="Default Sale Tax", related='company_id.account_sale_tax_id') purchase_tax_id = fields.Many2one('account.tax', string="Default Purchase Tax", related='company_id.account_purchase_tax_id') tax_calculation_rounding_method = fields.Selection([ @@ -69,7 +68,6 @@ class ResConfigSettings(models.TransientModel): 'company_id': self.company_id.id, 'chart_template_id': self.chart_template_id.id, 'transfer_account_id': self.chart_template_id.transfer_account_id.id, - 'code_digits': self.code_digits or 6, 'sale_tax_rate': 15.0, 'purchase_tax_rate': 15.0, 'complete_tax_set': self.chart_template_id.complete_tax_set, @@ -122,12 +120,8 @@ class ResConfigSettings(models.TransientModel): # related values, including the currency_id field on res_company. This in turn will trigger the recomputation # of account_move_line related field company_currency_id which can be slow depending on the number of entries # in the database. Thus, if we do not explicitly change the currency_id, we should not write it on the company - # Same for the field `code_digits` which will trigger a write on all the account.account to complete the - # code the missing characters to complete the desired number of digit, leading to a sql_constraint. if ('company_id' in values and 'currency_id' in values): company = self.env['res.company'].browse(values.get('company_id')) if company.currency_id.id == values.get('currency_id'): values.pop('currency_id') - if company.accounts_code_digits == values.get('code_digits'): - values.pop('code_digits') return super(ResConfigSettings, self).create(values) diff --git a/addons/account/test/account_minimal_test.xml b/addons/account/test/account_minimal_test.xml index e127af9b289..7c57d6cc4b1 100644 --- a/addons/account/test/account_minimal_test.xml +++ b/addons/account/test/account_minimal_test.xml @@ -6,7 +6,6 @@ X1100 - 7