Merge pull request #498 from odoo-dev/master-calendar-meeting-ptr
authorRichard Mathot <rim@openerp.com>
Mon, 23 Jun 2014 13:15:41 +0000 (15:15 +0200)
committerRichard Mathot <rim@openerp.com>
Mon, 23 Jun 2014 13:15:41 +0000 (15:15 +0200)
[IMP] calendar: favorite contacts list

addons/calendar/__openerp__.py
addons/calendar/contacts_view.xml [deleted file]
addons/calendar/static/src/css/calendar.css
addons/calendar/static/src/js/base_calendar.js
addons/calendar/static/src/xml/base_calendar.xml
addons/web_calendar/static/src/js/web_calendar.js
addons/web_calendar/static/src/xml/web_fullcalendar.xml

index 0cae2b6..a75d897 100644 (file)
@@ -43,7 +43,6 @@ If you need to manage your meetings, you should install the CRM module.
         'security/ir.model.access.csv',
         'security/calendar_security.xml',
         'calendar_view.xml',
-        'contacts_view.xml',
         'calendar_data.xml',
         'views/calendar.xml',
     ],
diff --git a/addons/calendar/contacts_view.xml b/addons/calendar/contacts_view.xml
deleted file mode 100644 (file)
index 1d014fe..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<openerp>
-    <data>
-        <record id="view_calendar_contacts" model="ir.ui.view">
-            <field name="name">My Coworkers</field>
-            <field name="model">calendar.contacts</field>
-            <field name="arch" type="xml">
-                <tree string="contacts" editable="bottom">
-                    <field name="partner_id"/>
-                </tree>                
-            </field>
-        </record>    
-    
-        <record id="action_calendar_contacts" model="ir.actions.act_window">
-            <field name="name">Calendar Contacts</field>
-            <field name="res_model">calendar.contacts</field>
-            <field name="view_type">form</field>
-            <field name="view_mode">tree</field>
-            <field name="domain">[('user_id','=',uid)]</field>
-            <field name="view_id" ref="view_calendar_contacts" />
-            <field name="help" type="html">
-              <p class="oe_view_nocontent_create">
-                Click on "<b>create</b>" to select colleagues you want to see meetings. 
-              </p><p>
-                Your colleagues will appear in the right list to see them in the calendar view. You will easily manage collaboration and meeting with them.
-              </p>
-            </field>                       
-        </record>
-            
-    </data>
-</openerp>
\ No newline at end of file
index a22fa23..7e43b37 100644 (file)
@@ -72,3 +72,13 @@ span.no-wrap {
 .cal_tab {
     margin: 20 0 20 0;
 }
+.openerp .oe_remove_follower {
+    cursor: pointer;
+    position: absolute;
+    right: 0px;
+    line-height: 20px;
+    color: #D3D3D3;
+}
+.openerp .oe_add_input_box > div > input{
+    width: 200px;
+}
\ No newline at end of file
index 3766984..a445915 100644 (file)
@@ -1,9 +1,136 @@
 openerp.calendar = function(instance) {
-    var _t = instance.web._t;
+    var _t = instance.web._t,
+        _lt = instance.web._lt;
     var QWeb = instance.web.qweb;
 
     instance.calendar = {};
     
+function reload_favorite_list(result) {
+        var self = current = result;
+        if (result.view) {
+            self = result.view;
+        }
+        new instance.web.Model("res.users").query(["partner_id"]).filter([["id", "=",self.dataset.context.uid]]).first()
+        .done(
+            function(result) {
+                var sidebar_items = {};
+                var filter_value = result.partner_id[0];
+                var filter_item = {
+                    value: filter_value,
+                    label: result.partner_id[1] + _lt(" [Me]"),
+                    color: self.get_color(filter_value),
+                    avatar_model: self.avatar_model,
+                    is_checked: true,
+                    is_remove: false,
+                };
+
+                sidebar_items[0] = filter_item ;
+                filter_item = {
+                        value: -1,
+                        label: _lt("Everybody's calendars"),
+                        color: self.get_color(-1),
+                        avatar_model: self.avatar_model,
+                        is_checked: false
+                    };
+                sidebar_items[-1] = filter_item ;
+                //Get my coworkers/contacts
+                new instance.web.Model("calendar.contacts").query(["partner_id"]).filter([["user_id", "=",self.dataset.context.uid]]).all().then(function(result) {
+                    _.each(result, function(item) {
+                        filter_value = item.partner_id[0];
+                        filter_item = {
+                            value: filter_value,
+                            label: item.partner_id[1],
+                            color: self.get_color(filter_value),
+                            avatar_model: self.avatar_model,
+                            is_checked: true
+                        };
+                        sidebar_items[filter_value] = filter_item ;
+                    });
+                    self.all_filters = sidebar_items;
+                    self.now_filter_ids = $.map(self.all_filters, function(o) { return o.value; });
+                    
+                    self.sidebar.filter.events_loaded(self.all_filters);
+                    self.sidebar.filter.set_filters();
+                    self.sidebar.filter.set_distroy_filters();
+                    self.sidebar.filter.addInputBox();
+                    self.sidebar.filter.destroy_filter();
+                }).done(function () {
+                    self.$calendar.fullCalendar('refetchEvents');
+                    if (current.ir_model_m2o) {
+                        current.ir_model_m2o.set_value(false);
+                    }
+                });
+            });
+        }
+    instance.web_calendar.CalendarView.include({
+        extraSideBar: function(){
+            this._super();
+            if (this.useContacts){
+                new reload_favorite_list(this);
+            }
+        }
+    });
+
+    instance.web_calendar.SidebarFilter.include({
+        set_distroy_filters: function() {
+            var self = this;
+            // When mouse-enter the favorite list it will show the 'X' for removing partner from the favorite list.
+            if (self.view.useContacts){
+                self.$('.oe_calendar_all_responsibles').on('mouseenter mouseleave', function(e) {
+                    self.$('.oe_remove_follower').toggleClass('hidden', e.type == 'mouseleave');
+                });
+            }
+        },
+        addInputBox: function() {
+            var self = this;
+            if (this.dfm)
+                return;
+            this.dfm = new instance.web.form.DefaultFieldManager(self);
+            this.dfm.extend_field_desc({
+                partner_id: {
+                    relation: "res.partner",
+                },
+            });
+            this.ir_model_m2o = new instance.web.form.FieldMany2One(self.dfm, {
+                attrs: {
+                    class: 'oe_add_input_box',
+                    name: "partner_id",
+                    type: "many2one",
+                    options: '{"no_open": True}',
+                    placeholder: _t("Select Favorite Calendar"),
+                },
+            });
+            this.ir_model_m2o.insertAfter($('div.oe_calendar_filter'));
+            this.ir_model_m2o.on('change:value', self, function() { 
+                self.add_filter();
+            });
+        },
+        add_filter: function() {
+            var self = this;
+            new instance.web.Model("res.users").query(["partner_id"]).filter([["id", "=",this.view.dataset.context.uid]]).first().done(function(result){
+                $.map(self.ir_model_m2o.display_value, function(element,index) {
+                    if (result.partner_id[0] != index){
+                        self.ds_message = new instance.web.DataSetSearch(self, 'calendar.contacts');
+                        self.ds_message.call("create", [{'partner_id': index}]);
+                    }
+                });
+            });
+            new reload_favorite_list(this);
+        },
+        destroy_filter: function(e) {
+            var self= this;
+            this.$(".oe_remove_follower").on('click', function(e) {
+                self.ds_message = new instance.web.DataSetSearch(self, 'calendar.contacts');
+                if (! confirm(_t("Do you really want to delete this filter from favorite?"))) { return false; }
+                var id = $(e.currentTarget)[0].dataset.id;
+                self.ds_message.call('search', [[['partner_id', '=', parseInt(id)]]]).then(function(record){
+                    return self.ds_message.unlink(record);
+                }).done(function() {
+                    new reload_favorite_list(self);
+                });
+            });
+        },
+    });
 
     instance.web.WebClient = instance.web.WebClient.extend({
         
index 20da2ce..0939d65 100644 (file)
             </div>
         </div>
      </t>
+
+    <t t-extend="CalendarView.sidebar.responsible">
+        <t t-jquery="span#color_filter" t-operation="after">
+            <t t-if="(filters_value.value != -1) &amp;&amp; (filters_value.is_remove != false)">
+                <span class="oe_remove_follower oe_e hidden" title="Remove this favorite from the list" t-att-data-id="filters_value.value">X</span>
+           </t>
+        </t>
+    </t>
+
 </template>
index a7cff99..532dd4f 100644 (file)
@@ -325,59 +325,6 @@ openerp.web_calendar = function(instance) {
                     firstDay: translate.firstDay,
                 });
 
-            
-                if (this.useContacts) {
-                    //Get my Partner ID
-                    
-                    new instance.web.Model("res.users").query(["partner_id"]).filter([["id", "=",this.dataset.context.uid]]).first()
-                        .done(
-                            function(result) {
-                                var sidebar_items = {};
-                                var filter_value = result.partner_id[0];
-                                var filter_item = {
-                                    value: filter_value,
-                                    label: result.partner_id[1] + _lt(" [Me]"),
-                                    color: self.get_color(filter_value),
-                                    avatar_model: self.avatar_model,
-                                    is_checked: true
-                                };
-
-                                sidebar_items[filter_value] = filter_item ;
-                                filter_item = {
-                                        value: -1,
-                                        label: _lt("Everybody's calendars"),
-                                        color: self.get_color(-1),
-                                        avatar_model: self.avatar_model,
-                                        is_checked: false
-                                    };
-                                sidebar_items[-1] = filter_item ;
-                                //Get my coworkers/contacts
-                                new instance.web.Model("calendar.contacts").query(["partner_id"]).filter([["user_id", "=",self.dataset.context.uid]]).all().then(function(result) {
-                                    _.each(result, function(item) {
-                                        filter_value = item.partner_id[0];
-                                        filter_item = {
-                                            value: filter_value,
-                                            label: item.partner_id[1],
-                                            color: self.get_color(filter_value),
-                                            avatar_model: self.avatar_model,
-                                            is_checked: true
-                                        };
-                                        sidebar_items[filter_value] = filter_item ;
-                                    });
-
-                                    self.all_filters = sidebar_items;
-                                    self.now_filter_ids = $.map(self.all_filters, function(o) { return o.value; });
-                                    
-                                    self.sidebar.filter.events_loaded(self.all_filters);
-                                    self.sidebar.filter.set_filters();
-                                                                        
-                                    self.sidebar.filter.addUpdateButton();
-                                }).done(function () {
-                                    self.$calendar.fullCalendar('refetchEvents');
-                                });
-                            }
-                         );
-                }
                 this.extraSideBar();                
             }
             self.$calendar.fullCalendar(self.get_fc_init_options());
@@ -1430,20 +1377,14 @@ openerp.web_calendar = function(instance) {
             this.$el.html(QWeb.render('CalendarView.sidebar.responsible', { filters: filters }));
         },
         filter_click: function(e) {
-            var self = this;            
-            self.view.all_filters[parseInt(e.target.value)].is_checked = e.target.checked;
+            var self = this;
+            if (self.view.all_filters[0] && e.target.value == self.view.all_filters[0].value) {
+                self.view.all_filters[0].is_checked = e.target.checked;
+            } else {
+                self.view.all_filters[parseInt(e.target.value)].is_checked = e.target.checked;
+            }
             self.view.$calendar.fullCalendar('refetchEvents');
         },
-        addUpdateButton: function() {
-            var self=this;
-            this.$('div.oe_calendar_all_responsibles').append(QWeb.render('CalendarView.sidebar.button_add_contact'));
-            this.$(".add_contacts_link_btn").on('click', function() {
-                self.rpc("/web/action/load", {
-                    action_id: "calendar.action_calendar_contacts"
-                }).then( function(result) { return self.do_action(result); });
-            });
-            
-        },
     });
 
 };
index 6155997..ca4c946 100644 (file)
@@ -35,7 +35,7 @@
                    <t t-if="(filters_value.value != -1) &amp;&amp; filters_value.avatar_model ">
                        <img t-att-src="'/web/binary/image?model=' + filters_value.avatar_model + '&amp;field=image_small&amp;id=' + filters_value.value"  class="cal_avatar"/>     
                    </t>
-                   <span t-attf-class="cal_opacity underline_color_#{filters_value.color}" ><t t-esc="filters_value.label" /></span>
+                   <span id="color_filter" t-attf-class="cal_opacity underline_color_#{filters_value.color}" ><t t-esc="filters_value.label" /></span>
                </t>
            </div>
        </div>
       </t>
     </t>
   </div>
-  
-  <div t-name="CalendarView.sidebar.button_add_contact" class="oe_calendar_buttons_add_contact">
-        <button class='oe_button oe_form_button oe_link add_contacts_link_btn' style='margin-top:10px'>
-            <span class='add_contacts_link'>See Employee's Meeting</span>
-        </button>
-  </div>
-
 
   <div t-name="CalendarView.quick_create" class="oe_calendar_quick_create openerp">