From 82d77f3024b7313544c5f03bea54cc032c8680ae Mon Sep 17 00:00:00 2001 From: "ksa (Open ERP)" Date: Thu, 18 Mar 2010 14:16:13 +0530 Subject: [PATCH] [IMP]: crm: In crm Report file Apply format code + quality and dostring bzr revid: ksa@tinyerp.co.in-20100318084613-mk90nka0qmwtnk57 --- addons/crm/crm_report.xml | 4 +- addons/crm/crm_report_view.xml | 27 ++-- addons/crm/crm_view.xml | 34 ++--- addons/crm/report/crm_claim_report.py | 49 +++++++- addons/crm/report/crm_claim_report_view.xml | 41 +++--- addons/crm/report/crm_fundraising_report.py | 46 ++++++- .../report/crm_fundraising_report_view.xml | 38 +++--- addons/crm/report/crm_helpdesk_report.py | 21 +++- .../crm/report/crm_helpdesk_report_view.xml | 118 +++++++++++++----- addons/crm/report/crm_lead_report.py | 45 ++++++- addons/crm/report/crm_lead_report_view.xml | 48 ++++--- addons/crm/report/crm_opportunity_report.py | 58 +++++++-- .../report/crm_opportunity_report_view.xml | 47 ++++--- addons/crm/report/crm_phonecall_report.py | 48 +++++-- .../crm/report/crm_phonecall_report_view.xml | 41 +++--- addons/crm/report/crm_report.py | 70 ++++++++--- addons/crm/report/crm_report_view.xml | 118 ++++++++++++------ addons/crm/report/report_businessopp.py | 45 ++++--- 18 files changed, 654 insertions(+), 244 deletions(-) diff --git a/addons/crm/crm_report.xml b/addons/crm/crm_report.xml index abfdb7e065b..d5009ed6e01 100644 --- a/addons/crm/crm_report.xml +++ b/addons/crm/crm_report.xml @@ -1,6 +1,8 @@ - + diff --git a/addons/crm/crm_report_view.xml b/addons/crm/crm_report_view.xml index 04e4f235988..b7722ac8443 100644 --- a/addons/crm/crm_report_view.xml +++ b/addons/crm/crm_report_view.xml @@ -1,11 +1,10 @@ + # # Cases by section and category2 of case # - - CRM Report - Sections and Type(Tree) @@ -161,7 +160,6 @@ graph,tree - # # Cases by section, category and stage @@ -211,9 +209,13 @@ - - - + + + @@ -240,7 +242,6 @@ tree,graph - # # Cases by section, category and category2 @@ -292,9 +293,13 @@ - - - + + + @@ -321,6 +326,6 @@ tree,graph - + diff --git a/addons/crm/crm_view.xml b/addons/crm/crm_view.xml index 908cdd6fa91..e783e10c658 100644 --- a/addons/crm/crm_view.xml +++ b/addons/crm/crm_view.xml @@ -4,8 +4,10 @@ - - + + @@ -61,7 +63,7 @@ - + @@ -91,7 +93,7 @@ - + crm.case.categ.form @@ -101,7 +103,7 @@
- +
@@ -112,7 +114,7 @@ - + @@ -126,8 +128,8 @@ - - + + # ------------------------------------------------------ # Resource Type of case # ------------------------------------------------------ @@ -155,7 +157,7 @@ - + Resource Type crm.case.resource.type @@ -163,9 +165,9 @@ - + - + @@ -176,8 +178,8 @@ - - + + Add CC crm.email.add.cc @@ -599,7 +601,7 @@ - + view.res.partner.form.crm.inherited1 res.partner @@ -612,7 +614,7 @@ - + view.res.partner.form.crm.inherited2 res.partner @@ -625,7 +627,7 @@ - + view.res.partner.form.crm.inherited3 res.partner diff --git a/addons/crm/report/crm_claim_report.py b/addons/crm/report/crm_claim_report.py index cd814e7e2fb..23cb7f65c56 100644 --- a/addons/crm/report/crm_claim_report.py +++ b/addons/crm/report/crm_claim_report.py @@ -1,18 +1,54 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + from osv import fields,osv import tools + class crm_claim_report(osv.osv): + """ CRM Claim Report""" + _name = "crm.claim.report" _auto = False _inherit = "crm.case.report" + _description = "CRM Claim Report" + _columns = { 'delay_close': fields.char('Delay to close', size=20, readonly=True), - 'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.claim')]", readonly=True), - 'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.claim')]",readonly=True), - 'partner_id': fields.many2one('res.partner', 'Partner',readonly=True), - 'company_id': fields.many2one('res.company','Company',readonly=True), + 'stage_id': fields.many2one ('crm.case.stage', 'Stage', \ + domain="[('section_id','=',section_id),\ + ('object_id.model', '=', 'crm.claim')]", readonly=True), + 'categ_id': fields.many2one('crm.case.categ', 'Category',\ + domain="[('section_id','=',section_id),\ + ('object_id.model', '=', 'crm.claim')]", readonly=True), + 'partner_id': fields.many2one('res.partner', 'Partner', readonly=True), + 'company_id': fields.many2one('res.company', 'Company', readonly=True), } + def init(self, cr): + + """ + @param cr: the current row, from the database cursor, + Display Number of cases And Section Name """ + tools.drop_view_if_exists(cr, 'crm_claim_report') cr.execute(""" create or replace view crm_claim_report as ( @@ -34,8 +70,11 @@ class crm_claim_report(osv.osv): to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close from crm_claim c - group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state, c.user_id,c.section_id, c.stage_id,c.categ_id,c.partner_id,c.company_id + group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), \ + c.state, c.user_id,c.section_id, c.stage_id,\ + c.categ_id,c.partner_id,c.company_id )""") + crm_claim_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/report/crm_claim_report_view.xml b/addons/crm/report/crm_claim_report_view.xml index 3ff638aeaa7..a00df8b03a0 100644 --- a/addons/crm/report/crm_claim_report_view.xml +++ b/addons/crm/report/crm_claim_report_view.xml @@ -1,6 +1,8 @@ - + + + crm.claim.report.tree @@ -22,6 +24,9 @@ + + + crm.claim.report.form crm.claim.report @@ -37,7 +42,9 @@ - + + + crm.claim.report.graph crm.claim.report @@ -51,18 +58,24 @@ + + crm.claim.report.select crm.claim.report search - - - + + + - + + Claims @@ -73,24 +86,24 @@ - + tree - - + + graph - - - - + + + - + diff --git a/addons/crm/report/crm_fundraising_report.py b/addons/crm/report/crm_fundraising_report.py index a778223ca0c..fd0c884fc8d 100644 --- a/addons/crm/report/crm_fundraising_report.py +++ b/addons/crm/report/crm_fundraising_report.py @@ -1,20 +1,53 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + from osv import fields,osv import tools + class crm_fundraising_report(osv.osv): + """CRM Fundraising Report""" + _name = "crm.fundraising.report" _auto = False _inherit = "crm.case.report" + _description = "CRM Fundraising Report" + _columns = { - 'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.fundraising')]"), + 'categ_id': fields.many2one('crm.case.categ', 'Category', \ + domain="[('section_id','=',section_id),\ + ('object_id.model', '=', 'crm.fundraising')]"), 'probability': fields.float('Avg. Probability', readonly=True), 'amount_revenue': fields.float('Est.Revenue', readonly=True), 'amount_revenue_prob': fields.float('Est. Rev*Prob.', readonly=True), 'delay_close': fields.char('Delay to close', size=20, readonly=True), - 'partner_id': fields.many2one('res.partner', 'Partner'), - 'company_id': fields.many2one('res.company','Company'), + 'partner_id': fields.many2one('res.partner', 'Partner'), + 'company_id': fields.many2one('res.company', 'Company'), } + def init(self, cr): + + """ @param cr: the current row, from the database cursor + Display Number of cases and Average Probability """ + tools.drop_view_if_exists(cr, 'crm_fundraising_report') cr.execute(""" create or replace view crm_fundraising_report as ( @@ -32,13 +65,16 @@ class crm_fundraising_report(osv.osv): 0 as avg_answers, 0.0 as perc_done, 0.0 as perc_cancel, - sum(planned_revenue) as amount_revenue, + sum(planned_revenue) as amount_revenue, sum(planned_revenue*probability)::decimal(16,2) as amount_revenue_prob, avg(probability)::decimal(16,2) as probability, to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close from crm_fundraising c - group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state, c.user_id,c.section_id,c.categ_id,c.partner_id,c.company_id + group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'),\ + c.state, c.user_id,c.section_id,c.categ_id,c.partner_id,c.company_id )""") + crm_fundraising_report() + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/report/crm_fundraising_report_view.xml b/addons/crm/report/crm_fundraising_report_view.xml index 65f0f339a43..1eeb5871e13 100644 --- a/addons/crm/report/crm_fundraising_report_view.xml +++ b/addons/crm/report/crm_fundraising_report_view.xml @@ -1,9 +1,8 @@ - + + crm.fundraising.report.tree @@ -15,7 +14,7 @@ - + @@ -25,7 +24,9 @@ - + + + @@ -42,7 +43,9 @@ - + + + crm.fundraising.report.graph crm.fundraising.report @@ -56,6 +59,8 @@ + + crm.fundraising.report.select crm.fundraising.report @@ -66,7 +71,9 @@ - + + + Fundraising crm.fundraising.report @@ -75,22 +82,25 @@ - - + + tree - + graph - - - - + + + + + diff --git a/addons/crm/report/crm_helpdesk_report.py b/addons/crm/report/crm_helpdesk_report.py index 7a855378d19..7694352f523 100644 --- a/addons/crm/report/crm_helpdesk_report.py +++ b/addons/crm/report/crm_helpdesk_report.py @@ -18,23 +18,33 @@ # along with this program. If not, see . # ############################################################################## + from osv import fields,osv import tools + class crm_helpdesk_report(osv.osv): + """ Helpdesk report after Sales Services """ + _name = "crm.helpdesk.report" _description = "Helpdesk report after Sales Services" _auto = False _inherit = "crm.case.report" + _columns = { 'delay_close': fields.char('Delay to close', size=20, readonly=True), - 'partner_id': fields.many2one('res.partner', 'Partner' ,readonly=True), - 'company_id': fields.many2one('res.company','Company',readonly=True), + 'partner_id': fields.many2one('res.partner', 'Partner' , readonly=True), + 'company_id': fields.many2one('res.company', 'Company', readonly=True), 'date_deadline': fields.date('Deadline'), - 'priority': fields.selection([('5','Lowest'),('4','Low'),('3','Normal'),('2','High'),('1','Highest')], 'Priority'), + 'priority': fields.selection([('5', 'Lowest'), ('4', 'Low'), \ + ('3', 'Normal'), ('2', 'High'), ('1', 'Highest')], 'Priority'), } def init(self, cr): + + """@param cr: the current row, from the database cursor + Display Deadline ,Responsible user, partner ,Department """ + tools.drop_view_if_exists(cr, 'crm_helpdesk_report') cr.execute(""" create or replace view crm_helpdesk_report as ( @@ -56,8 +66,11 @@ class crm_helpdesk_report(osv.osv): to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close from crm_helpdesk c - group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state, c.user_id,c.section_id,c.priority, c.partner_id,c.company_id,c.date_deadline + group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'),\ + c.state, c.user_id,c.section_id,c.priority,\ + c.partner_id,c.company_id,c.date_deadline )""") + crm_helpdesk_report() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/report/crm_helpdesk_report_view.xml b/addons/crm/report/crm_helpdesk_report_view.xml index 06a69333bd7..dc1306e3623 100644 --- a/addons/crm/report/crm_helpdesk_report_view.xml +++ b/addons/crm/report/crm_helpdesk_report_view.xml @@ -1,9 +1,8 @@ - + + crm.helpdesk.report.tree @@ -25,6 +24,9 @@ + + + crm.helpdesk.report.form crm.helpdesk.report @@ -40,6 +42,8 @@ + + crm.helpdesk.report.graph crm.helpdesk.report @@ -53,6 +57,8 @@ + + crm.helpdesk.report.select crm.helpdesk.report @@ -60,26 +66,46 @@ - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -88,36 +114,63 @@ + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + Helpdesk crm.helpdesk.report @@ -141,8 +194,9 @@ - + - + diff --git a/addons/crm/report/crm_lead_report.py b/addons/crm/report/crm_lead_report.py index b0911553981..02b3c3a018e 100644 --- a/addons/crm/report/crm_lead_report.py +++ b/addons/crm/report/crm_lead_report.py @@ -1,18 +1,50 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + from osv import fields,osv import tools class crm_lead_report(osv.osv): + """ CRM Lead Report """ _name = "crm.lead.report" _auto = False _inherit = "crm.case.report" + _description = "CRM Lead Report" + _columns = { 'delay_close': fields.char('Delay to close', size=20, readonly=True), - 'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.lead')]" ,readonly=True), - 'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.lead')]", readonly=True), - 'partner_id': fields.many2one('res.partner', 'Partner' ,readonly=True), - 'company_id': fields.many2one('res.company','Company',readonly=True), + 'categ_id': fields.many2one('crm.case.categ', 'Category',\ + domain="[('section_id','=',section_id),\ + ('object_id.model', '=', 'crm.lead')]" , readonly=True), + 'stage_id': fields.many2one ('crm.case.stage', 'Stage', \ + domain="[('section_id','=',section_id),\ + ('object_id.model', '=', 'crm.lead')]", readonly=True), + 'partner_id': fields.many2one('res.partner', 'Partner' , readonly=True), + 'company_id': fields.many2one('res.company', 'Company', readonly=True), } def init(self, cr): + + """ @param cr: the current row, from the database cursor + CRM Lead Report""" + tools.drop_view_if_exists(cr, 'crm_lead_report') cr.execute(""" create or replace view crm_lead_report as ( @@ -34,7 +66,10 @@ class crm_lead_report(osv.osv): to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close from crm_lead c - group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state, c.user_id,c.section_id,c.stage_id,categ_id,c.partner_id,c.company_id + group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'),\ + c.state, c.user_id,c.section_id,c.stage_id,categ_id,c.partner_id,c.company_id )""") + crm_lead_report() + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/report/crm_lead_report_view.xml b/addons/crm/report/crm_lead_report_view.xml index c16bb42eade..06cb2b01aa8 100644 --- a/addons/crm/report/crm_lead_report_view.xml +++ b/addons/crm/report/crm_lead_report_view.xml @@ -1,9 +1,8 @@ - + + crm.lead.report.tree @@ -15,8 +14,8 @@ - - + + @@ -25,6 +24,9 @@ + + + crm.lead.report.form crm.lead.report @@ -37,7 +39,9 @@ - + + + crm.lead.report.graph crm.lead.report @@ -51,42 +55,50 @@ + + crm.lead.report.select crm.lead.report search - - - + + + - - + + + Leads crm.lead.report form tree,graph - + - + tree - - + + graph - + - - + + + diff --git a/addons/crm/report/crm_opportunity_report.py b/addons/crm/report/crm_opportunity_report.py index d6d3fb8a95b..1f07d2ff1eb 100644 --- a/addons/crm/report/crm_opportunity_report.py +++ b/addons/crm/report/crm_opportunity_report.py @@ -1,23 +1,56 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + from osv import fields,osv import tools class crm_opportunity_report(osv.osv): - _name = "crm.opportunity.report" + """ CRM Opportunity Report """ + + _name = "crm.opportunity.report" _auto = False - _inherit = "crm.case.report" - + _inherit = "crm.case.report" + _description = "CRM Opportunity Report" + _columns = { 'probability': fields.float('Avg. Probability', readonly=True), - 'amount_revenue': fields.float('Est.Revenue', readonly=True), + 'amount_revenue': fields.float('Est.Revenue', readonly=True), 'amount_revenue_prob': fields.float('Est. Rev*Prob.', readonly=True), 'delay_close': fields.char('Delay to close', size=20, readonly=True), - 'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.opportunity')]", readonly=True), - 'stage_id':fields.many2one('crm.case.stage', 'Stage', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.opportunity')]", readonly=True), - 'partner_id': fields.many2one('res.partner', 'Partner',readonly=True), - 'company_id': fields.many2one('res.company', 'Company',readonly=True), - 'user_id':fields.many2one('res.users', 'User', readonly=True), + 'categ_id': fields.many2one('crm.case.categ', 'Category',\ + domain="[('section_id','=',section_id),\ + ('object_id.model', '=', 'crm.opportunity')]", readonly=True), + 'stage_id':fields.many2one('crm.case.stage', 'Stage',\ + domain="[('section_id','=',section_id),\ + ('object_id.model', '=', 'crm.opportunity')]", readonly=True), + 'partner_id': fields.many2one('res.partner', 'Partner', readonly=True), + 'company_id': fields.many2one('res.company', 'Company', readonly=True), + 'user_id':fields.many2one('res.users', 'User', readonly=True), } + def init(self, cr): + + """ @param cr: the current row, from the database cursor + Display Est.Revenue , Average Probability ,Est.Revenue Probabilit """ + tools.drop_view_if_exists(cr, 'crm_opportunity_report') cr.execute(""" create or replace view crm_opportunity_report as ( @@ -36,13 +69,16 @@ class crm_opportunity_report(osv.osv): 0 as avg_answers, 0.0 as perc_done, 0.0 as perc_cancel, - sum(planned_revenue) as amount_revenue, + sum(planned_revenue) as amount_revenue, sum((planned_revenue*probability)/100.0)::decimal(16,2) as amount_revenue_prob, avg(probability)::decimal(16,2) as probability, to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close from crm_opportunity c - group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state, c.user_id,c.section_id,c.stage_id,c.categ_id,c.partner_id,company_id + group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'),\ + c.state, c.user_id,c.section_id,c.stage_id,c.categ_id,c.partner_id,company_id )""") + crm_opportunity_report() + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/report/crm_opportunity_report_view.xml b/addons/crm/report/crm_opportunity_report_view.xml index 58f2466d1fe..8763510eab1 100644 --- a/addons/crm/report/crm_opportunity_report_view.xml +++ b/addons/crm/report/crm_opportunity_report_view.xml @@ -1,9 +1,8 @@ - + + crm.opportunity.report.tree @@ -16,7 +15,7 @@ - + @@ -26,8 +25,11 @@ - + + + + crm.opportunity.report.form crm.opportunity.report @@ -43,7 +45,9 @@ - + + + crm.opportunity.report.graph crm.opportunity.report @@ -57,20 +61,28 @@ + + crm.opportunity.report.select crm.opportunity.report search - - - - - + + + + + - + + + Opportunities crm.opportunity.report @@ -83,14 +95,17 @@ tree - + graph - + - - + + + diff --git a/addons/crm/report/crm_phonecall_report.py b/addons/crm/report/crm_phonecall_report.py index 327094ebb8e..6e5dc5cdd42 100644 --- a/addons/crm/report/crm_phonecall_report.py +++ b/addons/crm/report/crm_phonecall_report.py @@ -1,18 +1,49 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + from osv import fields,osv import tools class crm_phonecall_report(osv.osv): + """ Phone calls by user and section """ + _name = "crm.phonecall.report" _description = "Phone calls by user and section" _auto = False _inherit = "crm.case.report" - _columns = { + + _columns = { 'delay_close': fields.char('Delay to close', size=20, readonly=True), - 'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.phonecall')]"), - 'partner_id': fields.many2one('res.partner', 'Partner' ,readonly=True), - 'company_id': fields.many2one('res.company','Company',readonly=True), + 'categ_id': fields.many2one('crm.case.categ', 'Category', \ + domain="[('section_id','=',section_id),\ + ('object_id.model', '=', 'crm.phonecall')]"), + 'partner_id': fields.many2one('res.partner', 'Partner' , readonly=True), + 'company_id': fields.many2one('res.company', 'Company', readonly=True), } + def init(self, cr): + + """ @param cr: the current row, from the database cursor, + Phone Calls By User And Section """ + tools.drop_view_if_exists(cr, 'crm_phonecall_report') cr.execute(""" create or replace view crm_phonecall_report as ( @@ -26,14 +57,17 @@ class crm_phonecall_report(osv.osv): c.categ_id, c.partner_id, c.company_id, - count(*) as nbr, + count(*) as nbr, 0 as avg_answers, 0.0 as perc_done, - 0.0 as perc_cancel, + 0.0 as perc_cancel, to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close from crm_phonecall c - group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state, c.user_id,c.section_id, c.categ_id,c.partner_id,c.company_id + group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'),\ + c.state, c.user_id,c.section_id, c.categ_id,c.partner_id,c.company_id )""") + crm_phonecall_report() + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/report/crm_phonecall_report_view.xml b/addons/crm/report/crm_phonecall_report_view.xml index fafe538d92e..a41880a7ff7 100644 --- a/addons/crm/report/crm_phonecall_report_view.xml +++ b/addons/crm/report/crm_phonecall_report_view.xml @@ -1,9 +1,8 @@ - + + crm.phonecall.report.tree @@ -20,10 +19,13 @@ - + + + + crm.phonecall.report.form crm.phonecall.report @@ -38,7 +40,9 @@ - + + + crm.phonecall.report.graph crm.phonecall.report @@ -50,7 +54,10 @@ - + + + + crm.phonecall.report.select crm.phonecall.report @@ -60,8 +67,10 @@ - - + + + + Phone Calls crm.phonecall.report @@ -70,22 +79,24 @@ - + tree - + graph - - - - - + + + + + diff --git a/addons/crm/report/crm_report.py b/addons/crm/report/crm_report.py index 2781768abf8..82f3a049de4 100644 --- a/addons/crm/report/crm_report.py +++ b/addons/crm/report/crm_report.py @@ -19,7 +19,7 @@ # ############################################################################## -from osv import fields,osv +from osv import fields, osv import tools AVAILABLE_STATES = [ @@ -31,22 +31,31 @@ AVAILABLE_STATES = [ ] class crm_case_report(osv.osv): + """ Cases and section """ + _name = "crm.case.report" _description = "Cases and section" _auto = False def _get_data(self, cr, uid, ids, field_name, arg, context={}): + + """ @param cr: the current row, from the database cursor, + @param uid: the current user’s ID for security checks, + @param ids: List of case and section Data’s IDs + @param context: A standard dictionary for contextual values """ + res = {} state_perc = 0.0 avg_ans = 0.0 - + for case in self.browse(cr, uid, ids, context): if field_name != 'avg_answers': state = field_name[5:] - cr.execute("select count(*) from crm_opportunity where section_id =%s and state='%s'"%(case.section_id.id,state)) + cr.execute("select count(*) from crm_opportunity where \ + section_id =%s and state='%s'"%(case.section_id.id, state)) state_cases = cr.fetchone()[0] - perc_state = (state_cases / float(case.nbr) ) * 100 - + perc_state = (state_cases / float(case.nbr)) * 100 + res[case.id] = perc_state else: model_name = self._name.split('report.') @@ -55,29 +64,39 @@ class crm_case_report(osv.osv): else: model_name = model_name[1] - cr.execute("select count(*) from crm_case_log l, ir_model m where l.model_id=m.id and m.model = '%s'" , model_name) + cr.execute("select count(*) from crm_case_log l, ir_model m \ + where l.model_id=m.id and m.model = '%s'" , model_name) logs = cr.fetchone()[0] - + avg_ans = logs / case.nbr - res[case.id] = avg_ans - + res[case.id] = avg_ans + return res _columns = { - 'name': fields.char('Year',size=64,required=False, readonly=True), + 'name': fields.char('Year', size=64, required=False, readonly=True), 'user_id':fields.many2one('res.users', 'User', readonly=True), - 'section_id':fields.many2one('crm.case.section', 'Section', readonly=True), + 'section_id':fields.many2one('crm.case.section', 'Section', readonly=True), 'nbr': fields.integer('# of Cases', readonly=True), 'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True), - 'avg_answers': fields.function(_get_data,string='Avg. Answers', method=True,type="integer"), - 'perc_done': fields.function(_get_data,string='%Done', method=True,type="float"), - 'perc_cancel': fields.function(_get_data,string='%Cancel', method=True,type="float"), - 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'), - ('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')],'Month',readonly=True), - 'company_id': fields.many2one('res.company','Company',readonly=True), + 'avg_answers': fields.function(_get_data, string='Avg. Answers', method=True, type="integer"), + 'perc_done': fields.function(_get_data, string='%Done', method=True, type="float"), + 'perc_cancel': fields.function(_get_data, string='%Cancel', method=True, type="float"), + 'month':fields.selection([('01', 'January'), ('02', 'February'), \ + ('03', 'March'), ('04', 'April'),\ + ('05', 'May'), ('06', 'June'), \ + ('07', 'July'), ('08', 'August'),\ + ('09', 'September'), ('10', 'October'),\ + ('11', 'November'), ('12', 'December')], 'Month', readonly=True), + 'company_id': fields.many2one('res.company', 'Company', readonly=True), } + _order = 'name desc, user_id' + def init(self, cr): + + """ @param cr: the current row, from the database cursor """ + tools.drop_view_if_exists(cr, 'crm_case_report') cr.execute(""" create or replace view crm_case_report as ( @@ -92,24 +111,34 @@ class crm_case_report(osv.osv): count(*) as nbr from crm_case c - group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state, c.user_id,c.section_id,c.company_id + group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'),\ + c.state, c.user_id,c.section_id,c.company_id )""") + crm_case_report() + class report_crm_case_service_dashboard(osv.osv): + """ Report of Closed and Open CRM Cases within past 15 days """ + _name = "report.crm.case.service.dashboard" _description = "Report of Closed and Open CRM Cases within past 15 days" _auto = False - _columns = { + + _columns = { 'date_deadline': fields.datetime('Deadline', readonly=True), 'name': fields.char('Description', size=64, readonly=True), 'user_id': fields.many2one('res.users', 'Responsible', readonly=True), 'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True), 'create_date' : fields.datetime('Create Date', readonly=True) } + _order = 'create_date' - + def init(self, cr): + + """ @param cr: the current row, from the database cursor """ + cr.execute("""create or replace view report_crm_case_service_dashboard as ( select cse.id as id, cse.date_deadline as date_deadline, @@ -128,6 +157,7 @@ class report_crm_case_service_dashboard(osv.osv): AND cse.state='open') )""") + report_crm_case_service_dashboard() diff --git a/addons/crm/report/crm_report_view.xml b/addons/crm/report/crm_report_view.xml index aa5eadde787..e5729553fa2 100644 --- a/addons/crm/report/crm_report_view.xml +++ b/addons/crm/report/crm_report_view.xml @@ -2,6 +2,8 @@ + + crm.case.report.tree crm.case.report @@ -18,6 +20,9 @@ + + + crm.case.report.form >crm.case.report @@ -34,6 +39,8 @@ + + crm.case.report crm.case.report @@ -47,6 +54,8 @@ + + crm.case.report.select crm.case.report @@ -54,48 +63,83 @@ - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - + - + + + + + + + + + + + + + + + + + Cases @@ -104,20 +148,22 @@ tree,graph - - - + - + - + - - - - + report.crm.case.service.dashboard.tree @@ -147,6 +193,8 @@ + + Closed CRM Cases Within Past 15 Days report.crm.case.service.dashboard diff --git a/addons/crm/report/report_businessopp.py b/addons/crm/report/report_businessopp.py index 240f361770e..9e08a9941ee 100644 --- a/addons/crm/report/report_businessopp.py +++ b/addons/crm/report/report_businessopp.py @@ -38,16 +38,28 @@ theme.use_color = 1 random.seed(0) class external_pdf(render): + + """ Generate External PDF """ + def __init__(self, pdf): render.__init__(self) self.pdf = pdf - self.output_type='pdf' + self.output_type = 'pdf' def _render(self): return self.pdf class report_custom(report_int): + + """ Create Custom Report """ + def create(self, cr, uid, ids, datas, context={}): + + """ @param cr: the current row, from the database cursor, + @param uid: the current user’s ID for security checks, + @param ids: List of IDs + @param context: A standard dictionary for contextual values """ + assert len(ids), 'You should provide some ids!' responsible_data = {} responsible_names = {} @@ -55,7 +67,10 @@ class report_custom(report_int): minbenef = 999999999999999999999 maxbenef = 0 - cr.execute('select probability, planned_revenue, planned_cost, user_id, res_users.name as name from crm_case left join res_users on (crm_case.user_id=res_users.id) where crm_case.id =ANY(%s) order by user_id',(ids,)) + cr.execute('select probability, planned_revenue, planned_cost, user_id,\ + res_users.name as name from crm_case left join res_users on \ + (crm_case.user_id=res_users.id) where crm_case.id =ANY(%s) order by user_id',(ids,)) + res = cr.dictfetchall() for row in res: proba = row['probability'] or 0 / 100.0 @@ -100,14 +115,14 @@ class report_custom(report_int): #-echelle variable pdf_string = StringIO.StringIO() - can = canvas.init(fname=pdf_string, format='pdf') + can = canvas.init(fname = pdf_string, format = 'pdf') chart_object.set_defaults(line_plot.T, line_style=None) xaxis = axis.X(label=None, format="%d%%", tic_interval=20) yaxis = axis.Y() - x_range_a, x_range_b = (0,100) + x_range_a, x_range_b = (0, 100) y_range_a, y_range_b = (minbenef, maxbenef) if y_range_a == 0.0: y_range_a += 0.0001 @@ -115,7 +130,7 @@ class report_custom(report_int): ar = area.T( size = (300,200), y_grid_interval = 10000, - y_grid_style=None, + y_grid_style = None, x_range = (x_range_a, x_range_b), y_range = (y_range_a, y_range_b), x_axis = xaxis, @@ -134,16 +149,17 @@ class report_custom(report_int): # second graph (top right) ar = area.T(legend = legend.T(), size = (200,100), - loc=(100,250), + loc = (100,250), x_grid_interval = lambda min, max: [40,60,80,100], - x_grid_style=line_style.gray70_dash1, + x_grid_style = line_style.gray70_dash1, x_range = (33, 100), - x_axis = axis.X(label=None, minor_tic_interval=lambda min,max: [50, 70, 90], format=lambda x: ""), - y_axis=axis.Y(label="Planned amounts")) + x_axis = axis.X(label=None, minor_tic_interval = lambda min,max: [50, 70, 90],\ + format=lambda x: ""), + y_axis = axis.Y(label="Planned amounts")) bar_plot.fill_styles.reset(); - plot1=bar_plot.T(label="Cost", data=data, fill_style=fill_style.red) - plot2=bar_plot.T(label="Revenue", data=data, hcol=2, stack_on = plot1, fill_style=fill_style.blue) + plot1 = bar_plot.T(label="Cost", data=data, fill_style=fill_style.red) + plot2 = bar_plot.T(label="Revenue", data=data, hcol=2, stack_on = plot1, fill_style=fill_style.blue) ar.add_plot(plot1, plot2) @@ -154,14 +170,14 @@ class report_custom(report_int): can.line(line_style.black, 0, 0, 300, 50) # vertical lines - ls = line_style.T(width=0.4, color=color.gray70, dash=(2,2)) + ls = line_style.T(width=0.4, color=color.gray70, dash=(2, 2)) for x in range(120, 300, 60): can.line(ls, x, 0, x, 250) # draw arrows to the right a = arrow.fat1 - for y in range(60,150,10): - a.draw([(285,y), (315,y)], can=can) + for y in range(60, 150, 10): + a.draw([(285, y), (315, y)], can=can) # close canvas so that the file is written to "disk" can.close() @@ -174,6 +190,5 @@ class report_custom(report_int): report_custom('report.crm.case') - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: