[IMP] replace *args with context=None in crm.py and crm_lead.py,craeate methods in crm.py and crm_lead.py file _case_open_notification,_case_close_notification,_case_cancel_notification,_case_pending_notification,_case_escalate_notification,remove message_ids field from crm_lead.py file and crm_lead_view.xml file,add type : 'email' in 'schedule_with_attach' method in mail_message.py file

bzr revid: bth@tinyerp.com-20120223104641-ej8bbbzgwt4v670h
This commit is contained in:
Bhumi Thakkar (Open ERP) 2012-02-23 16:16:41 +05:30
parent 9ced116caa
commit 99a3eeed4c
4 changed files with 108 additions and 78 deletions

View File

@ -127,7 +127,7 @@ class crm_case_section(osv.osv):
def name_get(self, cr, uid, ids, context=None):
"""Overrides orm name_get method"""
if not isinstance(ids, list) :
if not isinstance(ids, list) :
ids = [ids]
res = []
if not ids:
@ -258,7 +258,9 @@ class crm_base(object):
data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value'])
return {'value': data}
def case_open(self, cr, uid, ids, *args):
def case_open(self, cr, uid, ids, context=None):
"""Opens Case
:param ids: List of case Ids
"""
@ -268,11 +270,12 @@ class crm_base(object):
if not case.user_id:
data['user_id'] = uid
self.write(cr, uid, case.id, data)
self._case_open_notification(case, context=context)
self._action(cr, uid, cases, 'open')
return True
def case_close(self, cr, uid, ids, *args):
def case_close(self, cr, uid, ids, context=None):
"""Closes Case
:param ids: List of case Ids
"""
@ -283,7 +286,7 @@ class crm_base(object):
self._action(cr, uid, cases, 'done')
return True
def case_cancel(self, cr, uid, ids, *args):
def case_cancel(self, cr, uid, ids, context=None):
"""Cancels Case
:param ids: List of case Ids
"""
@ -294,7 +297,7 @@ class crm_base(object):
self._action(cr, uid, cases, 'cancel')
return True
def case_pending(self, cr, uid, ids, *args):
def case_pending(self, cr, uid, ids, context=None):
"""Marks case as pending
:param ids: List of case Ids
"""
@ -304,7 +307,7 @@ class crm_base(object):
self._action(cr, uid, cases, 'pending')
return True
def case_reset(self, cr, uid, ids, *args):
def case_reset(self, cr, uid, ids, context=None):
"""Resets case as draft
:param ids: List of case Ids
"""
@ -325,10 +328,10 @@ class crm_base(object):
return rule_obj._action(cr, uid, rule_ids, cases, scrit=scrit, context=context)
class crm_case(crm_base):
""" A simple python class to be used for common functions
""" A simple python class to be used for common functions
Object that inherit from this class should inherit from mailgate.thread
And need a stage_id field
And object that inherit (orm inheritance) from a class the overwrite copy
And object that inherit (orm inheritance) from a class the overwrite copy
"""
def stage_find(self, cr, uid, section_id, domain=[], order='sequence'):
@ -389,8 +392,22 @@ class crm_case(crm_base):
default.update({ 'date_open': False })
return super(crm_case, self).copy(cr, uid, id, default, context=context)
def _case_open_notification(self, case, context=None):
return True
def case_open(self, cr, uid, ids, *args):
def _case_close_notification(self, case, context=None):
return True
def _case_cancel_notification(self, case, context=None):
return True
def _case_pending_notification(self, case, context=None):
return True
def _case_escalate_notification(self, case, context=None):
return True
def case_open(self, cr, uid, ids, context=None):
"""Opens Case"""
cases = self.browse(cr, uid, ids)
for case in cases:
@ -398,10 +415,11 @@ class crm_case(crm_base):
if not case.user_id:
data['user_id'] = uid
self.write(cr, uid, case.id, data)
self._case_open_notification(case, context=context)
self._action(cr, uid, cases, 'open')
return True
def case_close(self, cr, uid, ids, *args):
def case_close(self, cr, uid, ids, context=None):
"""Closes Case"""
cases = self.browse(cr, uid, ids)
cases[0].state # to fill the browse record cache
@ -411,10 +429,11 @@ class crm_case(crm_base):
#
# We use the cache of cases to keep the old case state
#
self._case_close_notification(cases, context=context)
self._action(cr, uid, cases, 'done')
return True
def case_escalate(self, cr, uid, ids, *args):
def case_escalate(self, cr, uid, ids, context=None):
"""Escalates case to parent level"""
cases = self.browse(cr, uid, ids)
for case in cases:
@ -428,33 +447,33 @@ class crm_case(crm_base):
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)
cases = self.browse(cr, uid, ids)
self._case_escalate_notification(cases, context=context)
self._action(cr, uid, cases, 'escalate')
return True
def case_cancel(self, cr, uid, ids, *args):
def case_cancel(self, cr, uid, ids, context=None):
"""Cancels Case"""
cases = self.browse(cr, uid, ids)
cases[0].state # to fill the browse record cache
self.write(cr, uid, ids, {'state': 'cancel',
'active': True})
self._case_cancel_notification(cases, context=context)
self._action(cr, uid, cases, 'cancel')
for case in cases:
message = _("The case '%s' has been cancelled.") % (case.name,)
self.log(cr, uid, case.id, message)
return True
def case_pending(self, cr, uid, ids, *args):
def case_pending(self, cr, uid, ids, context=None):
"""Marks case as pending"""
cases = self.browse(cr, uid, ids)
cases[0].state # to fill the browse record cache
self.write(cr, uid, ids, {'state': 'pending', 'active': True})
self._case_pending_notification(cases, context=context)
self._action(cr, uid, cases, 'pending')
return True
def case_reset(self, cr, uid, ids, *args):
def case_reset(self, cr, uid, ids, context=None):
"""Resets case as draft"""
state = 'draft'
if 'crm.phonecall' in args:
if 'crm.phonecall' in context: #TO fix: move into crm_phonecall.py?
state = 'open'
cases = self.browse(cr, uid, ids)
cases[0].state # to fill the browse record cache

View File

@ -189,7 +189,6 @@ class crm_lead(crm_case, osv.osv):
\nIf the case is in progress the state is set to \'Open\'.\
\nWhen the case is over, the state is set to \'Done\'.\
\nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
'subjects': fields.function(_get_email_subject, fnct_search=_history_search, string='Subject of Email', type='char', size=64),
@ -266,75 +265,97 @@ class crm_lead(crm_case, osv.osv):
def stage_find_won(self, cr, uid, section_id):
return self.stage_find_percent(cr, uid, 100.0, section_id)
def case_open(self, cr, uid, ids, *args):
for l in self.browse(cr, uid, ids):
# When coming from draft override date and stage otherwise just set state
if l.state == 'draft':
if l.type == 'lead':
message = _("The lead '%s' has been opened.") % l.name
elif l.type == 'opportunity':
message = _("The opportunity '%s' has been opened.") % l.name
else:
message = _("The case '%s' has been opened.") % l.name
self.log(cr, uid, l.id, message)
value = {'date_open': time.strftime('%Y-%m-%d %H:%M:%S')}
self.write(cr, uid, [l.id], value)
if l.type == 'opportunity' and not l.stage_id:
stage_id = self.stage_find(cr, uid, l.section_id.id or False, [('sequence','>',0)])
if stage_id:
self.stage_set(cr, uid, [l.id], stage_id)
res = super(crm_lead, self).case_open(cr, uid, ids, *args)
def _case_open_notification(self, lead, context=None):
if lead.state != 'draft':
return False
if lead.type == 'lead':
message = _("The lead <em>%s</em> has been opened and its state is now in progress. Salesman %s can now set this lead as pending, close it to mark it as done, or cancel it. If there is an opportunity to create from this lead, click on Convert to Opportunity.") % (lead.name, lead.user_id.name)
elif lead.type == 'opportunity':
message = _("The opportunity <em>%s</em> has been opened.") % lead.name
else:
message = _("The case <em>%s</em> has been opened.") % lead.name
lead.message_append_note('' ,message, need_action_user_id=lead.user_id.id)
def _case_close_notification(self, lead, context=None):
if lead[0].type == 'lead':
message = _("The lead <em>%s</em> has been closed.") % lead[0].name
else:
message = _("The case <em>%s</em> has been closed.") % lead[0].name
lead[0].message_append_note('' ,message, need_action_user_id=lead[0].user_id.id)
def _case_mark_lost_notification(self, lead, context=None):
message = _("The opportunity <em>%s</em> has been marked as lost.") % lead.name
lead.message_append_note('' ,message, need_action_user_id=lead.user_id.id)
def _case_mark_won_notification(self, lead, context=None):
message = _("The opportunity <em>%s</em> has been been won.") % lead.name
lead.message_append_note('' ,message, need_action_user_id=lead.user_id.id)
def _case_cancel_notification(self, lead, context=None):
message = _("The lead <em>%s</em> has been cancelled.") % (lead[0].name)
lead[0].message_append_note('' ,message, need_action_user_id=lead[0].user_id.id)
def _case_pending_notification(self, case, context=None):
message = _("The lead <em>%s</em> is pending.") % (case[0].name,)
case[0].message_append_note('' ,message, need_action_user_id=case[0].user_id.id)
def _case_escalate_notification(self, case, context=None):
message = _("The lead <em>%s</em> is pending.") % (case.name,)
case.message_append_note('' ,message, need_action_user_id=case.user_id.id)
def case_open(self, cr, uid, ids, context=None):
res = super(crm_lead, self).case_open(cr, uid, ids, context)
for lead in self.browse(cr, uid, ids, context=context):
value = {'date_open': time.strftime('%Y-%m-%d %H:%M:%S')}
self.write(cr, uid, [lead.id], value)
if lead.type == 'opportunity' and not lead.stage_id:
stage_id = self.stage_find(cr, uid, lead.section_id.id or False, [('sequence','>',0)])
if stage_id:
self.stage_set(cr, uid, [lead.id], stage_id)
return res
def case_close(self, cr, uid, ids, *args):
res = super(crm_lead, self).case_close(cr, uid, ids, *args)
def case_close(self, cr, uid, ids, context=None):
res = super(crm_lead, self).case_close(cr, uid, ids, context)
self.write(cr, uid, ids, {'date_closed': time.strftime('%Y-%m-%d %H:%M:%S')})
for case in self.browse(cr, uid, ids):
if case.type == 'lead':
message = _("The lead '%s' has been closed.") % case.name
else:
message = _("The case '%s' has been closed.") % case.name
self.log(cr, uid, case.id, message)
return res
def case_cancel(self, cr, uid, ids, *args):
def case_cancel(self, cr, uid, ids, context=None):
"""Overrides cancel for crm_case for setting probability
"""
res = super(crm_lead, self).case_cancel(cr, uid, ids, args)
res = super(crm_lead, self).case_cancel(cr, uid, ids, context)
self.write(cr, uid, ids, {'probability' : 0.0})
return res
def case_reset(self, cr, uid, ids, *args):
def case_reset(self, cr, uid, ids, context=None):
"""Overrides reset as draft in order to set the stage field as empty
"""
res = super(crm_lead, self).case_reset(cr, uid, ids, *args)
res = super(crm_lead, self).case_reset(cr, uid, ids, context)
self.write(cr, uid, ids, {'stage_id': False, 'probability': 0.0})
return res
def case_mark_lost(self, cr, uid, ids, *args):
def case_mark_lost(self, cr, uid, ids, context=None):
"""Mark the case as lost: state = done and probability = 0%
"""
res = super(crm_lead, self).case_close(cr, uid, ids, *args)
res = super(crm_lead, self).case_close(cr, uid, ids, context)
self.write(cr, uid, ids, {'probability' : 0.0})
for l in self.browse(cr, uid, ids):
stage_id = self.stage_find_lost(cr, uid, l.section_id.id or False)
for lead in self.browse(cr, uid, ids):
stage_id = self.stage_find_lost(cr, uid, lead.section_id.id or False)
if stage_id:
self.stage_set(cr, uid, [l.id], stage_id)
message = _("The opportunity '%s' has been marked as lost.") % l.name
self.log(cr, uid, l.id, message)
self.stage_set(cr, uid, [lead.id], stage_id)
self._case_mark_lost_notification(lead, context=context)
return res
def case_mark_won(self, cr, uid, ids, *args):
def case_mark_won(self, cr, uid, ids, context=None):
"""Mark the case as lost: state = done and probability = 0%
"""
res = super(crm_lead, self).case_close(cr, uid, ids, *args)
res = super(crm_lead, self).case_close(cr, uid, ids, context=None)
self.write(cr, uid, ids, {'probability' : 100.0})
for l in self.browse(cr, uid, ids):
stage_id = self.stage_find_won(cr, uid, l.section_id.id or False)
for lead in self.browse(cr, uid, ids):
stage_id = self.stage_find_won(cr, uid, lead.section_id.id or False)
if stage_id:
self.stage_set(cr, uid, [l.id], stage_id)
message = _("The opportunity '%s' has been been won.") % l.name
self.log(cr, uid, l.id, message)
self.stage_set(cr, uid, [lead.id], stage_id)
self._case_mark_won_notification(lead, context=context)
return res
def set_priority(self, cr, uid, ids, priority):
@ -342,12 +363,12 @@ class crm_lead(crm_case, osv.osv):
"""
return self.write(cr, uid, ids, {'priority' : priority})
def set_high_priority(self, cr, uid, ids, *args):
def set_high_priority(self, cr, uid, ids, context=None):
"""Set lead priority to high
"""
return self.set_priority(cr, uid, ids, '1')
def set_normal_priority(self, cr, uid, ids, *args):
def set_normal_priority(self, cr, uid, ids, context=None):
"""Set lead priority to normal
"""
return self.set_priority(cr, uid, ids, '3')
@ -782,7 +803,7 @@ class crm_lead(crm_case, osv.osv):
#re-open
values.update(state=crm.AVAILABLE_STATES[1][0])
if not case.date_open:
values['date_open'] = time.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)
values['date_open'] = time.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)
res = self.write(cr, uid, [case.id], values, context=context)
return res

View File

@ -147,17 +147,6 @@
<group colspan="4">
<field colspan="4" name="email_cc" widget="char" size="512"/>
</group>
<field name="message_ids" colspan="4" nolabel="1" mode="tree" readonly="1">
<tree string="History">
<field name="display_text" string="History Information"/>
<field name="email_from" invisible="1"/>
<button
string="Reply" attrs="{'invisible': [('email_from', '=', False)]}"
name="%(mail.action_email_compose_message_wizard)d"
context="{'mail.compose.message.mode':'reply', 'message_id':active_id}"
icon="terp-mail-replied" type="action" />
</tree>
</field>
<button string="Add Internal Note"
name="%(crm.action_crm_add_note)d"
context="{'model': 'crm.lead' }"

View File

@ -311,6 +311,7 @@ class mail_message(osv.osv):
'headers': headers, # serialize the dict on the fly
'mail_server_id': mail_server_id,
'state': 'outgoing',
'type': 'email',
'auto_delete': auto_delete
}
email_msg_id = self.create(cr, uid, msg_vals, context)