Queremos un trigger que al cambiar un contrato de estado activation_scheduled
a requested
ejecute una acción determinada.
Se define el triguer con los siguientes parametros:
id | 10
create_uid | 34
on_create | f
create_date | 2018-03-28 09:29:31.938303
name | Trigger A
on_delete | f
on_time | f
action_model | 173
write_uid | 34
model | 251
write_date | 2018-04-04 16:05:05.350021
on_write | t
active | t
action_function | mail_from_trigger
limit_number | 0
condition | [{"d": "", "k": "state", "__class__": "Get", "v": {"d": {}, "__class__": "Eval", "v": "self"}}, "==", "requested"]
email_template | 14
minimum_time_delay |
condition_eval | (Eval('self', {}).get('state'), '==', 'requested')
Al debugar el código vemos que nunca se ejecuta ya que la condición siempre evalua a True.
En el caso de los triggers OnWrite, la condición debe evaluar False
antes de el write y True
despues:
Trigger write actions. It will call actions defined in ir.trigger if on_write is set and condition was false before write() and true after.
El código lo encontramos en:
(Pdb) trigger.condition_eval
u"(Eval('self', {}).get('state'), '==', 'requested')"
(Pdb) trigger.condition
u'[{"d": "", "k": "state", "__class__": "Get", "v": {"d": {}, "__class__": "Eval", "v": "self"}}, "==", "requested"]'
(Pdb) PYSONDecoder(env).decode(trigger.condition)
[u'activation_scheduled', u'==', u'requested']
(Pdb) bool(PYSONDecoder(env).decode(trigger.condition))
True
Code and another info: