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 @@
+
+
+
+
+ X
+
+
+
+
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 @@
-
-
-
-
-