account_shared_bank_cash/models/analytic_mixin.py

38 lines
1.3 KiB
Python

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