summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/crm/crm.py20
-rw-r--r--addons/crm/crm_mailgate.py125
-rw-r--r--addons/crm/wizard/crm_send_email.py13
3 files changed, 80 insertions, 78 deletions
diff --git a/addons/crm/crm.py b/addons/crm/crm.py
index 81b6cc79f35..74f71f72931 100644
--- a/addons/crm/crm.py
+++ b/addons/crm/crm.py
@@ -501,20 +501,7 @@ class crm_case(osv.osv):
self.write(cr, uid, [case.id], {'stage_id': s[section][st]})
return True
- def history(self, cr, uid, ids, keyword, history=False, email=False, details=None, context={}):
- """
- @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 History’s IDs
- @param context: A standard dictionary for contextual values"""
-
- cases = self.browse(cr, uid, ids, context=context)
- return self.__history(cr, uid, cases, keyword=keyword, \
- history=history, email=email, details=details, \
- context=context)
-
- def __history(self, cr, uid, cases, keyword, history=False, email=False, details=None, email_from=False, context={}):
+ def __history(self, cr, uid, cases, keyword, history=False, email=False, details=None, email_from=False, message_id=False, context={}):
"""
@param self: The object pointer
@param cr: the current row, from the database cursor,
@@ -533,7 +520,8 @@ class crm_case(osv.osv):
'date': time.strftime('%Y-%m-%d %H:%M:%S'),
'model_id' : model_ids and model_ids[0] or False,
'res_id': case.id,
- 'section_id': case.section_id.id
+ 'section_id': case.section_id.id,
+ 'message_id':message_id
}
obj = self.pool.get('crm.case.log')
@@ -551,6 +539,7 @@ class crm_case(osv.osv):
res = obj.create(cr, uid, data, context)
return True
_history = __history
+ history = __history
def create(self, cr, uid, *args, **argv):
@@ -849,6 +838,7 @@ class crm_case_history(osv.osv):
'email_to': fields.char('Email TO', size=84),
'email_from' : fields.char('Email From', size=84),
'log_id': fields.many2one('crm.case.log','Log',ondelete='cascade'),
+ 'message_id': fields.char('Message Id', size=1024, readonly=True, help="Message Id on Email Server.", select=True),
}
crm_case_history()
diff --git a/addons/crm/crm_mailgate.py b/addons/crm/crm_mailgate.py
index aef624d1bf5..5b8eaf2c5e8 100644
--- a/addons/crm/crm_mailgate.py
+++ b/addons/crm/crm_mailgate.py
@@ -38,81 +38,84 @@ class crm_cases(osv.osv):
_name = "crm.case"
_inherit = "crm.case"
- def msg_new(self, cr, uid, msg):
-
- """ @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks
+ def message_new(self, cr, uid, msg, context):
+ """
+ Automatically calls when new email message arrives
+
+ @param self: The object pointer
+ @param cr: the current row, from the database cursor,
+ @param uid: the current user’s ID for security checks
"""
- mailgate_obj = self.pool.get('mail.gateway')
- msg_body = mailgate_obj.msg_body_get(msg)
- msg_subject = mailgate_obj._decode_header(msg['Subject'])
- msg_from = mailgate_obj._decode_header(msg['From'])
- msg_cc = mailgate_obj._decode_header(msg['Cc'])
- body = self.format_body(msg_body['body'])
- data = {
- 'name': msg_subject,
+ mailgate_pool = self.pool.get('email.server.tools')
+
+ subject = msg.get('subject')
+ body = msg.get('body')
+ msg_from = msg.get('from')
+ priority = msg.get('priority')
+
+ vals = {
+ 'name': subject,
'email_from': msg_from,
- 'email_cc': msg_cc,
+ 'email_cc': msg.get('cc'),
+ 'description': body,
'user_id': False,
- 'description': body,
}
- res = mailgate_obj.partner_get(cr, uid, msg_from)
+ if msg.get('priority', False):
+ vals['priority'] = priority
+
+ res = mailgate_pool.get_partner(cr, uid, msg.get('from'))
if res:
- data.update(res)
- res = self.create(cr, uid, data)
- cases = self.browse(cr, uid, [res])
- self._history(cr, uid, cases, _('Receive'), history=True, details=body, email_from=msg_from)
+ vals.update(res)
+ res = self.create(cr, uid, vals, context)
+ cases = self.browse(cr, uid, [res])
+ self._history(cr, uid, cases, _('Receive'), history=True, details=body, email_from=msg_from, message_id=msg.get('id'))
return res
- def msg_update(self, cr, uid, ids, msg, data={}, default_act='pending'):
-
- """ @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 update mail’s IDs """
-
+ def message_update(self, cr, uid, ids, msg, default_act='pending', context={}):
+ """
+ @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 update mail’s IDs
+ """
+
+ vals = { }
if isinstance(ids, (str, int, long)):
- select = [ids]
- else:
- select = ids
- mailgate_obj = self.pool.get('mail.gateway')
- msg_actions, body_data = mailgate_obj.msg_act_get(msg)
- data.update({
- 'description': body_data,
+ ids = [ids]
+
+ msg_from = msg['from']
+ vals.update({
+ 'description': msg['body']
})
- act = 'case_'+default_act
- if 'state' in msg_actions:
- if msg_actions['state'] in ['draft','close','cancel','open','pending']:
- act = 'case_' + msg_actions['state']
-
- for k1,k2 in [('cost','planned_cost'),('revenue','planned_revenue'),('probability','probability')]:
- if k1 in msg_actions:
- data[k2] = float(msg_actions[k1])
-
- if 'priority' in msg_actions:
- if msg_actions['priority'] in ('1','2','3','4','5'):
- data['priority'] = msg_actions['priority']
-
- if 'partner' in msg_actions:
- data['email_from'] = msg_actions['partner'][:128]
- msg_from = self._decode_header(msg['From'])
- res = self.write(cr, uid, select, data)
- cases = self.browse(cr, uid, select)
- self._history(cr, uid, cases, _('Receive'), history=True, details=body_data, email_from=msg['From'])
- getattr(self,act)(cr, uid, select)
+ if msg.get('priority', False):
+ vals['priority'] = msg.get('priority')
+
+# act = 'case_'+default_act
+# if 'state' in msg_actions:
+# if msg_actions['state'] in ['draft','close','cancel','open','pending']:
+# act = 'case_' + msg_actions['state']
+
+# for k1,k2 in [('cost','planned_cost'),('revenue','planned_revenue'),('probability','probability')]:
+# if k1 in msg_actions:
+# data[k2] = float(msg_actions[k1])
+
+ res = self.write(cr, uid, ids, vals)
+ cases = self.browse(cr, uid, ids)
+ message_id = context.get('message_id', False)
+ self._history(cr, uid, cases, _('Receive'), history=True, details=msg['body'], email_from=msg_from, message_id=message_id)
+ #getattr(self, act)(cr, uid, select)
return res
def emails_get(self, cr, uid, ids, context={}):
- """ Get Emails
- @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 email’s IDs
- @param context: A standard dictionary for contextual values
-
+ """
+ Get Emails
+ @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 email’s IDs
+ @param context: A standard dictionary for contextual values
"""
res = []
if isinstance(ids, (str, int, long)):
diff --git a/addons/crm/wizard/crm_send_email.py b/addons/crm/wizard/crm_send_email.py
index 93897246bf7..ac8e321c8c1 100644
--- a/addons/crm/wizard/crm_send_email.py
+++ b/addons/crm/wizard/crm_send_email.py
@@ -71,10 +71,14 @@ class crm_send_new_email(osv.osv_memory):
attach = filter(lambda x: x, [data['doc1'], data['doc2'], data['doc3']])
attach = map(lambda x: x and ('Attachment'+str(attach.index(x)+1), base64.decodestring(x)), attach)
+ message_id = None
+
if context.get('mail', 'new') == 'new':
case = case_pool.browse(cr, uid, res_id)
+ message_id = case.history_line[0].message_id
else:
hist = hist_obj.browse(cr, uid, res_id)
+ message_id = hist.message_id
model = hist.log_id.model_id.model
model_pool = self.pool.get(model)
case = model_pool.browse(cr, uid, hist.log_id.res_id)
@@ -84,7 +88,11 @@ class crm_send_new_email(osv.osv_memory):
body = case_pool.format_body(body)
email_from = data.get('email_from', False)
- case_pool._history(cr, uid, [case], _('Send'), history=True, email=data['email_to'], details=body, email_from=email_from)
+ case_pool._history(cr, uid, [case], _('Send'), history=True, email=data['email_to'], details=body, email_from=email_from, message_id=message_id)
+
+ x_headers = {
+ 'References':"%s" % (message_id)
+ }
flag = tools.email_send(
email_from,
@@ -94,6 +102,7 @@ class crm_send_new_email(osv.osv_memory):
attach=attach,
reply_to=case.section_id.reply_to,
openobject_id=str(case.id),
+ x_headers=x_headers
)
if flag:
if data['state'] == 'unchanged':
@@ -111,7 +120,7 @@ class crm_send_new_email(osv.osv_memory):
# raise osv.except_osv(_('Email!'), ("Email Successfully Sent"))
# else:
# raise osv.except_osv(_('Warning!'), _("Email not sent !"))
-
+
return {}
def default_get(self, cr, uid, fields, context=None):