add hierarchical structure to campaigns

This commit is contained in:
?ngel ?lvarez 2014-08-19 16:32:40 +02:00
parent cd377d4323
commit f9a18907d3
7 changed files with 272 additions and 53 deletions

View file

@ -6,9 +6,13 @@ msgctxt "field:sale.opportunity,campaign:"
msgid "Campaign" msgid "Campaign"
msgstr "Campanya" msgstr "Campanya"
msgctxt "field:sale.opportunity.campaign,childs:"
msgid "Children"
msgstr "Fills"
msgctxt "field:sale.opportunity.campaign,create_date:" msgctxt "field:sale.opportunity.campaign,create_date:"
msgid "Create Date" msgid "Create Date"
msgstr "Data de creació" msgstr "Data creació"
msgctxt "field:sale.opportunity.campaign,create_uid:" msgctxt "field:sale.opportunity.campaign,create_uid:"
msgid "Create User" msgid "Create User"
@ -30,6 +34,10 @@ msgctxt "field:sale.opportunity.campaign,name:"
msgid "Name" msgid "Name"
msgstr "Nom" msgstr "Nom"
msgctxt "field:sale.opportunity.campaign,parent:"
msgid "Parent"
msgstr "Pare"
msgctxt "field:sale.opportunity.campaign,parties:" msgctxt "field:sale.opportunity.campaign,parties:"
msgid "Parties" msgid "Parties"
msgstr "Tercers" msgstr "Tercers"
@ -54,17 +62,49 @@ msgctxt "field:sale.opportunity.campaign,write_uid:"
msgid "Write User" msgid "Write User"
msgstr "Usuari modificació" msgstr "Usuari modificació"
msgctxt "field:sale.opportunity.campaign-party.party,campaing:"
msgid "Campaign"
msgstr "Campanya"
msgctxt "field:sale.opportunity.campaign-party.party,create_date:"
msgid "Create Date"
msgstr "Data creació"
msgctxt "field:sale.opportunity.campaign-party.party,create_uid:"
msgid "Create User"
msgstr "Usuari creació"
msgctxt "field:sale.opportunity.campaign-party.party,id:"
msgid "ID"
msgstr "Identificador"
msgctxt "field:sale.opportunity.campaign-party.party,party:"
msgid "Party"
msgstr "Tercer"
msgctxt "field:sale.opportunity.campaign-party.party,rec_name:"
msgid "Name"
msgstr "Nom"
msgctxt "field:sale.opportunity.campaign-party.party,write_date:"
msgid "Write Date"
msgstr "Data modificación"
msgctxt "field:sale.opportunity.campaign-party.party,write_uid:"
msgid "Write User"
msgstr "Usuari modificació"
msgctxt "field:sale.opportunity.campaign-product.product,campaing:" msgctxt "field:sale.opportunity.campaign-product.product,campaing:"
msgid "Campaign" msgid "Campaign"
msgstr "Campanya" msgstr "Campanya"
msgctxt "field:sale.opportunity.campaign-product.product,create_date:" msgctxt "field:sale.opportunity.campaign-product.product,create_date:"
msgid "Create Date" msgid "Create Date"
msgstr "Data de creació" msgstr "Data creació"
msgctxt "field:sale.opportunity.campaign-product.product,create_uid:" msgctxt "field:sale.opportunity.campaign-product.product,create_uid:"
msgid "Create User" msgid "Create User"
msgstr "Usuari de creació" msgstr "Usuari creació"
msgctxt "field:sale.opportunity.campaign-product.product,id:" msgctxt "field:sale.opportunity.campaign-product.product,id:"
msgid "ID" msgid "ID"
@ -90,24 +130,43 @@ msgctxt "field:sale.opportunity.create_campaign.start,campaign:"
msgid "Campaign" msgid "Campaign"
msgstr "Campanya" msgstr "Campanya"
msgctxt "field:sale.opportunity.create_campaign.start,create_leads:"
msgid "Create Leads"
msgstr "Crear iniciatives"
msgctxt "field:sale.opportunity.create_campaign.start,id:" msgctxt "field:sale.opportunity.create_campaign.start,id:"
msgid "ID" msgid "ID"
msgstr "Identificador" msgstr "Identificador"
msgctxt "model:ir.action,name:act_leads_form" msgctxt "help:sale.opportunity.create_campaign.start,create_leads:"
msgid "Leads and Opportunities" msgid ""
msgstr "Iniciatives i oportunitats" "If marked a lead will be created for each party and related to the party"
msgstr ""
"Si es marca es crearà una iniciativa per cada tercer i es relacionarà amb "
"aquest."
msgctxt "model:ir.action,name:act_sale_opportunity_campaign" msgctxt "model:ir.action,name:act_opportunities_by_category"
msgid "Sale Opportunity Campaign" msgid "Leads and Opportunities by Campaign"
msgstr "Iniciatives i oportunitats per campanya"
msgctxt "model:ir.action,name:act_opportunity_campaign_list"
msgid "Campaigns"
msgstr "Campanyes"
msgctxt "model:ir.action,name:act_opportunity_campaign_tree"
msgid "Campaigns"
msgstr "Campanyes" msgstr "Campanyes"
msgctxt "model:ir.action,name:wizard_create_campaign" msgctxt "model:ir.action,name:wizard_create_campaign"
msgid "Create Campaign" msgid "Create Campaign"
msgstr "Crea campanya" msgstr "Crea campanya"
msgctxt "model:ir.ui.menu,name:menu_sale_opportunity_campaign" msgctxt "model:ir.ui.menu,name:menu_opportunity_campaign_list"
msgid "Opportunity Campaign" msgid "Campaigns"
msgstr "Campanyes"
msgctxt "model:ir.ui.menu,name:menu_opportunity_campaign_tree"
msgid "Campaigns"
msgstr "Campanyes" msgstr "Campanyes"
msgctxt "model:sale.opportunity.campaign,name:" msgctxt "model:sale.opportunity.campaign,name:"
@ -134,6 +193,10 @@ msgctxt "view:sale.opportunity.campaign:"
msgid "Campaigns" msgid "Campaigns"
msgstr "Campanyes" msgstr "Campanyes"
msgctxt "view:sale.opportunity.campaign:"
msgid "Children"
msgstr "Fills"
msgctxt "view:sale.opportunity.campaign:" msgctxt "view:sale.opportunity.campaign:"
msgid "Create Leads" msgid "Create Leads"
msgstr "Crear iniciatives" msgstr "Crear iniciatives"
@ -142,6 +205,10 @@ msgctxt "view:sale.opportunity.create_campaign.start:"
msgid "Create Campaign" msgid "Create Campaign"
msgstr "Crea campanya" msgstr "Crea campanya"
msgctxt "wizard_button:sale.opportunity.create_campaign,start,create_:"
msgid "Create"
msgstr "Crea"
msgctxt "wizard_button:sale.opportunity.create_campaign,start,end:" msgctxt "wizard_button:sale.opportunity.create_campaign,start,end:"
msgid "Cancel" msgid "Cancel"
msgstr "Cancel·lat" msgstr "Cancel·lat"

View file

@ -6,6 +6,10 @@ msgctxt "field:sale.opportunity,campaign:"
msgid "Campaign" msgid "Campaign"
msgstr "Campaña" msgstr "Campaña"
msgctxt "field:sale.opportunity.campaign,childs:"
msgid "Children"
msgstr "Hijas"
msgctxt "field:sale.opportunity.campaign,create_date:" msgctxt "field:sale.opportunity.campaign,create_date:"
msgid "Create Date" msgid "Create Date"
msgstr "Fecha de creación" msgstr "Fecha de creación"
@ -30,6 +34,10 @@ msgctxt "field:sale.opportunity.campaign,name:"
msgid "Name" msgid "Name"
msgstr "Nombre" msgstr "Nombre"
msgctxt "field:sale.opportunity.campaign,parent:"
msgid "Parent"
msgstr "Padre"
msgctxt "field:sale.opportunity.campaign,parties:" msgctxt "field:sale.opportunity.campaign,parties:"
msgid "Parties" msgid "Parties"
msgstr "Terceros" msgstr "Terceros"
@ -54,6 +62,38 @@ msgctxt "field:sale.opportunity.campaign,write_uid:"
msgid "Write User" msgid "Write User"
msgstr "Usuario modificación" msgstr "Usuario modificación"
msgctxt "field:sale.opportunity.campaign-party.party,campaing:"
msgid "Campaign"
msgstr "Campaña"
msgctxt "field:sale.opportunity.campaign-party.party,create_date:"
msgid "Create Date"
msgstr "Fecha creación"
msgctxt "field:sale.opportunity.campaign-party.party,create_uid:"
msgid "Create User"
msgstr "Usuario creación"
msgctxt "field:sale.opportunity.campaign-party.party,id:"
msgid "ID"
msgstr "Identificador"
msgctxt "field:sale.opportunity.campaign-party.party,party:"
msgid "Party"
msgstr "Terceros"
msgctxt "field:sale.opportunity.campaign-party.party,rec_name:"
msgid "Name"
msgstr "Nombre"
msgctxt "field:sale.opportunity.campaign-party.party,write_date:"
msgid "Write Date"
msgstr "Fecha modificación"
msgctxt "field:sale.opportunity.campaign-party.party,write_uid:"
msgid "Write User"
msgstr "Usuario modificación"
msgctxt "field:sale.opportunity.campaign-product.product,campaing:" msgctxt "field:sale.opportunity.campaign-product.product,campaing:"
msgid "Campaign" msgid "Campaign"
msgstr "Campaña" msgstr "Campaña"
@ -90,25 +130,44 @@ msgctxt "field:sale.opportunity.create_campaign.start,campaign:"
msgid "Campaign" msgid "Campaign"
msgstr "Campaña" msgstr "Campaña"
msgctxt "field:sale.opportunity.create_campaign.start,create_leads:"
msgid "Create Leads"
msgstr "Crear iniciativas"
msgctxt "field:sale.opportunity.create_campaign.start,id:" msgctxt "field:sale.opportunity.create_campaign.start,id:"
msgid "ID" msgid "ID"
msgstr "Identificador" msgstr "Identificador"
msgctxt "model:ir.action,name:act_leads_form" msgctxt "help:sale.opportunity.create_campaign.start,create_leads:"
msgid "Leads and Opportunities" msgid ""
msgstr "Iniciativas y oportunidades" "If marked a lead will be created for each party and related to the party"
msgstr ""
"Si se marca se creará una iniciativa por cada tercero y se relacionará con "
"éste."
msgctxt "model:ir.action,name:act_sale_opportunity_campaign" msgctxt "model:ir.action,name:act_opportunities_by_category"
msgid "Sale Opportunity Campaign" msgid "Leads and Opportunities by Campaign"
msgstr "Campaña de oportunidades" msgstr "Iniciativas y oportunidades por campaña"
msgctxt "model:ir.action,name:act_opportunity_campaign_list"
msgid "Campaigns"
msgstr "Campañas"
msgctxt "model:ir.action,name:act_opportunity_campaign_tree"
msgid "Campaigns"
msgstr "Campañas"
msgctxt "model:ir.action,name:wizard_create_campaign" msgctxt "model:ir.action,name:wizard_create_campaign"
msgid "Create Campaign" msgid "Create Campaign"
msgstr "Crear campaña" msgstr "Crear campaña"
msgctxt "model:ir.ui.menu,name:menu_sale_opportunity_campaign" msgctxt "model:ir.ui.menu,name:menu_opportunity_campaign_list"
msgid "Opportunity Campaign" msgid "Campaigns"
msgstr "Campaña de oportunidades" msgstr "Campañas"
msgctxt "model:ir.ui.menu,name:menu_opportunity_campaign_tree"
msgid "Campaigns"
msgstr "Campañas"
msgctxt "model:sale.opportunity.campaign,name:" msgctxt "model:sale.opportunity.campaign,name:"
msgid "Campaign" msgid "Campaign"
@ -134,6 +193,10 @@ msgctxt "view:sale.opportunity.campaign:"
msgid "Campaigns" msgid "Campaigns"
msgstr "Campañas" msgstr "Campañas"
msgctxt "view:sale.opportunity.campaign:"
msgid "Children"
msgstr "Hijas"
msgctxt "view:sale.opportunity.campaign:" msgctxt "view:sale.opportunity.campaign:"
msgid "Create Leads" msgid "Create Leads"
msgstr "Crear iniciativas" msgstr "Crear iniciativas"
@ -142,6 +205,10 @@ msgctxt "view:sale.opportunity.create_campaign.start:"
msgid "Create Campaign" msgid "Create Campaign"
msgstr "Crear campaña" msgstr "Crear campaña"
msgctxt "wizard_button:sale.opportunity.create_campaign,start,create_:"
msgid "Create"
msgstr "Crear"
msgctxt "wizard_button:sale.opportunity.create_campaign,start,end:" msgctxt "wizard_button:sale.opportunity.create_campaign,start,end:"
msgid "Cancel" msgid "Cancel"
msgstr "Cancel·lar" msgstr "Cancel·lar"

View file

@ -47,6 +47,10 @@ class Campaign(ModelSQL, ModelView):
'Campaign' 'Campaign'
__name__ = 'sale.opportunity.campaign' __name__ = 'sale.opportunity.campaign'
name = fields.Char('Name', required=True) name = fields.Char('Name', required=True)
parent = fields.Many2One('sale.opportunity.campaign', 'Parent',
select=True)
childs = fields.One2Many('sale.opportunity.campaign', 'parent',
string='Children')
description = fields.Text('Description') description = fields.Text('Description')
start_date = fields.Date('Start Date') start_date = fields.Date('Start Date')
end_date = fields.Date('End Date') end_date = fields.Date('End Date')
@ -65,6 +69,27 @@ class Campaign(ModelSQL, ModelView):
}, },
}) })
def get_rec_name(self, name):
if self.parent:
return self.parent.get_rec_name(name) + ' / ' + self.name
else:
return self.name
@classmethod
def search_rec_name(cls, name, clause):
if isinstance(clause[2], basestring):
values = clause[2].split('/')
values.reverse()
domain = []
field = 'name'
for name in values:
domain.append((field, clause[1], name.strip()))
field = 'parent.' + field
else:
domain = [('name',) + tuple(clause[1:])]
ids = [w.id for w in cls.search(domain, order=[])]
return [('parent', 'child_of', ids)]
@classmethod @classmethod
@ModelView.button @ModelView.button
def create_leads(cls, campaigns): def create_leads(cls, campaigns):

View file

@ -4,36 +4,88 @@
<tryton> <tryton>
<data> <data>
<!-- sale.opportunity.campaign --> <!-- sale.opportunity.campaign -->
<record model="ir.ui.view" id="sale_opportunity_campaign_form_view"> <record model="ir.ui.view" id="opportunity_campaign_form_view">
<field name="model">sale.opportunity.campaign</field> <field name="model">sale.opportunity.campaign</field>
<field name="type">form</field> <field name="type">form</field>
<field name="name">sale_opportunity_campaign_form</field> <field name="name">sale_opportunity_campaign_form</field>
</record> </record>
<record model="ir.ui.view" id="sale_opportunity_campaign_tree_view"> <record model="ir.ui.view" id="opportunity_campaign_list_view">
<field name="model">sale.opportunity.campaign</field> <field name="model">sale.opportunity.campaign</field>
<field name="type">tree</field> <field name="type">tree</field>
<field name="priority" eval="10"/>
<field name="name">sale_opportunity_campaign_list</field>
</record>
<record model="ir.ui.view" id="opportunity_campaign_tree_view">
<field name="model">sale.opportunity.campaign</field>
<field name="type">tree</field>
<field name="priority" eval="20"/>
<field name="field_childs">childs</field>
<field name="name">sale_opportunity_campaign_tree</field> <field name="name">sale_opportunity_campaign_tree</field>
</record> </record>
<record model="ir.action.act_window" id="act_sale_opportunity_campaign"> <record model="ir.action.act_window"
id="act_opportunity_campaign_tree">
<field name="name">Campaigns</field>
<field name="res_model">sale.opportunity.campaign</field>
<field name="domain">[('parent', '=', None)]</field>
<field name="search_value"></field>
</record>
<record model="ir.action.act_window.view"
id="act_opportunity_campaign_tree_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="opportunity_campaign_tree_view"/>
<field name="act_window" ref="act_opportunity_campaign_tree"/>
</record>
<record model="ir.action.act_window.view"
id="act_opportunity_campaign_tree_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="opportunity_campaign_form_view"/>
<field name="act_window" ref="act_opportunity_campaign_tree"/>
</record>
<record model="ir.action.act_window"
id="act_opportunity_campaign_list">
<field name="name">Campaigns</field> <field name="name">Campaigns</field>
<field name="res_model">sale.opportunity.campaign</field> <field name="res_model">sale.opportunity.campaign</field>
<field name="search_value"></field> <field name="search_value"></field>
</record> </record>
<record model="ir.action.act_window.view" id="act_sale_opportunity_campaign_view1"> <record model="ir.action.act_window.view"
id="act_opportunity_campaign_list_view1">
<field name="sequence" eval="10"/> <field name="sequence" eval="10"/>
<field name="view" ref="sale_opportunity_campaign_tree_view"/> <field name="view" ref="opportunity_campaign_list_view"/>
<field name="act_window" ref="act_sale_opportunity_campaign"/> <field name="act_window" ref="act_opportunity_campaign_list"/>
</record> </record>
<record model="ir.action.act_window.view" id="act_sale_opportunity_campaign_view2"> <record model="ir.action.act_window.view"
id="act_opportunity_campaign_list_view2">
<field name="sequence" eval="20"/> <field name="sequence" eval="20"/>
<field name="view" ref="sale_opportunity_campaign_form_view"/> <field name="view" ref="opportunity_campaign_form_view"/>
<field name="act_window" ref="act_sale_opportunity_campaign"/> <field name="act_window" ref="act_opportunity_campaign_list"/>
</record> </record>
<record model="ir.model.access" id="access_sale_opportunity_campaign"> <record model="ir.action.act_window"
<field name="model" search="[('model', '=', 'sale.opportunity.campaign')]"/> id="act_opportunities_by_category">
<field name="name">Leads and Opportunities by Campaign</field>
<field name="res_model">sale.opportunity</field>
<field name="domain">[('campaign', 'child_of', Eval('active_ids'), 'parent')]</field>
</record>
<record model="ir.action.keyword"
id="act_opportunities_by_category_tree_keyword1">
<field name="keyword">tree_open</field>
<field name="model">sale.opportunity.campaign,-1</field>
<field name="action" ref="act_opportunities_by_category"/>
</record>
<record model="ir.action.keyword"
id="act_opportunities_by_category_list_keyword1">
<field name="keyword">form_relate</field>
<field name="model">sale.opportunity.campaign,-1</field>
<field name="action" ref="act_opportunities_by_category"/>
</record>
<record model="ir.model.access" id="access_opportunity_campaign">
<field name="model"
search="[('model', '=', 'sale.opportunity.campaign')]"/>
<field name="group" ref="sale_opportunity.group_opportunity"/> <field name="group" ref="sale_opportunity.group_opportunity"/>
<field name="perm_read" eval="True"/> <field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/> <field name="perm_write" eval="True"/>
@ -47,12 +99,14 @@
<field name="inherit" ref="sale_opportunity.opportunity_view_form"/> <field name="inherit" ref="sale_opportunity.opportunity_view_form"/>
<field name="name">sale_opportunity_form</field> <field name="name">sale_opportunity_form</field>
</record> </record>
<record model="ir.ui.view" id="sale_opportunity_tree_view"> <record model="ir.ui.view" id="sale_opportunity_tree_view">
<field name="model">sale.opportunity</field> <field name="model">sale.opportunity</field>
<field name="inherit" ref="sale_opportunity.opportunity_view_tree"/> <field name="inherit" ref="sale_opportunity.opportunity_view_tree"/>
<field name="name">sale_opportunity_tree</field> <field name="name">sale_opportunity_tree</field>
</record> </record>
<!-- sale.opportunity.create_campaign -->
<record model="ir.ui.view" id="create_campaign_start_view_form"> <record model="ir.ui.view" id="create_campaign_start_view_form">
<field name="model">sale.opportunity.create_campaign.start</field> <field name="model">sale.opportunity.create_campaign.start</field>
<field name="type">form</field> <field name="type">form</field>
@ -75,21 +129,11 @@
</record> </record>
<!-- Menus --> <!-- Menus -->
<menuitem action="act_sale_opportunity_campaign" <menuitem id="menu_opportunity_campaign_tree"
id="menu_sale_opportunity_campaign" action="act_opportunity_campaign_tree"
parent="sale.menu_configuration" parent="sale.menu_configuration" sequence="1"/>
sequence="1" <menuitem id="menu_opportunity_campaign_list"
name="Opportunity Campaign"/> action="act_opportunity_campaign_list"
parent="menu_opportunity_campaign_tree" sequence="1"/>
<record model="ir.action.act_window" id="act_leads_form">
<field name="name">Leads and Opportunities</field>
<field name="res_model">sale.opportunity</field>
<field name="domain">[('campaign', 'in', Eval('active_ids'))]</field>
</record>
<record model="ir.action.keyword" id="act_leads_form_keyword1">
<field name="keyword">form_relate</field>
<field name="model">sale.opportunity.campaign,-1</field>
<field name="action" ref="act_leads_form"/>
</record>
</data> </data>
</tryton> </tryton>

View file

@ -3,7 +3,10 @@
contains the full copyright notices and license terms. --> contains the full copyright notices and license terms. -->
<form string="Campaign"> <form string="Campaign">
<label name="name"/> <label name="name"/>
<field name="name" colspan="3"/> <field name="name" colspan="3"/>
<label name="parent"/>
<field name="parent"/>
<newline/>
<label name="start_date"/> <label name="start_date"/>
<field name="start_date"/> <field name="start_date"/>
<label name="end_date"/> <label name="end_date"/>
@ -19,5 +22,8 @@ contains the full copyright notices and license terms. -->
<page name="products"> <page name="products">
<field name="products" colspan="4"/> <field name="products" colspan="4"/>
</page> </page>
<page string="Children" col="1" id="childs">
<field name="childs"/>
</page>
</notebook> </notebook>
</form> </form>

View file

@ -0,0 +1,8 @@
<?xml version="1.0"?>
<!-- The COPYRIGHT file at the top level of this repository contains the full
copyright notices and license terms. -->
<tree string="Campaigns">
<field name="rec_name"/>
<field name="start_date"/>
<field name="end_date"/>
</tree>

View file

@ -1,8 +1,10 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!--The COPYRIGHT file at the top level of this repository <!-- The COPYRIGHT file at the top level of this repository contains the full
contains the full copyright notices and license terms. --> copyright notices and license terms. -->
<tree string="Campaigns"> <tree string="Campaigns" keyword_open="1">
<field name="name"/> <field name="name"/>
<field name="start_date"/> <field name="start_date"/>
<field name="end_date"/> <field name="end_date"/>
<field name="parent" tree_invisible="1"/>
<field name="childs" tree_invisible="1"/>
</tree> </tree>