diff --git a/addons/crm_helpdesk/crm_helpdesk.py b/addons/crm_helpdesk/crm_helpdesk.py index deab9f19a20..03e6a243851 100644 --- a/addons/crm_helpdesk/crm_helpdesk.py +++ b/addons/crm_helpdesk/crm_helpdesk.py @@ -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 # ------------------------------------------------------- diff --git a/addons/crm_helpdesk/crm_helpdesk_view.xml b/addons/crm_helpdesk/crm_helpdesk_view.xml index f97fe654166..fe98c2e6e9e 100644 --- a/addons/crm_helpdesk/crm_helpdesk_view.xml +++ b/addons/crm_helpdesk/crm_helpdesk_view.xml @@ -29,21 +29,10 @@
-
@@ -58,8 +47,7 @@ + on_change="on_change_partner_id(partner_id)"/>