diff --git a/addons/web/static/src/views/calendar/calendar_model.js b/addons/web/static/src/views/calendar/calendar_model.js index 1210d0282bd..443991f4145 100644 --- a/addons/web/static/src/views/calendar/calendar_model.js +++ b/addons/web/static/src/views/calendar/calendar_model.js @@ -715,8 +715,9 @@ export class CalendarModel extends Model { const colorField = fields[fieldMapping.color]; const hasFilterColorAttr = !!colorFieldName; const sameRelatedModel = - colorField.relation === field.relation || - (colorField.related && colorField.related.startsWith(`${fieldName}.`)); + colorField && + (colorField.relation === field.relation || + (colorField.related && colorField.related.startsWith(`${fieldName}.`))); let colorIndex = null; if (hasFilterColorAttr || sameRelatedModel) { colorIndex = rawFilter.colorIndex; diff --git a/addons/web/static/tests/views/calendar/calendar_view_tests.js b/addons/web/static/tests/views/calendar/calendar_view_tests.js index 924a431c64c..6cba24ebad3 100644 --- a/addons/web/static/tests/views/calendar/calendar_view_tests.js +++ b/addons/web/static/tests/views/calendar/calendar_view_tests.js @@ -2349,6 +2349,29 @@ QUnit.module("Views", ({ beforeEach }) => { ); }); + QUnit.test(`Colors: dynamic filters without any color attr`, async (assert) => { + await makeView({ + type: "calendar", + resModel: "event", + serverData, + arch: ` + + + + `, + }); + assert.hasClass(findEvent(target, 1), "o_calendar_color_0"); + assert.hasClass(findEvent(target, 2), "o_calendar_color_0"); + assert.hasClass(findEvent(target, 3), "o_calendar_color_0"); + assert.hasClass(findEvent(target, 4), "o_calendar_color_0"); + assert.hasClass(findEvent(target, 5), "o_calendar_color_0"); + assert.containsOnce(target, ".o_calendar_filter[data-name=user_id]"); + assert.containsNone( + findFilterPanelSection(target, "user_id"), + "[class*='o_cw_filter_color_']" + ); + }); + QUnit.test(`Colors: dynamic filters without color attr (related)`, async (assert) => { serverData.models.event.records = [ {