From 41a4d00abeb0f3dcf1f093f4a464ed7e13417bd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me?= Date: Tue, 18 Feb 2014 15:30:38 +0100 Subject: [PATCH] [FIX] : modified according to tde's remarks bzr revid: jem@openerp.com-20140218143038-msk038rdmrp1fox1 --- addons/crm_project_issue/project_issue.py | 44 +++++++++++++++-------- addons/mail/mail_thread.py | 32 +++++++++-------- 2 files changed, 46 insertions(+), 30 deletions(-) diff --git a/addons/crm_project_issue/project_issue.py b/addons/crm_project_issue/project_issue.py index 1a6165a3681..93b47cbf24f 100644 --- a/addons/crm_project_issue/project_issue.py +++ b/addons/crm_project_issue/project_issue.py @@ -5,28 +5,38 @@ class crm_lead_to_project_issue_wizard(osv.TransientModel): """ wizard to convert a Lead into a Project Issue and move the Mail Thread """ def action_lead_to_project_issue(self, cr, uid, ids, context=None): - # get the wizards + # get the wizards and models wizards = self.browse(cr, uid, ids, context=context) - lead_model = self.pool.get("crm.lead") - issue_model = self.pool.get("project.issue") - lead_id = context.get('active_id',0) + Lead = self.pool["crm.lead"] + Issue = self.pool["project.issue"] for wizard in wizards: # get the lead to transform - lead = lead_model.browse(cr, uid, lead_id, context=context) + lead = wizard.lead_id # create new project.issue - vals = {} - vals["name"] = lead.name - vals["description"] = lead.description - vals["email_from"] = lead.email_from - vals["partner_id"] = lead.partner_id.id - vals["project_id"] = wizard.project_id.id - issue_id = issue_model.create(cr, uid, vals, context=None) + vals = {"name": lead.name, + "description": lead.description, + "email_from": lead.email_from, + "partner_id": lead.partner_id.id, + "project_id": wizard.project_id.id + } + issue_id = Issue.create(cr, uid, vals, context=None) # move the mail thread - lead_model.transform_model_messages(cr, uid, lead_id, issue_id, "project.issue", context=context) + Lead.message_change_thread(cr, uid, lead.id, issue_id, "project.issue", context=context) # delete the lead - lead_model.unlink(cr, uid, [lead_id], context=None) - return False + Lead.unlink(cr, uid, [lead.id], context=None) + # return the action to go to the form view of the new Issue + view_id = self.pool.get('ir.ui.view').search(cr,uid,[('model','=','project.issue'), ('name','=','project_issue_form_view')]) + return { + 'name': 'Issue created', + 'view_type': 'form', + 'view_mode': 'form', + 'view_id': view_id, + 'res_model': 'project.issue', + 'type': 'ir.actions.act_window', + 'res_id': issue_id, + 'context' : context + } _name = "crm.lead2projectissue.wizard" @@ -34,4 +44,8 @@ class crm_lead_to_project_issue_wizard(osv.TransientModel): _columns = { "lead_id" : fields.many2one("crm.lead","Lead", domain=[("type","=","lead")]), "project_id" : fields.many2one("project.project", "Project", domain=[("use_issues","=",True)]) + } + + _defaults = { + "lead_id" : lambda self, cr, uid, context=None: context.get('active_id') } \ No newline at end of file diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 98b7255fcd1..6ef098644ac 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -1798,7 +1798,7 @@ class mail_thread(osv.AbstractModel): return sorted(threads, key=lambda x: (x['popularity'], x['id']), reverse=True)[:3] - def transform_model_messages(self, cr, uid, id, new_res_id, new_model, context=None): + def message_change_thread(self, cr, uid, id, new_res_id, new_model, context=None): """ Transfert the list of the mail thread messages from an model to another @@ -1806,24 +1806,26 @@ class mail_thread(osv.AbstractModel): :param new_res_id : the new res_id of the mail.message :param new_model : the name of the new model of the mail.message - Example : self.pool.get("crm.lead").transform_model_messages(self, cr, uid, 2, 4, "project.issue", context) + Example : self.pool.get("crm.lead").message_change_thread(self, cr, uid, 2, 4, "project.issue", context) will transfert thread of the lead (id=2) to the issue (id=4) """ - # get the message ids belonging to the thread to migrate - message_obj = self.pool.get('mail.message') - msg_ids = message_obj.search(cr, uid, [ - ('model', '=', self._name), - ('res_id', '=', id)], context=context) - + # get the sbtype id of the comment Message subtype_res_id = self.pool.get('ir.model.data').xmlid_to_res_id(cr, uid, 'mail.mt_comment', raise_if_not_found=True) + # get the ids of the comment and none-comment of the thread + message_obj = self.pool.get('mail.message') + msg_ids_comment = message_obj.search(cr, uid, [ + ('model', '=', self._name), + ('res_id', '=', id), + ('subtype_id.id', '=', subtype_res_id)], context=context) + msg_ids_not_comment = message_obj.search(cr, uid, [ + ('model', '=', self._name), + ('res_id', '=', id), + ('subtype_id.id', '!=', subtype_res_id)], context=context) + # update the messages - for message in message_obj.browse(cr, uid, msg_ids, context=context): - if subtype_res_id == message.subtype_id.id: - # no change the subtype - message_obj.write(cr, uid, message.id, {"res_id" : new_res_id, "model" : new_model}, context=context) - else: - # modify the subtype - message_obj.write(cr, uid, message.id, {"res_id" : new_res_id, "model" : new_model, "subtype_id" : None}, context=context) + message_obj.write(cr, uid, msg_ids_comment, {"res_id" : new_res_id, "model" : new_model}, context=context) + message_obj.write(cr, uid, msg_ids_not_comment, {"res_id" : new_res_id, "model" : new_model, "subtype_id" : None}, context=context) + return True \ No newline at end of file