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 | |
| 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.
| -rw-r--r-- | addons/calendar/__openerp__.py | 1 | ||||
| -rw-r--r-- | addons/calendar/contacts_view.xml | 31 | ||||
| -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 | ||||
| -rw-r--r-- | addons/web_calendar/static/src/js/web_calendar.js | 71 | ||||
| -rw-r--r-- | addons/web_calendar/static/src/xml/web_fullcalendar.xml | 9 |
7 files changed, 154 insertions, 106 deletions
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 @@ -<?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 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> 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 @@ <t t-if="(filters_value.value != -1) && filters_value.avatar_model "> <img t-att-src="'/web/binary/image?model=' + filters_value.avatar_model + '&field=image_small&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> @@ -53,13 +53,6 @@ </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"> |
