[IMP]: crm_helpdesk: Improvement in helpdesk for inheriting python class crm case from crm + Improvement in reports, Added missing fields

bzr revid: rpa@tinyerp.com-20100506073109-2ce22j3x0auri0l1
This commit is contained in:
rpa (Open ERP) 2010-05-06 13:01:09 +05:30
parent 15c36ff8a7
commit 75e1ae7cbb
5 changed files with 130 additions and 37 deletions

View File

@ -21,29 +21,28 @@
{
'name': 'CRM Helpdesk',
'version': '1.0',
'category': 'Generic Modules/CRM & SRM',
'description': """Helpdesk Management""",
'author': 'Tiny',
'website': 'http://www.openerp.com',
'depends': ['crm'],
'name': 'CRM Helpdesk',
'version': '1.0',
'category': 'Generic Modules/CRM & SRM',
'description': """Helpdesk Management""",
'author': 'Tiny',
'website': 'http://www.openerp.com',
'depends': ['crm'],
'init_xml': [
'crm_helpdesk_data.xml',
],
'crm_helpdesk_data.xml',
],
'update_xml': [
'crm_helpdesk_view.xml',
'crm_helpdesk_menu.xml',
'security/ir.model.access.csv',
'report/crm_helpdesk_report_view.xml',
],
'crm_helpdesk_view.xml',
'crm_helpdesk_menu.xml',
'security/ir.model.access.csv',
'report/crm_helpdesk_report_view.xml',
],
'demo_xml': [
'crm_helpdesk_demo.xml',
'test/test_crm_helpdesk.yml'
],
'installable': True,
'active': False,
'crm_helpdesk_demo.xml',
],
'test': ['test/test_crm_helpdesk.yml'],
'installable': True,
'active': False,
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -19,12 +19,10 @@
#
##############################################################################
from osv import fields
from osv import orm
from osv import osv
from crm import crm
from osv import fields, osv
class crm_helpdesk(osv.osv):
class crm_helpdesk(osv.osv, crm.crm_case):
""" Helpdesk Cases """
_name = "crm.helpdesk"
@ -33,7 +31,25 @@ class crm_helpdesk(osv.osv):
_inherit = 'mailgate.thread'
_columns = {
'id': fields.integer('ID', readonly=True),
'name': fields.char('Name', size=128, required=True),
'description': fields.text('Description'),
'create_date': fields.datetime('Creation Date' , readonly=True),
'write_date': fields.datetime('Update Date' , readonly=True),
'date_deadline': fields.date('Deadline'),
'user_id': fields.many2one('res.users', 'Responsible'),
'section_id': fields.many2one('crm.case.section', 'Sales Team', \
select=True, help='Sales team to which Case belongs to.\
Define Responsible user and Email account for mail gateway.'),
'company_id': fields.many2one('res.company', 'Company'),
'date_closed': fields.datetime('Closed', readonly=True),
'partner_id': fields.many2one('res.partner', 'Partner'),
'partner_address_id': fields.many2one('res.partner.address', 'Partner Contact', \
domain="[('partner_id','=',partner_id)]"),
'email_cc': fields.text('Watchers Emails', size=252 , help="These people\
will receive a copy of the future" \
" communication between partner and users by email"),
'email_from': fields.char('Email', size=128, help="These people will receive email."),
'date': fields.datetime('Date'),
'ref' : fields.reference('Reference', selection=crm._links_get, size=128),
'ref2' : fields.reference('Reference 2', selection=crm._links_get, size=128),
@ -53,13 +69,25 @@ class crm_helpdesk(osv.osv):
(Very dissatisfied) to 10 (Extremely satisfied)."),
'categ_id': fields.many2one('crm.case.categ', 'Category', \
domain="[('section_id','=',section_id),\
('object_id.model', '=', 'crm.helpdesk')]"),
'duration': fields.float('Duration'),
('object_id.model', '=', 'crm.helpdesk')]"),
'duration': fields.float('Duration'),
'state': fields.selection(crm.AVAILABLE_STATES, 'State', size=16, readonly=True,
help='The state is set to \'Draft\', when a case is created.\
\nIf the case is in progress the state is set to \'Open\'.\
\nWhen the case is over, the state is set to \'Done\'.\
\nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
}
_defaults = {
'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c),
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
'active': lambda *a: 1,
'user_id': crm.crm_case._get_default_user,
'partner_id': crm.crm_case._get_default_partner,
'partner_address_id': crm.crm_case._get_default_partner_address,
'email_from': crm.crm_case. _get_default_email,
'state': lambda *a: 'draft',
'section_id': crm.crm_case. _get_section,
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c),
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
}
crm_helpdesk()

View File

@ -112,7 +112,7 @@
<group colspan="4">
<field colspan="4" name="email_cc" string="CC"/>
</group>
<field name="history_line" colspan="4" nolabel="1" mode="form,tree">
<field name="message_ids" colspan="4" nolabel="1" mode="form,tree">
<form string="Communication history">
<group col="7" colspan="4">
<field name="date"/>
@ -163,6 +163,7 @@
<field name="date_deadline"/>
<field name="user_id"/>
<field name="section_id"/>
<field name="priority"/>
<field name="state"/>
<button name="case_close" string="Done"
states="open,draft,pending" type="object"

View File

@ -23,15 +23,75 @@ from osv import fields,osv
import tools
AVAILABLE_STATES = [
('draft','Draft'),
('open','Open'),
('cancel', 'Cancelled'),
('done', 'Closed'),
('pending','Pending')
]
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"
def _get_data(self, cr, uid, ids, field_name, arg, context={}):
""" @param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of case and section Datas 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))
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),
'user_id':fields.many2one('res.users', 'User', 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),
'create_date': fields.datetime('Create Date', readonly=True),
'day': fields.char('Day', size=128, readonly=True),
'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),

View File

@ -30,15 +30,20 @@
<record id="view_report_crm_helpdesk_form" model="ir.ui.view">
<field name="name">crm.helpdesk.report.form</field>
<field name="model">crm.helpdesk.report</field>
<field name="inherit_id" ref="crm.view_crm_case_form"/>
<field name="type">form</field>
<field name="arch" type="xml">
<field name="nbr" position="after">
<field name="delay_close"/>
<field name="amount_revenue"/>
<field name="amount_revenue_prob"/>
<field name="probability"/>
</field>
<form string="Cases">
<field name="name" select="1"/>
<field name="month" select="1"/>
<field name="user_id" select="1"/>
<field name="section_id" select="1"/>
<field name="nbr" select="1"/>
<field name="delay_close"/>
<field name="amount_revenue"/>
<field name="amount_revenue_prob"/>
<field name="probability"/>
<field name="state" select="1"/>
</form>
</field>
</record>