diff --git a/addons/web/static/src/js/views/calendar/calendar_controller.js b/addons/web/static/src/js/views/calendar/calendar_controller.js
index edb8e54e0b7..37ee9f94fb7 100644
--- a/addons/web/static/src/js/views/calendar/calendar_controller.js
+++ b/addons/web/static/src/js/views/calendar/calendar_controller.js
@@ -51,6 +51,7 @@ var CalendarController = AbstractController.extend({
this.quickAddPop = params.quickAddPop;
this.disableQuickCreate = params.disableQuickCreate;
this.eventOpenPopup = params.eventOpenPopup;
+ this.showUnusualDays = params.showUnusualDays;
this.formViewId = params.formViewId;
this.readonlyFormViewId = params.readonlyFormViewId;
this.mapping = params.mapping;
@@ -154,6 +155,31 @@ var CalendarController = AbstractController.extend({
this.model[to]();
return this.reload();
},
+ /**
+ * @override
+ * @private
+ */
+ _update: function () {
+ var self = this;
+ if (!this.showUnusualDays) {
+ return this._super.apply(this, arguments);
+ }
+ return this._super.apply(this, arguments).then(function () {
+ self._rpc({
+ model: self.modelName,
+ method: 'get_unusual_days',
+ args: [self.model.data.start_date.format('YYYY-MM-DD'), self.model.data.end_date.format('YYYY-MM-DD')],
+ context: self.context,
+ }).then(function (data) {
+ _.each(self.$el.find('td.fc-day'), function (td) {
+ var $td = $(td);
+ if (data[$td.data('date')]) {
+ $td.addClass('o_calendar_disabled');
+ }
+ });
+ });
+ });
+ },
/**
* @private
* @param {Object} record
diff --git a/addons/web/static/src/js/views/calendar/calendar_view.js b/addons/web/static/src/js/views/calendar/calendar_view.js
index 1b081316f20..b1a6ea7be13 100644
--- a/addons/web/static/src/js/views/calendar/calendar_view.js
+++ b/addons/web/static/src/js/views/calendar/calendar_view.js
@@ -131,6 +131,7 @@ var CalendarView = AbstractView.extend({
}
this.controllerParams.eventOpenPopup = utils.toBoolElse(attrs.event_open_popup || '', false);
+ this.controllerParams.showUnusualDays = utils.toBoolElse(attrs.show_unusual_days || '', false);
this.controllerParams.mapping = mapping;
this.controllerParams.context = params.context || {};
this.controllerParams.displayName = params.action && params.action.name;
diff --git a/addons/web/static/src/scss/web_calendar.scss b/addons/web/static/src/scss/web_calendar.scss
index ed99c4fcd6f..759dfa94ad0 100644
--- a/addons/web/static/src/scss/web_calendar.scss
+++ b/addons/web/static/src/scss/web_calendar.scss
@@ -98,6 +98,10 @@ $o-cw-filter-avatar-size: 20px;
color: white;
}
+ .o_calendar_disabled {
+ background-color: $gray-200;
+ border-color: white !important;
+ }
// ====== Specific agenda types ======
// ====================================
diff --git a/odoo/addons/base/rng/calendar_view.rng b/odoo/addons/base/rng/calendar_view.rng
index a6737fbcfa2..f073bab4bf1 100644
--- a/odoo/addons/base/rng/calendar_view.rng
+++ b/odoo/addons/base/rng/calendar_view.rng
@@ -18,6 +18,7 @@
+