diff options
| author | Pariket Trivedi <ptr@openerp.com> | 2014-06-20 15:42:26 +0530 |
|---|---|---|
| committer | Richard Mathot <rim@openerp.com> | 2014-06-23 15:03:29 +0200 |
| commit | f0765121c6d62be945b3bc577be5d3ff1fcb4daa (patch) | |
| tree | 5d0ea2e3240918a03ff8c80691ad874ac1b26d52 /addons/calendar/static/src | |
| parent | 5c0804eaef81c237043844382d6456656070fb9f (diff) | |
[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.
Diffstat (limited to 'addons/calendar/static/src')
| -rw-r--r-- | addons/calendar/static/src/css/calendar.css | 10 | ||||
| -rw-r--r-- | addons/calendar/static/src/js/base_calendar.js | 129 | ||||
| -rw-r--r-- | addons/calendar/static/src/xml/base_calendar.xml | 9 |
3 files changed, 147 insertions, 1 deletions
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 @@ </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) && (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> |
