[FIX] base: avoid cache_invalidation on settings

A cache invalidation was triggered when displaying the settings page
because of a write on ir.property

    return call_kw(request.env[model], method, args, kwargs)
  File "/home/xdo/osrc/master/odoo/odoo/api.py", line 461, in call_kw
    result = _call_kw_multi(method, model, args, kwargs)
  File "/home/xdo/osrc/master/odoo/odoo/api.py", line 448, in _call_kw_multi
    result = method(recs, *args, **kwargs)
  File "/home/xdo/osrc/master/odoo/odoo/models.py", line 6689, in onchange
    record._onchange_eval(name, field_onchange[name], result)
  File "/home/xdo/osrc/master/odoo/odoo/models.py", line 6403, in _onchange_eval
    res = method(self)
  File "/home/xdo/osrc/master/enterprise/sale_stock_renting/models/res_config_settings.py", line 17, in _onchange_padding_time
    self.env['ir.property']._set_default("preparation_time", "product.template", self.padding_time)
  File "/home/xdo/osrc/master/odoo/odoo/addons/base/models/ir_property.py", line 203, in _set_default
    prop.write({'value': value})

This commit will avoid this by checking the current value.

Part-of: odoo/odoo#119813
This commit is contained in:
Xavier-Do
2023-07-18 11:42:25 +02:00
parent a0c1f41780
commit dda0f64cf7
+11 -8
View File
@@ -113,14 +113,17 @@ class Property(models.Model):
# if any of the records we're writing on has a res_id=False *or*
# we're writing a res_id=False on any record
default_set = False
if self._ids:
self.env.cr.execute(
'SELECT EXISTS (SELECT 1 FROM ir_property WHERE id in %s AND res_id IS NULL)', [self._ids])
default_set = self.env.cr.rowcount == 1 or any(
v.get('res_id') is False
for v in values
)
r = super(Property, self).write(self._update_values(values))
values = self._update_values(values)
default_set = (
# turning a record value into a fallback value
values.get('res_id') is False and any(record.res_id for record in self)
) or any(
# changing a fallback value
not record.res_id and any(record[fname] != self._fields[fname].convert_to_record(value, self) for fname, value in values.items())
for record in self
)
r = super().write(values)
if default_set:
# DLE P44: test `test_27_company_dependent`
# Easy solution, need to flush write when changing a property.