diff --git a/addons/web/static/src/legacy/js/control_panel/control_panel_model_extension.js b/addons/web/static/src/legacy/js/control_panel/control_panel_model_extension.js
index 46e6571f589..b2c19d6b250 100644
--- a/addons/web/static/src/legacy/js/control_panel/control_panel_model_extension.js
+++ b/addons/web/static/src/legacy/js/control_panel/control_panel_model_extension.js
@@ -429,7 +429,10 @@ odoo.define("web/static/src/js/control_panel/control_panel_model_extension.js",
const groups = this._getGroups();
const userContext = this.env.session.user_context;
try {
- return Domain.prototype.stringToArray(this._getDomain(groups), userContext);
+ return Domain.prototype.stringToArray(
+ this._getDomain(groups),
+ Object.assign({}, this.actionContext, userContext)
+ );
} catch (err) {
throw new Error(
`${this.env._t("Control panel model extension failed to evaluate domain")}:/n${JSON.stringify(err)}`
diff --git a/addons/web/static/src/search/search_model.js b/addons/web/static/src/search/search_model.js
index b8995f199c2..9ca0506e4c4 100644
--- a/addons/web/static/src/search/search_model.js
+++ b/addons/web/static/src/search/search_model.js
@@ -1423,7 +1423,9 @@ export class SearchModel extends EventBus {
let domain;
try {
domain = Domain.and(domains);
- return params.raw ? domain : domain.toList(this.userService.context);
+ return params.raw ? domain : domain.toList(
+ Object.assign({}, this.globalContext, this.userService.context)
+ );
} catch (error) {
throw new Error(
`${this.env._t("Failed to evaluate the domain")} ${domain.toString()}.\n${
diff --git a/addons/web/static/tests/legacy/control_panel/control_panel_tests.js b/addons/web/static/tests/legacy/control_panel/control_panel_tests.js
index 7fe27ac1b3f..5b23b597743 100644
--- a/addons/web/static/tests/legacy/control_panel/control_panel_tests.js
+++ b/addons/web/static/tests/legacy/control_panel/control_panel_tests.js
@@ -281,5 +281,27 @@ odoo.define('web.control_panel_tests', function (require) {
"hasn't autofocused search field");
});
+ QUnit.test("dynamic domains evaluation using global context", async function (assert) {
+ const arch = `
+
+
+
+ `;
+ const context = {
+ search_default_filter: true,
+ my_date: "2021-09-17",
+ };
+ const fields = this.fields;
+ const searchMenuTypes = ['filter'];
+ const controlPanel = await createControlPanel({
+ cpModelConfig: { arch, fields, searchMenuTypes, context },
+ cpProps: { fields, searchMenuTypes },
+ });
+ assert.deepEqual(
+ controlPanel.getQuery().domain,
+ [['date_deadline', '<', "2021-09-17"]]
+ );
+ });
+
});
});
diff --git a/addons/web/static/tests/search/search_model_tests.js b/addons/web/static/tests/search/search_model_tests.js
index 90a0bfd9f43..f5c7d0ebaed 100644
--- a/addons/web/static/tests/search/search_model_tests.js
+++ b/addons/web/static/tests/search/search_model_tests.js
@@ -870,4 +870,23 @@ QUnit.module("Search", (hooks) => {
model.toggleSearchItem(i + 1);
}
});
+
+ QUnit.test("dynamic domains evaluation using global context", async function (assert) {
+ const searchViewArch = `
+
+
+
+ `;
+
+ const model = await makeSearchModel({
+ serverData,
+ searchViewArch,
+ context: {
+ "my_date": "2021-09-17"
+ }
+ });
+
+ model.toggleSearchItem(1);
+ assert.deepEqual(model.domain, [['date_deadline', '<', "2021-09-17"]]);
+ });
});