[FIX] base_automation: do not read all fields

vals may be an empty dict
This may happen a write is done on a computed field, the call to _write will
be empty (still needed to update write_uid/date).

Before this commit, all fields were read in the read call.
This was unecessary and may produce acess-rights errors or other side effect
(e.g. in odoo/enterprise#3778 the technical field ticket_count was read, even
if not present in the view or the write call)

Only compute old_values on the fields that are modified

Fixes odoo/enterprise#3778
opw-1949911

closes odoo/odoo#31737

Signed-off-by: Raphael Collet (rco) <rco@openerp.com>
This commit is contained in:
Martin Trigaux
2019-03-11 10:50:45 +00:00
parent ec40cbb5b0
commit fdce99424b
@@ -249,7 +249,7 @@ class BaseAutomation(models.Model):
# read old values before the update
old_values = {
old_vals.pop('id'): old_vals
for old_vals in records.read(list(vals))
for old_vals in (records.read(list(vals)) if vals else [])
}
# call original method
_write.origin(records, vals, **kw)