-
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
|
|