[FIX] base_action_rule: do not repeatedly trigger already-executed rules based on time condition
A programming error introduced at rco@openerp.com-20121220142445-emzzvhlw400q37c9 fails to properly check when a rule has already been executed in the past. Time-based rules should only be executed if the trigger date is in the past and: - either they never executed before - or the last execution date is older than the trigger date
This commit is contained in:
parent
ff8b843b18
commit
d4356263f2
|
@ -235,7 +235,10 @@ class base_action_rule(osv.osv):
|
||||||
action_ids = self.search(cr, uid, action_dom, context=context)
|
action_ids = self.search(cr, uid, action_dom, context=context)
|
||||||
for action in self.browse(cr, uid, action_ids, context=context):
|
for action in self.browse(cr, uid, action_ids, context=context):
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
last_run = get_datetime(action.last_run) if action.last_run else False
|
if action.last_run:
|
||||||
|
last_run = get_datetime(action.last_run)
|
||||||
|
else:
|
||||||
|
last_run = datetime.utcfromtimestamp(0)
|
||||||
|
|
||||||
# retrieve all the records that satisfy the action's condition
|
# retrieve all the records that satisfy the action's condition
|
||||||
model = self.pool.get(action.model_id.model)
|
model = self.pool.get(action.model_id.model)
|
||||||
|
@ -268,7 +271,7 @@ class base_action_rule(osv.osv):
|
||||||
if not record_dt:
|
if not record_dt:
|
||||||
continue
|
continue
|
||||||
action_dt = get_datetime(record_dt) + delay
|
action_dt = get_datetime(record_dt) + delay
|
||||||
if last_run and (last_run <= action_dt < now) or (action_dt < now):
|
if last_run <= action_dt < now:
|
||||||
try:
|
try:
|
||||||
self._process(cr, uid, action, [record.id], context=context)
|
self._process(cr, uid, action, [record.id], context=context)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|
Loading…
Reference in New Issue