[REF] Clean the terp files
[odoo/odoo.git] / addons / report_crm / report_crm.py
1 # -*- encoding: utf-8 -*-
2 ##############################################################################
3 #
4 #    OpenERP, Open Source Management Solution   
5 #    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
6 #    $Id$
7 #
8 #    This program is free software: you can redistribute it and/or modify
9 #    it under the terms of the GNU General Public License as published by
10 #    the Free Software Foundation, either version 3 of the License, or
11 #    (at your option) any later version.
12 #
13 #    This program is distributed in the hope that it will be useful,
14 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
15 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 #    GNU General Public License for more details.
17 #
18 #    You should have received a copy of the GNU General Public License
19 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
20 #
21 ##############################################################################
22
23 from osv import fields,osv
24
25 AVAILABLE_STATES = [
26     ('draft','Draft'),
27     ('open','Open'),
28     ('cancel', 'Canceled'),
29     ('done', 'Closed'),
30     ('pending','Pending')
31 ]
32
33 class report_crm_case_user(osv.osv):
34     _name = "report.crm.case.user"
35     _description = "Cases by user and section"
36     _auto = False
37     _columns = {
38         'name': fields.date('Month', readonly=True),
39         'user_id':fields.many2one('res.users', 'User', readonly=True),
40         'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
41         'amount_revenue': fields.float('Est.Revenue', readonly=True),
42         'amount_costs': fields.float('Est.Cost', readonly=True),
43         'amount_revenue_prob': fields.float('Est. Rev*Prob.', readonly=True),
44         'nbr': fields.integer('# of Cases', readonly=True),
45         'probability': fields.float('Avg. Probability', readonly=True),
46         'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True),
47         'delay_close': fields.char('Delay to close', size=20, readonly=True),
48     }
49     _order = 'name desc, user_id, section_id'
50     def init(self, cr):
51         cr.execute("""
52             create or replace view report_crm_case_user as (
53                 select
54                     min(c.id) as id,
55                     to_char(c.create_date, 'YYYY-MM-01') as name,
56                     c.state,
57                     c.user_id,
58                     c.section_id,
59                     count(*) as nbr,
60                     sum(planned_revenue) as amount_revenue,
61                     sum(planned_cost) as amount_costs,
62                     sum(planned_revenue*probability)::decimal(16,2) as amount_revenue_prob,
63                     avg(probability)::decimal(16,2) as probability,
64                     to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close
65                 from
66                     crm_case c
67                 group by to_char(c.create_date, 'YYYY-MM-01'), c.state, c.user_id, c.section_id
68             )""")
69 report_crm_case_user()
70
71 class report_crm_case_categ(osv.osv):
72     _name = "report.crm.case.categ"
73     _description = "Cases by section and category"
74     _auto = False
75     _columns = {
76         'name': fields.date('Month', readonly=True),
77         'categ_id':fields.many2one('crm.case.categ', 'Category', readonly=True),
78         'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
79         'amount_revenue': fields.float('Est.Revenue', readonly=True),
80         'amount_costs': fields.float('Est.Cost', readonly=True),
81         'amount_revenue_prob': fields.float('Est. Rev*Prob.', readonly=True),
82         'nbr': fields.integer('# of Cases', readonly=True),
83         'probability': fields.float('Avg. Probability', readonly=True),
84         'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True),
85         'delay_close': fields.char('Delay Close', size=20, readonly=True),
86     }
87     _order = 'name desc, categ_id, section_id'
88     def init(self, cr):
89         cr.execute("""
90             create or replace view report_crm_case_categ as (
91                 select
92                     min(c.id) as id,
93                     to_char(c.create_date, 'YYYY-MM-01') as name,
94                     c.state,
95                     c.categ_id,
96                     c.section_id,
97                     count(*) as nbr,
98                     sum(planned_revenue) as amount_revenue,
99                     sum(planned_cost) as amount_costs,
100                     sum(planned_revenue*probability)::decimal(16,2) as amount_revenue_prob,
101                     avg(probability)::decimal(16,2) as probability,
102                     to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close
103                 from
104                     crm_case c
105                 group by to_char(c.create_date, 'YYYY-MM-01'), c.state, c.categ_id, c.section_id
106             )""")
107 report_crm_case_categ()
108
109 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
110