From 2b8e7613a0b2031fca358312e349b3cc63965106 Mon Sep 17 00:00:00 2001 From: "Nimesh (Open ERP)" Date: Wed, 12 Sep 2012 18:26:23 +0530 Subject: [PATCH 1/3] [IMP] reduce the call when rendering vote, do the related changes in py, and improve the code for js and py bzr revid: nco@tinyerp.com-20120912125623-ffrhgf84ttosjx44 --- addons/mail/mail_message.py | 25 ++++++++++++------------ addons/mail/mail_vote.py | 2 +- addons/mail/static/src/js/mail.js | 30 +++++++++++++---------------- addons/mail/static/src/xml/mail.xml | 4 ++-- 4 files changed, 29 insertions(+), 32 deletions(-) diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index 1a2cd1881ed..86bbb405b9c 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -124,7 +124,7 @@ class mail_message(osv.Model): 'unread': fields.function(_get_unread, fnct_search=_search_unread, type='boolean', string='Unread', help='Functional field to search for unread messages linked to uid'), - 'vote_user_ids': fields.many2many('mail.vote', 'message_vote_rel', 'message_id', 'vote_id', 'Votes'), + 'vote_user_ids': fields.many2many('res.users', 'mail_vote', 'message_id', 'user_id', 'Votes'), } @@ -146,21 +146,20 @@ class mail_message(osv.Model): #--------------------------------------------------- #Mail Vote system (Like or Unlike comments #----------------------------------------------------- - def vote_toggle(self, cr, uid, ids, context=None): + def vote_toggle(self, cr, uid, ids, user_ids=None, context=None): ''' Toggles when Comment is liked or unlike. create vote entries if current user like comment.. ''' + if not user_ids: user_ids = [uid] vote_pool = self.pool.get('mail.vote') - new_vote_id = False + for message in self.browse(cr, uid, ids, context): - voters_ids = [x.id for x in message.vote_user_ids if x.user_id.id == uid] + voters_ids = [x.id for x in message.vote_user_ids if x.id == uid] if not voters_ids: - new_vote_id = vote_pool.create(cr, uid, {'msg_id': message.id, 'user_id': uid}, context=context) - self.write(cr, uid, ids, {'vote_user_ids': [(4, new_vote_id)]}, context=context) + self.write(cr, uid, ids, {'vote_user_ids': [(4, user_id) for user_id in user_ids]}, context=context) else: - self.write(cr, uid, ids, {'vote_user_ids': [(3, voters_ids[0])]}, context=context) - vote_pool.unlink(cr, uid, voters_ids, context=context) + self.write(cr, uid, ids, {'vote_user_ids': [(3, uid)]}, context=context) return True #------------------------------------------------------ @@ -170,12 +169,14 @@ class mail_message(osv.Model): def _message_dict_get(self, cr, uid, msg, context=None): """ Return a dict representation of the message browse record. """ vote_pool = self.pool.get('mail.vote') + has_voted = False; + vote_ids = [] attachment_ids = self.pool.get('ir.attachment').name_get(cr, uid, [x.id for x in msg.attachment_ids], context=context) vote_ids = vote_pool.name_get(cr, uid, [x.id for x in msg.vote_user_ids], context=context) - has_voted = False; - for vote in msg.vote_user_ids: - if (uid == vote.user_id.id): - has_voted = True; + if msg.vote_user_ids: + for user_id in msg.vote_user_ids: + if (uid == user_id.id): + has_voted = True; author_id = self.pool.get('res.partner').name_get(cr, uid, [msg.author_id.id], context=context)[0] author_user_id = self.pool.get('res.users').name_get(cr, uid, [msg.author_id.user_ids[0].id], context=context)[0] partner_ids = self.pool.get('res.partner').name_get(cr, uid, [x.id for x in msg.partner_ids], context=context) diff --git a/addons/mail/mail_vote.py b/addons/mail/mail_vote.py index 5d63de80864..81ca4e4e75e 100644 --- a/addons/mail/mail_vote.py +++ b/addons/mail/mail_vote.py @@ -30,7 +30,7 @@ class mail_vote(osv.Model): _name = 'mail.vote' _description = 'Mail Vote' _columns = { - 'msg_id': fields.many2one('mail.message', 'Message', required=True), + 'message_id': fields.many2one('mail.message', 'Message', required=True), 'user_id': fields.many2one('res.users', 'User', required=True), } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index c5d4119881c..7ede8bdc7e3 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -272,7 +272,7 @@ openerp.mail = function(session) { }); return }, - + find_parent_element: function(name, message_id){ parent_element = false; _.each($(name), function(element){ @@ -283,27 +283,22 @@ openerp.mail = function(session) { return parent_element; }, - render_vote: function(message_id){ + render_vote: function(record){ + vote_element = session.web.qweb.render('VoteDisplay', {}); + var message_id = record.id var self = this; - this.ds_message.call('message_read', [[parseInt(message_id)]]).then(function(result){ - vote_count = 0; - _.each(result, function(res){ - if (res.vote_user_ids){ - vote_count = res.vote_user_ids.length; - } - parent_element = self.find_parent_element(".oe_mail_msg_vote", message_id); - vote_element = session.web.qweb.render('VoteDisplay', {'msg_id': message_id, 'vote_count': vote_count, 'has_voted': res.has_voted}); - $(parent_element).html(vote_element); - self.add_vote_event($(parent_element)); - }); - }); + var to_render_element = false; + vote_element = session.web.qweb.render('VoteDisplay', {'message_id': message_id, 'vote_count': record.vote_user_ids.length, 'has_voted': record.has_voted}); + parent_element = self.find_parent_element(".oe_mail_msg_vote",message_id); + $(parent_element).html(vote_element); + self.add_vote_event($(parent_element)); }, subscribe_vote: function(message_id){ var self = this; this.mail_message = new session.web.DataSet(this, 'mail.message'); return this.mail_message.call('vote_toggle', [[parseInt(message_id)]]).then(function(result){ - self.render_vote(message_id); + //self.render_vote(message_id); }); }, @@ -481,8 +476,6 @@ openerp.mail = function(session) { * - record.is_author: is the current user the author of the record */ display_record: function (record) { // formatting and additional fields - //Render Votes. - this.render_vote(record.id); record.date = session.web.format_value(record.date, {type:"datetime"}); record.timerelative = $.timeago(record.date); if (record.type == 'email') { @@ -509,6 +502,9 @@ openerp.mail = function(session) { moreClass: 'oe_mail_expand', lessClass: 'oe_mail_reduce', }); + + //Render Votes. + this.render_vote(record); }, /** Display 'show more' button */ diff --git a/addons/mail/static/src/xml/mail.xml b/addons/mail/static/src/xml/mail.xml index cd17838dadf..696d52e1766 100644 --- a/addons/mail/static/src/xml/mail.xml +++ b/addons/mail/static/src/xml/mail.xml @@ -99,12 +99,12 @@
  • - - From 553c04b260e63cadbffbd7391b4f5ec7417710a4 Mon Sep 17 00:00:00 2001 From: "Nimesh (Open ERP)" Date: Wed, 12 Sep 2012 18:29:55 +0530 Subject: [PATCH 2/3] [REMOVE] remove unused variable. bzr revid: nco@tinyerp.com-20120912125955-djn6ivs3vtkrw49n --- addons/mail/static/src/js/mail.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index 7ede8bdc7e3..ff0dfaa01b8 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -285,9 +285,8 @@ openerp.mail = function(session) { render_vote: function(record){ vote_element = session.web.qweb.render('VoteDisplay', {}); - var message_id = record.id var self = this; - var to_render_element = false; + var message_id = record.id vote_element = session.web.qweb.render('VoteDisplay', {'message_id': message_id, 'vote_count': record.vote_user_ids.length, 'has_voted': record.has_voted}); parent_element = self.find_parent_element(".oe_mail_msg_vote",message_id); $(parent_element).html(vote_element); From 951b6653cd58832ad2f546f05168c4da89c24ff7 Mon Sep 17 00:00:00 2001 From: "Nimesh (Open ERP)" Date: Wed, 12 Sep 2012 18:45:51 +0530 Subject: [PATCH 3/3] [ADD] add function to fatch the new vote and render it. bzr revid: nco@tinyerp.com-20120912131551-xzz16f5zuz3mlz6r --- addons/mail/static/src/js/mail.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index ff0dfaa01b8..084c1001be7 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -292,12 +292,17 @@ openerp.mail = function(session) { $(parent_element).html(vote_element); self.add_vote_event($(parent_element)); }, - + fetch_voters: function (message_id) { + var self= this + this.ds_message.call('message_read', [[parseInt(message_id)]]).then(function(result){ + self.render_vote(result[0]); + }); + }, subscribe_vote: function(message_id){ var self = this; this.mail_message = new session.web.DataSet(this, 'mail.message'); return this.mail_message.call('vote_toggle', [[parseInt(message_id)]]).then(function(result){ - //self.render_vote(message_id); + self.fetch_voters(message_id); }); },