[FIX] mail_gateway : Received emails are not creating dulicate attachments anymore
authorRavi Gohil (Open ERP) <rgo@tinyerp.com>
Wed, 18 May 2011 11:05:16 +0000 (16:35 +0530)
committerRavi Gohil (Open ERP) <rgo@tinyerp.com>
Wed, 18 May 2011 11:05:16 +0000 (16:35 +0530)
bzr revid: rgo@tinyerp.com-20110518110516-g6a4y8gplgtb5puh

addons/crm/crm_lead.py
addons/crm_claim/crm_claim.py
addons/crm_helpdesk/crm_helpdesk.py
addons/hr_recruitment/hr_recruitment.py
addons/mail_gateway/mail_gateway.py
addons/project_issue/project_issue.py
addons/project_mailgate/project_mailgate.py

index fb540ad..1ed32dc 100644 (file)
@@ -347,6 +347,7 @@ class crm_lead(crm_case, osv.osv):
 
         res = self.create(cr, uid, vals, context)
         attachents = msg.get('attachments', [])
+        att_ids = []
         for attactment in attachents or []:
             data_attach = {
                 'name': attactment,
@@ -356,9 +357,9 @@ class crm_lead(crm_case, osv.osv):
                 'res_model': self._name,
                 'res_id': res,
             }
-            self.pool.get('ir.attachment').create(cr, uid, data_attach)
+            att_ids.append(self.pool.get('ir.attachment').create(cr, uid, data_attach))
 
-        return res
+        return res,att_ids
 
     def message_update(self, cr, uid, ids, vals={}, msg="", default_act='pending', context=None):
         """
index 1829aa9..51b5031 100644 (file)
@@ -186,6 +186,7 @@ class crm_claim(crm.crm_case, osv.osv):
 
         res = self.create(cr, uid, vals, context)
         attachents = msg.get('attachments', [])
+        att_ids = []
         for attactment in attachents or []:
             data_attach = {
                 'name': attactment,
@@ -195,9 +196,9 @@ class crm_claim(crm.crm_case, osv.osv):
                 'res_model': self._name,
                 'res_id': res,
             }
-            self.pool.get('ir.attachment').create(cr, uid, data_attach)
+            att_ids.append(self.pool.get('ir.attachment').create(cr, uid, data_attach))
 
-        return res
+        return res,att_ids
 
     def message_update(self, cr, uid, ids, vals={}, msg="", default_act='pending', context=None):
         """
index 30a2af6..9d266e5 100644 (file)
@@ -125,6 +125,7 @@ class crm_helpdesk(crm.crm_case, osv.osv):
 
         res = self.create(cr, uid, vals, context)
         attachents = msg.get('attachments', [])
+        att_ids = []
         for attactment in attachents or []:
             data_attach = {
                 'name': attactment,
@@ -134,9 +135,9 @@ class crm_helpdesk(crm.crm_case, osv.osv):
                 'res_model': self._name,
                 'res_id': res,
             }
-            self.pool.get('ir.attachment').create(cr, uid, data_attach)
+            att_ids.append(self.pool.get('ir.attachment').create(cr, uid, data_attach))
 
-        return res
+        return res,att_ids
 
     def message_update(self, cr, uid, ids, vals={}, msg="", default_act='pending', context=None):
         """
index 02643a3..5509ba1 100644 (file)
@@ -319,7 +319,7 @@ class hr_applicant(crm.crm_case, osv.osv):
         if res:
             vals.update(res)
         res = self.create(cr, uid, vals, context=context)
-
+        att_ids = []
         attachents = msg.get('attachments', [])
         for attactment in attachents or []:
             data_attach = {
@@ -330,9 +330,9 @@ class hr_applicant(crm.crm_case, osv.osv):
                 'res_model': self._name,
                 'res_id': res,
             }
-            attach_obj.create(cr, uid, data_attach, context=context)
+            att_ids.append(attach_obj.create(cr, uid, data_attach, context=context))
 
-        return res
+        return res,att_ids
 
     def message_update(self, cr, uid, ids, vals={}, msg="", default_act='pending', context=None):
         """
index ddd2bdc..c459b25 100644 (file)
@@ -127,9 +127,12 @@ class mailgate_thread(osv.osv):
 
         for case in cases:
             attachments = []
-            for att in attach:
-                    attachments.append(att_obj.create(cr, uid, {'res_model':case._name,'res_id':case.id,'name': att[0], 'datas': base64.encodestring(att[1])}))
-
+            if attach:
+                for att in attach:
+                    if isinstance(att,(int,long)):
+                        attachments.append(att)
+                    elif isinstance(att,dict):
+                        attachments.append(att_obj.create(cr, uid, {'res_model':case._name,'res_id':case.id,'name': att[0], 'datas': base64.encodestring(att[1])}))
             partner_id = hasattr(case, 'partner_id') and (case.partner_id and case.partner_id.id or False) or False
             if not partner_id and case._name == 'res.partner':
                 partner_id = case.id
@@ -220,7 +223,7 @@ class mailgate_message(osv.osv):
         action_data = False
         action_pool = self.pool.get('ir.actions.act_window')
         message_pool = self.browse(cr ,uid, ids, context=context)[0]
-        att_ids = [x.id for x in message_pool.attachment_ids] 
+        att_ids = [x.id for x in message_pool.attachment_ids]
         action_ids = action_pool.search(cr, uid, [('res_model', '=', 'ir.attachment')])
         if action_ids:
             action_data = action_pool.read(cr, uid, action_ids[0], context=context)
@@ -356,8 +359,8 @@ class mailgate_tool(osv.osv_memory):
         @param msg: email.message.Message to forward
         @param email_error: Default Email address in case of any Problem
         """
-        model_pool = self.pool.get(model)
 
+        model_pool = self.pool.get(model)
         for res in model_pool.browse(cr, uid, res_ids, context=context):
             message_followers = model_pool.message_followers(cr, uid, [res.id])[res.id]
             message_followers_emails = self.to_email(','.join(filter(None, message_followers)))
@@ -410,7 +413,7 @@ class mailgate_tool(osv.osv_memory):
         def create_record(msg):
             att_ids = []
             if hasattr(model_pool, 'message_new'):
-                res_id = model_pool.message_new(cr, uid, msg, context=context)
+                res_id,att_ids = model_pool.message_new(cr, uid, msg, context=context)
                 if custom_values:
                     model_pool.write(cr, uid, [res_id], custom_values, context=context)
             else:
@@ -436,7 +439,6 @@ class mailgate_tool(osv.osv_memory):
                             'res_id': res_id,
                         }
                         att_ids.append(self.pool.get('ir.attachment').create(cr, uid, data_attach))
-
             return res_id, att_ids
 
         # Warning: message_from_string doesn't always work correctly on unicode,
@@ -574,7 +576,7 @@ class mailgate_tool(osv.osv_memory):
                             email_cc = msg.get('cc'),
                             message_id = msg.get('message-id'),
                             references = msg.get('references', False) or msg.get('in-reply-to', False),
-                            attach = attachments.items(),
+                            attach = attachment_ids or attachments.items(),
                             email_date = msg.get('date'),
                             context = context)
         else:
index aaaff37..0cfea4a 100644 (file)
@@ -397,6 +397,7 @@ class project_issue(crm.crm_case, osv.osv):
         self.convert_to_bug(cr, uid, [res], context=context)
 
         attachents = msg.get('attachments', [])
+        att_ids = []
         for attactment in attachents or []:
             data_attach = {
                 'name': attactment,
@@ -406,9 +407,9 @@ class project_issue(crm.crm_case, osv.osv):
                 'res_model': self._name,
                 'res_id': res,
             }
-            self.pool.get('ir.attachment').create(cr, uid, data_attach)
+            att_ids.append(self.pool.get('ir.attachment').create(cr, uid, data_attach))
 
-        return res
+        return res, att_ids
 
     def message_update(self, cr, uid, ids, vals=None, msg="", default_act='pending', context=None):
         """
index 64bb8c2..1bca312 100644 (file)
@@ -55,6 +55,7 @@ class project_tasks(osv.osv):
         res = self.create(cr, uid, data)    
         
         attachments = msg.get('attachments', [])
+        att_ids = []
         for attachment in attachments or []:
             data_attach = {
                 'name': attachment,
@@ -64,9 +65,9 @@ class project_tasks(osv.osv):
                 'res_model': self._name,
                 'res_id': res,
             }
-            self.pool.get('ir.attachment').create(cr, uid, data_attach)
+            att_ids.append(self.pool.get('ir.attachment').create(cr, uid, data_attach))
 
-        return res           
+        return res,att_ids           
     
     def message_update(self, cr, uid, id, msg, data={}, default_act='pending'): 
         mailgate_obj = self.pool.get('email.server.tools')
@@ -94,16 +95,15 @@ class project_tasks(osv.osv):
         return True
 
     def message_followers(self, cr, uid, ids, context=None):
-        res = []
+        res = {}
         if isinstance(ids, (str, int, long)):
             select = [ids]
         else:
             select = ids
         for task in self.browse(cr, uid, select, context=context):
             user_email = (task.user_id and task.user_id.address_id and task.user_id.address_id.email) or False
-            res += [(user_email, False, False, task.priority)]
-        if isinstance(ids, (str, int, long)):
-            return len(res) and res[0] or False
+            l = [user_email]
+            res[task.id] = l
         return res
 
     def msg_send(self, cr, uid, id, *args, **argv):