[MERGE] forward port of branch saas-3 up to revid 5060 chs@openerp.com-20140206131116...
[odoo/odoo.git] / openerp / tests / addons / test_workflow / data.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <openerp>
3     <data>
4
5         <record id="view_test_workflow_model" model="ir.ui.view">
6             <field name="name">Test workflow</field>
7             <field name="model">test.workflow.model</field>
8             <field name="arch" type="xml">
9                 <form string="Test workflow">
10                           <button name="a-b" string="a-b" type="workflow" icon="gtk-ok" colspan="1"/>
11                           <label string="a-b"/>
12                           <button name="trigger" string="trigger" type="object" icon="gtk-ok" colspan="1"/>
13                           <label string="trigger"/>
14                 </form>
15            </field>
16         </record>
17
18         <record id="action_test_workflow" model="ir.actions.act_window">
19             <field name="name">Test workflow</field>
20             <field name="type">ir.actions.act_window</field>
21             <field name="res_model">test.workflow.model</field>
22             <field name="view_type">form</field>
23             <field name="view_mode">tree,form</field>
24         </record>
25
26         <menuitem icon="STOCK_PREFERENCES" id="base.menu_tests" name="Tests" sequence="1000000"/>
27
28         <menuitem id="menu_test_workflow" parent="base.menu_tests" name="Test workflow"/>
29
30         <menuitem id="menu_test_workflow_leaf"
31             name="Test workflow"
32             action="action_test_workflow"
33             parent="menu_test_workflow"/>
34
35
36         <record id="test_workflow_trigger_1" model="test.workflow.trigger">
37         <!-- A single trigger record, with known ID 1 -->
38         </record>
39
40         <!-- A simple workflow:
41
42             a -signal-> b -trigger-> c
43
44         -->
45         <record id="test_workflow" model="workflow">
46             <field name="name">test.workflow</field>
47             <field name="osv">test.workflow.model</field>
48             <field name="on_create">True</field>
49         </record>
50
51         <record id="activity_a" model="workflow.activity">
52             <field name="wkf_id" ref="test_workflow"/>
53             <field name="flow_start">True</field>
54             <field name="name">a</field>
55             <field name="kind">function</field>
56             <field name="action">print_a()</field>
57         </record>
58         <record id="activity_b" model="workflow.activity">
59             <field name="wkf_id" ref="test_workflow"/>
60             <field name="name">b</field>
61             <field name="kind">function</field>
62             <field name="action">print_b()</field>
63         </record>
64         <record id="activity_c" model="workflow.activity">
65             <field name="wkf_id" ref="test_workflow"/>
66             <field name="flow_stop">True</field>
67             <field name="name">c</field>
68             <field name="kind">function</field>
69             <field name="action">print_c()</field>
70         </record>
71
72         <record id="trans_a_b" model="workflow.transition">
73             <field name="act_from" ref="activity_a"/>
74             <field name="act_to" ref="activity_b"/>
75             <field name="signal">a-b</field>
76         </record>
77         <record id="trans_b_c" model="workflow.transition">
78             <field name="act_from" ref="activity_b"/>
79             <field name="act_to" ref="activity_c"/>
80             <field name="condition">condition()</field>
81             <field name="trigger_model">test.workflow.trigger</field>
82             <field name="trigger_expr_id">[1]</field>
83         </record>
84
85         <!-- Workflow A (a single activity):
86
87             a
88
89         -->
90         <record id="test_workflow_a" model="workflow">
91             <field name="name">test.workflow.a</field>
92             <field name="osv">test.workflow.model.a</field>
93             <field name="on_create">True</field>
94         </record>
95
96         <record id="activity_a_a" model="workflow.activity">
97             <field name="wkf_id" ref="test_workflow_a"/>
98             <field name="flow_start">True</field>
99             <field name="flow_stop">True</field>
100             <field name="name">a</field>
101             <field name="kind">dummy</field>
102         </record>
103
104         <!-- Workflow B (a single activity):
105
106             a
107
108         The function is run when the record is created.
109
110         -->
111         <record id="test_workflow_b" model="workflow">
112             <field name="name">test.workflow.b</field>
113             <field name="osv">test.workflow.model.b</field>
114             <field name="on_create">True</field>
115         </record>
116
117         <record id="activity_b_a" model="workflow.activity">
118             <field name="wkf_id" ref="test_workflow_b"/>
119             <field name="flow_start">True</field>
120             <field name="flow_stop">True</field>
121             <field name="name">a</field>
122             <field name="kind">function</field>
123             <field name="action">write({'value': 1})</field>
124         </record>
125
126         <!-- Workflow C (a single activity):
127
128             a
129
130         The function is not run when the kind is dummy and no action_id is provided.
131         -->
132         <record id="test_workflow_c" model="workflow">
133             <field name="name">test.workflow.c</field>
134             <field name="osv">test.workflow.model.c</field>
135             <field name="on_create">True</field>
136         </record>
137
138         <record id="activity_c_a" model="workflow.activity">
139             <field name="wkf_id" ref="test_workflow_c"/>
140             <field name="flow_start">True</field>
141             <field name="flow_stop">True</field>
142             <field name="name">a</field>
143             <field name="kind">dummy</field>
144             <field name="action">write({'value': 1})</field>
145         </record>
146
147         <!-- Workflow D (a single activity):
148
149             a
150
151         The function is run when the kind is stopall and no action_id is provided.
152         -->
153         <record id="test_workflow_d" model="workflow">
154             <field name="name">test.workflow.d</field>
155             <field name="osv">test.workflow.model.d</field>
156             <field name="on_create">True</field>
157         </record>
158
159         <record id="activity_d_a" model="workflow.activity">
160             <field name="wkf_id" ref="test_workflow_d"/>
161             <field name="flow_start">True</field>
162             <field name="flow_stop">True</field>
163             <field name="name">a</field>
164             <field name="kind">stopall</field>
165             <field name="action">write({'value': 1})</field>
166         </record>
167
168         <!-- Workflow E:
169
170             a -True-> b
171
172         Both activities are run when the workflow is instanciated.
173         -->
174         <record id="test_workflow_e" model="workflow">
175             <field name="name">test.workflow.e</field>
176             <field name="osv">test.workflow.model.e</field>
177             <field name="on_create">True</field>
178         </record>
179
180         <record id="activity_e_a" model="workflow.activity">
181             <field name="wkf_id" ref="test_workflow_e"/>
182             <field name="flow_start">True</field>
183             <field name="name">a</field>
184             <field name="kind">function</field>
185             <field name="action">write({'value': 1})</field>
186         </record>
187         <record id="activity_e_b" model="workflow.activity">
188             <field name="wkf_id" ref="test_workflow_e"/>
189             <field name="flow_stop">True</field>
190             <field name="name">b</field>
191             <field name="kind">function</field>
192             <field name="action">write({'value': 2})</field>
193         </record>
194
195         <record id="trans_e_a_b" model="workflow.transition">
196             <field name="act_from" ref="activity_e_a"/>
197             <field name="act_to" ref="activity_e_b"/>
198         </record>
199
200         <!-- Workflow F:
201
202             a -signal-> b
203
204         Same as E but with a signal on the transition.
205         -->
206         <record id="test_workflow_f" model="workflow">
207             <field name="name">test.workflow.f</field>
208             <field name="osv">test.workflow.model.f</field>
209             <field name="on_create">True</field>
210         </record>
211
212         <record id="activity_f_a" model="workflow.activity">
213             <field name="wkf_id" ref="test_workflow_f"/>
214             <field name="flow_start">True</field>
215             <field name="name">a</field>
216             <field name="kind">function</field>
217             <field name="action">write({'value': 1})</field>
218         </record>
219         <record id="activity_f_b" model="workflow.activity">
220             <field name="wkf_id" ref="test_workflow_f"/>
221             <field name="flow_stop">True</field>
222             <field name="name">b</field>
223             <field name="kind">function</field>
224             <field name="action">write({'value': 2})</field>
225         </record>
226
227         <record id="trans_f_a_b" model="workflow.transition">
228             <field name="act_from" ref="activity_f_a"/>
229             <field name="act_to" ref="activity_f_b"/>
230             <field name="signal">a-b</field>
231         </record>
232
233         <!-- Workflow G:
234
235             a -False-> b
236
237         -->
238         <record id="test_workflow_g" model="workflow">
239             <field name="name">test.workflow.g</field>
240             <field name="osv">test.workflow.model.g</field>
241             <field name="on_create">True</field>
242         </record>
243
244         <record id="activity_g_a" model="workflow.activity">
245             <field name="wkf_id" ref="test_workflow_g"/>
246             <field name="flow_start">True</field>
247             <field name="name">a</field>
248             <field name="kind">function</field>
249             <field name="action">write({'value': 1})</field>
250         </record>
251         <record id="activity_g_b" model="workflow.activity">
252             <field name="wkf_id" ref="test_workflow_g"/>
253             <field name="flow_stop">True</field>
254             <field name="name">b</field>
255             <field name="kind">function</field>
256             <field name="action">write({'value': 2})</field>
257         </record>
258
259         <record id="trans_g_a_b" model="workflow.transition">
260             <field name="act_from" ref="activity_g_a"/>
261             <field name="act_to" ref="activity_g_b"/>
262             <field name="condition">False</field>
263         </record>
264
265         <!-- Workflow H:
266
267             a or  -> b { value: 2 } 
268                  `-> c { value: 2 }
269
270         Whether the action of b or c is exectued last is non-deterministic.
271
272         -->
273         <record id="test_workflow_h" model="workflow">
274             <field name="name">test.workflow.h</field>
275             <field name="osv">test.workflow.model.h</field>
276             <field name="on_create">True</field>
277         </record>
278
279         <record id="activity_h_a" model="workflow.activity">
280             <field name="wkf_id" ref="test_workflow_h"/>
281             <field name="flow_start">True</field>
282             <field name="name">a</field>
283             <field name="kind">function</field>
284             <field name="action">write({'value': 1})</field>
285             <field name="split_mode">OR</field>
286         </record>
287         <record id="activity_h_b" model="workflow.activity">
288             <field name="wkf_id" ref="test_workflow_h"/>
289             <field name="flow_stop">True</field>
290             <field name="name">b</field>
291             <field name="kind">function</field>
292             <field name="action">write({'value': 2})</field>
293         </record>
294         <record id="activity_h_c" model="workflow.activity">
295             <field name="wkf_id" ref="test_workflow_h"/>
296             <field name="flow_stop">True</field>
297             <field name="name">c</field>
298             <field name="kind">function</field>
299             <field name="action">write({'value': 2})</field>
300         </record>
301
302         <record id="trans_h_a_b" model="workflow.transition">
303             <field name="act_from" ref="activity_h_a"/>
304             <field name="act_to" ref="activity_h_b"/>
305         </record>
306         <record id="trans_h_a_c" model="workflow.transition">
307             <field name="act_from" ref="activity_h_a"/>
308             <field name="act_to" ref="activity_h_c"/>
309         </record>
310
311         <!-- Workflow I:
312
313             a or -> b { value: 2 } 
314                  `false> c { value: 3 }
315
316         -->
317         <record id="test_workflow_i" model="workflow">
318             <field name="name">test.workflow.i</field>
319             <field name="osv">test.workflow.model.i</field>
320             <field name="on_create">True</field>
321         </record>
322
323         <record id="activity_i_a" model="workflow.activity">
324             <field name="wkf_id" ref="test_workflow_i"/>
325             <field name="flow_start">True</field>
326             <field name="name">a</field>
327             <field name="kind">function</field>
328             <field name="action">write({'value': 1})</field>
329             <field name="split_mode">OR</field>
330         </record>
331         <record id="activity_i_b" model="workflow.activity">
332             <field name="wkf_id" ref="test_workflow_i"/>
333             <field name="flow_stop">True</field>
334             <field name="name">b</field>
335             <field name="kind">function</field>
336             <field name="action">write({'value': 2})</field>
337         </record>
338         <record id="activity_i_c" model="workflow.activity">
339             <field name="wkf_id" ref="test_workflow_i"/>
340             <field name="flow_stop">True</field>
341             <field name="name">c</field>
342             <field name="kind">function</field>
343             <field name="action">write({'value': 3})</field>
344         </record>
345
346         <record id="trans_i_a_b" model="workflow.transition">
347             <field name="act_from" ref="activity_i_a"/>
348             <field name="act_to" ref="activity_i_b"/>
349         </record>
350         <record id="trans_i_a_c" model="workflow.transition">
351             <field name="act_from" ref="activity_i_a"/>
352             <field name="act_to" ref="activity_i_c"/>
353             <field name="condition">False</field>
354         </record>
355
356         <!-- Workflow J:
357
358             a and -> b { value: 2 } 
359                   `False> c { value: 3 }
360
361         This will stay in a because all transitions should be True at the same time.
362
363         -->
364         <record id="test_workflow_j" model="workflow">
365             <field name="name">test.workflow.j</field>
366             <field name="osv">test.workflow.model.j</field>
367             <field name="on_create">True</field>
368         </record>
369
370         <record id="activity_j_a" model="workflow.activity">
371             <field name="wkf_id" ref="test_workflow_j"/>
372             <field name="flow_start">True</field>
373             <field name="name">a</field>
374             <field name="kind">function</field>
375             <field name="action">write({'value': 1})</field>
376             <field name="split_mode">AND</field>
377         </record>
378         <record id="activity_j_b" model="workflow.activity">
379             <field name="wkf_id" ref="test_workflow_j"/>
380             <field name="flow_stop">True</field>
381             <field name="name">b</field>
382             <field name="kind">function</field>
383             <field name="action">write({'value': 2})</field>
384         </record>
385         <record id="activity_j_c" model="workflow.activity">
386             <field name="wkf_id" ref="test_workflow_j"/>
387             <field name="flow_stop">True</field>
388             <field name="name">c</field>
389             <field name="kind">function</field>
390             <field name="action">write({'value': 3})</field>
391         </record>
392
393         <record id="trans_j_a_b" model="workflow.transition">
394             <field name="act_from" ref="activity_j_a"/>
395             <field name="act_to" ref="activity_j_b"/>
396         </record>
397         <record id="trans_j_a_c" model="workflow.transition">
398             <field name="act_from" ref="activity_j_a"/>
399             <field name="act_to" ref="activity_j_c"/>
400             <field name="condition">False</field>
401         </record>
402
403         <!-- Workflow K:
404
405             a xor -> b { value: 2 } 
406                   `> c { value: 2 }
407
408         Only one (truish) transition is taken with a XOR.
409
410         -->
411         <record id="test_workflow_k" model="workflow">
412             <field name="name">test.workflow.k</field>
413             <field name="osv">test.workflow.model.k</field>
414             <field name="on_create">True</field>
415         </record>
416
417         <record id="activity_k_a" model="workflow.activity">
418             <field name="wkf_id" ref="test_workflow_k"/>
419             <field name="flow_start">True</field>
420             <field name="name">a</field>
421             <field name="kind">function</field>
422             <field name="action">write({'value': 1})</field>
423             <field name="split_mode">XOR</field>
424         </record>
425         <record id="activity_k_b" model="workflow.activity">
426             <field name="wkf_id" ref="test_workflow_k"/>
427             <field name="flow_stop">True</field>
428             <field name="name">b</field>
429             <field name="kind">function</field>
430             <field name="action">write({'value': 2})</field>
431         </record>
432         <record id="activity_k_c" model="workflow.activity">
433             <field name="wkf_id" ref="test_workflow_k"/>
434             <field name="flow_stop">True</field>
435             <field name="name">c</field>
436             <field name="kind">function</field>
437             <field name="action">write({'value': 2})</field>
438         </record>
439
440         <record id="trans_k_a_b" model="workflow.transition">
441             <field name="act_from" ref="activity_k_a"/>
442             <field name="act_to" ref="activity_k_b"/>
443         </record>
444         <record id="trans_k_a_c" model="workflow.transition">
445             <field name="act_from" ref="activity_k_a"/>
446             <field name="act_to" ref="activity_k_c"/>
447         </record>
448
449         <!-- Workflow L:
450
451             a -> xor c { value: 3 }
452             b ´
453             a -> and d { value: 3 }
454             b ´
455
456         c is run for each incoming (and taken) transition.
457         d is run once when all its incoming transitions are taken at the same time.
458
459         -->
460         <record id="test_workflow_l" model="workflow">
461             <field name="name">test.workflow.l</field>
462             <field name="osv">test.workflow.model.l</field>
463             <field name="on_create">True</field>
464         </record>
465
466         <record id="activity_l_a" model="workflow.activity">
467             <field name="wkf_id" ref="test_workflow_l"/>
468             <field name="flow_start">True</field>
469             <field name="name">a</field>
470             <field name="kind">function</field>
471             <field name="action">write({'value': 1})</field>
472             <field name="split_mode">OR</field>
473         </record>
474         <record id="activity_l_b" model="workflow.activity">
475             <field name="wkf_id" ref="test_workflow_l"/>
476             <field name="flow_start">True</field>
477             <field name="name">b</field>
478             <field name="kind">function</field>
479             <field name="action">write({'value': 2})</field>
480             <field name="split_mode">OR</field>
481         </record>
482         <record id="activity_l_c" model="workflow.activity">
483             <field name="wkf_id" ref="test_workflow_l"/>
484             <field name="flow_stop">True</field>
485             <field name="name">c</field>
486             <field name="kind">function</field>
487             <field name="action">write({'value': 3})</field>
488             <field name="join_mode">XOR</field>
489         </record>
490         <record id="activity_l_d" model="workflow.activity">
491             <field name="wkf_id" ref="test_workflow_l"/>
492             <field name="flow_stop">True</field>
493             <field name="name">d</field>
494             <field name="kind">function</field>
495             <field name="action">write({'value': 3})</field>
496             <field name="join_mode">AND</field>
497         </record>
498
499         <record id="trans_l_a_c" model="workflow.transition">
500             <field name="act_from" ref="activity_l_a"/>
501             <field name="act_to" ref="activity_l_c"/>
502         </record>
503         <record id="trans_l_b_c" model="workflow.transition">
504             <field name="act_from" ref="activity_l_b"/>
505             <field name="act_to" ref="activity_l_c"/>
506         </record>
507
508         <record id="trans_l_a_d" model="workflow.transition">
509             <field name="act_from" ref="activity_l_a"/>
510             <field name="act_to" ref="activity_l_d"/>
511         </record>
512         <record id="trans_l_b_d" model="workflow.transition">
513             <field name="act_from" ref="activity_l_b"/>
514             <field name="act_to" ref="activity_l_d"/>
515         </record>
516     </data>
517 </openerp>