[IMP]:many2many widget for attendee status
bzr revid: aja@tinyerp.com-20131021134606-8vyme72b8mh62s95
This commit is contained in:
parent
35d6137e82
commit
d8ff3d8422
|
@ -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
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
</h1>
|
||||
<label for="partner_ids" class="oe_edit_only"/>
|
||||
<h2>
|
||||
<field name="partner_ids" widget="Many2Many_invite"
|
||||
<field name="partner_ids" widget="many2manyattendee"
|
||||
context="{'force_email':True}"
|
||||
on_change="onchange_partner_ids(partner_ids)"/>
|
||||
</h2>
|
||||
|
|
|
@ -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: '<div class="text-tag"><div class="text-button"><a class="oe_invitation custom-edit"/><span class="text-label"/><a class="text-remove"/></div></div>'
|
||||
},
|
||||
autocomplete: {
|
||||
render: function(suggestion) {
|
||||
return $('<span class="text-label"/>').
|
||||
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) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<template>
|
||||
<t t-name="Many2Many_invite" >
|
||||
<t t-name="many2manyattendee">
|
||||
<t t-set="i" t-value="0"/>
|
||||
<t t-foreach="elements" t-as="el">
|
||||
<span class="oe_tag" t-att-data-index="i">
|
||||
|
|
Loading…
Reference in New Issue