From d1fc62df0b850c56360c1e5391c69eb807d0fe46 Mon Sep 17 00:00:00 2001 From: Yannick Tivisse Date: Fri, 16 Jun 2017 11:25:45 +0200 Subject: [PATCH] [IMP] base: Prevent to have more than one open ir.actions.todo --- odoo/addons/base/ir/ir_actions.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/odoo/addons/base/ir/ir_actions.py b/odoo/addons/base/ir/ir_actions.py index 00076b51a1c..91a0cd96350 100644 --- a/odoo/addons/base/ir/ir_actions.py +++ b/odoo/addons/base/ir/ir_actions.py @@ -572,6 +572,25 @@ class IrActionsTodo(models.Model): state = fields.Selection([('open', 'To Do'), ('done', 'Done')], string='Status', default='open', required=True) name = fields.Char() + @api.model + def create(self, vals): + todo = super(IrActionsTodo, self).create(vals) + if todo.state == "open": + todo.ensure_one_open_todo() + return todo + + def write(self, vals): + res = super(IrActionsTodo, self).write(vals) + if vals.get('state', '') == 'open': + for todo in self: + todo.ensure_one_open_todo() + return res + + def ensure_one_open_todo(self): + open_todo = self.search(['&', ('state', '=', 'open'), ('id', '!=', self.id)]) + if open_todo: + open_todo.write({'state': 'done'}) + @api.multi def name_get(self): return [(record.id, record.action_id.name) for record in self]