2009-12-30 10:20:44 +00:00
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
2010-01-12 09:18:39 +00:00
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
2009-12-30 10:20:44 +00:00
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
2013-10-06 11:58:08 +00:00
import openerp
2012-12-17 15:58:19 +00:00
from openerp . addons . crm import crm
2012-12-06 14:56:32 +00:00
from openerp . osv import fields , osv
from openerp import tools
from openerp . tools . translate import _
from openerp . tools import html2plaintext
2011-02-15 09:42:10 +00:00
2013-06-26 09:52:01 +00:00
2013-08-13 09:20:15 +00:00
class crm_helpdesk ( osv . osv ) :
2010-03-22 10:40:26 +00:00
""" Helpdesk Cases """
2009-12-30 10:20:44 +00:00
_name = " crm.helpdesk "
2010-07-22 11:00:56 +00:00
_description = " Helpdesk "
2009-12-30 10:20:44 +00:00
_order = " id desc "
2011-07-22 18:23:37 +00:00
_inherit = [ ' mail.thread ' ]
2012-08-21 14:27:47 +00:00
2010-01-08 11:05:05 +00:00
_columns = {
2011-02-07 05:51:57 +00:00
' id ' : fields . integer ( ' ID ' , readonly = True ) ,
2014-05-21 09:52:05 +00:00
' name ' : fields . char ( ' Name ' , required = True ) ,
2011-02-07 05:51:57 +00:00
' active ' : fields . boolean ( ' Active ' , required = False ) ,
' date_action_last ' : fields . datetime ( ' Last Action ' , readonly = 1 ) ,
' date_action_next ' : fields . datetime ( ' Next Action ' , readonly = 1 ) ,
' 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 ' ) ,
2010-05-06 07:31:09 +00:00
' section_id ' : fields . many2one ( ' crm.case.section ' , ' Sales Team ' , \
2012-11-01 05:19:57 +00:00
select = True , help = ' Responsible sales team. Define Responsible user and Email account for mail gateway. ' ) ,
2011-02-07 05:51:57 +00:00
' company_id ' : fields . many2one ( ' res.company ' , ' Company ' ) ,
' date_closed ' : fields . datetime ( ' Closed ' , readonly = True ) ,
' partner_id ' : fields . many2one ( ' res.partner ' , ' Partner ' ) ,
' email_cc ' : fields . text ( ' Watchers Emails ' , size = 252 , help = " These email addresses will be added to the CC field of all inbound and outbound emails for this record before being sent. Separate multiple email addresses with a comma " ) ,
2012-10-23 12:04:15 +00:00
' email_from ' : fields . char ( ' Email ' , size = 128 , help = " Destination email for email gateway " ) ,
2011-02-07 05:51:57 +00:00
' date ' : fields . datetime ( ' Date ' ) ,
2013-10-06 11:58:08 +00:00
' ref ' : fields . reference ( ' Reference ' , selection = openerp . addons . base . res . res_request . referencable_models ) ,
' ref2 ' : fields . reference ( ' Reference 2 ' , selection = openerp . addons . base . res . res_request . referencable_models ) ,
2014-07-08 15:33:00 +00:00
' channel_id ' : fields . many2one ( ' crm.tracking.medium ' , ' Channel ' , help = " Communication channel. " ) ,
2011-02-07 05:51:57 +00:00
' planned_revenue ' : fields . float ( ' Planned Revenue ' ) ,
' planned_cost ' : fields . float ( ' Planned Costs ' ) ,
2014-02-14 11:49:37 +00:00
' priority ' : fields . selection ( [ ( ' 0 ' , ' Low ' ) , ( ' 1 ' , ' Normal ' ) , ( ' 2 ' , ' High ' ) ] , ' Priority ' ) ,
2011-02-07 05:51:57 +00:00
' probability ' : fields . float ( ' Probability ( % ) ' ) ,
2010-03-23 05:55:46 +00:00
' categ_id ' : fields . many2one ( ' crm.case.categ ' , ' Category ' , \
2011-07-19 05:49:15 +00:00
domain = " [ ' | ' ,( ' section_id ' , ' = ' ,False),( ' section_id ' , ' = ' ,section_id), \
2012-10-02 10:29:15 +00:00
( ' object_id.model ' , ' = ' , ' crm.helpdesk ' ) ] " ),
' duration ' : fields . float ( ' Duration ' , states = { ' done ' : [ ( ' readonly ' , True ) ] } ) ,
2013-08-13 09:20:15 +00:00
' state ' : fields . selection (
[ ( ' draft ' , ' New ' ) ,
( ' open ' , ' In Progress ' ) ,
( ' pending ' , ' Pending ' ) ,
( ' done ' , ' Closed ' ) ,
2014-05-21 09:52:05 +00:00
( ' cancel ' , ' Cancelled ' ) ] , ' Status ' , readonly = True , track_visibility = ' onchange ' ,
2012-10-12 11:42:58 +00:00
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 \' . \
\nIf the case needs to be reviewed then the status is set to \' Pending \' . ' ) ,
2009-12-30 10:20:44 +00:00
}
2010-03-22 10:40:26 +00:00
2010-03-22 08:13:44 +00:00
_defaults = {
2011-02-07 05:51:57 +00:00
' active ' : lambda * a : 1 ,
2013-07-08 10:30:11 +00:00
' user_id ' : lambda s , cr , uid , c : uid ,
2011-02-07 05:51:57 +00:00
' state ' : lambda * a : ' draft ' ,
2013-09-19 14:23:38 +00:00
' date ' : fields . datetime . now ,
2011-02-07 05:51:57 +00:00
' company_id ' : lambda s , cr , uid , c : s . pool . get ( ' res.company ' ) . _company_default_get ( cr , uid , ' crm.helpdesk ' , context = c ) ,
2014-02-14 11:49:37 +00:00
' priority ' : ' 1 ' ,
2010-03-22 08:13:44 +00:00
}
2010-02-02 07:50:19 +00:00
2013-08-13 09:20:15 +00:00
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 ( )
2015-07-23 22:15:59 +00:00
elif values . get ( ' state ' ) == ' done ' and not values . get ( ' date_closed ' ) :
2013-08-13 09:20:15 +00:00
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
2012-06-04 14:12:54 +00:00
# -------------------------------------------------------
# Mail gateway
# -------------------------------------------------------
def message_new ( self , cr , uid , msg , custom_values = None , context = None ) :
""" Overrides mail_thread message_new that is called by the mailgateway
through message_process .
This override updates the document according to the email .
"""
2013-11-04 09:27:31 +00:00
if custom_values is None :
custom_values = { }
2012-10-09 15:54:20 +00:00
desc = html2plaintext ( msg . get ( ' body ' ) ) if msg . get ( ' body ' ) else ' '
2013-01-10 17:27:23 +00:00
defaults = {
2012-06-04 14:12:54 +00:00
' name ' : msg . get ( ' subject ' ) or _ ( " No Subject " ) ,
2012-10-09 15:54:20 +00:00
' description ' : desc ,
2012-06-04 14:12:54 +00:00
' email_from ' : msg . get ( ' from ' ) ,
' email_cc ' : msg . get ( ' cc ' ) ,
2011-02-15 09:42:10 +00:00
' user_id ' : False ,
2013-01-15 13:43:59 +00:00
' partner_id ' : msg . get ( ' author_id ' , False ) ,
2013-01-10 17:27:23 +00:00
}
defaults . update ( custom_values )
2013-11-04 09:27:31 +00:00
return super ( crm_helpdesk , self ) . message_new ( cr , uid , msg , custom_values = defaults , context = context )
2011-02-15 09:42:10 +00:00
2012-06-01 12:20:26 +00:00
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: