diff --git a/addons/base_calendar/crm_meeting.py b/addons/base_calendar/crm_meeting.py
index 9c4cf8e95b2..1d8694977b2 100644
--- a/addons/base_calendar/crm_meeting.py
+++ b/addons/base_calendar/crm_meeting.py
@@ -281,3 +281,21 @@ class invite_wizard(osv.osv_memory):
if 'res_id' in result:
result['res_id'] = get_real_ids(result['res_id'])
return result
+
+class res_partner(osv.osv):
+ _inherit = 'res.partner'
+
+ def get_attendee_detail(self, cr, uid, ids, meeting_id, context=None):
+ datas = []
+ meeting = False
+ if meeting_id:
+ meeting = self.pool.get('crm.meeting').browse(cr, uid, int(meeting_id),context)
+ for partner in self.browse(cr, uid, ids, context=context):
+ data = self.name_get(cr, uid, [partner.id], context)[0]
+ if meeting:
+ for attendee in meeting.attendee_ids:
+ if attendee.partner_id.id == partner.id:
+ data = (data[0], data[1], attendee.state)
+ datas.append(data)
+ return datas
+
diff --git a/addons/base_calendar/crm_meeting_view.xml b/addons/base_calendar/crm_meeting_view.xml
index 388b204d176..1b3ac732491 100644
--- a/addons/base_calendar/crm_meeting_view.xml
+++ b/addons/base_calendar/crm_meeting_view.xml
@@ -51,7 +51,7 @@
-
diff --git a/addons/base_calendar/static/src/js/base_calendar.js b/addons/base_calendar/static/src/js/base_calendar.js
index 3ab3bbf2f86..d6766d61c90 100644
--- a/addons/base_calendar/static/src/js/base_calendar.js
+++ b/addons/base_calendar/static/src/js/base_calendar.js
@@ -39,139 +39,40 @@ instance.base_calendar = {}
},
});
- instance.web.form.Many2Many_invite = instance.web.form.FieldMany2ManyTags.extend({
- initialize_content: function() {
- var self = this;
- var ignore_blur = false;
- self.$text = this.$("textarea");
- if (this.get("effective_readonly"))
- return;
- self.$text.textext({
- plugins : 'tags arrow autocomplete',
- html: {
+ instance.web.form.Many2ManyAttendee = instance.web.form.FieldMany2ManyTags.extend({
+ tag_template: "many2manyattendee",
+ initialize_texttext: function() {
+ return _.extend(this._super(),{
+ html : {
tag: ''
- },
- autocomplete: {
- render: function(suggestion) {
- return $('').
- data('index', suggestion['index']).html(suggestion['label']);
- }
- },
- ext: {
- autocomplete: {
- selectFromDropdown: function() {
- this.trigger('hideDropdown');
- var index = Number(this.selectedSuggestionElement().children().children().data('index'));
- var data = self.search_result[index];
- if (data.id) {
- self.add_id(data.id);
- } else {
- ignore_blur = true;
- data.action();
- }
- this.trigger('setSuggestions', {result : []});
- },
- },
- tags: {
- isTagAllowed: function(tag) {
- return !!tag.name;
-
- },
- removeTag: function(tag) {
- var id = tag.data("id");
- self.set({"value": _.without(self.get("value"), id)});
- },
- renderTag: function(stuff) {
- return $.fn.textext.TextExtTags.prototype.renderTag.
- call(this, stuff).data("id", stuff.id);
- },
- },
- itemManager: {
- itemToString: function(item) {
- return item.name;
- },
- },
- core: {
- onSetInputData: function(e, data) {
- if (data == '') {
- this._plugins.autocomplete._suggestions = null;
- }
- this.input().val(data);
- },
- },
- },
- }).bind('getSuggestions', function(e, data) {
- var _this = this;
- var str = !!data ? data.query || '' : '';
- self.get_search_result(str).done(function(result) {
- self.search_result = result;
- $(_this).trigger('setSuggestions', {result : _.map(result, function(el, i) {
- return _.extend(el, {index:i});
- })});
- });
- }).bind('hideDropdown', function() {
- self._drop_shown = false;
- }).bind('showDropdown', function() {
- self._drop_shown = true;
+ }
});
- self.tags = self.$text.textext()[0].tags();
- self.$text
- .focusin(function () {
- self.trigger('focused');
- ignore_blur = false;
- })
- .focusout(function() {
- self.$text.trigger("setInputData", "");
- if (!ignore_blur) {
- self.trigger('blurred');
- }
- }).keydown(function(e) {
- if (e.which === $.ui.keyCode.TAB && self._drop_shown) {
- self.$text.textext()[0].autocomplete().selectFromDropdown();
- }
- });
},
- render_value: function() {
+ map_tag: function(value){
+ return _.map(value, function(el) {return {name: el[1], id:el[0], state: el[2]};})
+ },
+ get_render_data: function(ids){
var self = this;
var dataset = new instance.web.DataSetStatic(this, this.field.relation, self.build_context());
- var values = self.get("value");
- var handle_names = function(data) {
- if (self.isDestroyed())
- return;
- if (! self.get("effective_readonly")) {
- self.tags.containerElement().children().remove();
- self.$('textarea').css("padding-left", "3px");
- self.tags.addTags(_.map(data, function(el) {return {name: el[1], id:el[0]};}));
- var tag_element = self.tags.tagElements();
- _.each(data,function(value, key){
- $(tag_element[key]).find(".custom-edit").addClass(data[key][2])
- })
- } else {
- self.$el.html(QWeb.render("Many2Many_invite", {elements: data}));
- }
- };
- if (! values || values.length > 0) {
- var record = [];
- if(self.getParent().datarecord.attendee_ids){
- new instance.web.Model("calendar.attendee").call('read',[self.getParent().datarecord.attendee_ids ,['state','cn','partner_id']]).then(function(res){
- _.each(res,function(val){
- record.push([val['partner_id'][0],val['cn'],val['state']])
- });
- handle_names(record);
- });
- }
- var new_attendee = _.difference(values,self.getParent().datarecord.partner_ids)
- if(new_attendee.length > 0) {
- self._display_orderer.add(dataset.name_get(new_attendee)).done(function(res){
- _.each(res,function(val){record.push(val);})
- return handle_names(record);
- });
- }
- } else { handle_names([]); }
+ return dataset.call('get_attendee_detail',[ids, self.getParent().datarecord.id || false]);
},
+ render_tag: function(data){
+ var self = this;
+ if (! self.get("effective_readonly")) {
+ self.tags.containerElement().children().remove();
+ self.$('textarea').css("padding-left", "3px");
+ self.tags.addTags(_.map(data, function(el) {return {name: el[1], id:el[0]};}));
+ var tag_element = self.tags.tagElements();
+ _.each(data,function(value, key){
+ $(tag_element[key]).find(".custom-edit").addClass(data[key][2])
+ });
+ } else {
+ self.$el.html(QWeb.render(self.tag_template, {elements: data}));
+ }
+ }
});
instance.web.form.widgets = instance.web.form.widgets.extend({
- 'Many2Many_invite' : 'instance.web.form.Many2Many_invite',
+ 'many2manyattendee' : 'instance.web.form.Many2ManyAttendee',
});
instance.base_calendar.event = function (db, action, id, view, attendee_data) {
diff --git a/addons/base_calendar/static/src/xml/base_calendar.xml b/addons/base_calendar/static/src/xml/base_calendar.xml
index fc326f0fd05..90996ab6f94 100644
--- a/addons/base_calendar/static/src/xml/base_calendar.xml
+++ b/addons/base_calendar/static/src/xml/base_calendar.xml
@@ -1,6 +1,6 @@
-
+