2009-12-18 13:44:31 +00:00
# -*- coding: utf-8 -*-
2009-12-04 08:40:21 +00:00
##############################################################################
2010-01-05 09:30:49 +00:00
#
2009-12-04 08:40:21 +00:00
# OpenERP, Open Source Management Solution
2010-01-12 09:18:39 +00:00
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
2009-12-04 08:40:21 +00:00
#
# This program is free software: you can redistribute it and/or modify
2009-12-18 13:44:31 +00:00
# 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.
2009-12-04 08:40:21 +00:00
#
# 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
2009-12-18 13:44:31 +00:00
# GNU Affero General Public License for more details.
2009-12-04 08:40:21 +00:00
#
2009-12-18 13:44:31 +00:00
# You should have received a copy of the GNU Affero General Public License
2010-01-05 09:30:49 +00:00
# along with this program. If not, see <http://www.gnu.org/licenses/>.
2009-12-04 08:40:21 +00:00
#
##############################################################################
2010-05-03 12:59:01 +00:00
from base_calendar import base_calendar
2011-05-31 13:32:32 +00:00
from crm import crm_base , crm_case
2010-05-03 12:59:01 +00:00
from osv import fields , osv
2010-03-26 12:09:08 +00:00
from tools . translate import _
2010-08-28 14:18:49 +00:00
import logging
2010-01-12 09:40:08 +00:00
2010-08-17 12:54:00 +00:00
class crm_lead ( crm_case , osv . osv ) :
2010-05-03 13:41:42 +00:00
""" CRM Leads """
_name = ' crm.lead '
crm_lead ( )
2010-02-24 06:36:01 +00:00
2010-08-17 12:54:00 +00:00
class crm_phonecall ( crm_case , osv . osv ) :
2010-03-22 10:40:26 +00:00
""" CRM Phonecall """
2010-01-29 10:07:59 +00:00
_name = ' crm.phonecall '
2010-02-24 06:36:01 +00:00
crm_phonecall ( )
2011-05-31 13:32:32 +00:00
class crm_meeting ( crm_base , osv . osv ) :
2010-03-22 10:40:26 +00:00
""" CRM Meeting Cases """
2010-01-05 09:30:49 +00:00
_name = ' crm.meeting '
2010-05-19 18:32:32 +00:00
_description = " Meeting "
2009-12-29 08:48:04 +00:00
_order = " id desc "
2012-03-06 09:18:55 +00:00
_inherit = [ " calendar.event " , " mail.thread " ]
2010-03-22 10:40:26 +00:00
_columns = {
2010-05-03 12:30:48 +00:00
# From crm.case
2011-02-07 05:51:57 +00:00
' name ' : fields . char ( ' Summary ' , size = 124 , required = True , states = { ' done ' : [ ( ' readonly ' , True ) ] } ) ,
' partner_id ' : fields . many2one ( ' res.partner ' , ' Partner ' , states = { ' done ' : [ ( ' readonly ' , True ) ] } ) ,
2010-06-24 12:55:03 +00:00
' section_id ' : fields . many2one ( ' crm.case.section ' , ' Sales Team ' , states = { ' done ' : [ ( ' readonly ' , True ) ] } , \
2011-02-07 05:51:57 +00:00
select = True , help = ' Sales team to which Case belongs to. ' ) ,
2010-06-24 12:55:03 +00:00
' email_from ' : fields . char ( ' Email ' , size = 128 , states = { ' done ' : [ ( ' readonly ' , True ) ] } , help = " These people will receive email. " ) ,
2011-10-12 11:11:42 +00:00
' id ' : fields . integer ( ' ID ' , readonly = True ) ,
2010-06-24 12:55:03 +00:00
' create_date ' : fields . datetime ( ' Creation Date ' , readonly = True ) ,
' write_date ' : fields . datetime ( ' Write Date ' , readonly = True ) ,
2010-07-06 11:46:25 +00:00
' date_action_last ' : fields . datetime ( ' Last Action ' , readonly = 1 ) ,
' date_action_next ' : fields . datetime ( ' Next Action ' , readonly = 1 ) ,
2010-05-03 12:30:48 +00:00
# Meeting fields
2010-02-11 14:08:46 +00:00
' categ_id ' : fields . many2one ( ' crm.case.categ ' , ' Meeting Type ' , \
2010-03-04 09:54:42 +00:00
domain = " [( ' object_id.model ' , ' = ' , ' crm.meeting ' )] " , \
2010-03-22 10:40:26 +00:00
) ,
' phonecall_id ' : fields . many2one ( ' crm.phonecall ' , ' Phonecall ' ) ,
2010-05-03 12:30:48 +00:00
' opportunity_id ' : fields . many2one ( ' crm.lead ' , ' Opportunity ' , domain = " [( ' type ' , ' = ' , ' opportunity ' )] " ) ,
2010-04-19 13:45:22 +00:00
' attendee_ids ' : fields . many2many ( ' calendar.attendee ' , ' meeting_attendee_rel ' , \
2010-06-24 12:55:03 +00:00
' event_id ' , ' attendee_id ' , ' Attendees ' , states = { ' done ' : [ ( ' readonly ' , True ) ] } ) ,
2010-03-22 10:40:26 +00:00
' date_closed ' : fields . datetime ( ' Closed ' , readonly = True ) ,
2010-06-24 12:55:03 +00:00
' date_deadline ' : fields . datetime ( ' Deadline ' , states = { ' done ' : [ ( ' readonly ' , True ) ] } ) ,
2011-07-22 18:23:37 +00:00
' message_ids ' : fields . one2many ( ' mail.message ' , ' res_id ' , ' Messages ' , domain = [ ( ' model ' , ' = ' , _name ) ] ) ,
2010-03-22 10:40:26 +00:00
' state ' : fields . selection ( [ ( ' open ' , ' Confirmed ' ) ,
( ' draft ' , ' Unconfirmed ' ) ,
( ' cancel ' , ' Cancelled ' ) ,
2010-03-04 09:54:42 +00:00
( ' done ' , ' Done ' ) ] , ' State ' , \
2010-12-09 07:19:04 +00:00
size = 16 , readonly = True ) ,
2009-12-29 08:48:04 +00:00
}
2010-12-09 07:19:04 +00:00
_defaults = {
2011-02-07 05:51:57 +00:00
' state ' : ' draft ' ,
2011-01-18 22:35:02 +00:00
' active ' : 1 ,
2010-12-09 07:19:04 +00:00
' user_id ' : lambda self , cr , uid , ctx : uid ,
}
2010-07-22 11:00:56 +00:00
2012-02-28 13:38:04 +00:00
def create ( self , cr , uid , vals , context = None ) :
obj_id = super ( crm_meeting , self ) . create ( cr , uid , vals , context = context )
2012-03-16 13:19:30 +00:00
self . create_send_note ( cr , uid , [ obj_id ] , context = context )
2012-02-28 13:38:04 +00:00
return obj_id
2012-03-20 13:23:19 +00:00
def get_needaction_user_ids ( self , cr , uid , ids , context = None ) :
result = dict . fromkeys ( ids , [ ] )
2012-03-09 11:16:44 +00:00
for obj in self . browse ( cr , uid , ids , context = context ) :
if ( obj . state == ' draft ' and obj . user_id ) :
2012-03-20 13:23:19 +00:00
result [ obj . id ] = [ obj . user_id . id ]
2012-03-09 11:16:44 +00:00
return result
2012-04-02 12:44:44 +00:00
def case_get_note_msg_prefix ( self , cr , uid , id , context = None ) :
return ' Meeting '
2012-03-16 13:19:30 +00:00
def create_send_note ( self , cr , uid , ids , context = None ) :
2012-02-28 13:38:04 +00:00
lead_obj = self . pool . get ( ' crm.lead ' )
2012-03-06 09:18:55 +00:00
phonecall_obj = self . pool . get ( ' crm.phonecall ' )
2012-03-12 10:34:20 +00:00
for meeting in self . browse ( cr , uid , ids , context = context ) :
2012-03-20 13:23:19 +00:00
message = _ ( " A meeting has been <b>scheduled</b> on <em> %s </em>. " ) % ( meeting . date )
if meeting . opportunity_id : # meeting can be create from phonecalls or opportunities, therefore checking for the parent
lead = meeting . opportunity_id
parent_message = _ ( " Meeting linked to the opportunity <em> %s </em> has been <b>created</b> and <b>cscheduled</b> on <em> %s </em>. " ) % ( lead . name , meeting . date )
2012-03-29 16:41:13 +00:00
lead . message_append_note ( _ ( ' System Notification ' ) , message )
2012-03-20 13:23:19 +00:00
elif meeting . phonecall_id :
phonecall = meeting . phonecall_id
parent_message = _ ( " Meeting linked to the phonecall <em> %s </em> has been <b>created</b> and <b>cscheduled</b> on <em> %s </em>. " ) % ( phonecall . name , meeting . date )
2012-03-29 16:41:13 +00:00
phonecall . message_append_note ( _ ( ' System Notification ' ) , message )
2012-03-20 15:54:44 +00:00
else :
parent_message = message
2012-03-20 13:23:19 +00:00
if parent_message :
2012-03-29 16:41:13 +00:00
meeting . message_append_note ( _ ( ' System Notification ' ) , parent_message )
2012-03-12 10:34:20 +00:00
return True
2012-04-02 12:44:44 +00:00
2012-03-20 13:23:19 +00:00
def case_close_send_note ( self , cr , uid , ids , context = None ) :
message = _ ( " Meeting has been <b>done</b>. " )
2012-03-29 16:41:13 +00:00
return self . message_append_note ( cr , uid , ids , _ ( ' System Notification ' ) , message , context = context )
2012-03-06 09:18:55 +00:00
2012-03-13 10:55:28 +00:00
def case_open_send_note ( self , cr , uid , ids , context = None ) :
2012-03-12 10:34:20 +00:00
for meeting in self . browse ( cr , uid , ids , context = context ) :
if meeting . state != ' draft ' :
return False
message = _ ( " Meeting has been <b>confirmed</b>. " )
2012-03-29 16:41:13 +00:00
meeting . message_append_note ( _ ( ' System Notification ' ) , message )
2012-03-12 10:34:20 +00:00
return True
2012-02-28 13:38:04 +00:00
2012-03-06 09:18:55 +00:00
def case_open ( self , cr , uid , ids , context = None ) :
2010-07-22 11:00:56 +00:00
""" Confirms meeting
@param self : The object pointer
@param cr : the current row , from the database cursor ,
@param uid : the current user ’ s ID for security checks ,
@param ids : List of Meeting Ids
@param * args : Tuple Value for additional Params
"""
2012-03-06 09:18:55 +00:00
res = super ( crm_meeting , self ) . case_open ( cr , uid , ids , context )
2010-07-22 11:00:56 +00:00
for ( id , name ) in self . name_get ( cr , uid , ids ) :
2010-11-02 11:32:31 +00:00
id = base_calendar . base_calendar_id2real_id ( id )
2010-07-22 11:00:56 +00:00
return res
2009-12-29 08:48:04 +00:00
crm_meeting ( )
2009-12-04 08:40:21 +00:00
2010-02-11 14:08:46 +00:00
class calendar_attendee ( osv . osv ) :
2010-03-22 10:40:26 +00:00
""" Calendar Attendee """
2010-02-11 14:08:46 +00:00
_inherit = ' calendar.attendee '
2010-03-22 10:40:26 +00:00
_description = ' Calendar Attendee '
2010-11-19 13:48:01 +00:00
def _compute_data ( self , cr , uid , ids , name , arg , context = None ) :
2010-03-22 10:40:26 +00:00
"""
@param self : The object pointer
@param cr : the current row , from the database cursor ,
@param uid : the current user ’ s ID for security checks ,
@param ids : List of compute data ’ s IDs
@param context : A standard dictionary for contextual values
"""
name = name [ 0 ]
2010-11-19 13:48:01 +00:00
result = super ( calendar_attendee , self ) . _compute_data ( cr , uid , ids , name , arg , context = context )
2010-03-22 10:40:26 +00:00
for attdata in self . browse ( cr , uid , ids , context = context ) :
2010-02-11 14:08:46 +00:00
id = attdata . id
result [ id ] = { }
if name == ' categ_id ' :
2010-04-19 13:45:22 +00:00
if attdata . ref and ' categ_id ' in attdata . ref . _columns :
2010-03-22 10:40:26 +00:00
result [ id ] [ name ] = ( attdata . ref . categ_id . id , attdata . ref . categ_id . name , )
2010-02-11 14:08:46 +00:00
else :
result [ id ] [ name ] = False
2010-03-22 10:40:26 +00:00
return result
2010-02-11 14:08:46 +00:00
_columns = {
2011-07-01 23:41:24 +00:00
' categ_id ' : fields . function ( _compute_data , \
2010-03-04 09:54:42 +00:00
string = ' Event Type ' , type = " many2one " , \
2010-03-17 14:11:30 +00:00
relation = " crm.case.categ " , multi = ' categ_id ' ) ,
2010-02-11 14:08:46 +00:00
}
2010-03-22 10:40:26 +00:00
2010-02-11 14:08:46 +00:00
calendar_attendee ( )
2010-05-11 13:42:39 +00:00
class res_users ( osv . osv ) :
_name = ' res.users '
_inherit = ' res.users '
2010-08-28 14:18:49 +00:00
def create ( self , cr , uid , data , context = None ) :
2010-11-19 13:48:01 +00:00
user_id = super ( res_users , self ) . create ( cr , uid , data , context = context )
2011-02-07 05:51:57 +00:00
2011-06-24 08:50:18 +00:00
# add shortcut unless 'noshortcut' is True in context
if not ( context and context . get ( ' noshortcut ' , False ) ) :
data_obj = self . pool . get ( ' ir.model.data ' )
try :
data_id = data_obj . _get_id ( cr , uid , ' crm ' , ' ir_ui_view_sc_calendar0 ' )
view_id = data_obj . browse ( cr , uid , data_id , context = context ) . res_id
self . pool . get ( ' ir.ui.view_sc ' ) . copy ( cr , uid , view_id , default = {
' user_id ' : user_id } , context = context )
except :
# Tolerate a missing shortcut. See product/product.py for similar code.
logging . getLogger ( ' orm ' ) . debug ( ' Skipped meetings shortcut for user " %s " ' , data . get ( ' name ' , ' <new ' ) )
2010-05-11 13:42:39 +00:00
return user_id
res_users ( )
2010-05-17 05:26:03 +00:00
2009-12-29 08:48:04 +00:00
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: