From e77035d3ea8494bf48739a930fced08fedf6aad4 Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Wed, 23 Jun 2010 17:01:35 +0200 Subject: [PATCH] modifs bzr revid: fp@tinyerp.com-20100623150135-03o40pysuf9dymdy --- .../marketing_campaign/marketing_campaign.py | 38 +++++++------- .../report/campaign_analysis.py | 52 +++++++++---------- .../report/campaign_analysis_view.xml | 51 +++++++++--------- 3 files changed, 70 insertions(+), 71 deletions(-) diff --git a/addons/marketing_campaign/marketing_campaign.py b/addons/marketing_campaign/marketing_campaign.py index 86eea3f7631..feeaa074b6d 100644 --- a/addons/marketing_campaign/marketing_campaign.py +++ b/addons/marketing_campaign/marketing_campaign.py @@ -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 = {} diff --git a/addons/marketing_campaign/report/campaign_analysis.py b/addons/marketing_campaign/report/campaign_analysis.py index 590a1b47bc0..590abf47fce 100644 --- a/addons/marketing_campaign/report/campaign_analysis.py +++ b/addons/marketing_campaign/report/campaign_analysis.py @@ -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() #}}} diff --git a/addons/marketing_campaign/report/campaign_analysis_view.xml b/addons/marketing_campaign/report/campaign_analysis_view.xml index d7827033809..5a622d1364b 100644 --- a/addons/marketing_campaign/report/campaign_analysis_view.xml +++ b/addons/marketing_campaign/report/campaign_analysis_view.xml @@ -1,7 +1,7 @@ - - + + campaign.analysis.tree campaign.analysis tree @@ -15,37 +15,36 @@ - - + - + campaign.analysis.search campaign.analysis search - - - - - - - - - - - + + + + + + + + + + + @@ -60,17 +59,17 @@ - + Campaigns campaign.analysis form tree - {'group_by': [], 'search_default_Campaign': 1, 'search_default_Segment': 1} + {'group_by': [], 'search_default_Campaign': 1, 'search_default_Segment': 1, 'group_by_no_leaf':1} - + - +