From 4af50da7dc0e75222ae3fd94ef7c2ac58d5a9c00 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 12 Jul 2012 13:33:26 +0200 Subject: [IMP] refactor the handling of many2many tags in issues and tasks kanban views bzr revid: abo@openerp.com-20120712113326-a0p30oij7g67gmtj --- addons/project/static/src/js/project.js | 70 +++++++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 17 deletions(-) (limited to 'addons/project/static/src') diff --git a/addons/project/static/src/js/project.js b/addons/project/static/src/js/project.js index 510fcbb99e7..978d3012b26 100644 --- a/addons/project/static/src/js/project.js +++ b/addons/project/static/src/js/project.js @@ -1,25 +1,61 @@ openerp.project = function(openerp) { openerp.web_kanban.KanbanView.include({ - on_groups_started: function() { + project_display_members_names: function() { + /* + * Set avatar title for members. + * In kanban views, many2many fields only return a list of ids. + * We can implement return value of m2m fields like [(1,"Adminstration"),...]. + */ var self = this; - self._super.apply(this, arguments); - if (this.dataset.model === 'project.project') { - /* Set avatar title for members. - In many2many fields, returns only list of ids. - we can implement return value of m2m fields like [(1,"Adminstration"),...]. - */ - var members_ids = []; - this.$element.find('.oe_kanban_project_avatars img').each(function() { - members_ids.push($(this).data('member_id')); - }); - var dataset = new openerp.web.DataSetSearch(this, 'res.users', self.session.context, [['id', 'in', _.uniq(members_ids)]]); - dataset.read_slice(['id', 'name']).then(function(result) { - _.each(result, function(v, k) { - self.$element.find('.oe_kanban_project_avatars img[data-member_id=' + v.id + ']').attr('title', v.name).tipsy({ - offset: 10 - }); + var members_ids = []; + + // Collect members ids + self.$element.find('.oe_kanban_project_avatars img').each(function() { + members_ids.push($(this).data('member_id')); + }); + + // Find their matching names + var dataset = new openerp.web.DataSetSearch(self, 'res.users', self.session.context, [['id', 'in', _.uniq(members_ids)]]); + dataset.read_slice(['id', 'name']).then(function(result) { + _.each(result, function(v, k) { + // Set the proper value in the DOM + self.$element.find('.oe_kanban_project_avatars img[data-member_id=' + v.id + ']').attr('title', v.name).tipsy({ + offset: 10 }); }); + }); + }, + project_display_categ_names: function() { + /* + * Set proper names to project categories. + * In kanban views, many2many fields only return a list of ids. + * Therefore, we have to fetch the matching data by ourselves. + */ + var self = this; + var categ_ids = []; + + // Collect categories ids + self.$element.find('.oe_form_field_many2manytags_box').each(function() { + categ_ids.push($(this).data('categ_id')); + }); + + // Find their matching names + var dataset = new openerp.web.DataSetSearch(self, 'project.category', self.session.context, [['id', 'in', _.uniq(categ_ids)]]); + dataset.read_slice(['id', 'name']).then(function(result) { + _.each(result, function(v, k) { + // Set the proper value in the DOM and display the element + self.$element.find('.oe_form_field_many2manytags_box[data-categ_id=' + v.id + ']').text(v.name).toggle(); + }); + }); + }, + on_groups_started: function() { + var self = this; + self._super.apply(self, arguments); + + if (self.dataset.model === 'project.project') { + self.project_display_members_names(); + } else if (self.dataset.model === 'project.task') { + self.project_display_categ_names(); } } }); -- cgit v1.2.3 From 14a03e0d5eda36f02a49dc204dfc700223c4852d Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 12 Jul 2012 14:38:40 +0200 Subject: [IMP] make project_display_members_names() and project_display_categ_names() CSS agnostic instead of finding DOM elements by element type *and* CSS class (with long and tending to change names), these functions will only use element type (here and ) and data attribute (which is used in the function anyway) bzr revid: abo@openerp.com-20120712123840-m8kuupefggmgl5v4 --- addons/project/static/src/js/project.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'addons/project/static/src') diff --git a/addons/project/static/src/js/project.js b/addons/project/static/src/js/project.js index 978d3012b26..0712026799b 100644 --- a/addons/project/static/src/js/project.js +++ b/addons/project/static/src/js/project.js @@ -10,7 +10,7 @@ openerp.project = function(openerp) { var members_ids = []; // Collect members ids - self.$element.find('.oe_kanban_project_avatars img').each(function() { + self.$element.find('img[data-member_id]').each(function() { members_ids.push($(this).data('member_id')); }); @@ -19,7 +19,7 @@ openerp.project = function(openerp) { dataset.read_slice(['id', 'name']).then(function(result) { _.each(result, function(v, k) { // Set the proper value in the DOM - self.$element.find('.oe_kanban_project_avatars img[data-member_id=' + v.id + ']').attr('title', v.name).tipsy({ + self.$element.find('img[data-member_id=' + v.id + ']').attr('title', v.name).tipsy({ offset: 10 }); }); @@ -35,7 +35,7 @@ openerp.project = function(openerp) { var categ_ids = []; // Collect categories ids - self.$element.find('.oe_form_field_many2manytags_box').each(function() { + self.$element.find('span[data-categ_id]').each(function() { categ_ids.push($(this).data('categ_id')); }); @@ -44,7 +44,7 @@ openerp.project = function(openerp) { dataset.read_slice(['id', 'name']).then(function(result) { _.each(result, function(v, k) { // Set the proper value in the DOM and display the element - self.$element.find('.oe_form_field_many2manytags_box[data-categ_id=' + v.id + ']').text(v.name).toggle(); + self.$element.find('span[data-categ_id=' + v.id + ']').text(v.name).toggle(); }); }); }, -- cgit v1.2.3 From 00a65e017202ebb8df5641398f65d86c498ff4f0 Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Thu, 12 Jul 2012 15:10:02 +0200 Subject: [IMP] many2many tags CSS classes have been properly namespaced (cf. this branc: ~openerp-dev/openerp-web/trunk-m2m_tags_namespacing_imp-abo): adapt views accordingly also skip the little toggle() trick - it's kinda overkill bzr revid: abo@openerp.com-20120712131002-lj085r2moshptbts --- addons/project/static/src/js/project.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/project/static/src') diff --git a/addons/project/static/src/js/project.js b/addons/project/static/src/js/project.js index 0712026799b..c8250edcafd 100644 --- a/addons/project/static/src/js/project.js +++ b/addons/project/static/src/js/project.js @@ -44,7 +44,7 @@ openerp.project = function(openerp) { dataset.read_slice(['id', 'name']).then(function(result) { _.each(result, function(v, k) { // Set the proper value in the DOM and display the element - self.$element.find('span[data-categ_id=' + v.id + ']').text(v.name).toggle(); + self.$element.find('span[data-categ_id=' + v.id + ']').text(v.name); }); }); }, -- cgit v1.2.3