bzr revid: sbh@tinyerp.com-20100305120653-24qvs1ahcnpvear0
This commit is contained in:
sbh (Open ERP) 2010-03-05 17:36:53 +05:30
commit 1e92dffd82
54 changed files with 99 additions and 160 deletions

View File

@ -31,8 +31,8 @@ import crm_claim
import crm_fundraising
import crm_helpdesk
import crm_report
#import report
import report
import wizard

View File

@ -26,7 +26,7 @@
'category': 'Generic Modules/CRM & SRM',
'description': """The generic Open ERP Customer Relationship Management
system enables a group of people to intelligently and efficiently manage
leads, opportunities, tasks, issues, requests, bugs, campaign, claims, etc.
leads, opportunities, claims, meeting, phonecall etc.
It manages key tasks such as communication, identification, prioritization,
assignment, resolution and notification.
@ -81,19 +81,18 @@ between mails and Open ERP.""",
'crm_claims_view.xml',
'crm_claims_menu.xml',
# 'crm_report_view.xml',
'crm_helpdesk_view.xml',
'crm_helpdesk_menu.xml',
#'crm_report.xml',
'security/crm_security.xml',
'security/ir.model.access.csv',
'crm_report/crm_report_view.xml',
'crm_report/crm_report_claim_view.xml',
'crm_report/crm_report_lead_view.xml',
'crm_report/crm_report_fundraising_view.xml',
'crm_report/crm_report_opportunity_view.xml' ,
'crm_report/crm_report_phonecall_view.xml',
'report/crm_report_view.xml',
'report/crm_report_claim_view.xml',
'report/crm_report_lead_view.xml',
'report/crm_report_fundraising_view.xml',
'report/crm_report_opportunity_view.xml' ,
'report/crm_report_phonecall_view.xml',
'process/crm_configuration_process.xml',

View File

@ -19,8 +19,13 @@
#
##############################################################################
import report_businessopp
#import report_businessopp
import crm_report
import crm_report_claim
import crm_report_lead
import crm_report_phonecall
import crm_report_fundraising
import crm_report_opportunity
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -20,8 +20,7 @@
##############################################################################
from osv import fields,osv
import tools.sql
import tools
AVAILABLE_STATES = [
('draft','Draft'),
@ -31,170 +30,106 @@ AVAILABLE_STATES = [
('pending','Pending')
]
class report_crm_case_section_categ2(osv.osv):
_name = "report.crm.case.section.categ2"
_description = "Cases by section and category2"
class report_crm_case(osv.osv):
_name = "report.crm.case"
_description = "Cases and section"
_auto = False
def _get_data(self, cr, uid, ids, field_name, arg, context={}):
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))
state_cases = cr.fetchone()[0]
perc_state = (state_cases / float(case.nbr) ) * 100
res[case.id] = perc_state
else:
model_name = self._name.split('report.')
if len(model_name) < 2:
res[case.id] = 0.0
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)
logs = cr.fetchone()[0]
avg_ans = logs / case.nbr
res[case.id] = avg_ans
return res
_columns = {
'name': fields.char('Year',size=64,required=False, readonly=True),
'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),
'user_id':fields.many2one('res.users', 'User', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
'category2_id':fields.many2one('crm.case.category2', 'Type', readonly=True),
'stage_id':fields.many2one('crm.case.stage', 'Stage', readonly=True),
'amount_revenue': fields.float('Est.Revenue', 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),
'delay_close': fields.char('Delay Close', size=20, readonly=True),
}
_order = 'category2_id, section_id'
def init(self, cr):
tools.sql.drop_view_if_exists(cr, "report_crm_case_section_categ2")
cr.execute("""
create view report_crm_case_section_categ2 as (
select
min(c.id) as id,
to_char(c.create_date,'YYYY') as name,
to_char(c.create_date, 'MM') as month,
c.user_id,
c.state,
c.category2_id,
c.stage_id,
c.section_id,
count(*) as nbr,
sum(planned_revenue) as amount_revenue,
to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close
from
crm_case c
where c.category2_id is not null
group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.user_id, c.state, c.stage_id, c.category2_id, c.section_id)""")
report_crm_case_section_categ2()
class report_crm_case_section_stage(osv.osv):
_name = "report.crm.case.section.stage"
_description = "Cases by section and stage"
_auto = False
_columns = {
'name': fields.char('Year',size=64,required=False, 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),
'user_id':fields.many2one('res.users', 'User', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
'categ_id':fields.many2one('crm.case.categ', 'Category', readonly=True),
'stage_id':fields.many2one('crm.case.stage', 'Stage', readonly=True),
'amount_revenue': fields.float('Est.Revenue', readonly=True),
'nbr': fields.integer('# of Cases', readonly=True),
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
'delay_close': fields.char('Delay Close', size=20, readonly=True),
}
_order = 'stage_id, section_id'
'company_id': fields.many2one('res.company','Company',readonly=True),
}
_order = 'name desc, user_id'
def init(self, cr):
tools.sql.drop_view_if_exists(cr, "report_crm_case_section_stage")
tools.drop_view_if_exists(cr, 'report_crm_case')
cr.execute("""
create view report_crm_case_section_stage as (
select
min(c.id) as id,
to_char(c.create_date,'YYYY') as name,
to_char(c.create_date, 'MM') as month,
c.user_id,
c.state,
c.stage_id,
c.section_id,
c.categ_id,
count(*) as nbr,
sum(planned_revenue) as amount_revenue,
to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close
from
crm_case c
where c.stage_id is not null
group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.user_id, c.state, c.stage_id, c.categ_id, c.section_id)""")
report_crm_case_section_stage()
class report_crm_case_section_categ_stage(osv.osv):
_name = "report.crm.case.section.categ.stage"
_description = "Cases by section, Category and stage"
_auto = False
_columns = {
'name': fields.char('Year',size=64,required=False, readonly=True),
'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),
'user_id':fields.many2one('res.users', 'User', readonly=True),
'categ_id':fields.many2one('crm.case.categ', 'Category', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
'stage_id':fields.many2one('crm.case.stage', 'Stage', readonly=True),
'nbr': fields.integer('# of Cases', readonly=True),
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
'delay_close': fields.char('Delay Close', size=20, readonly=True),
}
_order = 'stage_id, section_id, categ_id'
def init(self, cr):
tools.sql.drop_view_if_exists(cr, "report_crm_case_section_categ_stage")
cr.execute("""
create view report_crm_case_section_categ_stage as (
select
min(c.id) as id,
to_char(c.create_date,'YYYY') as name,
to_char(c.create_date, 'MM') as month,
c.user_id,
c.categ_id,
c.state,
c.stage_id,
c.section_id,
count(*) as nbr,
to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close
from
crm_case c
where c.categ_id is not null AND c.stage_id is not null
group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'),c.user_id, c.categ_id, c.state, c.stage_id, c.section_id)""")
report_crm_case_section_categ_stage()
class report_crm_case_section_categ_categ2(osv.osv):
_name = "report.crm.case.section.categ.categ2"
_description = "Cases by section, Category and Category2"
_auto = False
_columns = {
'name': fields.char('Year',size=64,required=False, readonly=True),
'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),
'user_id':fields.many2one('res.users', 'User', readonly=True),
'categ_id':fields.many2one('crm.case.categ', 'Category', readonly=True),
'category2_id':fields.many2one('crm.case.category2', 'Type', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
'stage_id':fields.many2one('crm.case.stage', 'Stage', readonly=True),
'nbr': fields.integer('# of Cases', readonly=True),
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
'delay_close': fields.char('Delay Close', size=20, readonly=True),
}
_order = 'section_id, categ_id, category2_id'
def init(self, cr):
tools.sql.drop_view_if_exists(cr, "report_crm_case_section_categ_categ2")
cr.execute("""
create view report_crm_case_section_categ_categ2 as (
create or replace view report_crm_case as (
select
min(c.id) as id,
to_char(c.create_date, 'YYYY') as name,
to_char(c.create_date, 'MM') as month,
c.user_id,
c.categ_id,
c.category2_id,
c.state,
c.stage_id,
c.user_id,
c.section_id,
count(*) as nbr,
to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close
c.company_id,
count(*) as nbr
from
crm_case c
where c.categ_id is not null AND c.category2_id is not null
group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'),c.user_id, c.categ_id, c.category2_id, c.state, c.stage_id, c.section_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
)""")
report_crm_case()
class report_crm_case_service_dashboard(osv.osv):
_name = "report.crm.case.service.dashboard"
_description = "Report of Closed and Open CRM Cases within past 15 days"
_auto = False
_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):
cr.execute("""create or replace view report_crm_case_service_dashboard as (
select
cse.id as id, cse.date_deadline as date_deadline,
cse.name as name, cse.user_id as user_id,
cse.state as state,
cse.create_date as create_date
from
crm_case cse
where
(cse.state='done')
OR
((to_date(to_char(cse.create_date, 'YYYY-MM-dd'),'YYYY-MM-dd') <= CURRENT_DATE)
AND
(to_date(to_char(cse.create_date, 'YYYY-MM-dd'),'YYYY-MM-dd') > (CURRENT_DATE-15))
AND
cse.state='open')
)""")
report_crm_case_service_dashboard()
report_crm_case_section_categ_categ2()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: