From f0765121c6d62be945b3bc577be5d3ff1fcb4daa Mon Sep 17 00:00:00 2001 From: Pariket Trivedi Date: Fri, 20 Jun 2014 15:42:26 +0530 Subject: [PATCH] [IMP] calendar: favorite contacts list Improved calendar's favorite meeting list and added a input box to directly insert the partner in favorite list and 'X' to remove the partner's name from the favorite meeting list in calendar view. --- addons/calendar/__openerp__.py | 1 - addons/calendar/contacts_view.xml | 31 ----- addons/calendar/static/src/css/calendar.css | 10 ++ .../calendar/static/src/js/base_calendar.js | 129 +++++++++++++++++- .../calendar/static/src/xml/base_calendar.xml | 9 ++ .../static/src/js/web_calendar.js | 71 +--------- .../static/src/xml/web_fullcalendar.xml | 9 +- 7 files changed, 154 insertions(+), 106 deletions(-) delete mode 100644 addons/calendar/contacts_view.xml diff --git a/addons/calendar/__openerp__.py b/addons/calendar/__openerp__.py index 0cae2b6faf9..a75d8975e0d 100644 --- a/addons/calendar/__openerp__.py +++ b/addons/calendar/__openerp__.py @@ -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 index 1d014fea1f6..00000000000 --- a/addons/calendar/contacts_view.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - My Coworkers - calendar.contacts - - - - - - - - - Calendar Contacts - calendar.contacts - form - tree - [('user_id','=',uid)] - - -

- Click on "create" to select colleagues you want to see meetings. -

- Your colleagues will appear in the right list to see them in the calendar view. You will easily manage collaboration and meeting with them. -

-
-
- -
-
\ No newline at end of file diff --git a/addons/calendar/static/src/css/calendar.css b/addons/calendar/static/src/css/calendar.css index a22fa2344ad..7e43b37a317 100644 --- a/addons/calendar/static/src/css/calendar.css +++ b/addons/calendar/static/src/css/calendar.css @@ -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 diff --git a/addons/calendar/static/src/js/base_calendar.js b/addons/calendar/static/src/js/base_calendar.js index 37669840818..a4459157f2d 100644 --- a/addons/calendar/static/src/js/base_calendar.js +++ b/addons/calendar/static/src/js/base_calendar.js @@ -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({ diff --git a/addons/calendar/static/src/xml/base_calendar.xml b/addons/calendar/static/src/xml/base_calendar.xml index 20da2cebf48..0939d65b609 100644 --- a/addons/calendar/static/src/xml/base_calendar.xml +++ b/addons/calendar/static/src/xml/base_calendar.xml @@ -73,4 +73,13 @@ + + + + + + + + + diff --git a/addons/web_calendar/static/src/js/web_calendar.js b/addons/web_calendar/static/src/js/web_calendar.js index a7cff99f436..532dd4f05b6 100644 --- a/addons/web_calendar/static/src/js/web_calendar.js +++ b/addons/web_calendar/static/src/js/web_calendar.js @@ -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); }); - }); - - }, }); }; diff --git a/addons/web_calendar/static/src/xml/web_fullcalendar.xml b/addons/web_calendar/static/src/xml/web_fullcalendar.xml index 615599781c1..ca4c9466735 100644 --- a/addons/web_calendar/static/src/xml/web_fullcalendar.xml +++ b/addons/web_calendar/static/src/xml/web_fullcalendar.xml @@ -35,7 +35,7 @@ - + @@ -53,13 +53,6 @@ - -
- -
-