diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index a4f51e81dd8..25379e946b6 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -27,6 +27,7 @@ instance.web_kanban.KanbanView = instance.web.View.extend({ this.group_by = null; this.group_by_field = {}; this.grouped_by_m2o = false; + this.many2manys = []; this.state = { groups : {}, records : {} @@ -130,12 +131,11 @@ instance.web_kanban.KanbanView = instance.web.View.extend({ } switch (node.tag) { case 'field': - if(this.fields_view.fields[ node.attrs['name'] ].type == 'many2many'){ - node.tag = 'div'; - node.attrs['class'] = 'oe_form_field oe_tags'; - node.attrs['model'] = this.fields_view.fields[node.attrs['name']].relation; - node.attrs['t-att-data'] = 'record.' + node.attrs['name'] + '.raw_value'; - }else { + if (this.fields_view.fields[node.attrs.name].type === 'many2many') { + this.many2manys.push(node.attrs.name); + node.tag = 'div'; + node.attrs['class'] = (node.attrs['class'] || '') + ' oe_form_field oe_tags'; + } else { node.tag = QWeb.prefix; node.attrs[QWeb.prefix + '-esc'] = 'record.' + node.attrs['name'] + '.value'; } @@ -388,7 +388,7 @@ instance.web_kanban.KanbanView = instance.web.View.extend({ } else { this.$el.find('.oe_kanban_draghandle').removeClass('oe_kanban_draghandle'); } - instance.web_kanban.KanbanView.postprocessing_widget_many2many_tags(self); + this.postprocess_m2m_tags(); }, on_record_moved : function(record, old_group, old_index, new_group, new_index) { var self = this; @@ -470,44 +470,48 @@ instance.web_kanban.KanbanView = instance.web.View.extend({ this.$el.find('.oe_view_nocontent').click(function() { create_nocontent.effect('bounce', {distance: 18, times: 5}, 150); }); + }, + + /* + * postprocessing of fields type many2many + * make the rpc request for all ids/model and insert value inside .oe_tags fields + */ + postprocess_m2m_tags: function() { + var self = this; + if (!this.many2manys.length) { + return; + } + var relations = {}; + this.groups.forEach(function(group) { + group.records.forEach(function(record) { + self.many2manys.forEach(function(name) { + var field = record.record[name]; + var $el = record.$('.oe_form_field.oe_tags[name=' + name + ']'); + if (!relations[field.relation]) { + relations[field.relation] = { ids: [], elements: {}}; + } + var rel = relations[field.relation]; + field.raw_value.forEach(function(id) { + rel.ids.push(id); + if (!rel.elements[id]) { + rel.elements[id] = []; + } + rel.elements[id].push($el[0]); + }); + }); + }); + }); + _.each(relations, function(rel, rel_name) { + var dataset = new instance.web.DataSetSearch(self, rel_name, self.dataset.get_context()); + dataset.name_get(_.uniq(rel.ids)).done(function(result) { + result.forEach(function(nameget) { + $(rel.elements[nameget[0]]).append('' + _.str.escapeHTML(nameget[1]) + ''); + }); + }); + }); } }); -/* -* widget for list of tags/categories -* make the rpc request for all ids/model and insert value inside .oe_tags fields -*/ -instance.web_kanban.KanbanView.postprocessing_widget_many2many_tags = function(self){ - var model_list_id={}; - - // select all widget for the kanban view or the widget inside the record - self.$el.find(".oe_form_field.oe_tags").each(function(){ - var model = $(this).attr("model"); - if(model.length){ - var data = $(this).attr("data"); - var list = data.split(","); - - //select all id (per model) - if(!model_list_id[model]) model_list_id[model]=[]; - for(var t=0;t0){ - var block = self.$el.find(".oe_form_field.oe_tags[model='" + model + "']"); - var dataset = new instance.web.DataSetSearch(self, model, self.session.context); - dataset.name_get(_.uniq( model_list_id[model] )).done( - function(result) { - for(var t=0;t'+result[t][1]+''); - } - } - ); - } - } -} function get_class(name) { return new instance.web.Registry({'tmp' : name}).get_object("tmp"); @@ -946,7 +950,7 @@ instance.web_kanban.KanbanRecord = instance.web.Widget.extend({ self.$el.data('widget', self); self.bind_events(); self.group.compute_cards_auto_height(); - instance.web_kanban.KanbanView.postprocessing_widget_many2many_tags(self); + self.view.postprocess_m2m_tags(); } else { self.destroy(); }