Ivan Yelizariev
10 years ago
commit
0fb391c4b5
7 changed files with 169 additions and 0 deletions
-
1__init__.py
-
20__openerp__.py
-
74mail_move_message_models.py
-
37mail_move_message_views.xml
-
0static/src/css/mail_move_message.css
-
29static/src/js/mail_move_message.js
-
8static/src/xml/mail_move_message_main.xml
@ -0,0 +1 @@ |
|||
import mail_move_message_models |
@ -0,0 +1,20 @@ |
|||
{ |
|||
'name' : 'Move message to thread', |
|||
'version' : '1.0.0', |
|||
'author' : 'Ivan Yelizariev', |
|||
'category' : 'Custom', |
|||
'website' : 'https://it-projects.info', |
|||
'description': """ |
|||
Module allows move message to any thread. For example, customer send message to salesperson's alias. Then salesperson is able to move such private message to lead thread. |
|||
|
|||
Tested on Odoo 8.0 ab7b5d7732a7c222a0aea45bd173742acd47242d |
|||
""", |
|||
'depends' : ['mail'], |
|||
'data':[ |
|||
'mail_move_message_views.xml', |
|||
], |
|||
'qweb': [ |
|||
'static/src/xml/*.xml', |
|||
], |
|||
'installable': True |
|||
} |
@ -0,0 +1,74 @@ |
|||
from openerp import api, models, fields, SUPERUSER_ID |
|||
from openerp.tools.translate import _ |
|||
|
|||
class wizard(models.TransientModel): |
|||
_name = 'mail_move_message.wizard' |
|||
|
|||
message_id = fields.Many2one('mail.message', string='Message') |
|||
message_body = fields.Html(related='message_id.body', string='Message to move', readonly=True) |
|||
parent_id = fields.Many2one('mail.message', string='Search by name') |
|||
model_id = fields.Many2one('ir.model', string='Record type') |
|||
res_id = fields.Integer('Record ID') |
|||
record_url = fields.Char('Link to record', readonly=True) |
|||
|
|||
@api.onchange('parent_id') |
|||
def on_change_parent_id(self): |
|||
if self.parent_id and self.parent_id.model: |
|||
self.model_id = self.env['ir.model'].search([('model', '=', self.parent_id.model)])[0] |
|||
self.res_id = self.parent_id.res_id |
|||
else: |
|||
self.model_id = None |
|||
self.res_id = None |
|||
|
|||
@api.onchange('model_id', 'res_id') |
|||
def on_change_res(self): |
|||
if not ( self.model_id and self.res_id ): |
|||
self.record_url = '' |
|||
return |
|||
|
|||
self.record_url = '/web#id=%s&model=%s' % (self.res_id, self.model_id.model) |
|||
|
|||
@api.multi |
|||
def move(self): |
|||
for r in self: |
|||
if r.parent_id: |
|||
if not (r.parent_id.model == r.model_id.model and |
|||
r.parent_id.res_id == r.res_id): |
|||
r.parent_id = None |
|||
|
|||
r.message_id.write({'parent_id': r.parent_id.id, 'res_id': r.res_id, 'model': r.model_id.model}) |
|||
if not ( r.model_id and r.res_id ): |
|||
obj = self.pool.get('ir.model.data').get_object_reference(self._cr, SUPERUSER_ID, 'mail', 'mail_archivesfeeds')[1] |
|||
return { |
|||
'type' : 'ir.actions.client', |
|||
'name' : 'Archive', |
|||
'tag' : 'reload', |
|||
'params' : {'menu_id': obj}, |
|||
} |
|||
return { |
|||
'name': _('Record'), |
|||
'view_type': 'form', |
|||
'view_mode': 'form', |
|||
'res_model': r.model_id.model, |
|||
'res_id': r.res_id, |
|||
'views': [(False, 'form')], |
|||
'type': 'ir.actions.act_window', |
|||
} |
|||
|
|||
class mail_message(models.Model): |
|||
_inherit = 'mail.message' |
|||
|
|||
def name_get(self, cr, uid, ids, context=None): |
|||
if not (context or {}).get('extended_name'): |
|||
return super(mail_message, self).name_get(cr, uid, ids, context=context) |
|||
if isinstance(ids, (list, tuple)) and not len(ids): |
|||
return [] |
|||
if isinstance(ids, (long, int)): |
|||
ids = [ids] |
|||
reads = self.read(cr, uid, ids, ['record_name','model', 'res_id'], context=context) |
|||
res = [] |
|||
for record in reads: |
|||
name = record['record_name'] |
|||
extended_name = ' [%s] ID %s' % (record.get('model', 'UNDEF'), record.get('res_id', 'UNDEF')) |
|||
res.append((record['id'], name + extended_name)) |
|||
return res |
@ -0,0 +1,37 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<openerp><data> |
|||
|
|||
<template id="assets_backend" name="custom bar assets" inherit_id="web.assets_backend"> |
|||
<xpath expr="." position="inside"> |
|||
<link rel="stylesheet" href="/mail_move_message/static/src/css/mail_move_message.css"/> |
|||
<script type="text/javascript" src="/mail_move_message/static/src/js/mail_move_message.js"></script> |
|||
</xpath> |
|||
</template> |
|||
|
|||
<record id="view_wizard" model="ir.ui.view"> |
|||
<field name="name">mail_move_message.wizard.view</field> |
|||
<field name="model">mail_move_message.wizard</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Move Message"> |
|||
<group> |
|||
<field name="parent_id" domain="[('parent_id','=', False)]" context="{'extended_name':1}"/> |
|||
<field name="model_id" class="oe_inline"/> |
|||
<field name="res_id" class="oe_inline"/> |
|||
<field name="record_url" class="oe_inline" widget="url"/> |
|||
</group> |
|||
<separator string="Message to move"/> |
|||
<div style="height:200px;overflow-y:auto;"> |
|||
<field name="message_body"/> |
|||
</div> |
|||
<footer> |
|||
<button name="move" string="Move" type="object" class="oe_highlight"/> |
|||
or |
|||
<button string="Cancel" class="oe_link" special="cancel" /> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
</data> |
|||
</openerp> |
|||
|
@ -0,0 +1,29 @@ |
|||
openerp.mail_move_message = function (session) { |
|||
var _t = session.web._t, |
|||
_lt = session.web._lt; |
|||
|
|||
var mail = session.mail; |
|||
|
|||
mail.ThreadMessage.include({ |
|||
bind_events: function(){ |
|||
this._super.apply(this, arguments); |
|||
this.$('.oe_move').on('click', this.on_move_message) |
|||
}, |
|||
on_move_message: function(event){ |
|||
var context = { |
|||
'default_message_id': this.id |
|||
} |
|||
var action = { |
|||
type: 'ir.actions.act_window', |
|||
res_model: 'mail_move_message.wizard', |
|||
view_mode: 'form', |
|||
view_type: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: context, |
|||
}; |
|||
|
|||
this.do_action(action); |
|||
} |
|||
}) |
|||
} |
@ -0,0 +1,8 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<template> |
|||
<t t-extend="mail.thread.message"> |
|||
<t t-jquery=".oe_msg_icons" t-operation="append"> |
|||
<span t-attf-class="oe_move"><a title="Move to thread" class="oe_e">f</a></span> |
|||
</t> |
|||
</t> |
|||
</template> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue