diff --git a/addons/calendar/views/calendar_views.xml b/addons/calendar/views/calendar_views.xml index e52afaa6c42..fe8509397c8 100644 --- a/addons/calendar/views/calendar_views.xml +++ b/addons/calendar/views/calendar_views.xml @@ -359,7 +359,8 @@ diff --git a/addons/web/static/src/views/calendar/calendar_arch_parser.js b/addons/web/static/src/views/calendar/calendar_arch_parser.js index e22ede12084..52de7274b72 100644 --- a/addons/web/static/src/views/calendar/calendar_arch_parser.js +++ b/addons/web/static/src/views/calendar/calendar_arch_parser.js @@ -30,6 +30,7 @@ export class CalendarArchParser { let canCreate = true; let canDelete = true; let quickCreate = true; + let quickCreateViewId = null; let hasEditDialog = false; let showUnusualDays = false; let isDateHidden = false; @@ -85,12 +86,11 @@ export class CalendarArchParser { } if (node.hasAttribute("quick_add")) { quickCreate = archParseBoolean(node.getAttribute("quick_add"), true); - // quick_add could contain either false, true or an id for a form view - if (quickCreate) { - const viewId = parseInt(node.getAttribute("quick_add"), 10); - if (viewId > 1) { - quickCreate = viewId; - } + if (quickCreate && node.hasAttribute("quick_create_view_id")) { + quickCreateViewId = parseInt( + node.getAttribute("quick_create_view_id"), + 10 + ); } } if (node.hasAttribute("event_open_popup")) { @@ -191,6 +191,7 @@ export class CalendarArchParser { formViewId, hasEditDialog, quickCreate, + quickCreateViewId, isDateHidden, isTimeHidden, popoverFieldNodes, diff --git a/addons/web/static/src/views/calendar/calendar_model.js b/addons/web/static/src/views/calendar/calendar_model.js index 1b6729ede3f..589add42901 100644 --- a/addons/web/static/src/views/calendar/calendar_model.js +++ b/addons/web/static/src/views/calendar/calendar_model.js @@ -107,7 +107,7 @@ export class CalendarModel extends Model { return this.meta.hasEditDialog; } get hasQuickCreate() { - return Boolean(this.meta.quickCreate); + return this.meta.quickCreate; } get isDateHidden() { return this.meta.isDateHidden; @@ -144,8 +144,7 @@ export class CalendarModel extends Model { } get quickCreateFormViewId() { - const quickCreate = parseInt(this.meta.quickCreate); - return quickCreate ? quickCreate : false; + return this.meta.quickCreateViewId; } get defaultFilterLabel() { diff --git a/addons/web/static/tests/views/calendar/calendar_arch_parser_tests.js b/addons/web/static/tests/views/calendar/calendar_arch_parser_tests.js index ad5882c3462..8764bd9c643 100644 --- a/addons/web/static/tests/views/calendar/calendar_arch_parser_tests.js +++ b/addons/web/static/tests/views/calendar/calendar_arch_parser_tests.js @@ -35,6 +35,7 @@ QUnit.test("defaults", (assert) => { formViewId: false, hasEditDialog: false, quickCreate: true, + quickCreateViewId: null, isDateHidden: false, isTimeHidden: false, popoverFieldNodes: {}, @@ -95,7 +96,25 @@ QUnit.test("quickCreate", (assert) => { check(assert, "quick_add", "false", "quickCreate", false); check(assert, "quick_add", "False", "quickCreate", false); check(assert, "quick_add", "0", "quickCreate", false); - check(assert, "quick_add", "12", "quickCreate", 12); + check(assert, "quick_add", "12", "quickCreate", true); +}); + +QUnit.test("quickCreateViewId", (assert) => { + let arch = parseArch( + `` + ); + assert.strictEqual(arch.quickCreate, false); + assert.strictEqual(arch.quickCreateViewId, null); + + arch = parseArch( + `` + ); + assert.strictEqual(arch.quickCreate, true); + assert.strictEqual(arch.quickCreateViewId, 12); + + arch = parseArch(``); + assert.strictEqual(arch.quickCreate, true); + assert.strictEqual(arch.quickCreateViewId, null); }); QUnit.test("isDateHidden", (assert) => { 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 38a3b8b1f8d..bdf5aa75c92 100644 --- a/addons/web/static/tests/views/calendar/calendar_view_tests.js +++ b/addons/web/static/tests/views/calendar/calendar_view_tests.js @@ -4703,7 +4703,7 @@ QUnit.module("Views", ({ beforeEach }) => { assert.containsOnce(target, ".fc-dayGridMonth-view"); }); - QUnit.test("calendar rendering with form view id being passed in quick_add", async (assert) => { + QUnit.test("calendar with custom quick create view", async (assert) => { serviceRegistry.add( "dialog", makeFakeDialogService((className, props) => { @@ -4717,7 +4717,7 @@ QUnit.module("Views", ({ beforeEach }) => { resModel: "event", serverData, arch: ` - + `, diff --git a/odoo/addons/base/rng/calendar_view.rng b/odoo/addons/base/rng/calendar_view.rng index 1d6d2ed5138..6273f515cb3 100644 --- a/odoo/addons/base/rng/calendar_view.rng +++ b/odoo/addons/base/rng/calendar_view.rng @@ -17,7 +17,7 @@ - +