[IMP]:many2many widget for attendee status
authorajay javiya (OpenERP) <aja@tinyerp.com>
Mon, 21 Oct 2013 13:46:06 +0000 (19:16 +0530)
committerajay javiya (OpenERP) <aja@tinyerp.com>
Mon, 21 Oct 2013 13:46:06 +0000 (19:16 +0530)
bzr revid: aja@tinyerp.com-20131021134606-8vyme72b8mh62s95

addons/base_calendar/crm_meeting.py
addons/base_calendar/crm_meeting_view.xml
addons/base_calendar/static/src/js/base_calendar.js
addons/base_calendar/static/src/xml/base_calendar.xml

index 9c4cf8e..1d86949 100644 (file)
@@ -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
+            
index 388b204..1b3ac73 100644 (file)
@@ -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>
index 3ab3bbf..d6766d6 100644 (file)
@@ -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) {
index fc326f0..90996ab 100644 (file)
@@ -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">