def account_templates(env): # assign a chart template to configured companies in order not to # have the localization try to generate a new chart of accounts cr = env.cr account_templates = env['account.chart.template'].search([]) configurable_template = env.ref('account.configurable_chart_template') account_templates -= configurable_template cr.execute('select distinct company_id from account_account where active') for company in env['res.company'].browse([i for i, in cr.fetchall()]): if company.chart_template_id: # pragma: no cover # probably never happens, but we need to be sure not to overwrite # this anyways continue cr.execute( 'select max(char_length(code)) from account_account ' 'where company_id=%s and parent_id is null', (company.id,)) accounts_code_digits = cr.fetchall()[0][0] if len(account_templates) == 1: # pragma: no cover # if there's only one template, we can be quite sure that's the # right one company.write({ 'chart_template_id': account_templates.id, 'transfer_account_id': account_templates.transfer_account_id.id }) # we need to write accounts_code_digits via sql because the orm # would try to renumber existing accounts which we don't want env.cr.execute( 'update res_company set accounts_code_digits=%s ' 'where id in %s', (accounts_code_digits, tuple(company.ids))) continue # when there are multiple charts of accounts, things get messy. # we assign the chart of accounts with the most matches concerning # account codes (as names are more likely to change) best_template = configurable_template best_count = 0 for template in account_templates: count = env['account.account'].search_count([ ('code', 'in', template.account_ids.mapped('code')), ('company_id', '=', company.id), ]) if count > best_count: best_count = count best_template = template openupgrade.message( cr, 'account', 'res_company', 'account_chart_template', 'Fuzzily mapping company %d to chart template %d - this may be ' 'wrong', company, best_template) company.write({ 'chart_template_id': best_template.id, 'transfer_account_id': best_template.transfer_account_id.id }) # we need to write accounts_code_digits via sql because the orm would # try to renumber existing accounts which we don't want env.cr.execute( 'update res_company set accounts_code_digits=%s where id in %s', (accounts_code_digits, tuple(company.ids)))
def _drop_table(self): """Never drop tables""" for model in self: if self.env.get(model.model) is not None: openupgrade.message( self.env.cr, "Unknown", False, False, "Not dropping the table or view of model %s", model.model, )
def _drop_column(self): """Never drop columns""" for field in self: if field.name in models.MAGIC_COLUMNS: continue openupgrade.message( self.env.cr, "Unknown", False, False, "Not dropping the column of field %s of model %s", field.name, field.model, ) continue