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

Module: Define Taxes as Python Code

Entity: account.tax

Compute Method: _compute_formula_decoded_info

Inputs Method Outputs
for tax in self:
            if tax.amount_type != 'code':
                tax.formula_decoded_info = None
                continue

            formula = (tax.formula or '0.0').strip()
            formula_decoded_info = {
                'js_formula': formula,
                'py_formula': formula,
            }

            product_fields = set()
            groups = re.findall(r'((?:product\.)(?P<field>\w+))+', formula) or []
            Product = self.env['product.product']
            for group in groups:
                field_name = group[1]
                if field_name in Product and not Product._fields[field_name].relational:
                    product_fields.add(field_name)
                    formula_decoded_info['py_formula'] = formula_decoded_info['py_formula'].replace(f"product.{field_name}", f"product['{field_name}']")
            formula_decoded_info['product_fields'] = list(product_fields)

            product_uom_fields = set()
            groups = re.findall(r'((?:uom\.)(?P<field>\w+))+', formula) or []
            Uom = self.env['uom.uom']
            for group in groups:
                field_name = group[1]
                if field_name in Uom and not Uom._fields[field_name].relational:
                    product_uom_fields.add(field_name)
                    formula_decoded_info['py_formula'] = formula_decoded_info['py_formula'].replace(f"uom.{field_name}", f"uom['{field_name}']")
            formula_decoded_info['product_uom_fields'] = list(product_uom_fields)

            tax.formula_decoded_info = formula_decoded_info

Back to entity