Odoo Mindscape. Understand Odoo faster. Explore modules, fields, dependencies and version differences in one place instead of digging through the source code.

Module: Spain - Accounting (PGCE 2008)

Entity: account.move

Compute Method: _compute_l10n_es_regime_code

Inputs Method Outputs
  • state
  • l10n_es_regime_code
  • company_id
  • company_id.l10n_es_special_vat_regime
  • invoice_line_ids
  • tax_ids
regime_code_priorities = {
            '07': 0,
            '05': 1,
            '03': 2,
            '08': 2,
        }
for move in self:
            if move.state == 'posted' and move.l10n_es_regime_code:
                continue
            default_code = move.company_id._l10n_es_special_vat_regime_codes().get(move.company_id.l10n_es_special_vat_regime, '01')
            lines = move.invoice_line_ids.filtered(lambda line: line.display_type == 'product')

            regime_codes = set()
            for line in lines:
                # Flattened: a group tax carries no regime code of its own, only its children do.
                line_codes = [code for code in line.tax_ids.flatten_taxes_hierarchy().mapped('l10n_es_regime_code') if code]
                if line_codes:
                    regime_codes.update(line_codes)
                else:
                    regime_codes.add(default_code)

            sorted_regime_codes = sorted(regime_codes, key=lambda code: (regime_code_priorities.get(code, 99), code))
            move.l10n_es_regime_code = sorted_regime_codes[0] if sorted_regime_codes else default_code
            move.l10n_es_regime_code_additional = sorted_regime_codes[1] if len(sorted_regime_codes) > 1 else False

Back to entity