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