# -*- coding: utf-8 -*- from odoo import models, api class AnalyticMixin(models.AbstractModel): _inherit = 'analytic.mixin' def _sanitize_values(self, vals, decimal_precision): if 'analytic_distribution' in vals: dist = vals.get('analytic_distribution') if dist: if isinstance(dist, str): import json try: dist = json.loads(dist) except Exception: dist = {} vals['analytic_distribution'] = self._clean_analytic_distribution(dist) or False else: vals['analytic_distribution'] = False return super()._sanitize_values(vals, decimal_precision) @api.model def _clean_analytic_distribution(self, dist): if not dist or not isinstance(dist, dict): return {} clean_dist = {} for key, val in dist.items(): str_key = str(key) if str_key == '__update__': clean_dist[str_key] = val elif str_key: if all(part.isdigit() for part in str_key.split(',')): try: clean_dist[str_key] = float(val) except (TypeError, ValueError): pass return clean_dist