[IMP] marketing_campaign: forbid creation of activities from transitions
[odoo/odoo.git] / addons / marketing_campaign / marketing_campaign_view.xml
1 <?xml version="1.0"?>
2 <openerp>
3     <data noupdate="1">
4
5         <record id="action_client_marketing_menu" model="ir.actions.client">
6             <field name="name">Open Marketing Menu</field>
7             <field name="tag">reload</field>
8             <field name="params" eval="{'menu_id': ref('base.marketing_menu')}"/>
9         </record>
10
11         <record id="base.open_menu" model="ir.actions.todo">
12             <field name="action_id" ref="action_client_marketing_menu"/>
13             <field name="state">open</field>
14         </record>
15
16     </data>
17     <data>
18
19     <!-- Marketing Campaign -->
20     
21     <record id="act_marketing_campaing_segment_opened" model="ir.actions.act_window">
22         <field name="res_model">marketing.campaign.segment</field>
23         <field name="view_type">form</field>
24         <field name="name">Segments</field>
25         <field name="view_mode">tree,form</field>
26         <field name="context">{'search_default_campaign_id': [active_id], 'default_campaign_id': active_id}</field>
27     </record>
28     
29     <!-- Campaign Follow-ups -->
30         
31     <record id="act_marketing_campaing_followup" model="ir.actions.act_window">
32         <field name="res_model">marketing.campaign.workitem</field>
33         <field name="view_type">form</field>
34         <field name="name">Workitems</field>
35         <field name="view_mode">tree,form</field>
36         <field name="context">{'search_default_campaign_id': [active_id], 'default_campaign_id': active_id}</field>
37     </record>
38     
39     <!-- Campaign Statistics -->
40     
41     <record id="act_marketing_campaing_stat" model="ir.actions.act_window" >
42         <field name="res_model">campaign.analysis</field>
43         <field name="view_type">form</field>
44         <field name="name">Campaign Follow-up</field>
45         <field name="view_mode">tree,form</field>
46         <field name="context">{'search_default_campaign_id': [active_id], 'default_campaign_id': active_id}</field>
47     </record>
48
49     <!-- Campaign Followups -->
50
51     <record model="ir.ui.view" id="view_marketing_campaign_form">
52         <field name="name">marketing.campaign.form</field>
53         <field name="model">marketing.campaign</field>
54         <field name="arch" type="xml">
55             <form string="Marketing Campaign" version="7.0">
56             <header>
57                 <button name="state_running_set" string="Run" states="draft" class="oe_highlight"/>
58                 <button name="state_done_set" string="Done" states="running" class="oe_highlight"/>
59                 <button name="state_draft_set" string="Set to Draft" states="done,cancelled"/>
60                 <button name="state_cancel_set" string="Cancel Campaign" states="running"/>
61                 <field name="state" readonly="1" widget="statusbar" statusbar_visible="draft,running,done"/>
62             </header>
63             <sheet string="Campaign">
64                 <div class="oe_right oe_button_box" name="button_box">
65                     <button type="action"
66                         name="%(act_marketing_campaing_stat)d"
67                         string="Campaign Statistics"/>
68                     <button type="action"
69                         name="%(act_marketing_campaing_segment_opened)d"
70                         string="Segments"/>  
71                     <button type="action"
72                         name="%(act_marketing_campaing_followup)d"
73                         string="Follow-Up"/>
74                 </div>
75                 <div class="oe_title">
76                     <label for="name" class="oe_edit_only"/>
77                     <h1><field name="name" class="oe_inline"/></h1>
78                 </div>
79                 <group>
80                     <group>
81                         <field name="mode"/>
82                         <field name="fixed_cost"/>
83                     </group>
84                     <group>
85                         <field name="object_id"/>
86                         <field name="partner_field_id"/>
87                         <field name="unique_field_id"/>
88                     </group>
89                 </group>
90                 <separator string="Activities"/>
91                 <field name="activity_ids" context="{'default_object_id': object_id, 'default_campaign_id': active_id}"/>
92             </sheet>
93             </form>
94         </field>
95     </record>
96
97     <record model="ir.ui.view" id="view_marketing_campaign_tree">
98         <field name="name">marketing.campaign.tree</field>
99         <field name="model">marketing.campaign</field>
100         <field name="arch" type="xml">
101             <tree colors="blue:state == 'draft';black:state == 'running';gray:state in ('done','cancelled')" string="Campaigns">
102                 <field name="name"/>
103                 <field name="object_id"/>
104                 <field name="mode"/>
105                 <field name="fixed_cost"/>
106                 <field name="state"/>
107             </tree>
108         </field>
109     </record>
110
111     <record id="view_marketing_campaign_diagram" model="ir.ui.view">
112         <field name="name">marketing.campaign.diagram</field>
113         <field name="model">marketing.campaign</field>
114         <field name="arch" type="xml">
115             <diagram string="Campaign Editor">
116                 <node object="marketing.campaign.activity" shape="rectangle:type=='subcampaign'" bgcolor="gray:start==True">
117                     <field name="name"/>
118                     <field name="type"/>
119                     <field name="start" invisible="1"/>
120                     <field name="condition" widget="char"/>
121                 </node>
122                 <arrow object="marketing.campaign.transition" source="activity_from_id" destination="activity_to_id" label="['name']">
123                     <field name="activity_from_id"/>
124                     <field name="activity_to_id"/>
125                     <field name="interval_nbr"/>
126                     <field name="interval_type"/>
127                 </arrow>
128             </diagram>
129         </field>
130     </record>
131
132     <record id="view_marketing_campaign_search" model="ir.ui.view">
133         <field name="name">marketing.campaign.search</field>
134         <field name="model">marketing.campaign</field>
135         <field name="arch" type="xml">
136             <search string="Campaigns">
137                 <field name="name" string="Campaign"/>
138                 <filter icon="terp-document-new" string="Draft" name="draft" domain="[('state','=','draft')]"/>
139                 <filter icon="terp-check" string="Running" domain="[('state','=','running')]"/>
140                 <separator/>
141                 <filter icon="terp-gtk-jump-to-rtl" string="Test Mode" name="test" domain="[('mode','=','test')]"/>
142                 <filter icon="terp-gtk-jump-to-rtl" string="Manual Mode" domain="[('mode','=','manual')]"/>
143                 <field name="object_id" string="Resource"/>
144                 <group expand="0" string="Group By...">
145                     <filter string="Resource" name="Object" icon="terp-accessories-archiver" context="{'group_by':'object_id'}"/>
146                     <filter string="Mode" name="Mode" icon="terp-gtk-jump-to-rtl" context="{'group_by':'mode'}"/>
147                     <filter string="Status" name="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
148                 </group>
149             </search>
150         </field>
151     </record>
152
153     <record model="ir.actions.act_window" id="action_marketing_campaign_form">
154         <field name="name">Campaigns</field>
155         <field name="type">ir.actions.act_window</field>
156         <field name="res_model">marketing.campaign</field>
157         <field name="view_type">form</field>
158         <field name="view_mode">tree,form,diagram</field>
159         <field name="view_id" ref="view_marketing_campaign_tree"/>
160         <field name="context">{'group_by': []}</field>
161         <field name="search_view_id" ref="view_marketing_campaign_search"/>
162         <field name="help" type="html">
163           <p class="oe_view_nocontent_create">
164             Click to create a marketing campaign.
165           </p><p>
166             OpenERP's marketing campaign allows you to automate communication
167             to your prospects. You can define a segment (set of conditions) on
168             your leads and partners to fullfil the campaign.
169           </p><p>
170             A campaign can have many activities like sending an email, printing
171             a letter, assigning to a team, etc. These activities are triggered
172             from specific situations; contact form, 10 days after first
173             contact, if a lead is not closed yet, etc.
174           </p>
175         </field>
176     </record>
177
178     <menuitem name="Campaigns" id="menu_marketing_campaign" parent="base.marketing_menu" groups="marketing.group_marketing_user,marketing.group_marketing_manager"/>
179     <menuitem id="menu_marketing_campaign_form" parent="menu_marketing_campaign" action="action_marketing_campaign_form" sequence="30"/>
180
181     <!-- Marketing Segments -->
182     <record model="ir.ui.view" id="view_marketing_campaign_segment_form">
183         <field name="name">marketing.campaign.segment.form</field>
184         <field name="model">marketing.campaign.segment</field>
185         <field name="arch" type="xml">
186             <form string="Marketing Campaign Segment" version="7.0">
187             <header>
188                 <button name="state_running_set" string="Run" states="draft" class="oe_highlight"/>
189                 <button name="state_done_set" string="Close" states="running" class="oe_highlight"/>
190                 <button name="state_draft_set" string="Set to Draft" states="done,cancelled"/>
191                 <button name="state_cancel_set" string="Cancel Segment" states="running"/>
192                 <field name="state" readonly="1" widget="statusbar" statusbar_visible="draft,running,done"/>
193             </header>
194             <sheet string="Segments" >
195                 <group>
196                     <group>
197                         <field name="name"/>
198                         <field name="campaign_id" on_change="onchange_campaign_id(campaign_id)"/>
199                         <field name="object_id" invisible="1"/>
200                         <field name="sync_mode" required="True"/>
201                        <label for="sync_last_date"/>
202                        <div>
203                            <field name="sync_last_date" class="oe_inline"/>
204                            <button string="Synchronize Manually" states="running" name="synchroniz" type="object"/>
205                        </div>
206                        <field name="date_next_sync"/>
207                     </group>
208                     <group>
209                         <field name="ir_filter_id"/>
210                         <field name="date_run" readonly="1"/>
211                         <field name="date_done" readonly="1"/>
212                     </group>
213                 </group>
214             </sheet>
215             </form>
216         </field>
217     </record>
218
219     <record model="ir.ui.view" id="view_marketing_campaign_segment_tree">
220         <field name="name">marketing.campaign.segment.tree</field>
221         <field name="model">marketing.campaign.segment</field>
222         <field name="arch" type="xml">
223             <tree colors="blue:state == 'draft';black:state == 'running';gray:state in ('done','cancelled')" string="Segments">
224                 <field name="name"/>
225                 <field name="campaign_id"/>
226                 <field name="date_run"/>
227                 <field name="sync_last_date"/>
228                 <field name="state"/>
229             </tree>
230         </field>
231     </record>
232
233     <record id="view_marketing_campaign_segment_search" model="ir.ui.view">
234         <field name="name">marketing.campaign.segment.search</field>
235         <field name="model">marketing.campaign.segment</field>
236         <field name="arch" type="xml">
237             <search string="Segments">
238                 <field name="name" string="Segment"/>
239                 <field name="date_run"/>
240                 <filter icon="terp-check" string="Running" name="running" domain="[('state','=','running')]"/>
241                 <filter icon="terp-document-new" string="Draft" domain="[('state','=','draft')]"/>
242                 <separator/>
243                 <filter icon="terp-gtk-jump-to-ltr" string="Newly Created" help="Sync mode: only records created after last sync" domain="[('sync_mode','=','create_date')]"/>
244                 <filter icon="terp-stock_effects-object-colorize" string="Newly Modified" help="Sync mode: only records updated after last sync" domain="[('sync_mode','=','write_date')]"/>
245                 <filter icon="terp-emblem-documents" string="All" help="Sync mode: all records" domain="[('sync_mode','=','all')]"/>
246                 <field name="campaign_id"/>
247                 <field name="object_id"/>
248                 <group expand="0" string="Group By...">
249                     <filter string="Campaign" name="Campaign" icon="terp-gtk-jump-to-rtl" context="{'group_by':'campaign_id'}"/>
250                     <filter string="Status" name="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
251                     <filter string="Launch Month" name="Launch Date" icon="terp-go-month" context="{'group_by':'date_run'}"/>
252                 </group>
253             </search>
254         </field>
255     </record>
256
257     <record model="ir.actions.act_window" id="action_marketing_campaign_segment_form">
258         <field name="name">Segments</field>
259         <field name="type">ir.actions.act_window</field>
260         <field name="res_model">marketing.campaign.segment</field>
261         <field name="view_type">form</field>
262         <field name="view_mode">tree,form</field>
263         <field name="view_id" ref="view_marketing_campaign_segment_tree"/>
264         <field name="search_view_id" ref="view_marketing_campaign_segment_search"/>
265         <field name="context">{'group_by': []}</field>
266     </record>
267
268     <menuitem id="menu_marketing_campaign_segment_form" parent="menu_marketing_campaign" action="action_marketing_campaign_segment_form" sequence="20"/>
269
270     <!--
271         Marketing Activities
272         These views are not intended to be used outside the campaign context.
273     -->
274     <record model="ir.ui.view" id="view_marketing_campaign_activity_form">
275         <field name="name">marketing.campaign.activity.form</field>
276         <field name="model">marketing.campaign.activity</field>
277         <field name="arch" type="xml">
278             <form string="Activities" version="7.0">
279                 <group>
280                     <group>
281                         <field name="name"/>
282                         <field name="signal" groups="base.group_no_one"/>
283                         <field name="start"/>
284                         <field name="object_id" invisible="1"/>
285                         <field name="campaign_id" invisible="1" required="0"/>
286                     </group>
287                     <group>
288                         <field name="variable_cost"/>
289                         <field name="revenue"/>
290                     </group>
291                 </group>
292                 <group >
293                     <group>
294                         <field name="condition" widget="char"/>
295                         <field name="keep_if_condition_not_met"/>
296                     </group>
297                     <group>
298                         <field name="type"/>
299                         <field name="email_template_id" attrs="{'required':[('type','=','email')], 'invisible':[('type','!=','email')]}"
300                            context="{'default_model_id':object_id}"/>
301                         <field name="server_action_id" attrs="{'required':[('type','=','action')],'invisible':[('type','!=','action')]}" domain="[('model_id','=',object_id)]"/>
302                         <field name="report_id" attrs="{'required':[('type','=','report')],'invisible':[('type','!=','report')]}" context="{'object_id':object_id}"/>
303                         <field name="report_directory_id" attrs="{'required':[('type','=','report')],'invisible':[('type','!=','report')]}"/>
304                     </group>
305                 </group>
306                 <separator string="Previous Activities"/>
307                 <field name="from_ids" mode="tree" context="{'default_activity_to_id': active_id}">
308                     <tree string="Incoming Transitions" editable="bottom">
309                         <field name="activity_from_id" domain="[('campaign_id', '=', parent.campaign_id)]" options="{'no_create': True}" />
310                         <field name='trigger'/>
311                         <field name="interval_nbr"/>
312                         <field name="interval_type"/>
313                     </tree>
314                     <form string="Incoming Transitions" version="7.0">
315                         <group col="4">
316                             <field name="activity_from_id" domain="[('campaign_id', '=', parent.campaign_id)]" options="{'no_create': True}" />
317                             <field name='trigger'/>
318                             <field name="interval_nbr"/>
319                             <field name="interval_type"/>
320                         </group>
321                     </form>
322                 </field>
323                 <separator string="Next Activities"/>
324                 <field name="to_ids" mode="tree" context="{'default_activity_from_id': active_id}">
325                     <tree string="Outgoing Transitions" editable="bottom">
326                         <field name="activity_to_id" domain="[('campaign_id', '=', parent.campaign_id)]" options="{'no_create': True}" />
327                         <field name='trigger'/>
328                         <field name="interval_nbr"/>
329                         <field name="interval_type"/>
330                     </tree>
331                     <form string="Outgoing Transitions" version="7.0">
332                         <group col="4">
333                             <field name="activity_to_id" domain="[('campaign_id', '=', parent.campaign_id)]" options="{'no_create': True}" />
334                             <field name='trigger'/>
335                             <field name="interval_nbr"/>
336                             <field name="interval_type"/>
337                         </group>
338                     </form>
339                 </field>
340             </form>
341         </field>
342     </record>
343
344     <record model="ir.ui.view" id="view_marketing_campaign_activity_tree">
345         <field name="name">marketing.campaign.activity.tree</field>
346         <field name="model">marketing.campaign.activity</field>
347         <field name="arch" type="xml">
348             <tree string="Activities">
349                 <field name="name"/>
350                 <field name="condition"/>
351                 <field name="type"/>
352                 <field name="start"/>
353             </tree>
354         </field>
355     </record>
356
357
358     <!-- Marketing Workitems -->
359     <record model="ir.ui.view" id="view_marketing_campaign_workitem_tree">
360         <field name="name">marketing.campaign.workitem.tree</field>
361         <field name="model">marketing.campaign.workitem</field>
362         <field name="arch" type="xml">
363             <tree colors="red:state == 'exception';black:state == 'todo';gray:state == 'cancelled'" string="Marketing Campaign Activities">
364                 <field name="campaign_id"/>
365                 <field name="segment_id"/>
366                 <field name="activity_id"/>
367                 <field name="object_id" invisible="1"/>
368                 <field name="res_id" invisible="1"/>
369                 <field name="res_name"/>
370                 <field name="partner_id"/>
371                 <field name="date"/>
372                 <field name="state"/>
373                 <button string="Cancel" states="todo" name="button_cancel" type="object" icon="terp-gtk-stop"/>
374                 <button string="Preview" states="todo" name="preview" icon="gtk-zoom-fit" type="object"/>
375                 <button string="Process" states="todo" name="process" type="object" icon="terp-gtk-go-back-rtl"/>
376             </tree>
377         </field>
378     </record>
379
380     <record model="ir.ui.view" id="view_marketing_campaign_workitem_form">
381         <field name="name">marketing.campaign.workitem.form</field>
382         <field name="model">marketing.campaign.workitem</field>
383         <field name="arch" type="xml">
384             <form string="Marketing Campaign Activities" version="7.0">
385             <header>
386                 <button string="Process" states="todo" name="process" type="object"/>
387                 <button string="Reset" states="exception,cancelled" name="button_draft" type="object"/>
388                 <button string="Cancel Workitem" states="todo,exception" name="button_cancel" type="object"/>
389                 <field name="state" readonly="True" widget="statusbar" statusbar_visible="todo,done" statusbar_colors='{"exception":"red"}'/>
390                 <button string="Preview" states="todo" name="preview" icon="gtk-zoom-fit" type="object"/>
391             </header>
392             <sheet>
393                 <group>
394                     <group>
395                         <field name="campaign_id"/>
396                         <field name="segment_id"/>
397                         <field name="activity_id" context="{'segment_id':segment_id}"/>
398                         <field name="date"/>
399                     </group>
400                     <group>
401                         <field name="object_id" readonly="True"/>
402                         <field name="res_name"/>
403                         <field name="res_id"/>
404                         <field name="partner_id"/>
405                     </group>
406                 </group>
407                 <group attrs="{'invisible':[('state','!=','exception')]}" string="Error Message">
408                     <field name="error_msg" nolabel="1" colspan="2"/>
409                 </group>
410             </sheet>
411             </form>
412         </field>
413     </record>
414
415     <record id="view_marketing_campaign_workitem_search" model="ir.ui.view">
416         <field name="name">marketing.campaign.workitem.search</field>
417         <field name="model">marketing.campaign.workitem</field>
418         <field name="arch" type="xml">
419             <search string="Marketing Campaign Activities">
420                 <field name="res_name" string="Marketing Campaign Activity"/>
421                 <field name="date"/>
422                 <filter icon="terp-gtk-go-back-rtl" string="To Do" name="todo" domain="[('state','=','todo')]"/>
423                 <filter icon="terp-emblem-important" string="Exception" domain="[('state','=','exception')]"/>
424                 <field name="campaign_id"/>
425                 <field name="segment_id"/>
426                 <field name="object_id"/>
427                 <field name="partner_id"/>
428                 <field name="res_id"/>
429                 <group expand="0" string="Group By...">
430                     <filter string="Campaign" name="campaign" icon="terp-gtk-jump-to-rtl" context="{'group_by':'campaign_id'}"/>
431                     <filter string="Segment" name="segment" icon="terp-stock_symbol-selection" context="{'group_by':'segment_id'}"/>
432                     <filter string="Activity" name="activity" icon="terp-stock_align_left_24" context="{'group_by':'activity_id'}"/>
433                     <filter string="Resource" name="resource" icon="terp-accessories-archiver" context="{'group_by':'object_id'}"/>
434                     <filter string="Resource ID" name="res_id" icon="terp-accessories-archiver" context="{'group_by':'res_id'}"/>
435                     <filter string="Status" name="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
436                     <filter string="Execution Month" name="Date" icon="terp-go-month" context="{'group_by':'date'}"/>
437                 </group>
438             </search>
439         </field>
440     </record>
441
442     <record model="ir.actions.act_window" id="action_marketing_campaign_workitem">
443         <field name="name">Campaign Follow-up</field>
444         <field name="type">ir.actions.act_window</field>
445         <field name="res_model">marketing.campaign.workitem</field>
446         <field name="view_type">form</field>
447         <field name="view_mode">tree,form</field>
448         <field name="view_id" ref="view_marketing_campaign_workitem_tree"/>
449         <field name="search_view_id" ref="view_marketing_campaign_workitem_search"/>
450         <field name="context">{'group_by': []}</field>
451     </record>
452
453     <menuitem id="menu_action_marketing_campaign_workitem" parent="menu_marketing_campaign" action="action_marketing_campaign_workitem" sequence="10"/>
454
455     </data>
456 </openerp>