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 aaed2d82abb..6ec90393b7a 100644 --- a/addons/web/static/src/js/views/calendar/calendar_controller.js +++ b/addons/web/static/src/js/views/calendar/calendar_controller.js @@ -318,7 +318,7 @@ var CalendarController = AbstractController.extend({ var options = _.extend({}, this.options, event.options, { context: context, - title: _.str.sprintf(_t('Create: %s'), (this.displayName || this.renderer.arch.attrs.string)) + title: _t('New Event') }); if (this.quick != null) { @@ -335,10 +335,7 @@ var CalendarController = AbstractController.extend({ return; } - var title = _t("Create"); - if (this.renderer.arch.attrs.string) { - title += ': ' + this.renderer.arch.attrs.string; - } + const title = _t('New Event') if (this.eventOpenPopup) { if (this.previousOpen) { this.previousOpen.close(); } this.previousOpen = new dialogs.FormViewDialog(self, { diff --git a/addons/web/static/src/js/views/calendar/calendar_model.js b/addons/web/static/src/js/views/calendar/calendar_model.js index b8a27e23035..0948383b021 100644 --- a/addons/web/static/src/js/views/calendar/calendar_model.js +++ b/addons/web/static/src/js/views/calendar/calendar_model.js @@ -489,7 +489,6 @@ return AbstractModel.extend({ _loadCalendar: function () { var self = this; this.data.fc_options = this._getFullCalendarOptions(); - var defs = _.map(this.data.filters, this._loadFilter.bind(this)); return Promise.all(defs).then(function () { @@ -550,11 +549,12 @@ return AbstractModel.extend({ var value = _.isArray(_value) ? _value[0] : _value; var f = _.find(filter.filters, function (f) {return f.value === value;}); var formater = fieldUtils.format[_.contains(['many2many', 'one2many'], field.type) ? 'many2one' : field.type]; + // By default, only current user partner is checked. return { 'id': record.id, 'value': value, 'label': formater(_value, field), - 'active': !f || f.active, + 'active': f && f.active, }; }); records.sort(function (f1,f2) { @@ -573,7 +573,7 @@ return AbstractModel.extend({ var f = _.find(filter.filters, function (f) {return f.value === value;}); me = { 'value': value, - 'label': session.name + _t(" [Me]"), + 'label': session.name, 'active': !f || f.active, }; } diff --git a/addons/web/static/src/js/views/calendar/calendar_popover.js b/addons/web/static/src/js/views/calendar/calendar_popover.js index a8b975febb4..115896133de 100644 --- a/addons/web/static/src/js/views/calendar/calendar_popover.js +++ b/addons/web/static/src/js/views/calendar/calendar_popover.js @@ -197,8 +197,14 @@ var CalendarPopover = Widget.extend(WidgetAdapterMixin, StandaloneFieldManagerMi fieldWidget.attrs.modifiers = fieldWidget.attrs.modifiers ? JSON.parse(fieldWidget.attrs.modifiers) : {}; } self._registerWidget(recordID, field.name, fieldWidget); + // Only display the fields whose attributes does not make them invisible + let fieldClass = "list-group-item flex-shrink-0 d-flex flex-wrap"; + if (fieldWidget.attrs && fieldWidget.attrs.modifiers) { + const fieldModifier = record.evalModifiers(fieldWidget.attrs.modifiers); + fieldClass += fieldModifier.invisible ? ' o_invisible_modifier' : ''; + } - var $field = $('
  • ', {class: 'list-group-item flex-shrink-0 d-flex flex-wrap'}); + var $field = $('
  • ', {class: fieldClass}); var $fieldLabel = $('', {class: 'mr-2', text: _.str.sprintf('%s : ', field.string)}); $fieldLabel.appendTo($field); var $fieldContainer = $('
    ', {class: 'flex-grow-1'}); diff --git a/addons/web/static/src/js/views/calendar/calendar_quick_create.js b/addons/web/static/src/js/views/calendar/calendar_quick_create.js index 0f6f8bd6873..59ea21c4287 100644 --- a/addons/web/static/src/js/views/calendar/calendar_quick_create.js +++ b/addons/web/static/src/js/views/calendar/calendar_quick_create.js @@ -79,7 +79,7 @@ var QuickCreate = Dialog.extend({ var val = this.$('input').val().trim(); if (!val) { this.$('label, input').addClass('o_field_invalid'); - var warnings = _.str.sprintf('
    • %s
    ', _t("Summary")); + var warnings = _.str.sprintf('
    • %s
    ', _t("Meeting Subject")); this.do_warn(_t("Invalid fields:"), warnings); } dataCalendar.title = val; diff --git a/addons/web/static/src/js/views/calendar/calendar_renderer.js b/addons/web/static/src/js/views/calendar/calendar_renderer.js index 9bc9aa0cb85..6c0efb6ff96 100644 --- a/addons/web/static/src/js/views/calendar/calendar_renderer.js +++ b/addons/web/static/src/js/views/calendar/calendar_renderer.js @@ -141,23 +141,19 @@ var SidebarFilter = Widget.extend(FieldManagerMixin, { _onFilterRemove: function (e) { var self = this; var $filter = $(e.currentTarget).closest('.o_calendar_filter_item'); - Dialog.confirm(this, _t("Do you really want to delete this filter from favorites ?"), { - confirm_callback: function () { - self._rpc({ - model: self.write_model, - method: 'unlink', - args: [[$filter.data('id')]], - }) - .then(function () { - self.trigger_up('changeFilter', { - 'fieldName': self.fieldName, - 'id': $filter.data('id'), - 'active': false, - 'value': $filter.data('value'), - }); - }); - }, - }); + self._rpc({ + model: self.write_model, + method: 'unlink', + args: [[$filter.data('id')]], + }) + .then(function () { + self.trigger_up('changeFilter', { + 'fieldName': self.fieldName, + 'id': $filter.data('id'), + 'active': false, + 'value': $filter.data('value'), + }); + }); }, }); @@ -354,6 +350,7 @@ return AbstractRenderer.extend({ record: event.extendedProps.record, color: this.getColor(event.extendedProps.color_index), showTime: !self.hideTime && event.extendedProps.showTime, + showLocation: this.state.scale !== 'month' }; this.qweb_context = qweb_context; if (_.isEmpty(qweb_context.record)) { @@ -423,6 +420,11 @@ return AbstractRenderer.extend({ $(self.calendarElement).find(`[data-event-id=${eventData.id}]`).addClass('o_cw_custom_highlight'); self._renderEventPopover(eventData, $(eventClickInfo.el)); }, + selectAllow: function (event) { + if (event.end.getDate() === event.start.getDate() || event.allDay) { + return true; + } + }, yearDateClick: function (info) { self._unselectEvent(); info.view.unselect(); diff --git a/addons/web/static/src/scss/web_calendar.scss b/addons/web/static/src/scss/web_calendar.scss index 0a0de9e931b..7530969de0c 100644 --- a/addons/web/static/src/scss/web_calendar.scss +++ b/addons/web/static/src/scss/web_calendar.scss @@ -242,6 +242,16 @@ $o-cw-filter-avatar-size: 20px; .fc-week-number { background: none; + font-size: 1.2rem; + padding: 0.1rem 0.3rem 0.1rem 0 !important; + line-height: 1; + } + .fc-day-top { + text-align: center; + padding-top: 3px; + .fc-day-number { + float: none !important; + } } .fc-day-number { @@ -251,6 +261,7 @@ $o-cw-filter-avatar-size: 20px; color: gray('900'); font-weight: 400; line-height: 1; + float: none !important; } .fc-day-top.fc-other-month { @@ -682,6 +693,10 @@ $o-cw-filter-avatar-size: 20px; background: none; } + .o_footer_shrink { + padding-top: 0px; + padding-bottom: 0px; + } .o_cw_popover_close { cursor: pointer; } @@ -703,7 +718,7 @@ $o-cw-filter-avatar-size: 20px; .o_cw_popover_fields_secondary { max-height: 170px; // Fallback for old browsers - max-height: 25vh; + max-height: 75vh; overflow: auto; padding-bottom: 1px; // prevents the scrollbar to show when not needed diff --git a/addons/web/static/src/xml/web_calendar.xml b/addons/web/static/src/xml/web_calendar.xml index 05c71c7312b..274c6f7e867 100644 --- a/addons/web/static/src/xml/web_calendar.xml +++ b/addons/web/static/src/xml/web_calendar.xml @@ -15,6 +15,7 @@
    +
    @@ -43,7 +44,7 @@