[IMP] crm_lead, crm_claim, crm_fundraising, crm_helpdesk, hr_recruitment, project_issue, project_mailgate: cleaned and updated message_new and message_update to have a cleaner mailgate. Deleted references to state update.
bzr revid: tde@openerp.com-20120604141254-4m2tnzwi88w8h2aj
This commit is contained in:
+24
-34
@@ -262,11 +262,10 @@ class crm_lead(base_stage, osv.osv):
|
||||
def get_needaction_user_ids(self, cr, uid, ids, context=None):
|
||||
result = dict.fromkeys(ids, [])
|
||||
for obj in self.browse(cr, uid, ids, context=context):
|
||||
# salesman must perform an action when in draft mode
|
||||
if obj.state == 'draft' and obj.user_id:
|
||||
if obj.thread_is_read == False and hasattr(obj, 'user_id') and obj.user_id:
|
||||
result[obj.id] = [obj.user_id.id]
|
||||
return result
|
||||
|
||||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
obj_id = super(crm_lead, self).create(cr, uid, vals, context)
|
||||
self.create_send_note(cr, uid, [obj_id], context=context)
|
||||
@@ -816,56 +815,47 @@ class crm_lead(base_stage, osv.osv):
|
||||
# ----------------------------------------
|
||||
|
||||
def message_new(self, cr, uid, msg, custom_values=None, context=None):
|
||||
""" mail_thread message_new that is called by the mailgateway:
|
||||
- create a new record of the related model
|
||||
- add the message to the thread
|
||||
This override also updates the lead according to the email.
|
||||
""" Overrides mail_thread message_new that is called by the mailgateway
|
||||
through message_process.
|
||||
This override updates the document according to the email.
|
||||
"""
|
||||
res_id = super(crm_lead, self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
||||
|
||||
name = msg.get('subject') or _("No Subject")
|
||||
description = msg.get('body')
|
||||
email_from = msg.get('from')
|
||||
email_cc = msg.get('cc')
|
||||
vals = {
|
||||
'name': name,
|
||||
'email_from': email_from,
|
||||
'email_cc': email_cc,
|
||||
'description': description,
|
||||
if custom_values is None: custom_values = {}
|
||||
custom_values.update({
|
||||
'name': msg.get('subject') or _("No Subject"),
|
||||
'description': msg.get('body_text'),
|
||||
'email_from': msg.get('from'),
|
||||
'email_cc': msg.get('cc'),
|
||||
'user_id': False,
|
||||
}
|
||||
})
|
||||
if msg.get('priority') in dict(crm.AVAILABLE_PRIORITIES):
|
||||
vals['priority'] = msg.get('priority')
|
||||
vals.update(self.message_partner_by_email(cr, uid, msg.get('from', False), context=context))
|
||||
self.write(cr, uid, [res_id], vals, context=context)
|
||||
return res_id
|
||||
custom_values['priority'] = msg.get('priority')
|
||||
custom_values.update(self.message_partner_by_email(cr, uid, msg.get('from', False), context=context))
|
||||
return super(crm_lead, self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
||||
|
||||
def message_update(self, cr, uid, ids, msg, vals=None, default_act='pending', context=None):
|
||||
""" mail_thread message_update that is called by the mailgateway:
|
||||
- add the message to the thread
|
||||
This override also updates the lead according to the email.
|
||||
def message_update(self, cr, uid, ids, msg, update_vals=None, context=None):
|
||||
""" Overrides mail_thread message_update that is called by the mailgateway
|
||||
through message_process.
|
||||
This method updates the document according to the email.
|
||||
"""
|
||||
if isinstance(ids, (str, int, long)):
|
||||
ids = [ids]
|
||||
if vals == None:
|
||||
vals = {}
|
||||
update_res = super(crm_lead, self).message_update(cr, uid, ids, msg, context=context)
|
||||
if update_vals is None: update_vals = {}
|
||||
|
||||
if msg.get('priority') in dict(crm.AVAILABLE_PRIORITIES):
|
||||
vals['priority'] = msg.get('priority')
|
||||
maps = {
|
||||
'cost':'planned_cost',
|
||||
'revenue': 'planned_revenue',
|
||||
'probability':'probability'
|
||||
'probability':'probability',
|
||||
}
|
||||
for line in msg['body_text'].split('\n'):
|
||||
for line in msg.get('body_text', '').split('\n'):
|
||||
line = line.strip()
|
||||
res = tools.misc.command_re.match(line)
|
||||
if res and maps.get(res.group(1).lower()):
|
||||
key = maps.get(res.group(1).lower())
|
||||
vals[key] = res.group(2).lower()
|
||||
self.write(cr, uid, ids, vals, context=context)
|
||||
return update_res
|
||||
|
||||
return super(crm_lead, self).message_update(cr, uid, ids, msg, update_vals=update_vals, context=context)
|
||||
|
||||
# ----------------------------------------
|
||||
# OpenChatter methods and notifications
|
||||
|
||||
@@ -70,6 +70,10 @@
|
||||
states="cancel"/>
|
||||
<button name="case_cancel" string="Cancel" type="object"
|
||||
states="draft,open,pending"/>
|
||||
<button name="message_mark_as_unread" string="Mark Unread" type="object"
|
||||
attrs="{'invisible':[('thread_is_read', '==', False)]}"/>
|
||||
<button name="message_mark_as_read" string="Mark Read" type="object"
|
||||
attrs="{'invisible':[('thread_is_read', '==', True)]}"/>
|
||||
<div class="oe_right">
|
||||
<field name="stage_id" nolabel="1" widget="statusbar"
|
||||
on_change="onchange_stage_id(stage_id)"/>
|
||||
@@ -78,6 +82,8 @@
|
||||
</div>
|
||||
<sheet layout="auto">
|
||||
<group colspan="4" col="7">
|
||||
<field name="thread_is_read"/>
|
||||
<newline/>
|
||||
<field name="name" required="1" string="Subject"/>
|
||||
<field name="priority"/>
|
||||
<field name="categ_id"
|
||||
|
||||
@@ -183,59 +183,53 @@ class crm_claim(base_stage, osv.osv):
|
||||
}
|
||||
address = self.pool.get('res.partner').browse(cr, uid, part)
|
||||
return {'value': {'email_from': address.email, 'partner_phone': address.phone}}
|
||||
|
||||
def message_new(self, cr, uid, msg, custom_values=None, context=None):
|
||||
"""Automatically called when new email message arrives"""
|
||||
res_id = super(crm_claim,self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
||||
subject = msg.get('subject')
|
||||
body = msg.get('body_text')
|
||||
msg_from = msg.get('from')
|
||||
priority = msg.get('priority')
|
||||
vals = {
|
||||
'name': subject,
|
||||
'email_from': msg_from,
|
||||
'email_cc': msg.get('cc'),
|
||||
'description': body,
|
||||
'user_id': False,
|
||||
}
|
||||
if priority:
|
||||
vals['priority'] = priority
|
||||
vals.update(self.message_partner_by_email(cr, uid, msg.get('from', False)))
|
||||
self.write(cr, uid, [res_id], vals, context=context)
|
||||
return res_id
|
||||
|
||||
def message_update(self, cr, uid, ids, msg, vals={}, default_act='pending', context=None):
|
||||
# -------------------------------------------------------
|
||||
# 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.
|
||||
"""
|
||||
if custom_values is None: custom_values = {}
|
||||
custom_values.update({
|
||||
'name': msg.get('subject') or _("No Subject"),
|
||||
'description': msg.get('body_text'),
|
||||
'email_from': msg.get('from'),
|
||||
'email_cc': msg.get('cc'),
|
||||
})
|
||||
if msg.get('priority'):
|
||||
custom_values['priority'] = msg.get('priority')
|
||||
custom_values.update(self.message_partner_by_email(cr, uid, msg.get('from'), context=context))
|
||||
return super(crm_claim,self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
||||
|
||||
def message_update(self, cr, uid, ids, msg, update_vals=None, context=None):
|
||||
""" Overrides mail_thread message_update that is called by the mailgateway
|
||||
through message_process.
|
||||
This method updates the document according to the email.
|
||||
"""
|
||||
if isinstance(ids, (str, int, long)):
|
||||
ids = [ids]
|
||||
|
||||
res_id = super(crm_claim,self).message_update(cr, uid, ids, msg, context=context)
|
||||
if update_vals is None: update_vals = {}
|
||||
|
||||
if msg.get('priority') in dict(crm.AVAILABLE_PRIORITIES):
|
||||
vals['priority'] = msg.get('priority')
|
||||
update_vals['priority'] = msg.get('priority')
|
||||
|
||||
maps = {
|
||||
'cost':'planned_cost',
|
||||
'revenue': 'planned_revenue',
|
||||
'probability':'probability'
|
||||
}
|
||||
vls = {}
|
||||
for line in msg['body_text'].split('\n'):
|
||||
line = line.strip()
|
||||
res = tools.misc.command_re.match(line)
|
||||
if res and maps.get(res.group(1).lower()):
|
||||
key = maps.get(res.group(1).lower())
|
||||
vls[key] = res.group(2).lower()
|
||||
vals.update(vls)
|
||||
update_vals[key] = res.group(2).lower()
|
||||
|
||||
# Unfortunately the API is based on lists
|
||||
# but we want to update the state based on the
|
||||
# previous state, so we have to loop:
|
||||
for case in self.browse(cr, uid, ids, context=context):
|
||||
values = dict(vals)
|
||||
if case.state in CRM_CLAIM_PENDING_STATES:
|
||||
values.update(state=crm.AVAILABLE_STATES[1][0]) #re-open
|
||||
res = self.write(cr, uid, [case.id], values, context=context)
|
||||
return res
|
||||
return super(crm_claim,self).message_update(cr, uid, ids, msg, update_vals=update_vals, context=context)
|
||||
|
||||
# ---------------------------------------------------
|
||||
# OpenChatter methods and notifications
|
||||
|
||||
@@ -127,21 +127,26 @@ class crm_fundraising(base_stage, osv.osv):
|
||||
self.create_send_note(cr, uid, [obj_id], context=context)
|
||||
return obj_id
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Mail gateway
|
||||
# -------------------------------------------------------
|
||||
|
||||
def message_new(self, cr, uid, msg, custom_values=None, context=None):
|
||||
"""Automatically called when new email message arrives"""
|
||||
res_id = super(crm_fundraising,self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
||||
vals = {
|
||||
'name': msg.get('subject'),
|
||||
""" Overrides mail_thread message_new that is called by the mailgateway
|
||||
through message_process.
|
||||
This override also updates the document according to the email.
|
||||
"""
|
||||
if custom_values is None: custom_values = {}
|
||||
custom_values.update({
|
||||
'name': msg.get('subject') or _("No Subject"),
|
||||
'description': msg.get('body_text'),
|
||||
'email_from': msg.get('from'),
|
||||
'email_cc': msg.get('cc'),
|
||||
'description': msg.get('body_text'),
|
||||
}
|
||||
priority = msg.get('priority')
|
||||
if priority:
|
||||
vals['priority'] = priority
|
||||
vals.update(self.message_partner_by_email(cr, uid, msg.get('from')))
|
||||
self.write(cr, uid, [res_id], vals, context=context)
|
||||
return res_id
|
||||
})
|
||||
if msg.get('priority'):
|
||||
custom_values['priority'] = priority
|
||||
custom_values.update(self.message_partner_by_email(cr, uid, msg.get('from'), context=context))
|
||||
return super(crm_fundraising,self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
||||
|
||||
# ---------------------------------------------------
|
||||
# OpenChatter methods and notifications
|
||||
|
||||
@@ -95,55 +95,52 @@ class crm_helpdesk(base_state, osv.osv):
|
||||
self.create_send_note(cr, uid, [obj_id], context=context)
|
||||
return obj_id
|
||||
|
||||
def message_new(self, cr, uid, msg_dict, custom_values=None, context=None):
|
||||
"""Automatically called when new email message arrives"""
|
||||
res_id = super(crm_helpdesk,self).message_new(cr, uid, msg_dict, custom_values=custom_values, context=context)
|
||||
subject = msg_dict.get('subject') or _("No Subject")
|
||||
body = msg_dict.get('body_text')
|
||||
msg_from = msg_dict.get('from')
|
||||
vals = {
|
||||
'name': subject,
|
||||
'email_from': msg_from,
|
||||
'email_cc': msg_dict.get('cc'),
|
||||
'description': body,
|
||||
'user_id': False,
|
||||
}
|
||||
vals.update(self.message_partner_by_email(cr, uid, msg_from))
|
||||
self.write(cr, uid, [res_id], vals, context)
|
||||
return res_id
|
||||
# -------------------------------------------------------
|
||||
# Mail gateway
|
||||
# -------------------------------------------------------
|
||||
|
||||
def message_update(self, cr, uid, ids, msg, vals={}, default_act='pending', context=None):
|
||||
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.
|
||||
"""
|
||||
if custom_values is None: custom_values = {}
|
||||
custom_values.update({
|
||||
'name': msg.get('subject') or _("No Subject"),
|
||||
'description': msg.get('body_text'),
|
||||
'email_from': msg.get('from'),
|
||||
'email_cc': msg.get('cc'),
|
||||
'user_id': False,
|
||||
})
|
||||
custom_values.update(self.message_partner_by_email(cr, uid, msg.get('from'), context=context))
|
||||
self.write(cr, uid, [res_id], vals, context)
|
||||
return super(crm_helpdesk,self).message_new(cr, uid, msg_dict, custom_values=custom_values, context=context)
|
||||
|
||||
def message_update(self, cr, uid, ids, msg, update_vals=None, context=None):
|
||||
""" Overrides mail_thread message_update that is called by the mailgateway
|
||||
through message_process.
|
||||
This method updates the document according to the email.
|
||||
"""
|
||||
if isinstance(ids, (str, int, long)):
|
||||
ids = [ids]
|
||||
|
||||
super(crm_helpdesk,self).message_update(cr, uid, ids, msg, context=context)
|
||||
if update_vals is None: update_vals = {}
|
||||
|
||||
if msg.get('priority') in dict(crm.AVAILABLE_PRIORITIES):
|
||||
vals['priority'] = msg.get('priority')
|
||||
update_vals['priority'] = msg.get('priority')
|
||||
|
||||
maps = {
|
||||
'cost':'planned_cost',
|
||||
'revenue': 'planned_revenue',
|
||||
'probability':'probability'
|
||||
}
|
||||
vls = {}
|
||||
for line in msg['body_text'].split('\n'):
|
||||
line = line.strip()
|
||||
res = tools.misc.command_re.match(line)
|
||||
if res and maps.get(res.group(1).lower()):
|
||||
key = maps.get(res.group(1).lower())
|
||||
vls[key] = res.group(2).lower()
|
||||
vals.update(vls)
|
||||
update_vals[key] = res.group(2).lower()
|
||||
|
||||
# Unfortunately the API is based on lists
|
||||
# but we want to update the state based on the
|
||||
# previous state, so we have to loop:
|
||||
for case in self.browse(cr, uid, ids, context=context):
|
||||
values = dict(vals)
|
||||
if case.state in CRM_HELPDESK_STATES:
|
||||
values.update(state=crm.AVAILABLE_STATES[1][0]) #re-open
|
||||
res = self.write(cr, uid, [case.id], values, context=context)
|
||||
return res
|
||||
return super(crm_helpdesk,self).message_update(cr, uid, ids, msg, update_vals=update_vals, context=context)
|
||||
|
||||
# ******************************
|
||||
# OpenChatter
|
||||
|
||||
@@ -362,54 +362,53 @@ class hr_applicant(base_stage, osv.Model):
|
||||
return value
|
||||
|
||||
def message_new(self, cr, uid, msg, custom_values=None, context=None):
|
||||
"""Automatically called when new email message arrives"""
|
||||
res_id = super(hr_applicant,self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
||||
subject = msg.get('subject') or _("No Subject")
|
||||
body = msg.get('body_text')
|
||||
msg_from = msg.get('from')
|
||||
priority = msg.get('priority')
|
||||
vals = {
|
||||
'name': subject,
|
||||
'email_from': msg_from,
|
||||
""" Overrides mail_thread message_new that is called by the mailgateway
|
||||
through message_process.
|
||||
This override updates the document according to the email.
|
||||
"""
|
||||
if custom_values is None: custom_values = {}
|
||||
custom_values.update({
|
||||
'name': msg.get('subject') or _("No Subject"),
|
||||
'description': msg.get('body_text'),
|
||||
'email_from': msg.get('from'),
|
||||
'email_cc': msg.get('cc'),
|
||||
'description': body,
|
||||
'user_id': False,
|
||||
}
|
||||
if priority:
|
||||
vals['priority'] = priority
|
||||
vals.update(self.message_partner_by_email(cr, uid, msg.get('from', False)))
|
||||
self.write(cr, uid, [res_id], vals, context)
|
||||
return res_id
|
||||
})
|
||||
if msg.get('priority'):
|
||||
custom_values['priority'] = msg.get('priority')
|
||||
custom_values.update(self.message_partner_by_email(cr, uid, msg.get('from', False), context=context))
|
||||
return super(hr_applicant,self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
||||
|
||||
def message_update(self, cr, uid, ids, msg, vals=None, default_act='pending', context=None):
|
||||
def message_update(self, cr, uid, ids, msg, update_vals=None, context=None):
|
||||
""" Override mail_thread message_update that is called by the mailgateway
|
||||
through message_process.
|
||||
This method updates the document according to the email.
|
||||
"""
|
||||
if isinstance(ids, (str, int, long)):
|
||||
ids = [ids]
|
||||
if vals is None:
|
||||
vals = {}
|
||||
msg_from = msg['from']
|
||||
vals.update({
|
||||
'description': msg['body_text']
|
||||
if update_vals is None: vals = {}
|
||||
|
||||
update_vals.update({
|
||||
'description': msg.get('body'),
|
||||
'email_from': msg.get('from'),
|
||||
'email_cc': msg.get('cc'),
|
||||
})
|
||||
if msg.get('priority', False):
|
||||
vals['priority'] = msg.get('priority')
|
||||
if msg.get('priority'):
|
||||
update_vals['priority'] = msg.get('priority')
|
||||
|
||||
maps = {
|
||||
'cost':'planned_cost',
|
||||
'cost': 'planned_cost',
|
||||
'revenue': 'planned_revenue',
|
||||
'probability':'probability'
|
||||
'probability': 'probability',
|
||||
}
|
||||
vls = { }
|
||||
for line in msg['body_text'].split('\n'):
|
||||
for line in msg.get('body_text', '').split('\n'):
|
||||
line = line.strip()
|
||||
res = tools.misc.command_re.match(line)
|
||||
if res and maps.get(res.group(1).lower(), False):
|
||||
key = maps.get(res.group(1).lower())
|
||||
vls[key] = res.group(2).lower()
|
||||
update_vals[key] = res.group(2).lower()
|
||||
|
||||
vals.update(vls)
|
||||
res = self.write(cr, uid, ids, vals, context=context)
|
||||
self.message_append_dict(cr, uid, ids, msg, context=context)
|
||||
return res
|
||||
return super(hr_applicant, self).message_update(cr, uids, ids, update_vals=update_vals, context=context)
|
||||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
obj_id = super(hr_applicant, self).create(cr, uid, vals, context=context)
|
||||
|
||||
+23
-10
@@ -571,29 +571,34 @@ class mail_thread(osv.osv):
|
||||
fields = model_pool.fields_get(cr, uid, context=context)
|
||||
data = model_pool.default_get(cr, uid, fields, context=context)
|
||||
if 'name' in fields and not data.get('name'):
|
||||
data['name'] = msg_dict.get('from','')
|
||||
data['name'] = msg_dict.get('from', '')
|
||||
if custom_values and isinstance(custom_values, dict):
|
||||
data.update(custom_values)
|
||||
res_id = model_pool.create(cr, uid, data, context=context)
|
||||
self.message_append_dict(cr, uid, [res_id], msg_dict, context=context)
|
||||
return res_id
|
||||
|
||||
def message_update(self, cr, uid, ids, msg_dict, vals={}, default_act=None, context=None):
|
||||
"""Called by ``message_process`` when a new message is received
|
||||
for an existing thread. The default behavior is to create a
|
||||
new mail.message in the given thread (by calling
|
||||
``message_append_dict``)
|
||||
Additional behavior may be implemented by overriding this
|
||||
method.
|
||||
def message_update(self, cr, uid, ids, msg_dict, update_vals=None, context=None):
|
||||
""" Called by ``message_process`` when a new message is received
|
||||
for an existing thread. The default behavior is to create a
|
||||
new mail.message in the given thread (by calling
|
||||
``message_append_dict``)
|
||||
Additional behavior may be implemented by overriding this
|
||||
method.
|
||||
|
||||
:param dict msg_dict: a map containing the email details and
|
||||
:param dict msg_dict: a map containing the email details and
|
||||
attachments. See ``message_process`` and
|
||||
``mail.message.parse()`` for details.
|
||||
:param dict context: if a ``thread_model`` value is present
|
||||
:param dict vals: a dict containing values to update records
|
||||
given their ids; if the dict is None or is
|
||||
void, no write operation is performed.
|
||||
:param dict context: if a ``thread_model`` value is present
|
||||
in the context, its value will be used
|
||||
to determine the model of the thread to
|
||||
update (instead of the current model).
|
||||
"""
|
||||
if update_vals:
|
||||
self.write(cr, uid, ids, update_vals, context=context)
|
||||
return self.message_append_dict(cr, uid, ids, msg_dict, context=context)
|
||||
|
||||
def message_thread_followers(self, cr, uid, ids, context=None):
|
||||
@@ -806,5 +811,13 @@ class mail_thread(osv.osv):
|
||||
def message_mark_as_unread(self, cr, uid, ids, context=None):
|
||||
return self.write(cr, uid, ids, {'thread_is_read': False}, context=context)
|
||||
|
||||
def get_needaction_user_ids(self, cr, uid, ids, context=None):
|
||||
result = dict.fromkeys(ids, [])
|
||||
for obj in self.browse(cr, uid, ids, context=context):
|
||||
if obj.thread_is_read == False and hasattr(obj, 'user_id') and obj.user_id:
|
||||
result[obj.id] = [obj.user_id.id]
|
||||
print 'needaction: %s' % (str(result))
|
||||
return result
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -467,69 +467,56 @@ class project_issue(base_stage, osv.osv):
|
||||
# -------------------------------------------------------
|
||||
|
||||
def message_new(self, cr, uid, msg, custom_values=None, context=None):
|
||||
"""Automatically called when new email message arrives"""
|
||||
if context is None:
|
||||
context = {}
|
||||
subject = msg.get('subject') or _('No Title')
|
||||
body = msg.get('body_text')
|
||||
msg_from = msg.get('from')
|
||||
priority = msg.get('priority')
|
||||
vals = {
|
||||
'name': subject,
|
||||
'email_from': msg_from,
|
||||
""" Overrides mail_thread message_new that is called by the mailgateway
|
||||
through message_process.
|
||||
This override updates the document according to the email.
|
||||
"""
|
||||
if custom_values is None: custom_values = {}
|
||||
if context is None: context = {}
|
||||
context['state_to'] = 'draft'
|
||||
|
||||
custom_values.update({
|
||||
'name': msg.get('subject') or _("No Subject"),
|
||||
'description': msg.get('body_text'),
|
||||
'email_from': msg.get('from'),
|
||||
'email_cc': msg.get('cc'),
|
||||
'description': body,
|
||||
'user_id': False,
|
||||
}
|
||||
if priority:
|
||||
vals['priority'] = priority
|
||||
vals.update(self.message_partner_by_email(cr, uid, msg_from))
|
||||
context.update({'state_to' : 'draft'})
|
||||
})
|
||||
if msg.get('priority'):
|
||||
custom_values['priority'] = msg.get('priority')
|
||||
custom_values.update(self.message_partner_by_email(cr, uid, msg.get('from'), context=context))
|
||||
|
||||
if custom_values and isinstance(custom_values, dict):
|
||||
vals.update(custom_values)
|
||||
|
||||
res_id = self.create(cr, uid, vals, context)
|
||||
self.message_append_dict(cr, uid, [res_id], msg, context=context)
|
||||
res_id = super(project_issue, self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
||||
self.convert_to_bug(cr, uid, [res_id], context=context)
|
||||
return res_id
|
||||
|
||||
def message_update(self, cr, uid, ids, msg, vals=None, default_act='pending', context=None):
|
||||
if vals is None:
|
||||
vals = {}
|
||||
|
||||
def message_update(self, cr, uid, ids, msg, update_vals=None, context=None):
|
||||
""" Overrides mail_thread message_update that is called by the mailgateway
|
||||
through message_process.
|
||||
This method updates the document according to the email.
|
||||
"""
|
||||
if isinstance(ids, (str, int, long)):
|
||||
ids = [ids]
|
||||
if update_vals is None: update_vals = {}
|
||||
|
||||
vals.update({
|
||||
'description': msg['body_text']
|
||||
})
|
||||
if msg.get('priority', False):
|
||||
vals['priority'] = msg.get('priority')
|
||||
|
||||
# Update doc values according to the message
|
||||
update_vals['description'] = msg.get('body_text', '')
|
||||
if msg.get('priority'):
|
||||
update_vals['priority'] = msg.get('priority')
|
||||
# Parse 'body_text' to find values to update
|
||||
maps = {
|
||||
'cost': 'planned_cost',
|
||||
'revenue': 'planned_revenue',
|
||||
'probability': 'probability'
|
||||
'probability': 'probability',
|
||||
}
|
||||
|
||||
# Reassign the 'open' state to the case if this one is in pending or done
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
if record.state in ('pending', 'done'):
|
||||
self.case_set(cr, uid, ids, 'open', {}, context=context)
|
||||
|
||||
vls = { }
|
||||
for line in msg['body_text'].split('\n'):
|
||||
for line in msg.get('body_text', '').split('\n'):
|
||||
line = line.strip()
|
||||
res = tools.misc.command_re.match(line)
|
||||
if res and maps.get(res.group(1).lower(), False):
|
||||
key = maps.get(res.group(1).lower())
|
||||
vls[key] = res.group(2).lower()
|
||||
update_vals[key] = res.group(2).lower()
|
||||
|
||||
vals.update(vls)
|
||||
res = self.write(cr, uid, ids, vals)
|
||||
self.message_append_dict(cr, uid, ids, msg, context=context)
|
||||
return res
|
||||
return super(project_issue, self).message_update(cr, uid, ids, update_vals=update_vals, context=context)
|
||||
|
||||
# -------------------------------------------------------
|
||||
# OpenChatter methods and notifications
|
||||
|
||||
@@ -19,30 +19,35 @@
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import binascii
|
||||
from osv import fields, osv
|
||||
from tools.translate import _
|
||||
import tools
|
||||
import binascii
|
||||
|
||||
|
||||
class project_tasks(osv.osv):
|
||||
_inherit = 'project.task'
|
||||
|
||||
def message_new(self, cr, uid, msg, custom_values=None, context=None):
|
||||
res_id = super(project_tasks,self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
||||
subject = msg.get('subject')
|
||||
msg_from = msg.get('from')
|
||||
data = {
|
||||
""" Overrides mail_thread message_new that is called by the mailgateway
|
||||
through message_process.
|
||||
This override updates the document according to the email.
|
||||
"""
|
||||
if custom_values is None: custom_values = {}
|
||||
custom_values.update({
|
||||
'name': subject,
|
||||
'planned_hours': 0.0,
|
||||
}
|
||||
data.update(self.message_partner_by_email(cr, uid, msg_from))
|
||||
self.write(cr, uid, [res_id], data, context)
|
||||
return res_id
|
||||
|
||||
def message_update(self, cr, uid, ids, msg, data={}, default_act='pending'):
|
||||
act = 'do_'+default_act
|
||||
'subject': msg.get('subject'),
|
||||
})
|
||||
custom_values.update(self.message_partner_by_email(cr, uid, msg.get('from', False), context=context))
|
||||
return super(project_tasks,self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
||||
|
||||
def message_update(self, cr, uid, ids, msg, update_vals=None, context=None):
|
||||
""" Overrides mail_thread message_update that is called by the mailgateway
|
||||
through message_process.
|
||||
This method updates the task according to the email.
|
||||
"""
|
||||
if update_vals is None: update_vals = {}
|
||||
act = False
|
||||
maps = {
|
||||
'cost':'planned_hours',
|
||||
}
|
||||
@@ -54,17 +59,15 @@ class project_tasks(osv.osv):
|
||||
field = maps.get(match)
|
||||
if field:
|
||||
try:
|
||||
data[field] = float(res.group(2).lower())
|
||||
update_vals[field] = float(res.group(2).lower())
|
||||
except (ValueError, TypeError):
|
||||
pass
|
||||
elif match.lower() == 'state' \
|
||||
and res.group(2).lower() in ['cancel','close','draft','open','pending']:
|
||||
act = 'do_%s' % res.group(2).lower()
|
||||
|
||||
self.write(cr, uid, ids, data, context=context)
|
||||
getattr(self,act)(cr, uid, ids, context=context)
|
||||
self.message_append_note(cr, uid, [res_id], body=msg, context=context)
|
||||
return True
|
||||
if act:
|
||||
getattr(self,act)(cr, uid, ids, context=context)
|
||||
return super(project_tasks,self).message_update(cr, uid, msg, update_vals=update_vals, context=context)
|
||||
|
||||
def message_thread_followers(self, cr, uid, ids, context=None):
|
||||
followers = super(project_tasks,self).message_thread_followers(cr, uid, ids, context=context)
|
||||
@@ -74,5 +77,5 @@ class project_tasks(osv.osv):
|
||||
followers[task.id] = filter(None, task_followers)
|
||||
return followers
|
||||
|
||||
project_tasks()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
Reference in New Issue
Block a user