[REF] crm_helpdesk: removed inheritance to base_state + some refactoring (clickable statusbar widget, case management directly in write)

bzr revid: tde@openerp.com-20130813092015-mj33hgokdh87zoqs
This commit is contained in:
Thibault Delavallée 2013-08-13 11:20:15 +02:00
parent 2948a44a53
commit 35749e33b3
2 changed files with 42 additions and 26 deletions

View File

@ -19,23 +19,14 @@
#
##############################################################################
from openerp.addons.base_status.base_state import base_state
from openerp.addons.crm import crm
from openerp.osv import fields, osv
from openerp import tools
from openerp.tools.translate import _
from openerp.tools import html2plaintext
AVAILABLE_STATES = [
('draft', 'New'),
('cancel', 'Cancelled'),
('open', 'In Progress'),
('pending', 'Pending'),
('done', 'Closed')
]
class crm_helpdesk(base_state, osv.osv):
class crm_helpdesk(osv.osv):
""" Helpdesk Cases """
_name = "crm.helpdesk"
@ -73,7 +64,12 @@ class crm_helpdesk(base_state, osv.osv):
domain="['|',('section_id','=',False),('section_id','=',section_id),\
('object_id.model', '=', 'crm.helpdesk')]"),
'duration': fields.float('Duration', states={'done': [('readonly', True)]}),
'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True,
'state': fields.selection(
[('draft', 'New'),
('open', 'In Progress'),
('pending', 'Pending'),
('done', 'Closed'),
('cancel', 'Cancelled')], 'Status', size=16, readonly=True, track_visibility='onchange',
help='The status is set to \'Draft\', when a case is created.\
\nIf the case is in progress the status is set to \'Open\'.\
\nWhen the case is over, the status is set to \'Done\'.\
@ -89,6 +85,38 @@ class crm_helpdesk(base_state, osv.osv):
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
}
def on_change_partner_id(self, cr, uid, ids, partner_id, context=None):
values = {}
if partner_id:
partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
values = {
'email_from': partner.email,
}
return {'value': values}
def write(self, cr, uid, ids, values, context=None):
""" Override to add case management: open/close dates """
if values.get('state'):
if values.get('state') in ['draft', 'open'] and not values.get('date_open'):
values['date_open'] = fields.datetime.now()
elif values.get('state') == 'close' and not values.get('date_closed'):
values['date_closed'] = fields.datetime.now()
return super(crm_helpdesk, self).write(cr, uid, ids, values, context=context)
def case_escalate(self, cr, uid, ids, context=None):
""" Escalates case to parent level """
data = {'active': True}
for case in self.browse(cr, uid, ids, context=context):
if case.section_id and case.section_id.parent_id:
parent_id = case.section_id.parent_id
data['section_id'] = parent_id.id
if parent_id.change_responsible and parent_id.user_id:
data['user_id'] = parent_id.user_id.id
else:
raise osv.except_osv(_('Error!'), _('You can not escalate, you are already at the top level regarding your sales-team category.'))
self.write(cr, uid, [case.id], data, context=context)
return True
# -------------------------------------------------------
# Mail gateway
# -------------------------------------------------------

View File

@ -29,21 +29,10 @@
<field name="arch" type="xml">
<form string="Helpdesk Support" version="7.0">
<header>
<button name="case_open" string="Open" type="object" class="oe_highlight"
states="draft,pending"/>
<button name="case_close" string="Close Case" type="object" states="draft,pending"/>
<button name="case_close" string="Close Case" type="object" states="open" class="oe_highlight"/>
<button name="case_pending" string="Pending" type="object"
states="draft"/>
<button name="case_pending" string="Pending" type="object"
states="open"/>
<button name="case_reset" string="Reset to Draft" type="object"
states="cancel,done"/>
<button name="case_escalate" string="Escalate" type="object"
states="open,draft,pending"/>
<button name="case_cancel" string="Cancel Case" type="object"
states="draft,open,pending"/>
<field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/>
<field name="state" nolabel="1" widget="statusbar" clickable="True"
statusbar_colors='{"pending":"blue"}'/>
</header>
<sheet string="Helpdesk Support">
<group col="4" class="oe_header">
@ -58,8 +47,7 @@
<group>
<group string="Communication">
<field name="partner_id"
on_change="onchange_partner_id(partner_id, email_from)"
/>
on_change="on_change_partner_id(partner_id)"/>
<field name="email_from"/>
</group>
<group string="Categorization">