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"
msgstr "Campanya"
msgctxt "field:sale.opportunity.campaign,childs:"
msgid "Children"
msgstr "Fills"
msgctxt "field:sale.opportunity.campaign,create_date:"
msgid "Create Date"
msgstr "Data de creació"
msgstr "Data creació"
msgctxt "field:sale.opportunity.campaign,create_uid:"
msgid "Create User"
@ -30,6 +34,10 @@ msgctxt "field:sale.opportunity.campaign,name:"
msgid "Name"
msgstr "Nom"
msgctxt "field:sale.opportunity.campaign,parent:"
msgid "Parent"
msgstr "Pare"
msgctxt "field:sale.opportunity.campaign,parties:"
msgid "Parties"
msgstr "Tercers"
@ -54,17 +62,49 @@ msgctxt "field:sale.opportunity.campaign,write_uid:"
msgid "Write User"
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:"
msgid "Campaign"
msgstr "Campanya"
msgctxt "field:sale.opportunity.campaign-product.product,create_date:"
msgid "Create Date"
msgstr "Data de creació"
msgstr "Data creació"
msgctxt "field:sale.opportunity.campaign-product.product,create_uid:"
msgid "Create User"
msgstr "Usuari de creació"
msgstr "Usuari creació"
msgctxt "field:sale.opportunity.campaign-product.product,id:"
msgid "ID"
@ -90,24 +130,43 @@ msgctxt "field:sale.opportunity.create_campaign.start,campaign:"
msgid "Campaign"
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:"
msgid "ID"
msgstr "Identificador"
msgctxt "model:ir.action,name:act_leads_form"
msgid "Leads and Opportunities"
msgstr "Iniciatives i oportunitats"
msgctxt "help:sale.opportunity.create_campaign.start,create_leads:"
msgid ""
"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"
msgid "Sale Opportunity Campaign"
msgctxt "model:ir.action,name:act_opportunities_by_category"
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"
msgctxt "model:ir.action,name:wizard_create_campaign"
msgid "Create Campaign"
msgstr "Crea campanya"
msgctxt "model:ir.ui.menu,name:menu_sale_opportunity_campaign"
msgid "Opportunity Campaign"
msgctxt "model:ir.ui.menu,name:menu_opportunity_campaign_list"
msgid "Campaigns"
msgstr "Campanyes"
msgctxt "model:ir.ui.menu,name:menu_opportunity_campaign_tree"
msgid "Campaigns"
msgstr "Campanyes"
msgctxt "model:sale.opportunity.campaign,name:"
@ -134,6 +193,10 @@ msgctxt "view:sale.opportunity.campaign:"
msgid "Campaigns"
msgstr "Campanyes"
msgctxt "view:sale.opportunity.campaign:"
msgid "Children"
msgstr "Fills"
msgctxt "view:sale.opportunity.campaign:"
msgid "Create Leads"
msgstr "Crear iniciatives"
@ -142,6 +205,10 @@ msgctxt "view:sale.opportunity.create_campaign.start:"
msgid "Create Campaign"
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:"
msgid "Cancel"
msgstr "Cancel·lat"

View File

@ -6,6 +6,10 @@ msgctxt "field:sale.opportunity,campaign:"
msgid "Campaign"
msgstr "Campaña"
msgctxt "field:sale.opportunity.campaign,childs:"
msgid "Children"
msgstr "Hijas"
msgctxt "field:sale.opportunity.campaign,create_date:"
msgid "Create Date"
msgstr "Fecha de creación"
@ -30,6 +34,10 @@ msgctxt "field:sale.opportunity.campaign,name:"
msgid "Name"
msgstr "Nombre"
msgctxt "field:sale.opportunity.campaign,parent:"
msgid "Parent"
msgstr "Padre"
msgctxt "field:sale.opportunity.campaign,parties:"
msgid "Parties"
msgstr "Terceros"
@ -54,6 +62,38 @@ msgctxt "field:sale.opportunity.campaign,write_uid:"
msgid "Write User"
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:"
msgid "Campaign"
msgstr "Campaña"
@ -90,25 +130,44 @@ msgctxt "field:sale.opportunity.create_campaign.start,campaign:"
msgid "Campaign"
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:"
msgid "ID"
msgstr "Identificador"
msgctxt "model:ir.action,name:act_leads_form"
msgid "Leads and Opportunities"
msgstr "Iniciativas y oportunidades"
msgctxt "help:sale.opportunity.create_campaign.start,create_leads:"
msgid ""
"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"
msgid "Sale Opportunity Campaign"
msgstr "Campaña de oportunidades"
msgctxt "model:ir.action,name:act_opportunities_by_category"
msgid "Leads and Opportunities by Campaign"
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"
msgid "Create Campaign"
msgstr "Crear campaña"
msgctxt "model:ir.ui.menu,name:menu_sale_opportunity_campaign"
msgid "Opportunity Campaign"
msgstr "Campaña de oportunidades"
msgctxt "model:ir.ui.menu,name:menu_opportunity_campaign_list"
msgid "Campaigns"
msgstr "Campañas"
msgctxt "model:ir.ui.menu,name:menu_opportunity_campaign_tree"
msgid "Campaigns"
msgstr "Campañas"
msgctxt "model:sale.opportunity.campaign,name:"
msgid "Campaign"
@ -134,6 +193,10 @@ msgctxt "view:sale.opportunity.campaign:"
msgid "Campaigns"
msgstr "Campañas"
msgctxt "view:sale.opportunity.campaign:"
msgid "Children"
msgstr "Hijas"
msgctxt "view:sale.opportunity.campaign:"
msgid "Create Leads"
msgstr "Crear iniciativas"
@ -142,6 +205,10 @@ msgctxt "view:sale.opportunity.create_campaign.start:"
msgid "Create Campaign"
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:"
msgid "Cancel"
msgstr "Cancel·lar"

View File

@ -47,6 +47,10 @@ class Campaign(ModelSQL, ModelView):
'Campaign'
__name__ = 'sale.opportunity.campaign'
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')
start_date = fields.Date('Start 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
@ModelView.button
def create_leads(cls, campaigns):

View File

@ -4,36 +4,88 @@
<tryton>
<data>
<!-- 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="type">form</field>
<field name="name">sale_opportunity_campaign_form</field>
</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="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>
</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="res_model">sale.opportunity.campaign</field>
<field name="search_value"></field>
</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="view" ref="sale_opportunity_campaign_tree_view"/>
<field name="act_window" ref="act_sale_opportunity_campaign"/>
<field name="view" ref="opportunity_campaign_list_view"/>
<field name="act_window" ref="act_opportunity_campaign_list"/>
</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="view" ref="sale_opportunity_campaign_form_view"/>
<field name="act_window" ref="act_sale_opportunity_campaign"/>
<field name="view" ref="opportunity_campaign_form_view"/>
<field name="act_window" ref="act_opportunity_campaign_list"/>
</record>
<record model="ir.model.access" id="access_sale_opportunity_campaign">
<field name="model" search="[('model', '=', 'sale.opportunity.campaign')]"/>
<record model="ir.action.act_window"
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="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
@ -47,12 +99,14 @@
<field name="inherit" ref="sale_opportunity.opportunity_view_form"/>
<field name="name">sale_opportunity_form</field>
</record>
<record model="ir.ui.view" id="sale_opportunity_tree_view">
<field name="model">sale.opportunity</field>
<field name="inherit" ref="sale_opportunity.opportunity_view_tree"/>
<field name="name">sale_opportunity_tree</field>
</record>
<!-- sale.opportunity.create_campaign -->
<record model="ir.ui.view" id="create_campaign_start_view_form">
<field name="model">sale.opportunity.create_campaign.start</field>
<field name="type">form</field>
@ -75,21 +129,11 @@
</record>
<!-- Menus -->
<menuitem action="act_sale_opportunity_campaign"
id="menu_sale_opportunity_campaign"
parent="sale.menu_configuration"
sequence="1"
name="Opportunity Campaign"/>
<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>
<menuitem id="menu_opportunity_campaign_tree"
action="act_opportunity_campaign_tree"
parent="sale.menu_configuration" sequence="1"/>
<menuitem id="menu_opportunity_campaign_list"
action="act_opportunity_campaign_list"
parent="menu_opportunity_campaign_tree" sequence="1"/>
</data>
</tryton>

View File

@ -3,7 +3,10 @@
contains the full copyright notices and license terms. -->
<form string="Campaign">
<label name="name"/>
<field name="name" colspan="3"/>
<field name="name" colspan="3"/>
<label name="parent"/>
<field name="parent"/>
<newline/>
<label name="start_date"/>
<field name="start_date"/>
<label name="end_date"/>
@ -19,5 +22,8 @@ contains the full copyright notices and license terms. -->
<page name="products">
<field name="products" colspan="4"/>
</page>
<page string="Children" col="1" id="childs">
<field name="childs"/>
</page>
</notebook>
</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"?>
<!--The COPYRIGHT file at the top level of this repository
contains the full copyright notices and license terms. -->
<tree string="Campaigns">
<field name="name"/>
<field name="start_date"/>
<field name="end_date"/>
<!-- The COPYRIGHT file at the top level of this repository contains the full
copyright notices and license terms. -->
<tree string="Campaigns" keyword_open="1">
<field name="name"/>
<field name="start_date"/>
<field name="end_date"/>
<field name="parent" tree_invisible="1"/>
<field name="childs" tree_invisible="1"/>
</tree>