[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:
parent
2948a44a53
commit
35749e33b3
|
@ -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
|
||||
# -------------------------------------------------------
|
||||
|
|
|
@ -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">
|
||||
|
|
Loading…
Reference in New Issue