@@ -395,9 +395,9 @@ class marketing_campaign_workitem(osv.osv):
|
||||
'object': wi.activity_id,
|
||||
'transition': wi.activity_id.to_ids
|
||||
}
|
||||
expr = eval(str(wi.activity_id.condition), eval_context)
|
||||
if expr:
|
||||
try:
|
||||
try:
|
||||
expr = eval(str(wi.activity_id.condition), eval_context)
|
||||
if expr:
|
||||
result = True
|
||||
if wi.campaign_id.mode in ('manual','active'):
|
||||
result = self.pool.get('marketing.campaign.activity').process(
|
||||
@@ -410,11 +410,10 @@ class marketing_campaign_workitem(osv.osv):
|
||||
if type(result) == type({}) and 'error_msg' in result:
|
||||
vals['error_msg'] = result['error_msg']
|
||||
self.write(cr, uid, wi.id, vals)
|
||||
except Exception,e:
|
||||
self.write(cr, uid, wi.id, {'state': 'exception', 'error_msg': str(e)})
|
||||
else :
|
||||
self.write(cr, uid, wi.id, {'state': 'cancelled'})
|
||||
|
||||
else:
|
||||
self.write(cr, uid, wi.id, {'state': 'cancelled'})
|
||||
except Exception,e:
|
||||
self.write(cr, uid, wi.id, {'state': 'exception', 'error_msg': str(e)})
|
||||
return True
|
||||
|
||||
def process_all(self, cr, uid, camp_ids=None, context={}):
|
||||
@@ -422,16 +421,19 @@ class marketing_campaign_workitem(osv.osv):
|
||||
if not camp_ids:
|
||||
camp_ids = camp_obj.search(cr, uid, [('state','=','running')], context=context)
|
||||
for camp in camp_obj.browse(cr, uid, camp_ids, context=context):
|
||||
if camp.mode in ('test_realtime','active'):
|
||||
workitem_ids = self.search(cr, uid, [('state', '=', 'todo'),
|
||||
('date','<=', time.strftime('%Y-%m-%d %H:%M:%S'))])
|
||||
elif camp.mode == 'test':
|
||||
workitem_ids = self.search(cr, uid, [('state', '=', 'todo')])
|
||||
else:
|
||||
# manual states are not processed automatically
|
||||
workitem_ids = []
|
||||
if workitem_ids:
|
||||
self.process(cr, uid, workitem_ids, context)
|
||||
while True:
|
||||
if camp.mode in ('test_realtime','active'):
|
||||
workitem_ids = self.search(cr, uid, [('state', '=', 'todo'),
|
||||
('date','<=', time.strftime('%Y-%m-%d %H:%M:%S'))])
|
||||
elif camp.mode == 'test':
|
||||
workitem_ids = self.search(cr, uid, [('state', '=', 'todo')])
|
||||
else:
|
||||
# manual states are not processed automatically
|
||||
workitem_ids = []
|
||||
if workitem_ids:
|
||||
self.process(cr, uid, workitem_ids, context)
|
||||
else:
|
||||
break
|
||||
|
||||
def preview(self, cr, uid, ids, context):
|
||||
res = {}
|
||||
|
||||
@@ -49,7 +49,7 @@ class campaign_analysis(osv.osv): #{{{
|
||||
('07','July'), ('08','August'), ('09','September'),
|
||||
('10','October'), ('11','November'), ('12','December')],
|
||||
'Month', readonly=True),
|
||||
'date': fields.date('Date', readonly=True),
|
||||
'date': fields.datetime('Date', readonly=True),
|
||||
'campaign_id': fields.many2one('marketing.campaign', 'Campaign',
|
||||
readonly=True),
|
||||
'activity_id': fields.many2one('marketing.campaign.activity', 'Activity',
|
||||
@@ -61,36 +61,34 @@ class campaign_analysis(osv.osv): #{{{
|
||||
type='many2one', relation='res.country',string='Country'),
|
||||
'total_cost' : fields.function(_total_cost, string='Cost', method=True,
|
||||
type="float" ),
|
||||
'revenue': fields.float('Revenue',readonly=True),
|
||||
# 'case_id': fields.many2one('crm.lead', 'Opportunity', readonly=True),
|
||||
# 'count' : fields.integer('Count', readonly=True),
|
||||
'revenue': fields.float('Revenue',digits=(16,2),readonly=True),
|
||||
'count' : fields.integer('# of Actions', readonly=True),
|
||||
}
|
||||
|
||||
def init(self, cr):
|
||||
tools.drop_view_if_exists(cr, 'campaign_analysis')
|
||||
|
||||
cr.execute("""
|
||||
create or replace view campaign_analysis as (
|
||||
select
|
||||
wi.id as id,
|
||||
to_char(wi.date, 'YYYY') as year,
|
||||
to_char(wi.date, 'MM') as month,
|
||||
wi.date as date,
|
||||
s.campaign_id as campaign_id,
|
||||
wi.activity_id as activity_id,
|
||||
wi.segment_id as segment_id,
|
||||
wi.partner_id as partner_id ,
|
||||
act.revenue as revenue
|
||||
from
|
||||
marketing_campaign_workitem wi
|
||||
left join res_partner p on (p.id=wi.partner_id)
|
||||
left join marketing_campaign_segment s on (s.id=wi.segment_id)
|
||||
left join marketing_campaign_activity act on (act.id= wi.activity_id)
|
||||
group by
|
||||
to_char(wi.date, 'YYYY'),to_char(wi.date, 'MM'),
|
||||
s.campaign_id,wi.activity_id,wi.segment_id,wi.partner_id,revenue,
|
||||
wi.date,wi.id
|
||||
)
|
||||
""")
|
||||
|
||||
create or replace view campaign_analysis as (
|
||||
select
|
||||
min(wi.id) as id,
|
||||
to_char(wi.date::date, 'YYYY') as year,
|
||||
to_char(wi.date::date, 'MM') as month,
|
||||
wi.date::date as date,
|
||||
s.campaign_id as campaign_id,
|
||||
wi.activity_id as activity_id,
|
||||
wi.segment_id as segment_id,
|
||||
wi.partner_id as partner_id ,
|
||||
sum(act.revenue) as revenue,
|
||||
count(*) as count
|
||||
from
|
||||
marketing_campaign_workitem wi
|
||||
left join res_partner p on (p.id=wi.partner_id)
|
||||
left join marketing_campaign_segment s on (s.id=wi.segment_id)
|
||||
left join marketing_campaign_activity act on (act.id= wi.activity_id)
|
||||
group by
|
||||
s.campaign_id,wi.activity_id,wi.segment_id,wi.partner_id,
|
||||
wi.date::date
|
||||
)
|
||||
""")
|
||||
campaign_analysis() #}}}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="view_campaign_analysis_tree" model="ir.ui.view">
|
||||
<data>
|
||||
<record id="view_campaign_analysis_tree" model="ir.ui.view">
|
||||
<field name="name">campaign.analysis.tree</field>
|
||||
<field name="model">campaign.analysis</field>
|
||||
<field name="type">tree</field>
|
||||
@@ -15,37 +15,36 @@
|
||||
<field name="segment_id" invisible="1"/>
|
||||
<field name="partner_id" invisible="1"/>
|
||||
<field name="country_id" invisible="1"/>
|
||||
<!--field name="case_id"/-->
|
||||
<!--field name="count"/-->
|
||||
<field name="count"/>
|
||||
<field name="total_cost" string="Cost"/><!-- sum="Cost"/-->
|
||||
<field name="revenue"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_campaign_analysis_search" model="ir.ui.view">
|
||||
<record id="view_campaign_analysis_search" model="ir.ui.view">
|
||||
<field name="name">campaign.analysis.search</field>
|
||||
<field name="model">campaign.analysis</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Marketing Reports">
|
||||
<group>
|
||||
<filter icon="terp-go-year"
|
||||
string="This Year"
|
||||
domain="[('year','=',time.strftime('%%Y'))]"/>
|
||||
<filter icon="terp-go-month"
|
||||
string="This Month"
|
||||
domain="[('month','=',time.strftime('%%m'))]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-go-month"
|
||||
string="Date"
|
||||
domain="[('date','=',time.strftime('%%Y/%%m/%%d'))]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="campaign_id"/>
|
||||
<field name="activity_id"/>
|
||||
<field name="segment_id"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="country_id"/>
|
||||
<group>
|
||||
<filter icon="terp-go-year"
|
||||
string="This Year"
|
||||
domain="[('year','=',time.strftime('%%Y'))]"/>
|
||||
<filter icon="terp-go-month"
|
||||
string="This Month"
|
||||
domain="[('month','=',time.strftime('%%m'))]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-go-month"
|
||||
string="Date"
|
||||
domain="[('date','=',time.strftime('%%Y/%%m/%%d'))]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="campaign_id"/>
|
||||
<field name="activity_id"/>
|
||||
<field name="segment_id"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="country_id"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." colspan="10" col="12">
|
||||
@@ -60,17 +59,17 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_campaign_analysis_all" model="ir.actions.act_window">
|
||||
<record id="action_campaign_analysis_all" model="ir.actions.act_window">
|
||||
<field name="name">Campaigns</field>
|
||||
<field name="res_model">campaign.analysis</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="context">{'group_by': [], 'search_default_Campaign': 1, 'search_default_Segment': 1}</field>
|
||||
<field name="context">{'group_by': [], 'search_default_Campaign': 1, 'search_default_Segment': 1, 'group_by_no_leaf':1}</field>
|
||||
<field name="search_view_id" ref="view_campaign_analysis_search"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Reporting" id="menu_marketing_reporting" parent="marketing.marketing_menu"/>
|
||||
<menuitem name="Reporting" id="menu_marketing_reporting" parent="marketing.marketing_menu"/>
|
||||
<menuitem action="action_campaign_analysis_all" id="menu_action_campaign_analysis_all" parent="menu_marketing_reporting" sequence="40"/>
|
||||
|
||||
</data>
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
Reference in New Issue
Block a user