Skip to content

Instantly share code, notes, and snippets.

@danypr92
Last active April 4, 2018 16:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danypr92/0eb20e6dddde34b1cc5eb5311aef12e7 to your computer and use it in GitHub Desktop.
Save danypr92/0eb20e6dddde34b1cc5eb5311aef12e7 to your computer and use it in GitHub Desktop.
Problema con la evaluación de condiciones de los triggers de Tryton 3.8

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:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment