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