bzr revid: fp@tinyerp.com-20100623150135-03o40pysuf9dymdy
This commit is contained in:
Fabien Pinckaers
2010-06-23 17:01:35 +02:00
parent abce6c32df
commit e77035d3ea
3 changed files with 70 additions and 71 deletions
+20 -18
View File
@@ -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>